Seguramente habréis leído o escuchado alguna vez el concepto de la memoria ECC, en especial si hablamos de procesadores para servidor, donde este tipo de memorias son utilizadas. Pero, ¿en qué se diferencian de las que tradicionalmente se utilizan en ordenador?, ¿Se pueden instalar en un PC de escritorio o uno portátil?, ¿Qué significan las siglas ECC? Os lo explicamos.
En el mundo de los servidores se utiliza un tipo de memoria RAM que normalmente viene acompañada con las siglas ECC, además se hace uso de lo que llamamos memoria registrada, la cual se presenta en forma de módulos RDIMM. Por lo que en este artículo no os vamos a describir el hardware que normalmente encontraréis en un PC, a no ser que tengáis una estación de trabajo con una CPU del tipo HEDT o trabajéis a diario con servidores.
¿Qué es la memoria RAM registrada o RDIMM?
Las memorias RAM registradas son diferentes a las convencionales por el detalle de tener un registro que se sitúa entre el módulo de memoria, llamado en este caso RDIMM, y el controlador de memoria del sistema. Dicho registro es una memoria que lo que hace es almacenar la siguiente información:
- Direcciones de memoria a la que acceder.
- Comandos (leer, escribir o copiar)
- Velocidad de reloj con la que se comunica con la RAM
Se diferencia en su funcionamiento respecto a los módulos DIMM convencionales en el hecho de que mientras los datos se envían por los clásicos pines para la comunicación de datos, lo que son los comandos que permiten el acceso a la memoria se realizan utilizando este registro. Esto se hace para tener una mayor integridad en la señal y bajar la carga eléctrica del controlador de memoria, siendo una de las ventajas derivadas de esto la capacidad para soportar más módulos de memoria en el sistema.
No obstante los módulos RDIMM son más lentos en su uso que los módulos convencionales, ya que se añade una etapa adicional por el acceso al registro, lo que se traduce en un ancho de banda mucho menor y una latencia mucho mayor en los RDIMM. No obstante los módulos DIMM que se utilizan en PC están pensados para su uso en PC de escritorio donde no suele haber más de dos canales de acceso como es el caso de las estaciones de trabajo que se basan en CPU HEDT y también en servidores.
¿Qué es el ECC en memoria RAM?
Hemos de tener en cuenta que la RAM al ser memoria volátil depende de la electricidad para mantener los datos que almacena y esto hace que sea vulnerable a la pérdida de los mismos. En especial si tenemos en cuenta que las que utilizamos en nuestros PC son del tipo DRAM y por tanto necesitan un refresco de la carga cada cierto tiempo, esto conlleva a que sean vulnerables a las interferencias magnéticas y eléctricas.
Habitualmente los bits de cada celda en una memoria RAM no suelen cambiar, ya que hay una distancia lo suficientemente grande en voltaje entre ambos valores como para que no se dé un salto de un valor a otro, no obstante a medida que se lanzan nuevas generaciones de memoria van bajando el voltaje de diferencia y es donde se hacen necesarios métodos de corrección de error o ECC con tal de mantener la información.
Pero para hacernos una idea vamos a tomar un simple valor en binario, el 011101011 que en decimal equivale al número 235.
- Si el primer bit cambia, 111101011, entonces el valor pasa a ser 491.
- Si es el segundo bit el que cambia, 001101011, el valor se convierte en 107.
- Un cambio en el tercer bit convierte el valor en 011001011 y por tanto en 203.
Por lo que se puede ver un simple cambio en los valores de la RAM puede cambiar el valor de un dato en una dirección de memoria y hemos de tener en cuenta que no solo almacenan datos, sino también instrucciones y si pensamos en servidores hemos de tener en cuenta que estos están pensados para funcionar 24 horas al día y 7 días a la semana, es decir, perpetuamente. Se ha de tener en cuenta que la DRAM no se va a mantener estable, por lo que a medida que va pasando el tiempo van creciendo los errores en la misma que pueden llevar a una caída generalizada del sistema.
El código de Hamming
El método utilizado para corregir los errores en la señal de la memoria ECC se le llama código Hamming, este no se trata de ningún tipo de algoritmo ejecutado por la CPU, sino que es realizado en el propio controlador de memoria que se encuentra en el procesador con soporte para este tipo de RAM. Su nombre se debe al matemático estadounidense Richard W. Hamming que es quien lo desarrolló.
¿Cómo funciona? La idea del código Hamming consiste en añadir bits de redundancia de cara a la corrección de errores a través de comparar el valor de los bits de paridad. Para hacerlo lo que se hace es contar los bits desde la izquierda a derecha y se numeran, no según el valor que almacenan, sino que se tiene en cuenta su posición.
Aquellos bits que en posición corresponden a una potencia de 2 (1, 2, 4, 8 …) son marcados como bits de paridad, mientras que el resto de bits se marcan como bits solo de datos. Los bits de paridad se duplican al final de la cadena de bits, de ahí a que sean llamados también bits de redundancia, por el hecho de estar repetidos. Para comprobar la integridad de los datos lo que se hace es compararlos entre sí para comprobar la integridad de la señal que se almacena en la memoria.
Si la operación es de escritura en memoria:
- La CPU envía la información al controlador de memoria donde le indica que dirección de memoria quiere modificar y el dato que quiere escribir.
- El controlador genera el código ECC y lo envía a la memoria.
- El dato se almacena en memoria.
En cambio si es de lectura desde memoria.
- La CPU hace una petición a una dirección de memoria al controlador que hace la petición a la RAM.
- El controlador ejecuta el código de Hamming para realizar la comprobación, en el caso de los datos sean correctos entonces se envían de vuelta a la CPU, en el caso de que no sea correcta se realiza de manera automática el proceso de corrección de errores.
Módulos de memoria RAM con ECC
Los módulos de memoria ECC tengan más chips de memoria pese a tener la misma capacidad de almacenamiento, dado que una parte de los bits se utilizan para la corrección de errores. Se ha de tener en cuenta que en la memoria ECC la paridad no se ejecuta en cada byte. Lo que se hace es utilizar bloques de 9 bits por byte, por lo que al final se acaba teniendo 64 bits para almacenar datos y 8 como bits de paridad.
Esto conlleva además que el controlador de memoria en el procesador que se comunica en la RAM ha de ser capaz de generar el código Hamming y dado que se suele utilizar la memoria del tipo ECC en las CPU que son más avanzadas que las de escritorio esto se traduce en que el soporte de este tipo de memoria requiere no solo controladores de memoria especiales, sino también placas base especiales que soportan este tipo de memoria. Dado que un PC doméstico no estará perpetuamente encendido y tendrá reinicios de forma regular no se utiliza memoria ECC
Con esto llegamos a la parte final del artículo que son los módulos RDIMM con ECC, los cuales obviamente combinan las características de los dos tipos de memoria RAM y con ello todas sus ventajas y desventajas. A día de hoy dado que todas las memorias RDIMM son para servidor y HEDT y dicho mercado requieren del Error Correction Code no existe ni un solo módulo de memoria RDIMM que no sea ECC.