La memoria ECC y su papel en la detección y corrección de errores
En muchos sectores, la seguridad en la transmisión de datos es una de las principales prioridades. De la misma forma que un servicio de alojamiento web almacena los datos de sus clientes, las empresas que intercambian datos importantes en procesos comerciales llevan a cuestas la gran responsabilidad de garantizar su integridad. En el caso que se produzcan errores en la memoria no solo se corre el riesgo de grandes pérdidas financieras, sino que, en el peor de los casos, se presenta un debilitamiento significativo de su posicionamiento en el mercado. En este contexto, es complicado valorar la tendencia a un aumento constante del espacio de almacenamiento, pues a mayor capacidad, mayor probabilidad de error. Es por esto que aquellos entornos de servidor y de trabajo que necesiten mantener sus datos intactos, concentran grandes esfuerzos en lograr un control total sobre ellos. Así, para protegerse, por ejemplo, de errores ocasionados por un solo bit, en lugar de utilizar una memoria común, se implementa una memoria ECC.
RAM ECC: antecedentes y definición
La memoria RAM, Random access memory (en español, memoria de acceso aleatorio), es un medio de almacenamiento utilizado como memoria de trabajo en los sistemas informáticos. También conocida como memoria principal, es la responsable de la ejecución de los programas, incluyendo sus respectivos datos de usuario. En la memoria principal, los contenidos son almacenados en forma de código binario, en otras palabras, están compuestos por unos y ceros para que el ordenador pueda procesarlos. Los dígitos binarios se conocen como bits. Factores como
- fluctuaciones del voltaje,
- overclocking,
- módulos de memoria defectuosos y viejos
- o radiación de alta energía
pueden generar un error de bit, modificando, como consecuencia, un registro en la memoria. Estos fallos de bit se presentan cuando un bit toma el valor falso, es decir “1” en vez de “0” y viceversa. En muchas aplicaciones, las consecuencias de estos fallos son apenas perceptibles. Por ejemplo, si aparece un error de bit cuando se trabaja con un programa de edición de imágenes, puede que uno de los pixeles reciba un color diferente al esperado, un detalle mínimo que no es detectable por el ojo humano. Sin embargo, el panorama es diferente en el caso de bases de datos o aplicaciones de cálculo complejas donde el más mínimo error de bit puede tener consecuencias desastrosas. En algunos casos, estos errores pueden ocasionar fallos en el sistema, especialmente cuando tienen lugar en una porción de memoria que es utilizada por el sistema operativo.
La solución más sencilla a este problema se llama Error Correcting Code (ECC), un código que tiene la capacidad de detectar y corregir errores de bit. Además, el ECC puede determinar errores de dos bits (aunque estos no se produzcan muy a menudo). Para aprovechar las ventajas de este proceso de corrección de errores, los módulos de memoria RAM tradicionales son extendidos mediante un chip de memoria ECC. Es por esto que se habla entonces de RAM ECC.
¿Cómo funciona el método de corrección de errores?
El método de detección y corrección de errores en los módulos de memoria RAM fue desarrollado en 1950 por el matemático Richard Hamming, por eso el código base recibe el nombre de código Hamming. La peculiaridad de este código es el uso de los llamados bits de paridad, también conocidos como bits de control, que crean diferentes grupos de prueba con los bits útiles. El requisito para poder utilizar el código Hamming en la corrección de errores es contar con un código binario de al menos siete dígitos compuesto por tres bits de paridad (P), cuatro bits útiles (U) y tres grupos de prueba. Los bits de paridad se establecen en las posiciones cuyo número es potencia de 2, en este caso, 1, 2 y 4:
Los grupos de prueba de bits de paridad son comparados con los que fueron almacenados y, cuando el número total de bits con el valor “1” es impar, quiere decir que hay un error. Así, por ejemplo, en la secuencia de bits 0001001 el código de Hamming determina los fallos de la siguiente manera:
- El grupo de prueba del bit de paridad 1 (1, 3, 5, 7) contiene un bit con el valor 1 y, por tanto, es erróneo.
- El grupo de prueba del bit de paridad 2 (2, 3, 5, 7) contiene un bit con el valor 1 y, por tanto, es erróneo.
- El grupo de prueba del bit de paridad 3 (4, 5, 6, 7) contiene dos bits con el valor 1 y, por tanto, es correcto.
Debido a que la posición 3 está presente en los dos primeros grupos de prueba, es allí donde reside el error. Por lo tanto, la secuencia correcta de bits es 0011001.
¿Es recomendable utilizar RAM ECC para fines privados?
La función principal del ECC es proteger la memoria principal de errores ocasionados por un solo bit y, en gran manera, servir como herramienta contra una posible manipulación del espacio de almacenamiento de datos. Asimismo, está estrechamente relacionado con la reducción de fallos del sistema, algo que resulta de gran utilidad para servicios o aplicaciones que tengan que garantizar alta disponibilidad y que cuenten con una amplia gama de usuarios. Estas ventajas se encargan de que la demanda de memorias ECC como solución de almacenamiento RAM para servidores sea muy alta y que su uso sea una necesidad para toda entidad informática de alto rendimiento.
Sin embargo, en comparación con las memorias RAM Non ECC, las memorias ECC tienen algunas desventajas. En primer lugar, los módulos de memoria de corrección de errores son un poco más costosos que los módulos de memoria habituales. Además, el proceso de identificación de errores tiene como consecuencia que el rendimiento del sistema se reduzca, en promedio, en aproximadamente un dos por ciento. Adicionalmente, la RAM ECC no es soportada por todas las placas base. Por lo tanto, si quieres utilizar una memoria ECC en un tablero normal, es recomendable comprobar la compatibilidad y considerar la relación costes-beneficio previamente. Recuerda que no es posible combinar una memoria ECC con una Non ECC y que, por defecto, todo servidor y todo ordenador está provisto de un módulo de memoria ordinario sin corrección de errores.