Dischi SSD – Best Practice

Traduzione a cura di Naonis dell’articolo apparso nel sito del produttore al seguente link:

https://blog.macrium.com/ssd-structures-and-best-practice-1e6592368041

Negli ultimi anni, l’abbassamento dei prezzi dei dischi Solid State Drives (SSD) e il progressivo aumento della loro capacità di archiviazione ne ha aumento moltissimo la loro popolarità. Gli SSD hanno indubbi vantaggi rispetto agli Hard Disk Drives (HDD) meccanici, come l’inferiore tempo di accesso, la ridotta sensibilità alle vibrazioni (o alle cadute) e la maggiore velocità di trasferimento dati. L’adozione degli SSD, tuttavia, ha sollevato un certo numero di domande relative al funzionamento e soprattutto alla loro affidabilità .

Come funzionano?

Per comprendere quali siano le migliori pratiche di utilizzo di un SSD, è importante capire innanzitutto come funzionano internamente. La struttura di base di un SSD è costituita da celle di memoria NAND Flash e da un controller. Il computer host è collegato al controller tramite una “interfaccia host” (NVMe, SATA, SAS). Il controller è responsabile della comunicazione tra il computer host e le celle flash NAND, dell’archiviazione e del recupero affidabile dei dati, della gestione e del riutilizzo dei blocchi di memoria da cancellare e della correzione degli errori dell’unità.

Le celle NAND sono costituite da transistor a gate flottante (FGT). L’FGT è simile a un transistor MOS, con l’aggiunta del gate flottante tra il gate di controllo e il canale. Le varie parti di una cella NAND sono separate da materiale dielettrico isolante realizzato mediante ossido di silicio che isola gli elettroni intrappolandoli nel conduttore flottante. L’intrappolamento degli elettroni permane anche quando il dispositivo non è più alimentato, rendendo così la memoria flash di tipo non volatile. Utilizzando un principio chiamato Fowler-Nordheim Tunneling, in presenza di un campo elettrico abbastanza alto, è possibile far attraversare agli elettroni la barriera isolante. Sfruttando questo principio, le cariche elettriche che circondano una cella possono essere accelerate, permettendo agli elettroni di penetrare nel gate flottante, dove restano intrappolate dal dielettrico isolante anche quando l’SSD non è alimentato. Eseguendo questo processo al contrario, gli elettroni possono essere rimossi dal gate flottante. Il valore in bit della cella NAND dipende dalle cariche accumulate nel gate flottante. Se il gate è carico, il valore del bit è impostato su 0 e la cella è considerata “programmata”. Se il gate non è carico, il valore del bit è impostato su 1 e la cella è considerata “cancellata”.

Valori in bit di una cella e le quattro C

Sappiamo che il valore in bit di una cella è determinato dal fatto che la cella sia carica o meno. Finora, abbiamo discusso di come un bit è memorizzato usando una cella NAND, questa è chiamata Single-Level Cell (SLC). Tuttavia, utilizzando una cella NAND Flash, è anche possibile memorizzare più di un bit su du essa. Regolando la tensione di soglia del gate flottante su quattro diversi livelli anziché due, è possibile codificare i valori 00, 01, 10, 11. Quando la cella NAND codifica il valore di due (o più) bit, prende il nome di Multi-Level Cell (MLC). Ciò consente di archiviare la stessa quantità di dati di un SLC utilizzando la metà del numero di celle NAND. Il diagramma seguente mostra come madificare le tensioni di soglia per aumentare il numero di bit memorizzati di una singola cella.

Diagramma delle tensione di soglia per aumentare il numero di bit memorizzati di una singola cella .

Questa tecnica non si ferma agli MLC. Aggiungendo ulteriori punti di riferimento alle tensioni di soglia, è possibile aumentare ulteriormente il numero di bit che una singola cella può memorizzare. Attualmente una cella NAND può essere SLC (1 bit per cella), MLC (2 o più bit per cella), TLC (3 bit per cella) o QLC (4 bit per cella). In generale, più aumentano i bit per cella più il prezzo per Gbit di memoria si abbassa. Tuttavia, ciò implica anche una riduzione della velocità di scrittura / cancellazione e una diminuzione dell’affidabilità nel tempo dell’SSD.

Problemi di longevità degli SSD

