SSD: la guida definitiva

SSD

Gli hard disk allo stato solido (SSD), già presenti da qualche anno sul mercato, sono diventati ormai una realtà, proponendosi come valida e vantaggiosa alternativa ai tradizionali hard-disk. Scopriamo in questo articolo la tecnologia su cui si basano, i loro pregi e difetti, e i criteri da adottare per compiere una scelta consapevole e non affrettata.

Introduzione

Rispetto agli hard-disk di tipo convenzionale, gli SSD (Solid State Disk) utilizzano al loro interno dei circuiti elettronici in grado di mantenere l’informazione su dispositivi di memoria non volatile (come vedremo, si tratta sostanzialmente di particolari tipi di memorie flash), e non contengono alcuna parte in movimento. Rispetto agli hard-disk elettro-meccanici (HDD), gli SDD presentano i seguenti vantaggi:

  • sono meno sensibili agli urti meccanici, e tollerano meglio vibrazioni e accelerazioni;
  • non hanno parti in movimento e sono quindi silenziosi;
  • presentano tempi di accesso e di latenza molto ridotti (mediamente inferiori a 1 ms), potendo di fatto indirizzare i dati con un accesso diretto anzichè sequenziale;
  • possono raggiungere delle velocità di trasferimento dati molto superiori rispetto agli HDD, sia nella modalità di accesso continua che in quella casuale;
  • hanno una migliore tolleranza nei confronti di temperatura, umidità, e polvere. Gli SSD si adattano quindi meglio a condizioni di lavoro ostili e sono più robusti;
  • sono molto leggeri e occupano uno spazio molto ridotto;
  • presentano una migliore tolleranza nei confronti dei campi elettromagnetici;
  • assorbono meno corrente rispetto agli HDD convenzionali

A questi innegabili e non certo trascurabili vantaggi, si contrappongono tuttavia alcuni svantaggi che affliggono la tecnologia SSD: sono più costosi degli HDD (parliamo di costo unitario per Gb, non di costo complessivo del dispositivo), e sopportano un numero limitato di cicli di scrittura durante il tempo di vita del componente stesso. Come vedremo più in dettaglio successivamente, saranno proprio questi due fattori, che preferiamo considerare come limitazioni e non svantaggi della tecnologia SSD, a decretare il campo di utilizzo e le applicazioni in cui un dispositivo SSD può essere preferibile a un HDD. Del resto, sostituire un HDD con un SSD non è un’operazione particolarmente complicata (almeno dal punto di vista meccanico ed elettrico), in quanto gli SSD adottano, in generale, delle interfacce elettriche analoghe a quelle presenti sui comuni hard-disk.

Parlando di SSD, diventa molto importante, se non fondamentale, evidenziare quale tipo di memoria flash è stata impiegata per la loro fabbricazione. Quando più avanti parleremo di performance, vedremo come questo sia uno dei fattori che incide in modo preponderante sulla scelta del componente. Le tipologie di memoria flash utilizzate negli SSD sono due: MLC (Multi-Level Cell), e SLC (Single-Level Cell). Le prime, basate sulla tecnologia elettronica delle flash NAND, utilizzano più livelli per una stessa cella di memoria, in modo tale da incrementare la quantità di dati memorizzabili su una singola cella. Lo svanataggio è che aumenta la complessità a livello software, essenzialmente per rilevare la condizione e il rate di errore.

