Низкая последовательная скорость на raidz2 с 9x7 дисками (ZFS ZoL 0.8.1)

Я использую большой пул ZFS, созданный для последовательного чтения и записи размером более 256 КБ запросов через iSCSI (для резервного копирования) в Ubuntu 18.04. Учитывая потребность в высокой пропускной способности и эффективности использования пространства, а также меньшую потребность в производительности случайных малых блоков, я выбрал полосатый raidz2 вместо полосатых зеркал.

Однако производительность последовательного чтения 256 КБ намного ниже, чем я ожидал (100 - 200 Мбит / с, пиковая скорость до 600 Мбит / с). Когда zvols достигают ~ 99% iowait в iostat, устройства поддержки обычно работают от 10 до 40% iowait, что говорит о том, что узкое место - это то, чего мне не хватает в конфигурации, учитывая, что это не должно быть объединительной платы или процессоров в эта система и последовательные рабочие нагрузки не должны слишком сильно работать с ARC.

Я довольно много поигрался с параметрами модуля (текущая конфигурация ниже), прочитал сотни статей, проблемы с OpenZFS github и т. д. Настройка предварительной выборки и агрегирования поднял меня до этого уровня производительности - по умолчанию я работал со скоростью ~ 50 МБ / с при последовательном чтении, поскольку ZFS отправлял TINY-запросы на диски (~ 16K). Когда агрегация и предварительная выборка работают нормально (я думаю), чтение с диска намного выше, около ~ 64 КБ в среднем в iostat.

Сетевые адаптеры являются целью iscsi LIO с разгрузкой cxgbit + инициатор Windows Chelsio iscsi хорошо работает вне zvols ZFS, с optane напрямую сопоставил, возвращая почти полную линейную скорость на сетевых адаптерах (~ 3,5 Гбит / с чтение и запись).

Я слишком многого жду? Я знаю, что ZFS ставит безопасность выше производительности, но я ожидаю, что raidz2 7x9 обеспечит более качественное последовательное чтение, чем один 9-дисковый mdadm raid6.

Системные спецификации и файлы журналов / конфигурации:

Chassis: Supermicro 6047R-E1R72L
HBAs: 3x 2308 IT mode (24x 6Gbps SAS channels to backplanes)
CPU: 2x E5-2667v2 (8 cores @ 3.3Ghz base each)
RAM: 128GB, 104GB dedicated to ARC
HDDs: 65x HGST 10TB HC510 SAS (9x 7-wide raidz2 + 2 spares)
SSDs: 2x Intel Optane 900P (partitioned for mirrored special and log vdevs)
NIC: Chelsio 40GBps (same as on initiator, both using hw offloaded iSCSI)
OS: Ubuntu 18.04 LTS (using latest non-HWE kernel that allows ZFS SIMD)
ZFS: 0.8.1 via PPA
Initiator: Chelsio iSCSI initiator on Windows Server 2019

Конфигурация пула:

ashift=12
recordsize=128K (blocks on zvols are 64K, below)
compression=lz4
xattr=sa
redundant_metadata=most
atime=off
primarycache=all

Конфигурация ZVol:

sparse
volblocksize=64K (matches OS allocation unit on top of iSCSI)

Схема пула:

7x 9-wide raidz2
mirrored 200GB optane special vdev (SPA metadata allocation classes)
mirrored 50GB optane log vdev

/etc/modprobe.d/zfs.conf:

# 52 - 104GB ARC, this system does nothing else
options zfs zfs_arc_min=55834574848
options zfs zfs_arc_max=111669149696

# allow for more dirty async data
options zfs zfs_dirty_data_max_percent=25
options zfs zfs_dirty_data_max=34359738368

# txg timeout given we have plenty of Optane ZIL
options zfs zfs_txg_timeout=5

# tune prefetch (have played with this 1000x different ways, no major improvement except max_streams to 2048, which helped, I think)
options zfs zfs_prefetch_disable=0
options zfs zfetch_max_distance=134217728
options zfs zfetch_max_streams=2048
options zfs zfetch_min_sec_reap=3
options zfs zfs_arc_min_prefetch_ms=250
options zfs zfs_arc_min_prescient_prefetch_ms=250
options zfs zfetch_array_rd_sz=16777216

# tune coalescing (same-ish, increasing the read gap limit helped throughput in conjunction with low async read max_active, as it caused much bigger reads to be sent to the backing devices)
options zfs zfs_vdev_aggregation_limit=16777216
options zfs zfs_vdev_read_gap_limit=1048576
options zfs zfs_vdev_write_gap_limit=262144

# ZIO scheduler in priority order 
options zfs zfs_vdev_sync_read_min_active=1
options zfs zfs_vdev_sync_read_max_active=10
options zfs zfs_vdev_sync_write_min_active=1
options zfs zfs_vdev_sync_write_max_active=10
options zfs zfs_vdev_async_read_min_active=1
options zfs zfs_vdev_async_read_max_active=2
options zfs zfs_vdev_async_write_min_active=1
options zfs zfs_vdev_async_write_max_active=4

# zvol threads
options zfs zvol_threads=32

Я рву на этом себе волосы. На пользователей оказывается давление, чтобы они переходили на все Windows с дисковыми пространствами, но я использовал четные дисковые пространства (даже с Storage Spaces Direct с зеркалами наверху), и это тоже не очень хорошо. У меня есть соблазн перейти прямо на mdadm raid60 под iSCSI, но я был бы рад, если бы кто-нибудь мог указать на что-то тупоголовое, что мне не хватает, что повысит производительность с помощью защиты Bitrot ZFS :)

9
задан 8 August 2019 в 01:38
1 ответ

Хороший вопрос.

  • я думаю, что Ваш редкий zvol размер блока должен быть 128k.
  • Ваши настройки планировщика ZIO должны все быть выше, как минимальные 10 и макс. 64.
  • zfs_txg_timeout должен быть намного длиннее. Я делаю 15 или 30-е в моих системах.
  • я думаю несколько RAIDZ3 (или был то, что опечатка), излишество и играет большую роль в производительности. Можно ли сравнить с RAIDZ2?

Редактирование: Установка Netdata в системе и использовании монитора и статистике ZFS.

Edit2: Это для репозитория Veeam. Veeam поддерживают Linux как цель, и работает замечательно с ZFS. Вы считали бы сравнительное тестирование этим с Вашими данными? zvols не являются идеальным вариантом использования для того, что Вы делаете, если NIC не разгружается, критическая часть решения.

7
ответ дан 2 December 2019 в 22:34

Теги

Похожие вопросы