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

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

Failing address: 002f796c48 - 759.5 MB 

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

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

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

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

Comentarios

  • FWIW, el kernel marcará ciertas páginas como » reservadas » si detecta un segmento defectuoso pero se puede recuperar. ¿La salida de » free -m » muestra potencias de dos para los totales? Menciono esto como un forma de explicar por qué Memtester puede No veo la RAM defectuosa pero memtest86 + puede.
  • ¿No ‘ t parece potencias de dos en realidad: i.stack.imgur.com/l86L1.png
  • Para el momento en que se detecta un error (si incluso tiene ecc ram), generalmente es demasiado tarde. Además, free -m nunca informa una potencia de dos, ya que la BIOS y el kernel reservan algo de RAM.
  • Sueño con comprar una computadora portátil ECC pero nunca pude encontrar ninguna oferta disponible, parece que no ‘ t existe.
  • Parece que el kernel también printk ‘ s cuando encuentra una página incorrecta (línea 264-265).

Responder

memmap

Existe este tutorial titulado: Cómo hacer una mala memoria que trata sobre la desactivación de la memoria a través del kernel usando memmap argumento para el kernel. De acuerdo con el cómo, 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 mala memoria a 600M, entonces puede deshabilitar la RAM desde ese punto hasta el final de la RAM con esto:

 mem=595M 

Si hay » Si hay una mala RAM en 802M y 807M, puede desactivar una sección de 10M de RAM a partir de 800M de esta manera:

memmap=10M$800M 

NOTA: Esto pondrá en la lista negra los 10M después de la dirección base de 800M. Debe ejecutar memtest86+ después para confirmar que este argumento es correcto.

BadRAM

Hay un parche disponible para Ubuntu llamado BadRam. Se trata muy bien aquí en esta publicación titulada: BadRAM en la comunidad de Ubuntu sitio.

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 de GRUB2 en Natty tiene una línea para configurar las exclusiones de RAM defectuosas del kernel. Entonces, asumiré que es la forma preferida de mapear una sección de memoria que muestra errores. La línea que configuré fue

GRUB_BADRAM = «0x7DDF0000,0xffffc000»

La forma sugerida en cada sitio web que pude encontrar fue configurar esto para ejecutar memtest86 y dejar que le muestre el 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 mapear 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 16K como mi dirección de inicio.

El segundo parámetro es una máscara. Pones 1 donde el rango de direcciones que deseas comparte los mismos valores y 0 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. Quieres empezar con 0xffff. Para el siguiente bocado, lo explicaré con mapas de bits. Quiero oscilar entre 0000 y 0011. Entonces, la máscara para badram sería 1100 o una c hexadecimal. 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 del kernel para mapear la memoria defectuosa usando este método.

Seguimiento # 1

Mirando en la página de wikipedia para memtest86 + dice lo siguiente:

extracto de página de wikipedia 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 utilizar de forma fiable un módulo RAM incluso si tiene algunos bits defectuosos. Grub2 es capaz de suministrar esta misma información a un kernel sin parche, eliminando la necesidad del parche BadRAM.

También encontré este Página de Gentoo que especificaba la memmap=... usando una dirección hexadecimal, por lo que podría especificarla así:

memmap=5M$0x2f796c48 

El 5M es solo una suposición, obviamente podría ajustarlo más bajo o más alto dependiendo de cuánta RAM alrededor de esa región desee / necesite omitir.

Por último, 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

Comentarios

  • » 800M a 804M » se supone que es » 800M a 810M » I supongo …
  • Puede ser, pero lo que escribí también está bien, aunque ‘ s desperdicia más memoria que el 4M entre 800M y 810M.
  • 1. Conozco la opción memmap, pero la pregunta es más sobre cómo interpretar la salida memtest86 +. He dado un ejemplo específico de la salida memtest86 + y pregunto para obtener ayuda para configurar memmap en consecuencia en este caso particular. 2. Deberías ejecutar memtest86 + después para confirmar que este argumento es correcto. » – memtest86 + se ejecuta antes de un kernel de SO, así que dudo seriamente la memmap opción del kernel de Linux puede afectarlo.
  • @Ivan, 1. Pensé que era obvio dados los ejemplos que incluí, pero tú ‘ Necesito decir algo como: memmap=5M$759M para su caso particular, dado que memtest86 + está fallando en 759.5MB. 2. Quise decir que también debes pasar la opción memmap=... a memtest86 +. Eso no fue probado / no confirmado por mí, pero es algo que puede hacer con memtest86 +.
  • Ok, 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 tenía nada que ver con Linux).

Respuesta

Memtest86 + (yo usé 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 del modo de informe de errores de memtest

  3. Luego «3» para «BadRAM Patterns»

La salida cambiará de una lista de fallos de prueba individuales a una serie de badram = líneas, cada una con un nuevo sector defectuoso. Debido a que las líneas se agregan y fusionan segmentos adyacentes, puede ejecutar la prueba sin cabeza durante la noche y usar la línea impresa final (aunque si tiene una atenuación 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

Comentarios

  • Ahora, si no ‘ no tuviera que copiarlo a mano y, en su lugar, entregarlo a GRUB sin volver a escribir errores, sería fantástico.
  • Lo que hice fue tomar una foto (teléfono con cámara), cargarla en GIMP, = > grayscale = > invert = > contrast / gamma y luego entrégaselo 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 ^^
  • Definitivamente más divertido que hacerlo manualmente aunque ugh
  • Respuesta

    Solución muy sucia y muy agradable: ejecute un memtester de espacio de usuario, espere hasta que encuentra un error. Déjelo, por ejemplo, en 0xfce2ea31.

    Luego ejecute memtester, pero en esa dirección física, así:

    memtester -p 0xfce20000 64k 128 

    Para ser seguro, es mejor si sacrifica más que la página de la dirección problemática.Aquí sacrificamos 64kByte alrededor de la dirección defectuosa.

    Si todo salió bien, encontrará la ubicación de la memoria defectuosa, mucho más rápido, nuevamente.

    Luego suspenda el proceso de memtester con un ctrl / z.

    Consecuencia: hasta que el proceso de memtester se suspenda, no quitará más recurso, pero ningún otro proceso podrá acceder a la memoria defectuosa . Porque será asignado por el memtester.

    Particularmente útil en grandes servidores remotos. El proceso suspendido puede quédese hasta que no se envíe la nueva RAM. O tal vez hasta la próxima Navidad, cuando un tiempo de inactividad no será un problema tan grande.

    Comentarios

    • En lugar de este truco, también puede usar la herramienta chmem en util-linux para decirle al kernel que desconecte un rango de memoria en particular (moviendo los datos a otra parte y luego nunca reutilizando las páginas) .
    • @TooTea Probé esta herramienta en varias máquinas y no pude Active un solo bloque de memoria.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *