La especificación NVMe 1.2 introdujo una nueva característica llamada Host Memory Buffer o HMB (no confundir con la memoria gráfica HBM), con la promesa de mejorar ostensiblemente el rendimiento de los SSDs PCIe NVMe. En este artículo te explicamos qué es, cómo funciona, y cómo consigue mejorar el rendimiento de los SSDs que cuentan con esta facultad.
La mayoría de SSDs modernos incluyen un chip de memoria DRAM integrado, generalmente con una relación de 1 GB de DRAM por cada 1 TB de almacenamiento. Esta RAM generalmente está dedicada a llevar un control de dónde se encuentra físicamente cada bloque lógico de información almacenada en la memoria NAND -información que cambia en cada ciclo de escritura-, y que es consultada cada vez que se realiza una operación de lectura.
La relación estándar de DRAM a NAND que hemos comentado proporciona suficiente RAM a la controladora SSD para utilizar una tabla de consulta rápida muy ágil, en lugar de usar estructuras más complejas de datos que serían bastante más lentas. Esto reduce notablemente el trabajo que la controladora del SSD tiene que hacer para realizar operaciones de entrada y salida, y es la clave para obtener un rendimiento consistente.
Los SSD que no tienen DRAM pueden ser bastante más baratos e incluso más pequeños, pero dado que solo pueden almacenar las tablas de índices de datos en la memoria flash interna su rendimiento se ve bastante penalizado. En el peor caso, la latencia de lectura puede llegar a doblarse dado que cada operación de lectura requerirá una operación para saber dónde está el dato físico, y otra más para leer el dato en sí.
¿Qué es el Host Memory Buffer?
Como decíamos al principio, la especificación NVMe 1.2 introdujo esta nueva facultad llamada Host Memory Buffer o HMB. Esta característica se beneficia de las capacidades DMA de la interfaz PCI-Express para permitir que el SSD utilice una porción de la memoria DRAM de la CPU del sistema en lugar de requerir que el SSD venga con su propia DRAM.
En otras palabras, el SSD utiliza una pequeña porción de la RAM del sistema para realizar estas operaciones, y dado que no está diseñado para «reemplazar» la DRAM interna de los SSD sino para complementarla, en realidad tampoco quitará mucha RAM del sistema, solo magnitudes del orden de decenas (menos de 100 MB), más que suficiente para lo que necesita.
Cierto es que el acceso a la DRAM a través de PCIe es mucho más lenta que acceder a un chip DRAM que está en el propio dispositivo, pero aun así se mejora significativamente el rendimiento con respecto a leer la información desde la memoria flash del SSD.
¿Cómo afecta el HMB al rendimiento?
Como hemos explicado antes, la mejor opción para un mejor rendimiento es que el SSD tenga su propia DRAM, ya que el acceso será muchísimo más rápido. La segunda opción es mediante el Host Memory Buffer, que actúa a través de PCIe a la RAM del sistema, y la peor opción sería no tener nada de esto y tener que usar la propia memoria flash del SSD de memoria caché.
Se pueden ver los efectos de la caché HMB claramente midiendo el rendimiento de lectura aleatoria de un SSD mientras que se incrementa la carga de trabajo (la cantidad de datos a los que se accede simultáneamente de manera activa).
Se puede ver claramente que hasta que la carga de trabajo llega a 24 GB, el rendimiento del SSD se mantiene muy, muy estable, y solo comienza a caer a partir de dicha cifra. Sin embargo, con HMB desactivado, el rendimiento va cayendo paulatinamente y cada vez más.