La memoria con código de corrección de errores (memoria ECC) es un tipo de almacenamiento de datos informáticos que utiliza un código de corrección de errores (ECC) para detectar y corregir la corrupción de datos de n bits que se produce en la memoria.

Normalmente, la memoria ECC mantiene un sistema de memoria inmune a errores de un solo bit: los datos que se leen de cada palabra son siempre los mismos que los datos que se habían escrito en ella, incluso si uno de los bits realmente almacenados ha cambiado al estado incorrecto. La mayoría de las memorias no ECC no pueden detectar errores, aunque algunas memorias no ECC con soporte de paridad permiten la detección pero no la corrección.

La memoria ECC se utiliza en la mayoría de los ordenadores donde la corrupción de datos no puede tolerarse, como aplicaciones de control industrial, bases de datos críticas y cachés de memoria de infraestructura.

Antecedentes: errores de memoria Concepto Los códigos de corrección de errores protegen contra la corrupción de datos no detectada y se utilizan en ordenadores donde dicha corrupción es inaceptable, por ejemplo, en aplicaciones de cálculo científico y financiero, o en servidores de bases de datos y archivos. ECC también puede reducir el número de bloqueos en aplicaciones de servidor multiusuario y sistemas de máxima disponibilidad.

La interferencia eléctrica o magnética dentro de un sistema informático puede provocar que un solo bit de la memoria de acceso aleatorio dinámica (DRAM) cambie espontáneamente al estado opuesto. Inicialmente se pensó que esto se debía principalmente a las partículas alfa emitidas por contaminantes en el material de empaquetado de los chips, pero las investigaciones han demostrado que la mayoría de los errores blandos puntuales en los chips de DRAM se producen como resultado de la radiación de fondo, principalmente neutrones de secundarios de rayos cósmicos, que pueden cambiar el contenido de una o más celdas de memoria o interferir con la circuitería utilizada para leer o escribir en ellas.Single Event Upset at Ground Level, Eugene Normand, Member, IEEE, Boeing Defense & Space Group, Seattle, WA 98124-2499 Por lo tanto, las tasas de error aumentan rápidamente con la altitud; por ejemplo, en comparación con el nivel del mar, la tasa de flujo de neutrones es 3,5 veces mayor a 1,5 km y 300 veces mayor a 10-12 km (la altitud de crucero de los aviones comerciales). Como resultado, los sistemas que operan a grandes altitudes requieren disposiciones especiales para la fiabilidad.

Como ejemplo, la nave espacial Cassini–Huygens, lanzada en 1997, contenía dos grabadores de vuelo idénticos, cada uno con 2,5 gigabits de memoria en forma de matrices de chips de DRAM comerciales. Debido a la funcionalidad EDAC incorporada, la telemetría de ingeniería de la nave informaba del número de errores de un solo bit por palabra (corregibles) y de errores de doble bit por palabra (incorregibles). Durante los primeros 2,5 años de vuelo, la nave informó de una tasa de error de un solo bit casi constante de unos 280 errores por día. Sin embargo, el 6 de noviembre de 1997, durante el primer mes en el espacio, el número de errores aumentó en más de un factor de cuatro en ese único día. Esto se atribuyó a un evento de partículas solares que había sido detectado por el satélite GOES 9.Gary M. Swift and Steven M. Guertin. "In-Flight Observations of Multiple-Bit Upset in DRAMs". Jet Propulsion Laboratory

Hubo cierta preocupación de que, a medida que la densidad de la DRAM aumentara aún más, y por tanto los componentes de los chips se hicieran más pequeños, mientras que las tensiones de funcionamiento siguieran disminuyendo, los chips de DRAM se vieran afectados por esta radiación con mayor frecuencia, ya que las partículas de menor energía podrían cambiar el estado de una celda de memoria. Por otro lado, las celdas más pequeñas son objetivos más pequeños, y los avances hacia tecnologías como SOI pueden hacer que las celdas individuales sean menos susceptibles, contrarrestando o incluso invirtiendo esta tendencia. Estudios recientesBorucki, "Comparison of Accelerated DRAM Soft Error Rates Measured at Component and System Level", 46th Annual International Reliability Physics Symposium, Phoenix, 2008, pp. 482–487 demuestran que las alteraciones de un solo evento debidas a la radiación cósmica han disminuido drásticamente con la geometría del proceso, y las preocupaciones anteriores sobre el aumento de las tasas de error de las celdas de bits no tienen fundamento.

Tasas de error en el mundo real y consecuencias Los trabajos publicados entre 2007 y 2009 mostraron tasas de error muy variables, con más de 7 órdenes de magnitud de diferencia, que van desde 10−10 error/(bit·h), aproximadamente un error de bit por hora por gigabyte de memoria, hasta 10−17 error/(bit·h), aproximadamente un error de bit por milenio por gigabyte de memoria.Borucki, "Comparison of Accelerated DRAM Soft Error Rates Measured at Component and System Level", 46th Annual International Reliability Physics Symposium, Phoenix, 2008, pp. 482–487* En la conferencia SIGMETRICS/Performance '09 se presentó un estudio a gran escala basado en el gran número de servidores de Google. La tasa de error real encontrada fue varios órdenes de magnitud superior a la de los estudios anteriores a pequeña escala o de laboratorio, con entre 25.000 (2,5×10−11 error/(bit·h)) y 70.000 (7,0×10−11 error/(bit·h), o 1 error de bit por gigabyte de RAM cada 1,8 horas) errores por cada mil millones de horas de dispositivo por megabit. Más del 8% de los módulos de memoria DIMM se vieron afectados por errores al año.

