Kann Linux Speicher schrubben?

Hat Linux einen Mechanismus, um Speicher zu "schrubben"? testen Sie z. B. den Speicher und markieren Sie Bereiche als schmutzig, wenn sie ausfallen, damit das System auch bei installierten schlechten RAM-Chips "sicher" weiterarbeiten kann?!

Author: Waxhead, 2011-12-28

4 answers

Die Antwort lautet Ja und erfolgt transparent (vorausgesetzt, Sie haben ECC-Speicher, um Fehler zu erkennen, und Ihre Kernelversion ist mindestens 2.6.30, um weiterhin sicher zu arbeiten).

Grundsätzlich wird Ihr Speicher bei jedem Lesen vom Prozessor überprüft und regelmäßig * geschrubbt, um die Konsistenz mit den Fehlerkorrekturcodes (ECC) zu überprüfen. Wenn ein Fehler aufgetreten ist, erhalten Sie eine Maschinenprüfausnahme, die dann von mcelog protokolliert und abgerufen wird (http://www.mcelog.org/).

If ihr Fehler war korrigierbar, er erhöht einen "undichten Bucket" - Zähler, wodurch ein physisches DIMM, das zu oft fehlschlägt, transparent durch einen anderen ersetzt wird. So wird Ihre Speicherseite an einen neuen Speicherort kopiert, Ihre virtuelle Speicheradresse wird aktualisiert, um auf die neue Seite zu zeigen, und die alte Seite wird vom Betriebssystem als nicht mehr verwendet markiert.

Dies wird unter Linux als "Soft-Offlining" bezeichnet (und unter Solaris als Speicherseite, ich weiß nichts über andere Betriebssysteme).

Wenn Ihr Fehler nicht war korrigierbar Was jedoch als "Hard-Offlining" bezeichnet wird, passiert, dh Ihre Speicherseite wird aus der normalen Betriebssystemspeicherverwaltung entfernt und Ihre Anwendung wird beendet (HINWEIS : durch ein eingängiges SIGBUS-Signal, das Ihnen mitteilt, wo der Fehler aufgetreten ist, 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 lesen mehr zu mcelog, es gibt viele Konfigurationsoptionen, Sie können andere Verhaltensweisen auslösen, Optionen und andere Leads zum Lesen und Sicherstellen, dass mcelog auf Ihrem System ausgeführt wird.


* Scrubbing oder" Patrol Scrubbing " besteht darin, Speicher zu lesen, ihn gegen ECC auf Fehler zu überprüfen und mit den korrigierten Speicherwörtern zu überschreiben, wenn ein Fehler entdeckt wird. Der Begriff Patrol Scrubbing wird von Opposition verwendet, um falsche Daten über Fehler im Speicher zu überschreiben., was manchmal als "Nachfrageschrubben"bezeichnet wird. Scrubbing ist ein Hardwarevorgang, der normalerweise über das BIOS aktiviert werden kann.

 2
Author: Cimbali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-05-25 10:40:51

Das ist eigentlich eine schlechte Idee. Der Speicher kann nicht zuverlässig in einem schnellen Sweep getestet werden. Aus diesem Grund verwendet Software wie memtest86 mehrere Durchgänge mit unterschiedlichen Bitmustern, um den Speicher zu testen. Lösung:

  1. Testspeicher mit memtest86, vorzugsweise langer Test, lassen Sie es über Nacht laufen, es wird lange dauern.

  2. Wenn fehlerhafter Speicher erkannt wird, verwenden Sie memmap kernel-Parameter, um den Kernel zu zwingen, diesen Speicher nicht zu verwenden:

   memmap=nn[KMG]$ss[KMG]
            [KNL,ACPI] Mark specific memory as reserved.
            Region of memory to be used, from ss to ss+nn.
            Example: Exclude memory from 0x18690000-0x1869ffff
                     memmap=64K$0x18690000
                     or
                     memmap=0x10000$0x18690000

In außerdem können Sie ECC-Speicher verwenden, der 1-Bit-Fehler korrigiert und 2-Bit-Fehler in Ihrem Speicher automatisch erkennt (und Sie erhalten Protokollnachrichten vom Kernel über nicht korrigierbare Speicherprobleme, wenn sie auftreten)

 7
Author: haimg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2011-12-28 20:58:12

Der Beitrag und die Antwort missverstehen das Problem. Memory Scrubbing soll verhindern, dass korrigierbare Einzelbitfehler zu nicht korrigierbaren Doppelbitfehlern werden. Der Scrubber speichert gelegentlich den gesamten physischen Speicher (was Cache-Misses dazu zwingt). Wenn es einzelne Bitfehler gibt, werden diese korrigiert (und die Korrektur muss den korrekten Wert mit einem Compare-and-Swap umschreiben), wodurch der Fehler behoben wird.

Andernfalls, wenn ein zweiter Fehler in einem Wort auftritt, das bereits einen hat fehler, das gesamte Wort ist nicht korrigierbar und das Betriebssystem muss etwas Drastisches tun.

Scrubbing ist wichtig, da ohne es Speicher, der gelesen, aber nicht geschrieben wird (wie Codepages), im Laufe der Zeit Fehler ansammeln kann.

 2
Author: Larry Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-06-13 13:51:29

Wenn Sie ECC-Speicher haben, möchten Sie vielleicht einen genaueren Blick auf https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-devices-edac. (Ich fand "sdram_scrub_rate" besonders interessant.)

(Wenn dieser Link irgendwann unterbrochen wird (sollte es wirklich nicht), würde ich vorschlagen, die entsprechende Linux-Dokumentation herunterzuladen und nach "scrub"zu suchen.)

 1
Author: Kai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2019-02-27 23:14:14