Я использую родную ZFS с установленной ZFS в Linux из PPA. Вот. Установка не была проблемой, и я использую ее в зеркальной конфигурации с двумя жесткими дисками WD 4TB Red. К сожалению, у меня проблемы с производительностью, когда письмо на диск-массив. При чтении производительность ОК.
У меня проблема, что во время больших операций записи в массив процесс копирования останавливается до ~ 5-10 МБ / с каждые ~ 5 секунд, как сообщает rsync. Скорость между стойками составляет ~ 75 МБ / с, что соответствует другим файловым системам и что я ожидал от системы (я пробовал btrfs, который получает ~ 85 МБ / с). Смотря на iotop
Я обнаружил, что копировальные киоски совпадают с процессом txg_sync
выполнение / зависание ввода / вывода. Эта проблема, по-видимому, связана с "прерывистым" вводом-выводом, который, по-видимому, является общей проблемой для ZFS (см. Вот и Вот). Я применил вариант по первой ссылке
options zfs zfs_prefetch_disable=1
что немного помогло с проблемами производительности, но не решило их. 5-секундный интервал txg_sync
похоже на vfs.zfs.txg.timeout = "5" (например, 5s), что является настройкой ZFS по умолчанию в Linux.
Это нормальное поведение или есть другие настройки, которые я могу попробовать? Если да, есть предложения? Обратите внимание, что я не смог найти многие варианты в обеих ссылках ...
РЕДАКТИРОВАТЬ 2: В заключение: система, которую я использую, - это HP ProLiant Microserver N36L, которую я обновил до 8GB ECC RAM. Здесь приведены команды, которые я использовал для создания тома ZFS. Обратите внимание, что я использую -o ashift=12
как я обнаружил (можно найти в FAQ по zfsonlinux), это должно заставить ZFS хорошо работать с 4096-байтовыми блоками дисков расширенного формата.
$ zpool create -o ashift=12 -m /zpools/tank tank mirror ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E0871252 ata-WDC_WD40EFRX-68WT0N0_WD-WCC4E3PKP1R0
$ zfs set relatime=on tank
$ zfs set compression=lz4 tank
$ zfs create -o casesensitivity=mixed tank/data
Добавил zfs_prefetch_disable
возможность /etc/modprob.d/zfs.conf
чтобы сделать изменения постоянными:
options zfs zfs_prefetch_disable=1
Так что:
$ cat /sys/module/zfs/parameters/zfs_prefetch_disable
1
РЕДАКТИРОВАТЬ 1: По запросу я добавил zpool get all
вывод. Обратите внимание, что я забыл упомянуть, что я включил сжатие в пуле ...
$ zpool get all
NAME PROPERTY VALUE SOURCE
tank size 3.62T -
tank capacity 39% -
tank altroot - default
tank health ONLINE -
tank guid 12372923926654962277 default
tank version - default
tank bootfs - default
tank delegation on default
tank autoreplace off default
tank cachefile - default
tank failmode wait default
tank listsnapshots off default
tank autoexpand off default
tank dedupditto 0 default
tank dedupratio 1.00x -
tank free 2.21T -
tank allocated 1.42T -
tank readonly off -
tank ashift 12 local
tank comment - default
tank expandsize 0 -
tank freeing 0 default
tank feature@async_destroy enabled local
tank feature@empty_bpobj active local
tank feature@lz4_compress active local
Pacoman, похоже, что из-за того, что у вас есть два двух диска WD-RED в зеркале, ввод-вывод для записи группы согласованности ZIL на диск вызывает высокий ввод-вывод. Всегда есть ЗИЛ (Write-Cache). Если у вас нет устройств LOG, тогда устройство журнала находится в самом пуле и может иметь максимальную скорость записи * 5 секунд. Вы, вероятно, читаете из ЗИЛа и фиксируете данные в постоянном хранилище каждые 5 секунд. Вопросы:
Я бы порекомендовал создать SLOG где-нибудь, а не в пуле (даже загрузочное устройство лучше, чем нигде, если оно НЕ мигает). Таким образом, вы не будете интенсивно читать и писать в зеркало каждые 5 секунд.