Com'è fatto un SSD?
Qualunque sia il formato dell’SSD, esso è composto sempre da massimo tre componenti: controller, NAND flash ed eventuale DRAM. Ci sarebbe anche un quarto ossia il
power management integrated circuit (PMIC), ma non c’è molto da dire se non che è il circuito integrato utile per distribuire la corrente attraverso ogni componente dell’SSD.
Qui c'è un'immagine di com'è fatto un SSD. In rosso il controller, in verde la DRAM, in blu il PMIC e in giallo le NAND flash.
Controller
Il controller è il cuore pulsante dell’SSD in quanto gestisce tutti gli algoritmi utili al corretto funzionamento del drive (algoritmi come il
garbage collection e il
wear leveling) e permette anche di stabilire una connessione e trasmissione di dati sia verso che dall’interfaccia e dalle NAND flash. Il controller è un microcontrollore da 32-bit composto dai suoi core e dal suo numero di canali di comunicazione con le NAND flash, dove per ogni canale c’è poi un numero di
chip enable (CE) ossia un numero massimo di segnali di attivazione dei die delle NAND flash. Questo stabilisce con quanti die ogni canale può comunicare contemporaneamente (e l’azione della trasmissione di dati tra più si chiama
interleaving). Se per esempio abbiamo un controller con 8 canali e 4 CE per canale ciò vuol dire che il nostro controller può comunicare con massimo 32 die NAND flash contemporaneamente suddivisi in 4 die per ogni canale (8 * 4 = 32).
Suddivido il controller in 3 parti:
host interface layer (HIL),
flash translation layer (FTL) e
flash controller. Andando in scala:
-
Host interface layer: lo strato che si occupa di fornire una corretta connessione per la comunicazione tra l’SSD e la CPU usando un’interfaccia fisica come PCIe o SATA.
-
Flash translation layer: viene chiamato anche “firmware” per gli SSD ed è lo strato che si occupa dei lavori più importanti in quanto gestisce la cache dei dati, la mappa della conversione degli indirizzi logici a quelli fisici (gli indirizzi fisici sono chiamati “physical block address (PBA)” e la mappa della conversione degli indirizzi logici-fisici è chiamata in inglese “logical-to-physical (L2P)”) ed esegue algoritmi come il
garbage collection,
wear leveling, ecc.
-
Fash controller: questa parte contiene l’
error correction code (ECC), il
randomizer per permettere l’esecuzione di
data scrambling ed è collegato ai canali NAND flash. L’ECC non è altro che l’algoritmo di correzione dati mentre il
data scrambling eseguito dal
randomizer è il garantire probabilisticamente che i dati scritti nelle NAND flash contengano tutti quanti lo stesso numero di 0 e 1 distribuiti randomicamente. Si fa
data scrambling dal momento che gli errori nelle memorie flash sono molto dipendenti dal valore dei dati memorizzati nelle celle di memoria.
Qui c'è una rappresentazione dell'host (PC), HIL, FTL,
flash controller e delle NAND flash.
Gli attuali e maggiori produttori di controller sono Phison, Silicon Motion, InnoGrit, MaxioTech, Realtek e Marvell. Ci sono poi produttori più piccoli per il mercato cinese come TenaFe e Yeestor ma ci sono anche aziende che producono in proprio i controller come Samsung, SK hynix e Western Digital (WD).
NAND flash
Le NAND flash sono il tipo di memoria flash che viene utilizzato negli SSD. Alla base di queste memorie c’è un transistor inventato nel 1967 da due ingegneri asiatici: il
floating gate MOSFET (FGMOS). In realtà c’è da dire che il FGMOS non viene più utilizzato nelle recenti NAND flash a causa di diversi motivi, l’unico produttore che lo utilizza ancora è Solidigm (ex-Intel), ma a parte lui tutti gli altri produttori si sono spostati al transistor con tecnologia
charge trap flash (CTF) che prevede l’uso di uno strato di
nitruro di silicio (Si₃N₄) anziché uno strato di
floating gate. Tuttavia, essendo il funzionamento alla base lo stesso, va bene comunque parlare del FGMOS.
Senza entrare troppo nel tecnico, un transistor FGMOS ha di diverso da un transistor MOSFET il fatto che ci sia uno strato di intrappolamento delle cariche (che si chiama “floating gate” ed è fatto di polisilicio) e una barriera di potenziale in più. La struttura del transistor è quindi
questa:
control gate (CG) in polisilicio, strato di ossido-nitruro-ossido (chiamato anche “ONO”),
floating gate (FG) in polisilicio e poi uno strato di ossido di silicio (SiO₂) chiamato “tunnel oxide”. Per poter programmare il transistor in “0” e scrivere quindi dei dati è necessario applicare una tensione di 18-20 V al CG facendo fluire gli elettroni dal silicio al floating gate superando la barriera di potenziale “tunnel oxide” tramite
effetto tunnel. Per invece cancellare il transistor si applica una tensione di 18-20 V al silicio per far tornare gli elettroni da dove sono arrivati. Infine, se volessimo leggere i dati basterebbe applicare una tensione di riferimento (“Vref”) ai transistor a noi interessati e controllare se c’è della corrente o meno nella cella NAND flash: in caso ci fosse vorrebbe dire che la cella sarebbe già programmata, altrimenti no.
Questo continuo passaggio di elettroni tra lo strato di silicio e il FG è la debolezza più grande di queste memorie: è questo quello che deteriora i componenti del transistor causando il
data retention e il numero limitato di PEC effettuabili.
Adesso che abbiamo parlato di questo aspetto tecnico sappiamo da cosa è formata una pagina delle NAND flash: dai transistor. A loro volta le pagine sono contenute dentro le superpagine, le superpagine sono contenute dentro i blocchi, i blocchi sono contenuti dentro i superblocchi e infine i superblocchi sono contenuti dentro i piani. E dopo i piani…
die e
package, poi nient’altro. Possiamo dire che le NAND flash sono un po’ una matrioska.
Gli attuali e maggiori produttori di NAND flash sono Samsung, il gruppo SK hynix (SK hynix e Solidigm), Kioxia, Micron, YTMC e WDC.
DRAM
La memoria ad accesso casuale dinamico (DRAM) è un tipo di memoria volatile, ossia che non è in grado di mantenere i dati in caso di assenza di corrente. Essa viene utilizzata negli SSD di fascia alta perché è in grado di migliorare le performance (soprattutto quelle randomiche) dal momento che, avendo indirizzi da 32-bit, ha un rapporto 1:1.000 con i dati/celle di memorie e 1 byte corrisponde a 1kB, perciò 4 byte (32-bit) di dati corrispondono a 4kB, la dimensione tipica dei cluster del sistema operativo. Questo è anche il motivo per il quale viene assegnato 1GB di DRAM per TB di SSD ma
qui, per chi fosse interessato, ho fatto una spiegazione esaustiva sul rapporto dimensione DRAM-dimensione SSD.
La funzionalità della DRAM negli SSD è quella di memorizzare la mappa L2P essendo molto più veloce delle NAND flash (la DRAM opera nell’ordine di nanosecondi mentre le NAND flash nell’ordine di microsecondi
[6]), memorizzare metadata come il numero di PEC di ogni blocco, gestire la coda di richieste I/O dell’host e fungere per qualche MB da cache per alcuni dati. Essendo volatile la maggior parte della capacità della DRAM non viene usata come cache.
La DRAM tecnicamente aumenta la durata, ma più che “aumenta la durata” diminuisce il WAF facendo Defer-Write, ossia l'unione di più indirizzi piccoli in unico più grande, il problema è che questo vantaggio è tutto teorico e non ci sono prove né divulgative né accademiche, quindi non sappiamo in termini quantitativi quanto sia più duraturo un SSD DRAM-based rispetto ad uno DRAM-less.
Tutti gli SSD che usano la DRAM sono “DRAM-based” mentre quelli senza sono “DRAM-less”.
Gli attuali e maggiori produttori di DRAM per gli SSD sono Micron, Samsung, SK hynix e Nanya.
Quali sono i tipi di NAND flash?
Esistono tre tipi principali di NAND flash:
single-level cell (SLC),
multi-level cell (MLC),
triple-level cell (TLC),
quad-level cell (QLC) e
penta-level cell (PLC). Prima di spiegare che cosa sono va specificato che questi tipi di NAND flash sono tutti quanti 3D, tridimensionali, ossia che tutte le pagine sono disposte verticalmente come uno stack altissimo. Più è alto lo
stack più
layer avrà, quindi delle NAND flash da 321-layer (321L) sono alte 321 pagine (dette anche "wordline").
Qui una rappresentazione di uno stack di celle NAND flash 3D.
SLC, MLC, TLC, QLC e PLC si distinguono per il quantitativo di bit che si possono memorizzare per cella, dove è rispettivamente 1 bit per cella, 2 bit per cella, 3 bit per cella, 4 bit per cella e 5 bit per cella. Più bit per cella abbiamo più siamo in grado di costruire NAND flash e SSD capienti ed economici, motivo per il quale gli SSD stanno aumentando di dimensioni sempre di più (con il record attuale di 245,76TB di Kioxia
[7]) e stanno anche diminuendo di prezzo; come contro, però, più bit per cella abbiamo, più livelli di tensione ci sono con anche maggiore sensibilità dei valori di lettura delle celle NAND flash, comportando, così, a minor durata e minori performance. In generale la durata delle NAND flash SLC è di 100.000 PEC, quelle MLC di 10.000 PEC, quelle TLC di 3.000 PEC, quelle QLC di 1.500 PEC e di quelle PLC di 1.000 PEC ma come ho scritto in
questo commento il numero di PEC dipende anche dalla qualità dei die ossia dal binning. Esistono, infatti, NAND flash TLC con meno PEC (e quindi meno durature) di NAND flash QLC.
In poche parole la scala di qualità generale è questa: SLC > MLC > TLC > QLC > PLC, peccato che le NAND flash SLC e MLC siano fuori produzione da un sacco di tempo e quelle attuali siano soltanto le TLC, QLC e PLC.
Gli SSD TLC sono adatti per qualsiasi utilizzo sia read-intensive e sia write-intensive. Gli SSD QLC sono un tipo di SSD che al momento consiglio soltanto per uso secondario come gaming, storage di video, foto, ecc. Gli SSD PLC non sono ancora presenti nel mercato consumer ma faranno la stessa fine di quelli QLC per ancora un bel po’ di tempo.
SSD DRAM-based vs. SSD DRAM-less
Avendo parlato della DRAM può essere sorto un dubbio: se porta veramente tutti questi benefici come maggiore durata e maggiori performance, perché allora esistono SSD senza questo chip? Semplice, per fare SSD più economici.
Implementare la DRAM ha un proprio costo per i produttori degli SSD, non a caso gli SSD DRAM-based tendono a costare almeno 15-20 euro in più rispetto alla controparte DRAM-less; proprio per questo motivo sono nati gli SSD DRAM-less, per poter risparmiare qualche soldo in più. Ai tempi dei SATA III, questo tipo di SSD erano un “problema” in quanto risentivano sia delle peggiori performance che della peggior durata, col tempo però i ricercatori hanno creato una tecnologia in grado quasi di sostituire la DRAM utilizzando piccola porzione della RAM del sistema: l’
host memory buffer (HMB).
Qui c’è una spiegazione breve fatta da @Liupen su come funziona l’HMB ma per chi volesse approfondire l’argomento consiglio di leggere direttamente il paper IEEE
qui. Per farla breve, l’HMB appoggiandosi per un massimo di 64MB alla RAM del sistema è in grado di gestire la coda di I/O in modo efficiente, veloce e sicuro garantendo maggiori velocità di quelle che avrebbe se non lo facesse
[8]. Questa tecnologia è usata soltanto dagli SSD NVMe in quanto è stata introdotta con la specifica NVMe 1.2. Ovviamente le performance non sono le stesse di avere un chip DRAM apposito per l’intera mappa L2P (HMB è in grado di tenerne solo una parte essendo di dimensioni molto più piccole rispetto alla DRAM) ma sono comunque impressionanti, specialmente per certi SSD di fascia medio-alta.
Gli SSD DRAM-based vengono consigliati per qualsiasi utilizzo, quelli DRAM-less un po’ meno con tante persone scettiche sul loro uso per il SO. Allo stato attuale posso garantire che gli SSD DRAM-less di fascia alta sono sufficienti per poter soddisfare qualsiasi esigenza dell’utente medio e per poter essere utilizzati per qualsiasi utilizzo di media-leggera intensità, che sia installare il SO o altro. Tuttavia, per utilizzi più “pesanti” è consigliato un SSD DRAM-based.
Il contenuto di questo post è rilasciato con licenza Creative Commons Attribution-Noncommercial-Share Alike 2.5