NVMe 101. Consideraciones sobre su implementación en un Modern Data Center (es)

Questo post è anche disponibile in italiano

NVMe (Non-Volatile Memory Express) es probablemente uno de los argumentos más interesantes cuando se considera el futuro inmediato de los almacenamientos All Flash.

NVMe es una interfaz software específicamente diseñada para eliminar algunas limitaciones de las actuales implementaciones storage que impiden obtener un mejor rendimiento de las unidades flash. Es justo interrogarse sobre sus principales beneficios y sobre todo, cuales son las consideraciones necesarias para implementar esta tecnología.

El objetivo de este artículo es proporcionar un overview de NVMe en el contexto del almacenamiento de datos a gran escala.

Este post no pretende ser una explicación en profundidad de la tecnología NVMe. Existen numerosos documentos al respecto, en particular:

NVMe Overview

NVMe ha sido diseñado para reducir el overhead que resulta cuando se genera un elevado número de I/O. A través del bus PCIe, NVMe permite a un dispositivo flash de operar casi sin restricciones. Como resultado la CPU puede trabajar en un modo más eficiente y el sistema obtiene un mejor rendimiento y una menor latencia.

NVMe 101: Definition
NVMe 101: Definition

La pregunta es: cualquier sistema de storage puede obtener ventajas gracias a NVMe? Dicho en otro modo, basta simplemente utilizar SSDs NVMe en el Data Center para obtener los beneficios de esta tecnología?

Tratemos de dar una respuesta a esta pregunta.

Un poco de terminología

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

Específicamente NVMe es un “device interface” para los dispositivos que se conectan directamente al bus PCIe. Muchas veces a NVMe, SCSI y AHCI se refiere como “protocolos”.

Los SSDs están disponibles en diferentes interfaces (PCIe, SAS, SATA) que determinan su rendimiento en el sistema. En la gran parte de los storage actuales los SSDs constituyen un tier (storage de tipo “hibridos”) o el único tier (storage All Flash). En los dos casos, para permitir y facilitar esta integración de discos SSDs y “rotacionales”, los sistemas de storage utilizan una interfaz común en el back-end, generalmente de tipo SAS, SATA o Fibre Channel.

SAS puede comunicar con dispositivos SATA, los backplanes de SAS e SATA son idénticos. Esto permite a los dispositivos SATA de funcionar en el mismo entorno de los SAS y por este motivo, con excepción de algunos sistemas “legacy” que utilizan FC, SAS es largamente utilizado en los ambientes de almacenamiento de datos a larga escala.

De la misma manera que un drive SAS comunica utilizando SCSI, un drive SATA comunica utilizando el standard AHCI (Advanced Host Controller Interface).  Tanto SCSI como AHCI fueron diseñados con la idea de manejar discos rotacionales que pueden hacer frente a un limitado número de accesos simultáneos. Estos protocolos resultan poco eficientes para explotar la potencia de los dispositivos flash.

Una de las grandes diferencias entre NVMe y SAS o SATA está en el COMMNAND QUEUEING, o cuantos comandos o instrucciones de datos es posible manejar al mismo tiempo. En el caso de SATA/AHCI estos valores son 1 cola (queue) de hasta 32 comandos, para SAS/SCSI 1 cola (queue) de hasta 64 comandos.

Comparemos estos valores con NVMe. En el caso de NVMe, los valores del COMMAND QUEUEING son: 64000 colas (queue) con 64000 comandos cada una. Esta capacidad de paralelizar las instrucciones permite a NVMe de acceder a un dispositivo flash y elaborar un gran número de datos a la vez.

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

Algunos SSD utilizan una interfaz de tipo SATA, otros de tipo SAS. Aunque si como hemos visto SAS permite de gestionar un mayor número de comandos, desde el punto de vista del rendimiento no hay grandes diferencias.

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

La interfaz PCIe en vez es capaz de aprovechar su capacidad de DMA (Direct Memory Access) para obtener mejores rendimientos.

DMA permite a un dispositivo de acceder y comunicar directamente con la memoria de otro dispositivo con una intervención mínima de la CPU. Gracias al mecanismo de DMA una aplicación puede intercambiar datos con un host en modo más eficiente porque la CPU non tiene que utilizada para controlar cada byte transferido.

Por ejemplo, con una conexión NVMe end-to-end obtendremos valores de latencia del orden de microsegundos mientras que con un disco flash y una conexión SATA/SAS obtendremos una latencia de milisegundos (1 ms o superior si la medimos a nivel del host). NVMe end-to-end significa server, network, SSD.

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

NVMe será el protocolo utilizado para la próxima generación de tecnologías de almacenamiento flash como 3D XPoint.

NVMe 101: NVMe SSDs
NVMe 101: NVMe SSDs

Es importante notar que el solo cambio de discos flash por discos flash NVMe puede ofrecer una mejora en el rendimiento de apenas 20 microsegundos.

Soporte NVMe end-to-end

Primer requisito: configuración NVMe end-to-end. Esto implica NVMe SSDs, un nuevo interfaz a nivel de los controllers y utilizar un protocolo de transmisione – DMA/PCIe en modo nativo, RDMA/Ethernet (NVMe/f) – hasta la CPU del host. El objetivo de NVMe es eliminar SATA / SAS / SCSI de la pila (stack) y acercar el flash a la CPU.

En perspectiva, ventajas aplicativas

Hagamos un ejemplo que nos permita entender mejor que significaría para una aplicación poder ser ejecutada en un “ambiente” NVMe.

Cuánto tiempo nuestra aplicación espera un I/O (I/O wait)?

