El futuro de los SSD ya no está en el aire, llega NVMe 2.0 para tu M.2

El estándar NVMe define una serie de normas que todos los fabricantes de memoria RAM no volátil, más conocida como NAND Flash, han de seguir para construir sus chips de memoria. No solo para almacenar datos, sino también sobre la forma con la que se comunica este tipo de memoria con el PC. La versión 2.0 del estándar NVMe va a tener cambios muy importantes en los unidades SSD.

Uno de los problemas de la memoria NVMe es que los PCs a día de hoy se comunican con todo tipo de memoria NAND Flash como si fuesen abstracciones de un disco duro, lo que no les permite aprovechar todas las características de este tipo de memoria no volátil. Con el estándar NVMe 2.0 se busca solucionar este problema y que el PC vea las unidades SSD NVMe como lo que realmente son, no como discos duros.

¿Qué es la especificación NVMe 2.0?

NVMe 2.0 Discos Duros

Se ha de aclarar, para empezar, que la especificación NVMe 2.0 no define en ningún momento como son los chips de memoria utilizados en las unidades SSD NVMe, tampoco como es la transferencia de datos. Pero sí que definen una serie de protocolos de comunicación entre el sistema huésped y la unidad SSD. Siendo el sistema huésped nada más que el procesador encargado de realizar la petición de memoria, este puede ser una CPU, una GPU, una unidad DMA, etcétera.

Por lo que se trata de una serie de especificaciones distintas que marcan los diferentes aspectos que ha de cumplir una unidad SSD o cualquier otro sistema que utilice memoria NVMe para cumplir con la especificación NVMe 2.0. La cual es el cambio más importante en la misma desde el lanzamiento de la versión 1.0 en el año 2011, y se ha de aclarar que es compatible hacia atrás con las anteriores del protocolo.

NVMe discos duros

La base de estas especificaciones es la NVM Express Base (NVMe Base), la cual define una serie de nuevos protocolos para comunicarse con la memoria NVMe. Estos son los que trataremos en este artículo, dado que el resto son opcionales y no forman parte de la especificación base, pero los Key-Values y los Zoned Namespaces si.

¿Cuáles son las especificaciones opcionales? Principalmente son tres:

  • El NVM Express Management Interface (NVMe-MI) define una interfaz adicional opcional para el manejo de todos los sistemas que hagan uso de las interfaces NVM Express.
  • En cambio las estructuras de datos, carácteristicas, páginas de log, comandos y valores de estado para la E/S de datos se ven especificadas en el NVM Express I/O Command.
  • El NVM Express Transport son una serie de especificaciones para los propiedades del controlador de memoria flash.

Zoned Namespaces en el estándar NVMe 2.0

Zoned Namespaces NVMe 2.0

Una de las novedades del estándar NVMe 2.0 es la implementación del comando Zoned Namespaces, el cual permite al PC dividir en diferentes zonas la organización de la memoria en la unidad SSD bajo el estándar NVMe 2.0, aunque su implementación empezó a darse en la versión 1.4 del estándar NVMe su versión definitiva se da en la versión que estamos tratando en este artículo.

Zoned Namespaces NVMe 2.0

La idea no es otra que dividir el almacenamiento del SSD por diferentes zonas, pensad en ellas como en particiones. Cuando desde el PC se le pide que se escriban los datos en una zona de espacio de nombres lo que hará el controlador de memoria flash será escribir secuencialmente en dicha zona, la cual estará delimitada en tamaño y no podrá escribir más datos si se supera el tamaño previamente asignado, independientemente de que exista más memoria flash disponible.

¿El objetivo de esto? Una de las ventajas es que con esto se consigue que el controlador de la memoria flash no tenga que gestionar escrituras a direcciones de memoria aleatoria y se optimiza el uso del espacio. Simplemente la CPU reserva una parte delimitada del almacenamiento como zona para almacenar los datos. Cuando se necesite acceder a dicha zona, el PC le dirá al controlador de la memoria flash que quiere acceder a los datos de esa zona en concreto.

Key-Value cambia la forma de acceder a los datos en NVMe 2.0

Clave-Valor

Otra de las mejoras integradas en el NVMe 2.0 es el comando Key-Value o Clave-Valor. El cual se basa en el acceso a los datos almacenados en el SSD a través de una clave única en vez de la dirección virtual del bloque de datos. Es algo que viene del mundo de las bases de datos y esta novedad permite a las aplicaciones comunicarse con la unidad SSD a través de una clave-valor. Lo que significa decir adiós a las tablas de traducción entre las claves emitidas por el procesador y la dirección física de la memoria.

Para entender mejor el concepto hemos de tener en cuenta que tradicionalmente se almacena la información en un SSD por bloques, algo que viene del mundo de los discos duros y que implica lo siguiente:

  • Los datos se almacenan en bloques o páginas de memoria de tamaño regular, en cambio un grupo de datos asociados a una clave-valor pueden tener cualquier tamaño.
  • Los datos en el sistema de bloques se acceden a partir de una dirección de memoria virtual, mientras que en el NVMe 2.0 lo datos se podrán acceder a partir de conocer la clave-valor de acceso a los mismos.
  • Con el almacenamiento haciendo uso de valores clave podemos almacenar cualquier cantidad de bytes, en cambio en el paginado clásico de memoria solo podemos almacenar datos en múltiples del tamaño de cada bloque.

La Clave-Valor se basa en dos valores distintos, el primero es la clave que va asignada a cada dispositivo y puede tener un tamaño entre 1 byte y 32 bytes. Para cada dispositivo NVMe 2.0 se le generará una clave única para poder acceder a sus datos. El segundo en cambio es el valor que permite acceder a un bloque de datos en concreto.

Soporte para unidades de disco convencionales

NVMe 2.0 rotational media

Tardaremos años en ver desaparecer a los discos duros convencionales y muchos de ellos se siguen utilizando en muchos sistemas en tándem junto a las unidades SSD. No obstante, las nuevas normas de cara al acceso a los datos que trae el estándar NVMe 2.0 difieren enormemente de la forma en la que los datos se almacenan en los discos duros.

El soporte para formatos rotacionales se basa en dos cosas, la primera de ellas es darle la capacidad a los discos duros de acceder al mismo espacio físico en los periféricos de E/S que los discos SSD NVMe M.2, es decir, el puerto PCI Express, lo que no significa que vayamos a ver discos con interfaz PCIe, pero sí que vamos a ver en los PCs del futuro interfaces de traslado de SATA a PCIe que permitirán copiar los datos entre ambos dispositivos de almacenamiento más rápido.

La otra es el soporte para el nuevo direccionamiento de los datos del NVMe 2.0 en forma de Zoned Namespaces y Key Values, para que ambos tipos de almacenamientos se puedan entender dentro del mismo sistema. Es decir, el NVMe 2.0 supone que el SSD deje de hablar en el lenguaje del HDD para que ocurra el revés.