La E/S en Flash (parte 1)
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.
Las operaciones de E/S en flash (lectura, escritura y borrado) se rigen por la exclusión mutua a nivel del plano: si se procesa una lectura no se puede escribir y hay que esperar a que la operación anterior termine, si se procesa una escritura o borrado no es posible leer y es necesario esperar también. Además, las operaciones de E/S en flash utilizan distintas granularidades:
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.
Por si fuera poco, la tecnología flash tiene una serie de problemas que pocos conocen, es lo que yo llamo los cuatro jinetes del apocalipsis flash:
Las operaciones de E/S en flash (lectura, escritura y borrado) se rigen por la exclusión mutua a nivel del plano: si se procesa una lectura no se puede escribir y hay que esperar a que la operación anterior termine, si se procesa una escritura o borrado no es posible leer y es necesario esperar también. Además, las operaciones de E/S en flash utilizan distintas granularidades:
- Lectura: es posible leer uno o varios bytes de forma muy rápida (50-150 micro-segundos).
- Escritura: es posible escribir con un tamaño fijo determinado por el tamaño de página del chip, 4K, 8K o 16K, y esta operación es algo mas lenta (200-500 micro-segundos).
- Borrado: es posible 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). Se borra a nivel de bloque, es decir, hay que borrar todas las páginas y este proceso es muy lento (hasta 2 mili-segundos).
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 el post 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 re-programar 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.
Por si fuera poco, la tecnología flash tiene una serie de problemas que pocos conocen, es 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 (ECCs).
- 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 como defectuoso y retirarlo del servicio (lógicamente hablando).
- 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 cuando 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).
Comentarios
Publicar un comentario