memmap
Existe este tutorial titulado: Bad Memory HowTo que analiza la desactivación de la memoria a través del kernel utilizando el memmap
argumento del kernel. De acuerdo con el tutorial, tiene 2 opciones cuando se trata de memmap
:
- Apague todo después de la mala memoria -
(mem=###M option)
- Apague solo la memoria alrededor de la mala memoria -
(memmap=#M$###M option)
Con la primera opción, si memtest informa que hay una memoria defectuosa a 600M, puede deshabilitar la RAM desde ese punto hasta el final de la RAM con esto:
mem=595M
Si hay RAM defectuosa en 802M y 807M, puede deshabilitar una sección de RAM de 10M a partir de 800M de esta manera:
memmap=10M$800M
NOTA: Esto incluirá en la lista negra los 10M después de la dirección base de 800M. Luego debe ejecutar memtest86+
para confirmar que este argumento es correcto.
BadRAM
Hay un parche disponible para Ubuntu llamado BadRam. Está cubierto muy bien aquí en esta publicación titulada: BadRAM en el sitio de la Comunidad Ubuntu.
Después de aplicar el parche al kernel utilizando los detalles de esa página, realiza modificaciones en la configuración de Grub2:
extracto de ese sitio para Grub2
El archivo de configuración GRUB2 en Natty tiene una línea para configurar las exclusiones de memoria RAM incorrecta del núcleo. Por lo tanto, supondré que esa es la forma preferida de mapear una sección de memoria que muestra errores. La línea que puse fue
GRUB_BADRAM = "0x7DDF0000,0xffffc000"
La forma sugerida en cada sitio web que pude encontrar fue establecer esto fue ejecutar memtest86 y dejar que te muestre la configuración de BadRAM. memtest86 me dio una página de cosas que habría tenido que ingresar. Pude ver que todas las direcciones estaban en un bloque de 16K, así que solo quería asignar ese bloque de 16K fuera de acción. Así es como generé la entrada correcta.
El primer parámetro es fácil. Esa es la dirección base de la mala memoria. En mi caso, pude ver que todas las direcciones incorrectas eran mayores que 0x7DDF0000 y menores que 0x7DDF4000. Entonces, tomé el comienzo del bloque de 16K como mi dirección inicial.
El segundo parámetro es una máscara. Pones 1s donde el rango de direcciones que deseas comparte los mismos valores y 0s donde variará. Esto significa que debe elegir su rango de direcciones de modo que solo varíen los bits de orden inferior. Mirando mi dirección, la primera parte de la máscara es fácil. Desea comenzar con 0xffff. Para el próximo mordisco, lo explicaré con mapas de bits. Quiero variar de 0000 a 0011. Entonces, la máscara para badram sería 1100 o un hexadecimal c. Los últimos 3 nibbles deben ser todos 0 en la máscara, ya que queremos que se asigne todo el rango. Entonces, obtenemos un resultado total de 0xffffc000.
Después de configurar esta línea en / etc / default / grub, ejecuté sudo update-grub y reinicié y mi mala memoria ya no se usaba. No se necesitan parches de kernel para mapear mala memoria usando este método.
Seguimiento # 1
Mirando a través de la página de wikipedia para memtest86 + dice lo siguiente:
extracto de la página de wikipedia de Memtest86
A partir de Memtest86 2.3 y Memtest86 + 1.60, el programa puede generar una lista de regiones RAM defectuosas en el formato esperado por el parche BadRAM para el kernel de Linux; Con esta información, un sistema Linux puede usar de manera confiable un módulo RAM incluso si tiene algunos bits defectuosos. Grub2 puede proporcionar esta misma información a un kernel no parcheado, negando la necesidad del parche BadRAM.
También me encontré con esta página de Gentoo que especificaba el memmap=...
uso de una dirección hexadecimal, por lo que podría especificarla así:
memmap=5M$0x2f796c48
El 5M es solo una suposición, obviamente puede ajustarlo más bajo o más alto dependiendo de la cantidad de RAM alrededor de esa región que desea / necesita omitir.
Finalmente, también puede especificar el tamaño en hexadecimal:
memmap=0x10000$0x2f796c48
Ignoraría los 64 KB que comienzan en la dirección 0x2f796c48.
Referencias