Вопрос или проблема
Я настроил ZFS на OpenSUSE Tumbleweed на своем сервере T430, используя 8x SAS ST6000NM0034 6TB 7.2K RPM дисков. Пул ZFS настроен как RAIDZ-2, и для набора данных включено шифрование.
Я получаю очень медленную запись в пул, только около 33MB/s. Чтение же гораздо быстрее, на уровне 376MB/s (хотя все еще медленнее, чем я ожидал).
Во время записи в пул нет значительного использования процессора или чрезмерного использования памяти. В системе 26 физических ядер и 192GB оперативной памяти, так что процессор и память не должны быть узким местом.
Свойства ZFS:
workstation:/media_storage/photos # zfs get all media_storage/photos
NAME PROPERTY VALUE SOURCE
media_storage/photos type filesystem -
media_storage/photos creation Sat Feb 15 16:41 2025 -
media_storage/photos used 27.6G -
media_storage/photos available 30.9T -
media_storage/photos referenced 27.6G -
media_storage/photos compressratio 1.01x -
media_storage/photos mounted yes -
media_storage/photos quota none default
media_storage/photos reservation none default
media_storage/photos recordsize 128K default
media_storage/photos mountpoint /media_storage/photos default
media_storage/photos sharenfs off default
media_storage/photos checksum on default
media_storage/photos compression lz4 inherited from media_storage
media_storage/photos atime on default
media_storage/photos devices on default
media_storage/photos exec on default
media_storage/photos setuid on default
media_storage/photos readonly off default
media_storage/photos zoned off default
media_storage/photos snapdir hidden default
media_storage/photos aclmode discard default
media_storage/photos aclinherit restricted default
media_storage/photos createtxg 220 -
media_storage/photos canmount on default
media_storage/photos xattr on default
media_storage/photos copies 1 default
media_storage/photos version 5 -
media_storage/photos utf8only off -
media_storage/photos normalization none -
media_storage/photos casesensitivity sensitive -
media_storage/photos vscan off default
media_storage/photos nbmand off default
media_storage/photos sharesmb off default
media_storage/photos refquota none default
media_storage/photos refreservation none default
media_storage/photos guid 7117054581706915696 -
media_storage/photos primarycache all default
media_storage/photos secondarycache all default
media_storage/photos usedbysnapshots 0B -
media_storage/photos usedbydataset 27.6G -
media_storage/photos usedbychildren 0B -
media_storage/photos usedbyrefreservation 0B -
media_storage/photos logbias latency default
media_storage/photos objsetid 259 -
media_storage/photos dedup off default
media_storage/photos mlslabel none default
media_storage/photos sync disabled inherited from media_storage
media_storage/photos dnodesize legacy default
media_storage/photos refcompressratio 1.01x -
media_storage/photos written 27.6G -
media_storage/photos logicalused 27.9G -
media_storage/photos logicalreferenced 27.9G -
media_storage/photos volmode default default
media_storage/photos filesystem_limit none default
media_storage/photos snapshot_limit none default
media_storage/photos filesystem_count none default
media_storage/photos snapshot_count none default
media_storage/photos snapdev hidden default
media_storage/photos acltype off default
media_storage/photos context none default
media_storage/photos fscontext none default
media_storage/photos defcontext none default
media_storage/photos rootcontext none default
media_storage/photos relatime on default
media_storage/photos redundant_metadata all default
media_storage/photos overlay on default
media_storage/photos encryption aes-256-gcm -
media_storage/photos keylocation prompt local
media_storage/photos keyformat passphrase -
media_storage/photos pbkdf2iters 350000 -
media_storage/photos encryptionroot media_storage/photos -
media_storage/photos keystatus available -
media_storage/photos special_small_blocks 0 default
media_storage/photos prefetch all default
workstation:/media_storage/photos #
Во время записи из /dev/random в файл 4GB:
workstation:/home/josh # zpool iostat -vly 30 1
capacity operations bandwidth total_wait disk_wait syncq_wait asyncq_wait scrub trim rebuild
pool alloc free read write read write read write read write read write read write wait wait wait
-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
media_storage 25.9G 43.6T 0 471 0 33.7M - 87ms - 75ms - 768ns - 12ms - - -
raidz2-0 25.9G 43.6T 0 471 0 33.7M - 87ms - 75ms - 768ns - 12ms - - -
wwn-0x5000c5008e4e6d6b - - 0 60 0 4.23M - 86ms - 74ms - 960ns - 11ms - - -
wwn-0x5000c5008e6057fb - - 0 58 0 4.23M - 85ms - 73ms - 768ns - 12ms - - -
wwn-0x5000c5008e605d47 - - 0 61 0 4.21M - 84ms - 71ms - 672ns - 12ms - - -
wwn-0x5000c5008e6114f7 - - 0 55 0 4.20M - 101ms - 87ms - 768ns - 13ms - - -
wwn-0x5000c5008e64f5d3 - - 0 57 0 4.23M - 95ms - 83ms - 768ns - 12ms - - -
wwn-0x5000c5008e65014b - - 0 59 0 4.18M - 85ms - 74ms - 672ns - 11ms - - -
wwn-0x5000c5008e69dea7 - - 0 59 0 4.20M - 83ms - 72ms - 768ns - 11ms - - -
wwn-0x5000c5008e69e17f - - 0 58 0 4.20M - 82ms - 71ms - 768ns - 11ms - - -
-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
workstation:/home/josh #
Во время чтения из того же файла (кэш предварительно сброшен):
workstation:/home/josh # echo 0 > /sys/module/zfs/parameters/zfs_arc_shrinker_limit
workstation:/home/josh # echo 3 > /proc/sys/vm/drop_caches
workstation:/home/josh # zpool iostat -vly 5 1
capacity operations bandwidth total_wait disk_wait syncq_wait asyncq_wait scrub trim rebuild
pool alloc free read write read write read write read write read write read write wait wait wait
-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
media_storage 25.1G 43.6T 14.9K 0 376M 0 1ms - 596us - 201ms - 593us - - - -
raidz2-0 25.1G 43.6T 14.9K 0 376M 0 1ms - 596us - 201ms - 593us - - - -
wwn-0x5000c5008e4e6d6b - - 1.87K 0 46.8M 0 1ms - 615us - 201ms - 582us - - - -
wwn-0x5000c5008e6057fb - - 1.97K 0 45.9M 0 747us - 412us - - - 324us - - - -
wwn-0x5000c5008e605d47 - - 1.82K 0 47.5M 0 1ms - 623us - - - 491us - - - -
wwn-0x5000c5008e6114f7 - - 1.79K 0 47.9M 0 1ms - 709us - - - 831us - - - -
wwn-0x5000c5008e64f5d3 - - 1.95K 0 46.3M 0 922us - 491us - - - 444us - - - -
wwn-0x5000c5008e65014b - - 1.81K 0 47.7M 0 1ms - 686us - - - 953us - - - -
wwn-0x5000c5008e69dea7 - - 1.83K 0 47.0M 0 1ms - 603us - 201ms - 527us - - - -
wwn-0x5000c5008e69e17f - - 1.86K 0 47.2M 0 1ms - 650us - - - 632us - - - -
-------------------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
workstation:/home/josh #
Есть идеи, что может быть причиной узкого места скорости?
Ответ или решение
Как эксперт в области информационных технологий, я хочу предложить детальный анализ проблемы медленной записи на ZFS, настроенной на OpenSUSE Tumbleweed. Пожалуйста, позвольте мне осветить теорию, проанализировать ваш пример и предложить рекомендации по применению.
Теория
ZFS – это мощная файловая система, которая предлагает множество возможностей, включая управление объемами, сжатие данных и защиту от ошибок данных. Однако, несмотря на свои достоинства, она может быть сложной в настройке, особенно с точки зрения оптимизации производительности. RAIDZ-2 – это конфигурация, предназначенная для обеспечения высокой доступности данных, жертвуя при этом некоторой производительностью.
Ваша текущая конфигурация включает в себя 8 x 6TB SAS дисков, объединенных в RAIDZ-2 массив с шифрованием. RAIDZ-2 обеспечивает защиту данных от выхода из строя двух дисков, но при этом требует дополнительных вычислительных ресурсов для генерации и проверки данных чексуммы. Это может влиять на скорость записи, особенно в сочетании с шифрованием AES-256-GCM.
Пример
Согласно предоставленным данным, ваши показатели записи составляют приблизительно 33 MB/s, что значительно ниже ожидаемого. Для сравнения, операции чтения достигают 376 MB/s, что также не полностью соответствует потенциалу вашей конфигурации оборудования. Вы отметили, что при записи наблюдаются задержки около 87ms на звеном RAIDZ, что указывает на узкое место.
Вы также используете несколько опций, влияющих на задержки, включая lz4
сжатие и aes-256-gcm
шифрование. Эти особенности могут потребовать дополнительных вычислительных ресурсов, однако вы указали, что нагрузка на процессор и использование оперативной памяти не являются значительными, имея в наличии мощное оборудование с 26 физическими ядрами и 192 ГБ ОЗУ. Это говорит о том, что ваше узкое место вероятно не связано с вычислительными ресурсами.
Применение
-
Параметры файловой системы:
- Измените
recordsize
: Вашrecordsize
установлен на 128K, что является стандартным для большинства рабочей нагрузки. Проверьте изменение этого параметра на 256K или 1M в зависимости от типа данных, которые вы записываете.
- Измените
-
Оптимизация шифрования и безопасности:
- Попробуйте реализовать ZFS без шифрования для тестирования чистой производительности. Если скорость записи увеличится, шифрование является узким местом. Подумайте о более легковесных вариантах шифрования или скажите своим пользователям о снижении потребности в шифровании, чтобы оценить необходимость этого компромисса.
-
Настройка параметров ZFS:
- Проверьте и отрегулируйте параметры
zfs_vdev_sync_write_min_active
иzfs_vdev_sync_write_max_active
. Иногда настройка дисковых очередей может значительно помочь повысить производительность.
- Проверьте и отрегулируйте параметры
-
Кэширование и LOG-устройства:
- Рассмотрите возможность добавления SSD в ZFS pool как ZIL (ZFS Intent Log) или L2ARC для улучшения производительности записи и чтения, соответственно.
-
Проверка состояния дисков:
- Убедитесь, что все физические диски работают без ошибок, используя инструменты диагностики производителя. Иногда наличие проблем с аппаратным обеспечением, например, проблема на одном из дисков, может привести к снижению производительности на всём массиве.
-
Другие системные проверки:
- Убедитесь, что все прошивки и драйверы обновлены до последних версий для исключения проблем совместимости или других узких мест на уровне ОС.
В заключение, улучшение эффективности работы ZFS зависит от целенаправленного анализа и оптимизации различных уровней стека: от аппаратной конфигурации до настроек самой файловой системы. Каждое предложение в приложении требует проверки и тестирования, чтобы удостовериться, что оно действительно решает проблему в вашем конкретном случае.