Consideremos una típica aplicación como un DB que efectúa un cierto número de lecturas durante el día.

Numero de lecturas en un periodo de 24 horas
– 1,000 lecturas x segundo x 60 segundos x 60 minutos x 24 horas =
– 86.400.000 lecturas

Digamos que una parte de los datos no se encontrarán directamente en la memoria (cache) del storage o server y por lo tanto esos datos tendrán que ser leídos desde los discos (read miss).

Ahora hagamos una comparación con un ambiente storage con discos rotacionales (legacy), un ambiente flash “tradicional” y un ambiente NVMe “end-to-end”

Discos rotacionales (legacy)
– 86.400.000 lecturas en un periodo de 24 horas
*20% (considerando que el 20% de las lecturas son de tipo “reads miss”)
– 17.280.000 IOPS (lecturas)
* 4ms (valor medio del RT del IO (lecturas) del storage array)

RT= response time
Millisecond: 1/1.000 de un segundo

17.280.000/1000*4
– Wait time = 69.120 segundos = 1.152 minutos

Discos Flash (SSD no NVMe)
– 86.400.000 lecturas en un periodo de 24 horas
*20% (considerando que el 20% de las lecturas son de tipo “reads miss”)
– 17.280.000 IOPS (lecturas)
* 1ms (valor medio del RT del IO (lecturas) del storage array)

RT= response time
Millisecond: 1/1.000 de un segundo

17.280.000/1000*1
– Wait time = 17.280 segundos = 288 minutos

“Ambiente NVMe”
– 86.400.000 lecturas en un periodo de 24 horas
*20% (considerando que el 20% de las lecturas son de tipo “reads miss”)
– 17.280.000 IOPS (lecturas)
* 100µs (valor medio del RT del IO (lecturas)

RT= response time
µs Microsecond: 1/1.000.000 de un segundo
– Wait time = 1.728 segundos = 28.8 minutos

Los valores de ganancia de rendimiento se explican por si solos. Aún manteniendo el número de IO constante, sin necesidad de ninguna modificación lado aplicativo, la drástica disminución del tiempo de respuesta obtenida gracias al NVMe nos permite de obtener

1152/ 28.8 = 3900% aumento de rendimiento !!!
288/ 28.8 = 1000% aumento de rendimiento !!!

Si mayor rendimiento se asocia con mayor productividad, el impacto de la tecnología NVMe sobre el business es enorme.

Network, NVMe over Fabrics (NVMf)

Segundo requisito: Sin una conectividad NVMe que incluya la network, la utilidad de los SSD NVMe es limitada.

De la misma manera que “localmente” el bus PCIe utiliza su capacidad DMA para permitir la comunicación con un SSD NVMe, para comunicar “remotamente” se utiliza RDMA (Remote DMA). RDMA significa la capacidad de 2 dispositivos de acceder a la memoria del otro a través de una network.

Existen varios tipos de network que soportan RDMA. El primero y seguramente más conocido es InfiniBand (IB). Otros son RoCE (RDMA over Converged Ethernet) y iWARP (Internet Wide Area RDMA Protocol).

RDMA/IB es ampliamente usado en el mundo storage para la comunicación dentro el array, por ejempo entre los diferentes controller o entre los controllers y los DAE (Disk Array Enclosures).

Hoy en día estas tecnologías de NVMf están en fase de definición y su implementación en ambientes de almacenamientos de datos a gran escala (data center) es poco difusa.

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

NVMf es un requisito fundamental para explotar los beneficios de NVMe en el data center.

Arquitectura storage multi-controller

Tercer requisito: arquitecturas de tipo multi-controller pueden obtener mayores beneficios de la tecnología NVMe.

“La cadena es tan fuerte como el más débil de sus eslabones” (Anónimo). 

Qué es el rendimiento? Es la medida que relaciona el tiempo con la ejecución de tareas individuales.

Rendimiento (performance), throughput y tiempo de repuesta (RT) están relacionados. Throughput es el output de un sistema en un periodo de tiempo (la cantidad de datos producidos por un DB en un determinado tiempo).  RT es la duración necesaria al sistema para producir un determinado output (la cantidad de tiempo necesaria para leer 100 records en una query).

Usamos en modo intercambiable algunos términos como por ejemplo throughput y ancho de banda (bandwidth). Técnicamente hablando: El ancho de banda máximo de un sistema se define por el componente que soporta el menor throughput.

Resulta evidente que la tecnología NVMe es en grado de aumentar notablemente la cantidad de datos (bandwidth) de un sistema. Por lo tanto, en un storage que utiliza NVMe los controllers son un componente crítico que tienen que ser capaces de manejar los nuevos requerimientos de I/O.

NVMe 101: storage multi-controller
NVMe 101: storage multi-controller
Resumiendo

NVMe ha sido diseñado para reducir el software overhead asociado con la gestión de elevados números de I/Os, reducir la latencia y ofrecer significativas mejoras en el rendimiento.

Los SSD están disponibles en diferentes interfaces, SAS, SATA y NVMe.  El rendimiento de los SSD NVMe supera largamente los SSD SAS/SATA.

NVMe elimina SAS/SATA del stack de I/O.

Gracias a NVMe las aplicaciones pueden tener, a través del bus PCIe. un acceso directo a las CPU del host con inmediatos beneficios de rendimiento para las cargas de trabajo.

En los actuales data centers, en el contexto del almacenamiento de datos a gran escala, NVMe aporta beneficios solo si el entero “path” es capaz de soportar esta tecnología. Esto implica no solo SSD NVMe, también NVMe networks y arquitecturas storage multi-controller

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

Para mayor información:

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: Italiano (Italiano)