Я использую собственный ZFS с "ZFS на Linux", установленном от PPA здесь. Установка не была проблемой, и я использую ее в зеркальной конфигурации с двумя WD Красные жесткие диски на 4 ТБ. К сожалению, у меня есть проблемы производительности при записи в дисковый массив. Когда чтение производительности в порядке.
У меня есть проблема, которую во время больших записей к массиву, процесс копии останавливает к ~5-10MB/s каждым ~5 секундам, как сообщается rsync. Остановы промежутка скоростей являются ~75MB/s, который встроен с другими файловыми системами и что я ожидал бы от системы (я попробовал btrfs, который получает ~85MB/s). Взгляд на iotop
Я нашел, что остановы копии совпадают с процессом txg_sync
performing/hogging ввод-вывод. Эта проблема, кажется, проблема "пульсирующего" ввода-вывода, который, кажется, распространенная проблема с ZFS (см. здесь и здесь). Я применил опцию из первой ссылки
options zfs zfs_prefetch_disable=1
который помог несколько с проблемами производительности, но не решил их. 5 интервалов с txg_sync
кажется, тот из vfs.zfs.txg.timeout = "5" (например, 5 с), который является настройкой по умолчанию ZFS на Linux.
Это нормальное поведение или является там другими настройками, я могу попробовать? Если так, какие-либо предложения? Обратите внимание, что я не мог найти многие опции в обеих ссылках...
РЕДАКТИРОВАНИЕ 2: продолжать немного: система, которую я использую, является Микросервером HP ProLiant N36L, который я обновил до 8 ГБ RAM ECC. Команды, которые я использовал для создания объема ZFS, даны здесь. Обратите внимание, что я использую -o ashift=12
когда я нашел (найденный на zfsonlinux FAQ), что это должно заставить 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
Пакоман, Кажется, что из-за того, что у вас есть два двух диска WD-RED в зеркале, ввод-вывод для записи группы согласованности ZIL на диск вызывает высокий ввод-вывод. Всегда есть ЗИЛ (Write-Cache). Если у вас нет устройств журнала, то устройство журнала находится в самом пуле и может иметь максимальную скорость записи * 5 секунд. Вы, вероятно, читаете из ЗИЛа и фиксируете данные в постоянном хранилище каждые 5 секунд. Вопросы:
Я бы порекомендовал создать SLOG где-нибудь, а не в пуле (даже загрузочное устройство лучше, чем нигде, если оно НЕ флэш). Таким образом, вы не будете интенсивно читать и писать в зеркало каждые 5 секунд.