NVMe: Guía Completa – Qué Es, Cómo Funciona y su Evolución
NVMe (Non-Volatile Memory Express) es un protocolo de interfaz diseñado para dispositivos de almacenamiento con memoria no volátil (SSD, memorias flash, tarjetas de expansión PCIe, SSD M.2, etc.), el cual funciona mediante el bus PCI Express.
La tecnología NVMe surge debido a que la interfaz de controlador de host anterior (AHCI) está enfocada en unidades de disco duro mecánico (HDD), aunque esto no era inconveniente al momento de utilizar una unidad de estado sólido (SSD). Aun así, a medida que aumentaba el rendimiento de las unidades SSD, el estándar AHCI se iba volviendo cada vez más ineficaz para estas unidades.
Debido a lo mencionado anteriormente, NVM Express fue diseñado con la finalidad de aprovechar al máximo las unidades de estado sólido (SSD). Más tarde, NVM Express se volvería un estándar para cualquier dispositivo que utilizara una memoria no volátil (móviles, tabletas, laptops).
Nota: NVM Express utiliza una comunicación en paralelo.
¿Cómo Funciona NVMe?
La forma de trabajar de NVM Express es simple: una unidad de almacenamiento SSD NVMe se conecta a través del bus PCIe o mediante un puerto M.2 o U.2, seguidamente, mediante esta conexión, el protocolo permite una menor latencia, una reducción en el uso de energía y un aumento en las IOPS (Operaciones de entrada/salida por segundo, en español).
Por otra parte, los comandos NVMe trabajan de la siguiente manera:
- La computadora host envía colas de comandos de entrada/salida (I/O) hacia los controladores NVM Express.
- El controlador NVM Express recupera las colas de comandos de entrada/salida.
- Seguidamente, el controlador ejecuta las colas de comandos de entrada/salida.
- A continuación, el controlador envía colas de finalización de comandos de E/S.
- Finalmente, la computadora host recibe y registra las colas de comandos y las procesa como finalizadas.
Especificaciones hasta la Fecha (NVM Express, NVMe-oF, NVMe-MI)
NVM Express basé:
- 1.0 (1 de marzo del 2011)
- 1.0e (23 de enero del 2013)
- 1.1 (11 de octubre del 2012)
- 1.1b (2 de julio del 2014)
- 1.2 (3 de noviembre del 2014)
- 1.2a (23 de octubre del 2015)
- 1.2b (1 de junio del 2016)
- 1.2.1 (5 de junio del 2016)
- 1.3 (1 de mayo del 2017)
- 1.3a (24 de octubre del 2017)
- 1.3b (4 de mayo del 2018)
- 1.3c (24 de mayo del 2018)
- 1.3d (20 de marzo del 2019)
- 1.4 (10 de junio del 2019)
- 1.4a (9 de marzo del 2020)
- 1.4b (21 de septiembre del 2020)
- 1.4c (9 de marzo del 2021)
- 2.0 (13 de mayo del 2021)
- 2.0a (23 de julio del 2021)
- 2.0b (6 de enero del 2022)
- 2.0c (4 de octubre del 2022)
NVM Express over Fabrics:
- 1.0 (5 de junio del 2016)
- 1.0a (17 de julio del 2018)
- 1.1 (22 de octubre del 2019)
- 1.1a (12 de julio del 2021)
NVMe-MI:
- 1.0 (17 de noviembre del 2015)
- 1.0a (8 de abril del 2017)
- 1.1 (29 de abril del 2019)
- 1.1a (20 de abril del 2020)
- 1.1b (5 de octubre del 2020)
- 1.1c (2 de febrero del 2021)
- 1.2 (2 de junio del 2021)
- 1.2a (22 de julio del 2021)
- 1.2b (10 de enero del 2022)
- 1.2c (6 de octubre del 2022)
NVM Express Vs AHCI
Cronología e historia de NVMe
2007 - 2011: Creación y Lanzamiento
- 2007 – En el Intel Developer Forum del 2007, se mostró un diseño arquitectónico del NVMHCI propuesto por la ONFI (Open NAND Flash Interface Working Group). En ese mismo año, se formó NVMHCI Working Group, dirigido por Intel (dicho grupo estaría conformado por más de 40 empresas).
- Abril de 2008 – poco menos de un año desde la formación del equipo, la especificación NVMHCI 1.0 sería liberada. Esta especificación incluye registros, motor DMA y motor DMA, y conjunto de comandos.
- 2009 – Comienza el desarrollo de NVMe. Estas especificaciones fueron desarrolladas en NVMe Workgroup.
Nota: Después de la reestructuración en NVMHCI Work Group, esta pasó a llamarse “NVMe Work Group”.
- 1 de marzo de 2011 – La especificación NVMe 1.0 fue lanzada. Esta especificación incluye: soporte para funcionamiento en paralelo, protección de extremo a extremo (DIF y DIX), complementos de seguridad, virtualización y una mejora en el apartado de informe de errores.
- 3 de marzo de 2011 – Intel pública un controlador NVM Express para Linux.
Nota: Durante su desarrollo, se denominó “Enhanced NVMHCI”. Sin embargo, el nombre se modificó a “NVM Express” para su comercialización.
2012 - 2013: Estandarización de NVM Express
- 2012 – En agosto de 2012, IDT (Integrated Device Technology) lanza comercialmente los primeros chipsets NVMe que funcionan mediante el bus PCIe 3.0 (89HF16P04AG3 y 89HF32P08AG3).
- 11 de octubre de 2012- La especificación NVM Express 1.1 fue lanzada. Esta especificación incluye: E/S multipista, una mejora con la transición autónoma de energía y el uso compartido del namespace.
- 23 de enero de 2013 – NVM Express lanzó una actualización para la especificación NVMe 1.0, llamada NVMe 1.0e.
- Del 13 al 16 de mayo de 2013 – NVM Express Workgroup festejó su primer Plugfest. Este evento les brinda a sus participantes la oportunidad de medir el cumplimiento de sus productos con la especificación NVM Express.
- En julio de 2013, Samsung anuncia la primera unidad de almacenamiento NVMe (XS1715) con una velocidad de 3,000 MB/s para utilización empresarial.
- 18 de octubre de 2013 – Microsoft agregó soporte para NVM Express de forma nativa para Windows 8.1.
- Noviembre de 2013 – LSI presentó la tercera generación de su línea de controladores flash SandForce, SF3700, el cual también es compatible con NVMe.
2014: Expansión hacia nuevos horizontes
- 2014 – Comienzo el desarrollo de NVMe Over Fabrics.
- Marzo de 2014 – NVM Express Workgroup se incorporó bajo el nombre NVM Express. Más tarde, la asociación pasaría a llamarse “NVM Express Inc.”.
- Junio de 2014 – Intel anuncia sus primeros productos NVM Express (DC P3700 series, DC P3600 series y DC P3500 series).
- 2 de julio de 2014, – NVM Express lanza una actualización para la especificación NVM Express 1.1, llamada NVM Express 1.1b.
- 5 de octubre de 2014 – Ilumos obtiene soporte para NVM Express.
- 3 de noviembre de 2014 – Se lanzó al público la especificación NVM Express 1.2, esta especificación agregó una administración de energía mejorada, actualizaciones de firmware en vivo, administración enfocada a los namespace y soporte de transferencia. Más tarde, las unidades NVM Express de Intel estarían disponibles comercialmente.
2015: Un Año Prometedor Para NVM Express
- enero de 2015 – NVM Express Inc. anuncia sus resultados en las elecciones para sus nuevos promotores (HGST, Micron, Microsoft, Samsung, SanDisk y Seagate).
- 24 de febrero de 2015 – El sistema operativo Chrome OS agregó soporte para dispositivos NVM Express.
- Del 8 al 11 de junio de 2015 – NVM Express Inc. celebró su 4.º plugfest. Durante el evento se probaron distintos dispositivos mediante la especificación NVM Express 1.2; dentro de dichas pruebas se incluyó la conexión en caliente para entornos que utilicen el factor de forma U.2.
- 9 de septiembre de 2015 – Apple presentó la primera implementación de NVM Express en móviles.
- 23 de octubre de 2015 – NVM Express lanzó una actualización para la especificación NVMe 1.2, llamada NVMe 1.2a.
- 17 de noviembre de 2015 – NVM Express lanzó al público la NVMe-MI 1.0. Esta especificación proporciona una arquitectura y un conjunto de comandos enfocados en administrar un subsistema de memoria no volátil fuera de banda (a través de un sistema operativo).
2016 - 2017: Lanzamiento de Nuevas Tecnologías NVMe
- Del 29 de febrero al 3 de marzo – NVM Express Inc. celebró su 5.º plugfest, este evento tendría la asistencia más alta hasta la fecha.
- 1 de junio de 2016 – NVM Express lanzó una actualización para la especificación NVM Express 1.2, llamada NVM Express 1.2b.
- 5 de junio de 2016 – NVM Express lanza al público NVMe Over Fabrics 1.0 (NVMe-oF); esta especificación está enfocada en acceder a dispositivos y sistemas de almacenamiento mediante Ethernet, Fibre Channel, etc.
- 6 de junio de 2016 – NVM Express lanzó una actualización para la especificación NVM Express 1.2, llamada NVM Express 1.2.1.
- enero de 2017 – NVM Express Inc. anuncia sus resultados en las elecciones para sus nuevos promotores (Facebook, Micron, Microsoft, Samsung, Seagate, Toshiba y Western Digital).
- Del 22 al 25 de mayo, NVM Express Inc. celebró su 7.º plugfest.
- Mayo de 2017 – NVM Express lanzó al público la especificación NVMe 1.3. Esta especificación incluye mejoras de la virtualización, autodiagnóstico del dispositivo, particiones de arranque y administración térmica controlada por host.
- Del 30 de octubre al 2 de noviembre de 2017 – NVM Express Inc. celebró su 8.º plugfest. El evento incluyó protocolos de prueba para la especificación NVMe 1.3.
- 24 de octubre de 2017 – NVM Express lanzó una actualización para la especificación NVMe 1.3, llamada NVMe 1.3a.
Nota: En las características se encuentra “Identify Namespace return list of Namespace Identifiers” (no encontré una manera clara de traducirlo xd), la cual es obligatoria (el resto son características opcionales).
2018 - 2019: Mantenimientos hacia sus especificaciones
- Enero de 2018 – NVM Express Inc. anuncia sus resultados en las elecciones para sus nuevos promotores (Cavium, Cisco, Dell, Facebook, Intel, Microsemi y NetApp).
- 4 de mayo de 2018, NVM Express lanza una actualización para la especificación NVM Express 1, llamada NVM Express 1.3b.
- 24 de mayo de 2018 – NVM Express lanza una actualización para la especificación NVM Express 1.3, llamada NVM Express 1.3c.
- 20 de marzo de 2019 – NVM Express lanzó una actualización para la especificación NVM Express 1.3, llamada NVM Express 1.3d.
- 18 de abril de 2019 – El sistema operativo Haiku obtiene soporte para NVM Express.
- 29 de abril 2019 – NVM Express lanzó al público la NVMe-MI 1.1.
- Junio de 2019 – Se lanzaría al público la especificación NVM Express 1.4; esta especificación incluye un registro de eventos persistentes, acceso asimétrico al namespace, funciones de host memory buffer, etc.
- 22 de octubre 2019 – NVM Express lanzó al público la NVMe-MI 1.1.
2020 - Actualidad: Un Estándar en la Industria
- 9 de marzo de 2020 – NVM Express lanza una actualización para la especificación NVM Express 1.4, llamada NVM Express 1.4a.
- 21 de septiembre de 2020 – NVM Express lanza una actualización para la especificación NVM Express 1.4, llamada NVM Express 1.4b.
- 9 de marzo de 2021 – NVM Express lanza una actualización para la especificación NVM Express 1.4, llamada NVM Express 1.4c.
- Mayo de 2021 – Se lanzó al público la especificación NVMe 2.0; esta especificación incluye un copiado de comandos simples, compatibilidad con versiones anteriores, compatibilidad con discos HDD, conjuntos de comandos KV, CRC de 32 y 64, conjunto de comandos ZNS, etc.
- 2 de junio de 2021 – NVM Express lanzó al público la NVMe-MI 1.2.
- 23 de julio de 2021 – NVM Express lanza una actualización para la especificación NVMe 2.0, llamada NVMe 2.0a.
- Del 9 al 10 de noviembre de 2021 – Seagate presentó la primera unidad de disco duro (HDD) NVMe nativa en la industria durante el OCP Experience Center.
- 6 de enero de 2022 – NVM Express lanza una actualización para la especificación NVMe 2.0, llamada NVMe 2.0b.
- 4 de octubre de 2022 – NVM Express lanza una actualización para la especificación NVMe 2.0, llamada NVMe 2.0c (última versión de la especificación hasta la fecha).
Factores de Forma
AIC (Add In Card): AIC es una unidad de almacenamiento de estado sólido que utiliza un factor forma de tarjeta estándar mediante PCI Express.
U.2 (Conocido anteriormente como SFF-8639): El factor de forma U.2 fue diseñado con el objetivo de encajar en los puertos de almacenamiento destinados a unidades SAS y SATA, esto con la finalidad de implementar NVM Express con la menor reingeniería posible.
EDSFF (Enterprise & Data Center SSD Form Factor): EDSFF es un factor enfocado en brindar el mayor rendimiento y velocidad en los sistemas de almacenamiento de nivel empresarial.
U.3(Conocido anteriormente como SFF-8639): Es un estándar basado en la especificación U.2, esta combina el soporte SAS, NVMe y SATA en un solo controlador.
- M.2(Conocido anteriormente como NGFF): M.2 fue diseñado con el fin de aprovechar el tamaño compacto y la baja temperatura de las memorias NAND.