Wie kann man einen korrekten fehlerhaften RAM-Sektor gemäß der MemTest86 + -Fehleranzeige auf die Blacklist setzen?

28

MemTest86 + (die in Ubuntu 13.04 enthaltene Version) sagt

Failing address: 002f796c48 -    759.5 MB

Was muss ich im memmapKernel-Parameter angeben , um diesen Bereich zu umgehen?

Ich habe versucht zu laufen memtester 770MBund es heißt, dass alles in Ordnung ist, so dass es nicht so aussieht, als ob die Anzeigen des MemTest von Anfang an einen Fehler in der Größe von 759,5 MB bedeuten.

Wie interpretiert man diese MemTest-Anzeige zur Konfiguration memmap?

Ich habe kein Geld, um neuen Arbeitsspeicher zu kaufen, und der Fehler scheint einfach zu sein. Ich hoffe, ich kann ihn einfach überschreiben.

Ivan
quelle
FWIW markiert der Kernel bestimmte Seiten als "reserviert", wenn er ein fehlerhaftes Segment erkennt, dieses jedoch wiederherstellen kann. Zeigt die Ausgabe von "free -m" Zweierpotenzen für die Summen? Ich erwähne dies, um zu erklären, warum memtester den fehlerhaften RAM nicht erkennt, memtest86 + jedoch.
Bratchley
Sieht eigentlich nicht nach Zweierpotenzen aus: i.stack.imgur.com/l86L1.png
Ivan
Wenn ein Fehler erkannt wird (wenn Sie sogar einen ecc ram haben), ist es in der Regel zu spät. Auch free -m meldet niemals eine gerade Potenz von zwei, da das BIOS und der Kernel beide etwas RAM reservieren.
Psusi
1
Ich habe davon geträumt, einen ECC-Laptop zu kaufen, konnte aber keine verfügbaren Angebote finden. Sie scheinen nicht zu existieren.
Ivan
Sieht so aus, als würde der Kernel auch drucken, wenn er eine fehlerhafte Seite findet (Zeile 264-265).
Bratchley

Antworten:

26

memmap

