Le unità a stato solido non hanno bisogno di presentazioni e rappresentano il modo migliore per ridurre al minimo i tempi di caricamento del sistema operativo e delle applicazioni installate. Gli SSD (acronimo di solid state drive) consumano meno energia, non integrano parti meccaniche, migliorano in maniera significativa le velocità di trasferimento dei dati rispetto agli hard disk e sono del tutto silenziosi. Delle principali differenza tra un disco rigido e un SSD abbiamo ampiamente parlato nell’articolo Hard disk o SSD, caratteristiche e differenze.
Nell’approfondimento Come verificare se il PC è compatibile PCIe NVMe abbiamo visto il “bonus” che le unità a stato solido PCIe NVMe forniscono in termini prestazionali.
Questa volta concentriamoci sul funzionamento delle unità SSD e sulle caratteristiche tecniche che aiutano a velocizzare le prestazioni in lettura e scrittura delle unità SSD (mai parlare di “disco SSD” perché non queste unità non integrano parti mobili) oltre che ad estendere la vita del supporto di memorizzazione.
Garbage collector e funzionalità TRIM: a cosa servono
A differenza degli hard disk che, per memorizzare i dati, utilizzano dischi magnetici, gli SSD sfruttano chip di memoria flash di tipo NAND a loro volta composti da “celle”.
A seconda del numero di bit, espressi in termini di livelli di tensione, immagazzinabili dalla singola cella, si parla di SSD SLC (single level cell, un bit); MLC (multi-level cell, due bit); TLC (triple-level cell, tre bit) o, più di recente, anche QLC (quad-level cell, quattro bit).
Ne abbiamo parlato nell’articolo Hard disk o SSD, caratteristiche e differenze.
Le celle di memoria utilizzate in un SSD sono raggruppate in “righe” (rows) dette words, a loro volta raccolte in “pagine” (pages).
Una pagina è il quantitativo minimo di informazioni che può essere letta o scritta sull’SSD in un determinato istante.
Le pagine hanno una dimensione di 4 o 8 KB e sono raccolte in “blocchi” tipicamente costituiti da più pagine, fino a 4 MB. Infine, i blocchi sono generalmente raggruppati in 1.024 unità dette planes, con diversi planes per singolo chip di memoria.
La dimensione dei blocchi è variabile: ad esempio 256 KB, 512 KB, 1024 KB, 2048 KB o 4096 KB. Un’unica pagina contenente 4 KB renderà come occupato l’intero blocco, indipendentemente dalla sua dimensione.
Le moderne unità a stato solido utilizzano il cosiddetto garbage collector, una modalità di gestione della memoria incaricata di liberare spazio trattando adeguatamente quei dati che non vengono più utilizzati.
Quest’attività è tutt’altro che semplice: abbiamo detto che i dati sono scritti e conservati all’interno di “pagine” che raggruppano più celle di memoria. L’operazione di rimozione, però, può avvenire sugli elementi di più grandi dimensioni detti “blocchi” che, come visto in precedenza, raccolgono più “pagine”.
Per come funzionano le memorie NAND, i valori di una pagina non possono essere modificati una volta scritti: cosa fa quindi il garbage collector per rimuovere i dati?
Provvede a copiare i dati ancora validi in un altro blocco lasciando quelli di cui ci si vuole sbarazzare all’interno del vecchio blocco. In questo modo è possibile fare pulizia sul blocco di partenza che adesso contiene solamente informazioni che possono essere rimosse.
Il garbage collector (che viene attivato durante i periodi in cui l’attività dell’SSD è ridotta) di fatto non cancella definitivamente i dati ma contrassegna come “spazzatura” i blocchi che contengono informazioni ormai superflue.
Con questo approccio, i vecchi dati possono essere ancora oggetto di operazioni di recupero e vi sono svantaggi in termini di usura con la conseguente riduzione del ciclo di vita dell’unità SSD.
Per superare queste “debolezze” è stato introdotto il comando TRIM: inviato dal sistema operativo (Windows, macOS, Linux, Android,…) al controller dell’unità SSD, TRIM consente di marcare come eliminabili quelle pagine della memoria che non contengono più dati utili e il cui contenuto può essere rimosso.
Rispetto alla garbage collection, il comando TRIM si comporta come uno strumento accessorio che permette di migliorare le prestazioni dell’SSD aumentando la vita dell’unità.
Grazie al comando TRIM, il garbage collector può lavorare garantendo un migliore throughput in fase di scrittura e ridurre il numero delle operazioni di scrittura.
Come abbiamo spiegato nell’articolo Secure Erase e SSD: cos’è e come funziona che prende in esame il tema della cancellazione sicura dei dati memorizzati sulle unità SSD, TRIM è implementato come comando ATA e come UNMAP nel set dei comandi SCSI.
Una volta ricevute dal comando TRIM le informazioni sulle pagine di memoria da cancellare, il controller dell’SSID poi procederà successivamente alla rimozione dei dati.
La cancellazione avviene, grazie al comando TRIM, in maniera molto veloce ed efficiente anche se è la logica impostata a livello di firmware che decide il momento migliore per portare a termine la rimozione dei dati.
Per questo motivo non è infrequente che, utilizzando un’utilità per il recupero dati (vedere Recuperare file cancellati da hard disk e SSD) si riescano a recuperare file cancellati o frammenti di essi anche da un’unità SSD con TRIM abilitato.
Il recupero dei dati rimossi da un SSD potrebbe quindi essere fattibile in diversi frangenti:
1) Il controller dell’unità, sulla base di quanto stabilito a livello firmware, non ha ancora cancellato i dati.
2) Si sta utilizzando il vecchio file system FAT32 che non supporta il comando TRIM: Differenza tra NTFS, FAT32 e exFAT: ecco cosa cambia.
3) Il contenuto dell’unità SSD è stato crittografato con la conseguente impossibilità di usare TRIM.
4) Il comando TRIM risulta disabilitato lato sistema operativo.
5) Si sta usando un SSD molto vecchio che non supporta il comando TRIM.
Cos’è l’over provisioning e come può incidere sulla durata dell’unità SSD
TRIM e over provisioning consentono di arginare il problema della Write Amplification: la cancellazione dei dati di un SSD, come abbiamo visto, per la tipologia di operazioni che devono essere effettuate, implica la scrittura di più dati di quanti ne vengano eliminati.
L’over provisioning è una tecnica che consiste nel riservare una parte della memoria disponibile sull’unità SSD per il funzionamento del controller.
Tale porzione di memoria è solitamente invisibile sia agli utenti che al sistema operativo essendone il suo impiego già previsto nel caso di molti modelli di SSD.
Grazie all’over provisioning il controller può rigenerare i blocchi contenenti informazioni non più valide e, ad esempio, unire pagine che ospitano dati utili: con un SSD praticamente pieno queste operazioni non sarebbero effettuabili in maniera efficiente e sicura.
Installando i software di gestione degli SSD rilasciati dai rispettivi produttori, in molti casi è possibile personalizzare la porzione di unità lasciata a disposizione del meccanismo di over provisioning.
Di solito è bene destinare all’over provisioning (fonte: Kingston) almeno il 7% dello spazio complessivamente disponibile sull’unità.
In questo modo si otterranno effetti benefici sia in termini di durata che di performance dell’unità SSD.
La porzione di memoria dell’SSD destinata all’over provisioning dovrebbe essere aumentata (fino al 28%) in caso di utilizzi intensivi dell’unità per le operazioni di scrittura. Per operazioni di lettura intensive, il 7% è più che sufficiente nella stragrande maggioranza dei casi.
Kingston ha dimostrato che SSD con maggiore capacità ma minore over provisioning (7% contro 28%) mantengono stessa velocità di trasferimento dati rispetto alle unità meno capienti della stessa linea di prodotti ma i valori IOPS in scrittura random 4K (quindi con la scrittura di tanti file di piccole dimensioni) sono inferiori (spesso anche di molto).
Un over provisioning più contenuto, inoltre, comporta una durata inferiore dell’unità espressa in TBW ovvero in Terabyte complessivamente scritti sull’SSD durante il suo intero ciclo di vita (la differenza può essere notevole e attestarsi sulle centinaia di Terabyte).
Esprimendo lo stesso dato in termini di DWPD (Drive Writes Per Day) ovvero il numero di volte che uno stesso SSD può essere interamente sovrascritto ogni giorno, le unità con over provisioning impostato al 28% arrivano addirittura a raddoppiare il numero di scritture giornaliere.
La “ciliegina sulla torta” per garantire un’ottima aspettativa di vita anche ai moderni SSD TLC e QLC si chiama wear leveling: essa fa in modo che le celle di memoria vengano utilizzate uniformemente, senza usurarne eccessivamente una sola parte.
La soluzione migliore consiste nella simultanea implementazione di wear leveling dinamico e wear leveling statico: nel primo caso il controller si occupa di selezionare i blocchi usati con minore frequenza ma l’operazione comporta comunque una certa usura; nel secondo caso i dati vengono spostati su blocchi meno utilizzati riducendo l’usura dell’unità.
Le unità SSD che garantiscono l’utilizzo di entrambe le modalità di wear leveling sono statisticamente meno soggette a problemi hardware nel corso del tempo.
Non ci esprimiamo sul numero di cicli lettura/scrittura che ogni cella di memoria può sopportare perché è estremamente variabile (a seconda soprattutto del modello di SSD e del segmento di mercato cui si rivolge) e può differire anche per un paio di ordini di grandezza.
Nell’articolo Come ottimizzare SSD in Windows abbiamo presentato una serie di consigli per utilizzare un SSD prestazionale e farlo durare a lungo.