ANALISI DI UN HARD DISK A STATO SOLIDO (SSD) Introduzione

ANALISI DI UN HARD DISK A STATO SOLIDO (SSD)
Introduzione
La storia degli hard disk a stato solido comincia innanzitutto con l'invenzione delle memorie ROM
cancellabili (o alterabili) elettricamente, oggi comunemente chiamate EEPROM ovvero Electrically Erasable
Programmable Read-Only Memory. Non tutti sanno che inizialmente nacquero 2 versioni di queste
memorie: le EEPROM vere e proprie, sviluppate alla fine degli anni Settanta, in contemporanea con le
EAROM prodotte dalla General Instruments. Queste ultime avevano un tempo di riscrittura di 100
millisecondi, un tempo di lettura di 2 microsecondi, ma il loro alto tempo di riscrittura le rendeva poco
flessibili ad essere riprogrammate, anche se avevano il vantaggio di non dovere essere rimosse dal circuito
stampato per essere riscritte. Fama maggiore ebbero le EEPROM, progettate da un ingegnere elettrico della
Intel,George Perlegos, nel 1978.Una loro proprietà in comune con le EAROM era la capacità di essere
modificabili bit a bit.
L'evoluzione successiva furono negli anni Ottanta le memorie FLASH a semiconduttore non volatili ad alta
densità inventate dalla Toshiba, che garantiscono tempi di accesso particolarmente veloci e possono essere
riprogrammate senza essere rimosse dalla sede, come le EEPROM. Si basano sia sulle tecnologie EPROM
che EEPROM e attualmente costituiscono una specie di compromesso fra questi due tipi di memoria.
Le memorie FLASH sono particolarmente indicate per applicazioni che richiedono una programmazione
frequente. A seconda della tecnologia impiegata, possono essere cancellate e riscritte da 100 a 10000 e più'
volte. Le MEMORIE FLASH vengono cancellate elettricamente ma non permettono la cancellazione
parziale che e' invece possibile con le EEPROM. Tuttavia, possono essere cancellate totalmente in pochi
secondi, dunque molto più' velocemente delle EPROM.
Tuttavia,a causa di un elevato costo di produzione in massa ed uno scarso interesse generale,non ci fu una
larga implementazione di esse in campo industriale. L'obiettivo principale (salvataggio dati) era assolto più
che bene dai normali dischi rigidi (HARD DISK, o hdd), inventati dall'IBM e già diffusi da molti anni. Esse
rimasero per molto tempo solo una piccola porzione di memoria riservata a particolari usi (ad esempio, come
memoria per scatole nere nei velivoli).
Sono passati infatti circa 50 anni dall' invenzione degli hard disk comuni, e continue innovazioni hanno
migliorato notevolmente la loro capacità, affidabilità, velocità e prezzo.
Se i primi hard disk (IBM 350) avevano un tempo medio di accesso di 1 secondo, velocità rotazionale di
1200 rpm, con una capacità di 205 MB circa, con un prezzo accessibile solo a grandi centri di calcolo gli
attuali hard disk consentono capacità nell'ordine dei Terabyte, velocità rotazionali di 15000 rpm, tempi di
accesso nella soglia di 4-5 millisecondi, con un costo minore di 0,5 $ al gigabyte. (Seagate Cheetah).
Contemporaneamente però, si sono visti miglioramenti ben più ragguardevoli per quel che riguarda i
Microprocessori e memorie RAM.
Se il tempo di accesso alla Ram è nell'ordine di 50/300 cicli di una moderna CPU, rimane ancora altissimo,
in ambito dei calcolatori, il tempo di accesso ad una memoria di massa come un hard disk(milioni di cicli).
Da questo fatto ci si è posti il dubbio (sulla base della legge di Amdahl deduco personalmente) se non fosse
stato meglio migliorare drasticamente il throughput del componente più lento (HDD) piuttosto che un
modesto sviluppo delle altre componenti già più veloci(CPU, RAM).
Negli ultimi 6/7 anni, si è assistito ad una ricerca ed uno sviluppo su scala industriale delle memorie FLASH,
capaci di essere cancellate/riscritte in più larghi blocchi e con una resa di produzione decisamente migliorata.
Molte aziende leader nel settore di mass storage( Samsung,Kingston, Western Digital) e anche famose
compagnie come la Intel, completamente estranee al mercato degli archivi di massa fino a qualche anno fa,
sono scese in campo con i loro prodotti. Si tratta di una fetta di mercato in continua crescita da vari anni, su
cui sono già stati investiti milioni di dollari e i ricavi sono in costante aumento.
Restano tuttavia dubbi legittimi sulla tecnologia attualmente impiegata,cioè sulla sua effettiva
convenienza e persino sulla sua affidabilità, ma personalmente ritengo doveroso approfondire non
una innovazione ( si parla di tecnologia risalente agli anni Ottanta) ma una coraggiosa (o
azzardata ?) implementazione in un settore che non vede sostanziali cambiamenti da decine di
anni.
I limiti ( e i pregi) degli hard disk tradizionali
Come già accennato prima, un normale hard disk è lentissimo rispetto alla memoria centrale:
ciò è dovuto al metodo di ricerca, lettura e scrittura dati; tutto avviene tramite una testina operazionale e un
insieme di piatti cilindrici collegati ad un motore elettrico che mette in rotazione i suddetti piatti, coperti di
un materiale magnetico-sensibile (ossido di ferro in quelli più datati, un composto del cobalto in quelli
moderni) capace di disporsi secondo le linee di un campo magnetico. Il principio fisico è lo stesso sfruttato
per allineare l'ago bussola, l'unica differenza è che il campo magnetico è creato artificialmente dalla testina.
Infatti, per la legge di Biot-Savart, si crea un campo magnetico proporzionale alla corrente che circola nella
testina, allineando in modo permanente le particelle metalliche in un determinato verso, a seconda del verso
percorso dalla corrente. Quando viene spento il sistema, si mantiene quindi traccia delle scritture effettuate.
Per realizzare questo però bisogna che:
-) Il piatto sia in movimento, altrimenti i granuli sono insensibili al campo magnetico;
-) La testina resti staccata dal piatto, altrimenti si causerebbe un corto circuito tra testina e piatto, bruciando il
film di materiale magnetico e distruggendo così i dati memorizzati.
Per la lettura dei dati, l'hard disk riceve in input il nome logico del file da leggere e il driver della periferica
imposta tramite il controller hardware la posizione della testina e la velocità di rotazione del disco, ed
usando il principio inverso a Biot-Savart (legge di Faraday-Lenz) il piatto magnetizzato che ruota genera
nella testina correnti parassite in versi alternati , in base a come sono orientate le particelle magnetiche sulla
superficie. Spetta poi al controller tradurre queste correnti opposte in segnali numerici di tipo binario,
creando così sequenze di bit, byte, e così via.
Si nota fin da subito che i dischi devono seguire le leggi della meccanica rotazionale, costringendo la testina
ad un continuo movimento avanti e indietro i settori del disco. Questo fatto causa sempre un ritardo iniziale
di seek. Se i più avanzati hard disk in ambiente server raggiungono soli 4 millisecondi di seek time, una
media veritiera varia da 10 ai 25 ms in lettura, e dai 3 ai 15 ms per le scritture.
Se poi i dati, a causa di cancellazioni da parte dell'host (SO o utente) , diventano FRAMMENTATI,
cioè dispersi su più settori e/o tracce e/o cilindri, il tipo di accesso è penalizzato ulteriormente da
maggiori tempi di seek, come in una gestione di dati memorizzati in modo random(la peggiore
possibile).
Da qui l'esigenza di eseguire più o meno spesso(a seconda della disposizione dei dati) task di
deframmentazione da parte del'host per mantenere bassi tempi di accesso ai file.
Inoltre, ammesso che i dati siano deframmentati, sarà sempre più lento accedere ai dati posti sui settori più
interni, dato che il loro numero è diminuito da circonferenze più corte, essendo più vicini all'asse di
rotazione.
Altro aspetto da notare, in situazioni di continuo accesso al disco, il sistema è sottoposto a maggiore stress
meccanico, aumentando inesorabilmente l'usura complessiva.
Un altro fattore penalizzante, almeno in ambiente mobile, è il maggiore consumo energetico ( fino a 13 watt
per alcuni modelli) e un maggiore attenzione per la protezione da urti e shock( infatti la testina collassa sui
piatti se deve assorbire un urto eccessivamente violento,).
Detto questo, bisogna però far notare la loro capacità di mantenere i dati memorizzati per lunghissimi
periodi di tempo(si parla di centinaia di anni ) e la possibilità di scrivere e riscrivere infinite volte dati
sullo stesso settore o traccia; in caso di eliminazioni, il settore viene semplicemente marcato come
deallocato e verrà eventualmente riscritto in future operazioni da parte dell'host.
in caso di rottura della testina, basta sostituire solo le parti interessate e i dati sono salvaguardati(ma
non se vengono danneggiati I piatti magnetici). Un altro fattore che ne ha decretato il successo, è il
loro rapporto costo/gigabyte molto basso, insieme alla stima del loro Mean time between Failures
variabile dalle 300 000 alle 500 000 ore.
Questi aspetti rendono tutt'oggi gli hard disk la periferica di archivio di massa più usata al mondo.
Analizziamo ora dal punto di vista hardware una cella di memoria NAND FLASH, l'unità basilare
memorizzazione in un attuale SSD.
La cellula dell' SSD, la memoria NAND FLASH
Per memorizzare l'unità di informazione digitale, cioè il bit, si può anche usare un tipo particolare di
EEPROM, una memoria FLASH-MOSFET (metal oxide semiconductor field effect transistor):
La struttura è simile al classico transistor MOS np , con un canale di ingresso e uno di uscita, il tutto
controllato da un control gate, ma in aggiunta abbiamo un floating gate, isolato elettricamente tramite un
strato di dielettrico, nel quale viene impostato un flusso di elettroni attivando il transistor.
La memoria flash è costituita da un array di transistor MOS che agiscono come interruttori, permettendo il
flusso di corrente o di bloccarlo. Il livello di tensione necessario per attivare il transistor è detto “tensione di
soglia” e consente al flusso di corrente di scorrere nel floating gate e di immagazzinare elettroni.
In altre parole, se la tensione di soglia è inferiore alla tensione di gate, la cella è "attivata" e permette il flusso
di elettroni ( viene memorizzato 1) altrimenti se la tensione di soglia è abbastanza alta in modo che la
tensione di gate non va al disopra di esso,allora la cella è considerata spenta e nessuna corrente può scorrere
( resta memorizzato 0). Il meccanismo effettivo di programmazione di ogni cella di memoria flash è
di applicare una tensione alla porta superiore(il top gate del MOSFET). Tale tensione attira
elettroni dal cancello attraverso il dielettrico nel floating gate, alterando così la tensione di soglia.
Questo processo è chiamato quantum tunneling meccanico, e permette in pratica di immagazzinare
elettroni nello strato di dielettrico che circonda il floating gate
Se si inverte il processo per scrivere, è necessaria l'applicazione di alta tensione al substrato per
rimuovere gli elettroni dal floating gate. Non vi è tuttavia alcuna capacità di diretto controllo per
applicare la tensione per cancellare una sola porta, quindi, è necessario applicare il procedimento ad
un intero blocco . Da qui , si spiega perché una memoria NAND flash per essere programmata
(scritta)deve essere prima impostata di nuovo ad "1" , dovendo quindi cancellare l'intero
blocco. Ciò le impedisce di essere in grado di sovrascrivere i suoi dati, che invece,devono
essere salvati in un'altra posizione per poi essere riscritti insieme alle modifiche.
Attenzione però: non tutte le memorie FLASH sono uguali. Oltre ai tipi NOR ( impiegate oggi soprattutto
nella memorizzazione del BIOS del calcolatore, data la loro affidabilità nel tempo), esistono NAND con
celle a singolo livello di soglia ( SLC ) e NAND a multi livello (MLC).
La differenza è la quantità di informazioni immagazzinabili: infatti una cella SLC permette di impostare gli
elettroni con una sola soglia di voltaggio, quindi si potrà memorizzare solo 1 bit ( 1/0).
Una cella multi livello invece ha 4 o più possibili configurazioni logiche ( 00 01 10 11) consentendo quindi
di raddoppiare i bit memorizzati ( 2).
Di conseguenza, si ha bisogno di quattro(oppure 8) celle per definire un Byte.
A causa delle diverse soglie di tensione da attivare, il tempo di lettura in una cella MLC è sensibilmente
superiore ad una cella a singolo livello( 25 µs contro 50 µs), come pure il tempo di programmazione, cioè
scrittura (250 µs contro 900 µs ). Ma il fattore più penalizzante è il limitato numero di operazioni di
riscrittura(riprogrammazione): purtroppo un handicap intrinseco alla memoria flash è la loro limitata
capacità di riscrittura: a causa delle forti differenze di potenziale nel floating gate e nell'ossido che lo
circonda, il degrado fisico che avviene al loro interno nel corso del loro impiego non permette, ad un
certo punto, più alcuna riscrittura.
Cella NAND degradata a ROM: gli elettroni sono intrappolati nel substrato esterno, e non è
più possibile riprogrammare la cella rimuovendoli.
Parlando della loro struttura su chip, le celle MLC sono accoppiate normalmente su array di 32 elementi,
formando così “word” di 8 byte fino a formare l'unità logica di memorizzazione della memoria, la PAGINA.
Di solito la dimensione di una pagina è fissata a 4kB, quindi sono necessarie 2^14 (16384) celle NAND
MLC (oppure 32768 nel caso di memoria SLC). Questa è la più piccola unità di spazio scrivibile/leggibile
singolarmente. Più pagine sono quindi associate tra loro fino a formare un BLOCCO, corrispondente a
128 pagine, occupando quindi 512kB.
I blocchi sono poi ripetuti in gruppi da 1024 per formare piani , I quali al loro volta sono ripetuti fino
a saturare il wafer; aggiungendo infine i dispositivi di I/O col controller, con I regolatori di tensione si
ottiene alla fine il singolo chip ; attualmente si hanno chip con densità variabile da 8 a 128 Gbit.
Riassumendo il meccanismo di lettura/scrittura, s i possono quindi leggere o scrivere singole celle,
ma se bisogna sovrascrivere dati già esistenti si deve per forza riscrivere un intero blocco di
128 pagine
Chip di celle FLASH NAND in array; sulla sinistra è posto il circuito di controllo tensione e
trasmissione bit
Il cuore e la mente dell'SSD : il controller di memoria
Dopo aver analizzato la memoria, visto come è fatta e come può essere prodotta, i suoi pregi, limiti fisici e la
sua organizzazione logica, bisogna ora analizzare il centro operativo della periferica, il controller hardware
che gestisce i dati e tutte le loro operazioni di lettura e scrittura. Attraverso l'interfaccia standard con il
chipset della motherboard (generalmente SATA 3 Gb/s, ma esistono versioni basate su PCI express che
garantiscono maggiore banda passante fino a 10 Gb/s), il sistema/host chiede al controller di
leggere/scrivere dati: a questo punto il file system del sistema operativo viene “ingannato”, in quanto è il
controller a decidere dove scrivere i dati. Il SO crederà di doversi interfacciare con un normale Hard disk,
mantenendo veritiera la rappresentazione logica dei dati(tipo, nome, dimensione etc.) ma non il loro reale
indirizzo fisico sui chip, del quale spetta solo al controller decidere. Perché questo bypass? Per 2 motivi:
prestazioni ed affidabilità del supporto;
Il controller, gestito da un apposito driver (che può variare per ogni produttore), smista i pacchetti di bit in
ingresso non su un singolo canale come fa un hard disk (la testina è il solo canale di lettura/scrittura ), ma
facendo uno “split” dei byte su vari canali tanti quanti sono i chip di memoria NAND disponibili. Il motivo
della grande velocità di un SSD è dovuto a vari fattori: il più importante è senza dubbio l'uso di memoria
FLASH a basso tempo di accesso, come descritto pagine sopra. Un altro fattore è appunto questo, una
simulazione di RAID (redundant array of independent disks), ma interno alla periferica. Altra
differenza con I normali array di dischi, questo è composto da chips, tanto che sono stati proposti
nomi a questa implementazione, come RAISE (redundant array of independent silicon elements). Più
precisamente si tratterebbe di un RAID 5, in quanto su ogni chip viene effettuato il salvataggio dei dati
e dei relativi bit di controllo errore (ECC). La dimensione (stripe) di ogni pacchetto è variabile per
ogni controller. Grazie a questo sistema, si garantiscono le massime prestazioni per la periferica.
Un altro importante motivo per far gestire al controller la posizione fisica dei dati è il fattore di controllo
dell'usura (Wear levelling) : come già detto, la memoria NAND flash può sostenere un limitato numero di
cicli di riprogrammazione, prima di degradarsi a semplice ROM (Read Only Memory). É questo il destino di
ogni cella, ma per evitare che vengano scritte e riscritte solo una parte delle celle, diminuendo ulteriormente
la loro durata , il controller effettua una rotazione periodica delle scritture dati distribuendole a turno tra tutte
le celle a disposizione, non importa se libere o no. Ciò evita di perdere in anticipo porzioni utilizzabili di
memoria e vedere calare nel tempo il numero di canali di memoria utilizzabili in scrittura . Ovviamente
bisogna implementare tutto questo con un algoritmo che basandosi sulla mole di dati da scrivere, tenga
traccia dei dati più statici e li sposti tra le varie celle, consentendo un usura uniforme della memoria. Oltre a
queste fondamentali operazioni, il controller si occupa di tener traccia di eventuali pagine, blocchi o fogli
danneggiati e resi inutilizzabili, andandoli a sostituire con elementi provenienti da un area di memoria
inaccessibile per il SO e l'utente, la cosiddetta SPARE AREA. Questa sezione di memoria ( che può
variare dal 7 al 40 % dello spazio disponibile) viene usata come “riserva” di celle NAND nel caso in cui si
verifichi un prematuro esaurimento dei cicli di riscrittura di qualche blocco. Questa pratica prende il nome di
OVER PROVISIONING. Nel caso che tutte le celle siano scritte, e sia necessario modificare una pagina,in
mancanza di cache ad accesso veloce il contenuto del blocco viene dapprima salvato su una porzione di
spare area memory, ed infine riscritta con le relative modifiche.
Esistono molti tipi e produttori di controllers(Intel/Micron,Sandforce,Indilinx),ciascuno con il proprio
firmware, ma in genere si può considerare il seguente schema:
Un microprocessore con integrate RAM e ROM per le operazioni di avvio e tracciamento degli indirizzi
delle memorie NAND, una ALU a 32 bit e un bus interno per accedere all'interfaccia con l'input dei dati
(card interface) e con il canale di uscita dati verso le memorie; da notare il regolatore di tensione separato per
il controller e per le memorie flash, con 2 canali dedicati alla interfaccia con i chip di memoria (in questo
caso si ha un massimo di 16 chip), ed per ciascun canale è dedicato una scheda ECC di controllo errori di
codice.
Un controller Sandforce 1222
Schema logico di un generico controller per SSD
SSD Intel X-25 M senza involucro esterno: si notino i 10 chip di memoria FLASH a sinistra, il
controller al centro affiancato da un modulo di DRAM: È usata principalmente come una memoria
buffer per abbinare il flusso di dati per l'interfaccia I / O. Questa memoria può essere utilizzata
anche come una cache dei dati per migliorare le prestazioni complessive, o tenere traccia delle
scritture da effettuare, distribuendole su vari canali. A destra l'interfaccia SATA 2 (garantisce una
massima banda dati di 3 Gb/s ).
Write amplification
Dopo aver scoperto il modo particolare in cui si cancellano i dati sulle celle NAND, sorge
spontaneo un dubbio: come si comporta la periferica se tutte le pagine sono già stati scritte, sia
totalmente che no? Supponiamo di avere, durante l'utilizzo dell' SSD, già scritto tutti blocchi a
disposizione,alcuni con più dati e altri con meno: se ho un blocco con soli 256 kB di dati,qualora
volessi scrivere altri 256kB di dati su di esso(riempiendolo con un totale di 512 kB), il controller
deve compiere i seguenti step:
-) Leggere il blocco per intero; (256kB di dati)
-) Salvare i dati da qualche parte( DRAM del controller, spare area o altra area di memoria);
-) Modificare/aggiungere i nuovi dati operando su questo dato copiato ;
-) Eliminare i dati dal blocco da dove erano copiati in origine i dati (riprogrammare il blocco);
-) Copiare di nuovo i dati(write operation di 512kB, contenente I vecchi e I nuovi dati );
Se facciamo un veloce conto, ci accorgiamo che per scrivere solo 256 kB di dati , abbiamo dovuto
non solo effettuare una lettura extra(che logicamente non sarebbe comprensibile, se usassimo un
normale hard disk, ma data l'estrema velocità di lettura, il suo tempo di esecuzione è trascurabile),
ma anche riscritto un blocco intero con 512 kB! Il totale delle operazioni di I/O mostra quindi
256kB inviati dall'host ma 512 kB scritti. Questo overhead che tutti I controller devono affrontare
prende il nome di Write Amplification, un problema che contribuisce ad accorciare il tempo di
vita di ogni cella di memoria col passare del tempo e soprattutto con piccole scritture,minori delle
dimensioni di un blocco. Per calcolarla approssimativamente si usa la seguente formula :
Da qui si capisce che più I dati dell'host sono piccoli, più la write amplification aumenta, tenendo
fissa la quantità minima da riscrivere su un blocco di memoria. Nell'esempio precedente avevamo
un fattore di amplificazione pari a 2, ma può arrivare anche fino a 5.
L'ideale sarebbe un rapporto pari a 1, cioè per ogni byte da scrivere il controller scrive solo i nuovi
dati. Recentemente, alcuni controller (serie Sandforce) sono riusciti ad ottenere un fattore di write
amplification minore di 1 in certi casi di scrittura, comprimendo i dati grazie a speciali algoritmi.
Una notevole riduzione del problema è stata l'implementazione del comando TRIM, una
istruzione inviata dal sistema operativo all'SSD (ammesso che sia implementata e supportata da
entrambi ) qualora si decida di eliminare definitivamente un file; in tal caso il Sistema Operativo,
dopo aver aggiornato il file system, manderà tramite il protocollo SATA un avviso di notifica di
cancellazione dei file; il controller non si limiterà a deallocare logicamente lo spazio dove risiede il
file (come fanno I normali dischi rigidi), ma cancellerà in maniera forzata il blocco e lo
contrassegnerà come empty, permettendo così di evitare in futuro fenomeni ricorsivi di write
amplification qualora si debba riscrivere un blocco per mancanza di spazio. Tuttavia in caso di
modifica del file si avrà sempre una write amplification, non essendo possibile cancellarlo del tutto.
Anche nel caso siano presenti porzioni di altri file, sarà necessario dover salvare i loro frammenti e
poi riscriverli. È importante notare che esiste un collegamento diretto tra write amplification e
il coefficiente di spazio libero riservato al sistema (spare area): maggiore è quest'ultima,
minore sarà l'amplificazione. Inoltre un controller con un algoritmo di wear levelling sarà
avvantaggiato nel gestire pochi dati, facendoli riscrivere periodicamente su diversi blocchi; qualora
non siano presenti adeguati algoritmi per gestire molti dati statici, si dovrà per forza riscrivere sugli
stessi blocchi, causando una maggiore usura della memoria. Più il disco si riempie di dati, più
sarà difficile per il controller effettuare riscritture sui pochi blocchi disponili, dato che la
maggior parte sarà occupata. La dimensione della spare area è un fattore essenziale per
scongiurare rallentamenti durante le operazioni di riprogrammazione.
Algoritmo di Garbage Collection ( “ritiro della spazzatura”)
Per mantenere alte le performance in scrittura, il controller cerca sempre di scrivere su blocchi di
memoria ancora vergini. Qualora siano già stati tutti scritti, si dovrà dunque procedere per ogni
blocco all'overhead della write amplification. Prima del supporto software al comando TRIM, che
agisce istantaneamente al momento della cancellazione di un generico file, si sono adottate alcune
routine/script interni per il controller che cercavano di separare le pagine invalidate da quelle
ancora attive logicamente nel file system. Basandosi su un semplice algoritmo greedy, durante I
tempi di IDLE della periferica (cioè quando l'host non chiama la periferica) , si avvia il Garbage
collector; il controller legge il file system del SO ed analizza tutti i blocchi contenenti pagine
invalidate (cancellate dall'host ma ancora fisicamente presenti sull' SSD) e di essi ne sceglie il
blocco con il numero più alto. Seleziona quindi gli eventuali file nel blocco ancora
logicamente attivi, cioè presenti sul file system, e li riscrive su un altro blocco avente
abbastanza spazio libero per ospitarli. Il blocco scelto dal garbage collector viene così
cancellato totalmente e marcato come “empty”. Il blocco ripulito viene quindi rimesso nel
gruppo dei blocchi liberi. Questo sistema emula in certi aspetti il processo di consolidazione
presente sugli hard disk, deframmentando le pagine disperse su molti blocchi, riempiendo ogni
blocco disponibile senza lasciare pagine vuote e riducendo la probabilità di doverle in futuro
riscrivere durante operazioni di modifica causate dalla write amplification.
Questo tipo di algoritmo è il più semplice ed intuitivo per un controller. I dati vengono trattati allo
stesso livello e non esiste alcuna linea di demarcazione tra dati statici e dinamici. Alcuni algoritmi
più sofisticati tengono separati dati statici dai dati dinamici, evitando quindi una riallocazione utile
per questi ultimi.
Sebbene sia utile ad evitare rallentamenti in operazioni di scrittura, questo script causa un
aggravamento nell'usura della memoria FLASH, visto che si effettuano ulteriori scritture
collaterali non richieste dall'host per fini operativi.
Il tempo di vita previsto
Detto in modo diretto, non esiste un tempo minimo/massimo di vita per le memorie NAND:
Il fattore principale è la quantità di dati scritti: Un centro di calcolo o server commerciali che
effettuano enormi volumi (Gigabytes o Terabytes) di scritture al giorno saranno più veloci a
vedere esaurito il limite di cicli di lettura e scrittura rispetto a scritture sporadiche del disco, tipico
di una workstation. Da ricordare bene è il fatto che la tipologia SLC consente un numero maggiore
di cicli di cancellazione/scrittura (circa 100 000) mentre le MLC, a seconda della geometria di
fabbricazione adottata, variano tra 10 000 per geometria a 50 nm e 3000 per quella a 25 nm.
Ovviamente il costo per GB di una memoria SLC è nettamente superiore di quelle MLC, quindi il
loro impiego per grandi database comporta un costo abnorme rispetto alla media.
Si possono tuttavia fare previsioni basandosi su semplici calcoli: dato un disco da 30 GB( 30* 2^30
bytes) con una write amplification continua di 5 (caso peggiore) e una stima di 10^4 cicli di
cancellazione/scrittura(valore tipico delle memorie MLC) si ha a disposizione nel nostro caso
(30*2^30)*10^4 / 5= 64,4 Terabyte=64 400 Gigabyte ; A seconda della quantità e del tipo di
scritture, ciò può equivalere da poche a molte decine di anni, non esiste una regola certa.
Vorrei tuttavia smentire l'immaginario comune che vede I dischi a stato solido capaci di garantire
scritture solo per un breve arco di tempo. Dopo aver analizzato numerosi test statistici, si è
calcolato che il 95 % degli utenti client workstation effettuano scritture inferiori a 5 GB di dati al
giorno; ciò si traduce in una vita media intorno ai 35 ANNI nel caso riportato sopra. Sapendo la
stima delle scritture effettuate dall'host, si può decidere di conseguenza se impiegare memorie
SLC o MLC. Tuttavia sappiamo con certezza che la geometria delle memorie influisce
direttamente sul numero di cicli disponibili di cancellazione/scrittura; infatti una pratica comune
nell'evoluzione delle tecnologie elettroniche è la SCALARIZZAZIONE, cioè il rimpicciolimento
sul wafer si silicio dei transistor fabbricati. Finora ogni scalarizzazione aveva portato sempre
benefici nella affidabilità e nel costo al componente (si pensi alla storia delle CPU) ma in questa
situazione bisogna riflettere un attimo: se si considera il funzionamento della memoria flash(il
floating gate, il dielettrico etc.) si nota che un rimpicciolimento delle dimensioni crea seri problemi
di funzionamento al transistor, causando una usura più veloce (data dal minor spessore) allo strato
di ossido che circonda il floating gate. Ciò si traduce ai fini pratici in una MINORE LONGEVITÀ
nei cicli di cancellazione e scrittura ma non solo, anche un aumento del rischio di errori durante
la scrittura dei dati.
Sebbene questo processo abbassi l'affidabilità di ogni tipo di memoria FLASH, le memorie
MLC sono maggiormente influenzate da questa miniaturizzazione, diventando più suscettibili
ad errori nella scrittura dati (è più complicato spostare / rimuovere elettroni dal floating
gate) rispetto alle più semplici memorie SLC.
Più si avanza nello scaling, più diventa necessario riservare sempre maggiore spazio a codice di
correzione errore ECC; proprio per questo si sta cominciando a considerare l'impiego di tecnologie
alternative alle FLASH ( memorie FeRAM / MRAM), ma servirà un dispendio di risorse enorme e
nessuno sembra disposto a finanziare ulteriori investimenti di produzione con nuove tecnologie,
visto che si sta ancora investendo nel settore NAND ( sono state create joint-venture tra colossi di
ricerca del settore, come Intel e Micron, ed è stato fondato un consorzio per la standardizzazione
delle NAND flash , l'ONFI (Open NAND Flash Interface ).
I Vantaggi di un SSD
-)Maggior throughput, maggiore resistenza meccanica
(affidabilità), nessun rumore,minor consumo energetico
Come immaginabile dall'analisi effettuata finora, la mancanza di parti mobili/meccaniche, un
accesso alla memoria di tipo diretto e un controller con buoni algoritmi operativi permettono agli
SSD di ECCELLERE in ogni tipo di benchmark reale o sintetico su ogni tipo di task immaginabile.
Come confronto, ho testato con tool di benchmark diversi un SSD di fascia mainstream (Intel X25
M con memorie FLASH MLC a 34 nm, 10 canali di scrittura) ed un Hard disk di ultima
generazione per portatili, (Seagate Momentus 7200 rpm cioè può arrivare a 120 GIRI AL
SECONDO, con 16 MB di cache interna). Un confronto importante è la capacità di trasferimento
dati, ovvero la quantità di byte trasferibili in un secondo verso l'host.
Dai dati si evince che l'hard disk riesce a trasferire durante una operazione di lettura( o scrittura)
quantità di byte differenti nella stessa unità di tempo a seconda del tipo di file da leggere: Il
massimo streaming si raggiunge per lettura e scrittura di file sequenziali (ipotetici file di dimensione
infinita), dove basta solo una seek da parte della testina ed il flusso di bit è continuo senza
interruzioni, con un massimo di 90/100 MB, a seconda della loro posizione sui piatti.
Il rendimento cala drasticamente qualora si debbano leggere o scrivere pezzi casualmente
scelti di file più piccoli (dimensione fissate a 4 e 512 kB in questo caso)contemporaneamente in un
secondo:
a causa dei molteplici riposizionamenti da parte della testina,la quantità di dati letti/scritti
diminuisce di circa di 2/3 in lettura, e della metà in scrittura.
Peggio ancora nel caso di letture/scritture random di 4kB(di solito la più piccola quantità di dati
leggibile/scrivibile singolarmente, ma l'implementazione di cache veloci integrate nell'hard disk
permette di evitare singole operazioni di input /output su file così piccoli,evitando scritture dirette).
Il tempo medio di accesso varia notevolmente poi tra le letture e scritture, in un intervallo che va dai
4/5 fino a latenze di 17 ms . Sebbene esistano modelli con velocità di 10 000 rpm e oltre ,
l'aumento in prestazioni non è sempre lineare all'aumentare della velocità rotazionale.
Analizzando ora il benchmark dell' SSD Intel, si nota un incredibile incremento nelle letture e
nelle scritture , sia per le sequenziali che le random(4kB), nonché il minor tempo di accesso;
Ricordando la legge
di Amdahl
Speed Up =
1
____________________
(1-Fenh)+ Fenh/Senh
Seppur il Fenh( fraction time enhanced)sia variabile a seconda dei task eseguiti dall'host ,è stato
dimostrato che un SSD non subisce rallentamenti nel tempo per quanto riguarda le operazioni di
lettura, mantenendo sempre alte le sue performance operative mentre un hard disk può
frammentare i dati nel corso del suo utilizzo e abbassare ulteriormente le prestazioni. Il
miglioramento relativo della periferica sarà dato quindi dal rapporto tra le loro prestazioni indicato
con Senh . Bisogna poi analizzare quanto questo miglioramento possa influire sul sistema.
Il “Senh” della periferica varia IN QUESTO ESEMPIO da 1,83 (255 MB/s - 90 MB/s)/90
MB/s = 1,83) ad un incredibile fattore di 49 [ (25 MB/s-0.5 MB/s)/0.5 MB/S=49 ] nella lettura
di file da 4 kB.
La situazione cambia analizzando lo speed up in scrittura: a causa della write amplification è
difficile calcolare con esattezza il miglioramento preciso nel tempo.
Inizialmente, con memorie vuote, basterà solo scrivere i dati effettivi, ma una volta saturate di bit
tutti I blocchi, si vedrà un calo più o meno contenuto delle velocità di scrittura sequenziale, dovendo
il controller effettuare per ogni blocco dati la routine lettura-copia-riscrittura già analizzata in
precedenza; il supporto al comando di sistema TRIM permette di risolvere questo problema solo in
caso di cancellazione di un dato che NON condivide il blocco con altri dati, cioè è il solo
utilizzatore del blocco. Altrimenti il controller sarà costretto a riscrivere l'altro dato presente seppur
parzialmente nel blocco. Da questa nota si deduce che il peggior nemico di un SSD, in termini di
efficienza in scrittura, sono i dati di piccole dimensioni, che si frammentano e disperdono su tutte le
pagine di memoria di vari blocchi, costringendo il controller ad impostare come "occupato" un
blocco scritto anche solo da una sola pagina di dati (questo teoricamente parlando, attualmente le
gestioni del controller garantiscono di sequenzializzare il più possibile i dati più piccoli,
"accodandoli" in code (queue) di lunghezza variabile.
I benchmark in scrittura SEQUENZIALE di un SSD sono dunque variabili a seconda dei casi, con
alcuni SSD capaci di arrivare a 260 MB/s per scritture sequenziali in certi controller (Sandforce
1500 con 16 canali di memoria e geometria a 32 nm), e degradando in casi di geometria NAND ad
alta scalarizzazione ed un basso numero di canali di memoria a disposizione fino a 35 MB/s
( stesso controller sandforce 1500 ma con solo 8 dei canali disponibili in scrittura e con geometria
a 25 nm).
Un hard disk di alto livello garantisce scritture sequenziali migliori in alcuni casi rispetto a
SSD aventi pochi canali disponibili per le operazioni con il controller.(Questo spiega perché
SSD con capacità maggiori, e quindi un numero maggiore di chip, ottengono risultati migliori
in scrittura sequenziale). Da segnalare che i dischi con memorie SLC risentono in misura
molto minore di questo problema, dato il loro bassissimo tempo fisico di riscrittura.
Guardando in maniera globale la situazione però, il confronto tende sempre a favore degli
SSD, in quanto scritture di file piccoli (512kB, 4kB) vengono effettuate con maggior velocità
di un Hard Disk in ogni caso, sia in condizioni favorevoli oppure no, poiché risultano
maggiormente penalizzanti i problemi di lentezza meccanica (seek -scritturariposizionamento) di un generico Hard disk che una write amplification limitata a pochi
blocchi.
Detto questo, è innegabile inoltre la maggiore prontezza di risposta: non essendoci testina o
parti mobili, l'indirizzo dei dati è tenuto in memoria dal controller, che accede direttamente
ad essi senza alcun bisogno di tempi morti di rotazione; il tutto si traduce in tempi di accesso
medio nell'ordine dei 0,1/0,2 MILLISECONDI, invece dei 4/5 del migliore degli hard disk.
Per rendere chiaro il loro potenziale, spesso si confrontano dischi rigidi basandosi sul numero di
operazioni di INPUT/OUTPUT al secondo: soprattutto in ambito server, dove potrebbero arrivare
centinaia o migliaia di richieste di accesso ai dati su disco, è importante evitare code nel traffico
dati. Un normale hard disk permette un numero di operazioni di I/O al secondo nell'ordine delle
centinaia, mentre un SSD ne può gestire MIGLIAIA:
Altro aspetto vantaggioso, la già citata mancanza di parti mobili migliora l'affidabilità nel
tempo e allunga il MTBF fino a livelli di 1 milione di ore. In caso di urti o cadute accidentali,
seppur plausibili nel solo ambiente mobile, si abbassa il rischio di perdere i dati memorizzati.
Il motivo più frequente di fallimento nel trasferimento o nelle operazioni di dati è da imputare
ad errori software nel firmware del controller, piuttosto che alla rottura di qualche
componente elettronico.
Un ulteriore innovazione per ogni sistema che adotta un SSD è il ridotto consumo energetico, sia in
stand-by che a regime( si parla di consumi di 1-2 watt a pieno carico) contro i normali 6-10 watt
di un hard disk ad alta velocità. Da questo fattore risultano avvantaggiati in modo particolare I
dispositivi portatili. Nel mio caso, togliendo il normale disco rigido, ho constato un allungamento
della durata della batteria di circa 15-20 minuti.
Per finire, il livello di rumorosità e di vibrazioni è praticamente nullo, data l'assenza di dischi in
rotazione.
Gli svantaggi di un SSD
-) Limitata quantità di dati scrivibili, a causa dei limiti fisici delle memorie NAND(grandi
quantità di scritture o peggio ancora, grandi quantità di piccole scritture diminuiscono
drasticamente questo potenziale di scrittura);
-) Write amplification che causa un più veloce consumo dei cicli di cancellazione/scrittura
rispetto a quelli necessari, ed un calo VARIABILE dell'efficienza nelle scritture con molte
scritture di piccola dimensione. La presenza di un buon algoritmo di wear levelling ed il supporto
al comando TRIM tuttavia mitigano questo effetto collaterale, abbassandolo ad un fattore prossimo
ad 1 o anche meno in certi casi speciali.
-) Alto costo di fabbricazione rispetto agli hard disk, con un aumento del prezzo nell'ordine di
un fattore 10 per le memorie più avanzate (SLC). Per le memorie MLC, prima della loro
fabbricazione in massa, si pagava fino a 100 $ per gigabyte alla fine del 2004,passando nel 2009 a
circa 4 $/gigabyte(Intel x25 g1, memorie a 50 namometri), e arrivando negli ultimi mesi a circa 1,5
$ per gigabyte ( memorie a 25 nm);
I normali hard disk restano ancora i maggiori protagonisti sul mercato per la convenienza, con un
prezzo intorno ai 0,2/0,3 $ al gigabyte;
-) Anche se basati sulla stessa tecnologia di memorie, due SSD differenti possono essere molto
differenti nei benchmarks, a seconda del modello di controller impiegato e del tipo di
firmware adottato. ( Si veda il benchmark di I/O a pag 13)
Lo Short Stroking : come migliorare il troughput di un HDD
Se la ricerca nel settore SSD non conosce sosta, anche sui normali hard disk si è cercato di
migliorare le performance; una particolare procedura, lo short stroking, consente di ridurre il
numero di tracce e settori logici riconosciuti dal driver di un hard disk, riducendo quindi lo spazio
logico totalmente disponibile. Perchè fare questo? Se si sceglie di usare solamente I settori più
esterni di un piatto, la testina dovrà effettuare molti meno riposizionamenti, rimanendo sulle tracce
più esterne che consentono di immagazzinare più dati e in modo più veloce rispetto ai settori più
interni.
Sono stati già implementati esempi di short stroking su alcuni esemplari dalla Hitachi,come
l'ultrastar 15k450.
Lo speed up ottenuto è innegabile, riuscendo ad abbattere I tempi medi di seek di circa il 40%,
ma restando ancora lontani dai tempi di accesso di un SSD. Anche il numero di operazioni di
Input/Output ed il throughput medio risultano migliorati fino al 60% ,ed in alcune
configurazioni in RAID 0 con array di 4 dischi sorpassano gli SSD,ma a che prezzo? Per
avere miglioramenti tangibili, bisogna riformattare capacità di 450 GB fino a 20 GB, uno
spreco notevole che sacrifica circa il 95 % di spazio disponibile.
Se si vuole restare a pari livello di un SSD in ambito server, dove è importante anche la capacità
dati a disposizione, bisogna creare RAID da 4 o più elementi per avere poi le stesse dimensioni di
un SSD singolo. Se invece si volesse pensare di implementare lo short stroking in ambiente mobile
o workstation, sarebbe impossibile data la mancanza di spazio per impostare la configurazione
RAID di molti dischi . Ovviamente come effetto domino, il consumo totale di energia raddoppia o
quadruplica di conseguenza.
Oltre a questa particolare strategia, sono stati progettati hard disk “ibridi”, dotati cioè del
tradizionale disco magnetico e di una memoria flash della dimensione di alcuni Gigabyte;
sebbene sia stato possibile migliorare alcuni fattori come il tempo di accesso, è risultato molto
complesso decidere quali dati andassero indicizzati e posti sulla memoria FLASH più veloce; alla
fine, si è potuto considerare questa soluzione solo come un' estensione nella gestione della cache
interna. L'host non è in grado di decidere la posizione fisica dei file, come quelli di sistema, quindi
si dovrebbe creare un driver molto più complesso di quello dei controller SSD capace di gestire
autonomamente dove posizionare file, quali tenere su memoria flash e quali su disco magnetico,
gestire il wear levelling e molto altro. Risulta quindi che gli sviluppi sul classico modello di hard
disk, puro o ibrido,sono ad un punto di stasi.
Conclusioni e previsioni sul futuro
Se la prima generazione di SSD ha mostrato effetti collaterali marcati come una eccessiva write
amplification, lo sviluppo e la ricerca ininterrotta nel settore hanno permesso di ottenere prodotti
maturi già da molti mesi, migliorando attraverso continui aggiornamenti del driver dei controller
l'affidabilità e il valore della periferica. Tuttavia si sta ancora cercando di minimizzare
inconvenienti come il numero limitato di riscritture, che i normali hard disk non hanno.
Se per un ambiente workstation un hard disk è ancora sinonimo di un ottimo rapporto tra prestazioni
e convenienza,soprattutto se sono necessari grandi volumi di archiviazione, le prospettive
cambiano per un ambiente server, dove è necessario minimizzare tutti I rallentamenti nel
trasferimento dati. Investendo risorse extra nell'uso di memorie SLC si avrà un costo iniziale
maggiore che però sarà ricompensato nel lungo termine con performance superiori ed ammortizzato
da un consumo minore di energia (sia quella consumata direttamente per alimentare il disco come
anche quella per raffreddare il sistema).
Nel 2008 uno studio McKinsey & Company ha stabilito che i data center del mondo consumano lo
0,5% dell'energia disponibile globalmente, e causano più emissioni nocive di tutta l'Argentina.
Tutto questo, abbinato al sempre maggior accesso a servizi web basati su grandi database, getta una
luce sui vantaggi di SSD applicati ad ambienti enterprise.
Purtroppo la diffusione degli SSD in ambiente da workstation è ancora prossima allo zero. Meno
del 2 % dei dischi rigidi venduti è basato su memoria flash. Lo sbocco produttivo per tali memorie
restano periferiche di archivio rimovibili USB o dispositivi embedded come telefoni cellulari o
palmari.
Nelle scorse settimane si è assistito all'introduzione della nuova interfaccia SATA 3.0 capace di
garantire una banda passante di 6 Gbit per secondo, il doppio dell'attuale standard. Grazie a ciò, sarà
possibile per le nuove generazioni di SSD già in commercio di sfruttare al massimo il loro
potenziale.
Lo svantaggio maggiore nel passare alla tecnologia FLASH resta il costo iniziale elevato per unità
di spazio ma come opinione personale, ritengo che sia solo questione di tempo prima che gli SSD
sostituiscano i comuni hard disk, sebbene siano attualmente una delle più longeve ed affidabili
tecnologie di archivio di massa. Molti ricercatori stanno già guardando alle memorie FLASH come
un nuovo gradino nella gerarchia delle memorie.
Fonti dati internet
www.anandtech.com
http://www.lostcircuits.com/mambo//index.php?
option=com_content&task=view&id=69&Itemid=1
www.tomshardware.com
http://www.storagereview.com/ssd_controller
http://www.computerworld.com/s/article/9132668/Analysis_SSD_performance_is_a_slowdown_inevitabl
e_
Bibliografia ufficiale
Write Amplification Analysis in Flash-Based Solid State Drives
Xiao-Yu Hu, Evangelos Eleftheriou, Robert Haas, Ilias Iliadis, Roman Pletka IBM Zurich Research Laboratory
The Performance of PC Solid-State Disks (SSDs) as a Function of Bandwidth, Concurrency, Device Architecture, and
System Organization - Cagdas Dirik and Bruce Jacob
Improving NAND Flash Based Disk Caches - Taeho Kgil David Roberts Trevor Mudge
Write Endurance in Flash Drives: Measurements and Analysis -
Simona Boboila Peter Desnoyers
hybridFS: Integrating NAND Flash-Based SSD and HDD for Hybrid File System - Jinsun Suk and Jaechun No
FlashSim: A Simulator for NAND Flash-based Solid-State Drives - Youngjae Kim Brendan Tauras Aayush Gupta
Bhuvan Urgaonkar
A Methodology for Extracting Performance Parameters in Solid State Disks (SSDs) - Jae-Hong Kim, Dawoon Jung
Jin-Soo Kim Jaehyuk Huh
Performance Analysis of NAND Flash Memory Solid-State Disks - Cagdas Dirik
Write Amplification Reduction in NAND Flash through Multi-Write Coding
Ashish Jagmohan, Michele Franceschini, Luis Lastras
Lotti Francesco
Università degli studi di Modena e Reggio Emilia
Corso di laurea in Ingegneria Informatica