Dopo 11 mesi di sviluppo è stato pubblicato il rilascio del progetto OpenZFS 2.4.0, che sviluppa l'implementazione del file system ZFS per Linux e FreeBSD. Il progetto ha guadagnato notorietà come "ZFS on Linux" e in precedenza era limitato allo sviluppo di un modulo per il kernel di Linux, ma dopo la fusione con il codice di FreeBSD è stato riconosciuto come implementazione principale di OpenZFS e rinominato.
OpenZFS è stato testato con i kernel di Linux dalla versione 4.18 alla 6.18 e con tutti i rami di FreeBSD, a partire dalla versione 13.3. Il codice è distribuito con licenza libera CDDL. OpenZFS è già utilizzato in FreeBSD e fa parte delle distribuzioni Debian, Ubuntu, Gentoo, NixOS e ALT Linux. I pacchetti con la nuova versione saranno preparati a breve per le principali distribuzioni Linux, tra cui Debian, Ubuntu, Fedora, RHEL/CentOS.
OpenZFS fornisce un'implementazione dei componenti ZFS, che sono correlati sia al funzionamento del file system sia al funzionamento del gestore di volumi. Sono stati implementati i seguenti componenti: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) e ZPL (ZFS POSIX Layer). Il progetto permette anche di utilizzare ZFS come backend per il file system cluster Lustre. I risultati di OpenZFS si basano sul codice originale di ZFS, importato dal progetto OpenSolaris e ampliato con miglioramenti e correzioni della comunità Illumos. Il progetto è in fase di sviluppo con la partecipazione di personale del Livermore National Laboratory in base a un contratto con il Dipartimento dell'Energia degli Stati Uniti.
Il codice è distribuito con una licenza libera CDDL, che non è compatibile con GPLv2, il che rende impossibile l'integrazione di OpenZFS nel ramo principale del kernel Linux, poiché la mescolanza di codice sotto licenze GPLv2 e CDDL non è consentita. Per aggirare la incompatibilità della licenza, è stato deciso di distribuire il prodotto per Linux interamente sotto licenza CDDL come modulo scaricabile separatamente dal kernel. La stabilità della base di codice di OpenZFS è considerata paragonabile a quella di altri file system per Linux.
Variazioni principali:
- È stata implementata la possibilità di impostare quote predefinite per utenti, gruppi e progetti. Nelle versioni precedenti, le quote potevano essere impostate solo individualmente per ogni identificatore utente. Nella nuova versione è stata aggiunta la possibilità di impostare un valore predefinito che verrà applicato se per un utente specifico non è stata impostata alcuna quota.
- È stata aggiunta la possibilità di ripristinare la modalità di accesso diretto (O_DIRECT, Direct I/O) all'uso di un meccanismo leggero di I/O uncached per richieste non allineate con i bordi delle pagine di memoria, non supportate in Direct I/O.
- È stato proposto un nuovo algoritmo unificato di limitazione della velocità per le operazioni di scrittura e collocamento dei blocchi, che riduce la frammentazione del vdev (Virtual Device) aggregando più operazioni di scrittura e utilizzando per esse aree di memoria libera più grandi e contigue, anziché collocare i risultati di singole operazioni di scrittura in piccole aree libere.
- Le prestazioni di crittografia sono state migliorate grazie all'uso delle istruzioni AVX2 nell'implementazione dell'algoritmo AES-GCM. Nei test condotti, l'accelerazione raggiunge il 80%.
- È stata consentita la collocazione dei blocchi ZIL (ZFS Intent Log) non solo su normali vdev o su un dispositivo dedicato SLOG, ma anche su vdev speciali. Se un normale vdev è collegato a un disco rigido e un vdev speciale a un'unità SSD, questa modifica consente di escludere situazioni in cui i dati vengono scritti su SSD mentre i blocchi ZIL associati sono scritti su disco rigido, causando ritardi aggiuntivi.
- È consentito l'impostazione della proprietà special_small_blocks per le sezioni (ZVOL), e non solo per i file system, il che consente di organizzare il posizionamento di piccoli blocchi su un vdev speciale separato, ad esempio, su un'unità SSD.
- Aggiunto il comando di riscrittura «zfs rewrite -P», che mantiene, se possibile, invariato il tempo logico di creazione, consentendo di distinguere i blocchi semplicemente spostati nel pool da quelli effettivamente modificati dall'utente.
- Per i comandi «zpool trim», «zpool scrub» e «zpool initialize» è stata implementata l'opzione «-a» (—all), che consente di eseguire questi comandi simultaneamente per tutti i pool importati.
- Aggiunto il comando «zpool scrub -S -E» per eseguire controlli delle somme di controllo sui dati rientranti in intervalli di tempo specificati.
- Aggiunte nuove ottimizzazioni al processo di deduplicazione.
Fonte: opennet.ru
