Configurazione della cache ZFS per IO ad alta velocità

Configurazione della cache ZFS per IO ad alta velocità
Il team dietro ZFS crede che la memoria libera e inutilizzata sia sprecata. Quindi, hanno progettato ZFS per memorizzare nella cache i dati in modo molto aggressivo. ZFS cerca di memorizzare nella cache di più dati nella memoria (RAM) per fornire un accesso più rapido al filesystem.

Sfortunatamente, la memoria (RAM) è molto costosa. Quindi, ZFS ti consente anche di utilizzare SSD veloci per la memorizzazione nella cache dei dati. I dati di memorizzazione nella cache sulla memoria sono chiamati cache di livello 1 o L1 e la memorizzazione nella cache dei dati sull'SSD sono chiamati cache di livello 2 o L2.

ZFS esegue 2 tipi di cache di lettura

1. ARC (cache di sostituzione adattiva):

ZFS cade i file accessibili più recentemente e più frequentemente nella RAM. Una volta che un file viene memorizzato nella memoria, la prossima volta che accedi allo stesso file, verrà servito dalla cache anziché dal tuo disco rigido lento. L'accesso a questi file memorizzati nella cache sarà molte volte più veloce che se dovessero accedere da dischi rigidi.

2. L2ARC (cache di sostituzione adattiva di livello 2):

La cache dell'arco è memorizzata nella memoria del computer. Quando la memoria è piena, i dati più antichi vengono rimossi dalla cache dell'arco e vengono memorizzati nella cache nuovi dati. Se non vuoi che ZFS getta via in modo permanente i dati memorizzati nella cache, puoi configurare un SSD veloce come cache L2ARC per il tuo pool ZFS.

Una volta configurata una cache L2ARC per il tuo pool ZFS, ZFS archiverà i dati rimossi dalla cache ARC nella cache L2ARC. Quindi, più dati possono essere mantenuti nella cache per un accesso più rapido.

ZFS esegue 2 tipi di cache di scrittura

1. Zil (log di intenti ZFS):

ZFS assegna una piccola parte del pool per conservare le cache di scrittura per impostazione predefinita. È chiamato Zil O LOG DI INTENTI DI ZFS. Prima che i dati vengano scritti nei dischi rigidi fisici, vengono archiviati in Zil. Per ridurre al minimo il numero di operazioni di scrittura e ridurre la frammentazione dei dati, i dati vengono raggruppati in ZIL e scaricati sul disco rigido fisico una volta soddisfatta una determinata soglia. È più simile a un buffer di scrittura che alla cache. Puoi pensarci in questo modo.

2. Slogan (registro secondario):

Poiché ZFS utilizza una piccola parte del pool per conservare Zil, condivide la larghezza di banda del pool ZFS. Ciò può avere un impatto negativo sulle prestazioni del pool ZFS.

Per risolvere questo problema, è possibile utilizzare un SSD veloce come dispositivo di slogan. Se esiste un dispositivo di slogan su un pool ZFS, ZIL viene spostato sul dispositivo slogan. ZFS non archiverà più i dati ZIL sul pool. Quindi, nessuna larghezza di banda della piscina è sprecata su Zil.

Ci sono anche altri vantaggi. Se un'applicazione scrive nel pool ZFS sulla rete (i.e. VMware ESXI, NFS), ZFS possono scrivere rapidamente i dati su Slog e inviare un riconoscimento all'applicazione che i dati sono scritti sul disco. Quindi, può scrivere i dati su dischi rigidi più lenti come al solito. Ciò renderà queste applicazioni più reattive.

Si noti che normalmente, ZFS non legge dallo slogan. ZFS legge solo i dati dallo slogan in caso di perdita di potenza o fallimento della scrittura. Le scritture riconosciute sono conservate lì solo temporaneamente fino a quando non vengono scaricate nei dischi rigidi più lenti. È solo lì per garantire che in caso di perdita di potenza o fallimento della scrittura, le scritture riconosciute non siano perse e sono scaricate sui dispositivi di archiviazione permanenti il ​​più rapidamente possibile.

Si noti inoltre che in assenza di un dispositivo slogan, ZIL verrà utilizzato per lo stesso scopo.

Ora che sai tutto sulle cache di lettura e scrittura di ZFS, vediamo come configurarle sul tuo pool ZFS.