Le SLC memorizzano invece i dati in singole celle di memorie, e utilizzano una tecnologia elettronica basata su transistor con gate flottante. Le memorie MLC sono più economiche, più lente, e meno affidabili delle memorie SLC, che di conseguenza vengono adottate soltanto per equipaggiare gli SSD di fascia alta. Le memorie MLC, inoltre, sopportano da qualche migliaio a poche decina di migliaia di cicli di scrittura, mentre le memorie SLC possono essere riscritte anche 100 mila o più volte. Esistono poi dei particolari tipi di memorie SLC che riescono a reggere anche 5 milioni di cicli di scritture, ovviamente facendo lievitare ulteriormente il loro prezzo. Raggiunto il numero limite di cicli di scrittura, la memoria flash non è più scrivibile, e si comporta come fosse una memoria di sola lettura. Il numero limitato di cicli di scrittura è sempre stato un problema cruciale delle memorie con tecnologia flash, per lo meno quando esse vengono adottate come memoria di massa in sistemi embedded, netbook e laptop, o anche computer desktop. Non è un caso, quindi, che più di un ricercatore abbia speso del tempo cercando di realizzare qualche algoritmo che fosse per lo meno in grado di allungare ulteriormente la vita utile di queste memorie. Una tecnica interessante sviluppata a questo proposito è quella del “wear leveling”, che potremmo tradurre in italiano come “bilanciamento dell’usura”. Questo algoritmo consiste nel distribuire automaticamente le scritture tra le varie celle della memoria, in modo tale che ciascuna di esse abbia sopportato circa lo stesso numero di scritture eseguito sulle altre.

Parlando di prestazioni, è inevitabile affrontare il tema dell’eterno confronto “SDD versus HDD“, quale tra i due è migliore?. E’ un argomento che va trattato con cura e obiettività, considerando anche le condizioni iniziali a partire dalle quali eseguire i test. In generale possiamo già anticipare che, nostante l’SSD sia una tecnologia più recente e con enormi vantaggi rispetto agli hard-disk tradizionali, questi ultimi possono in numerose condizioni dire ancora la loro e essere addirittura superiori nei benchmark.

La tecnologia

Le memorie SSD sono fondamentalmente composte da tre blocchi:

  • un supporto fisico predisposto alla memorizzazione delle informazioni (la memoria flash)
  • un controller, cioè in sostanza un circuito integrato custom (SoC o ASIC) la cui funzione è quella di gestire la flash, gli algoritmi di scrittura e cancellazione, il rilevamento e la marcatura dei settori guasti, ecc.
  • un’interfaccia per la comunicazione con il sistema host (ad esempio SATA, PCI Express, PIDE, ecc.)

Il supporto fisico

E’ il fattore chiave dal quale dipendono maggiormente le prestazioni ed il costo di un SSD. Come abbiamo visto in precedenza, le memorie maggiormente utilizzate (e anche le più economiche) sono basate sulla tecnologia flash di tipo NAND. Sviluppata a partire dagli anni ’80, la cella flash NAND è fondamentalmente basata sul principio di “intrappolare” gli elettroni in una cella in grado di mantenere lo stato anche quando viene rimossa l’alimentazione. Applicando alla cella degli impulsi di tensione elevata, è possibile sia scrivere su di essa (altri elettroni verranno “intappolati” nella cella) sia cancellarla (in questo caso gli elettroni vengono “liberati” dalla cella). La lettura del contenuto della cella, invece, non richiede l’applicazione di una tensione elevata, e viene compiuta acquisendo il dato tramite un convertitore analogico-digitale.

Nell’immagine seguente si può osservare la struttura tipica di un SSD: nella parte destra è visibile l’interfaccia di collegamento con il sistema che ospita l’SSD, più o meno al centro è collocato il controller dell’unità, mentre sulla sinistra sono visibili le memorie flash.

Qual’è allora la differenza tra una cella MLC e una SLC? La risposta è semplice: la differenza sta nel numero di soglie utilizzate per discriminare il contenuto della cella. Le memorie SLC memorizzano un solo bit per cella, e quindi necessitano soltanto di due soglie per discrimanre il loro contenuto: una soglia associata al valore 0 e l’altra associata al valore 1. Le memorie MLC, invece, memorizzano due bit per cella, e avranno pertanto bisogno di quattro soglie di discriminazione, ciascuna associata alle quattro combinazioni binarie ottenibili con due bit. A questi due tipi di memoria, se ne sta ultimamamente affiancando un nuovo tipo, denominato TLC (Three Level Cell), in cui vengono memorizzati tre bit per cella, e le soglie sono pertanto otto.

Nell’immagine seguente sono indicate le combinazioni ammissibili di bit (possibili stati della memoria) nel caso di memorie flash SLC, MLC, e TRC.

