Nei processi di analisi e design di nuovi datacenter e servizi, è importante tener conto di potenziali cambiamenti a breve termine che potrebbero invalidare scelte che storicamente si sono rivelate fruttuose.
Di seguito spieghiamo perché alla luce dell’evoluzione tecnica che c’è stata in questi anni.
L’evoluzione dei sottosistemi di un computer
L’architettura dei computer, siano essi PC o server, si è definita a cavallo tra gli anni ‘80 e gli anni ‘90 con il graduale affermarsi della piattaforma dei processori x86. L’evoluzione dei sistemi è stata straordinaria e le capacità computazionale dei sistemi di calcolo è cresciuta esponenzialmente portando i sistemi ad essere vari ordini di grandezza più efficienti e capaci rispetto a quelli originali. È così che nelle specifiche i megahertz sono divenuti gigahertz, i kilobyte prima megabyte, poi gigabyte, poi terabyte e adesso capita di dover capire quanti byte sono presenti in uno zettabyte contando un numero spropositato di zeri.
I componenti architetturali del sistema sono rimasti largamente gli stessi: 1, 2 o 4 CPU, la RAM, i dischi e la scheda di rete. In particolare, i rapporti di efficienza all’interno del sistema sono stati abbastanza stabili nel corso di quasi quattro decenni: il disco è il componente più lento del sistema, centinaia di migliaia di volte più lento della memoria RAM a causa della differenza tra la rapidità offerta dalle tecnologie a stato solido e quella delle tecnologie meccaniche. Per questo motivo abbiamo imparato che il tempo di risposta di un disco rotativo dipende dalla velocità di rotazione dei suoi dischi e dalla velocità di spostamento della testina, e che se deframmentiamo il suo contenuto il sistema sarà più reattivo poiché le informazioni fluiranno più rapidamente verso il processore e la memoria.
Se osserviamo l’evoluzione dei processori e dei dischi a partire dal 1990 è evidente come i rapporti di forza all’interno siano cambiati e l’evoluzione di sottosistemi di un computer abbia seguito percorsi con diverse velocità. In figura si può facilmente vedere come la prima caratteristica che è stata sviluppata sia stata la frequenza del processore che rapidamente ha raggiunto i circa 3GHz che oggi conosciamo; successivamente l’introduzione di più core all’interno di una CPU ha consentito di sviluppare ulteriormente l’efficienza del calcolo. Per quanto riguarda i dischi, sia in termini di capacità che di velocità lo sviluppo più significativo si è concentrato negli ultimi 5 anni.
Sebbene i dischi a stato solido hanno quasi 40 anni e la tecnologia flash per i dischi risalga al 1980, gli SSD hanno superato negli ultimi anni i limiti che li rendevano non completamente confrontabili con i dischi meccanici in termini di capacità, affidabilità e durata di esercizio. Oggi il disco di avvio di un sistema di norma è su tecnologia a stato solido e tutti noi abbiamo dato il benvenuto a sistemi più reattivi senza realmente percepire l’inizio di un cambiamento molto più grande di cui si vedono solo i primi passi.
Il disco e la barriera del controllore
Nell’architettura tradizionale del PC i dischi sono connessi alla scheda madre attraverso il controller del disco, una scheda responsabile per interfacciare uno o più dischi al sistema. Gli standard più diffusi oggi sono SATA e SAS, il primo, evoluzione del più vecchio ATA, è molto diffuso nel mondo dei PC desktop mentre il secondo, derivato dal più pregiato SCSI, è spesso utilizzato all’interno dei server grazie alle performance superiori.
Come tutti i componenti di un sistema, un controller ha una capacità massima di trasferimento dati (banda), e la banda tipica dei controller odierni si spinge fino a 12Gbps (ovvero 12 Giga bit per secondo ovverosia 1,5GB/s). Per dischi tradizionali si tratta di una capacità più che soddisfacente, ma non appena si cominciano ad utilizzare dischi a stato solido è facile che questo componente si trasformi nel collo di bottiglia del sistema.
Per questo motivo l’industria ha cominciato a cercare modi per rimuovere questa limitazione e la soluzione trovata è stata quella di eliminare questo componente e attaccare il disco direttamente al bus PCI express del computer (dove si inseriscono le varie schede). Al fine di poter trattare i dischi in modo standard, varie aziende hanno costituito un gruppo di lavoro chiamato NVM express che ha contribuito a definire un insieme di standard per la gestione di memorie non volatili. Il primo di questi standard è chiamato NVMe e si tratta di un protocollo per gestire dischi attaccati direttamente al bus PCI express.
Nel 2016 ho avuto la fortuna di confrontare dischi SSD per studiare come lo stesso disco a stato solido si comportasse a seconda dell’interfaccia con cui era connesso al sistema: SATA o NVMe. Un aspetto interessante dei test condotti era il fatto che i dischi confrontati erano identici a meno della connessione al sistema e quindi i risultati permettevano di comprendere come il controller fosse divenuto un componente superfluo. Il disco NVMe mostra performance fino a 5 volte superiore rispetto alla sua controparte SATA, e soprattutto la latenza (ovvero il tempo necessario a restituire un valore richiesto) risulta più di 10 volte inferiore al primo, rendendo l’esecuzione di programmi più reattiva.
La seguente tabella riassume prestazioni di varie tipologie di disco con le relative prestazioni:
Drive | Lettura sequenziale (MB/s) | Scrittura sequenziale (MB/s) | Latenza (R/W) |
Intel P4801X PCIe x4, 3DXPoint | 2500 | 2200 | 10us/12us |
Intel S4610 SATA 6Gbps, 3D, TLC | 560 | 510 | 36us/37us |
Intel P4608 PCIe, x8, 3D, TLC | 6200 | 3500 | 80us/15us |
Intel P4320 PCIe x4, 3D, QLC | 3200 | 1000 | 138us/30us |
Seagate exos 12TB SAS, 7200rpm | 261 | 261 | 4160us |
Le tecnologie usate per lo stato solido si sono evolute nel tempo, e oggi un disco SSD è un componente complesso che esegue un vero e proprio sistema operativo internamente che cerca di assicurare che le risorse siano usate appropriatamente (ad esempio che venga usurato in modo uniforme dalle varie scritture) esponendo un’interfaccia al resto del sistema di un dispositivo a blocchi. Le tecnologie come TLC, e QLC, indicano tecniche costruttive dei gate logici usati per realizzare la memoria persistente.
Come si può osservare nelle tecnologie a stato solido, tranne 3DXPoint di cui parleremo a breve, scrivere costa generalmente di più che leggere dati, e a seconda del tipo di uso del disco che si intende fare può essere necessario scegliere modelli differenti.
Una memoria persistente
L’evoluzione dei dischi ha avvicinato il comportamento dei dischi a stato solido alla memoria fino al punto di dover considerare la possibilità di classificare un disco come una memoria lenta piuttosto che un disco veloce. Per questo motivo quando Intel ha rilasciato il processore Skylake nel 2017 ha annunciato lo standard NVDIMM disegnato per poter collegare al processore moduli di memoria RAM che sia persistente.
Vari attori nel corso degli ultimi trent’anni hanno lavorato a tecnologie di memoria che potessero essere non volatili come i moduli di memoria RAM a cui siamo abituati. La prima a riuscire ad introdurre una nuova tecnologia di stato solido che si avvicina alle prestazioni della RAM è stata Intel che due anni fa ha annunciato la tecnologia 3D XPoint (si legge cross point) le cui prestazioni si avvicinano a quelle della memoria (solo dieci volte più lenta).
La prima incarnazione di questa tecnologia, il cui nome commerciale è Optane, è stata quella di un disco PCI express con interfaccia NVMe. Come risulta evidente dalla seguente scheda ormai le latenze di questi dischi si assottigliano sempre di più e sono mille volte inferiori ai dischi meccanici.
Quest’anno Intel ha rilasciato Optane DC, moduli in formato DIMM di memoria persistente che consentono sia di espandere molto la memoria di un sistema ad un prezzo più contenuto, che di consentire di avere un dispositivo di memorizzazione direttamente attaccato al processore senza passare per il bus PCI express.
Un cambio di paradigma
Un modello comunemente usato per descrivere in maniera astratta i sistemi di memorizzazione di un computer è quello della gerarchia di memoria. In sostanza per trovare un giusto compromesso tra costi e prestazioni le memorie si organizzano dalle più lente (e normalmente più capaci) a quelle più veloci come mostrato in figura.
Spesso quando si parla della gerarchia di memoria volatile si usa il termine di caching mentre quando si parla di storage in cui le informazioni vengono spostate dal livello più lento a quello più veloce di parla di tiering.
L’arrivo di moduli di memoria persistenti altera un nuovo livello alla gerarchia in cui il tiering avviene anche in memoria e il processore può dover considerare che parte della memoria sia più performante di quella persistente che però è più capace.
Da test recenti è possibile osservare come l’impiego di Optane DC su un server con processori Intel di ultima generazione (Cascade Lake) può ridurre le prestazioni di circa il 10-15%, una cifra interessante dato il costo inferiore della tecnologia rispetto ai moduli di RAM. Inoltre, è possibile indirizzare esplicitamente questi moduli di memoria come dischi mediante opportune API, oppure esporli come veri e propri dischi attaccati al bus della memoria.
È solo l’inizio
Dopo molto tempo i dischi non sono più il collo di bottiglia dei nostri sistemi: 4 dischi NVMe possono facilmente superare i 100Gbps di banda di trasferimento, rendendo la rete di nuovo il collo di bottiglia nel trasferimento dati. Molte architetture e organizzazioni di sistemi fondate sulla lentezza dei dischi devono essere quindi messe in discussione, e infatti il successo dei sistemi iperconvergenti rispetto alle più tradizionali SAN è largamente dovuto a questo cambiamento strutturale.
Diviene però sempre più difficile percepire la differenza tra un disco a stato solido di nuova generazione e la precedente nonostante i dati di targa del dispositivo nuovo possano sembrare molto superiori a quello precedente. Il motivo profondo di questa scollatura tra le performance del dispositivo nuovo e l’incremento di prestazione degli applicativi è legato al modo con cui il software è stato scritto: molti dei codici che usiamo sono stati scritti cercando di non usare il disco se non necessario per non subire penalità nelle prestazioni; ecco quindi che l’impiego di tecnologie performanti può non riflettere i miglioramenti ottenuti durante il passaggio dal disco meccanico a quello a stato solido.
Il futuro di queste tecnologie sta già ridefinendo il modo con cui aggreghiamo sistemi e realizziamo i nostri datacenter. Le prestazioni che sarebbero possibili grazie la loro impiego non sono ancora una realtà poiché le applicazioni dovranno cominciare a cambiare il modo di accedere alla memoria persistente sfruttandone i punti di forza solo pochi anni fa impensabili.
In ogni caso già ora la nuova capacità di questi dispositivi spinge all’installazione di reti con banda sempre più ampia per sostenere il traffico all’interno dei datacenter.