ext4

File system di grandi dimensioni Il filesystem ext4 può supportare volumi con dimensioni fino a 1 exbibyte (EiB) e file singoli con dimensioni fino a 16 tebibyte (TiB) con la dimensione del blocco standard di 4 KiB. I limiti massimi di dimensione di file, directory e filesystem crescono almeno proporzionalmente alla dimensione del blocco del filesystem fino alla dimensione massima di 64 KiB disponibile sulle CPU ARM e PowerPC/Power ISA. Estensioni Le estensioni sostituiscono il tradizionale schema di mappatura dei blocchi usato da ext2 ed ext3. Una estensione è un intervallo di blocchi fisici contigui, migliorando le prestazioni dei file di grandi dimensioni e riducendo la frammentazione. Una singola estensione in ext4 può mappare fino a 128 MiB di spazio contiguo con una dimensione di blocco di 4 KiB. Ci possono essere quattro estensioni memorizzate direttamente nell’inode. Quando ci sono più di quattro estensioni per un file, il resto delle estensioni sono indicizzate in un albero. Compatibilità all’indietro ext4 è compatibile all’indietro con ext3 ed ext2, rendendo possibile montare ext3 ed ext2 come ext4. Questo migliorerà leggermente le prestazioni, perché alcune nuove caratteristiche dell’implementazione ext4 possono essere usate anche con ext3 ed ext2, come il nuovo algoritmo di allocazione dei blocchi, senza influenzare il formato su disco. ext3 è parzialmente compatibile con ext4. In pratica, ext4 non monterà come un filesystem ext3 out of the box, a meno che certe nuove caratteristiche siano disabilitate durante la creazione, come ^extent, ^flex_bg, ^huge_file, ^uninit_bg, ^dir_nlink, e ^extra_isize. Preallocazione persistente ext4 può preallocare lo spazio sul disco per un file. Per fare questo nella maggior parte dei file system, gli zeri verrebbero scritti nel file quando viene creato. In ext4 (e in alcuni altri file system come XFS) può essere usata fallocate(), una nuova chiamata di sistema nel kernel Linux. Lo spazio allocato sarebbe garantito e probabilmente contiguo. Questa situazione ha applicazioni per lo streaming dei media e i database. Allocazione ritardata ext4 usa una tecnica di performance chiamata allocate-on-flush, conosciuta anche come allocazione ritardata. Cioè, ext4 ritarda l’allocazione dei blocchi fino a quando i dati non vengono scaricati sul disco. (Al contrario, alcuni file system allocano i blocchi immediatamente, anche quando i dati vanno in una cache di scrittura). L’allocazione ritardata migliora le prestazioni e riduce la frammentazione allocando efficacemente grandi quantità di dati alla volta. Numero illimitato di sottodirectory ext4 non limita il numero di sottodirectory in una singola directory, tranne che per il limite intrinseco della dimensione della directory stessa. (In ext3 una directory può avere al massimo 32.000 sottodirectory.) Per permettere directory più grandi e prestazioni continue, ext4 in Linux 2.6.23 e successivi attiva di default gli indici HTree (una versione specializzata di un B-tree), che permette di memorizzare directory fino a circa 10-12 milioni di voci nell’indice HTree a 2 livelli e un limite di 2 GB di dimensione della directory per 4 KiB di blocco, a seconda della lunghezza del nome del file. In Linux 4.12 e successivi la caratteristica largedir ha abilitato un HTree a 3 livelli e dimensioni di directory superiori a 2 GB, permettendo circa 6 miliardi di voci in una singola directory. I checksum del journal ext4 usa i checksum nel journal per migliorare l’affidabilità, dato che il journal è uno dei file più usati del disco. Questa caratteristica ha un beneficio collaterale: può tranquillamente evitare un’attesa I/O del disco durante il journaling, migliorando leggermente le prestazioni. Il journal checksumming è stato ispirato da un articolo di ricerca dell’Università del Wisconsin, intitolato IRON File Systems (in particolare, la sezione 6, chiamata “transaction checksums”), con modifiche all’interno dell’implementazione delle transazioni composte eseguite dal file system IRON (originariamente proposto da Sam Naghshineh nel summit di RedHat). Checkumming dei metadati Dal kernel Linux 3.5 rilasciato nel 2012 Controllo più veloce del file system In ext4 i gruppi di blocchi non allocati e le sezioni della tabella degli inode sono contrassegnati come tali. Questo permette a e2fsck di saltarli completamente e riduce notevolmente il tempo necessario per controllare il file system. Linux 2.6.24 implementa questa caratteristica.

dipendenza del tempo di fsck dal numero di inode (ext3 vs. ext4)

Allocatore multiblock Quando ext3 fa un’aggiunta ad un file, chiama l’allocatore di blocchi, una volta per ogni blocco. Di conseguenza, se ci sono più scrittori concorrenti, i file possono facilmente diventare frammentati sul disco. Tuttavia, ext4 usa un’allocazione ritardata, che gli permette di bufferizzare i dati e allocare gruppi di blocchi. Di conseguenza, l’allocatore multiblock può fare scelte migliori per allocare i file in modo contiguo sul disco. L’allocatore multiblock può anche essere usato quando i file sono aperti in modalità O_DIRECT. Questa caratteristica non influenza il formato del disco. Timestamp migliorati Man mano che i computer diventano più veloci in generale, e che Linux viene usato di più per applicazioni mission-critical, la granularità dei timestamp basati sui secondi diventa insufficiente. Per risolvere questo problema, ext4 fornisce timestamp misurati in nanosecondi. Inoltre, 2 bit del campo timestamp espanso sono aggiunti ai bit più significativi del campo seconds dei timestamp per rinviare il problema dell’anno 2038 per altri 408 anni. ext4 aggiunge anche il supporto per i timestamp del tempo di creazione. Ma, come sottolinea Theodore Ts’o, mentre è facile aggiungere un campo extra creation-date nell’inode (abilitando così tecnicamente il supporto per questi timestamp in ext4), è più difficile modificare o aggiungere le necessarie chiamate di sistema, come stat() (che probabilmente richiederebbe una nuova versione) e le varie librerie che dipendono da esse (come glibc). Questi cambiamenti richiederanno il coordinamento di molti progetti. Pertanto, la data di creazione memorizzata da ext4 è attualmente disponibile solo per i programmi utente su Linux tramite l’APIstatx(). Quote di progetto Il supporto per le quote di progetto è stato aggiunto nel kernel Linux 4.4 l’8 gennaio 2016. Questa caratteristica permette di assegnare limiti di quote disco ad un particolare ID di progetto. L’ID di progetto di un file è un numero a 32 bit memorizzato su ogni file ed è ereditato da tutti i file e le sottodirectory create sotto una directory madre con un ID di progetto assegnato. Questo permette di assegnare limiti di quota a un particolare albero di sottodirectory indipendentemente dai permessi di accesso al file, come le quote utente e di progetto che dipendono dall’UID e dal GID. Mentre questo è simile ad una quota di directory, la differenza principale è che lo stesso ID di progetto può essere assegnato a più directory di primo livello e non è strettamente gerarchico. Crittografia trasparente Il supporto per la crittografia trasparente è stato aggiunto nel kernel Linux 4.1 nel giugno 2015. Inizializzazione pigra La funzione lazyinit permette di pulire le tabelle degli inode in background, velocizzando l’inizializzazione quando si crea un nuovo file system ext4. È disponibile dal 2010 nella versione 2.6.37 del kernel Linux. Barriere di scrittura ext4 abilita le barriere di scrittura per impostazione predefinita. Assicura che i metadati del file system siano correttamente scritti e ordinati sul disco, anche quando le cache di scrittura perdono potenza. Questo ha un costo in termini di prestazioni, specialmente per le applicazioni che usano pesantemente fsync o che creano e cancellano molti piccoli file. Per i dischi con una cache di scrittura a batteria, disabilitare le barriere (opzione ‘barrier=0’) può tranquillamente migliorare le prestazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.