Programación y organización del medio flash

Ya se ha visto en el post anterior cómo se podría leer el estado de la celda o transistor mediante la medición de la diferencia de potencial entre la fuerte o surtidor y el drenador; también se ha visto que los distintos tipos de codificación posibles daban lugar a distintos tipos de tecnologías flash NAND (2D): SLC, MLC, TLC… Sin embargo, no todo en la vida es de color de rosa y a partir de ahora voy a exponer cómo la manipulación y gestión de la tecnología flash tiene una serie de complejidades.

Programación

Para empezar, la modificación de los datos en una celda de flash no es una operación directa ya que antes de poder re-programar el FGT o la celda ésta tiene que haberse borrado previamente. Eso es lo que se conoce como comportamiento “erase before write“. Los detalles de estas dos operaciones que siempre van de la mano formando lo que se conoce como ciclo de borrado/programación (o en su abreviación más común P/E cycle) son:
  • Borrado: se utilizan técnicas como el quantum tunneling o el tunnel release (según la teoría de Fowler-Nordheim) aplicando un elevado voltaje sobre el electrodo de la puerta de control hasta conseguir expulsar los electrones atrapados en la puerta flotante. Es importante destacar que, a día de hoy, estas técnicas necesitan del orden de un par de mili-segundos para completarse.
  • Programación: se utilizan técnicas como la de tunnel injection o hot electron injection, según la misma teoría de Fowler-Nordheim, donde se aplica una determinada carga en sentido surtidor-drenador y de puerta de control a surtidor simultáneamente para conseguir que los electrones queden atrapados en la puerta flotante. Una operación de escritura puede llevar unos 200 micro-segundos.
Llegado a este punto no quería dejar pasar por alto otro de los inconvenientes que presenta la tecnología flash: cada operación de programación y en especial la de borrado producen un daño o desgaste progresivo del dieléctrico (la capa de dióxido de silicio que aísla la puerta flotante) de manera que la puerta flotante empieza a no poder retener los electrones en un umbral mínimo, lo que da lugar a errores, o también creando zonas de atrape que atascan los electrones en la puerta.

Estoy seguro de que el ávido lector se estará empezando a cuestionar la tecnología: si para poder escribir o sobre-escribir un dato en flash es necesario realizar dos operaciones a nivel del dispositivo (borrado y escritura) que suponen una latencia de unos 2 mili-segundos ¿dónde está la gran diferencia en los tiempos de respuesta con respecto a los sistemas tradicionales de almacenamiento? ¿qué se hace para mejorar esta latencia?.

Aquí es donde juega un papel fundamental cómo los distintos fabricantes de almacenamiento que utilizan tecnología flash implementan mecanismos adicionales para el tratamiento de la misma. Aunque a primera vista la respuesta pueda parecer muy simple: intentar siempre que las escrituras recaigan sobre celdas ya borradas previamente, la realidad es algo más compleja.

Organización de la información

Empecemos por ver cómo se organiza la información internamente en un dispositivo flash: el chip de memoria flash (ese rectángulo negro rodeado de cientos de minúsculos conectores soldados a la placa del SSD, lápiz USB o dispositivo flash) está dividido en varias secciones o unidades de ejecución independientes llamadas die, generalmente entre dos y cuatro por chip, que permiten el proceso independiente de operaciones de E/S y de informe de estado. Aquí tenemos un chip SLC de TOSHIBA de 1Gb (algo antiguo ya):
Cada die se encuentra dividido a su vez en varios planos que, de nuevo, permiten el proceso concurrente de operaciones dentro de un mismo die. Aquí tenemos un die de 8GB perteneciente a un chip MLC NAND de 16GB con tecnología de 25nm formado por cuatro planos:


Cada plano está formado por un conjunto de bloques, que es la unidad mínima de borrado (y ojo que esto es muy importante por lo que veremos a continuación). Los bloques, dependiendo del tipo de chip, suelen ser generalmente de 512KB, 1MB o 2MB. El bloque está compuesto por un conjunto de páginas o celdas, que son la unidad mínima de programación o de lectura/escritura. El tamaño de página generalmente ha sido de 4K o múltiplos de éste, en la gran mayoría de chips flash de última generación las páginas ya son de 8K o 16K y los bloques están formados por 256 o 512 páginas, aunque esto es algo que ha ido aumentando conforme se ha ido reduciendo el nivel de integración.

A modo de ejemplo, la siguiente figura muestra la organización de un plano con sus bloques de 512KB formado por 128 páginas de 4K:


Como se puede ver, dentro de cada página de memoria flash existe un área de repuesto, oculta y no direccionable directamente, que se utiliza para CRCs con el fin de garantizar una mayor fiabilidad y protección del dato.

Comentarios

Entradas populares de este blog

Apache Spark 2.4: hacia la analítica de datos unificada

¿Qué es NVMe y porqué es clave?