¿Linux tiene un mecanismo para "borrar" la memoria? Por ejemplo, ¿probar la memoria y marcar las áreas como sucias si fallan para que el sistema pueda continuar operando "de manera segura" incluso con los chips de memoria ram instalados?
¿Linux tiene un mecanismo para "borrar" la memoria? Por ejemplo, ¿probar la memoria y marcar las áreas como sucias si fallan para que el sistema pueda continuar operando "de manera segura" incluso con los chips de memoria ram instalados?
Respuestas:
La respuesta es sí, y se realiza de forma transparente (siempre que tenga memoria ECC para detectar errores, y su versión de kernel sea al menos 2.6.30 para continuar funcionando de manera segura).
Básicamente, su memoria se verifica en cada lectura del procesador, y se limpia periódicamente *, para verificar la coherencia con los Códigos de corrección de errores (ECC). Si se produce un error, obtiene una excepción de verificación de máquina, que luego se registra y se captura por mcelog ( http://www.mcelog.org/ ).
Si su error fue corregible, incrementa un contador de "cubeta con fugas", lo que hace que un DIMM físico que falla con demasiada frecuencia sea reemplazado de manera transparente por otro. Por lo tanto, su página de memoria se copia en una nueva ubicación, su dirección de memoria virtual se actualiza para que apunte a la nueva página y el sistema operativo marca la página anterior para que ya no se use.
Esto se llama "soft-offline" en Linux (y el retiro de la página de memoria en Solaris, no sé acerca de otros sistemas operativos).
Sin embargo, si su error no fue corregible, sucede lo que se llama "línea dura", es decir, su página de memoria se elimina de la administración de memoria del sistema operativo normal y su aplicación se anula (NB: por alguna señal SIGBUS atrapable que le dice dónde el error ocurrió, pero es bastante raro que no le importe y trate de atraparlo). Si su página de memoria está asignada desde un archivo y limpia, el sistema operativo también puede volver a cargarla de forma transparente en otra ubicación física en lugar de matar el proceso.
Puede leer más sobre mcelog, hay muchas opciones de configuración, puede activar otros comportamientos, opciones y otras pistas sobre qué leer y cómo asegurarse de que mcelog se esté ejecutando en su sistema.
* Scrubbing, o "Patrol Scrubbing" consiste en leer la memoria, verificar si hay errores en el ECC y sobrescribir con las palabras de memoria corregidas cuando se descubre un error. El término limpieza de patrulla se usa por oposición a la sobrescritura de datos incorrectos sobre errores en las lecturas de memoria, lo que a veces se denomina "limpieza por demanda". El fregado es un procedimiento de hardware que se puede habilitar, generalmente a través del BIOS.
Esto es realmente una mala idea. La memoria no se puede probar de manera confiable en un barrido rápido. Esta es la razón por la cual el software como memtest86 usa múltiples pases con diferentes patrones de bits para probar la memoria. Solución:
Pruebe la memoria con memtest86 , preferiblemente una prueba larga, déjela funcionando durante la noche, tomará mucho tiempo.
Si se detecta mala memoria, use el memmap
parámetro del kernel para forzar al kernel a no usar esa memoria:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Marque la memoria específica como reservada. Región de memoria a utilizar, de ss a ss + nn. Ejemplo: excluir memoria de 0x18690000-0x1869ffff memmap = 64K $ 0x18690000 o memmap = 0x10000 $ 0x18690000
Además, puede usar la memoria ECC que corregirá errores de 1 bit y detectará errores de 2 bits en su memoria automáticamente (y recibirá mensajes de registro del kernel sobre problemas de memoria no corregibles si ocurren)
La publicación y la respuesta malinterpretan el problema. El borrado de memoria está destinado a evitar que los errores de un solo bit corregibles se conviertan en errores dobles no corregibles. El depurador simplemente toda la memoria física (lo que obliga a fallas de caché para hacerlo) ocasionalmente. Si hay errores de un solo bit, se corregirán (y la corrección debe reescribir el valor correcto mediante una comparación y un intercambio), eliminando así el error.
De lo contrario, si se produce un segundo error en una palabra que ya tiene un error, la palabra completa será incorrecta y el sistema operativo tendrá que hacer algo drástico.
La limpieza es importante porque sin ella, la memoria que se lee pero no se escribe (como las páginas de códigos) puede acumular errores con el tiempo.
Si tiene memoria ECC, puede echar un vistazo más de cerca a https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac . (Encontré "sdram_scrub_rate" especialmente interesante).
(Si este enlace se rompe en algún momento (realmente no debería), le sugiero que descargue la documentación de Linux adecuada y busque "scrub").