Testet memtest86 + den Speicher, der zur Ausführung verwendet wird?


65

Eines der häufigsten Serverausfallszenarien ist fehlerhafter DRAM, manchmal sogar dann, wenn ECC-Speicher verwendet wird.

memtest86+ist eines der nützlichsten Tools zur Diagnose von DRAM-Problemen. Da es sich zu Beginn des Speichers selbst lädt, habe ich mich gefragt, ob es memtest86+den Teil des Speichers überprüft, in den memtest86+es geladen wird.

Ist der zugewiesene Speicher memtest86+so klein, dass es keine Rolle spielt, oder ist es möglich, dass memtest86+ein Fehler im DRAM übersehen wird, weil die Speicherorte, in denen er sich befindet, nicht getestet werden können?


8
Während diese Frage für einen Server relevant ist, ist sie auch für einen normalen PC relevant. Ich habe daher dafür gestimmt, diese Frage auf Super User zu verschieben , um mehr Menschen zu erreichen.
Cristian Ciupitu

Antworten:


78

Offensichtlich kann memtest86 + den Speicherbereich, der derzeit den ausführbaren memtest86 + -Code enthält, nicht testen (aber wenn in diesem Bereich Speicherfehler auftreten, ist es sehr wahrscheinlich, dass der Test selbst abstürzt). Memtest86 + ist jedoch in der Lage, seinen eigenen Code zur Laufzeit an eine andere Adresse zu verschieben und mit diesem Trick den gesamten Speicher zu testen, der von der Firmware (BIOS) verwendet werden darf - nur nicht alle auf einmal.

Diese Codeverlagerung wird in README.background im Quellcode-Archiv von memtest86 + beschrieben (die Datei ist etwas veraltet - z. B. besagt sie, dass die für memtest86 + -Code verwendeten Adressen 0x2000 und 0x200000 sind, die in der Quelle definierte niedrige Adresse jedoch tatsächlich 0x10000, und die High-Adresse ist entweder 0x2000000 oder 0x300000 (abhängig von der Speicherkapazität des Computers).

Aber selbst mit diesem Umzugstrick kann memtest86 + aus folgenden Gründen nicht den gesamten Speicher testen:

  • Normalerweise reserviert die Firmware (BIOS) einige RAM-Bereiche für die eigene Verwendung (z. B. ACPI-Tabellen). Während die CPU auf diese RAM-Bereiche zugreifen kann, kann das Beschreiben dieser Bereiche zu unvorhersehbarem Verhalten führen.

  • Ein Teil des Arbeitsspeichers wird für den Systemverwaltungsmodus verwendet und ist außerhalb des privilegierten SMM-Codes nicht einmal von der CPU aus zugänglich.

  • Auf den RAM-Adressbereich zwischen 640 KB und 1 MB kann aufgrund von Fehlern im alten PC-Speicherlayout nicht zugegriffen werden (ein Teil dieses RAM kann als Schatten für das BIOS-ROM und für SMM verwendet werden, andere Teile sind möglicherweise vollständig unzugänglich).


1
Interessanterweise habe ich seine Umsiedlungsfähigkeit verpasst. Offensichtlich sind SMM und dergleichen außerhalb des zulässigen Bereichs (abgesehen von der spezifischen BIOS-Unterstützung).
Shodanshok

Diese abgebildeten Bereiche schließen den DRAM im Allgemeinen aus, da etwas anderes "außerhalb des Moduls" angesprochen wird. ROM und Peripheriegeräte sagen.
McKenzm

3
Wenn Sie mehrere RAM-Module haben, führen Sie einen zweiten Test durch, nachdem Sie sie ausgetauscht haben ...
JFL

Ist es möglich, dass der Speicher nicht ordnungsgemäß funktioniert, damit memtest den Erfolg nicht korrekt meldet, weil die Anweisungen neu geschrieben wurden? Oder wie viele Fehler braucht es?
John Dvorak

3
@JanDvorak: Theoretisch ist das natürlich möglich. In der Praxis würde ich sagen, dass es nur geringfügig wahrscheinlicher ist, den Kopf auf die Tastatur zu schlagen und zufällig ein Shakespeare-Sonett auszutippen.
Ilmari Karonen

5

Nein, memtest kann seinen eigenen Speicher nicht testen. Es ist jedoch so klein (nur einige KB), dass es kaum darauf ankommt. BEARBEITEN: Diese Anweisung ist falsch, da sich memtest, wie in der ausgewählten Antwort angegeben, dynamisch verlagern kann, um den gesamten vom Benutzer adressierbaren Speicher zu testen .

-

Theoretisch kann ein moderner Prozessor beim Booten einen Teil seines Caches als programmierbaren Speicher konfigurieren, aus dem heraus sehr kleine Programme (als memtest) ausgeführt werden können, ohne den DRAM zu berühren.

Es ist jedoch eine modellspezifische Funktion (die BIOS-Unterstützung erfordert), und ich glaube nicht, dass memtest sie verwendet.


Vielen Dank für Ihre Antwort. memtesttestet auch den CPU-Cache. Wenn memtestalso in diesen Cache geladen werden würde, könnte dieser Teil des Cache nicht getestet werden, was problematischer ist, weil er viel kleiner als der Speicher ist.
Robin

2
Besed auf memtest86 Dokumentation ist es nicht testen Sie den Prozessor - Cache, zumindest in direkter Weise. Darüber hinaus haben moderne Prozessoren getrennte Instruktionen und Daten-Cache (I $ und D $). Ausführbarer Code wird in den Anweisungscache geladen und kann nicht direkt geändert / überschrieben werden
shodanshok

1
memtest86 + testet definitiv den CPU-Datencache, aber das spielt für diese Frage keine Rolle. Nochmals vielen Dank für Ihre Antwort.
Robin

3
Bist du dir da sicher? Ich dachte, es kopiert sich woanders, während es den Speicher testet, in dem es normalerweise lebt. Deshalb hat jeder Test einen langsamen Teil (den größten Teil des Speichers) und einen sehr schnellen Teil (den winzigen Teil, in dem sein Code / seine Daten gespeichert sind).
Peter Cordes

1
@DmitryGrigoryev: Ah okay .. also hab ich noch was gelernt :-) Cool danke!
Robin
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.