NVMe 101. Considerazioni sulla sua implementazione nel Modern Data Center (it)

Este post también está disponible en Español

NVMe (Non-Volatile Memory Express) è probabilmente uno dei più interessanti argomenti quando si considera il futuro immediato degli storage All Flash.

NVMe è un’interfaccia software specificamente progettata per eliminare alcune delle limitazioni delle attuali implementazioni di storage che rendono impossibile ottenere una migliore performance delle unità flash. È giusto chiedersi riguardo ai suoi vantaggi principali e soprattutto quali siano le considerazioni necessarie per implementare questa tecnologia.

Lo scopo di questo articolo è fornire una panoramica di NVMe nel contesto della memorizzazione dei dati su larga scala.

Questo post non intende essere una spiegazione approfondita della tecnologia NVMe. Ci sono numerosi documenti in merito e in particolare:

NVMe Overview

NVMe è stato progettato per ridurre il sovraccarico che si verifica quando vi è un elevato numero di operazioni di I/O. Attraverso il bus PCIe, NVMe consente ad un dispositivo flash di funzionare quasi senza restrizioni. Come risultato la CPU è in grado di lavorare in modo più efficiente e il sistema ottiene prestazioni migliori e tempi di latenza inferiori.

NVMe 101: Definition
NVMe 101: Definition

La domanda è la seguente: qualsiasi sistema di storage può ottenere benefici attraverso NVMe? Detto in un altro modo, è sufficiente utilizzare SSD NVMe per ottenere i vantaggi di questa tecnologia nel Data Center?

Cerchiamo di fornire una risposta a questo quesito.

Prima introduciamo un po’ di terminologia

Communication/device interfaces: NVMe, SCSI, AHCI
Transfer interfaces: PCIe, SAS, SATA
NVM (Non-Volatile Memory): “flash media”, NAND o 3DXP — ( SSDs)

In particolare NVMe è un “device interface” per i dispositivi che si collegano direttamente al bus PCIe. Molte volte NVMe, SCSI e AHCI sono denominati “Protocolli”.

Gli SSD sono disponibili in diverse interfacce (PCIe, SAS, SATA) che determinano le prestazioni del sistema. In gran parte degli storage attuali gli SSD rappresentano uno dei “tier” (nel caso di storage di tipo “ibrido”) oppure l’unico “tier” (storage All Flash). In entrambi i casi, per consentire e facilitare l’integrazione delle unità SSD con i dischi “meccanici”, gli storage utilizzano un’interfaccia comune per il back-end, solitamente di tipo SAS, SATA o Fibre Channel.

SAS è in grado di comunicare con i dispositivi SATA, infatti i backplane delle unità SAS e SATA sono identici. Questo consente alle periferiche SATA di operare nello stesso ambiente dei SAS e per questo motivo, con l’eccezione di alcuni sistemi “legacy” che utilizzano FC, SAS è largamente utilizzato negli ambienti di storage di dati su larga scala.

Nello stesso modo in cui un drive SAS comunica utilizzando SCSI, un disco SATA comunica utilizzando lo standard AHCI (Advanced Host Controller Interface). SCSI e AHCI sono stati progettati con l’idea di gestire i dischi tradizionali che possono far fronte ad un limitato numero di accessi simultanei. Questi protocolli risultano inefficienti per sfruttare appieno la potenza dei dispositivi flash.

Una delle grandi differenze tra NVMe e SAS o SATA è nel COMMNAND QUEUEING, vale a dire quanti comandi o istruzioni di dati sia possibile gestire contemporaneamente. Nel caso di SATA/AHCI, questi valori sono di una coda (queue) contenente fino a 32 comandi, per SAS/SCSI una coda contenente fino a 64 comandi.

Confrontiamo questi valori con NVMe. Nel caso di NVMe, i valori del COMMAND QUEUING sono: 64000 code (queue) contenenti 64000 comandi ciascuna. Questa capacità di parallelizzare le istruzioni consente a NVMe di accedere a un dispositivo di memoria flash e gestire un gran numero di dati simultaneamente.

NVMe 101: NVMe / SAS / SATA differences
NVMe 101: NVMe / SAS / SATA differences

