¿Cómo poner en la lista negra un sector RAM incorrecto correcto de acuerdo con la indicación de error MemTest86 +?

28

MemTest86 + (la versión incluida con Ubuntu 13.04) dice

Failing address: 002f796c48 -    759.5 MB

¿Qué debo especificar en el memmapparámetro del kernel para omitir esta área?

He intentado ejecutar memtester 770MBy dice que todo está bien, así que no parece que las indicaciones de MemTest signifiquen un error en los 759.5 MB desde el principio.

¿Cómo interpretar esta indicación de MemTest para configurar memmap?

No tengo dinero para comprar nueva RAM ahora y el error parece ser único, así que espero poder anularlo.

Ivan
fuente
FWIW, el núcleo marcará ciertas páginas como "reservadas" si detecta un segmento defectuoso pero puede recuperarse. ¿La salida de "free -m" muestra potencias de dos para los totales? Menciono esto como una forma de explicar por qué memtester no puede ver la RAM defectuosa, pero memtest86 + sí.
Bratchley
No parece poderes de dos en realidad: i.stack.imgur.com/l86L1.png
Ivan
Cuando se detecta un error (incluso si tiene ecc ram), generalmente es demasiado tarde. Además, free -m nunca informa una potencia par de dos, ya que la BIOS y el kernel reservan algo de memoria RAM.
psusi
1
Sueño con comprar una computadora portátil ECC pero nunca pude encontrar ofertas disponibles, parece que no existen.
Ivan
Parece que el kernel también imprime cuando encuentra una página incorrecta (línea 264-265).
Bratchley

Respuestas:

26

memmap

Existe este tutorial titulado: Bad Memory HowTo que analiza la desactivación de la memoria a través del kernel utilizando el memmapargumento 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

slm
fuente
"800M a 804M" se supone que es "800M a 810M" Supongo ...
Hauke ​​Laging
Puede ser, pero lo que escribí también está bien, a pesar de que está desperdiciando más memoria que el 4M entre 800M y 810M.
slm
1
1. Conozco la memmapopción, pero la pregunta es más sobre cómo interpretar la salida memtest86 +. He dado un ejemplo específico de salida memtest86 + y solicito ayuda para configurar en memmap consecuencia en este caso particular. 2. "Debe ejecutar memtest86 + después para confirmar que este argumento es correcto". - memtest86 + se ejecuta antes que un kernel del sistema operativo, así que dudo seriamente que la memmapopción del kernel de Linux pueda afectarlo.
Ivan
@ Ivan, 1. Pensé que era obvio dados los ejemplos que incluí, pero necesitaría decir algo como: memmap=5M$759Mpara su caso particular, dado que memtest86 + falla en 759.5MB. 2. Quise decir que también deberías pasar la memmap=...opción a memtest86 +. Eso no fue probado / no confirmado por mí, pero es algo que puede hacer con memtest86 +.
slm
1
Vale gracias. No estaba seguro de qué significa "002f796c48 - 759.5 MB" (tal vez podría ser 759.5 megas después de la dirección 002f796c48 o algo así) y nunca sospeché que puedo pasar los parámetros del kernel de Linux a MemTest86 + (pensé que no era nada para hacer con Linux).
Ivan
14

Memtest86 + (utilicé 4.20) puede generar un formato badram directamente.

  1. Presione 'c' para llegar al diálogo de configuración diálogo de configuración de memtest

  2. Luego '4' para "Modo de informe de errores"

    diálogo de modo de informe de error de memtest

  3. Luego '3' para "Patrones de BadRAM"

El resultado cambiará de una lista de fallas de prueba individuales a una serie de líneas badram =, cada una con un nuevo sector defectuoso más. Debido a que las líneas se unen y fusionan segmentos adyacentes, puede ejecutar la prueba sin cabeza durante la noche y usar la línea impresa final (aunque si tiene una luz realmente mala, el formato menos preciso de "5 megas alrededor de este punto" probablemente será un poco más corto )

Resultado final:

Memtest86 + mostrando salida de badram

skorgu
fuente
44
Ahora, si no tuviera que copiar eso a mano y en su lugar entregárselo a GRUB sin volver a escribir los errores, sería fantástico.
Ehtesh Choudhury
8
Lo que hice fue tomarle una foto (teléfono con cámara), cargarlo en GIMP, => escala de grises => invertir => contraste / gamma y luego pasarlo a tesseract ${IMG} stdout... luego verificó y corrigió la línea antes de insertarla en / etc / default / grub ... Probablemente tomó tanto tiempo como ingresarlo manualmente de inmediato ^^
eMPee584
3
Sin embargo
ovejas voladoras el