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