Comment mettre sur liste noire un secteur de RAM incorrect en fonction de l'indication d'erreur MemTest86 +?

28

MemTest86 + (la version incluse avec Ubuntu 13.04) dit

Failing address: 002f796c48 -    759.5 MB

Que dois-je spécifier dans le memmapparamètre du noyau pour contourner cette zone?

J'ai essayé de courir memtester 770MBet il dit que tout va bien donc il ne semble pas que les indications du MemTest signifient une erreur dans le 759,5th MB dès le début.

Comment interpréter cette indication MemTest à configurer memmap?

Je n'ai pas d'argent pour acheter de la nouvelle RAM maintenant et l'erreur semble être unique, j'espère donc pouvoir la remplacer.

Ivan
la source
FWIW, le noyau marquera certaines pages comme étant "réservées" s'il détecte un mauvais segment mais est capable de récupérer. La sortie de "free -m" affiche-t-elle des puissances de deux pour les totaux? Je mentionne cela comme un moyen d'expliquer pourquoi memtester ne peut pas voir la mauvaise RAM mais memtest86 + le peut.
Bratchley
Ne ressemble pas à des pouvoirs de deux: i.stack.imgur.com/l86L1.png
Ivan
Au moment où une erreur est détectée (si vous avez même un ram ecc), il est généralement trop tard. De plus, free -m ne signale jamais une puissance égale à deux car le bios et le noyau réservent tous deux de la mémoire vive.
psusi
1
Je rêve d'acheter un ordinateur portable ECC mais je n'ai jamais trouvé d'offres disponibles, on dirait qu'elles n'existent pas.
Ivan
On dirait que le noyau imprime également lorsqu'il trouve une mauvaise page (ligne 264-265).
Bratchley

Réponses:

26

memmap

