Kent Overstreet, autore del sistema di caching per dispositivi a blocchi su SSD BCache incluso nel kernel Linux, ha riassunto i risultati del lavoro per promuovere il file system Bcachefs nel kernel Linux durante il suo intervento alla conferenza LSFMM 2023 (Linux Storage, Filesystem, Memory Management & BPF Summit). A maggio, è stato proposto un insieme aggiornato di patch per la revisione e possibile inclusione nel kernel Linux. Il file system Bcachefs è in sviluppo da circa 10 anni. La prontezza per la revisione dell'implementazione di Bcachefs prima dell'inclusione nel kernel è stata annunciata già alla fine del 2020, e l'attuale serie di patch tiene conto delle osservazioni e delle carenze riscontrate durante la precedente revisione.
L'obiettivo dello sviluppo di Bcachefs è raggiungere il livello di prestazioni, affidabilità e scalabilità di XFS, offrendo al contempo funzionalità aggiuntive tipiche di Btrfs e ZFS, come l'inclusione in un'unità di più dispositivi, layout di memorie multilivello, replicazione (RAID 1/10), caching, compressione trasparente dei dati (modalità LZ4, gzip e ZSTD), istantanee (snapshot), verifica dell'integrità tramite checksum, possibilità di memorizzare codici di correzione degli errori di Reed-Solomon (RAID 5/6) e conservazione delle informazioni in forma crittografata (utilizzando ChaCha20 e Poly1305). In termini di prestazioni, Bcachefs supera Btrfs e altri file system basati su meccanismi Copy-on-Write, e dimostra una velocità operativa paragonabile a quella di Ext4 e XFS.
Tra le recenti conquiste nello sviluppo di Bcachefs, si segnala la stabilizzazione dell'implementazione dei snapshot scrivibili. Rispetto a Btrfs, i snapshot in Bcachefs ora scalano significativamente meglio e sono privi dei problemi tipici di Btrfs. Nella pratica, il funzionamento dei snapshot è stato testato nell'organizzazione di backup per MySQL. Inoltre, in Bcachefs è stata svolta un'attività notevole per migliorare la scalabilità: il file system si è dimostrato efficace anche in test con archiviazioni di dimensioni pari a 100 TB, e a breve si prevede l'implementazione di Bcachefs in uno storage di 1 PB. È stata aggiunta una nuova modalità nocow per disabilitare il meccanismo di copy-on-write (nocow). Durante l'estate, si prevede di portare a uno stato stabile l'implementazione dei codici di correzione degli errori e RAIDZ, nonché di risolvere i problemi legati all'elevato consumo di memoria durante il ripristino e la verifica del file system con l'utility fsck.
Nei piani futuri si menziona il desiderio di utilizzare il linguaggio Rust nello sviluppo di Bcachefs. Secondo l'autore di Bcachefs, ama programmare piuttosto che fare debugging ed è ora pazzesco scrivere codice in C quando c'è un'alternativa migliore. Rust è già utilizzato in Bcachefs per implementare alcune utility eseguite nello spazio utente. Inoltre, si sta considerando l'idea di riscrivere gradualmente completamente Bcachefs in Rust, poiché l'uso di questo linguaggio risparmia notevolmente tempo nella fase di debugging.
Per quanto riguarda la promozione di Bcachefs nel kernel Linux principale, il processo di approvazione potrebbe richiedere più tempo a causa della dimensione significativa delle modifiche (2500 patch e circa 90.000 righe di codice), che è difficile da esaminare. Per velocizzare il processo di revisione, alcuni sviluppatori hanno proposto di suddividere il set di patch in parti più piccole e logicamente separate. Durante la discussione, alcuni partecipanti hanno anche evidenziato lo sviluppo del progetto da parte di un singolo sviluppatore e il rischio che il codice possa rimanere senza supporto, nel caso in cui accada qualcosa al suo sviluppatore (due dipendenti di Red Hat mostrano interesse per il progetto, ma il loro lavoro è attualmente limitato alla correzione di bug).
Bcachefs si sviluppa utilizzando tecnologie già testate nello sviluppo del dispositivo di blocco Bcache, progettato per la memorizzazione nella cache dell'accesso a dischi rigidi lenti su unità SSD veloci (incluso nel kernel a partire dalla versione 3.10). Bcachefs utilizza il meccanismo Copy-on-Write (COW), in cui le modifiche non comportano la riscrittura dei dati: il nuovo stato viene scritto in un nuovo luogo, dopo di che viene cambiato il puntatore allo stato attuale.
Una delle caratteristiche di Bcachefs è il supporto per la connessione multilivello degli storage, dove la memorizzazione è composta da più livelli: al livello inferiore vengono collegati i dispositivi più veloci (SSD), utilizzati per la memorizzazione nella cache dei dati più utilizzati, mentre il livello superiore è costituito da dischi più capienti e economici, che forniscono lo storage per dati meno richiesti. Tra i livelli può essere applicata la memorizzazione nella cache in modalità writeback. I dispositivi possono essere aggiunti e scollegati dinamicamente dalla partizione senza interrompere l'uso del file system (i dati migrano automaticamente).
Fonte: opennet.ru
