Fehlerkorrektur Mechanismen

Die Fehlerquoten von Speichermodulen sind im Allgemeinen relativ niedrig, zumal fehlerhafte Bits beim Abschalten des Stroms gelöscht werden. Möglicherweise möchten oder müssen Sie sich aber sogar auf die sichere Seite schlagen, z.B. wenn Sie einen Server betreiben, bei dem der Strom eben nicht abgeschaltet wird. In diesen Fällen bieten sich Korrekturmechanismen an, die fehlerhafte Bits erkennen, ggf. reparieren oder sogar defekte Chips abschalten können. Alle hier aufgeführten Korrekturmechanismen sind heute noch in Gebrauch, die jedoch am weitesten verbeitete Form ist ECC.

Parity

Parity ist die einfachste Form von Fehlerprüfung in RAMs. Hierbei handelt es sich tatsächlich lediglich um eine Prüfung, eine Korrektur ist nicht möglich.

In Speicherchips, die Parity unterstützen gehören nicht 8Bit, sondern 9Bit zu einem Datenwort. Das Datenwort bleibt dabei erhalten, jedoch kommt ein weiterer Bit hinzu, der die Parität angibt, daher Parity-Bit. Parität gibt es in zwei Modi: even und odd, was soviel bedeutet wie gerade und ungerade. Je nach Modus gibt das Parity-Bit an, ob eine gerade oder ungerade Anzahl an Einsen im Datenwort gespeichert ist. Der Wert des Parity-Bits erscheint dabei irreführend, da im even-Mode eine gerade Anzahl mit einer 1 und eine ungerade Anzahl mit einer 0 gespeichert wird. Im odd-Mode ist es genau umgekehrt. Hier wird im Parity-Bit eine 1 gespeichert, wenn die Anzahl der Einsen gerade ist, andernfalls eine 0.

Die Probleme bei der Methode liegen auf der Hand. Zum einen gibt es überhaupt keine Möglichkeit herauszufinden, an welcher Stelle ein Fehler aufgetreten ist. Damit ist ein Zurückverfolgen und eine Korrektur, wie bereits erwähnt, von vornherein ausgeschlossen. Hinzu kommt noch, dass nur eine entsprechend ungerade bzw. gerade Zahl für einen Fehler sorgt. Angenommen wir haben einen Chip mit even-Mode, das Parity-Bit liegt auf 0 und es sind 4 Einsen im Datenwort gespeichert. Der Chip geht davon aus, dass die Daten in Ordnung sind, weil die Summe der Einsen eine gerade Zahl ergibt. Was aber, wenn eigentlich 6 Einsen vorhanden sein sollten? Tatsache ist, dass der Chip den Fehler nicht bemerkt und das Datenwort freigibt, als sei es in Ordnung.

An diesem Beispiel wird schon offensichtlich, dass die einfallsreiche Methode den Anforderungen von heute nicht gerecht wird. Es gibt allerdings eine Möglichkeit, die eine Fehlerkorrektur mit Parity durchzuführen. Dies geschieht, indem das Verfahren von einer Dimension, auf zwei erhöht wird und zwar indem acht Datenworte mit Parity als quadratische Matrix genommen werden und das Parityverfahren noch einmal auf die neun Spalten angewand wird. Falls sich nun ein Fehler ergibt, stimmen zwei Parity-Bits nicht mehr und der Fehler kann lokalisiert werden. Das zuvor genannte Risiko bezüglich der Anzahl von geraden und ungeraden Einsen, die im schlimmsten Fall Fehldiagnosen verursachen können, wird hierbei auch reduziert. Dieses Verfahren ist jedoch bei Speicher nicht zur Anwendung gekommen, weil ihm ECC zuvorkam. Der Einsatz wäre jedoch ohnehin fraglich gewesen, weil so eine Prüfung auch bedingen würde, dass acht Datenwörter gelesen werden müssen, wo eigentlich nur eines erforderlich wäre, was einen enormen Effizientverlust bedeutet hätte.