Quest’altra immagine, invece, da un’idea del numero di soglie necessarie per distinguere gli stati delle memorie. Sull’asse orizzontale è infatti riportata la tensione della cella, misurata dal convertitore ADC. Nel caso di memoria SLC saranno sufficienti due soglie di tensione, che possiamo immaginare come centrate nei due punti massimi corrispondenti agli stati 1 e 0. Nel caso di memoria MLC occorreranno invece 4 soglie, che saliranno a 8 nel caso di memorie TLC.

Come già anticipato, la discriminazione delle soglie viene effettuata tramite l’impiego di convertitori analogico-digitali. In generale, il valore di un convertitore A/D a 8-bit è espresso dalla formula:

n = log2(numero di soglie di tensione)

Aumentando il numero di bit per cella, si riesce chiaramente a ridurre i costi, in quanto aumenta la capacità della memoria (o meglio, la sua densità). Lo svantaggio, come abbiamo visto, è che cresce anche il numero di soglie, e quindi la complessità e velocità del convertitore A/D. Ne consegue che le prestazioni della memoria calano. Non solo, gli impulsi di tensione applicati in programmazione devono essere molto precisi e di breve durata, e anche questo fattore contribuisce a rallentare le prestazioni. Teniamo inoltre presente che per tutti questi tipi di memoria è sempre necessario eseguire la cancellazione prima di ogni scrittura e ciò è insito nell’architettura impiegata per la loro realizzazione.

A questo punto è doveroso introdurre il concetto di accesso simmetrico e asimmetrico. Gli HDD hanno un accesso simmetrico, intendendo con ciò il fatto che il tempo minimo di accesso in lettura e il tempo minimo di accesso in scrittura sono dello stesso ordine di grandezza, se non uguali. Le memorie flash hanno invece un accesso asimmetrico: i due tempi minimi di accesso in lettura e scrittura sono diversi (anche molto) tra loro. Giusto per dare un’idea di quanto ampia sia questa asimmetria, si tenga presente che una memoria di questo tipo presenta una velocità di lettura dell’ordine di 400 Mb/secondo, mentre la velocità di scrittura si riduce a circa 10-20 Mb/secondo.

Rispetto agli hard-disk, le memorie flash hanno però un tempo di latenza molto ridotto, dell’ordine di 20-200 microsecondi in lettura, e 1-10 millisecondi in scrittura (per gli HDD si parla di decine di millisecondi). Un altro limite delle memorie flash è il numero limitato di cicli di scrittura, causato dal processo di cancellazione e programmazione delle celle. Con il tempo, infatti, gli elevati impulsi di tensione applicati alle celle bruciano letteralmente il substrato di ossido presente sul chip, riducendo la capacità della cella di isolare gli elettroni.

La logica di controllo

La logica di controllo (nell’immagine sottostante è visibile un esempio di controller commerciale) è la parte più critica dell’SSD, quella cioè capace di trasformare un’unità di memoria grezza e suscettibile di errori in un SSD robusto ed affidabile. Si tratta in sostanza di un componente hardware embedded, con un proprio circuito elettronico e un opportuno firmware, in grado di gestire tutte le funzionalità più complesse dell’SSD. Per realizzare il controller si adottano in genere dei SoC, veri e propri ASIC che includono più core embedded ai quali sono associati le varie funzionalità di controllo. Il SoC include normalmente anche una discreta quantità di memoria SRAM, necessaria per eseguire il firmware integrato, ma spesso si utilizza anche una memoria DRAM esterna. Completano il circuito un sistema di backup, composto da batterie o da opportuni condensatori, in grado di garantire la scrittura (flush) dei dati quando si verifica un’interruzione inaspettata dell’alimentazione.

L’interfaccia host

E’ il canale fisico che permette la comunicazione tra il modulo SSD e il sistema host a cui è collegato. La maggiorparte degli SSD impiegano interfacce standard come il SATA (Serial ATA) oppure il SAS (Serial Attached SCSI). La comunicazione avviene tramite protocolli di basso livello che implementano una serie di comandi (uno di questi è il TRIM, che vedremo tra breve). Sull’SSD il protocollo è gestito dal firmware presente nel controllore. Oltre a questi due standard, ritrovabili anche sui dispositivi HDD, gli SSD sono disponibili anche con interfaccia PCI Express (PCIe), un’interfaccia molto efficiente che consente una facile integrazione sui laptop, sui server, e su molti sistemi embedded di ultima generazione.