Sommario

  1. Configurazione del limite di memoria massimo per l'arco
  2. Aggiunta di un dispositivo cache L2ARC
  3. Aggiunta di un dispositivo di slogan
  4. Conclusione
  5. Riferimenti

Configurazione del limite di memoria massimo per l'arco

Su Linux, ZFS utilizza il 50% della memoria installata per la memorizzazione nella cache per impostazione predefinita. Quindi, se hai 8 GB di memoria installati sul tuo computer, ZFS utilizzerà 4 GB di memoria per la memorizzazione nella cache ad arco a Max.

Se hai bisogno, è possibile aumentare o ridurre la quantità massima di memoria che gli ZF possono utilizzare per la memorizzazione nella cache dell'arco. Per impostare la quantità massima di memoria che ZFS può utilizzare per la memorizzazione nella cache dell'arco, è possibile utilizzare il zfs_arc_max parametro del kernel.

Puoi trovare molte informazioni sull'utilizzo della cache dell'arco con il arc_summary comando come segue:

$ sudo arc_summary -s arc

Nel Dimensione dell'arco (corrente) sezione, puoi trovare la dimensione massima che la cache dell'arco può crescere (Dimensione massima (acqua alta)), la dimensione dell'attuale cache dell'arco (Dimensione del bersaglio (adattivo)) e altre informazioni sull'utilizzo della cache dell'arco come puoi vedere nello screenshot seguente.

Si noti che, la dimensione della cache dell'arco massimo sul mio computer è 3.9 GB come ho installato 8 GB di memoria sul mio computer. Questo è circa il 50% della memoria totale disponibile come ho detto prima.

Puoi vedere quanti dati colpiscono la cache dell'arco e quanti dati mancano anche la cache dell'arco. Questo può aiutarti a determinare quanto effettivamente la cache dell'arco funziona nel tuo scenario.

Per stampare un riepilogo dei colpi/mancati di cache ARC, eseguire il seguente comando:

$ sudo arc_summary -s archits

È necessario visualizzare un riepilogo dei colpi di cache e delle mancate.

È possibile monitorare l'utilizzo della memoria della cache dell'arco ZFS con il seguente comando:

$ sudo arcstat 1 2>/dev/null

Come puoi vedere, la memoria massima della cache dell'arco (C), la dimensione della cache dell'arco corrente (arcsz), dati letti dalla cache dell'arco (Leggere) e vengono visualizzate altre informazioni.

Ora, vediamo come impostare un limite di memoria personalizzato per la cache dell'arco ZFS.

Per impostare un limite di memoria massimo personalizzato per la cache dell'arco ZFS, crea un nuovo file zfs.conf nel /etc/modprobe.D/ directory come segue:

$ sudo nano /etc /modprobe.d/zfs.conf

Digitare nella riga seguente in zfs.conf file:

Opzioni zfs zfs_arc_max =

Sostituire, Con il limite di memoria massimo desiderato per la cache dell'arco ZFS in byte.

Diciamo, vuoi usare 5 GB di memoria per la cache dell'arco ZFS. Per convertire 5 GB in byte, è possibile utilizzare il seguente comando:

$ echo $ ((5*2 ** 30))

Come potete vedere, 5 GB è uguale a 5368709120 byte.

Puoi fare la stessa cosa con l'interprete di Python 3 come segue:

$ python3 -c "stampa (5*2 ** 30)"

Dopo aver impostato il limite di memoria massimo della cache dell'arco ZFS, premere + X seguito da Y E per salvare il zfs.conf file.

Ora, aggiorna l'immagine initramfs del tuo kernel corrente con il seguente comando:

$ sudo update -iniTramfs -u

L'immagine initramfs dovrebbe essere aggiornata.

Per avere effetto le modifiche, riavviare il computer con il seguente comando:

$ sudo riavvia

La prossima volta che si avvia il tuo computer, il limite di memoria massimo della cache ARC ZFS dovrebbe essere impostato sulla dimensione desiderata (5 GB nel mio caso) come puoi vedere nello screenshot in basso.

$ sudo arc_summary -s arc

Aggiunta di un dispositivo cache L2ARC

Se un dispositivo di cache L2ARC (un SSD SSD o NVME) viene aggiunto al pool ZFS, ZFS scaricherà (muoverà) le cache dell'arco sul dispositivo L2ARC quando la memoria è piena (o raggiunta il limite ARC MAX). Quindi, più dati possono essere conservati nella cache per un accesso più rapido al pool ZFS.