Alcune unità SSD utilizzano un’interfaccia SATA, altre invece SAS. Anche se SAS consente di gestire un maggior numero di comandi, dal un punto di vista delle prestazioni non ci sono grandi differenze.

NVMe 101: NVMe performance iops
NVMe 101: NVMe performance iops

L’interfaccia PCIe, invece, è in grado di sfruttare le sue capacità di DMA (Direct Memory Access) per ottenere migliori rendimenti.
DMA consente a un dispositivo di accedere e comunicare direttamente con la memoria di un altro dispositivo con un intervento minimo della CPU. Grazie al meccanismo di DMA, un’applicazione può scambiare dati con un host in modalità più efficiente perché la CPU non ha bisogno di essere utilizzata per controllare ogni byte trasferito.

Ad esempio, con una connessione NVMe end-to-end i valori di latenza saranno dell’ordine dei microsecondi mentre con un flash drive e una connettività SATA/SAS i valori di latenza saranno dell’ordine dei millisecondi (1 ms o superiore se misurata a livello di host). NVMe end-to-end significa server, rete, unità SSD.

NVMe 101: NVMe performance latency NVMe 101: NVMe performance latency

NVMe sarà il protocollo utilizzato nelle prossime generazioni di tecnologie flash quali 3D XPoint

NVMe 101: NVMe SSDs
NVMe 101: NVMe SSDs

È importante notare che il solo utilizzo di unità SSD NVMe al posto dei “tradizionali” SSD offre un miglioramento delle prestazioni di appena 20 microsecondi.

Supporto NVMe end-to-end

Primo requisito: configurazione NVMe end-to-end. Questo comporta l’uso di SSD NVMe, una nuova interfaccia a livello dei controller e l’utilizzo di un protocollo di trasmissione – DMA/PCIe in modo nativo, RDMA/Ethernet (NVMe/f) – fino alla CPU dell’host. L’obiettivo di NVMe è eliminare SATA / SAS / SCSI dallo stack e avvicinare il flash alla CPU.

In prospettiva, vantaggi applicativi

Facciamo un esempio che ci permetta di capire meglio cosa significherebbe per un’applicazione essere eseguita in un “ambiente” NVMe.

Quanto tempo la nostra applicazione attende un I/O (I/O wait)?

Consideriamo una tipica applicazione come un DB che esegua un certo numero di letture.

Numero di letture in un periodo di 24 ore
– 1,000 letture x secondo x 60 secondi x 60 minuti x 24 ore =
– 86.400.000 letture

Si supponga che parte di questi dati non si trovino nella memoria (cache) dello storage o del server e pertanto che tali dati debbano essere letti dai dischi (read miss).

Ora facciamo un confronto tra un ambiente storage con dischi rotazionali (legacy), un ambiente flash “tradizionale” e un ambiente NVMe end-to-end.

Dischi rotazionali (legacy)
– 86.400.000 di letture in un periodo di 24 ore
*20% (considerando che il 20% delle letture sono de tipo “read miss”)
– 17.280.000 IOPS (letture)
* 4ms (valore medio del RT del I/O (letture) dallo storage array)

RT= response time
Millisecondi: 1/1.000 di un secondo

17.280.000/1000*4
– Wait time = 69.120 secondi = 1.152 minuti

Dischi Flash (SSD no NVMe)
– 86.400.000 di letture in un periodo di 24 ore
*20% (considerando che il 20% delle letture sono de tipo “reads miss”)
– 17.280.000 IOPS (letture)
* 1ms (valore medio del RT del I/O (letture) dallo storage array)

RT= response time
Millisecond: 1/1.000 di un secondo

17.280.000/1000*1
– Wait time = 17.280 secondi = 288 minuti

