Я столкнулся с очень странной проблемой производительности
У меня есть приложение, которое обрабатывает некоторые данные и создает файлы размером 100 ГБ или около того. Это работает нормально, и после этого я могу скопировать файлы с машины. Локальные диски - это ZFS. Может быть, в этом проблема.
Однако если я запустил другую утилиту, которая отображает файлы и меняет местами байты файлов, перед тем как скопировать файлы, файлы: 1) передача с твердотельного диска намного медленнее, может быть, 50 МБ / с (или хуже), systat -iostat показывает гораздо более высокий уровень дисковых транзакций. 2) Проводная память машины идет наверх, чтобы вместить 70+ ГБ ARC Дуга в 70 ГБ кажется смешной, поскольку это примерно четверть локального дискового хранилища. Если после передачи файлы удаляются, ARC падает, а проводная память - нет. Есть идеи о том, что происходит?
ZFS на не-Солярских платформах, кажется, имеет очень низкую производительность, когда для записи данных используется mmap()
.
См. этот поток из старого списка рассылки OpenSolaris:
Исправления для субоптимальной производительности ммап на zfs
Я получаю субоптимальную производительность с БД, основанной на ммапе. (mongodb), которая работает на zfs Solaris 10u9.
...
Это было на более старой версии Solaris. Это актуально из-за потока из списка рассылки FreeBSD в июле 2016 года (курсив добавлен):
Краткая история: ZFS была включена в ядро и никогда не была корректной. интегрированная в систему управления страницами виртуальных машин, что приводит к ДРАМАТИЧЕСКОМУ бедствию производительность для всего, что использует mmap() для записи IO. Это была решена в Oracle Solaris с помощью отличного аллокатора VM, который приземлился после того, как Opensolaris снова стал закрытым источником.
Без полного переписывания системы VM эта проблема заключается в следующем. неразрешимый.
с этим последующим :
... поскольку первоначальный импорт очень мало был сделан для улучшения интеграции, и я не знаю никого, кто бы справился с этой задачей. интерес к нему. Следовательно, производительность mmap() скорее всего "обречена". в обозримом будущем.
Так что проблема была исправлена на Solaris, а не на FreeBSD.
Если вам нужно иметь более быструю mmap()
производительность, я бы порекомендовал резко ограничить размер вашего ZFS ARC. Это должно уменьшить влияние проблем когерентности между кэшем страниц, который использует mmap()
и ARC. Это может улучшить производительность. Но опять же, может и нет. Но стоит попробовать. Только не становитесь слишком маленькими, иначе ваш лимит ARC будет проигнорирован.