Per seguire gli esempi, crea un pool di test ZFS Pool1 con /dev/sdb E /dev/sdc dischi rigidi nella configurazione a specchio come segue:

$ sudo zpool create -f pool1 mirror /dev /sdb /dev /sdc

Una piscina ZFS Pool1 dovrebbe essere creato con il /dev/sdb E /dev/sdc dischi rigidi in modalità mirror come puoi vedere nello screenshot in basso.

$ sudo zpool status pool1

Ora, diciamo, vuoi aggiungere l'SSD NVME nvme0n1 come un dispositivo cache L2ARC per il pool ZFS Pool1.

$ sudo lsblk -e7

Per aggiungere l'SSD NVME nvme0n1 al pool ZFS Pool1 Come dispositivo L2ARC Cache, eseguire il comando seguente:

$ sudo zpool add -f pool1 cache /dev /nvme0n1

L'SSD NVME nvme0n1 dovrebbe essere aggiunto al pool ZFS Pool1 Come dispositivo cache L2ARC come puoi vedere nello screenshot qui sotto.

$ sudo zpool status pool1

Dopo aver aggiunto un dispositivo L2ARC Cache al tuo pool ZFS, è possibile visualizzare le statistiche della cache L2ARC utilizzando il arc_summary comando come segue:

$ sudo arc_summary -s l2arc

Le statistiche della cache L2ARC devono essere visualizzate come si può vedere nello screenshot seguente.

Aggiunta di un dispositivo di slogan

È possibile aggiungere uno o più SSDS/NVME SSD sul tuo pool ZFS come dispositivo SLOG (Secondary Log) per archiviare il registro di intenti ZFS (ZIL) del tuo pool ZFS lì.

Di solito è sufficiente l'aggiunta di un SSD. Ma poiché lo slogan viene utilizzato per assicurarsi che le scritture non si perdano nel caso di un'interruzione di corrente e altri problemi di scrittura, si consiglia di utilizzare 2 SSD in una configurazione a specchio. Questo ti darà un po 'più di protezione e si assicurerà che nessuna scrittura sia persa.

Diciamo, vuoi aggiungere gli SSD NVME nvme0n2 E nvme0n3 Come dispositivo di slogan sul tuo pool ZFS Pool1 In una configurazione a specchio.

$ sudo lsblk -e7

Per aggiungere gli SSD NVME nvme0n2 E nvme0n3 Come dispositivo di slogan sul tuo pool ZFS Pool1 In una configurazione a specchio, eseguire il seguente comando:

$ sudo zpool add -f pool1 specchio log /dev /nvme0n2 /dev /nvme0n3

Se vuoi aggiungere un singolo SSD NVME nvme0n2 Come dispositivo di slogan sul tuo pool ZFS Pool1, Puoi invece eseguire il seguente comando:

$ sudo zpool add -f pool1 log /dev /nvme0n2

Gli SSD NVME nvme0n2 E nvme0n3 dovrebbe essere aggiunto al tuo pool ZFS Pool1 Come dispositivo di slogan in modalità mirror come puoi vedere nello screenshot in basso.

$ sudo zpool status pool1

È possibile trovare informazioni di transazione ZIL e Slog utilizzando il arc_summary comando come segue:

$ sudo arc_summary -s zil

Le informazioni sulle transazioni di Zil e Slog devono essere visualizzate come puoi vedere nello screenshot seguente.

Conclusione

In questo articolo, ho discusso di diversi tipi di funzionalità di cache di lettura e scrittura del filesystem ZFS. Ti ho anche mostrato come configurare il limite di memoria per la cache dell'arco. Ti ho mostrato come aggiungere anche un dispositivo cache L2ARC e un dispositivo di slogan al tuo pool ZFS.

Riferimenti

[1] ZFS - Wikipedia

[2] ELI5: ZFS Caching (2019) - YouTube

[3] Introduzione di ZF su Linux - Damian Wojstaw

[4] Ubuntu MANPAGE: parametri ZFS-Module-Parametri del modulo ZFS

[5] Ram - è ZFS su Ubuntu 20.04 usando una tonnellata di memoria? - Chiedi a Ubuntu