Ottimizzazione di ZFS ARC: soglie, limiti e cosa misurare
11 min di lettura - 24 giugno 2026

Ottimizzazione di ZFS ARC in base al carico di lavoro. Quali parametri sono importanti, come impostare zfs_arc_max su Linux e FreeBSD e come capire quando l’ottimizzazione è completa.
Per impostazione predefinita, ZFS occuperà silenziosamente circa metà della RAM di sistema per la propria cache di lettura e, su un server non adatto, ciò comporta attività di swap, terminazioni OOM o un database in competizione con il filesystem per la memoria. L’ottimizzazione dell’ARC di ZFS consiste nel decidere quanta di quella RAM l’ARC sia effettivamente autorizzato a mantenere e a cosa si rinuncia per impostare il limite. Questo articolo illustra come l’ARC utilizza la memoria, cosa misurare prima di intervenire, i pochi parametri che vale la pena modificare e i punti di partenza consigliati per file server, hypervisor, database e destinazioni di backup. Per quanto riguarda gli snapshot di ZFS, consultate la nostra guida agli snapshot ZFS.
Misurate l’ARC prima di ottimizzare qualsiasi parametro
Non modificare alcun parametro regolabile finché non si dispone dei valori di riferimento relativi a un normale periodo di traffico intenso. Le istantanee relative a periodi di traffico ridotto potrebbero indurre in errore. I backup notturni, i report settimanali e i processi batch sono solitamente i contesti in cui il comportamento dell’ARC diventa interessante, pertanto è necessario acquisire i dati nell’arco di diversi giorni.
Tre strumenti coprono la maggior parte delle vostre esigenze:
arcstat 1fornisce una visualizzazione in tempo reale a scorrimento dei contatori di hit e miss, dell’attività di richiesta rispetto a quella di prefetch e delle dimensioni attuali dell’ARC. Utilizzatelo durante i test di carico e le finestre di backup.arc_summarystampa una singola istantanea: dimensione e target dell’ARC, ripartizione MFU/MRU, rapporti dei metadati e parametri di ottimizzazione attivi. Eseguitearc_summary -s arcsolo per la sezione ARC.- I contatori grezzi si trovano
/proc/spl/kstat/zfs/arcstatssu Linux e sotto ilkstat.zfs.miscevfs.zfsalberi sysctl su FreeBSD. È preferibile estrarli dal sistema di monitoraggio piuttosto che analizzare l'output formattato.
I contatori che vale la pena registrare prima di qualsiasi modifica:
| Metrica | Dove trovarla | Perché è importante |
|---|---|---|
Dimensione, target e valore massimo dell’ARC (size, c, c_max) | arcstat, kstat | Indica se l'ARC ha raggiunto il limite massimo o se ha ancora spazio per crescere |
| Dati sulla domanda e percentuali di hit dei metadati | arcstat, arc_summary | I mancati soddisfacimenti della domanda si traducono direttamente in latenza dell’applicazione |
Memoria disponibile e attività di swap (si/so) | free -h, vmstat 1 | Un'attività sostenuta di swap-in/out quando l'ARC è di grandi dimensioni è il segnale più evidente di pressione sulla memoria |
Tempo di servizio del disco (await) e utilizzo | iostat -x | Collega i miss dell’ARC ai colli di bottiglia effettivi dello storage |
memory_throttle_count | /proc/spl/kstat/zfs/arcstats | Un conteggio in aumento conferma che ZFS è sottoposto a limitazioni a causa della pressione sulla memoria |
Ci sono due cose che spesso vengono fraintese in questo contesto. Occorre monitorare la memoria disponibile, non quella libera; Linux segnala tranquillamente una RAM libera bassa come stato stabile e questo di per sé non è un problema. Il segnale che conta è una memoria disponibile vicina allo zero, combinata con un’attività di swap prolungata (la guida introduttiva alla gestione della memoria in Linux spiega il perché). Inoltre, considerate il rapporto di hit come una tendenza, non come un obiettivo. Un rapporto di hit del 99% su una macchina che sta effettuando lo swap è un fallimento nell’ottimizzazione, non un successo.
I quattro parametri di regolazione ARC che contano
La maggior parte dell’ottimizzazione in produzione si riduce a quattro impostazioni. Adatta l’impostazione alla pressione effettivamente misurata nella linea di base. L’attività di swap indica zfs_arc_max. Il recupero del churn che continua a svuotare una cache attiva indica zfs_arc_min. I percorsi lenti nelle directory indicano il limite dei metadati.
| Parametro | Cosa fa | Quando modificarlo | Rischi in caso di impostazione errata |
|---|---|---|---|
zfs_arc_max | Limite massimo rigido sull’utilizzo della RAM ARC | Co-hosting di database o VM che necessitano di RAM riservata | Troppo basso: maggiore I/O su disco e latenza. Troppo alto: pressione sullo swap o OOM. |
zfs_arc_min | Limite minimo che impedisce alla RAM ARC di ridursi in modo aggressivo | Carichi di lavoro con brevi picchi di memoria che continuano a svuotare la cache | Troppo alto: limita le risorse delle applicazioni in caso di effettiva pressione sulla memoria |
zfs_arc_meta_limit_percent | Quota di ARC disponibile per i metadati (sostituisce il precedente zfs_arc_meta_limit) | Milioni di file di piccole dimensioni, alberi di directory profondi, lentezza ls/find | Troppo basso: le ricerche nelle directory procedono a passo di lumaca. Troppo alto: limita la memorizzazione dei dati nella cache. |
zfs_arc_free_target | Quanta memoria di sistema libera ZFS cerca di mantenere disponibile | Server con improvvisi picchi di allocazione (avvio di macchine virtuali, piani di query di grandi dimensioni) | Troppo alto: l’ARC rimane piccolo anche quando la RAM è disponibile |
Inizia con la modifica più piccola che risolva il problema che riesci a individuare. Per zfs_arc_max, il limite massimo corretto dipende dal carico di lavoro (argomento trattato nella sezione successiva). Per zfs_arc_min, un limite minimo compreso tra il 25% e il 50% di zfs_arc_max è un punto di partenza ragionevole, se proprio ne serve uno. Per i metadati, le recenti impostazioni predefinite di OpenZFS assegnano già ai metadati il 75% dell’ARC tramite zfs_arc_meta_limit_percent, il che è più che sufficiente per la maggior parte dei carichi di lavoro; intervenire su questo valore solo quando le mancate individuazioni dei metadati sono chiaramente visibili in arcstat.
Applicazione delle modifiche su Linux e FreeBSD
Su Linux, è possibile testare una modifica durante l’esecuzione scrivendo nel file dei parametri sysfs. Non è necessario riavviare il sistema:
echo 17179869184 > /sys/module/zfs/parameters/zfs_arc_maxQuesto imposta zfs_arc_max a 16 GiB immediatamente. Per far sì che la modifica sopravviva al riavvio, aggiungerla a /etc/modprobe.d/zfs.conf:
options zfs zfs_arc_max=17179869184Su FreeBSD, le modifiche in fase di esecuzione utilizzano sysctl:
sysctl vfs.zfs.arc_max=17179869184Per mantenere lo stesso valore in /boot/loader.conf:
vfs.zfs.arc_max="17179869184"Modifica un’impostazione alla volta, con piccoli incrementi pari a circa il 10% della RAM totale. Tieni d’occhio la finestra dei problemi. Mantieni la modifica solo se lo swap rimane a zero e la latenza è stabile. Rendi permanente l’impostazione solo dopo che il test in fase di esecuzione è andato a buon fine.
Ottimizzazione dell’ARC in base al carico di lavoro
La RAM totale non è il punto di partenza corretto. Il dimensionamento dell’ARC deve seguire la composizione del carico di lavoro sul dispositivo.
| Carico di lavoro | Inizio zfs_arc_max | Priorità ARC | Note | Metrica chiave |
|---|---|---|---|---|
| File server dedicato / NAS | Dal 75% all'80% della RAM | Dati e metadati | Prefetch attivato. L'importante è una cache aggressiva. | Tasso di hit complessivo |
| Host di virtualizzazione | Dal 30% al 40% della RAM | Equilibrato | Lasciare un margine per la RAM del guest e le attività dell’host. Qualsiasi valore diverso da zero si/so significa un limite ancora più basso. | Swap dell'host (si/so) |
| Server di database | dal 25% al 50% della RAM | Con prevalenza di metadati | Riservare prima la memoria per il motore del DB. Impostare primarycache=metadata se il motore gestisce autonomamente la propria cache del buffer. | Mancate corrispondenze della richiesta |
| Destinazione di backup/archiviazione | Limite conservativo | Solo metadati | Impostato primarycache=metadata in modo che le scansioni a passaggio singolo non eliminino blocchi utili. | Mancati nel prefetch, percentuale di metadati trovati |
| Analisi / letture ripetute | Limite massimo più elevato dopo la prenotazione di altre cache | MFU elevato | L2ARC su NVMe è in grado di mantenere il working set più utilizzato durante l’esecuzione delle query. | Mancati a richiesta |
Un host VM deve condividere la memoria con i propri guest, quindi un limite dal 30% al 40% è un valore predefinito sicuro e il 50% è già troppo alto nella maggior parte delle configurazioni. Database come PostgreSQL e MySQL gestiscono autonomamente le proprie cache di buffer, quindi è necessario riservare prima la memoria per il motore e lasciare ad ARC ciò che rimane. Le destinazioni di backup traggono vantaggio da primarycache=metadata poiché i dati letti raramente vengono riutilizzati e non è auspicabile che un backup notturno scorra l’intero pool svuotando il resto della cache man mano che procede. Per ogni carico di lavoro, l’attività di swap mentre l’ARC è bloccato a zfs_arc_max indica che il limite è troppo alto; questa regola non cambia.
Diagnosticare i problemi e sapere quando fermarsi
Un ARC sottodimensionato si manifesta con un elevato numero di IOPS in lettura, bassi tassi di hit delle richieste e navigazione lenta nelle directory, mentre il sistema dispone ancora di RAM libera. Un ARC sovradimensionato è meno evidente. Il tasso di hit sembra a posto, ma il sistema inizia a ricorrere allo swapping, le medie di carico salgono, i processi rimangono bloccati in D stato mentre il kernel recupera le pagine dell’ARC su richiesta e, nel peggiore dei casi, l’OOM killer inizia a scegliere le vittime. La cache sembra in buone condizioni, ma il server funziona malissimo.
La pressione sui metadati si manifesta quando demand_metadata_bytes è molto più alta rispetto a demand_data_bytes in arc_summary. È in quel momento che i metadati competono con i dati per lo spazio, e vale la pena aumentare il limite percentuale dei metadati.
Confronta ciò che osservi con la prima impostazione da verificare:
| Sintomo | Probabile causa | Prima opzione da verificare | Passo successivo |
|---|---|---|---|
Elevata await con un numero elevato di errori di richiesta | Il working set supera l'ARC | zfs_arc_max | Aggiungere RAM o aggiungere L2ARC |
| Attività di swap quando l'ARC è grande | L'ARC sta limitando il sistema operativo o le applicazioni | zfs_arc_max | Ridurre il limite massimo |
| Le prestazioni calano dopo i picchi di memoria | Eviction aggressiva durante il recupero | zfs_arc_min | Impostare un limite minimo compreso tra il 25% e il 50% di arc_max |
Lente ls, find, operazioni su file di piccole dimensioni | Esaurimento della cache dei metadati | zfs_arc_meta_limit_percent | Aumentare la percentuale dei metadati |
In aumento memory_throttle_count | Pressione sulla memoria a livello di sistema | zfs_arc_max | Abbassare il limite massimo; verificare l'ingombro dell'indice L2ARC |
L2ARC non è gratuito. L'indice delle voci L2ARC risiede nell'ARC primario e, se tale overhead supera circa un terzo della capacità totale dell'ARC, la cache secondaria fa più male che bene. Ricorrere a L2ARC solo quando il working set è più grande della RAM ma rientra comunque in un dispositivo NVMe veloce, e solo quando il rapporto di hit dell’ARC primario è già soddisfacente.
Il momento giusto per interrompere l’ottimizzazione è quando la latenza rimane stabile, lo swap rimane a zero durante lo stesso periodo di picco di carico che ha causato il problema originale e ulteriori modifiche non apportano più alcun miglioramento. Un rapporto di hit elevato non significa nulla se il server sta effettuando lo swap. Superato quel punto, smettete di modificare le impostazioni e rivedetele solo se lo stesso problema si ripresenta con lo stesso carico di lavoro.
Se avete bisogno di un server con margine di RAM sufficiente per eseguire correttamente ZFS senza dover competere con le vostre VM o i vostri database per la memoria (vale la pena leggere prima "Quanta RAM vi serve effettivamente?"), date un’occhiata ai server dedicati FDC.

Affaticamento degli occhi da schermi digitali: come proteggere la vista in un mondo dominato dagli schermi
Passi tutto il giorno davanti allo schermo? Scopri come ridurre l’affaticamento visivo da schermo con tecniche e strumenti collaudati. Questa guida è indispensabile per i lavoratori da remoto, gli sviluppatori e chiunque operi nel settore tecnologico.
4 min di lettura - 21 maggio 2025
Perché è importante disporre di un VPS potente e senza limiti di traffico
8 min di lettura - 9 maggio 2025

Avete domande o avete bisogno di una soluzione personalizzata?
Opzioni flessibili
Portata globale
Distribuzione immediata
Opzioni flessibili
Portata globale
Distribuzione immediata