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