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 PC 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.
PCI Express vs SATA
Las unidades SSD o de estado sólido, han empezado a tomar relevancia en los últimos años, todo ello gracias a las reducciones en el coste de fabricación de las memorias NAND Flash. Este tipo de memoria trae una serie de ventajas frente a los discos duros convencionales. En especial en velocidad de escritura y lectura, que llegan a mejorar hasta 10 veces. El hecho de que no utilicen partes mecánicas hace que se pueda reducir su tamaño y peso, por lo que son ideales de cara a hacer ordenadores portátiles cada vez más finos.
El problema es que para las unidades de estado sólido el conector SATA estándar se ha quedado corto, ya que estos puedan llegar a transmitir datos a una velocidad de transferencia mucho más alta. Esto les llevo a adoptar una versión modificada del puerto PCI Express y lanzar los SSD bajo ese formato. Para que os hagáis una idea, las unidades SSD NVMe más rápidas tienen una velocidad de 7 GB/s de transferencia y esta se duplicará con la versiones 5.0 del estándar.
Otro beneficio que tiene el puerto PCI Express es que no necesitan de un cable de alimentación extra. Los cables SATA solamente transmiten datos, y aunque los SSD solamente consuman 1 o 2 vatios, el cable no puede alimentarlos, y se hace necesario un segundo cable que venga de la fuente de alimentación.
Los puertos PCI permiten nutrir de electricidad a los dispositivos que vayan conectados a ellos, e incluso algunas tarjetas gráficas de bajo consumo presentadas durante este año carecen totalmente de la necesidad de cables específicos que vengan de la fuente de alimentación, alimentándose exclusivamente del puerto PCI, ya que estos pueden nutrir de electricidad a los dispositivos que vayan conectados a ellos. No olvidemos que las tarjetas gráficas de gama baja, sin necesidad de un conector de alimentación de gama baja pueden tomar hasta 75 W, más que suficiente para este tipo de unidades.
El puerto M.2
M.2 es una interfaz que permite conectar dispositivos que suelen ser de un tamaño muy reducido, entre las que se incluyen unidades de almacenamiento SSD NVMe, así como antenas de conexión inalámbrica para Wi-Fi y Bluetooth. Esta interfaz es una variante del conector PCI Express de 4 pines o PCIe x4. Dicho formato a estas unidades de estado sólido ocupar un cuarto del volumen de una unidad SSD de 2,5 pulgadas con conector SATA, y encima son más rápidas. En el caso de las unidades M.2, estas quedan integradas de manera sutil en la placa base y son clave para que el portátil sea mucho más fino, o que tenga una batería mayor.
También es común ver en los nombres de los dispositivos M.2 como los SSD que estos vengan seguidos de un número de cuatro cifras, como por ejemplo M.2 2242. El 22 hace referencia a los milímetros de ancho que tiene el dispositivo, y el 42 hace referencia a los milímetros de longitud que tiene el mismo.
¿Qué es la especificación NVMe 2.0?
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 use 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.
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 sí que forman parte del nuevo estándar.
¿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, características, 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
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.
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
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
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.
Por último, solo una apreciación que debemos tener en cuenta antes de comprar un SSD NVMe M.2 y no es más que el tipo de conector, ya que no debemos confundir el M o B del A o el E, ya que los dos primeros son los que buscamos, mientras que los segundos son para tarjetas Wi-Fi en portátiles.