ECC

ECC steht für Error Correction Code und bezeichnet die Weiterentwicklung von Parity. Im Unterschied zu Parity, können ECC-Module einzelne Bitfehler korrigieren. Treten jedoch zwei bis vier Bitfehler in einem Block auf, kann ECC lediglich feststellen, dass ein Fehler vorliegt. Bei noch mehr Fehlern, kann auch ECC nichts mehr ausrichten. Allerdings kommt es praktisch nie vor, dass überhaupt mehr als ein Bit fehlerhaft ist. Eine Ausnahme stellt dabei natürlich ein defektes Modul dar, worauf wir noch zurückkommen werden.

Die Funktionsweise von ECC lässt sich nicht so einfach aufschlüsseln wie es bei Parity der Fall ist. Es wird ein 8-Bit langer Hash erstellt, der in diesem Falle als Schlüssel fungiert. Diese redundante Hash wird aus 64-Bit langen Datenzeilen erstellt und ermöglicht beim Auslesen der Informationen einen Vergleich des Hashs mit der erneuten Berechnung des Hashs durch die Datenzeile. Stimmen die Hashes nicht überein, wird der Schlüssel dekodiert und der Fehler korrigiert. Dieses Verfahren wird protokolliert, der Benutzer und auch das System bemerkt überhaupt nicht, dass etwas passiert ist. Ist mehr als ein Bit fehlerhaft, so können mit dem Algorithmus die Fehlerquellen nicht mehr aufgeschlüsselt werden. Es wird lediglich festgestellt, dass mehrere Bits fehlerhaft sind. Zumal Bitfehler mittlerweile sehr selten geworden sind, sollte der Aufall von mehr als einem Bit ein Alarmsignal sein und ein Appell für den Administrator zu überprüfen, ob das Modul beschädigt ist. Manche ECC-Module können bis zu vier Fehlerbits registrieren, dennoch aber auch nur eines korrigieren.

Vertrauen ist gut, Kontrolle ist besser

Viel zu stark übersehen wird der große Vorteil des ECC-Fehlerprotokolls. Das Bios führt nämlich über erkannte und korrigierte Datenbits ein Protokoll, das es dem Systemadministrator gestattet, fehlerhafte Module zu erkennen und rechtzeitig aus dem Verkehr zu ziehen. Für Administratoren, die ihre Server über Fernwartung steuern, ist diese Funktion noch wichtiger. Ist das System erst einmal wegen eines fehlerhaften Speichermoduls abgestürzt, wird es für den Administrator stressig. Passiert dies möglicherweise gerade zu einer Zeit, in der der Server hoch frequentiert wird, möglicherweise auch von Kunden, bricht die Panik aus. Diesem unnötigen Stress kann bequem vorgebeugt werden, in dem man das entsprechende Modul beispielsweise nachts austauschen lässt. Zu dieser Zeit benötigt in der Regel niemand den Server und wenn etwas nicht klappt, bleibt immer noch genügend Zeit, um eine Lösung zu finden. Für die Ferndiagnose sind allerdings speziell für das Bios zugeschnittene Treiber erforderlich. Achten Sie daher darauf, dass das Board des Servers diese Fernwartungsmöglichkeit für das BIOS überhaupt unterstüzt.

Memory Scrubbing

Memory Scrubbing ist kein Fehlerkorrekturmechanisums, sondern eine Anwendungsform von ECC. Beim Memory Scrubbing werden die Datenreihen im „Leerlauf“ auf fehlerhafte Bits geprüft. Mit anderen Worten wird während dieser Zeit das ECC-Verfahren angewand, um die Zeit bei der Datenlieferung zu sparten und vorzeitig Speicherfehler zu entdecken. Wird so ein Fehler gefunden, wird die Speicherverwaltung des Moduls direkt informiert.

Chipkill