La consecuencia de un error de memoria depende del sistema. En sistemas sin ECC, un error puede provocar un bloqueo o una corrupción de datos; en sitios de producción a gran escala, los errores de memoria son una de las causas más comunes de fallos de hardware en las máquinas.* Los errores de memoria pueden causar vulnerabilidades de seguridad. Un error de memoria puede no tener consecuencias si cambia un bit que no provoca un mal funcionamiento observable ni afecta a los datos utilizados en los cálculos o guardados. Un estudio de simulación de 2010 demostró que, para un navegador web, solo una pequeña fracción de los errores de memoria causaban corrupción de datos, aunque, como muchos errores de memoria son intermitentes y están correlacionados, los efectos de los errores de memoria eran mayores de lo que cabría esperar para errores blandos independientes.

Algunas pruebas concluyen que el aislamiento de las celdas de memoria DRAM puede ser sorteado por efectos secundarios no deseados de accesos especialmente diseñados a celdas adyacentes. Así, el acceso a los datos almacenados en la DRAM hace que las celdas de memoria pierdan sus cargas e interactúen eléctricamente, como resultado de la alta densidad de celdas en la memoria moderna, alterando el contenido de filas de memoria cercanas que en realidad no fueron direccionadas en el acceso original a la memoria. Este efecto se conoce como row hammer, y también se ha utilizado en algunos exploits de escalada de privilegios en seguridad informática.

Un ejemplo de un error de un solo bit que sería ignorado por un sistema sin verificación de errores, detendría una máquina con verificación de paridad o sería corregido de forma invisible por ECC: un solo bit está fijado en 1 debido a un chip defectuoso, o se convierte en 1 debido a la radiación de fondo o cósmica; se carga una hoja de cálculo que almacena números en formato ASCII, y el carácter "8" (valor decimal 56 en la codificación ASCII) se almacena en el byte que contiene el bit fijo en su posición de bit más baja; luego, se realiza un cambio en la hoja de cálculo y se guarda. Como resultado, el "8" (0011 1000 binario) se ha convertido silenciosamente en un "9" (0011 1001).

Soluciones Se han desarrollado varios enfoques para tratar los cambios de bit no deseados, incluyendo la programación consciente de la inmunidad, la memoria de paridad de RAM y la memoria ECC.

Este problema puede mitigarse utilizando módulos DRAM que incluyan bits de memoria adicionales y controladores de memoria que exploten estos bits. Estos bits adicionales se utilizan para registrar paridad o para utilizar un código de corrección de errores (ECC). La paridad permite la detección de todos los errores de un solo bit (en realidad, cualquier número impar de bits incorrectos), pero no la corrección, por lo que el sistema tiene que continuar (simplemente señalando el problema) o detenerse. Los códigos de corrección de errores permiten corregir más errores; la cantidad depende del tipo exacto de memoria utilizada.

La memoria DRAM puede proporcionar una mayor protección contra los errores blandos mediante el uso de códigos de corrección de errores. Esta memoria de corrección de errores, conocida como memoria ECC o protegida por EDAC, es especialmente deseable para aplicaciones altamente tolerantes a fallos, como servidores, así como para aplicaciones en el espacio profundo debido al aumento de la radiación.

Algunos sistemas también "depuran" la memoria, leyendo periódicamente todas las direcciones y reescribiendo las versiones corregidas si es necesario para eliminar los errores blandos acumulados.

Esquemas Los subsistemas de memoria modernos pueden ofrecer integridad de datos a través de uno o más de los siguientes esquemas:

Por controlador de memoria: Estos esquemas hacen que el controlador de memoria envíe o reciba datos adicionales al chip. ECC de banda lateral (SBECC) es el enfoque tradicional de servidor. Los ECC se almacenan en chips DRAM separados y se transmiten con los datos a través de canales adicionales (bits extra por palabra). El controlador de memoria calcula los ECC al escribir, corrige errores al leer y notifica las correcciones y detecciones de errores al sistema operativo o firmware (UEFI o BIOS). ECC en línea o ECC en banda (IBECC) no utiliza ancho de canal adicional y, como resultado, es compatible con módulos de memoria "no ECC". El controlador de memoria particiona el espacio físico. En un estilo de implementación representado por el IBECC de Intel y el procesador RTOS de TI, el espacio de direcciones físicas se divide de modo que hay un bloque de memoria reservada. Cada comando de escritura necesitaría ir acompañado de un comando de escritura adicional y lo mismo se aplica a los comandos de lectura. Esto resulta en un aumento aproximado del doble de la latencia de la memoria. Específicamente, la implementación de Intel tiene un impacto mínimo en el rendimiento en la navegación web y aplicaciones de productividad, pero puede reducir el rendimiento hasta en un 25% en cargas de trabajo de juegos y edición de vídeo. Es teóricamente posible simplemente particionar el canal existente (digamos, 64 bits en 56 bits de datos y 8 bits de verificación) para proporcionar un análogo de ECC de banda lateral. Una lectura superficial de la descripción de Synopsys de "ECC en línea" que menciona una partición del canal de 16 bits por chip llevaría a esta comprensión, pero esto no es muy común en productos comerciales. Por chip de memoria: ECC en el dado (ODECC), también llamado ECC en DRAM o ECC integrado, es obligatorio en todos los módulos de memoria DDR5 y LPDDR6 para mitigar las mayores tasas de error asociadas con celdas de memoria más pequeñas. El almacenamiento ECC adicional y la circuitería de corrección de errores están integrados en los chips DRAM y son invisibles para el controlador de memoria. Los errores de transmisión no se corrigen ya que los ECC no se envían con los datos, y las correcciones y detecciones de errores no se notifican. La latencia adicional solo se introduce cuando se necesita la corrección de errores. Por ambos