ECC-Speicher - ECC memory

ECC- DIMMs haben normalerweise neun Speicherchips auf jeder Seite, einen mehr als normalerweise bei Nicht-ECC-DIMMs zu finden ist (einige Module können 5 oder 18 haben).

Fehlerkorrekturcodespeicher ( ECC-Speicher ) ist eine Art Computerdatenspeicher , der einen Fehlerkorrekturcode (ECC) verwendet, um eine n-Bit- Datenbeschädigung, die im Speicher auftritt, zu erkennen und zu korrigieren . ECC-Speicher wird in den meisten Computern verwendet, bei denen Datenbeschädigungen unter keinen Umständen toleriert werden können, wie z. B. industrielle Steuerungsanwendungen, kritische Datenbanken und infrastrukturelle Speichercaches.

Typischerweise hält der ECC-Speicher ein Speichersystem aufrecht, das gegen Einzelbitfehler immun ist: Die Daten, die aus jedem Wort gelesen werden, sind immer dieselben wie die Daten, die in es geschrieben wurden, selbst wenn eines der tatsächlich gespeicherten Bits auf die falscher Zustand. Die meisten Nicht-ECC-Speicher können Fehler nicht erkennen, obwohl einige Nicht-ECC-Speicher mit Paritätsunterstützung eine Erkennung, aber keine Korrektur ermöglichen.

Beschreibung

Fehlerkorrekturcodes schützen vor unentdeckter Beschädigung von Speicherdaten und werden in Computern verwendet, bei denen eine solche Beschädigung nicht akzeptabel ist, beispielsweise in einigen wissenschaftlichen und finanziellen Computeranwendungen oder in Datenbank- und Dateiservern . ECC reduziert auch die Anzahl der Abstürze, die insbesondere bei Mehrbenutzer-Serveranwendungen und Systemen mit maximaler Verfügbarkeit inakzeptabel sind.

Elektrische oder magnetische Interferenzen innerhalb eines Computersystems können dazu führen, dass ein einzelnes Bit des dynamischen Direktzugriffsspeichers (DRAM) spontan in den entgegengesetzten Zustand wechselt. Ursprünglich wurde angenommen, dass dies hauptsächlich auf Alpha-Teilchen zurückzuführen ist, die von Verunreinigungen im Chip-Verpackungsmaterial emittiert werden, aber Untersuchungen haben gezeigt, dass die Mehrheit der einmaligen weichen Fehler in DRAM-Chips auf Hintergrundstrahlung zurückzuführen ist , hauptsächlich Neutronen von Sekundärstrahlen der kosmischen Strahlungray , die den Inhalt einer oder mehrerer Speicherzellen ändern oder die Schaltung stören können, die verwendet wird, um sie zu lesen oder zu schreiben. Daher nehmen die Fehlerraten mit steigender Höhe schnell zu; Im Vergleich zum Meeresspiegel ist die Neutronenflussrate beispielsweise bei 1,5 km 3,5-mal höher und bei 10–12 km (der Reiseflughöhe von Verkehrsflugzeugen) 300-mal höher. Daher erfordern Systeme, die in großen Höhen betrieben werden, besondere Vorkehrungen für die Zuverlässigkeit.

Beispielsweise enthielt die 1997 gestartete Raumsonde Cassini-Huygens zwei identische Flugschreiber mit jeweils 2,5 Gigabit Speicher in Form von Arrays kommerzieller DRAM-Chips. Aufgrund der integrierten EDAC- Funktionalität meldete die technische Telemetrie des Raumfahrzeugs die Anzahl der (korrigierbaren) Einzel-Bit-pro-Wort-Fehler und (nicht korrigierbaren) Doppel-Bit-pro-Wort-Fehler. Während der ersten 2,5 Jahre des Fluges meldete das Raumfahrzeug eine nahezu konstante Einzelbitfehlerrate von etwa 280 Fehlern pro Tag. Doch am 6. November 1997, während des ersten Monats im Weltraum, stieg die Zahl der Fehler an diesem einzigen Tag um mehr als das Vierfache. Dies wurde auf ein solares Teilchenereignis zurückgeführt , das vom Satelliten GOES 9 entdeckt worden war .