Chipkill ist der mit Abstand effektivste Mechanismus, Speicherfehler zu minimieren. Die Technologie übertrifft Parity und einfachen ECC bei weitem, was sich allerdings auch in den Preisen niederschlägt.

Dabei unterscheidet die Methode sich technisch gar nicht wesentlich von ECC, es ist lediglich eine Verbesserung vorgenommen worden. Die Länge der Datenreihe wurde verdoppelt, weshalb Chipkill nur in Chips mit langen Datenreihen verwendet wird. Die Modulkapazitäten reichen von 521MB bis 4GB. Auch die Länge des Hashes wurde modifiziert und ist bei Chipkill 16Bit lang. Durch zusätzliche Speicherungen ist es möglich bis zu vier Bitfehler in einem Modul zu korrigieren.

Die besondere Stärke von Chipkill – und daher hat die Technologie auch ihren Namen – liegt darin, dass einzelne Chips „offline“ gestellt werden können. Da Chipkill auch mehr als vier Bitfehler registrieren kann, wird ab dieser – oder einer im Bios eingestellten – Grenze der Chip terminiert. Dabei wird ein Signal an die Speichersteuerung gesendet, das den entsprechenden Chip aus dem Register entfernt und – je nach BIOS – sogar eine Einstellung im BIOS vornimmt, die verhindert, dass die Adresse des defekten Chips beim Abschalten des Stroms verloren geht. Diese Vorgehensweise hat zwar zur Folge, dass Speicherkapazitäten verloren gehen, jedoch muss berücksichtigt werden, dass diese Kapazitäten keine zuverlässigen Speicherorte mehr darstellen. Zudem ist es zweckmäßiger auf einen Teil der Kapazitäten zu verzichten, als Fehlfunktionen zu riskieren. Es gibt sogar einige Chipkill-Module, die ihre funktion auch erfüllen, wenn Board und Chipsatz nicht dafür ausgelegt sind. Prüfen Sie trotzdem auf jeden Fall, ob die Module mit Ihrem System kompatibel sind.

Zusammenfassung

Nach den Beschreibungen der einzelnen Fehlerkorrekturmechanismen besteht kein Zweifel darüber, dass Chipkill das non plus ultra in der Szene darstellt. Dies möchten wir noch an einer kleinen Studie deutlich machen, die folgendes ergab:

Gemessen wurden hierbei die Summe der Fehlerbits in 10.000 Systemen auf drei Jahre verteilt. Auf den ersten Blick scheint der ECC Speicher bei den Ausfällen schlechter abzuschneiden, als Parity. Dies ist jedoch ein Trugschluss, und sicherlich wissen Sie auch schon warum. Zum einen sind in dem Parity-Modul nur ungerade Anzahlen von Bitfehlern erfasst, weil Parity eine gerade Anzahl von Bitfehlern überhaupt nicht feststellen kann. Zum anderen hat das Modul nur 3% der Kapazitäten des ECC-Moduls, was wegen einer viel kleineren Anzahl an Speicherzellen auch weniger Fehler zulässt. Realistisch wäre ein Wert, der dem 50-fachen der Zahlen entspricht, also Spitzenwerte von rund 3.500 Ausfällen. Die Ausfälle bei ECC betrugen nach 36 Monaten 900 und Chipkill konnte einen Ausfall von nur sechs Datenbits aufweisen. Rein stochastisch gesehen müssten Sie in Ihrem System dann 5.000 Jahre warten, bis es zu einem irreparabelen Bitfehler kommt.

Der Erfolg gibt dem Verfahren von Chipkill Recht. Aber die Qualität hat auch ihren Preis, weshalb viele Administratoren sich auf ECC beschränken, sofern die „null-Fehler-Grenze“ nicht zur Bedingung wird. Lassen Sie sich von renomierten Häusern beraten, damit Sie die optimale Lösung für Ihr System finden. Natürlich stehen Ihnen auch die Mitarbeiter von Indusys bei Fragen gerne zur Verfügung.