“Ambiente NVMe”
– 86.400.000 di letture in un periodo di 24 ore
*20% (considerando che il 20% delle letture sono de tipo “reads miss”)
– 17.280.000 IOPS (letture)
* 100µs (valor medio del RT del IO (letture)

RT= response time
µs Microsecond: 1/1.000.000 di un secondo
– Wait time = 1.728 secondi = 28.8 minuti

I valori di guadagno di prestazioni si spiegano da soli. Pur mantenendo il numero di I/O costante, senza richiedere alcuna modifica lato applicativo, la drastica riduzione del tempo di risposta ottenuto grazie a NVMe ci permette di raggiungere:

1152/ 28.8 = 3900% aumento di performance !!!
288/ 28.8 = 1000% aumento di performace !!!

Se a prestazioni più elevate si associa ad una maggiore produttività, l’impatto della tecnologia NVMe sul business è enorme.

Network, NVMe over Fabrics (NVMf)

Secondo requisito: senza una connettività NVMe che include la rete, l’utilità dell’NVMe SSD è limitata.

Nello stesso modo in cui “localmente” il bus PCIe utilizza la sua capacità DMA per consentire la comunicazione con le unità SSD NVMe, RDMA (Remote DMA) è utilizzato per comunicare “a distanza”. RDMA significa la capacità di 2 dispositivi di accedere alla memoria di un altro attraverso una rete.

Ci sono diversi tipi di rete che supportano RDMA. Il primo e probabilmente il più noto è InfiniBand (IB). Altri sono RoCE (RDMA over Converged Ethernet) e iWARP (Internet Wide Area RDMA Protocol).

RDMA/IB è ampiamente usato nel mondo storage per la comunicazione all’interno dell’array, ad esempio tra i vari controller oppure tra i controller e i DAE (enclosure di Array di dischi).

Oggi queste tecnologie di NVMf sono in fase di definizione e l’implementazione in ambienti di storage su larga scala (Data Center) è ancora poco diffusa.

NVMe 101: NVMe over Fabrics (NVMf)
NVMe 101: NVMe over Fabrics (NVMf)

NVMf è un requisito fondamentale per sfruttare i vantaggi di NVMe nei Data Center.

Architettura storage multi-controller

Terzo requisito:: architetture di tipo multi-controller possono ottenere maggiori benefici dalla tecnologia NVMe.

“La catena è forte quanto il suo anello più debole” (Anonimo).

Cosa significa performance? È la misura che mette in relazione il tempo con l’esecuzione di singole attività.

Performance (Prestazioni), throughput e tempi di risposta (RT) sono correlati. Il throughput è l’output di un sistema in un determinato periodo di tempo (p.es. la quantità di dati prodotta da un DB in un certo tempo).

RT è il tempo necessario al sistema per produrre uno specifico output (p. es. la quantità di tempo richiesto per la lettura di 100 record in una query).
Utilizziamo in modo intercambiabile alcuni termini quali throughput e larghezza di banda (bandwidth); tecnicamente parlando:
La larghezza di banda massima di un sistema è definita dal componente che supporta il minor throughput.

Risulta evidente che la tecnologia NVMe è in grado di aumentare notevolmente il bandwidth di un sistema. Quindi in uno storage che utilizza NVMe, i controller rappresentano componenti critici perché devono essere in grado di gestire le nuove esigenze di I/O.

NVMe 101: storage multi-controller
NVMe 101: storage multi-controller
Ricapitolando

NVMe è progettato per ridurre il software overhead associato con la gestione di un elevato numero di I/O, diminuire la latenza e migliorare in modo significativo le prestazioni.
Le unità SSD sono disponibili con diverse interfacce, SAS, SATA e NVMe.

Le prestazioni degli SSD NVMe superano largamente quelle degli SSD SAS/SATA.

NVMe elimina SAS/SATA dallo stack di I/O.

Grazie a NVMe le applicazioni possono avere, tramite il bus PCIe, un accesso diretto alle CPU dell’host con vantaggi immediati di performance sui carichi di lavoro.

Negli attuali Data Center, nel contesto della memorizzazione dei dati su vasta scala, NVMe fornisce vantaggi solo se tutto il “path” è in grado di supportare questa tecnologia. Ciò comporta la presenza anche di network NVMf e di storage con architetture multi-controller.

NVMe 101: NVMe 101 big picture
NVMe 101: NVMe 101 big picture

Per ulteriori informazioni:

NVMe, Getting Ready for the 4K Television of Enterprise Storage

NVM Express, Past, Present, and Future. Amber Huffman. Intel Corporation

#IWork4Dell


Este post también está disponible en: Español (Spagnolo)