Size: a a a

KVM (PVE/oVirt etc)

2019 April 15

DM

Dmitry Moskvenkov in KVM (PVE/oVirt etc)
Павел
Дедубликация в реальном времни очень специальный требует юзкейс, на всяких попроще системах хранения, они используют idle механизм дедубликации, когда некий сборщик тихо при сюотсутствии io ходит и находит одинаковые блоки и ремапит/хардлинкает их, т.е. по сути снижает использования raw данных, при этом система работает в живую как бы без и не нужно ничего в памяти держать. Но в zfs сделали по другому, а в результате эта штука стала очень спорной, так как при больших таблицах там вообще просадка по задержкам на запись становится очень ощутимой
++ включал на ноде с 4ТБ хранилища и 64ГБ памяти, из них свободно было около 20 - съело и начало свопить
источник

П

Павел in KVM (PVE/oVirt etc)
Terry Filch
лимиты ставьте, не ленитесь
Да, обычно активно кэш используется в небольшой части, для среднегабаритного сервера со 128 ГиБ RAM  16 ГиБ ZFS ARC кэша должно хватать.

Но есть лайфхак, я например при виртуалках делаю как: не ограничиваю кэш, т.е. оставляю 50% и пусть занимает свободную память, есть, она лучше пусть в кэше будет, чем просто свистеть.
В случае, если нужно запустить новую виртуалку, я предварительно руками тротлю arc_size_max:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_max
(уточню, это для Linux команда при использовании ZFS on Linux )

Добавление виртуалок на продакшн ситуация у нас не очень частая, потому можем себе позволить
источник

TF

Terry Filch in KVM (PVE/oVirt etc)
Павел
Да, обычно активно кэш используется в небольшой части, для среднегабаритного сервера со 128 ГиБ RAM  16 ГиБ ZFS ARC кэша должно хватать.

Но есть лайфхак, я например при виртуалках делаю как: не ограничиваю кэш, т.е. оставляю 50% и пусть занимает свободную память, есть, она лучше пусть в кэше будет, чем просто свистеть.
В случае, если нужно запустить новую виртуалку, я предварительно руками тротлю arc_size_max:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_max
(уточню, это для Linux команда при использовании ZFS on Linux )

Добавление виртуалок на продакшн ситуация у нас не очень частая, потому можем себе позволить
Отключи свою автозамену, она творит херню с текстом
источник

П

Павел in KVM (PVE/oVirt etc)
Terry Filch
Отключи свою автозамену, она творит херню с текстом
О чем речь?
источник

TF

Terry Filch in KVM (PVE/oVirt etc)
Павел
О чем речь?
128 ГиБ RAM
источник

TF

Terry Filch in KVM (PVE/oVirt etc)
Гбит
источник

П

Павел in KVM (PVE/oVirt etc)
Написано ГиБ = гибибайт, 1024 мибибайт
источник

MP

Mikhail Paulyshka in KVM (PVE/oVirt etc)
Угу, ГОСТ IEC 60027-2-2015 Обозначения буквенные, применяемые в электротехнике. Часть 2. Электросвязь и электроника
источник

G

George in KVM (PVE/oVirt etc)
Dmitry Moskvenkov
++ включал на ноде с 4ТБ хранилища и 64ГБ памяти, из них свободно было около 20 - съело и начало свопить
ну вычислять требования очень просто - до 320байт на КАЖДЫЙ блок данных (размер блока - recordsize) в таблице DDT. Точный размер зависит от конкретной реализации, были шаги в сторону уменьшения.
источник

TF

Terry Filch in KVM (PVE/oVirt etc)
Павел
Написано ГиБ = гибибайт, 1024 мибибайт
тогда стоит писать не в utf8, а единицами и нулями, для адекватного понимания
источник

П

Павел in KVM (PVE/oVirt etc)
Кому понятнее единицами и нулями?

Ваша претензия не по существу, написанное мной не является ошибкой, так как память RAM измеряется единицами такими, это корректно. Как раз запись вида ГБ может восприниматься двусмысленно, так как в обиходе её используют для обозначения как гигабайт (например, на дисках жёстких там конкретно гига и терабайты пишут - т.е. степени 10, 1 ГБ = 1000 МБ) так и гибибайт.

Признаю, что обычно из контекста понятно о чем речь, но я предпочитаю по возможности не плодить двусмысленность. Так когда я говорю 16 ГиБ под кэш, я имею ввиду 17179869184 байт, что и использую в приведенном примере:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_max
(уточню, это для Linux команда при использовании ZoL)
источник

П

