MemTest86 + (la version incluse avec Ubuntu 13.04) dit
Failing address: 002f796c48 - 759.5 MB
Que dois-je spécifier dans le paramètre du noyau memmap
pour contourner cette zone?
Jai essayé dexécuter memtester 770MB
et cela dit tout est ok donc il ne semble pas que les indications du MemTest signifient une erreur dans le 759,5ème Mo depuis le début.
Comment interpréter cette indication MemTest pour configurer memmap
?
Je nai pas dargent pour acheter de la nouvelle RAM maintenant et lerreur semble être unique, donc jespère pouvoir la remplacer.
Commentaires
- FWIW, le noyau marquera certaines pages comme étant » réservées » sil détecte un segment incorrect mais est capable de récupérer. La sortie de » free -m » montre-t-elle des puissances de deux pour les totaux? Je mentionne cela comme un manière dexpliquer pourquoi memtester peut t voir la mauvaise RAM mais memtest86 + peut.
- Ne ‘ t ressembler à des puissances de deux en réalité: i.stack.imgur.com/l86L1.png
- Au moment où une erreur est détectée (si vous avez même un ecc ram), il est généralement trop tard. Aussi gratuit -m ne rapporte jamais une puissance égale de deux car le bios et le noyau réservent tous deux de la RAM.
- Je rêve dacheter un ordinateur portable ECC mais je nai jamais pu trouver doffres disponibles, on dirait quils ne ‘ t existent.
- Ressemble aussi au noyau printk ‘ s lorsquil trouve une mauvaise page (ligne 264-265).
Réponse
memmap
Il y a ce tutoriel intitulé: Bad Memory HowTo qui traite de la désactivation de la mémoire via le noyau en utilisant le memmap
argument du noyau. Selon le guide, vous avez 2 options en ce qui concerne memmap
:
- Tout désactiver après la mauvaise mémoire –
(mem=###M option)
- Désactiver uniquement la mémoire autour de la mauvaise mémoire –
(memmap=#M$###M option)
Avec la première option, si memtest signale quil 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
Sil y a » 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 ladresse de base de 800M. Vous devez exécuter memtest86+
ensuite pour confirmer que cet argument est correct.
BadRAM
Il existe un correctif disponible pour Ubuntu appelé BadRam. Il est très bien traité ici dans ce post intitulé: BadRAM sur la communauté Ubuntu site.
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 de mémoire vive du noyau. Donc, je suppose que cest le moyen préféré de mapper une section de mémoire qui présente des erreurs. La ligne que jai définie était
GRUB_BADRAM = « 0x7DDF0000,0xffffc000 »
La méthode suggérée sur chaque site Web que je pouvais trouver était de définir ceci était dexécuter memtest86 et de le laisser vous montrer le Paramètres BadRAM. memtest86 ma donné une page de trucs que jaurais dû entrer. Je pouvais voir que toutes les adresses étaient dans un bloc de 16K, donc je voulais juste mapper ce bloc de 16K hors daction. Voici comment jai généré la bonne entrée.
Le premier paramètre est simple. Cest ladresse de base de la mauvaise mémoire. Dans mon cas, jai pu voir que toutes les mauvaises adresses étaient supérieures à 0x7DDF0000 et inférieures à 0x7DDF4000. Jai donc pris le début du bloc 16K comme adresse de départ.
Le deuxième paramètre est un masque. Vous mettez des 1 là où la plage dadresses que vous souhaitez partage les mêmes valeurs et des 0 là où elle varie. Cela signifie que vous devez choisir votre plage dadresses de 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 grignotage, je vais expliquer avec des cartes de bits. Je veux aller de 0000 à 0011. Ainsi, le masque pour badram serait 1100 ou un hexadécimal c. Les 3 derniers quartets doivent être tous des 0 dans le masque, car nous voulons que toute la plage soit mappée. Donc, nous obtenons un résultat total de 0xffffc000.
Après avoir défini cette ligne dans / etc / default / grub, jai lancé sudo update-grub et redémarré et ma mauvaise mémoire nétait plus utilisée. Aucun correctif du noyau nest nécessaire pour mapper une mauvaise mémoire à laide de cette méthode.
Suivi n ° 1
En parcourant la page wikipedia de memtest86 +, il se lit comme suit:
extrait de la page wikipedia Memtest86
À partir de Memtest86 2.3 et Memtest86 + 1.60, le programme peut afficher une liste des mauvaises régions RAM 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 sil contient quelques bits défectueux. Grub2 est capable de fournir ces mêmes informations à un noyau non corrigé, annulant le besoin du correctif BadRAM.
Je suis également tombé sur ce Page Gentoo qui a spécifié le memmap=...
en utilisant une adresse hexadécimale, vous pouvez donc le spécifier comme ceci:
memmap=5M$0x2f796c48
Le 5M nest quune supposition, évidemment vous pouvez lajuster plus bas ou plus haut en fonction de la quantité de RAM autour de cette région que vous voulez / devez omettre.
Enfin, vous pouvez également spécifier la taille en hexadécimal:
memmap=0x10000$0x2f796c48
Ignorerait les 64 Ko commençant à ladresse 0x2f796c48.
Références
Commentaires
- » 800M à 804M » est censé être » 800M à 810M » I Supposons …
- Cela peut lêtre, mais ce que jai écrit est OK aussi, même si ‘ gaspille plus de mémoire que le 4M entre 800M et 810M.
- 1. Je connais loption
memmap
mais la question est plus sur la façon dinterpréter la sortie memtest86 +. Jai donné un exemple spécifique de sortie memtest86 + et demande pour obtenir de laide pour configurermemmap
en conséquence dans ce cas particulier. 2. Vous devez exécuter memtest86 + après pour confirmer que cet argument est correct. » – memtest86 + exécute avant un noyau OS donc je doute sérieusement loption de noyau Linuxmemmap
peut laffecter. - @Ivan, 1. Je pensais que cétait évident compte tenu des exemples que jai inclus, mais vous ‘ d besoin de dire quelque chose comme:
memmap=5M$759M
pour votre cas particulier, étant donné que memtest86 + échoue à 759,5 Mo. 2. Je voulais dire que vous devriez également passer loptionmemmap=...
à memtest86 +. Cela na pas été testé / confirmé par moi, mais quelque chose que vous pourrez peut-être faire avec memtest86 +. - Ok, merci. Je nétais pas sûr de ce que signifie » 002f796c48 – 759,5 Mo » (peut-être que cela pourrait être 759,5 Mo après ladresse 002f796c48 ou quelque chose comme ça ) et je nai jamais soupçonné de pouvoir transmettre les paramètres du noyau Linux à MemTest86 + (je pensais que cela navait rien à voir avec Linux).
Réponse
Memtest86 + (jai utilisé 4.20) peut générer directement un format badram.
-
Appuyez sur « c » pour accéder à la boîte de dialogue de configuration
-
Puis « 4 » pour « Error Report Mode »
-
Puis « 3 » pour « BadRAM Patterns »
La sortie passera dune liste déchecs de test individuels à une série de lignes badram =, chacune contenant un nouveau secteur défectueux. Parce que les lignes 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 une très mauvaise gradation, le format moins précis « 5 mégas autour de ce point » sera probablement un peu plus court ).
Résultat final:
Commentaires
- Maintenant, si je navais ‘ pas à le copier à la main et à le remettre à GRUB sans retaper des erreurs, ce serait fantastique.
- Jai pris une photo de celui-ci (téléphone avec appareil photo), chargez-le dans GIMP, = > grayscale = > invert = > contrast / gamma puis remettez-le à
tesseract ${IMG} stdout
.. puis vérifié et corrigé la ligne avant de linsérer dans / etc / default / grub … Cela a probablement pris aussi longtemps que de le saisir manuellement tout de suite ^^ - Certainement plus amusant que de le faire manuellement mais ugh
Réponse
Solution de contournement très sale et très agréable: lancez un memtester de lespace utilisateur, attendez quil trouve une erreur. Laissez-le, par exemple, à 0xfce2ea31.
Puis relancez memtester, mais sur cette adresse physique, donc:
memtester -p 0xfce20000 64k 128
Être bien sûr, il vaut mieux sacrifier plus que la page de ladresse problématique.Ici, nous avons sacrifié 64 Ko autour de ladresse défectueuse.
Si tout sest bien passé, il trouvera à nouveau lemplacement mémoire défectueux, beaucoup plus rapidement.
Puis suspendez le processus de test de mémoire avec un ctrl / z.
Conséquence: tant que le processus de test de mémoire nest pas suspendu, cela nenlèvera plus ressource, mais aucun autre processus ne pourra accéder à la mémoire défectueuse . Parce quelle sera allouée par le testeur de mémoire.
Particulièrement utile sur les gros serveurs distants. Le processus suspendu peut restez jusquà ce que la nouvelle RAM ne soit pas expédiée. Ou peut-être jusquau prochain Noël, quand un temps darrêt ne sera pas un si gros problème.
Commentaires
- Au lieu de cette astuce, vous pouvez également utiliser loutil
chmem
dans util-linux pour dire au noyau de mettre hors ligne une plage de mémoire particulière (déplacer les données ailleurs et ne jamais réutiliser les pages) . - @TooTea Jai essayé cet outil sur plusieurs machines, et il ne pouvait pas aactiver un seul bloc de mémoire.