memmap
Il y a ce tutoriel intitulé: Bad Memory HowTo qui explique comment désactiver la mémoire via le noyau en utilisant l' memmap
argument 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