Es gab Bedenken, dass DRAM-Chips mit weiter steigender DRAM-Dichte und damit kleineren Komponenten auf den Chips bei gleichzeitig weiter sinkenden Betriebsspannungen häufiger von solcher Strahlung betroffen sein werden – da energieärmere Teilchen dies können um den Zustand einer Speicherzelle zu ändern. Andererseits sind kleinere Zellen kleinere Ziele, und der Wechsel zu Technologien wie SOI kann einzelne Zellen weniger anfällig machen und so diesem Trend entgegenwirken oder sogar umkehren. Jüngste Studien zeigen, dass Einzelereignis-Störungen aufgrund kosmischer Strahlung mit der Prozessgeometrie dramatisch abgenommen haben und frühere Bedenken hinsichtlich steigender Bitzellenfehlerraten unbegründet sind.

Forschung

Zwischen 2007 und 2009 veröffentlichte Arbeiten zeigten stark unterschiedliche Fehlerraten mit einem Unterschied von über 7 Größenordnungen, die von 10 −10 Fehler/Bit·h (ungefähr ein Bitfehler pro Stunde pro Gigabyte Speicher) bis 10 −17 Fehler/Bit·h . reichten (ungefähr ein Bitfehler pro Jahrtausend pro Gigabyte Speicher). Auf der Konferenz SIGMETRICS/Performance '09 wurde eine groß angelegte Studie vorgestellt, die auf der sehr großen Anzahl von Google -Servern basiert . Die tatsächlich gefundene Fehlerquote lag mit 25.000 (2,5 × 10 −11 Fehler/bit·h) und 70.000 (7,0 × 10 −11 Fehler/bit·h ) um mehrere Größenordnungen höher als bei früheren Klein- oder Laborstudien , oder 1 Bitfehler pro Gigabyte RAM pro 1,8 Stunden) Fehler pro Milliarde Gerätestunden pro Megabit. Mehr als 8 % der DIMM-Speichermodule waren pro Jahr von Fehlern betroffen.

Die Folge eines Speicherfehlers ist systemabhängig. In Systemen ohne ECC kann ein Fehler entweder zum Absturz oder zur Beschädigung von Daten führen; In großen Produktionsstätten sind Speicherfehler eine der häufigsten Hardware-Ursachen für Maschinenabstürze. Speicherfehler können Sicherheitslücken verursachen. Ein Speicherfehler kann keine Folgen haben, wenn er ein Bit ändert, das weder eine beobachtbare Fehlfunktion verursacht noch die in Berechnungen verwendeten oder gespeicherten Daten beeinflusst. Eine Simulationsstudie aus dem Jahr 2010 zeigte, dass bei einem Webbrowser nur ein kleiner Teil der Speicherfehler zu Datenbeschädigungen führte, obwohl die Auswirkungen von Speicherfehlern größer waren, als für unabhängige weiche Fehler zu erwarten war, da viele Speicherfehler zeitweilig und korreliert sind.

Einige Tests kommen zu dem Schluss, dass die Isolation von DRAM- Speicherzellen durch unbeabsichtigte Nebenwirkungen speziell gestalteter Zugriffe auf benachbarte Zellen umgangen werden kann. Somit führt der Zugriff auf im DRAM gespeicherte Daten dazu, dass Speicherzellen ihre Ladungen verlieren und elektrisch interagieren, als Ergebnis der hohen Zellendichte in modernen Speichern, wodurch der Inhalt benachbarter Speicherzeilen verändert wird, die beim ursprünglichen Speicherzugriff tatsächlich nicht adressiert wurden. Dieser Effekt ist bekannt als Reihe Hammer , und es hat auch in einigen verwendet privilege escalation Computer - Sicherheit nutzt .

Ein Beispiel für einen Einzelbitfehler, der von einem System ohne Fehlerprüfung ignoriert würde, eine Maschine mit Paritätsprüfung anhalten würde oder von ECC unsichtbar korrigiert würde: ein einzelnes Bit bleibt aufgrund eines fehlerhaften Chips auf 1 hängen, oder aufgrund von Hintergrund- oder kosmischer Strahlung auf 1 geändert wird; eine Tabellenkalkulation, die Zahlen im ASCII-Format speichert, wird geladen, und das Zeichen "8" (Dezimalwert 56 in der ASCII-Codierung) wird in dem Byte gespeichert, das das festsitzende Bit an seiner niedrigsten Bitposition enthält; Anschließend wird eine Änderung an der Tabellenkalkulation vorgenommen und sie wird gespeichert. Als Ergebnis wurde die "8" (0011 100 0 binär) stillschweigend zu einer "9" (0011 100 1 ).

