ARC (Adaptive Replacement Cache, кэш адаптивной замены) – собственный эффективный механизм кеширования ZFS использующий достаточно сложные и эффективные алгоритмы. Основной смысл его работы – максимально исключить обращения к диску на чтение в пользу использования кешированных данных. И чем эффективнее работает ARC, чем больше попаданий в кеш, тем тяжелее становятся его элементы и тем труднее их из памяти вытеснить. В результате ZFS практически всегда будет занимать под ARC все доступное ей пространство. С одной стороны, это хорошо, но не будем забывать, что память – дорогой ресурс, а соверменные хранилища могут состоять из быстрых SSD или NVMe накопителей.
В большинстве случаев имеет смысл радикально ограничить ZFS в потреблении памяти, высвободив ее для виртуальных машин.
Классическая формула расчета предполагает:
1 ГБ для хоста + 1 ГБ на 1 ТБ хранилища
При этом не рекомендуется использовать значения кеша менее 3 ГБ.
Современные рекомендации предполагают большие размеры выделяемой памяти:
1 ГБ + 4-5 ГБ на 1 ТБ хранилища
А если вы используете дедупликацию, то:
1 ГБ + 5-6 ГБ на 1 ТБ хранилища
Исходя из этого и рекомендаций по минимальному размеру можно считать достаточно оптимальным значением для небольших хранилищ размер кеша 4 – 8 ГБ. Размер кеша ZFS задается в байтах и вычислить его можно по формуле:
N*1048576*1024
Где N – нужное значение в ГБ.
Чтобы добавить собственные настройки лимитов ARC создайте, если вы не сделали этого ранее, файл /etc/modprobe.d/zfs.conf и откройте его для редактирования. Все это можно сделать одной командой:
nano /etc/modprobe.d/zfs.conf
Если вы предпочитаете редактор mc, замените nano на mcedit. Если файл не существует, то он будет создан и открыт для редактирования, если существует – просто открыт для редактирования.
Теперь внесем в него следующие строки, задающие минимальный и максимальный размер кеша:
options zfs zfs_arc_min=4294967296
options zfs zfs_arc_max=8589934592
Затем обновим образ начальной файловой системы:
update-initramfs -u
Если ваша система использует UEFI, то дополнительно выполните:
pve-efiboot-tool refresh
После чего выполните перезагрузку.
Результат обычно виден сразу и, что называется, невооруженным глазом.
Как видим, даже минимальное понимание происходящих процессов и грамотный подход к распределению оперативной памяти дает отличный результат, позволяя использовать все возможности ZFS, не жертвуя столь необходимой для виртуальных машин памятью.