Es gibt dieses Tutorial mit dem Titel: Bad Memory HowTo, in dem das Deaktivieren des Speichers über den Kernel mit dem memmapArgument an den Kernel erläutert wird . Je nach Anleitung haben Sie zwei Möglichkeiten memmap:

  • Alles ausschalten nach dem schlechten Gedächtnis - (mem=###M option)
  • Schalten Sie nur den Speicher um den schlechten Speicher aus - (memmap=#M$###M option)

Wenn memtest mit der ersten Option meldet, dass bei 600 MB Arbeitsspeicher ein Fehler vorliegt, können Sie den Arbeitsspeicher von diesem Punkt bis zum Ende des Arbeitsspeichers wie folgt deaktivieren:

 mem=595M

Wenn 802M- und 807M-RAM fehlerhaft sind, können Sie einen 10M-RAM-Abschnitt ab 800M wie folgt deaktivieren:

memmap=10M$800M

HINWEIS: Dadurch werden die 10M nach der 800M-Basisadresse auf die schwarze Liste gesetzt. Sie sollten memtest86+danach ausführen , um zu bestätigen, dass dieses Argument korrekt ist.

BadRAM

Für Ubuntu ist ein Patch namens BadRam verfügbar. Hier in diesem Beitrag mit dem Titel: BadRAM auf der Ubuntu-Community-Site wird sehr gut darauf eingegangen.

Nachdem Sie den Patch mit den Details von dieser Seite auf den Kernel angewendet haben, nehmen Sie Änderungen an Ihrem Grub2-Setup vor:

Auszug von dieser Seite für Grub2

Die GRUB2-Konfigurationsdatei in Natty enthält eine Zeile zum Konfigurieren von Ausschlüssen für fehlerhafte Kernel-RAMs. Ich gehe also davon aus, dass dies die bevorzugte Methode ist, um einen fehlerhaften Speicherbereich abzubilden. Die Leitung, die ich eingestellt habe, war

GRUB_BADRAM = "0x7DDF0000,0xffffc000"

Auf jeder Website, die ich finden konnte, wurde vorgeschlagen, memtest86 auszuführen und die BadRAM-Einstellungen anzuzeigen. memtest86 hat mir eine Seite mit Dingen gegeben, die ich hätte eingeben müssen. Ich konnte sehen, dass sich alle Adressen in einem 16-KByte-Block befanden, also wollte ich diesen 16-KByte-Block nur außer Betrieb setzen. So habe ich den richtigen Eintrag generiert.

Der erste Parameter ist einfach. Das ist die Basisadresse des fehlerhaften Speichers. In meinem Fall konnte ich feststellen, dass alle ungültigen Adressen größer als 0x7DDF0000 und kleiner als 0x7DDF4000 waren. Also habe ich den Anfang des 16K-Blocks als meine Startadresse genommen.

Der zweite Parameter ist eine Maske. Sie geben Einsen an, in denen der gewünschte Adressbereich dieselben Werte aufweist, und Nullen, in denen sie variieren. Dies bedeutet, dass Sie Ihren Adressbereich so auswählen müssen, dass nur die niederwertigen Bits variieren. Wenn ich meine Adresse betrachte, ist der erste Teil der Maske einfach. Sie möchten mit 0xffff beginnen. Für das nächste Knabbern werde ich mit Bitmaps erklären. Ich möchte von 0000 bis 0011 reichen. Die Maske für Badram wäre also 1100 oder ein Hex. C. Die letzten 3 Halbbytes müssen alle Nullen in der Maske sein, da der gesamte Bereich zugeordnet werden soll. Wir erhalten also ein Gesamtergebnis von 0xffffc000.

Nachdem ich diese Zeile in / etc / default / grub gesetzt hatte, führte ich sudo update-grub aus und startete neu. Mein fehlerhafter Speicher wurde nicht mehr verwendet. Mit dieser Methode sind keine Kernel-Patches erforderlich, um fehlerhaften Speicher zuzuordnen.

Folgen Sie # 1

Wenn Sie auf der Wikipedia-Seite nach memtest86 + suchen, heißt es wie folgt:

Auszug aus der Wikipedia-Seite von Memtest86

Ab Memtest86 2.3 und Memtest86 + 1.60 kann das Programm eine Liste der fehlerhaften RAM-Bereiche im Format ausgeben, das vom BadRAM-Patch für den Linux-Kernel erwartet wird. Mit diesen Informationen kann ein Linux-System ein RAM-Modul zuverlässig verwenden, auch wenn es einige fehlerhafte Bits enthält. Grub2 ist in der Lage, dieselben Informationen an einen nicht gepatchten Kernel zu liefern, wodurch die Notwendigkeit des BadRAM-Patches zunichte gemacht wird.

Außerdem bin ich auf diese Gentoo-Seite gestoßen, die die memmap=...Verwendung einer hexadezimalen Adresse angibt , sodass Sie sie folgendermaßen angeben können:

memmap=5M$0x2f796c48

Der 5M ist nur eine Vermutung, offensichtlich können Sie ihn niedriger oder höher einstellen, je nachdem, wie viel RAM in dieser Region Sie weglassen möchten / müssen.

Schließlich können Sie die Größe auch in hex angeben:

memmap=0x10000$0x2f796c48

64 KB ab Adresse 0x2f796c48 werden ignoriert.

Verweise

slm
quelle
"800M bis 804M" soll "800M bis 810M" sein, nehme ich an ...
Hauke ​​Laging
Es kann sein, aber was ich geschrieben habe, ist auch in Ordnung, obwohl es mehr Speicher wegwirft als die 4M zwischen 800M und 810M.
slm
1
1. Ich kenne die memmapOption, aber die Frage bezieht sich eher auf die Interpretation der memtest86 + -Ausgabe. Ich habe ein konkretes Beispiel für memtest86 + Ausgang gegeben und um Hilfe bitten bei der Konfiguration memmap entsprechend in diesem speziellen Fall. 2. "Sie sollten danach memtest86 + ausführen, um zu bestätigen, dass dieses Argument korrekt ist." - memtest86 + läuft vor einem Betriebssystemkernel, daher bezweifle ich ernsthaft, dass die memmapLinux-Kernel-Option dies beeinflussen kann.
Ivan
@Ivan, 1. Ich dachte, es wäre angesichts der Beispiele, die ich beigefügt habe, offensichtlich, aber Sie müssten etwas sagen: In memmap=5M$759MIhrem speziellen Fall schlägt memtest86 + mit 759,5 MB fehl. 2. Ich meinte, dass Sie die memmap=...Option auch an memtest86 + übergeben sollten. Das war von mir nicht getestet / unbestätigt, aber etwas, das Sie möglicherweise mit memtest86 + tun können.
slm
1
OK danke. Ich war mir nicht sicher, was "002f796c48 - 759.5 MB" bedeutet (möglicherweise 759.5 MB nach der 002f796c48-Adresse oder ähnlichem), und ich habe nie vermutet, dass ich Linux-Kernelparameter an MemTest86 + weitergeben kann (ich dachte, es wäre nichts dagegen) mit Linux machen).
Ivan
14

Memtest86 + (ich habe 4.20 benutzt) kann ein badram Format direkt ausgeben.

  1. Drücken Sie 'c', um zum Konfigurationsdialog zu gelangen memtest Konfigurationsdialog

  2. Dann '4' für "Fehlermeldungsmodus"

    memtest error report mode dialog

  3. Dann '3' für "BadRAM Patterns"

Die Ausgabe ändert sich von einer Liste einzelner Testfehler in eine Reihe von badram = -Linien, die jeweils einen neuen fehlerhaften Sektor enthalten. Da die Linien benachbarte Segmente anhängen und verschmelzen, können Sie den Test einfach über Nacht kopflos ausführen und die endgültige gedruckte Linie verwenden (wenn Sie jedoch ein wirklich schlechtes Dimmen haben, ist das weniger genaue Format "5 Megabyte um diesen Punkt" wahrscheinlich etwas kürzer ).

Endergebnis:

Memtest86 + zeigt die Ausgabe des Badrams

Skorgu
quelle
4
Wenn ich das nicht von Hand kopieren und stattdessen GRUB übergeben müsste, ohne Tippfehler zu machen, wäre das fantastisch.
Ehtesh Choudhury
8
Was ich getan habe, ist, ein Foto davon zu machen (Kamerahandy), es in GIMP zu laden, => Graustufen => Invertieren => Kontrast / Gamma, dann zu übergeben, tesseract ${IMG} stdoutdann die Zeile zu überprüfen und zu korrigieren, bevor sie in / etc / default eingefügt wird / grub ... Wahrscheinlich hat es genauso lange
gedauert,
3
Auf jeden Fall mehr Spaß als manuell
fliegende Schafe