Про ZFS и L2ARC

У одного моего друга есть NAS на (7+2)-6Tb. Семь дисков в RAIDZ2 (том под данные), два диска в зеркале (том под бэкапы). И был там L2ARC-кэш на полтерабайта, Patriot Hellfire. Поскольку полтерабайта это мало (см ниже), этот кэш обслуживал только активные данные для работы, но не том с бэкапами, а для тома на котором живут торренты было secondarycache=metadata. И, в общем, было видно, что полтерабайта - мало.

Посмотрел один мой друг в прайслисты, посмотрел в обзор терабайтных SSD на 3Dnews и углядел там близнецов Patriot VPN100/Silicon Power 34A80. Исходя из следующих соображений:

  • скорость маленькая (для NVMe), но по 10Gbit особо ничего и не надо большого.
  • Ресурс - из заявленных производителем - самый большой. 1.6Tb у патриота (и ничего у Silicon Power, но в обзоре утверждается, что они полностью идентичны аппаратно, разница только в радиаторе).
  • Ну и цена: ~10круб за терабайт, а гарантированно хороший Samsung 970EVO Plus - 16к.

Ну вот соответственно, купил терабайтник, поставил вторым (через low-profile PCIe->NVME переходник), всего получилось "1.5Tb" L2ARC, которые я поделил так: половинку SiliconPower на бэкапный том; вторую половинку и весь старый Patriot - на новый. Не могу объяснить почему так, наверное для понижения надежности (для L2ARC пофиг должно быть).

Прошло чуть больше двух недель, докладываю:

1. Полтора терабайта - оказалось чуть больше, чем нужно, ну вот не разу не видел полностью заполненного, выглядит оно как-то так:

[lexa@home-gw14 ~]$ zpool iostat -v
                          capacity     operations    bandwidth
pool                   alloc   free   read  write   read  write
---------------------  -----  -----  -----  -----  -----  -----
zbackup                2.66T  2.78T      1      9  1.28M  2.14M
  mirror               2.66T  2.78T      1      9  1.28M  2.14M
[диски убрал для компактности]
cache                      -      -      -      -      -      -
  gpt/cache-silicon-1   396G  57.6G      5      2  5.28M  2.48M
---------------------  -----  -----  -----  -----  -----  -----
zdata                  22.6T  15.4T      2      5  2.31M  2.81M
  raidz2               22.6T  15.4T      2      5  2.31M  2.81M
[диски убрал для компактности]
cache                      -      -      -      -      -      -
  gpt/cache-patriot-0   377G  70.2G      2      1  1.95M  1.61M
  gpt/cache-silicon-0   416G  83.7G      2      1  2.01M  1.66M
---------------------  -----  -----  -----  -----  -----  -----

Уже по iostat видно, что польза есть, особенно для бэкапов (которые один раз пишутся и минимум два раза читаются, один раз при верификации, один раз при репликации, а для инкрементных бэкапов - понятно что и больше). С данными - польза поменьше (но я проводил работы с несколько-терабайтными данными на предмет их верификации).

По статистике выходит так:

[lexa@home-gw14 ~]$ zfs-stats -E -L
[skip]
ARC Efficiency:                                 355.42m
        Cache Hit Ratio:                92.05%  327.17m
        Cache Miss Ratio:               7.95%   28.25m
        Actual Hit Ratio:               91.46%  325.05m

[skip]
L2 ARC Breakdown:                               28.25m
        Hit Ratio:                      51.34%  14.50m
        Miss Ratio:                     48.66%  13.74m
        Feeds:                                  1.38m
[skip]

Только 8% запросов идут не из ARC, но раньше Hit ratio у L2ARC было процентов 20, а теперь 50. То есть до дисков доходит 4% запросов. Это большая разница с 8, собственно в два раза, стало заметно тише.

Поскольку текущий бэкап попадает в ARC/L2ARC с гарантией, стала гораздо быстрее верификация, раньше оно колебалось в районе 2Gbit/s, сейчас "выше трех, доходит до 5" (зависит от вида бэкапа, инкрементальный верифицируется помедленнее т.к. Acronis там больше думает).

Ну и про запиливание SSD.

Вот Patriot Hellfire, который работает L2ARC-ом с 19 января 2017 года, т.е без малого два года (будем считать что полтора):

# smartctl -a -H /dev/nvme1
[skip]
Data Units Written:                 142,071,356 [72.7 TB]

Получается - примерно терабайт в неделю. При заявленном ресурсе 400 т.е. выходит ~8 лет.

А вот свежепоставленный SiliconPower, аптайм - 16 дней, будем считать что две недели:

# smartctl -a -H /dev/nvme0
[skip]
Data Units Written:                 12,268,874 [6.28 TB]

Получается 3Tb в неделю, заявленный ресурс 1600, 500 недель - 10 лет.

Понятный сайд-эффект от снижения вдвое нагрузки на диски - снижение их температуры, было "слегка за 40", стало "чуть ниже 40".