Nelle due immagini seguenti sono mostrati due esempi di SSD di tipo commerciale: il primo ha un’interfaccia PCIe, mentre il secondo è un “blade” (nome legato al suo fattore di forma, simile alla lama di un coltello) con interfaccia SATA III, utilizzato tipicamente nei portatili.

Correzione degli errori

Le memorie flash di tipo NAND hanno delle prestazioni molto elevate, ma hanno anche una percentaule di errore superiore ad altri tipi di memoria. E’ pertanto necessario implementare degli algoritmi di rilevamento e correzione degli errori, in grado di stare al passo con la velocità con cui sono eseguiti i cicli di lettura e scrittura di queste memorie (si parla di parecchi gigabyte al secondo). Normalmente gli SSD utilizzano a questo scopo uno o più circuiti hardware ECC (Error Correction Code), in grado di decodificare e codificare tutti gli accessi in lettura e scrittura alla memoria, in tempo reale, rilevando eventuali errori.

Il firmware del controllore

Questo firmware gestisce un vero e proprio filesystem, detto anche FTL (File Translation Layer), il cui compito è quello di mappare i blocchi logici del sistema in pagine e blocchi fisici sulla memoria NAND. I blocchi logici sono composti da 512 byte oppure da 4 Kb, e questi vengono mappati in pagine di memoria NAND da 8 Kb. Le pagine vengono poi aggregate in blocchi (fisici) di 64 oppure 128 pagine. Poichè le scritture possono essere eseguite soltanto su blocchi di memoria vuoti, l’FTL deve mantenere un pool di blocchi liberi, da utilizzare quando occorre eseguire una scrittura. Se questo pool di buffer dovesse esaurirsi (ma anche quando la memoria rimane inattiva per un certo periodo di tempo), viene automaticamente attivata un’operazione di “garbage collection” (raccolta dell’immondizia), che viene eseguita come processo a bassa priorità, quindi in background. In sostanza vengono recuperati i blocchi non più utilizzati dal filesystem, che vengono cancellati, aggregati in nuovi buffer, ed entrano nuovamente a far parte del pool di buffer liberi. Gli SSD attuali, rispetti ai primi modelli, tendono a sovradimensionare il pool di buffer liberi (in applicazioni particolarmente critiche, si può arrivare a un sovradimnsionamento pari al 50% della flash), e pertanto si riduce drasticamente la probabilità di pool esausto.

Le operazioni principali eseguite dall’FTL possono essere così riassunte:

  • tiene traccia del numero di programmazioni e cancellazioni eseguite su ciascun blocco, in modo tale da distribuire uniformemente l’utilizzo dei singoli blocchi, prolungando la vita del componente;
  • tiene traccia dei blocchi guasti o difettosi (a volte lo sono già quando il componente esce dalla fabbrica), in modo tale da escludere il loro utilizzo;
  • individua e marca i blocchi passibili di garbage collection.

Finora abbiamo parlato degli SSD in quanto tali, ma cosa dire delle applicazioni o addirittura dei sistemi operativi che possono essere installati su di essi? E’ sufficiente considerare un SSD alla stregua di un comune hard-disk, oppure, per migliorare le prestazioni e l’efficienza, è opportuno adottare delle tecniche particolari anche lato software applicativo? La risposta corretta è la seconda. I sistemi operativi attuali, da Linux a Windows, hanno nel tempo incorporato delle modifiche atte a migliorare l’utilizzo degli stessi su memorie SSD. Linux, ad esempio, può essere configurato in modo tale da ottimizzare la schedulazione su SSD, migliorando le performance complessive. A livello di protocollo (interfaccia di comunicazione tra SDD e sistema host), sono state poi introdotte le seguenti tecniche aggiuntive:

  • TRIM/UNMAP – un problema comune agli SDD è che il file system host potrebbe cancellare dei dati non più utilizzati senza avere alcun modo per comunicarlo al controllore dell’SDD. L’interfaccia TRIM/UNMAP serve proprio a questo scopo: attraverso un opportuno comando implementato nel protocollo, l’host può comunicare questa informazione al controller, il quale libererà i blocchi corrispondenti nell’FTL presente su SSD, aggiungendo più blocchi a quelli utilizzati dal garbage collection;
  • Scatter Gather (raccolta sparsa) – i protocolli convenzionali prevedono che, nel caso di accesso a blocchi multipli sull’SSD, questi debbano essere contigui. Se invece sono sparsi (uno qua uno là) occorre fornire più comandi. Con l’estensione Scatter Gather, è invece possibile raggruppare in un singolo comando più blocchi anche non contigui, riducendo l’overhead e migliorando le prestazioni.

