La memoria de 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 [a] (ECC) para detectar y corregir la corrupción de datos de n bits que se produce en la memoria. La memoria ECC se utiliza en la mayoría de las computadoras donde no se puede tolerar la corrupción de datos, como aplicaciones de control industrial, bases de datos críticas y cachés de memoria de infraestructura.
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 escribieron en ella, incluso si uno de los bits realmente almacenados se ha invertido en el estado equivocado. 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.
Los códigos de corrección de errores protegen contra la corrupción de datos no detectada y se utilizan en computadoras donde dicha corrupción es inaceptable, por ejemplo en aplicaciones informáticas científicas y financieras, o en servidores de archivos y bases de datos . ECC también puede reducir la cantidad de fallas 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 dinámica de acceso aleatorio (DRAM) cambie espontáneamente al estado opuesto. Inicialmente se pensó que esto se debía principalmente a las partículas alfa emitidas por los contaminantes en el material de embalaje de los chips, pero las investigaciones han demostrado que la mayoría de los errores leves puntuales en los chips DRAM se producen como resultado de la radiación de fondo , principalmente neutrones de los rayos secundarios de los rayos cósmicos. , que puede cambiar el contenido de una o más celdas de memoria o interferir con los circuitos utilizados para leerlas o escribirlas. [2] Por lo tanto, las tasas de error aumentan rápidamente con el aumento de 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). [3] Como resultado, los sistemas que operan a grandes altitudes requieren disposiciones especiales para su confiabilidad.
Por ejemplo, la nave espacial Cassini-Huygens , lanzada en 1997, contenía dos registradores de vuelo idénticos, cada uno con 2,5 gigabits de memoria en forma de conjuntos de chips DRAM comerciales. Debido a la funcionalidad EDAC incorporada , la telemetría de ingeniería de la nave espacial informó la cantidad de errores (corregibles) de un solo bit por palabra y errores (incorregibles) de doble bit por palabra. Durante los primeros dos años y medio de vuelo, la nave espacial informó una tasa de error de un solo bit casi constante de aproximadamente 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ó más de cuatro veces en ese único día. Esto se atribuyó a un evento de partículas solares detectado por el satélite GOES 9 . [4]
Existía cierta preocupación de que a medida que la densidad de la DRAM aumenta aún más y, por lo tanto, los componentes de los chips se hacen más pequeños, mientras que los voltajes de funcionamiento continúan cayendo, los chips DRAM se verán afectados por dicha radiación con mayor frecuencia, ya que las partículas de menor energía podrán cambiar una memoria. estado de la célula. [3] Por otro lado, las células más pequeñas constituyen objetivos más pequeños, y el paso a tecnologías como SOI puede hacer que las células individuales sean menos susceptibles y así contrarrestar, o incluso revertir, esta tendencia. Estudios recientes [5] muestran 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 son infundadas.
El trabajo publicado entre 2007 y 2009 mostró 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). [5] [6] [7] En la conferencia SIGMETRICS/Performance '09 se presentó un estudio a gran escala basado en el gran número de servidores de Google . [6] 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). ·h, o error de 1 bit por gigabyte de RAM cada 1,8 horas) errores por mil millones de horas de dispositivo por megabit. Más del 8% de los módulos de memoria DIMM se vieron afectados por errores cada año.
Las consecuencias de un error de memoria dependen del sistema. En sistemas sin ECC, un error puede provocar un fallo o 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 fallas de hardware en las máquinas. [6] Los errores de memoria pueden causar vulnerabilidades de seguridad. [6] Un error de memoria no puede tener consecuencias si cambia un bit que no causa un mal funcionamiento observable ni afecta los datos utilizados en los cálculos o guardados. Un estudio de simulación de 2010 mostró 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 fueron mayores de lo que se esperaría para errores leves independientes. [8]
Algunas pruebas concluyen que el aislamiento de las celdas de memoria DRAM puede evitarse mediante efectos secundarios no deseados de accesos especialmente diseñados a celdas adyacentes. Por lo tanto, acceder a los datos almacenados en DRAM hace que las células de memoria pierdan sus cargas e interactúen eléctricamente, como resultado de la alta densidad de células en la memoria moderna, alterando el contenido de las filas de memoria cercanas que en realidad no fueron abordadas en el acceso a la memoria original. Este efecto se conoce como martillo de fila y también se ha utilizado en algunos ataques de seguridad informática de escalada de privilegios . [9] [10]
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 manera invisible por ECC: un solo bit está atascado en 1 debido a un chip defectuoso, o cambia a 1 debido a 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 atascado 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 100 0 binario) se ha convertido silenciosamente en un "9" (0011 100 1 ).
Se han desarrollado varios enfoques para abordar los cambios de bits no deseados, incluida la programación con reconocimiento de inmunidad, la memoria de paridad RAM y la memoria ECC .
Este problema se puede mitigar mediante el uso de módulos DRAM que incluyen bits de memoria adicionales y controladores de memoria que explotan estos bits. Estos bits adicionales se utilizan para registrar la 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). El código de corrección de errores más común, un código Hamming de corrección de error único y detección de error doble (SECDED) , permite corregir un error de un solo bit y (en la configuración habitual, con un bit de paridad adicional) errores de doble bit. para ser detectado. Chipkill ECC es una versión más efectiva que también corrige errores de múltiples bits, incluida la pérdida de un chip de memoria completo.
Seymour Cray dijo la famosa frase " la paridad es para los agricultores " cuando se le preguntó por qué había dejado esto fuera del CDC 6600 . [11] Más tarde, incluyó la paridad en el CDC 7600 , lo que provocó que los expertos comentaran que "aparentemente muchos agricultores compran computadoras". La PC IBM original y todas las PC hasta principios de la década de 1990 utilizaban verificación de paridad. [12] Los posteriores en su mayoría no lo hicieron.
Un controlador de memoria con capacidad ECC generalmente puede [a] detectar y corregir errores de un solo bit por palabra [b] (la unidad de transferencia de bus ) y detectar (pero no corregir) errores de dos bits por palabra. El BIOS en algunas computadoras, cuando se combina con sistemas operativos como algunas versiones de Linux , BSD y Windows ( Windows 2000 y posteriores [13] ), permite contar los errores de memoria detectados y corregidos, en parte para ayudar a identificar los módulos de memoria defectuosos antes. el problema se vuelve catastrófico.
Algunos chips DRAM incluyen circuitos de corrección de errores "internos" en el chip, que permiten que los sistemas con controladores de memoria que no son ECC obtengan la mayoría de los beneficios de la memoria ECC. [14] [15] En algunos sistemas, se puede lograr un efecto similar utilizando módulos de memoria EOS .
La detección y corrección de errores depende de la expectativa de los tipos de errores que ocurren. Implícitamente, se supone que la falla de cada bit en una palabra de memoria es independiente, lo que resulta en la improbabilidad de que se produzcan dos errores simultáneos. Este era el caso cuando los chips de memoria tenían un ancho de un bit, lo que era típico en la primera mitad de los años 1980; Los desarrollos posteriores trasladaron muchos bits al mismo chip. Esta debilidad es abordada por varias tecnologías, incluyendo Chipkill de IBM , ECC extendido de Sun Microsystems , Chipspare de Hewlett-Packard y Corrección de datos de dispositivo único (SDDC) de Intel .
La memoria DRAM puede proporcionar una mayor protección contra errores leves al confiar en códigos de corrección de errores. Esta memoria de corrección de errores , conocida como memoria protegida ECC o EDAC , es particularmente deseable para aplicaciones con alta tolerancia a fallas, como servidores, así como aplicaciones de espacio profundo debido al aumento de la radiación . Algunos sistemas también " limpian " la memoria, leyendo periódicamente todas las direcciones y escribiendo versiones corregidas si es necesario para eliminar errores leves.
El entrelazado permite la distribución del efecto de un solo rayo cósmico, lo que potencialmente altera múltiples bits físicamente vecinos en varias palabras al asociar bits vecinos a diferentes palabras. Siempre que un evento único alterado (SEU) no exceda el umbral de error (p. ej., un solo error) en cualquier palabra en particular entre accesos, se puede corregir (p. ej., mediante un código de corrección de errores de un solo bit) y una solución eficaz. Se puede mantener un sistema de memoria libre de errores. [dieciséis]
Los controladores de memoria con corrección de errores utilizan tradicionalmente códigos Hamming , aunque algunos utilizan triple redundancia modular (TMR). Se prefiere este último porque su hardware es más rápido que el del esquema de corrección de errores de Hamming. [16] Los sistemas de satélites espaciales suelen utilizar TMR, [17] [18] [19] aunque la RAM de satélite suele utilizar la corrección de errores de Hamming. [20]
Muchas de las primeras implementaciones de memoria ECC enmascaran errores corregibles, actuando "como si" el error nunca hubiera ocurrido y solo informan errores incorregibles. Las implementaciones modernas registran tanto errores corregibles (CE) como errores incorregibles (UE). Algunas personas reemplazan de forma proactiva los módulos de memoria que presentan altas tasas de error, para reducir la probabilidad de que se produzcan errores no corregibles. [21]
Muchos sistemas de memoria ECC utilizan un circuito EDAC "externo" entre la CPU y la memoria. Algunos sistemas con memoria ECC utilizan sistemas EDAC internos y externos; El sistema EDAC externo debe diseñarse para corregir ciertos errores que el sistema EDAC interno no puede corregir. [14] Las CPU de escritorio y servidores modernas integran el circuito EDAC en la CPU, [22] incluso antes del cambio hacia controladores de memoria integrados en la CPU, que están relacionados con la arquitectura NUMA . La integración de la CPU permite un sistema EDAC sin penalización durante un funcionamiento sin errores.
A partir de 2009, los códigos de corrección de errores más comunes utilizan códigos Hamming o Hsiao que proporcionan corrección de errores de un solo bit y detección de errores de doble bit (SEC-DED). Se han propuesto otros códigos de corrección de errores para proteger la memoria: códigos de corrección de errores de doble bit y códigos de detección de errores de triple bit (DEC-TED), códigos de corrección de errores de un solo bit y códigos de detección de errores de doble bit (SNC-DND), Reed- Códigos de corrección de errores de Solomon , etc. Sin embargo, en la práctica, la corrección de múltiples bits generalmente se implementa entrelazando múltiples códigos SEC-DED. [23] [24]
Las primeras investigaciones intentaron minimizar el área y retrasar los gastos generales de los circuitos ECC. Hamming demostró por primera vez que los códigos SEC-DED eran posibles con una matriz de verificación particular. Hsiao demostró que una matriz alternativa con columnas de peso impar proporciona capacidad SEC-DED con menos área de hardware y un retraso más corto que los códigos tradicionales Hamming SEC-DED. Investigaciones más recientes también intentan minimizar la potencia además de minimizar el área y el retraso. [25] [26] [27]
Muchas CPU utilizan códigos de corrección de errores en la caché del chip , incluidos los procesadores Intel Itanium , Xeon , Core y Pentium (desde la microarquitectura P6 ) [28] [29] , AMD Athlon , Opteron , todos Zen - [30] y Procesadores [31] basados en Zen+ ( EPYC , EPYC Embedded, Ryzen y Ryzen Threadripper ) y DEC Alpha 21264. [23] [32]
A partir de 2006 [actualizar], EDC/ECC y ECC/ECC son las dos técnicas de protección contra errores de caché más comunes utilizadas en microprocesadores comerciales. La técnica EDC/ECC utiliza un código de detección de errores (EDC) en la caché de nivel 1. Si se detecta un error, los datos se recuperan de la caché de nivel 2 protegida por ECC. La técnica ECC/ECC utiliza una caché de nivel 1 protegida con ECC y una caché de nivel 2 protegida con ECC. [33] Las CPU que utilizan la técnica EDC/ECC siempre escriben todos los STORE en la caché de nivel 2, de modo que cuando se detecta un error durante una lectura de la caché de datos de nivel 1, se puede recuperar una copia de esos datos de la caché de nivel 2. caché de nivel 2.
La memoria registrada o almacenada en búfer no es lo mismo que ECC; las tecnologías realizan diferentes funciones. Es habitual que la memoria utilizada en los servidores sea tanto registrada, para permitir utilizar muchos módulos de memoria sin problemas eléctricos, como ECC, para la integridad de los datos. La memoria utilizada en las computadoras de escritorio generalmente no es ninguna de las dos, por razones de economía. Sin embargo, hay disponible memoria ECC sin búfer (no registrada) [34] y algunas placas base que no son de servidor admiten la funcionalidad ECC de dichos módulos cuando se usan con una CPU que admite ECC. [35] La memoria registrada no funciona de manera confiable en placas base sin circuitos de almacenamiento en búfer, y viceversa.
En última instancia, existe un equilibrio entre la protección contra pérdidas inusuales de datos y un costo mayor.
La memoria ECC generalmente implica un precio más alto en comparación con la memoria que no es ECC, debido al hardware adicional requerido para producir módulos de memoria ECC y debido a los menores volúmenes de producción de memoria ECC y hardware del sistema asociado. Las placas base, los conjuntos de chips y los procesadores que admiten ECC también pueden ser más caros.
La compatibilidad con ECC varía entre los fabricantes de placas base, por lo que es posible que una placa base incompatible con ECC simplemente no reconozca la memoria ECC. La mayoría de las placas base y procesadores para aplicaciones menos críticas no están diseñados para admitir ECC. Algunas placas y procesadores habilitados para ECC pueden admitir ECC sin búfer (no registrado), pero también funcionarán con memoria que no sea ECC; El firmware del sistema habilita la funcionalidad ECC si la memoria ECC está instalada.
ECC puede reducir el rendimiento de la memoria entre un 2 y un 3 por ciento en algunos sistemas, según la aplicación y la implementación, debido al tiempo adicional necesario para que los controladores de memoria ECC realicen la verificación de errores. [36] Sin embargo, los sistemas modernos integran pruebas ECC en la CPU, lo que no genera retrasos adicionales en los accesos a la memoria siempre que no se detecten errores. [22] [37] [38] Este no es el caso de ECC en banda , que almacena tablas utilizadas para protección en una región reservada de la memoria principal del sistema, [39] [40] compatible con Intel para Chromebooks , que mostró poco impacto. en navegación web y tareas de productividad, pero causó una reducción de hasta un 25% en los puntos de referencia de juegos y edición de video . [41]
La memoria de soporte ECC puede contribuir al consumo de energía adicional debido a los circuitos de corrección de errores.
{{cite book}}
: |journal=
ignorado ( ayuda )