Il y a ce tutoriel intitulé: Bad Memory HowTo qui explique comment désactiver la mémoire via le noyau en utilisant l' memmapargument du noyau. Selon le howto vous avez 2 options en ce qui concerne memmap:

  • Éteignez tout après la mauvaise mémoire - (mem=###M option)
  • Désactivez uniquement la mémoire autour de la mauvaise mémoire - (memmap=#M$###M option)

Avec la première option, si memtest signale qu'il y a une mauvaise mémoire à 600M, vous pouvez désactiver la RAM à partir de ce point jusqu'à la fin de la RAM avec ceci:

 mem=595M

S'il y a une mauvaise RAM à 802M et 807M, vous pouvez désactiver une section de 10M de RAM à partir de 800M comme ceci:

memmap=10M$800M

REMARQUE: Cela mettra sur liste noire les 10M après l'adresse de base de 800M. Vous devez exécuter memtest86+ensuite pour confirmer que cet argument est correct.

BadRAM

Il existe un patch disponible pour Ubuntu appelé BadRam. C'est très bien couvert ici dans cet article intitulé: BadRAM sur le site de la communauté Ubuntu.

Après avoir appliqué le correctif au noyau en utilisant les détails de cette page, vous apportez des modifications à votre configuration Grub2:

extrait de ce site pour Grub2

Le fichier de configuration GRUB2 dans Natty a une ligne pour configurer les exclusions du mauvais ram du noyau. Donc, je suppose que c'est la façon préférée de cartographier une section de la mémoire qui présente des erreurs. La ligne que j'ai tracée était

GRUB_BADRAM = "0x7DDF0000,0xffffc000"

La manière suggérée sur chaque site Web que je pouvais trouver était de définir ceci était d'exécuter memtest86 et de le laisser vous montrer les paramètres BadRAM. memtest86 m'a donné une page de choses que j'aurais dû entrer. Je pouvais voir que toutes les adresses étaient dans un bloc 16K, donc je voulais juste mapper ce bloc 16K hors service. Voici comment j'ai généré l'entrée correcte.

Le premier paramètre est simple. C'est l'adresse de base de la mauvaise mémoire. Dans mon cas, j'ai pu voir que toutes les mauvaises adresses étaient supérieures à 0x7DDF0000 et inférieures à 0x7DDF4000. J'ai donc pris le début du bloc 16K comme adresse de départ.

Le deuxième paramètre est un masque. Vous mettez 1s où la plage d'adresses que vous souhaitez partage les mêmes valeurs et 0s où elle variera. Cela signifie que vous devez choisir votre plage d'adresses de telle sorte que seuls les bits de poids faible varient. En regardant mon adresse, la première partie du masque est facile. Vous voulez commencer par 0xffff. Pour le prochain quartet, je vais expliquer avec des bitmap. Je veux aller de 0000 à 0011. Ainsi, le masque de badram serait 1100 ou un hex c. Les 3 derniers quartets doivent être tous des 0 dans le masque, car nous voulons que toute la plage soit tracée. Ainsi, nous obtenons un résultat total de 0xffffc000.

Après avoir défini cette ligne dans / etc / default / grub, j'ai exécuté sudo update-grub et redémarré et ma mauvaise mémoire n'était plus utilisée. Aucun correctif du noyau n'est nécessaire pour éliminer la mauvaise mémoire à l'aide de cette méthode.

Suivi # 1

En regardant à travers la page wikipedia de memtest86 +, il indique ce qui suit:

extrait de la page wikipedia de Memtest86

À partir de Memtest86 2.3 et Memtest86 + 1.60, le programme peut sortir une liste de régions RAM défectueuses au format attendu par le patch BadRAM pour le noyau Linux; en utilisant ces informations, un système Linux peut utiliser de manière fiable un module RAM même s'il a quelques mauvais bits. Grub2 est capable de fournir ces mêmes informations à un noyau non corrigé, éliminant ainsi le besoin du correctif BadRAM.

Je suis également tombé sur cette page Gentoo qui spécifiait l' memmap=...utilisation d'une adresse hexadécimale, vous pouvez donc la spécifier comme ceci:

memmap=5M$0x2f796c48

Le 5M est juste une supposition, vous pouvez évidemment l'ajuster plus ou moins en fonction de la quantité de RAM autour de cette région que vous souhaitez / devez supprimer.

Enfin, vous pouvez également spécifier la taille en hexadécimal:

memmap=0x10000$0x2f796c48

Ignorerait 64 Ko à partir de l'adresse 0x2f796c48.

Les références

slm
la source
"800M à 804M" est censé être "800M à 810M" Je suppose ...
Hauke ​​Laging
Cela peut être le cas, mais ce que j'ai écrit est également correct, même s'il jette plus de mémoire que le 4M entre 800M et 810M.
slm
1
1. Je connais l' memmapoption mais la question est plus sur la façon d'interpréter la sortie memtest86 +. J'ai donné un exemple spécifique de sortie memtest86 + et demande de l'aide pour configurer en memmap conséquence dans ce cas particulier. 2. "Vous devez exécuter memtest86 + par la suite pour confirmer que cet argument est correct." - memtest86 + fonctionne avant un noyau OS donc je doute sérieusement que l' memmapoption du noyau Linux puisse l'affecter.
Ivan
@Ivan, 1. Je pensais que c'était évident étant donné les exemples que j'ai inclus, mais vous auriez besoin de dire quelque chose comme: memmap=5M$759Mpour votre cas particulier, étant donné que memtest86 + échoue à 759,5 Mo. 2. Je voulais dire que vous devriez également passer l' memmap=...option à memtest86 +. Cela n'a pas été testé / non confirmé par moi, mais quelque chose que vous pourrez peut-être faire avec memtest86 +.
slm
1
OK merci. Je ne savais pas ce que signifie "002f796c48 - 759,5 Mo" (peut-être 759,5 Mo après l'adresse 002f796c48 ou quelque chose comme ça) et je n'ai jamais soupçonné de pouvoir transmettre les paramètres du noyau Linux à MemTest86 + (je pensais que ce n'était rien en soi faire avec Linux).
Ivan
14

Memtest86 + (j'ai utilisé 4.20) peut sortir un format badram directement.

  1. Appuyez sur «c» pour accéder au dialogue de configuration dialogue de configuration memtest

  2. Puis «4» pour «Mode rapport d'erreur»

    dialogue de mode de rapport d'erreur memtest

  3. Puis «3» pour «BadRAM Patterns»

La sortie passera d'une liste d'échecs de test individuels à une série de lignes badram =, chacune contenant un nouveau secteur défectueux. Parce que les lignes s'ajoutent et fusionnent les segments adjacents, vous pouvez simplement exécuter le test sans tête pendant la nuit et utiliser la ligne imprimée finale (bien que si vous avez un très mauvais gradateur, le format moins précis "5 mégas autour de ce point" sera probablement un peu plus court ).

Résultat final:

Memtest86 + montrant la sortie du badram

skorgu
la source
4
Maintenant, si je n'avais pas à copier cela à la main et à la place le remettre à GRUB sans retaper les erreurs, ce serait fantastique.
Ehtesh Choudhury
8
Ce que j'ai fait, c'est de le prendre en photo (appareil photo), de le charger dans GIMP, => niveaux de gris => inverser => contraste / gamma puis de le remettre à tesseract ${IMG} stdout.. puis vérifié et corrigé la ligne avant de l'insérer dans / etc / default / grub ... Cela a probablement pris aussi longtemps que de l'entrer manuellement tout de suite ^^
eMPee584
3
Bien plus amusant que de le faire manuellement
voler des moutons