La limpieza de memoria consiste en leer desde cada ubicación de la memoria de la computadora , corregir errores de bits (si los hay) con un código de corrección de errores ( ECC ) y escribir los datos corregidos nuevamente en la misma ubicación. [1]
Debido a la alta densidad de integración de los chips de memoria de las computadoras modernas , las estructuras de las celdas de memoria individuales se volvieron lo suficientemente pequeñas como para ser vulnerables a los rayos cósmicos y/o la emisión de partículas alfa . Los errores causados por estos fenómenos se denominan errores suaves . Más del 8% de los módulos DIMM experimentan al menos un error corregible por año. [2] Esto puede ser un problema para las memorias basadas en DRAM y SRAM . La probabilidad de un error suave en cualquier bit de memoria individual es muy pequeña. Sin embargo, junto con la gran cantidad de memoria con la que están equipadas las computadoras modernas, especialmente los servidores , y junto con los períodos prolongados de tiempo de funcionamiento , la probabilidad de errores suaves en la memoria total instalada es significativa. [ cita requerida ]
La información en una memoria ECC se almacena de forma redundante para corregir errores de un solo bit por palabra de memoria. Por lo tanto, una memoria ECC puede soportar la limpieza del contenido de la memoria. Es decir, si el controlador de memoria escanea sistemáticamente la memoria, se pueden detectar los errores de un solo bit, se puede determinar el bit erróneo utilizando la suma de comprobación ECC y los datos corregidos se pueden volver a escribir en la memoria.
Es importante verificar cada ubicación de memoria periódicamente, con la frecuencia suficiente, antes de que sea demasiado probable que ocurran múltiples errores de bit dentro de la misma palabra, porque los errores de un bit se pueden corregir, pero los errores de múltiples bits no se pueden corregir, en el caso de los módulos de memoria ECC habituales (a partir de 2008).
Para no interrumpir las solicitudes de memoria habituales de la CPU y evitar así una disminución del rendimiento , la limpieza normalmente solo se realiza durante los períodos de inactividad. Como la limpieza consiste en operaciones normales de lectura y escritura, puede aumentar el consumo de energía de la memoria en comparación con las operaciones sin limpieza. Por lo tanto, la limpieza no se realiza de forma continua, sino periódica. En muchos servidores, el período de limpieza se puede configurar en el programa de configuración del BIOS .
Las lecturas de memoria normales emitidas por la CPU o los dispositivos DMA se verifican en busca de errores ECC, pero debido a razones de ubicación de los datos, pueden limitarse a un pequeño rango de direcciones y mantener intactas otras ubicaciones de memoria durante mucho tiempo. Estas ubicaciones pueden volverse vulnerables a más de un error leve, mientras que la limpieza asegura la verificación de toda la memoria dentro de un tiempo garantizado.
En algunos sistemas, no solo la memoria principal (basada en DRAM) puede realizar el borrado, sino también las cachés de la CPU (basadas en SRAM). En la mayoría de los sistemas, las tasas de borrado de ambas se pueden configurar de forma independiente. Debido a que la caché es mucho más pequeña que la memoria principal, el borrado de las cachés no necesita realizarse con tanta frecuencia.
La limpieza de memoria aumenta la confiabilidad, por lo tanto, puede clasificarse como una característica RAS .
Generalmente existen dos variantes, conocidas como depuración por patrullaje y depuración por demanda . Si bien ambas realizan esencialmente la depuración de memoria y la corrección de errores asociada (si es posible), la principal diferencia es cómo se inician y ejecutan estas dos variantes. La depuración por patrullaje se ejecuta de manera automática cuando el sistema está inactivo, mientras que la depuración por demanda realiza la corrección de errores cuando los datos se solicitan realmente desde la memoria principal. [3]