Seguramente habréis escuchado (o leído) hablar sobre el código de corrección de errores ECC en muchos componentes de hardware, todos relacionados con la memoria (sea RAM o de almacenamiento), aunque muy pocos entienden su importancia. Por este motivo, en este artículo os vamos a explicar cómo funciona el ECC en una controladora SSD, y como gracias a él se consigue aumentar la longevidad y marcar una gran diferencia en la vida útil de los SSD.
Todo dispositivo que utilice memoria NAND Flash necesita un código de corrección de errores aleatorios de bits (conocidos como «soft» errors, o errores blandos). Esto se debe a que en el interior de un chip NAND se produce mucho ruido eléctrico y los niveles de señal de los bits que pasan a través de una cadena de chips NAND son muy débiles.
Una de las formas en las que la memoria NAND ha podido convertirse en la más barata de todas es porque requiere que la corrección de errores se realice desde un elemento fuera del propio chip NAND; en el caso de los SSD, el ECC se realiza en la controladora.
Cómo funciona el ECC en una controladora SSD
Esta misma corrección de errores también ayuda a corregir errores de bits debidos al desgaste de las propias celdas de memoria. El desgaste puede hacer que los bits se «atasquen» en un estado u otro (conocido como «hard» error, o error duro) y puede aumentar la frecuencia de los «soft» errors.
Aunque no es un concepto que tenga demasiada amplitud, la resistencia de la memoria flash es la medida de la cantidad de ciclos de borrado / escritura que un bloque de flash puede soportar antes de que comiencen a aparecer los «hard» errors. Muy a menudo estas fallas son solo en bits individuales, y es muy raro que falle todo el bloque. Con un número lo suficientemente alto de borrado / escritura, la tasa de errores «soft» también aumenta debido a otra serie de mecanismos en el propio SSD.
Si se puede usar ECC para corregir estos errores «hard» y que los errores «soft» no incrementen, entonces se alarga muchísimo la vida de todo el bloque, mucho más allá de la resistencia especificada por el fabricante.
Pongamos un ejemplo: digamos que un chip NAND sin usar tiene suficientes errores «soft» como para requerir 8 bits de ECC, es decir, cada página leída puede tener hasta 8 bits que se han corrompido aleatoriamente (generalmente por el ruido eléctrico del que hablábamos al principio). El ECC que se usa en este chip puede corregir errores de 12 bits, así que para que el ECC no pudiera solventar este problema deberíamos encontrarnos 8 errores «soft» relacionados con el ruido eléctrico mas otros 5 «soft» debidos al desgaste.
Ahora, los fabricantes de memoria flash garantizan que la primera de esas 5 fallas ocurrirá en algún momento después de la especificación de resistencia del SSD. Esto significa que ningún bit fallará por desgaste hasta que se sobrepasen los ciclos de borrado / escritura que especifica el fabricante. Ahora bien, hay que tener en cuenta que las especificaciones no son lo suficientemente precisas como para predecir cuándo fallará el siguiente bit, y realmente se pueden producir varios miles de ciclos de borrado / escritura por encima de la especificación para que esto suceda; recordemos que el fabricante garantiza que no sucederá antes de X ciclos, pero no cuándo sucederá una vez que se sobrepasen.
Esto significa que puede pasar muchísimo tiempo antes de que un bloque se vuelva tan corrupto que necesite ser retirado del servicio (y además para ello los SSD suelen contar con bloques «extra» para sustituir los corruptos), lo que a su vez quiere decir que la resistencia del bloque con corrección de errores podría ser muchas veces más grande que la resistencia especificada, dependiendo del número de errores en exceso que el ECC esté diseñado para corregir.
¿Qué impacto tiene el código de corrección de errores en un SSD?
Como hemos explicado antes, la memoria flash es tan barata porque no incluye el ECC en los propios chips, sino que se integra en otro hardware externo a éstos, y como supondréis esto tiene un precio. Un ECC más sofisticado requiere mayor potencia de procesamiento en la controladora y puede ser más lento si los algoritmos no son muy modernos. Además, la cantidad de errores que se pueden corregir dependerán de cómo de grande sea el sector de memoria que se está corrigiendo, así que es probable que una controladora SSD con un algoritmo ECC sofisticado use muchos recursos, reduciendo el rendimiento general del SSD. Estas mejoras, además, hacen que la controladora sea más cara.
Los algoritmos ECC tiene su propio estado matemático dependiendo de la controladora (en otras palabras, no hay un estándar), e incluso las codificaciones más básicas de ECC (Reed-Solomon y LDPC) son bastante complicadas de entender. Cuando alguien habla sobre el límite de Shannon (el número máximo de bits que se pueden corregir), es una magnitud que como no te la de el fabricante en las especificaciones técnicas, es extremadamente complicada de calcular.
Simplemente quedaos con el dato: más bits de corrección conducen a una vida útil más larga para el SSD, pero también tiene cierto impacto en el rendimiento, o incluso en el precio del producto al necesitar una controladora más potente.