Lösungen

Es wurden mehrere Ansätze entwickelt, um mit unerwünschten Bit-Flips umzugehen, einschließlich immunitätsbewusster Programmierung , RAM-Paritätsspeicher und ECC- Speicher.

Dieses Problem kann gemildert werden, indem DRAM-Module verwendet werden, die zusätzliche Speicherbits enthalten, und Speichercontroller, die diese Bits ausnutzen. Diese zusätzlichen Bits werden verwendet, um die Parität aufzuzeichnen oder einen Fehlerkorrekturcode (ECC) zu verwenden. Die Parität ermöglicht die Erkennung aller Einzelbitfehler (eigentlich jede ungerade Anzahl falscher Bits). Der gebräuchlichste Fehlerkorrekturcode, ein Single-Error Correction and Double-Error Detection (SECDED) Hamming-Code , ermöglicht die Korrektur eines Einzelbitfehlers und (in der üblichen Konfiguration mit einem zusätzlichen Paritätsbit) Doppelbitfehlern zu erkennen. Chipkill ECC ist eine effektivere Version, die auch mehrere Bitfehler korrigiert, einschließlich des Verlustes eines gesamten Speicherchips.

Implementierungen

Seymour Cray sagte bekanntlich " Parität ist für Landwirte " , als er gefragt wurde , warum er dies aus der CDC 6600 herausgelassen hat . Später nahm er die Parität in die CDC 7600 auf , was dazu führte, dass Experten bemerkten, dass "anscheinend viele Landwirte Computer kaufen". Der ursprüngliche IBM-PC und alle PCs bis in die frühen 1990er Jahre verwendeten Paritätsprüfung. Spätere meistens nicht.

Ein ECC-fähiger Speichercontroller kann im Allgemeinen Fehler eines einzelnen Bits pro Wort (der Einheit der Busübertragung ) erkennen und korrigieren und Fehler von zwei Bits pro Wort erkennen (aber nicht korrigieren). Das BIOS einiger Computer ermöglicht in Abstimmung mit Betriebssystemen wie einigen Versionen von Linux , BSD und Windows ( Windows 2000 und höher) das Zählen von erkannten und korrigierten Speicherfehlern, teilweise um fehlerhafte Speichermodule zu identifizieren, bevor das Problem auftritt katastrophal.

Einige DRAM-Chips enthalten "interne" Fehlerkorrekturschaltungen auf dem Chip, die es Systemen mit Nicht-ECC-Speichercontrollern ermöglichen, immer noch die meisten Vorteile des ECC-Speichers zu nutzen. In einigen Systemen kann ein ähnlicher Effekt durch die Verwendung von EOS-Speichermodulen erreicht werden .

Die Fehlererkennung und -korrektur hängt von einer Erwartung der auftretenden Fehlerarten ab. Implizit wird angenommen, dass der Ausfall jedes Bits in einem Speicherwort unabhängig ist, was zur Unwahrscheinlichkeit zweier gleichzeitiger Fehler führt. Dies war früher der Fall, als Speicherchips ein Bit breit waren, was in der ersten Hälfte der 1980er Jahre typisch war; spätere Entwicklungen brachten viele Bits in denselben Chip. Diese Schwäche wird durch verschiedene Technologien angesprochen, darunter IBM 's Chipkill , Sun Microsystems ' Erweiterte ECC , Hewlett Packard 's Chipspare und Intel ' s Single Device Data Correction (SDDC).

