Ottimizzazione di ZFS ARC: soglie, limiti e cosa misurare

11 min di lettura - 24 giugno 2026

hero section cover
Indice
  • Misurate l’ARC prima di ottimizzare qualsiasi parametro
  • I quattro parametri di regolazione ARC che contano
  • Ottimizzazione dell’ARC in base al carico di lavoro
  • Diagnosticare i problemi e sapere quando fermarsi
Condividi

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 1 fornisce 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_summary stampa una singola istantanea: dimensione e target dell’ARC, ripartizione MFU/MRU, rapporti dei metadati e parametri di ottimizzazione attivi. Eseguite arc_summary -s arc solo per la sezione ARC.
  • I contatori grezzi si trovano /proc/spl/kstat/zfs/arcstats su Linux e sotto il kstat.zfs.misc e vfs.zfs alberi 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:

MetricaDove trovarlaPerché è importante
Dimensione, target e valore massimo dell’ARC (size, c, c_max)arcstat, kstatIndica se l'ARC ha raggiunto il limite massimo o se ha ancora spazio per crescere
Dati sulla domanda e percentuali di hit dei metadatiarcstat, arc_summaryI mancati soddisfacimenti della domanda si traducono direttamente in latenza dell’applicazione
Memoria disponibile e attività di swap (si/so)free -h, vmstat 1Un'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 utilizzoiostat -xCollega i miss dell’ARC ai colli di bottiglia effettivi dello storage
memory_throttle_count/proc/spl/kstat/zfs/arcstatsUn 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.

ParametroCosa faQuando modificarloRischi in caso di impostazione errata
zfs_arc_maxLimite massimo rigido sull’utilizzo della RAM ARCCo-hosting di database o VM che necessitano di RAM riservataTroppo basso: maggiore I/O su disco e latenza. Troppo alto: pressione sullo swap o OOM.
zfs_arc_minLimite minimo che impedisce alla RAM ARC di ridursi in modo aggressivoCarichi di lavoro con brevi picchi di memoria che continuano a svuotare la cacheTroppo alto: limita le risorse delle applicazioni in caso di effettiva pressione sulla memoria
zfs_arc_meta_limit_percentQuota 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/findTroppo basso: le ricerche nelle directory procedono a passo di lumaca. Troppo alto: limita la memorizzazione dei dati nella cache.
zfs_arc_free_targetQuanta memoria di sistema libera ZFS cerca di mantenere disponibileServer 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_max

Questo 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=17179869184

Su FreeBSD, le modifiche in fase di esecuzione utilizzano sysctl:

sysctl vfs.zfs.arc_max=17179869184

Per 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 lavoroInizio zfs_arc_maxPriorità ARCNoteMetrica chiave
File server dedicato / NASDal 75% all'80% della RAMDati e metadatiPrefetch attivato. L'importante è una cache aggressiva.Tasso di hit complessivo
Host di virtualizzazioneDal 30% al 40% della RAMEquilibratoLasciare 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 databasedal 25% al 50% della RAMCon prevalenza di metadatiRiservare 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/archiviazioneLimite conservativoSolo metadatiImpostato primarycache=metadata in modo che le scansioni a passaggio singolo non eliminino blocchi utili.Mancati nel prefetch, percentuale di metadati trovati
Analisi / letture ripetuteLimite massimo più elevato dopo la prenotazione di altre cacheMFU elevatoL2ARC 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:

SintomoProbabile causaPrima opzione da verificarePasso successivo
Elevata await con un numero elevato di errori di richiestaIl working set supera l'ARCzfs_arc_maxAggiungere RAM o aggiungere L2ARC
Attività di swap quando l'ARC è grandeL'ARC sta limitando il sistema operativo o le applicazionizfs_arc_maxRidurre il limite massimo
Le prestazioni calano dopo i picchi di memoriaEviction aggressiva durante il recuperozfs_arc_minImpostare un limite minimo compreso tra il 25% e il 50% di arc_max
Lente ls, find, operazioni su file di piccole dimensioniEsaurimento della cache dei metadatizfs_arc_meta_limit_percentAumentare la percentuale dei metadati
In aumento memory_throttle_countPressione sulla memoria a livello di sistemazfs_arc_maxAbbassare 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.

Blog

In primo piano questa settimana

Altri articoli
Affaticamento degli occhi da schermi digitali: come proteggere la vista in un mondo dominato dagli schermi

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

Altri articoli
background image

Avete domande o avete bisogno di una soluzione personalizzata?

icon

Opzioni flessibili

icon

Portata globale

icon

Distribuzione immediata

icon

Opzioni flessibili

icon

Portata globale

icon

Distribuzione immediata