È risaputo che le celle NAND si “consumano” dopo un certo numero di operazioni di scrittura e cancellazione, ma da cosa dipende questa usura in realtà?

Con l’aumentare delle operazioni di lettura e scrittura (cariche e scariche del Gate Flottante), l’ossido dielettrico che separa il gate flottante dal Canale si indebolisce, il che significa che gli elettroni non rimarranno più intrappolati nel gate flottante e la cella NAND non potrà essere più scritta. Questo fenomeno è noto come “stress induced leakage“. Possiamo prolungare la vita delle celle NAND evitando operazioni di scrittura e cancellazione non indispensabili sull’SSD.

Un altro modo con cui lo strato di ossido dielettrico viene indebolito è attraverso l’intrappolamento della carica. Quando la carica raggiunge per effetto tunnel il conduttore flottante, gli elettroni possono rimanere intrappolati nell’ossido di silicio dielettrico. Se un numero sufficiente di cariche rimane intrappolato nell’ossido dielettrico, non sarà più possibile leggere in modo affidabile la tensione dalla cella. Ogni evento di stress e operazione di scrittura / cancellazione che viene eseguita sulla cella NAND aumenta la probabilità che si verifichi l’intrappolamento di carica. Numerosi studi hanno dimostrato che, nelle giuste condizioni, è possibile rimuovere alcune di queste cariche dallo strato di ossido di silicio dielettrico. Gli studi hanno suggerito che consentire periodi inattivi per l’SSD in cui la temperatura esterna è più alta permettono un “detrapping” più efficace. Può avere quindi un effetto benefico sulla loro durata  lo spegnimento del sistema, per consentire periodi di inattività per l’SSD, specialmente se conservati a temperature più basse.

Questi due modi con cui si “logora” una cella NAND sono ulteriormente aggravati dal “Write Amplification”. Questo è un fenomeno indesiderato che porta a un aumento non previsto del numero di scritture fisiche effettuate sul disco, rispetto alle scritture logiche richieste dall’host. Le celle NAND infatti sono raggruppate in pagine, queste pagine sono quindi raggruppati in blocchi. Le celle di memoria NAND possono essere scritte direttamente solo quando sono vuote. Se la cella NAND contiene già dei dati, questi devono essere cancellati prima che i nuovi dati possano essere scritti su di essa. A causa delle limitazioni degli SSD, il comando cancella avrà sempre effetto su un intero blocco e non su una singola pagina, di conseguenza, quando una pagina del blocco viene modificata, l’intero blocco deve essere cancellato. Ciò si traduce in un processo chiamato ciclo leggi-cancella-modifica-scrivi. Il contenuto del blocco verrà archiviato nella cache, il blocco verrà quindi cancellato, la pagina modificata verrà quindi modificato il blocco archiviato nella cache, quindi il blocco modificato archiviato nella cache potrà essere riscritto nel blocco cancellato. Questo procedimento porta all’aumento del numero di scritture fisiche delle celle e ne aumenta le probabilità che si deteriorino a causa di “perdite indotte dallo stress” o per “intrappolamento di carica“.

Come estendere la durata di un SSD

Una domanda importante che ci poniamo è: qual è la durata prevista di un SSD? La durata di un SSD dipenderà innanzi tutto dal tipo di cella utilizzata. Come guida approssimativa, possiamo aspettarci che la durata media della vita di una cella SLC sia di circa 90.000 a 100.000 cicli di lettura / scrittura. Questa durata di vita media diminuirà con il numero di bit che vengono memorizzati nella cella, possiamo aspettarci che la durata della vita di una cella MLC sia di circa 10.000 cicli di lettura / scrittura e la durata di una TLC di circa 5000 cicli di lettura / scrittura. Inizialmente questi valori possono sembrare bassi, tuttavia, si riferiscono ai singoli blocchi e non al dispositivo nella sua interezza. La durata del dispositivo sarà ulteriormente estesa dalle funzionalità SSD come il livellamento dell’usura e la protezione al “over-provisioning”, nonché dalla cache di scrittura del sistema operativo.

