Назад | Перейти на главную страницу

Низкая производительность из-за txg_sync для ZFS 0.6.3 в Ubuntu 14.04

Я использую родную 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 секунд. Вопросы:

  1. У вас есть устройство SLOG? В идеале это DRAM Drive (HGST ZeusRAM и т. Д.).
  2. Есть ли у вас кеш-устройства для чтения? В идеале связка Flash, вроде карты PCIe на 480 ГБ.

Я бы порекомендовал создать SLOG где-нибудь, а не в пуле (даже загрузочное устройство лучше, чем нигде, если оно НЕ мигает). Таким образом, вы не будете интенсивно читать и писать в зеркало каждые 5 секунд.