Der DRAM- Speicher kann einen erhöhten Schutz gegen weiche Fehler bieten , indem er sich auf Fehlerkorrekturcodes verlässt. Ein solcher fehlerkorrigierender Speicher , der als ECC- oder EDAC-geschützter Speicher bekannt ist, ist insbesondere für Anwendungen mit hoher Fehlertoleranz, wie beispielsweise Server, sowie für Anwendungen im Weltraum aufgrund erhöhter Strahlung wünschenswert . Einige Systeme " scrubben " auch den Speicher, indem sie periodisch alle Adressen lesen und gegebenenfalls korrigierte Versionen zurückschreiben, um weiche Fehler zu beseitigen.

Die Verschachtelung ermöglicht die Verteilung der Wirkung eines einzelnen kosmischen Strahls, wodurch möglicherweise mehrere physikalisch benachbarte Bits über mehrere Wörter hinweg gestört werden, indem benachbarte Bits verschiedenen Wörtern zugeordnet werden. Solange ein einzelnes Ereignis-Upset (SEU) die Fehlerschwelle (zB ein einzelner Fehler) in einem bestimmten Wort zwischen den Zugriffen nicht überschreitet, kann es korrigiert werden (zB durch einen Einzelbit-Fehlerkorrekturcode) und eine effektive fehlerfreies Speichersystem aufrechterhalten werden kann.

Fehlerkorrigierende Speichercontroller verwenden traditionell Hamming-Codes , obwohl einige Triple Modular Redundancy (TMR) verwenden. Letzteres wird bevorzugt, weil seine Hardware schneller ist als die des Hamming-Fehlerkorrekturschemas. Weltraumsatellitensysteme verwenden oft TMR, obwohl Satelliten-RAM normalerweise Hamming-Fehlerkorrektur verwendet.

Viele frühe Implementierungen von ECC-Speicher maskieren korrigierbare Fehler, handeln "so, als ob" der Fehler nie aufgetreten wäre, und melden nur nicht korrigierbare Fehler. Moderne Implementierungen protokollieren sowohl korrigierbare Fehler (CE) als auch nicht korrigierbare Fehler (UE). Manche Leute tauschen proaktiv Speichermodule aus, die hohe Fehlerraten aufweisen, um die Wahrscheinlichkeit nicht korrigierbarer Fehlerereignisse zu verringern.

Viele ECC-Speichersysteme verwenden eine "externe" EDAC-Schaltung zwischen der CPU und dem Speicher. Einige Systeme mit ECC-Speicher verwenden sowohl interne als auch externe EDAC-Systeme; Das externe EDAC-System sollte so ausgelegt sein, dass es bestimmte Fehler korrigiert, die das interne EDAC-System nicht korrigieren kann. Moderne Desktop- und Server-CPUs integrieren die EDAC-Schaltung in die CPU, noch bevor der Wechsel zu CPU-integrierten Speichercontrollern, die mit der NUMA- Architektur verwandt sind, erfolgt . Die CPU-Integration ermöglicht ein straffreies EDAC-System im fehlerfreien Betrieb.

Ab 2009 verwenden die gängigsten Fehlerkorrekturcodes Hamming- oder Hsiao-Codes, die Einzelbit-Fehlerkorrektur und Doppelbit-Fehlererkennung (SEC-DED) bieten. Andere Fehlerkorrekturcodes wurden zum Schutz des Speichers vorgeschlagen – Doppelbit-Fehlerkorrektur- und Dreifachbit-Fehlererkennungs-(DEC-TED)-Codes, Einzel-Nibble-Fehlerkorrektur- und Doppel-Nibble-Fehlererkennungs-(SNC-DND)-Codes, Reed– Solomon-Fehlerkorrekturcodes usw. In der Praxis wird die Mehrbitkorrektur jedoch gewöhnlich durch Verschachteln mehrerer SEC-DED-Codes implementiert.

Frühe Forschungen versuchten, den Flächen- und Verzögerungsaufwand von ECC-Schaltungen zu minimieren. Hamming zeigte zuerst, dass SEC-DED-Codes mit einer bestimmten Prüfmatrix möglich sind. Hsiao zeigte, dass eine alternative Matrix mit Spalten mit ungeradem Gewicht eine SEC-DED-Fähigkeit mit weniger Hardwarebereich und kürzerer Verzögerung als herkömmliche Hamming-SEC-DED-Codes bietet. Neuere Forschungen versuchen auch, die Leistung zusätzlich zur Minimierung der Fläche und der Verzögerung zu minimieren.

