Формат дисков #
- Используйте
raw
формат для виртуальных дисков (наилучшая производительность) илиqcow2
для удобства снапшотов.
Хранилище ВМ #
- Размещайте виртуальные машины в отдельных ZFS-файловых системах:bashКопировать код
zfs create pool_name/vm1
- Настройте квоты и зарезервированные объемы:bashКопировать код
zfs set quota=100G pool_name/vm1 zfs set reservation=50G pool_name/vm1
Кэширование и I/O #
- Включите
virtio
для виртуальных дисков:- Ускоряет I/O за счет меньшей нагрузки на процессор.
- Убедитесь, что
writeback
включен в настройках кэша дисков ВМ.
Настройка параметров ZFS в системе #
Добавьте или измените параметры в /etc/modprobe.d/zfs.conf
:
options zfs zfs_arc_max=4294967296 # Ограничить ARC до 4 ГБ
options zfs zfs_prefetch_disable=1 # Отключить предвыборку (полезно для ВМ)
Опция zfs_prefetch_disable=1
относится к механизму предвыборки (prefetching), который используется ZFS для ускорения операций чтения.
Предвыборка в ZFS выполняет чтение блоков данных с диска заранее, основываясь на предположении, что эти данные могут понадобиться в ближайшем будущем. Когда предвыборка отключена (zfs_prefetch_disable=1
), ZFS перестает использовать этот механизм. Это может быть полезно в определенных сценариях, но также может ухудшить производительность в других.
Механизм предвыборки в ZFS #
ZFS пытается предсказать, какие данные могут понадобиться следующими, и считывает их заранее, чтобы избежать задержек при запросах. Алгоритм основывается на шаблонах последовательного чтения.
- Когда предвыборка полезна:
- При последовательном чтении больших объемов данных, например, при потоковом чтении медиафайлов или резервных копий.
- На системах с высокой скоростью чтения, таких как SSD.
- Когда предвыборка неэффективна:
- При случайных операциях ввода-вывода (random I/O), где данные запрашиваются в произвольном порядке. Это характерно для виртуальных машин, баз данных или систем, работающих с маленькими блоками данных.
Влияние на производительность #
Последовательные операции чтения могут выполняться медленнее, так как данные считываются только по мере запроса.
С включенной предвыборкой (по умолчанию):
Преимущества: Может значительно улучшить производительность при последовательных запросах.
Недостатки: Увеличивает нагрузку на дисковую подсистему из-за лишних операций чтения, что может быть проблемой для HDD. Занимает больше памяти для кэширования данных, которые могут не использоваться.
С отключенной предвыборкой (zfs_prefetch_disable=1
):
Преимущества:
Уменьшается нагрузка на дисковую подсистему.
Более эффективное использование памяти для кэширования данных.
Недостатки:
Последовательные операции чтения могут выполняться медленнее, так как данные считываются только по мере запроса.
Рекомендации по использованию #
Если у вас последовательные операции чтения, такие как воспроизведение медиа, потоковые копирования или обработка архивов.
Отключите предвыборку (zfs_prefetch_disable=1
):
Если основной нагрузкой являются случайные I/O операции, как в случае с виртуальными машинами.
Если используется пул, основанный на SSD, так как задержки у SSD минимальны, и предвыборка может быть избыточной.
Если вы замечаете чрезмерную нагрузку на дисковую подсистему при интенсивной работе.
Оставьте предвыборку включенной (zfs_prefetch_disable=0
, по умолчанию):
- Если у вас последовательные операции чтения, такие как воспроизведение медиа, потоковые копирования или обработка архивов.
Примените настройки: update-initramfs -u
Настройка системы для ZFS #
Убедитесь, что настройки для больших I/O операций включены в /etc/sysctl.conf
:
vm.swappiness=10
vm.dirty_ratio=15
vm.dirty_background_ratio=10
Примените настройки:
sysctl -p