# Nivelación del desgaste

La nivelación del desgaste es una técnica para prolongar la vida útil de algunos tipos de medios de almacenamiento informático borrables, como la memoria flash, que se utiliza en las unidades de estado sólido (SSD) y las memorias flash USB, y la memoria de cambio de fase. Existen varios mecanismos de nivelación del desgaste que proporcionan distintos niveles de mejora de la longevidad en dichos sistemas de memoria.
Western Digital ha utilizado el término nivelación de desgaste preventiva (preemptive wear leveling) (PWL) para describir su técnica de conservación utilizada en unidades de disco duro (HDD) diseñadas para almacenar datos de audio y vídeo. Sin embargo, en el contexto de este artículo, las HDD no suelen ser dispositivos con nivelación de desgaste.

## Fundamento

Las memorias EEPROM y flash tienen segmentos que se pueden borrar individualmente, cada uno de los cuales puede someterse a un número limitado de ciclos de borrado antes de dejar de ser fiable. Suele rondar los 3.000/5.000 ciclos, pero muchos dispositivos flash tienen un bloque con una vida útil especialmente prolongada de más de 100.000 ciclos que el controlador de memoria flash puede utilizar para realizar un seguimiento del desgaste y el movimiento de datos entre segmentos. Los soportes ópticos borrables, como los CD-RW y DVD-RW, tienen una vida útil de hasta 1.000 ciclos (100.000 ciclos en el caso de los DVD-RAM).
La nivelación del desgaste intenta superar estas limitaciones organizando los datos de forma que los borrados y reescrituras se distribuyan uniformemente por el soporte. De este modo, ningún bloque de borrado falla prematuramente debido a una alta concentración de ciclos de escritura. En la memoria flash, un único bloque del chip está diseñado para durar más que los demás, de modo que el controlador de memoria pueda almacenar datos operativos con menos posibilidades de que se corrompan.
Los sistemas de archivos convencionales, como FAT, UFS, HFS/HFS+, EXT y NTFS, se diseñaron originalmente para discos magnéticos y, como tales, reescriben muchas de sus estructuras de datos (como sus directorios) repetidamente en la misma zona. Cuando estos sistemas se utilizan en soportes de memoria flash, esto se convierte en un problema. El problema se agrava por el hecho de que algunos sistemas de archivos rastrean las horas de último acceso, lo que puede provocar que los metadatos de los archivos se reescriban constantemente en el mismo lugar.

## Tipos

Existen tres tipos básicos de mecanismos de nivelación del desgaste utilizados en los dispositivos de almacenamiento de memoria flash:

### Sin nivelación de desgaste

Un sistema de almacenamiento de memoria flash sin nivelación de desgaste no durará mucho si se escriben datos en la memoria flash. Sin nivelación de desgaste, el controlador flash subyacente debe asignar permanentemente las direcciones lógicas del sistema operativo (SO) a las direcciones físicas de la memoria flash. Esto significa que cada escritura en un bloque previamente escrito debe primero leerse, borrarse, modificarse y volver a escribirse en la misma ubicación. Este enfoque consume mucho tiempo y las ubicaciones escritas con frecuencia se desgastarán rápidamente, mientras que otras ubicaciones no se utilizarán en absoluto. Una vez que unos cuantos bloques llegan al final de su vida útil, un dispositivo de este tipo se vuelve inoperable.

### Nivelación dinámica del desgaste

El primer tipo de nivelación de desgaste se denomina nivelación dinámica de desgaste y utiliza un mapa para vincular direccionamiento de bloque lógico (LBA) del SO a la memoria flash física. Cada vez que el sistema operativo escribe datos de sustitución, el mapa se actualiza de modo que el bloque físico original se marca como datos no válidos y se vincula un nuevo bloque a esa entrada del mapa. Cada vez que se reescribe un bloque de datos en la memoria flash, se escribe en una nueva ubicación. Sin embargo, los bloques de memoria flash que nunca reciben datos de sustitución no sufrirían ningún desgaste adicional, por lo que el nombre procede únicamente de los datos dinámicos que se reciclan. Un dispositivo de este tipo puede durar más que uno sin nivelación de desgaste, pero hay bloques que siguen activos aunque el dispositivo ya no sea operativo.

### Nivelación estática del desgaste

El otro tipo de nivelación de desgaste se denomina nivelación estática de desgaste, que también utiliza un mapa para vincular los LBA a las direcciones de memoria física. La nivelación de desgaste estática funciona igual que la dinámica, con la diferencia de que los bloques estáticos que no cambian se desplazan periódicamente, de modo que estas celdas de bajo uso pueden ser utilizadas por otros datos. Este efecto de rotación permite que una SSD siga funcionando hasta que la mayoría de los bloques estén cerca del final de su vida útil.

### Nivelación global del desgaste

La nivelación del desgaste, tanto dinámica como estática, se aplica a nivel local. Esto significa simplemente que, en un producto multichip, cada chip se gestiona como un único recurso. El número de bloques defectuosos en los distintos chips de una memoria flash NAND varía: un chip determinado podría tener todos sus bloques de datos desgastados mientras que otro chip del mismo dispositivo podría tener todos sus bloques aún activos. La nivelación global del desgaste resuelve este problema gestionando todos los bloques de todos los chips de la memoria flash juntos, en un único grupo. Garantiza que todas las celdas de todos los chips del producto se desgasten por igual.

### Comparación

La siguiente tabla compara la nivelación de desgaste estática y dinámica:
| Ítem | Estática | Dinámica |
| Resistencia | Mayor esperanza de vida | Menor esperanza de vida |
| Rendimiento | Más lento | Más rápido |
| Complejidad del diseño | Más complejo | Menos complejo |
| Uso típico | SSD, unidades flash industriales | Unidades flash de consumo |

## Técnicas

Existen varias técnicas para prolongar la vida útil de los soportes:
* Se puede mantener una suma de comprobación o un código de corrección de errores para cada bloque o sector con el fin de detectar errores o corregirlos.
* También se puede mantener un pool de espacio de reserva. Cuando un bloque o sector falla, las futuras lecturas y escrituras en él pueden ser redirigidas a un sustituto en ese pool.
* Los bloques o sectores del soporte pueden rastrearse en una cola de uso menos frecuente (LFU). Las estructuras de datos de la cola en sí deben almacenarse fuera del dispositivo o de forma que el espacio que utilicen esté nivelado por desgaste o, en el caso de la memoria flash, en un bloque con una vida útil especialmente prolongada. Sin embargo, los algoritmos de caché habituales están diseñados para gestionar el flujo de datos que entran y salen de las cachés basadas en RAM, por lo que no son directamente adecuados para los dispositivos de almacenamiento basados en flash, ya que tienen una naturaleza asimétrica: las lecturas suelen ser mucho más rápidas que las escrituras, y las operaciones de borrado sólo pueden realizarse de un "bloque" cada vez.
* Recogida de basura
En las tarjetas Secure Digital y las memorias USB, las técnicas se implementan en hardware mediante un microcontrolador integrado. En estos dispositivos, la nivelación del desgaste es transparente y pueden utilizarse sistemas de archivos convencionales como FAT.
La nivelación del desgaste también puede implementarse en software mediante sistemas de archivos especiales como JFFS2 y YAFFS en soportes flash o UDF en soportes ópticos. Los tres son sistemas de archivos con estructura de registro en el sentido de que tratan sus soportes como registros circulares y escriben en ellos en pasadas secuenciales. Los sistemas de archivos que implementan estrategias de copia en escritura (COW), como ZFS, también implementan una forma de nivelación de desgaste.