В-общем, если SSD-шки отработают свой заявленный ресурс, то и вообще отлично (скорее всего я их раньше заменю в процессе перехода на all-flash NAS, чую что недолго осталось уже). Если запилятся раньше - потери данных я не жду, это ж L2ARC (впрочем у меня все реплицировано), но будет урок

Короче, я доволен, а при нынешней цене за флеш в $150 за терабайт - грех его не запилить.

Comments

Хорошо тебе, у меня вот вышел хитрейт в 5% :-)

А нет ли датасетов для которых выключен L2ARC? Они же дают понятный вклад в показ статистики....

Ну или я думаю что понятный, это тоже возможно.

Ну и да, конечно же сделано:
vfs.zfs.l2arc_norw=0
vfs.zfs.l2arc_noprefetch=0
vfs.zfs.l2arc_write_max=МНОГО
vfs.zfs.l2arc_write_boost=ТОЖЕ_МНОГО

Ох, я об этом не подумал. Я ставил только на торренты, а это отдельный пул от стораджа-для-меня.
Ну и 250GB диск (samsung!) запилися вусмерть за год.

А ты поставил в PCIe x1? Я тут сообразил, что другого у меня, например, и не осталось.

В x4. Заодно узнал, что родное гнездо на этой мамке - x2.

У меня просто 16 + 8 + 1 + 1 на матери, и если воткнуть в 16 и в 8 то будет по сути 8 + 8, и там уже HBA и сеть… Эх.

Я хрен его знаю, работает оно в x1 или нет. Вариантов проверить не было, слот на мамке один и он x4

Кстати, мой китайский MiniPC-рутер стал виснуть на большой нагрузке (пришлось выкючить торренты временно — и всё нормализовалось). И убил батарейку CMOS'а. И поджарил термоклей которой она (батарейка) была закрепелна на плате (он покоричневел!).

Я подозреваю, что померла термопаста между платой и корпусом-радиатором и оно перестало нормально охлаждатьс, буду завтра разбирать.

Это я просто предупреждаю, что с ними так бывает, ты же себе очень похожий купил.

А сколько ему лет было?

У моего пока вот так:
~# sysctl -a | grep temper
hw.acpi.thermal.tz1.temperature: 29,9C
hw.acpi.thermal.tz0.temperature: 27,9C
dev.cpu.3.temperature: 46,0C
dev.cpu.2.temperature: 46,0C
dev.cpu.1.temperature: 48,0C
dev.cpu.0.temperature: 48,0C

Год ровно.

У меня вот так когда торрент-бокс (торренты не на рутере, конечно, но через него) остановлен:

hw.acpi.thermal.tz0.temperature: 55.1C
dev.cpu.3.temperature: 43.0C
dev.cpu.2.temperature: 49.0C
dev.cpu.1.temperature: 45.0C
dev.cpu.0.temperature: 48.0C

А раньше я tz не мониторил, только dev.cpu — и там особо ничего не менялось со временем.

В общем, завтра разберу, откручу плату, расскажу что нашёл.

оу. что называется, __подписался на комменты__ ;)

Разобрал, там к корпусу припаяна (?) алюминиевая пластина, окружённая 3-мя дырками под винты. К ней этими тремя винтами прижимается открытый кристалл процессора. В качестве термопрокладки была какая-то розовая жвачка, снявшаяся одним куском, вот прямо как жвачка. Намазал MX2, перепаял батарейку CMOS'а, закрутил, запустил. Вот под торрентами:

hw.acpi.thermal.tz0.temperature: 43.1C
dev.cpu.0.temperature: 46.0C
dev.cpu.1.temperature: 43.0C
dev.cpu.2.temperature: 46.0C
dev.cpu.3.temperature: 49.0C

Предыдущий вывод был БЕЗ торрентов. Видно, что нагрев датчика-не-в-процессоре (hw.acpi.thermal.tz0.temperature) нормализовался.

Мда, стоит заглянуть не дожидаясь перитонита

Ну вот после того как я сотни правил ipfw переписал на tables, у меня нагрузка CPU упала процентов до 3, а другой нагрузки на этом боксе *обычно* нет (ну покомпилировать libraw, но это секунды)

Т.е. там что 0 трафика, что 200 мегабит (больше у меня нету) - без разницы ему.

У меня тоже на таблицах, правил штук 50 всего (но у меня stateful и nat), нагрузка типичная 50% при торрентах. Вопрос не в мегабитах а в числе потоков. Когда потоков 10K+ ему тяжело nat'ить :)
Качать в один поток 100 мегабит его не нагружает. Раздавать 50 мегабит в 10K потоков — нагружает.

А ты чем натишь?
А то у меня почему-то файрволл на ipfw, а nat на ipf, ну так получилось ДАВНО и я не меняю.

Нагрузки от nat от торрентов не вижу, но потоки я не считал.

ipfw nat (но в ядре, не natd), да, я знаю, что он медленней чем pf, но включить ipf в мою архитектуру файрволла невозможно — это у меня не первый и не последний шаг в файрволле, а в середине.