Il livellamento dell’usura si riferisce alla capacità del controller dell’SSD di distribuire uniformemente le operazioni di scrittura sui blocchi in esso presenti, per garantire che non si verifichi una quantità sproporzionata di utilizzo solo di determinati blocchi, forzando questi blocchi a “consumarsi” più velocemente. I due metodi di livellamento dell’usura sono il livellamento dinamico dell’usura e il livellamento statico dell’usura. Il livellamento dinamico dell’usura si verifica quando i dati vengono scritti direttamente sui blocchi con il numero di usura inferiore rispetto ad altre celle dell’unità. Questo viene effettuato prendendo tutti i blocchi in uno stato cancellato e confrontando il conteggio di cancellazione di ciascun blocco. Il blocco con il conteggio di cancellazione più basso viene scritto per primo, quindi il blocco con il secondo conteggio di cancellazione più basso, ecc. Il livellamento dell’usura statica è simile al livellamento dell’usura dinamica, con l’aggiunta che sono spostati dalle celle con un basso numero di cancellazioni anche i blocchi di dati statici, che non vengono mai modificati. Ciò consente a questi blocchi di essere scritti da altri dati. Il livellamento dell’usura è più efficace quando nell’unità SSD viene mantenuta una quantità di spazio libero non inutilizzato, poiché esiste un pool di blocchi inutilizzati il cui conteggio di cancellazione può essere confrontato con gli altri blocchi liberi e su cui quindi eventualmente scrivere.

L’ “over-provisioning” alloca dello spazio del dispositivo per le operazioni del controller, l’utente non può accedere a questo spazio. Questo spazio viene utilizzato dal controller per gestire il traffico e alcune operazioni dell’SSD (ad esempio il TRIM e il livellamento dell’usura). Assicurando che ci sia uno spazio libero permanente che potrà essere utilizzato per eseguire la gestione dei blocchi rovinati, il riutilizzo dei blocchi da cancellare e la gestione del livellamento dell’usura, non sarà necessario trovare dello spazio libero ma garantirà che queste attività possano essere eseguite e “al volo”. Ciò consente un aumento delle prestazioni e della durata del disco. Quando i blocchi dell’SSD si consumano, questi vengono sostituiti da blocchi presi da questo blocco di “over-provisioning”. Una certa percentuale dello spazio di archiviazione dell’unità sarà stata assegnata come “over-provisioning” dalla fabbrica; altri blocchi possono eventualmente essere assegnati manualmente ad “over-provisioning” per sfruttare questo vantaggio.

Gli strumenti S.M.A.R.T inclusi nel firmware dell’SSD contengono statistiche e strumenti di gestione per l’SSD. Queste statistiche consentono di monitorare la durata prevista dell’unità, incluso il numero di blocchi di riserva nel gruppo di “over-provisioning”, la temperatura dell’unità e il conteggio di cancellazione dei blocchi. Questi strumenti variano in base al produttore dell’unità. A causa degli algoritmi di livellamento dell’usura, quando i blocchi sull’unità iniziano a fallire, lo faranno all’incirca tutti nello stesso momento. Gli SSD sono progettati per fallire alla successiva cancellazione/programmazione e non a metà cancellazione, per ridurre la potenziale perdita di dati. Quando l’unità esaurisce le celle di riserva, essa diventerà di sola lettura e saranno impedite ulteriori operazioni di scrittura.

Per allungare il più possibile la durata di un dispositivo SSD, consigliamo:

  • Utilizzare SSD SLC (o MLC) per ridurre il numero di scritture che avvengono su ciascuna cella, avranno un numero maggiore di cicli di lettura / scrittura.
  • Assegnare una quantità maggiore di spazio di archiviazione dell’unità a “over-provisioning”, ciò consentirà di disporre di un maggior numero di blocchi di scorta per sostituire i blocchi usurati.
  • Controllare la temperatura del disco, la conservazione dei dati sarà significativamente ridotta quanto più il dispositivo diventa caldo. Il controller SSD lo correggerà quindi riscrivendo il bit, aumentando lo stress sullo strato di ossido delle celle riscritte.
  • Avere periodi di inattività per l’unità a basse temperature, questo ha dimostrato di “rimuovere” le cariche intrappolate dallo strato di ossido, rendendo potenzialmente leggibili nuovamente le celle che stanno sperimentando l’intrappolamento della carica.
  • Lasciare spazio libero sull’unità per facilitare l’ “over-provisioning”.
  • Evitare operazioni di scrittura non necessarie sull’SSD (ad es. Deframmentazione dell’SSD).