Павел in KVM (PVE/oVirt etc)
George
ну вычислять требования очень просто - до 320байт на КАЖДЫЙ блок данных (размер блока - recordsize) в таблице DDT. Точный размер зависит от конкретной реализации, были шаги в сторону уменьшения.
Согласен, оценку предела таблицы DDT можно посчитать, и заложить в проект, но... возникает простой критерий эффективности, будет ли оправдана по факту покупка отдельно памяти под хранение таблицы DDT (дедубликации) экономии места полученного от работы механизма дедубликации.

Ответ математический - нет, в подавляющем большинстве случаев (не сильно совру если скажу 99%). Дешевле купить диски большего размера по цене, чем использовать для экономии дискового пространства RAM.
Только в специальных случаях и видах данных будет достигаться большая эффективность и можно будет сэкономить.
источник

i

ivdok in KVM (PVE/oVirt etc)
Павел
В zfs дедупликация не нужна, не надо её включать, реальный профит от неё на очень специальных данных есть (например те же бэкапы, по идее), а реальные проблемы с выжиранием памяти - всегда. Если бы она была офлайн или в idle режиме делала спокойно ремап то и ладно, а оно в реальном режиме работает, всю таблицу блоков держит в памяти (где-то по 380 байт на блок) и при каждой операции пробегает.
Используйте сжатие lz4 везде, эффект сильно выше, причём на медленных дисках ещё и io уменьшает, т.е. фактически ускоряет работу.
Дедубликация - это очень распространенная ошибочно используемая функция zfs
Так ограничивать память надо, отведённую под ZFS
источник

i

ivdok in KVM (PVE/oVirt etc)
options zfs zfs_arc_max=34359738368 в моём кейсе, например, но можно и меньше
источник

П

Павел in KVM (PVE/oVirt etc)
ivdok
Так ограничивать память надо, отведённую под ZFS
Выше прочитайте, память занятая DDT - занята всегда, т.е. её по факту нет, а значит вы отрезали кусок памяти RAM для экономии сколько-то ГБ диска. Профит будет только в специальной ситуации, т.е. его нужно доказать. А значит включать дедубликацию в zfs можно только тогда, когда доказана её реальная эффективность, иначе (в 99% случаев) лучше включить lz4 сжатие (в принципе можно почти всегда), которое экономит дисковое пространство практически бесплатно
источник

i

ivdok in KVM (PVE/oVirt etc)
Это лимит в 32Гб, для сервера с 256Гб. Можно меньше, я просто перестраховывался, IOPS больше волнует пока
источник

i

ivdok in KVM (PVE/oVirt etc)
Павел
Выше прочитайте, память занятая DDT - занята всегда, т.е. её по факту нет, а значит вы отрезали кусок памяти RAM для экономии сколько-то ГБ диска. Профит будет только в специальной ситуации, т.е. его нужно доказать. А значит включать дедубликацию в zfs можно только тогда, когда доказана её реальная эффективность, иначе (в 99% случаев) лучше включить lz4 сжатие (в принципе можно почти всегда), которое экономит дисковое пространство практически бесплатно
Free RAM = wasted RAM, и просадки по дисковой подсистеме меня больше волнуют, чем 12,5% оперативки, пущенной в дело.
источник

G

George in KVM (PVE/oVirt etc)
Павел
Выше прочитайте, память занятая DDT - занята всегда, т.е. её по факту нет, а значит вы отрезали кусок памяти RAM для экономии сколько-то ГБ диска. Профит будет только в специальной ситуации, т.е. его нужно доказать. А значит включать дедубликацию в zfs можно только тогда, когда доказана её реальная эффективность, иначе (в 99% случаев) лучше включить lz4 сжатие (в принципе можно почти всегда), которое экономит дисковое пространство практически бесплатно
ну кстати она не "занята всегда". Она успешно вытесняется из кеша. Другой вопрос, что никто этого не захочет :)
источник

П

Павел in KVM (PVE/oVirt etc)
ivdok
Free RAM = wasted RAM, и просадки по дисковой подсистеме меня больше волнуют, чем 12,5% оперативки, пущенной в дело.
Лучше пусть ZFS ARC её занимает
источник

П

Павел in KVM (PVE/oVirt etc)
George
ну кстати она не "занята всегда". Она успешно вытесняется из кеша. Другой вопрос, что никто этого не захочет :)
"не захочет" - это очень мягко говоря, в реальности у вас по сути будет жесточайший тупняк (latency) при попытке записи, оно будет поднимать с диска! таблицу при каждой операции записи!!!

Потому в логике zfs DDT вытесняется в крайнюю очередь
источник