Configurazione della cache ZFS per IO ad alta velocità

Configurazione della cache ZFS per IO ad alta velocità

Configurazione della cache sul pool ZFS

Se hai vissuto i nostri precedenti post sulle basi ZFS che sai ormai che questo è un filesystem robusto. Esegue i checksum su ogni blocco di dati scritti sul disco e importanti metadati, come i checksum stessi, sono scritti in più luoghi diversi. ZFS potrebbe perdere i tuoi dati, ma è garantito che non ti restituisca mai dati sbagliati, come se fosse quello giusto.

La maggior parte della ridondanza per un pool ZFS proviene dai VDEV sottostanti. Lo stesso vale per le prestazioni del pool di archiviazione. Sia le prestazioni di lettura che scrittura possono migliorare notevolmente con l'aggiunta di SSD ad alta velocità o dispositivi NVME. Se hai usato dischi ibridi in cui un SSD e un disco di rotazione sono in bundle come un singolo pezzo di hardware, allora sai quanto sono cattivi i meccanismi di memorizzazione nella cache del livello hardware. ZFS non è niente del genere, a causa di vari fattori, che esploreremo qui.

Ci sono due diverse cache che una piscina può utilizzare:

  1. ZFS Intent Log, o zil, a buffer write operations.
  2. Arc e L2ARC che sono pensati per le operazioni di lettura.

Scrivi sincroni vs asincroni

ZFS, come la maggior parte degli altri filesystem, cerca di mantenere in memoria un buffer di operazioni di scrittura e quindi scriverlo ai dischi invece di scriverlo direttamente sui dischi. Questo è noto come asincrono Scrivi e dà guadagni decenti per le applicazioni che sono tolleranti ai guasti o in cui la perdita di dati non fa molti danni. Il sistema operativo memorizza semplicemente i dati in memoria e dice che l'applicazione, che ha richiesto la scrittura, la scrittura è completata. Questo è il comportamento predefinito di molti sistemi operativi, anche quando si esegue ZFS.

Tuttavia, rimane il fatto che in caso di guasto del sistema o perdita di potenza, tutte le scritture bufferi nella memoria principale vengono perse. Quindi le applicazioni che desiderano coerenza rispetto alle prestazioni possono aprire i file in sincrono Modalità e quindi i dati vengono considerati scritti solo una volta che è effettivamente sul disco. La maggior parte dei database e delle applicazioni come NFS si affidano sempre alle scritture sincroni.

Puoi impostare la flag: sync = sempre Per rendere le scritture sincroni il comportamento predefinito per un determinato set di dati.

$ zfs set sync = sempre mypool/dataset1

Naturalmente, potresti desiderare di avere una buona prestazione indipendentemente dal fatto che i file siano o meno in modalità sincrona. Ecco dove Zil entra in scena.


ZFS Intent Log (ZIL) e dispositivi Slog

Il registro degli intenti ZFS si riferisce a una parte del pool di archiviazione che ZFS utilizza per archiviare dati nuovi o modificati prima di diffonderli durante il pool di archiviazione principale, spogliandosi su tutti i VDEV.

Per impostazione predefinita, una piccola quantità di spazio di archiviazione viene sempre scolpita dalla piscina per comportarsi come Zil, anche quando si utilizza solo un mucchio di dischi rotanti per il tuo spazio di archiviazione. Tuttavia, puoi fare di meglio se hai un piccolo NVME o qualsiasi altro tipo di SSD a tua disposizione.

La memoria piccola e veloce può essere utilizzata come registro di intenti separato (o slogan), che è dove i dati appena arrivati ​​verrebbero archiviati temporaneamente prima di essere scaricati sulla più grande memoria principale del pool. Per aggiungere un dispositivo slogan Esegui il comando:

$ zpool Aggiungi registro del serbatoio Ada3

Dove cisterna è il nome del tuo pool, tronco d'albero è la parola chiave che dice a ZFS di trattare il dispositivo Ada3 Come dispositivo di slogan. Il nodo del dispositivo del tuo SSD potrebbe non esserlo necessariamente Ada3, Utilizzare il nome del nodo corretto.

Ora puoi controllare i dispositivi nel tuo pool come mostrato di seguito:

Potresti ancora essere preoccupato che i dati in una memoria non volatile falliranno, se l'SSD fallisce. In tal caso, è possibile utilizzare più SSD che rispecchiano o in qualsiasi configurazione RAIDZ.

$ zpool Aggiungi specchio del registro del serbatoio Ada3 Ada4

Per la maggior parte dei casi d'uso, i piccoli da 16 GB a 64 GB di archiviazione flash molto veloce e resistente sono i candidati più adatti per un dispositivo di slogan.


Cache di sostituzione adattiva (ARC) e L2ARC

Quando si tenta di memorizzare nella cache le operazioni di lettura, il nostro obiettivo cambia. Invece di assicurarci di ottenere buone prestazioni, oltre a transazioni affidabili, ora i motivi di ZFS si spostano per prevedere il futuro. Ciò significa che la cache delle informazioni che un'applicazione richiederebbe nel prossimo futuro, eliminando quelli che saranno necessari più avanti nel tempo.

Per fare questo una parte della memoria principale viene utilizzata per la memorizzazione nella cache dei dati utilizzati di recente o i dati vengono accessibili più frequentemente. Ecco da dove proviene il termine cache di sostituzione adattiva (ARC). Oltre alla cache di lettura tradizionale, dove vengono memorizzati nella cache solo gli oggetti usati, l'arco presta anche attenzione alla frequenza con cui i dati sono stati accessibili.

L2ARC, o arco di livello 2, è un'estensione dell'arco. Se si dispone di un dispositivo di archiviazione dedicato per fungere da L2ARC, memorizzerà tutti i dati che non sono troppo importanti per rimanere nell'arco ma allo stesso tempo i dati sono abbastanza utili per meritare un posto nella memoria più lenta della memoria Dispositivo NVME.

Per aggiungere un dispositivo come L2ARC al pool ZFS eseguire il comando:

$ zpool Aggiungi serbatoio cache Ada3

Dove cisterna è il nome della tua piscina e Ada3 è il nome del nodo del dispositivo per la memoria L2ARC.


Riepilogo

Per fare una lunga storia, un sistema operativo spesso buffer di scrittura nella memoria principale, se i file vengono aperti in modalità asincrona. Questo non deve essere confuso con la cache di scrittura effettiva di ZFS, Zil.

Zil, per impostazione predefinita, fa parte della memoria non volatile del pool in cui i dati vanno per l'archiviazione temporanea prima che si diffondano correttamente in tutti i VDEV. Se si utilizza un SSD come dispositivo ZIL dedicato, è noto come slogan. Come ogni VDEV, Slog può essere in configurazione Mirror o Raidz.

Leggi la cache, memorizzata nella memoria principale, è noto come l'arco. Tuttavia, a causa delle dimensioni limitate di RAM, è sempre possibile aggiungere un SSD come L2ARC, dove le cose che non possono adattarsi alla RAM sono memorizzate nella cache.