Quienes hayan pasado un mínimo de tiempo buscando información sobre las tecnologías de almacenamiento integradas lo saben: el subespacio de Internet dedicado a este tema en particular está inundado de artículos breves que comparan las tecnologías flash NOR y NAND. Algunos están muy bien escritos y son realmente esclarecedores. Pero, con demasiada frecuencia, la mera acumulación de contenido insípido, seco y sin contexto le deja a uno con ganas de más. ¿Acaso no hay nada más? ¿Acaso estos pocos fragmentos de material profusamente repetido son todo lo que hay que saber? No creemos que sea así.
Este tercer artículo de nuestra serie de introducción (Ver parte 1 y parte 2) sobre el almacenamiento flash es nuestra propia versión del clásico «NOR versus NAND». Una versión que, con suerte, elevará su comprensión de estas tecnologías de almacenamiento tan extendidas y le ayudará a tomar mejores decisiones de diseño. Dicho esto, este artículo no es un texto didáctico, autocontenido e introductorio. Es más bien un complemento a la introducción habitual, que cubre aspectos de las tecnologías flash NOR y NAND que, en nuestra opinión, se ignoran con demasiada frecuencia. Si es completamente nuevo en las tecnologías flash NOR y NAND, tal vez le interese primero consultar material más neutral, como los artículos de Wikipedia sobre el mismo tema. Por otro lado, si ya tiene un amplio conocimiento de estas tecnologías, es posible que encuentre información útil (incluso, tal vez, sorprendente) en este artículo.
Más allá de los números
La tabla 1 es una comparación de las tecnologías flash NOR y NAND basada en varias métricas de rendimiento. Aunque estos números pueden variar significativamente entre los dispositivos reales, son plausibles y pueden servir como una valiosa referencia.
NOR | NAND | |
---|---|---|
Capacidad de escritura | 1 MB/s | 10 MB/s |
Capacidad de lectura | 40 MB/s | 30 MB/s |
Capacidad de borrado | 0.1 MB/s | 300 MB/s |
Erase-Rendimiento de escritura | 100 KB/s | 10 MB/s |
Granularidad de lectura | Byte | Página (4KiB típico) |
Granularidad de escritura | Byte (típico) | Página (4 KiB típico) |
Granularidad de borrado | Bloque (64 KiB típicos) | Bloque (256 KiB típicos) |
Consumo de energía de escritura | 1uJ/byte | 10nJ/byte |
Consumo de energía de lectura | 1nJ/byte | 1nJ/byte |
Consumo de energía de borrado | 600nJ/byte | 0.2nJ/byte |
Tabla 1. Características plausibles de los flashes NOR y NAND
Pero, por muy útiles que sean, las cifras sin una interpretación adecuada carecen de sentido, cuando no son francamente engañosas. Las cifras de rendimiento en bruto son un buen reclamo porque son fáciles de enunciar y entender (al menos superficialmente), pero no aportan mucha información relevante desde el punto de vista del diseño de las aplicaciones.
Ilustremos lo que queremos decir con un ejemplo concreto: el rendimiento de escritura. La tabla 1 sugiere que la escritura es mucho más rápida en NAND que en NOR. De hecho, se trata de una afirmación engañosa que aparece con demasiada frecuencia. Sin duda, hay algo de verdad en ella. Pero también es totalmente reduccionista y abre el camino a malas decisiones de diseño. Echemos un vistazo más de cerca.
La memoria flash NOR permite accesos de escritura a nivel de byte. La NAND, en cambio, tiene una granularidad de escritura mucho más gruesa. En la flash NAND, los datos sólo pueden escribirse en páginas, normalmente de 4 KiB cada vez para la NAND SLC (8 KiB o más para la NAND MLC). En el caso de un acceso de escritura pequeño (digamos 512 bytes), hay que cargar una página entera en la RAM, modificarla y volver a escribirla. Al final, se escriben más datos de los que realmente se modifican. Este fenómeno se conoce comúnmente como amplificación de la escritura. En nuestro ejemplo (muy plausible), la amplificación de escritura es de 8 (4 KiB de página/512 bytes de acceso). Con una carga de trabajo dominada por estos pequeños accesos, el rendimiento de escritura efectivo se multiplicaría por 8. Esto es mucho. Pero hay más.
Antes de que los datos puedan escribirse, un sistema de archivos (o una base de datos) debe primero encontrarlos. El proceso de búsqueda puede ser más o menos eficiente dependiendo del sistema de archivos y de la cantidad de caché disponible, entre otros factores. Aun así, cada acceso de escritura suele ir acompañado de su correspondiente acceso de lectura. En la flash NOR, los accesos de lectura son muy rápidos. Se caracterizan por una latencia casi nula y un rendimiento muy alto. Lo más importante es que los accesos de lectura se realizan a nivel de byte. Esto es especialmente beneficioso para el proceso de búsqueda de datos, ya que las estructuras internas de los sistemas de archivos suelen estar formadas por trozos de datos pequeños y dispersos.
Por otro lado, los accesos de lectura aleatorios en la flash NAND son significativamente más lentos. Y al igual que los accesos de escritura, se realizan a nivel de página. En el caso de los accesos pequeños, esto supone un cierto desperdicio, ya que hay que cargar una página entera de todos modos. Esta sobrecarga adicional, conocida como amplificación de la lectura, limita el rendimiento de la escritura en la NAND, algo que no resulta obvio a primera vista cuando se observa la Tabla 1.
Poniendo todo junto, vemos que los respectivos rendimientos netos de escritura (es decir, teniendo en cuenta la amplificación de la lectura/escritura y la sobrecarga de la búsqueda) de las tecnologías NOR y NAND no son tan diferentes como parecen indicar las cifras de rendimiento en bruto. Y lo que es más importante, deja claro que no se puede realizar una evaluación exhaustiva del rendimiento sin tener en cuenta los patrones de acceso de la aplicación, incluidos el tamaño y la distribución de los accesos en todo el conjunto de datos.
La hierba es verde, el cielo es azul, NOR es para el código, NAND es para los datos
Hay una idea errónea tenaz que escuchamos de vez en cuando en el sentido de que el flash NOR es para el código mientras que el flash NAND es para los datos. Es cierto que el flash NOR se utiliza más que el flash NAND para el almacenamiento de código. Esto se debe a dos razones principales. En primer lugar, la granularidad de acceso a nivel de bytes permite la ejecución de código en el lugar, lo cual es una ventaja indiscutible para los sistemas integrados pequeños. En segundo lugar, para tamaños de firmware pequeños o medianos (por ejemplo, de menos de 64 Mbits), la tecnología NOR simplemente tiene más sentido desde el punto de vista económico, ya que los dispositivos NAND más pequeños disponibles son significativamente más caros.
Dicho esto, muchos de nuestros clientes utilizan flash NOR para el almacenamiento de datos. Y por una buena razón. En el caso de las aplicaciones de lectura intensiva, NOR ofrece un rendimiento significativamente mayor que NAND. Incluso para aplicaciones con grandes cargas de trabajo de escritura, NOR puede ser una opción razonable. Con un acceso a nivel de byte y un alto rendimiento de lectura, la NOR es especialmente adecuada para cargas de trabajo dominadas por pequeños accesos de escritura aleatorios. Hasta un punto en el que los rendimientos netos de escritura pueden acercarse (a veces incluso superar) a los obtenidos en flash NAND. Esto es especialmente relevante para los conjuntos de datos pequeños, donde el argumento económico se suma para inclinar definitivamente la balanza a favor del flash NOR.
¿Quieres más?
Lo que hemos cubierto en este artículo es apenas la punta del iceberg. Sin embargo, esperamos haber mostrado cómo difieren las tecnologías flash NOR y NAND desde la perspectiva del diseño de aplicaciones y cómo se pueden interpretar las cifras de rendimiento en bruto para tomar mejores decisiones de diseño.
Si desea leer más sobre las tecnologías flash NOR y NAND, la evaluación del rendimiento y otros temas avanzados relacionados con el almacenamiento, el Manual del usuario de TREEspan contiene una gran cantidad de información, tanto general como específica del sistema de archivos TREEspan (TSFS).