nikolay
свободной памяти порядка от 20 до 30 Гб
edo1
Хм
nikolay
и еще пытался тюнить кеш для меты, вот так сейчас задано
nikolay
# 40%RAM limit metadata cache
options zfs zfs_arc_meta_limit_percent=40
nikolay
и префетч
nikolay
# 64MB prefetch read ahead (default 8MB)
options zfs zfetch_max_distance=67108864
nikolay
может я перетюнил чего..
nikolay
находил в бактреккере вот такое
nikolay
https://github.com/openzfs/zfs/issues/9966?ysclid=lb8kga41q8153787841
nikolay
но это довольно старая тема, версия zfs у меня 2.1.6
nikolay
линукс centos stream 8
nikolay
да, arc_summary показывает что под arc как бы выделено больше чем 128 Gb
nikolay
ARC size (current): 109.4 % 140.1 GiB
Target size (adaptive): 100.0 % 128.0 GiB
Min size (hard limit): 25.0 % 32.0 GiB
Max size (high water): 4:1 128.0 GiB
Most Frequently Used (MFU) cache size: 61.2 % 31.8 GiB
Most Recently Used (MRU) cache size: 38.8 % 20.1 GiB
Metadata cache size (hard limit): 40.0 % 51.2 GiB
Metadata cache size (current): 273.4 % 140.0 GiB
nikolay
140 gib под мету, это зачем так?)
edo1
edo1
df -hi что говорит?
nikolay
сброс ARC через очистку dirty buffers помогает, но временно
Vladislav
Ivan
edo1
George
Захотелось странного 😁
А именно: добавить в raidz опцию минималаный размер страйпа, что-то вроде ashift.
Например, у нас есть raidz2 из 10 дисков, ashift=12, recodsize максимальный.
На raidz2 лежит 10тб больших файлов (больше гигабайта, скажем) и 1тб мелких (меньше 100кб, например).
Проблема в том, что мелкие файлы «размазываются» по всем дискам, что вызывает кратное увеличение количества требуемых операций ввода-вывода.
Например, файл на 32кб будет «размазан» по 8+2 дискам, соответственно чтение задействует 8 дисков из 10 (8 операций io). Если считать, что одиночный hdd умеет 100 iops, отдача с массива будет 1000 iops, итого всего 4мб/с на таких файлах.
Хочется же такие маленькие файлы хранить как один блок на 32к + 2 контрольных блока. Да, потребление дискового пространства заметно вырастет (96кб вместо 40кб), но и отдать наш массив сможет 32мб/с, в 8 раз больше!
Возможные альтернативы:
Использовать draid со схемой 3+2, например. И для маленьких файлов проблему не окончательно решит, и накладные расходы на крупные вырастут сильно.
Задрать ashift. В общем-то почти нужный результат, но больше потери, а на метаданных потери НАМНОГО больше, при использовании special будет больно.
Плотно код не смотрел ещё, но вроде бы текущая схема хранения вполне совместима, так что технических препятствий для реализации не должно быть.
Вопрос только в том имеет ли это изменение какие-то шансы на принятие в проект?
@gmelikov особенно к тебе вопрос )
В рамках одного пула сейчас такой логики нет
nikolay
Да я про количество файлов
swift/obj06 187G 61M 187G 1% /srv/node/obj06
swift/obj07 187G 61M 187G 1% /srv/node/obj07
swift/obj08 187G 61M 187G 1% /srv/node/obj08
swift/obj05 187G 61M 187G 1% /srv/node/obj05
nikolay
nikolay
например не кончилось ли место под special
special - - - - - -
mirror-6 327G 9.66T 300 5.56K 1.19M 56.2M
scsi-SHUAWEI_XSG1_2102352XPK10M80000070032 - - 115 2.78K 463K 28.1M
scsi-SHUAWEI_XSG1_2102352XPK10M80000060005 - - 185 2.78K 752K 28.1M
edo1
edo1
То есть файлы не особо крупные
edo1
А паттерн доступа какой?
Ivan
nikolay
и нагрузки на них какой-то большой нет, порядка 200 Мб/с на запись, 30-40 чтение
edo1
Может find по кругу гоняется
Ivan
nikolay
Ivan
edo1
nikolay
5 vdev в raidz2 + slog + special. кстати добавление l2arc помогло снизить load average, но не помогло выровнять оверхед по arc
edo1
edo1
У тебя не куча raidz с n+2 каждый, а один пул дисков, а избыточность всё та же n+2
edo1
То есть можно собрать, например, на 13 дисках 5+2
nikolay
Может find по кругу гоняется
системный find исключено. но объектник может делать LIST опять же только при определенных запросах со стороны админов, а админ я)
Ivan
а SHUAWEI_XSG1 это че такое ?
Ivan
nikolay
латенси на них меньше 1 ms, тут проблем быть не должно..
nikolay
по крайней мере если смотреть на вывод zpool iostat -l
nikolay
у меня смутные подозрения что я где-то перемудрил с тюнингом)) но вот блин где..
nikolay
вот полный список параметров, которые я выставляю
nikolay
# prohibit flushing VDEV DRAM cache
options zfs zfs_nocacheflush=0
# prohibit flushing ZIL VDEV DRAM cache
options zfs zil_nocacheflush=1
nikolay
вот эти параметры могут в теории влиять на наполняемость ARC?
edo1
edo1
Что оно такое выросло
edo1
С первого взгляда в этом проблема
nikolay
nikolay
# 40%RAM limit metadata cache
options zfs zfs_arc_meta_limit_percent=40
nikolay
либо я не понимаю значения этого параметра
edo1
Ну лимит
edo1
Но может у тебя там охулиард открытых файлов
Sergey
Всем привет. Вышел новый релиз моего Live CD. Ядро 6.0.11, ZFS 2.1.7. https://git.s-morozov.net/sergey/archlive-zfs/releases/tag/2022.12.06
George
если есть вопросы - просто тюнинги убрать и смотреть влияние
nikolay
nikolay
пока попробую "на лету" поменять ряд параметров, сброшу в дефолт.
nikolay
так как памяти выделяется только 128Гб, хочется чтобы не вымывался кэш, был более эффективный prefetch и лишние данные в памяти не задерживались
nikolay
либо я просто некорректно рассчитал конфигурацию и 128 Гб zfs'у тупо не хватает. и я бы согласился с этим, если бы была нагрузка.. а ее мало
nikolay
zpool iostat -l 3
capacity operations bandwidth total_wait disk_wait syncq_wait asyncq_wait scrub trim
pool alloc free read write read write read write read write read write read write wait wait
---------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
swift 8.52T 502T 1.42K 4.66K 7.73M 39.4M 1ms 512us 1ms 493us 866ns 488ns 871ns 21us 151ms -
swift 8.52T 502T 5.54K 11.9K 66.6M 135M 2ms 509us 2ms 507us 645ns 548ns - 1us - -
swift 8.52T 502T 5.58K 13.2K 66.4M 147M 1ms 493us 1ms 491us 667ns 533ns - 1us - -
swift 8.52T 502T 5.66K 11.5K 69.0M 132M 2ms 502us 2ms 500us 639ns 533ns - 2us - -
swift 8.52T 502T 5.36K 12.5K 64.1M 144M 2ms 590us 2ms 588us 629ns 510ns - 1us - -
swift 8.52T 502T 5.13K 12.2K 61.0M 138M 2ms 482us 2ms 480us 656ns 506ns - 1us - -
nikolay
вывод zpool iostat с одного сервера, на остальных аналогично
George
вывод zpool iostat с одного сервера, на остальных аналогично
arc_prune это попытка в arc что-то почистить, вызвано может быть либо запросом от ядра отдать память, либо настройками, в частности тем же zfs_arc_meta_limit_percent когда есть доп. условия когда что надо чистить. В идеале выяснить для начала какая из причин вызывает это