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?
Antworten:
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).
quelle
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.
quelle
memtest
testet auch den CPU-Cache. Wennmemtest
also 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.