Como he mencionado anteriormente, una de las características principales de los dispositivos de memorias flash es que la modificación de los datos en una celda sigue el modelo “Erase before Write” y, por imposiciones en el diseño del dispositivo NAND, aunque la lectura y la escritura se realiza a nivel de página sin embargo el borrado solo puede ocurrir a nivel de bloque.

…esto no empieza mas a a ir de mal en peor…igor

Las operaciones de E/S en flash (lectura, escritura y borrado) se rigen por la exclusión mutua a nivel del plano (si leo no puedo escribir y me tengo que esperar a que la operación anterior termine, si escribo o borro no puedo leer y me tengo que esperar también) y utilizan distintas granularidades:

  • Lectura: puedo leer 1 o varios bytes de forma muy rápida (50-150 micro-segundos).
  • Escritura: puedo escribir con un tamaño fijo determinado por el tamaño de página del chip, 4K o 8K, y este proceso es algo mas lento (200-500 micro-segundos).
  • Borrado: puedo borrar pero con un tamaño fijo mucho mas grande, determinado por el tamaño de bloque o conjunto de páginas de lo forman (1MB o 2MB). Borro a nivel de bloque, es decir, tengo que borrar todas las páginas y esta operación es muy lenta (hasta 2 milisegundos).

Todo esto significa que en flash yo puedo leer con una granularidad de 1 byte, incluso puedo leer varios bytes de manera consecutiva a lo largo de varias páginas y esto es extremadamente rápido. Sin embargo, la escritura es fija a nivel de página, 8K por ejemplo, por lo que si yo solo quiero modificar un byte o 1K tengo que volver a reescribir los 8K por completo. Por si no fuera poco, en flash no existe la sobre-escritura directa del dato, hay que borrar para poder escribir de nuevo y ¡¡¡ tengo que borrar 1MB entero (128 o 256 páginas) !!!

Se hace evidente que el uso de la tecnología de almacenamiento en estado sólido en entornos empresariales es compleja y que si la tecnología flash no está gestionada correctamente puede dar rendimientos mucho peores que soluciones tradicionales basadas en disco rotacional. Basta tomar el ejemplo de un sistema de almacenamiento que sirve distintos entornos aleatorios de datos de manera concurrente, donde se están atendiendo miles de operaciones de E/S por segundo y donde una modificación del dato, o centenares, a nivel lógico (sistema de ficheros, aplicación, etc) se convierte en un proceso realmente pesado y complejo con tecnología flash.

Otro de los efectos colaterales de la tecnología es el desgaste: las celdas de memoria flash (o los FGTs) se desgastan durante el proceso de escritura y mas durante el proceso de borrado según se explicó en la entrada anterior, pero también se va debilitando con las lecturas e incluso con las operaciones que se realizan en celdas cercanas geométricamente dentro de la propia matriz (lo que a veces hace necesario que se tenga que volver a reprogramar una celda porque su información se ha ido “desvaneciendo” con las lecturas). Como mencioné en la entrada anterior, el efecto del desgaste es el fallo en la E/S sobre la celda donde también se dan situaciones en las que se crean unas zonas de atrape que atascan los electrones en la puerta y complican o hacen imposible el borrado de la misma.

4_Jinetes

Por si fuera poco, además la tecnología flash cuenta con algunas imperfecciones, o lo que yo llamo los cuatro jinetes del apocalipsis flash:

  • Perturbaciones por programación o escritura: debido a la disposición NAND es común que haya celdas sobre las que no se está programando pero que están recibiendo cierto voltaje (estrés). Estas celdas estresadas se encuentran en el mismo bloque que aquellas que se están programando, suelen estar cercanas a éstas de hecho. Esto produce una perturbación sobre celdas que se supone que no se han seleccionado para su programación o escritura que hace que haya que volver a borrarlas para retornarlas a un estado correcto (y ya sabemos que implica esto). Esta imperfección en el funcionamiento se corrige con mecanismos de corrección de errores (ECC).
  • Perturbaciones por lectura: al igual que con la imperfección anterior, celdas contiguas o cercanas a aquellas que se están leyendo en un bloque reciben estrés por elevado voltaje ajeno provocando el problema de perturbación que, de nuevo, se corrige borrando la celda.
  • Resistencia al desgaste: como he mencionado en el párrafo anterior, el desgaste hace que haya cargas atrapadas en el dieléctrico provocando una perturbación y haciendo que el borrado falle. En el caso de no poderse corregir re-intentando el borrado hay que marcar el bloque y retirarlo.
  • Retención del dato:  Con el paso del tiempo la carga varía porque la puerta flotante empieza a perder electrones (se le escapan) y cuendo se llega a un umbral mínimo se marca error por retención. En este caso el dispositivo de control del flash (un FPGA generalmente) sabe que la celda no está dañada y que el bloque se marcará par su borrado y disponibilidad para programación (habiendo re-ubicado el dato tras su corrección previamente).

Por todo esto resulta evidente que el tratamiento de errores tiene que ser distinto al utilizado en tecnología de disco rotacional: en flash es mas común que solo fallen ciertas regiones o páginas y que además lo hagan incluso justo después de haber reprogramado una celda por lo que hay que implementar los mecanismos necesarios para detectar estas situaciones y corregirlas sobre la marcha (fallos a nivel de bit o múltiple bit). Por el contrario es rara la situación donde falla todo el dispositivo (al contrario que con un disco rotacional).

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s