Antworten:
Die Antwort lautet "Ja" und erfolgt transparent (vorausgesetzt, Sie verfügen über einen ECC-Speicher zum Erkennen von Fehlern und Ihre Kernel-Version ist mindestens 2.6.30, um weiterhin sicher zu arbeiten).
Grundsätzlich wird Ihr Speicher bei jedem Lesevorgang vom Prozessor überprüft und regelmäßig * gesäubert, um die Konsistenz mit den Fehlerkorrekturcodes (ECC) zu überprüfen. Wenn ein Fehler aufgetreten ist, erhalten Sie eine Maschinenprüfungsausnahme, die von mcelog ( http://www.mcelog.org/ ) protokolliert und abgerufen wird .
Wenn Ihr Fehler behoben werden konnte, wird ein "Leaky Bucket" -Zähler erhöht, wodurch ein zu oft fehlgeschlagenes physisches DIMM transparent durch ein anderes ersetzt wird. Auf diese Weise wird Ihre Speicherseite an einen neuen Speicherort kopiert, Ihre virtuelle Speicheradresse wird aktualisiert, um auf die neue Seite zu verweisen, und die alte Seite wird vom Betriebssystem als nicht mehr verwendbar markiert.
Dies wird unter Linux als "Soft-Off-Offing" bezeichnet (und die Stilllegung von Speicherseiten unter Solaris, ich weiß nichts über andere Betriebssysteme).
Wenn Ihr Fehler jedoch nicht behoben werden konnte, geschieht das, was als "Hard-Off-Offing" bezeichnet wird. Dies bedeutet, dass Ihre Speicherseite aus der normalen Speicherverwaltung des Betriebssystems entfernt wird und Ihre Anwendung beendet wird (Hinweis: durch ein abfangbares SIGBUS-Signal, das Ihnen sagt, wo Der Fehler ist aufgetreten, aber es ist selten genug, sich nicht darum zu kümmern und zu versuchen, ihn zu fangen. Wenn Ihre Speicherseite einer Datei zugeordnet und bereinigt ist, kann das Betriebssystem sie auch transparent an einem anderen physischen Speicherort neu laden, anstatt den Prozess abzubrechen.
Sie können mehr über mcelog lesen, es gibt viele Konfigurationsoptionen, Sie können andere Verhaltensweisen auslösen, Optionen und andere Hinweise dazu, was zu lesen ist und wie Sie sicherstellen können, dass mcelog auf Ihrem System ausgeführt wird.
* Scrubbing oder "Patrol Scrubbing" besteht darin, den Speicher zu lesen, ihn mit ECC auf Fehler zu prüfen und mit den korrigierten Speicherwörtern zu überschreiben, wenn ein Fehler entdeckt wird. Der Begriff Patrouillen-Scrubbing wird verwendet, um falsche Daten bei Fehlern beim Lesen des Speichers zu überschreiben, was manchmal als "Demand-Scrubbing" bezeichnet wird. Scrubbing ist eine Hardwareprozedur, die normalerweise über das BIOS aktiviert werden kann.
Das ist eigentlich eine schlechte Idee. Der Speicher kann nicht in einem schnellen Durchlauf zuverlässig getestet werden. Aus diesem Grund verwendet Software wie memtest86 mehrere Durchgänge mit unterschiedlichen Bitmustern, um den Speicher zu testen. Lösung:
Testspeicher mit memtest86 , vorzugsweise langer Test, über Nacht laufen lassen, es wird lange dauern.
Wenn ein fehlerhafter Speicher erkannt wird, verwenden Sie den memmap
Kernel-Parameter , um den Kernel zu zwingen, diesen Speicher nicht zu verwenden:
memmap = nn [KMG] $ ss [KMG] [KNL, ACPI] Markieren Sie einen bestimmten Speicher als reserviert. Zu verwendender Speicherbereich von ss bis ss + nn. Beispiel: Speicher von 0x18690000-0x1869ffff ausschließen memmap = 64K $ 0x18690000 oder memmap = 0x10000 $ 0x18690000
Darüber hinaus können Sie einen ECC-Speicher verwenden, der 1-Bit-Fehler korrigiert und 2-Bit-Fehler in Ihrem Speicher automatisch erkennt (und Sie erhalten vom Kernel Protokollmeldungen zu nicht korrigierbaren Speicherproblemen, falls diese auftreten).
Der Beitrag und die Antwort missverstehen das Problem. Das Speicher-Scrubbing soll verhindern, dass korrigierbare Einzelbitfehler zu nicht korrigierbaren Doppelfehlern werden. Der Scrubber hat gelegentlich nur den gesamten physischen Speicher (was dazu führt, dass Cache-Fehler auftreten). Wenn Einzelbitfehler vorliegen, werden diese korrigiert (und die Korrektur muss den korrekten Wert mithilfe eines Vergleichs und Austauschs neu schreiben), wodurch der Fehler behoben wird.
Wenn andernfalls ein zweiter Fehler in einem Wort auftritt, das bereits einen Fehler aufweist, ist das gesamte Wort nicht korrigierbar und das Betriebssystem muss etwas drastisches tun.
Das Scrubben ist wichtig, da ohne es Speicher, der gelesen, aber nicht geschrieben wird (wie Codepages), im Laufe der Zeit Fehler ansammeln kann.
Wenn Sie über ECC-Speicher verfügen, sollten Sie sich https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac genauer ansehen . (Ich fand "sdram_scrub_rate" besonders interessant.)
(Wenn dieser Link irgendwann unterbrochen wird (sollte es wirklich nicht). Ich würde vorschlagen, die entsprechende Linux-Dokumentation herunterzuladen und nach "scrub" zu suchen.)