L'organizzazione Linux Foundation ha presentato il primo rilascio della piattaforma open source per unità Flash gestite programmativamente SEF (Software Enabled Flash), costruita sul codice fornito da KIOXIA (ex Toshiba Memory Corporation), dove nel 1980 è stata inventata la memoria Flash. I codici sorgente degli strumenti sono scritti in linguaggio C e distribuiti sotto licenza BSD.
Il toolkit comprende un insieme di patch per il kernel Linux, un driver a blocchi per dispositivi SEF (Software Enabled Flash), utility per la gestione da linea di comando, driver SEF paravirtualizzati per QEMU, una libreria con API per lo sviluppo di applicazioni, patch per nvme-cli e FIO che aggiungono supporto per SEF. Lo SDK include anche un'implementazione di riferimento del livello software FTL (Flash Translation Layer), che gestisce la traduzione dei comandi dei dispositivi a blocchi in accessi al chip di memoria Flash effettivo, la raccolta di spazzatura e la distribuzione dei dati nelle celle di memoria. FTL implementa il supporto per il posizionamento flessibile dei dati (FDP - Flexible Data Placement), la zonizzazione (ZNS - Zoned Namespace) e le specifiche NVMe.
Nelle normali Flash per sistemi esterni, l'unità è un scatola nera, parte della memoria è riservata per operazioni di servizio, le prestazioni sono variabili e si verificano ritardi imprevedibili a causa dell'attività interna del controller, ad esempio durante la raccolta di spazzatura. A differenza delle tradizionali unità Flash, dove la distribuzione dei dati, l'isolamento dei blocchi difettosi e la raccolta di spazzatura sono gestiti dal firmware del controller, le unità con supporto SEF permettono di trasferire la logica del lavoro a basso livello con il chip di memoria Flash al software e al sistema operativo.
SEF consente di gestire direttamente il posizionamento fisico dei dati, modificare gli algoritmi di distribuzione del carico, gestire le priorità e la QoS, eliminare uno strato aggiuntivo di traduzione dei blocchi, utilizzare tutta la memoria disponibile, garantire un funzionamento prevedibile con il dispositivo di archiviazione e suddividere il dispositivo in unità virtuali isolate a livello di input/output, con priorità diverse nel trattamento. L'approccio proposto in SEF consente di ridurre gli overhead e migliorare l'efficienza nell'interazione con il dispositivo di archiviazione, adattandosi alle attuali esigenze della logica di raccolta dei rifiuti, prenotazione della memoria e distribuzione dei blocchi per ridurre l'usura.
Ad esempio, SEF consente di normalizzare le prestazioni in condizioni di utilizzo di un array di dispositivi di archiviazione acquistati in momenti diversi con caratteristiche diverse. Per i dispositivi che sono principalmente utilizzati solo per la lettura, grazie a SEF è possibile impiegare algoritmi di distribuzione dei blocchi più semplici e ridurre la memoria riservata per scopi di servizio.
Fonte: opennet.ru
