Stabilität und Zuverlässigkeit

Hard- und Softwareaspekte für optimierte Embedded Systeme - Teil 2

| Autor / Redakteur: Kei Thomsen * / Sebastian Gerstl

Typischer Speicherriegel mit Error Correction Code: Industrielle Steuerungen sollen in erster Linie stabil funktionieren, da sind Speicherfehler durch Bitkipper nicht akzeptabel. Dennoch vertrauen viele auf Hauptspeicher ohne Fehlererkennung und Korrektur - bei immer geringeren Ladungsmengen in den Speicherbausteinen. Ein großer Fehler!
Typischer Speicherriegel mit Error Correction Code: Industrielle Steuerungen sollen in erster Linie stabil funktionieren, da sind Speicherfehler durch Bitkipper nicht akzeptabel. Dennoch vertrauen viele auf Hauptspeicher ohne Fehlererkennung und Korrektur - bei immer geringeren Ladungsmengen in den Speicherbausteinen. Ein großer Fehler! (Bild: MicroSys)

Im ersten Teil dieses Beitrags befassten wir uns mit einem Vergleich unterschiedlicher CPU-Plattformen und zeigten, wie gute bzw. schlechte Programmierung deren Performance beeinflussen kann. Im zweiten Teil beleuchten wir näher, welche Auswirkungen die Wahl der Speicherarchitektur auf die Leistung und Zuverlässigkeit eines Embedded Systems hat.

Moderne Halbleiterstrukturen werden immer kleiner und ermöglichen dabei immer mehr Speicherplatz. Das gilt für RAMs (DDR3/4) ebenso wie für NAND Flashes. Betrachten wir hinsichtlich der Systemsicherheit zunächst die RAMs.

Die aktuelle Größe der Chip-Struktur eines DDR4 RAMs beträgt 20 nm und wird mit einer Spannung von 1,2V betrieben, um die zu bewegende Ladung (< 20.000 Elektronen) gering zu halten. Das ist notwendig, um den Stromverbrauch zu reduzieren und die Geschwindigkeit zu erhöhen. Damit besteht aber die Gefahr von Soft-Error-Störungen durch Höhen- und radioaktiver Strahlung, sowie durch energiereiche Strahlung von Elektromotoren und statischen Feldern. Diese Effekte bezeichnen wir als Single Event Upsets – SEU. Häufig sind auch die RAM Timings nicht genau berechnet und eingestellt. Da das Timing Temperaturabhängig ist, kann es bei hohen oder niedrigen Temperaturen zu Bit-Fehlern kommen kann. Ohne geeignete Gegenmaßnahmen kann das, hinsichtlich eines sicheren Systembetriebs recht gefährlich werden! Hier ist für sicherheitskritische Anwendung eine geeignete Maßnahme der Einsatz von ECC-Speicher (Error Correction Code).

Eine kleine Hilfe, sich die Größenordnung von 20nm vorzustellen: Nehmen sie an, sie haben ein Zimmer mit 5Meter Länge und weisen dieser Länge 1 mm zu. Legen sie nun ein Haar auf den Boden, dann entspricht die Haarbreite (etwa 0,1mm) den 20nm.

Erhöhung der Zuverlässigkeit für CPU Plattformen und Speicher durch ECC

Um Speicherfehler zu erkennen und zu korrigieren, kommt in den meisten Fällen ein Hardware-ECC zum Einsatz. Dazu wird das 64 Bit breite RAM um 8 Bit auf 72 Bit erweitert (bei 32 Bit + 7 Bit). Damit lässt sich ein 1-Bit-Fehler direkt korrigieren und ein 2-Bit-Fehler erkennen, was natürlich vom Memory Controller unterstützt werden muss. Jedoch haben heute bei weitem nicht alle Prozessoren einen solchen ECC-fähigen Memory Controller auf dem Chip (System On Chip – SoC). Fast alle PowerPC Prozessoren besitzen hingegen einen ECC-fähigen Controller. Für ARM-CPUs ist das jedoch die Ausnahme und bei X86-CPUs sind es meist nur die größeren Server Chipsets und nur selten die Embedded SoCs, die mit dieser Funktion ausgestattet sind.

Wenn der SoC nun ECC unterstützt und auch die entsprechende Anzahl von RAM-Bausteinen vorhanden sind (das sind typischerweise 5 oder 9 RAMs auf dem Board), dann sollte dieses Feature natürlich auch genutzt werden. Hierbei stellt sich auch gleich die Frage, wieviel zusätzliche Verarbeitungszeit das kosten kann. Aus unseren Erfahrungen mit PowerPC Boards und ARM Xilinx ZYNQ Systemen, sind das weniger als 5% Verlust der Memory Performance, was durchaus akzeptabel für den Zugewinn an Systemsicherheit sein sollte. Weiterhin ist es ist sinnvoll, ECC-Interrupt von dem Betriebssystem zu unterstützen, um die Fehler überhaupt auf Systemebene sichtbar zu machen. Der Memory Controller kann bei einem ECC-korrigierbaren Einzel-Bit-Fehler ein Interrupt auslösen. In der Interrupt-Behandlung wird nun die Speicherzelle ausgelesen und neu geschrieben, denn die gelesenen Daten sind ja (noch) korrekt. Bei einem Multi-Bit-Error geht das jedoch nicht mehr und es muss speziell entschieden werden, wie damit umgegangen werden soll, z.B.: sicherer Zustand, Fehlermeldung, Reboot, … Solch ein Vorgehen lässt sich auch sehr schön testen, da jeder ECC-fähige Controller auch die Möglichkeit einer Error Injection besitzt, um Fehler zu simulieren.

Inhalt des Artikels:

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 44521237 / Embedded Systeme)