ZFS

Configurazione della cache ZFS per I/O ad alta velocità Speed

Configurazione della cache ZFS per I/O ad alta velocità Speed

Configurazione della cache sul pool ZFS

Se hai letto i nostri post precedenti sulle basi di ZFS, ormai sai che questo è un filesystem robusto file. Esegue checksum su ogni blocco di dati scritti sul disco e metadati importanti, come i checksum stessi, vengono scritti in più punti diversi. ZFS potrebbe perdere i tuoi dati, ma è garantito che non ti restituirà mai dati errati, come se fossero quelli giusti.

La maggior parte della ridondanza per un pool ZFS proviene dai VDEV sottostanti. Lo stesso vale per le prestazioni dello storage pool. Sia le prestazioni di lettura che di scrittura possono migliorare notevolmente con l'aggiunta di SSD ad alta velocità o dispositivi NVMe. Se hai utilizzato dischi ibridi in cui un SSD e un disco rotante sono raggruppati come un singolo componente hardware, allora sai quanto sono scadenti i meccanismi di memorizzazione nella cache a livello hardware. ZFS non è niente di simile, a causa di vari fattori, che esploreremo qui.

Esistono due diverse cache che un pool può utilizzare:

  1. ZFS Intent Log, o ZIL, per bufferizzare le operazioni di SCRITTURA.
  2. ARC e L2ARC che sono pensati per operazioni di READ.

Scritture sincrone e asincrone

ZFS, come la maggior parte degli altri filesystem, cerca di mantenere un buffer di operazioni di scrittura in memoria e quindi di scriverlo sui dischi invece di scriverlo direttamente sui dischi. Questo è noto come asincrono scrivere e offre miglioramenti delle prestazioni decenti per le applicazioni che tollerano i guasti o in cui la perdita di dati non causa molti danni. Il sistema operativo memorizza semplicemente i dati in memoria e comunica all'applicazione, che ha richiesto la scrittura, che la scrittura è completata. Questo è il comportamento predefinito di molti sistemi operativi, anche quando si esegue ZFS.

Tuttavia, resta il fatto che in caso di guasto del sistema o mancanza di alimentazione, tutte le scritture bufferizzate 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 sono effettivamente sul disco. La maggior parte dei database e delle applicazioni come NFS si affidano sempre alle scritture sincrone.

Puoi impostare la bandiera: sincronizzazione=sempre per rendere le scritture sincrone il comportamento predefinito per un dato set di dati.

$zfs set sync=sempre miopool/dataset1

Naturalmente, potresti desiderare di avere una buona prestazione indipendentemente dal fatto che i file siano o meno in modalità sincrona. È qui che entra in gioco ZIL.


ZFS Intent Log (ZIL) e dispositivi SLOG

ZFS Intent Log si riferisce a una parte dello storage pool che ZFS utilizza per memorizzare i dati nuovi o modificati prima di distribuirli nello storage pool principale, eliminando tutti i VDEV.

Per impostazione predefinita, una piccola quantità di spazio di archiviazione viene sempre ritagliata dal pool per agire come ZIL, anche quando si utilizza solo un gruppo di dischi rotanti per lo spazio di archiviazione. Tuttavia, puoi fare di meglio se hai un piccolo NVMe o qualsiasi altro tipo di SSD a tua disposizione.

Lo spazio di archiviazione piccolo e veloce può essere utilizzato come registro di intenti separato (o SLOG), che è il luogo in cui i dati appena arrivati ​​verranno archiviati temporaneamente prima di essere scaricati nella memoria principale più grande del pool. Per aggiungere un dispositivo slog eseguire il comando:

$zpool aggiunge il registro del serbatoio ada3

Dove carro armato è il nome della tua piscina, log è la parola chiave che dice a ZFS di trattare il dispositivo ada3 come dispositivo SLOG. Il nodo del dispositivo del tuo SSD potrebbe non essere necessariamente ada3, usa il nome del nodo corretto.

Ora puoi controllare i dispositivi nella tua piscina come mostrato di seguito:

Potresti ancora essere preoccupato che i dati in una memoria non volatile falliscano, se l'SSD si guasta. In tal caso, puoi utilizzare più SSD che si rispecchiano a vicenda o in qualsiasi configurazione RAIDZ.

$zpool aggiunge il mirror del registro del serbatoio ada3 ada4

Per la maggior parte dei casi d'uso, i piccoli 16 GB a 64 GB di memoria flash davvero veloce e duratura sono i candidati più adatti per un dispositivo SLOG.


Cache sostitutiva 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 e transazioni affidabili, ora il motivo di ZFS si sposta sulla previsione del futuro. Ciò significa memorizzare nella cache le informazioni che un'applicazione richiederebbe nel prossimo futuro, scartando quelle che saranno necessarie più avanti nel tempo.

Per fare ciò, una parte della memoria principale viene utilizzata per la memorizzazione nella cache dei dati utilizzati di recente o ai dati a cui si accede più frequentemente. Ecco da dove deriva il termine Adaptive Replacement Cache (ARC). Oltre alla tradizionale memorizzazione nella cache di lettura, in cui vengono memorizzati nella cache solo gli oggetti utilizzati più di recente, l'ARC presta attenzione anche alla frequenza di accesso ai dati.

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

Per aggiungere un dispositivo come L2ARC al tuo pool ZFS, esegui il comando:

$zpool aggiunge la cache del serbatoio ada3

Dove carro armato è il nome della tua piscina e ada3 è il nome del nodo del dispositivo per l'archiviazione L2ARC.


Sommario

Per farla breve, un sistema operativo spesso bufferizza le operazioni di scrittura nella memoria principale, se i file vengono aperti in modalità asincrona. Questo non deve essere confuso con l'effettiva cache di scrittura di ZFS, ZIL.

ZIL, per impostazione predefinita, è una parte dell'archiviazione non volatile del pool in cui i dati vengono archiviati temporaneamente prima di essere distribuiti correttamente in tutti i VDEV. Se utilizzi un SSD come dispositivo ZIL dedicato, è noto come SLOG. Come qualsiasi VDEV, SLOG può essere in configurazione mirror o raidz.

La cache di lettura, archiviata nella memoria principale, è nota come ARC. Tuttavia, a causa delle dimensioni limitate della RAM, puoi sempre aggiungere un SSD come L2ARC, dove vengono memorizzate nella cache le cose che non possono entrare nella RAM.

Le 5 migliori carte di acquisizione del gioco
Abbiamo tutti visto e amato i giochi in streaming su YouTube. PewDiePie, Jakesepticye e Markiplier sono solo alcuni dei migliori giocatori che hanno g...
Come sviluppare un gioco su Linux
Un decennio fa, non molti utenti Linux avrebbero previsto che il loro sistema operativo preferito un giorno sarebbe diventato una piattaforma di gioco...
Porte open source di motori di gioco commerciali
Ricreazioni del motore di gioco gratuite, open source e multipiattaforma possono essere utilizzate per riprodurre titoli di giochi vecchi e abbastanza...