Frage Funktioniert memtest86 + Testspeicher, der verwendet wird, um selbst zu laufen?


Eine der häufigsten Serverausfallszenarien ist ein schlechter DRAM, manchmal sogar wenn ECC-Speicher verwendet wird.

memtest86+ ist eines der nützlichsten Werkzeuge zur Diagnose von DRAM-Problemen. Wie es sich am Anfang der Erinnerung lädt, habe ich mich gefragt, ob memtest86+ überprüft den Teil des Speichers, der memtest86+wird geladen in.

Ist der Speicher zugewiesen? memtest86+so klein, dass es egal ist, oder ist das möglich? memtest86+ könnte einen Defekt im DRAM verpassen, weil er die Speicherplätze, in denen er sich befindet, nicht testen kann?


62
2018-01-21 07:45


Ursprung


Obwohl diese Frage für einen Server relevant ist, ist sie auch für einen normalen PC relevant. Daher habe ich diese Frage an mich weitergeleitet Superbenutzer wo es mehr Menschen erreichen kann. - Cristian Ciupitu


Antworten:


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

Diese Code-Verschiebung wird in README.background innerhalb des memtest86 + Quellcode-Archivs beschrieben (die Datei ist etwas veraltet - zB besagt, dass die für memtest86 + Code verwendeten Adressen 0x2000 und 0x200000 sind, aber die niedrige Adresse wie in der Quelle definiert ist tatsächlich 0x10000, und die hohe Adresse ist entweder 0x2000000 oder 0x300000, abhängig von der Menge an Speicher in der Maschine).

Aber selbst mit diesem Umzugs-Trick ist memtest86 + nicht in der Lage, den gesamten Speicher aus folgenden Gründen zu testen:

  • Gewöhnlich reserviert die Firmware (BIOS) einige RAM-Bereiche für ihren eigenen Gebrauch (z. B. ACPI-Tabellen). Während auf diese RAM-Bereiche von der CPU zugegriffen werden kann, kann das Schreiben von etwas in sie zu einem unvorhersagbaren Verhalten führen.

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

  • Der RAM-Adressbereich zwischen 640K und 1M ist aufgrund von Macken des Legacy-PC-Speicherlayouts nicht zugänglich (ein Teil dieses RAM kann als ein Schatten für das BIOS-ROM und für SMM verwendet werden, andere Teile können vollständig unzugänglich sein).


78
2018-01-21 11:59



Interessant, ich vermisste seine Umsiedlungsfähigkeit. Offensichtlich sind SMM und die Likes außer Reichweite (abgesehen von spezifischer BIOS-Unterstützung). - shodanshok
Diese abgebildeten Bereiche schließen den DRAM generell aus, da sonst etwas "off-Modul" angesprochen wird? ROM und Peripheriegeräte sagen. - mckenzm
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 genau so fehlschlägt, dass Memtest fälschlicherweise Erfolg meldet, weil seine Befehle neu geschrieben wurden? Oder, wie viele Fehler braucht es? - John Dvorak
@ JanDvorak: In der Theorie ist es natürlich möglich. In der Praxis würde ich sagen, dass es nur ein bisschen wahrscheinlicher ist, als wenn man seinen Kopf auf die Tastatur schlägt und zufällig ein Shakespeare-Sonett tippt. - Ilmari Karonen


Nein, Memtest kann seinen eigenen Speicher nicht testen. Es ist jedoch so klein (nur einige KB), dass es kaum darauf ankommt. BEARBEITEN: Diese Aussage ist falsch, da memtest sich, wie in der ausgewählten Antwort angegeben, dynamisch selbst zum Testen verlagern kann alles benutzeradressierbarer Speicher.

-

Theoretisch kann ein moderner Prozessor zum Zeitpunkt des Bootens einen Teil seines Cache als programmierbaren Speicher konfigurieren, aus dem sehr kleine Programme (wie Memtest) ausgeführt werden können ohne DRAM überhaupt berühren.

Es ist jedoch eine modellspezifische Funktion (die BIOS-Unterstützung benötigt) und ich glaube nicht, dass Memtest es verwendet.


5
2018-01-21 10:02



Vielen Dank für Ihre Antwort. memtest testet auch den CPU-Cache. Also, wenn memtest würde in diesen Cache geladen werden, dann könnte dieser Teil des Cache nicht getestet werden, was problematischer ist, weil er viel kleiner ist als der Speicher? - Robin
Beses weiter memtest86 Dokumentation es tut nicht Testen Sie den Prozessor-Cache zumindest auf direkte Weise. Darüber hinaus haben moderne Prozessoren separate Anweisungen und Datencache (I $ und D $). Ausführbarer Code wird in den Befehlscache geladen und kann nicht direkt geändert / überschrieben werden - shodanshok
memtest86 + testet definitiv den CPU-Daten-Cache, aber das spielt für diese Frage keine Rolle. Nochmals vielen Dank für Ihre Antwort. - Robin
Bist du dir sicher? Ich dachte, dass es sich woanders kopiert hat, 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 wirklich schnellen Teil (das winzige Bit, wo sein Code / Daten gespeichert sind). - Peter Cordes
@ DmitryGrigoryev: Ah okay .. also ich habe etwas mehr gelernt :-) Cool danke! - Robin