Table of Contents

ZFS Tuning

ZFS su Linux è una brutta bestia, che va compresa a fondo per non farsela scoppiare in faccia. La mia personale opinione è che non solo io non ci capisco nulla, ma anche chi sviluppa PVE non ci capisce nulla, o comunque non ci capiva nulla negli anni precedenti. Nelle vecchie versioni di PVE (4.x e anche 5.x se ricordo bene) veniva fatto lo swap su ZFS per esempio che è decisamente una cattiva idea, che causava un "effetto valanga" con conseguente riavvio dell'intera macchina non appena la RAM scarseggiava un poco. Inoltre, anche se sul forum di PVE dicono il contrario, almeno nelle vecchie versioni di ZFS non c'era verso di farle rilasciare la RAM che si mangiava.

NOTA BENE: La mia scarsissima esperienza si limita al solo mirroring in ZFS, niente di più complesso.

Per riferimento, leggete anche questa documentazione: https://pve.proxmox.com/wiki/ZFS:_Tips_and_Tricks

Limitare la ARC cache di ZFS

Questa docunentazione, che resta valida comunque, è resa in parte obsoleta dal fatto che in PVE 8.3 è possibile definire la ARC cache massima durante l'installazione (nelle opzioni avanzate della formattazione dei dischi)

Limitare la cache è fondamentale per non trovarsi la macchina con metà della RAM usata da ZFS. Quindi a meno che non siate ricchi e vogliate comperare il doppio della RAM che pensate vi serva per le VM, dovrete porre un freno alla fame di ZFS.

Nota: e` possibile limitare la dimensione "a runtime" senza riavviare, usando echo 4294967296 > /sys/module/zfs/parameters/zfs_arc_max ma questo funziona solo se la dimensione attuale della ARC cache e` inferiore a quella impostata. Se e` gia` cresciuta oltre, non calera` mai piu` se non riavviando. Ovviamente questa impostazione non e` persistente dopo il reboot. C'e` chi sostiene che eseguendo echo 3 > /proc/sys/vm/drop_caches la cache dovrebbe ridursi... ma io non ci proverei su una macchina in produzione.

Problema di corruzione dei dati in ZFS su PVE 7.2 - 8.1

A quanto pare in tutte le versioni di ZFS dal 2013 al 2023 c'e` un rischio che ci sia perdita di dati (lettura di blocchi tutti a zero) nel caso in cui si verifichi una particolare race condition. La probabilita` è bassa ma non nulla. Per ridurre al minimo la probabilità è opportuno impostare

echo 0 > /sys/module/zfs/parameters/zfs_dmu_offset_next_sync

Lo si puo` mettere in grub come parametro di boot al kernel zfs.zfs_dmu_offset_next_sync=0 oppure in sysyctl.

Qui c'e` un poco di documentazione a riguardo, con anche una FIX per PVE 8.1. Probabilmente sarà inclusa nella prossima release.

https://www.reddit.com/r/Proxmox/comments/1877yaz/bugfix_now_available_for_dataloss_bug_in_zfs/ https://forum.proxmox.com/threads/opt-in-linux-6-5-kernel-with-zfs-2-2-for-proxmox-ve-8-available-on-test-no-subscription.135635/ https://github.com/openzfs/zfs/issues/15526