Zwischenspeicher

Viele CPUs verwenden Fehlerkorrekturcodes im On-Chip-Cache , darunter die Intel Itanium- , Xeon- , Core- und Pentium- Prozessoren (seit P6-Mikroarchitektur ), der AMD Athlon , Opteron , alle Zen- und Zen+ -basierten Prozessoren ( EPYC , EPYC Embedded .). , Ryzen und Ryzen Threadripper ) und die DEC Alpha 21264.

Ab 2006 sind EDC/ECC und ECC/ECC die beiden gängigsten Cache-Fehlerschutztechniken, die in kommerziellen Mikroprozessoren verwendet werden. Die EDC/ECC-Technik verwendet einen Fehlererkennungscode (EDC) im Level-1-Cache. Wenn ein Fehler erkannt wird, werden die Daten aus dem ECC-geschützten Level-2-Cache wiederhergestellt. Die ECC/ECC-Technik verwendet einen ECC-geschützten Level-1-Cache und einen ECC-geschützten Level-2-Cache. CPUs, die die EDC/ECC-Technik verwenden, schreiben immer durch alle STORE in den Level-2-Cache, sodass, wenn ein Fehler während eines Lesevorgangs aus dem Level-1-Datencache erkannt wird, eine Kopie dieser Daten aus dem Level-2-Cache wiederhergestellt werden kann .

Registrierter Speicher

Zwei 8 GB DDR4 -2133 ECC 1,2 V RDIMMs

Registrierter oder gepufferter Speicher ist nicht dasselbe wie ECC; Die Technologien erfüllen unterschiedliche Funktionen. Es ist üblich, dass in Servern verwendeter Speicher sowohl registriert wird, um viele Speichermodule ohne elektrische Probleme verwenden zu können, als auch ECC für die Datenintegrität. Der in Desktop-Computern verwendete Speicher ist aus Wirtschaftlichkeitsgründen auch nicht geeignet. Es ist jedoch ungepufferter (nicht registrierter) ECC-Speicher verfügbar, und einige Nicht-Server-Motherboards unterstützen die ECC-Funktionalität solcher Module, wenn sie mit einer CPU verwendet werden, die ECC unterstützt. Registrierter Speicher funktioniert bei Motherboards ohne Pufferschaltung nicht zuverlässig und umgekehrt.

Vorteile und Nachteile

Letztendlich gibt es einen Kompromiss zwischen dem Schutz vor ungewöhnlichem Datenverlust und höheren Kosten.

ECC-Speicher ist im Vergleich zu Nicht-ECC-Speicher normalerweise teurer, da zusätzliche Hardware für die Herstellung von ECC-Speichermodulen erforderlich ist und aufgrund geringerer Produktionsvolumina von ECC-Speicher und zugehöriger Systemhardware. Motherboards, Chipsätze und Prozessoren, die ECC unterstützen, können auch teurer sein.

Die ECC-Unterstützung variiert je nach Motherboard-Hersteller, sodass ECC-Speicher von einem ECC-inkompatiblen Motherboard möglicherweise einfach nicht erkannt wird. Die meisten Motherboards und Prozessoren für weniger kritische Anwendungen unterstützen ECC nicht, sodass ihre Preise niedriger gehalten werden können. Einige ECC-fähige Boards und Prozessoren können ungepuffertes (nicht registriertes) ECC unterstützen, funktionieren aber auch mit Nicht-ECC-Speicher; Systemfirmware aktiviert die ECC-Funktionalität, wenn ECC-Speicher installiert ist.

ECC kann die Speicherleistung auf einigen Systemen je nach Anwendung und Implementierung um etwa 2–3 Prozent verringern, da die ECC-Speichercontroller zusätzliche Zeit für die Fehlerprüfung benötigen. Moderne Systeme integrieren jedoch ECC-Tests in die CPU und erzeugen keine zusätzliche Verzögerung bei Speicherzugriffen, solange keine Fehler erkannt werden.

ECC-unterstützender Speicher kann aufgrund von Fehlerkorrekturschaltungen zu zusätzlichem Stromverbrauch beitragen.

Anmerkungen

Verweise

Externe Links