Performance

Parlando di performance, occorre anzitutto premettere che per gli SSD non si possono in genere applicare gli stessi tool utilizzati per testare gli HDD, in quanto per gli SDD non si può parlare di tempo di latenza (o quantomeno esso è trascurabile rispetto a quello degli hard-disk tradizionali). Inoltre, negli SSD l’accesso è sempre di tipo simmetrico. Di conseguenza i benchmark utilizzati per testare gli SSD dovrebbero basarsi sui seguenti parametri:

  • alternanza tra operazioni di lettura e scrittura: questo è ciò che avviene nell’utilizzo tipico di un SSD; non ha molto senso fare un test in cui vengono generati pattern con 100% di operazioni di scrittura o 100% di operazioni di lettura, essendo questi poco realistici;
  • mantenere il throughput (utilizzo della banda di trasferimento dati da e verso il dispositivo) il più elevato possibile, in modo da stressare il componente e simulare le condizioni più critiche;
  • eseguire un numero sufficiente di scritture in modo tale da riempire i blocchi di flash NAND e attivare la funzionalità di wear leveling;
  • generare dei pattern con operazioni di lettura e scrittura casuali, in modo tale da simulare le condizioni di utilizzo peggiori;
  • ripetere i test in modo tale da verificare come le prestazioni variano nel tempo (degrado del componente).

Per chi volesse approfondire l’argomento relativo alle performance e avere una “classifica” aggiornata dei migliori SSD disponibili sul mercato, rimandiamo a questo sito, che viene costantemente aggiornato con i nuovi dati disponibili. Nell’immagine seguente possiamo vedere un estratto relativo alle prime posizioni della “classifica” come risultante al giorno 18 Marzo 2014.

Come scegliere un SSD?

