Le memorie flash, che costituiscono l’elemento portante per le unità a stato solido (SSD, solid state drive) furono ideate nel 1980 da Fujio Masuoka (Toshiba) con l’azienda che iniziò a commercializzarle nel 1987.
SanDisk (allora si chiamava SunDisk) intuì l’enorme potenziale delle memorie flash e nel 1989 registrò un brevetto in cui venivano descritti i principi di funzionamento di un’unità SSD. L’azienda presentò il primo SSD commerciale della storia nel 1991: si trattava di un’unità da 20 MB di capienza basata sulla storica interfaccia PCMCIA venduta ai produttori di PC a circa 1.000 dollari. IBM scelse l’SSD di SanDisk per integrarlo in un suo notebook ThinkPad (qui la storia del primo SSD; qui il brevetto depositato da SanDisk).
Il primo SSD realizzato da SanDisk (ex SunDisk) per IBM.
Un tradizionale hard disk magnetomeccanico memorizza i dati su una serie di dischi magnetici che girano, detti anche “piatti”. Un braccio attuatore monta le testine per la lettura e la scrittura dei dati muovendosi sulla superficie dei piatti per individuare l’area corretta sulla quale leggere o scrivere.
Poiché le testine dell’unità devono allinearsi su un’area del disco per leggere o scrivere dati e i piatti ruotano di continuo, si verifica un ritardo prima che i dati possano essere oggetto di accesso e risultare effettivamente disponibili.
Un hard disk può dover leggere i dati conservati in più posizioni per caricare un file richiesto dal sistema operativo o dall’utente oppure per avviare un programma.
Se l’unità si trovasse in uno stato stand-by o in risparmio energetico possono essere necessari diversi secondi per far girare il disco alla velocità normale e attivarne il funzionamento.
Qualunque hard disk, neppure i modelli in grado di far ruotare i piatti a 10.000 o 15.000 RPM (giri al minuto), può mai neppure lontanamente tenere testa alla velocità con cui lavora un processore. Basti pensare che la latenza delle CPU si misura in nanosecondi (ns) mentre un hard disk in genere impiega 10-15 millisecondi (ms) per trovare i dati sul disco e iniziare a leggerli: un millisecondo equivale a 1.000.000 di nanosecondi, giusto per dare un’idea della differenza abissale in termini di velocità di elaborazione.
Le unità a stato solido o SSD sono chiamate così proprio perché non si basano su parti mobili o dischi che ruotano. Com’è noto, i dati sono invece salvati in un array di memorie NAND flash.
A differenza dei transistor usati nelle memorie volatili DRAM (devono essere aggiornate più volte al secondo), la NAND flash è progettata per mantenere il suo stato di carica anche quando non è alimentata.
Le NAND flash sono organizzate usando uno schema a griglia: l’intera griglia è chiamata blocco mentre le singole righe che compongono la griglia sono chiamate pagine.
Le dimensioni comuni delle pagine sono pari a 2, 4, 8 o 16 KB, con 128 o 256 pagine per blocco. La dimensione del blocco varia quindi tipicamente tra 256 KB e 4 MB.
Poiché gli SSD non hanno parti mobili possono funzionare a velocità molto superiori a quelle di un hard disk. Proviamo, di seguito, a mettere a confronto qualche numero.
Latenza in microsecondi (μs) per l’accesso ai dati
- Hard disk I/O: 1.000 – 10.000 μs. Seek time: 9.000 μs, latenza in lettura/scrittura: 1.000-7.000 μs
- SSD NVMe I/O: 7-150 μs
- Accesso in RAM: 0,04-0,1 μs
- cache L1: 0,0009 μs (0,9 ns)
- cache L2: 0,0028 μs (2,8 ns)
- cache L3: 0,0129 μs (12,9 ns)
Per seek time s’intende il tempo impiegato dall’hard disk per individuare sui piatti i dati che interessano e servono in un determinato istante.
Abbiamo voluto inserire anche i valori medi per l’accesso a un dato conservato nei tre livelli di cache di un processore: Cache, cos’è e come funziona quella di un processore.
Le NAND flash non è neanche lontanamente veloce come la memoria principale ma è diversi ordini di grandezza più veloce di un disco fisso.
Nell’articolo Hard disk o SSD, caratteristiche e differenze siamo scesi un po’ più in alcuni dettagli tecnici.
Fornendo i dati sulla latenza abbiamo volutamente omesso, per non complicare troppo le cose, un aspetto importante. Le unità SSD possono essere di tipo SLC, MLC, TLC e QLC.
Si tratta di sigle che abbiamo imparato a conoscere nell’articolo citato in precedenza e che indicano il numero di bit che possono essere conservati dalla singola cella di memoria NAND flash: rispettivamente due, quattro, otto o addirittura sedici possibili valori (21, 22, 23 o 24).
Ciascun valore viene espresso approssimando diversi livelli di tensione: le unità QLC sono in teoria più inaffidabili perché, soprattutto con il trascorrere del tempo, i valori delle tensioni potrebbero diventare non più così immediati da recuperare o “fissare” in modo accurato. Eppure i prodotti QLC hanno saputo essere convincenti: SSD QLC, sono veloci e affidabili anche se sulla carta non dovrebbero esserlo.
Fonte: Micron
Con l’aggiunta di un maggior numero di bit gestibili dalla singola cella NAND si ha un impatto prestazionale negativo che si riverbera soprattutto sulle attività di scrittura rispetto alle operazioni di lettura.
La latenza tipica delle TLC è 4 volte peggiore rispetto alle NAND SLC in lettura e 6 volte maggiore per le attività di scrittura.
Le NAND TLC sono inoltre quasi due volte più lente delle MLC nonostante gestiscano soltanto il 50% di dati in più (tre bit per cella invece di due).
Le stesse considerazioni valgono anche per le NAND QLC che conservano fino a 16 valori per cella.
Sovrascrittura e cancellazione dei dati in un SSD
Uno dei limiti funzionali delle unità SSD è che se da un lato possono leggere e scrivere dati molto velocemente la sovrascrittura delle informazioni dati risulta molto più lenta.
Questo accade perché se gli SSD leggono i dati a livello di pagina (cioè da singole righe all’interno della griglia o blocco) e possono scrivere sempre a livello di pagina la cancellazione dei dati può avvenire sull’intero blocco.
Si tratta di una scelta che viene compiuta per evitare di “stressare” le celle adiacenti a quelle da sovrascrivere.
Un SSD copia quindi il contenuto dell’intero blocco nella memoria, cancella il blocco e poi scrive il contenuto del vecchio blocco insieme con la pagina aggiornata.
Nel caso in cui l’unità fosse piena e non ci fossero pagine vuote disponibili, l’SSD dovrà prima scansionare i blocchi che sono stati marcati per essere cancellati (ma che il controller non ha ancora provveduto a eliminare) e poi scrivere i dati.
La garbage collection è un processo attivo in background che permette a un’unità SSD di mitigare l’impatto sulle prestazioni dei “cicli program/erase“. Ne abbiamo parlato nell’articolo SSD, come funzionano le tecnologie che li rendono più veloci.
Quest’immagine tratta da Wikipedia mostra molto bene il funzionamento del meccanismo di “garbage collection”.
Nell’esempio in figura l’unità SSD ha approfittato del fatto che può scrivere molto velocemente su pagine vuote scrivendo dapprima i valori A-D nelle pagine del primo blocco X.
Ha quindi usato sempre il blocco X per scrivere nuove pagine E-H e annotare una modifica del contenuto delle prime quattro pagine (A’-D’). Le versioni originali A-D sono state quindi marcate come eliminabili.
Durante un periodo di inattività dell’unità, l’SSD sposta le pagine su un nuovo blocco (Y in questo caso), cancella il contenuto del vecchio blocco e lo marca come spazio libero. In questo modo, in caso di una successiva operazione di scrittura, l’SSD può scrivere nuove informazioni direttamente sul blocco X senza eseguire il ciclo program/erase.
Con un hard disk tradizionale il sistema operativo non ha bisogno di prestare attenzione a dove i dati vengono scritti e a qual è lo stato relativo dei blocchi o delle pagine. Con un SSD invece questo aspetto conta parecchio.
Il comando TRIM permette al sistema operativo di indicare quali pagine possono essere cancellate: in questo modo l’SSD può saltare la riscrittura di alcuni dati quando esegue la cancellazione di un blocco. Ciò riduce la quantità totale di dati che l’unità scrive e aumenta la longevità dell’SSD.
Poiché gli SSD scrivono dati su pagine ma cancellano i dati in blocchi, la quantità di dati che viene scritta sull’unità è sempre maggiore rispetto ai dati che necessitano di aggiornamento.
Ad esempio, se si fa una modifica a un file di 4 KB l’intero blocco in cui si trova il file deve essere aggiornato e riscritto. A seconda del numero di pagine per blocco e della dimensione delle pagine l’unità potrebbe finire per scrivere 4 MB per aggiornare un semplice file da soli 4 KB. Questo fenomeno si chiama Write Amplification ed è arginato proprio grazie all’utilizzo del comando TRIM, della garbage collection e del cosiddetto over provisioning ovvero il mantenimento di un’area libera sull’unità, spesso definita e destinata allo scopo dal produttore dell’SSD.
Il meccanismo chiamato Wear Leveling serve infine per assicurarsi che certi blocchi NAND non vengano scritti e cancellati più spesso di altri.
Se da un lato si aumenta l’aspettativa di vita, come effetto collaterale si può registrare un certo aumento della Write Amplification: per distribuire le scritture in modo uniforme talvolta è necessario disporre cicli program/erase anche se il contenuto dei blocchi non è cambiato. Un buon algoritmo di Wear Leveling cerca di bilanciare entrambi gli aspetti.
I controller degli SSD usano spesso memorie DDR3 o DDR4 per aiutare a gestire la NAND stessa. Molte unità incorporano anche sistemi di cache “ad hoc” che si comportano come buffer aumentando le prestazioni dell’unità e dedicando la NAND ai cicli di lettura/scrittura.
Poiché la NAND flash in un SSD è tipicamente collegata al controller attraverso una serie di canali di memoria paralleli, il controller può essere pensato come un oggetto che effettua una sorta di bilanciamento di carico servendosi di Wear Leveling, garbage collection e gestione della cache SLC.
Il controller gestisce inoltre la correzione degli errori con gli algoritmi di questo tipo che sono diventati sempre più complessi, efficaci ed efficienti rispetto a qualche anno fa.
Alcune unità usano anche algoritmi di compressione dei dati per ridurre il numero totale di scritture e migliorare la durata di vita dell’unità.
Quanto alle interfacce, un tempo i primi SSD usavano esclusivamente porte SATA, proprio come gli hard disk consumer.
Con il passare del tempo si è progressivamente assistito al passaggio al formato M.2: unità molto sottili, lunghe diversi centimetri, si collegano direttamente con uno slot sulla scheda madre.
Le unità PCIe NVMe offrono prestazioni ancora più elevate rispetto agli SSD SATA in quanto possono contare su un’interfaccia molto più veloce mutuata dalle schede video, con una larghezza di banda molto più ampia. Se gli SSD SATA non superano i 550 MB/s in fase di trasferimento dati con le unità più recenti si arriva a 3,2 GB/s: Come verificare se il PC è compatibile PCIe NVMe.
Cosa ci riserva il futuro delle unità SSD
I produttori di memorie NAND flash hanno dinanzi a loro sfide importanti. Le capacità delle nuove unità SSD continueranno a crescere mentre il prezzo per gigabyte dovrebbe flettere ancora. Difficile che si possa avere un prezzo per gigabyte simile tra SSD e hard disk magnetomeccanici.
Il passaggio a processi produttivi sempre più spinti rappresenta un po’ un punto interrogativo per le NAND flash perché potrebbe contribuire a renderle meno solide e affidabili.
I tempi di conservazione dei dati e le prestazioni in scrittura sono inferiori per le NAND realizzate a 20 nm rispetto a quelle prodotte a 40 nm: Nanometro, unità di misura utilizzata per descrivere le CPU: ecco perché.
L’utilizzo di memorie 3D NAND che quindi si sviluppano in verticale ha permesso di migliorare la densità senza esasperare la riduzione dei nodi di processo. Finora abbiamo visto unità che usano memoria 3D NAND fino a 96 livelli (layer) ma i 128 livelli sono ormai dietro l’angolo.
I produttori di SSD hanno continuamente migliorato le prestazioni dei rispettivi prodotti usando migliori controller, lavorando sul numero di canali utilizzabili, aumentando la larghezza di banda, estendendo l’uso della cache SLC. Nel medio-lungo termine le NAND flash saranno quasi certamente sostituite con un’altra tecnologia.
Ancora nulla è scritto in tal senso ma da più parti si fa sempre più spesso riferimento a RAM magnetica e memoria a cambiamento di fase (Phase-change memory, PCM). Quando succederà sarà una nuova vera rivoluzione perché le latenze passeranno dall’ordine dei microsecondi ai nanosecondi.
Suggeriamo anche la lettura dell’articolo SSD, differenze tra le unità consumer e quelle destinate alle imprese.