Minimizzare la latenza in fase di scrittura con il comando TRIM
Il problema relativo alla complessita della fase di scrittura, dovuta alla necessita
della cancellazione fisica delle celle da
aggiornare, può essere meglio compreso ove si consideri che la struttura portante della memoria flash di un
drive SSD è schematizzabile come un array o, se lo si
preferisce, come un puzzle regolare composto da blocchi (dall'inglese block, un esempio è visualizzato nell'immagine che segue), o celle, i quali al loro interno sono suddivisibili in 64
pagine (dall'inglese page, sono colorate di verde nell'immagine che segue): nel caso tipico in
cui la capacità di memorizzazione di una pagina è pari a 4KB, la capacità di un blocco è evidentemente pari a 256KB.
Rappresentazione concettuale di un blocco costituito da 64 pagine
Dal momento che il blocco è l’unità elementare del drive SSD dal punto di vista della cancellazione dei dati, e quindi sia che sia
necessario cancellare una pagina che tutte le 64 costituenti un blocco, il controller
deve gestire tutto il blocco: in particolare quest’ultimo, che in
generale include pagine con dati da cancellare poiché inutilizzati e pagine con dati ancora in uso, viene copiato in una memoria cache dove viene effettuata
la cancellazione delle pagine candidate. Successivamente, l’intero blocco viene ricopiato dalla cache alla memoria flash utilizzata dal Sistema Operativo
per il tramite del controller SSD e le sue pagine ripulite sono pronte per
essere eventualmente oggetto di una operazione scrittura.
E’ chiaro che questo processo è di per se complesso e diviene causa di inefficienza se avviato nell’ambito di una operazione di
riscrittura poichè la loro combinazione da origine ad un ciclo di read-erase-modify-write. L’esigenza di minimizzare tale inefficienza è alla base dell’idea implementata con il comando TRIM:
quest'ultimo richiede evidentemente per la sua
applicazione la presenza di un OS in grado di inviarlo e di un SSD dotato di un firmware che possa riceverlo ed eseguirlo con l’ausilio del controller.
Con il comando TRIM il concetto di dato cancellato non è più
relativo soltanto al livello logico - il Sistema Operativo marca i
blocchi come cancellati ed in quanto tali non li utilizza più - ma anche a quello
fisico, dal momento l’operazione di cancellazione di un file da parte del SO
non ha come effetto il solo marcaggio di aree di memoria come "non più in
uso" ma anche l’invio di una richiesta al controller mirata a cancellare
fisicamente i file rimossi dal cestino di Windows o eliminati in un singolo step.
Il controller esegue il comando TRIM esattamente come la prima parte dell’operazione di scrittura: indipendentemente dal numero di
pagine del blocco da cancellare, quest’ultimo viene copiato in cache, dove la cancellazione viene realmente eseguita prima dello step finale, coincidente con
la copia nella memoria flash del blocco, o del set di blocchi, modificato in quanto privo dei dati inutilizzati.
Una operazione di riscrittura a valle del comando TRIM è notevolmente più veloce poiché non deve essere preceduta da quella di
cancellazione, che è stata eseguita in precedenza. Nell’ottica di minimizzare la latenza dei tempi di scrittura di un SSD privo di blocchi vergini,
l’overhead introdotto in fase di cancellazione del file è nettamente inferiore a quello richiesto dalla complessità del ciclo di read-erase-modify-write
illustrato in precedenza.
Il comando TRIM impone non soltanto la compatibilità dell’hardware (SSD) e del suo software built-in (firmware) ma anche quella del
Sistema Operativo. Windows 7 e Windows Server 2008 R2 di Microsoft sono
gli unici ambienti commerciali che supportano ad oggi questa tecnologia. Nel mondo Linux
è sostanzialmente in corso l’implementazione del comando TRIM, che è stata avviata con il core Linux 2.6.28 ma che
tuttora non è stata
completata.
Nel chiudere la presentazione del comando TRIM è utile sottolineare la distinzione di questo da un qualsiasi comando di tipo reset
dell’SSD, essendo quest’ultimo mirato a ripristinare lo stato predeterminato di tutti i blocchi del disco, determinando quindi la completa perdita dei dati
utili se presenti, e il primo finalizzato a cancellare a livello fisico soltanto i file rimossi dal Sistema
Operativo, sincronizzando quindi la vista del
file system a livello logico con quella dello stesso a livello hardware.
Collegamenti