Anzitutto occorre premettere che non esiste (e non occorre scegliere) l’SSD migliore in assoluto, ma piuttosto è bene scegliere quello che più si adatta alle nostre particolari esigenze. Vediamo allora di definire le linee guide che possono aiutare a scegliere l’SSD a noi più adatto, districandosi tra la molteplicità di marche e modelli presenti sul mercato:

  • velocità massima – ogni SSD, nella sua scheda tecnica, deve riportare il valore massimo di velocità in lettura e scrittura, quindi questo è sicuramente un parametro che influisce sulla scelta finale. Occorre comunque sottolineare che la velocità massima viene raggiunta solo in condizioni particolari (picco di utilizzo), e che la velocità effettiva può essere sensibilmente inferiore;
  • tecnologia flash utilizzata – come abbiamo visto in precedenza, sono oggi disponibili due tipi di memorie flash: MLC (più economiche, ma con maggiore percentuale di errore), e SLC (più veloci ma più costose). Bisogna quindi cercare il trade-off tra queste due tecnologie: se siamo interessati a un utilizzo personale o domestico, meglio orientarsi direttamente su un modello MLC; se invece stiamo lavorando a un progetto professionale dove interessa ridurre l’MTBF e avere il minor numero di disservizi (si pensi a un sistema di automazione industriale) meglio spendere qualcosa in più e scegliere una SLC;
  • disponibilità dell’ECC – la tecnica di Error Correction Code è stata introdotta sulle MLC proprio per ridurre i limiti derivanti da questo tipo di cella: difficoltà a discriminare i livelli e percentuale di errore elevata. E’ pertanto bene che l’ECC sia presente sull’SSD (un buon sistema ECC aumenta notevolemente la velocità in lettura della memoria);
  • interfaccia verso l’host – nel caso si scelga l’interfaccia SATA, è bene accertarsi che sia un SATAIII. La prima versione di SATA garantiva infatti una velocità di trasferiemnto pari a 1,5 Gbps, velocità che è poi raddoppiata (3,0 Gbps) con la versione successiva, la SATAII. La versione più recente, SATAIII, permette di raggiungere una velocità di 6,0 Gbps ed è compatibile con le precedenti, quindi è meglio orientarsi senza indugi su questo tipo di interfaccia;
  • verificare e controllare le performance, se disponibili, su uno dei siti come quello citato in precedenza; in questo modo si possono evitare “brutte sorprese”;
  • se disponibile, controllare anche il dato relativo alla dimesnione fisica della memoria flash, confrontandolo con il dato di capacità. Perchè, non sono uguali (direte voi)? Non necessariamente. In precedenza si era parlato di overprovisioning, ed è proprio questo il motivo per cui i due precedenti dati possono differire. Con l’over-provisioning, i fabbricanti includono nell’SSD più memoria fisica di quella effettivamente dichiarata (la capacità) in modo tale da poter disporre di blocchi extra e aumentare le performance. Ad esempio, un disco SSD con capacità pari a 128 Gb potrebbe disporre di una memoria fisica pari a 136 Gb (8 Gb di memoria extra);
  • non andare troppo al risparmio. Gli SSD non sono un genere su cui conviene risparmiare troppo: meglio scegliere una marca affidabile e con una buona esperienza nel settore piuttosto che ripiegare su un produttore sconosciuto. Certo, anche nel mercato delle memorie possono esistere le startup, ma l’esperienza è fondamentale. Tra questi nomi ne citiamo alcuni: Intel, Samsung, OCZ, Crucial, Kingston, Violin, Fusion.io;
  • verificare e scegliere un SSD che abbia il supporto per il TRIM;
  • non prendere sempre come “oro colato” ciò che i produttori (soprattutto di laptop) dichiarano quando esce un loro nuovo prodotto equipaggiato da un SSD. La tendenza è quella di dichiarare velocità di trasferimento che poi non corrispondono all’utilizzo reale.

Conclusioni

Abbiamo visto in quest’articolo cosa sono gli SSD, come sono fatti al loro interno, e quali criteri adottare per fare un acquisto consapevole e senza sorprese. Gli SSD non sono più un oggetto misterioso, e sono ormai di diritto entrati a far parte del mondo dell’informatica e dell’elettronica. Apple, ad esempio, è stata da sempre un’azienda che ha creduto negli SSD, impiegati inizialmente sugli iPod e poi via via su altri prodotti come il Macbook Air (mostrato nell’immagine precedente).

Qualcuno tra i lettori sta forse già pensando di comprarsi un SDD e installarci sopra il sistema operativo del proprio PC (per tutti gli altri programmi va bene un comune e tradizionale HDD)?

Fateci sapere le vostre impressioni e esperienze in proposito.

19 Comments

  1. Luigi.D'Acunto 24 aprile 2014
  2. ciccioferrise 24 aprile 2014
  3. Boris L. 24 aprile 2014
  4. Boris L. 24 aprile 2014
  5. slovati slovati 24 aprile 2014
  6. Giorgio B. Giorgio B. 26 aprile 2014
  7. ciccioferrise 26 aprile 2014
  8. ciccioferrise 26 aprile 2014
  9. Boris L. 28 aprile 2014
  10. Antonello Antonello 28 aprile 2014
  11. Antonello Antonello 28 aprile 2014
  12. slovati slovati 28 aprile 2014
  13. slovati slovati 28 aprile 2014
  14. slovati slovati 28 aprile 2014
  15. Antonello Antonello 29 aprile 2014
  16. slovati slovati 29 aprile 2014
  17. Piero Boccadoro Piero Boccadoro 1 maggio 2014
  18. gfranco78 gfranco78 4 maggio 2014
  19. Filippo.Boschetti 7 giugno 2014

Leave a Reply