Fehlertoleranz

Transcription

Fehlertoleranz
- Fehlertoleranz -
Ausarbeitung im Rahmen des Seminars
Pleiten, Pech und Pannen der Informatik
von Herrn Jürgen Ruf und Herrn Thomas Kropf
im WS01/02
Christian Teufel
Urbansbrüderstr. 3
72108 Rottenburg
Studienfach: Informatik
Semester: 9
-1-
Inhaltsverzeichnis
1
1. Einführung
2
1.1 The Patriot Missile Failure
2
1.2 Einsatzorte fehlertoleranter Systeme
4
2. Fehler
5
2.1. Die Grundbegriffe fault, error und failure
5
2.2. Klassifzierung
5
2.3. Umgang mit Fehlern
6
3. Fehlertoleranz
3.1. Fehlerbehandlung
7
7
3.1.1. Rückwärtsfehlerbehebung
7
3.1.2. Vorwärtsfehlerbehebung
8
3.2. Fehlerkompensation
8
3.3. Redundanz
8
4. Techniken der Fehlertoleranz
4.1. Hardware
9
10
4.1.1. Triple Modular Redundancy (TMR)
10
4.1.2. Reservekomponenten
10
4.1.3. Selbstprüfende Paare
11
4.2. Software
12
4.2.1. Recovery Blocks
12
4.2.2. N-Version Programming
13
5. Fazit
14
Literaturverzeichnis
15
-2-
1
Einführung
Rechensysteme haben im Zuge der Technisierung und Automatisierung heutzutage beinahe in
allen Bereiche n des Lebens Einzug gefunden. Vielfach ist das Arbeiten bzw. Leben ohne sie
nicht mehr vorstellbar. Umso schlimmer ist die Situation, wenn ein Rechensystem
unvorhergesehen ausfällt. Dies kann großen materiellen, insbesondere finanziellen Schaden
zur Folge haben, aber auch Menschenleben fordern. Ziel der Fehlertoleranz ist es somit,
Rechensysteme tolerant gegenüber jeglicher Art von auftretenden Fehlern zu machen. Ideal
ist dabei die Fortsetzung der spezifizierten Leistungen, die das Rechensystem zu erbringen
hat, oder wenigstens der Übergang in einen sicheren Zustand.
Angesichts immer komplexer werdender Systeme und Anwendungen erweist sich dies jedoch
als äußerst schwierig. Schließlich sollte eine mögliche fehlerverursachende Quelle schon
während des Systementwurfs bekannt sein, um sie später erfolgreich tolerieren zu können. Es
wird somit wohl nie ein hundertprozentig fehleretolerantes System geben.
1.1
The Patriot Missile Failure
Ein Beispiel für das Versagen eines Rechensystems und dem daraus resultierenden Verlust
von Menschenleben fand am 25. Februar 1991 während des Golfkrieges statt. Durch das
Versagen einer amerikanische n Patriot Raketen Stellung in Dharan konnte eine sich nähernde
irakische Scud Rakete nicht abgefangen werden (siehe Abb. 1 Seite 2).
Abbildung 1
Die Scud schlug kurze Zeit später in eine amerikanische Kaserne ein, tötete 28 Menschen
sofort und verwundete weitere 100. Tragischerweise führte ein Rundungsfehler zu einer
ungenauen Berechnung der Zeit seit Beginn des Systemstarts.
-3-
Das Radarsystem der Patriot Raketenstellung tastet den Luftbereich über sich ab (s. Abb. 2, S.
3). Nachdem ein Objekt entdeckt wurde, wird dessen voraussichtlicher Kurs auf Grundlage
von charakteristischen Flugeigenschaften berechnet. Somit wird ein neuer Luftbereich am
Himmel festgelegt, in welchem das Radarsystem erneut nach dem Objekt sucht. Taucht dieses
in dem erwartenden Bereich auf, kann auf das Annähern einer Scud Rakete geschlossen
werden (GAO Report, 1992, S. 2ff).
Abbildung 2
In diesem Fall jedoch wurde ein falscher Luftbereich errechnet und das Abfangen der Scud
Rakete nicht eingeleitet (siehe Abb. 2 Seite 3).
Das Patriot Raketen System zählt die Zeit seit dem Systemstart in zehntel Sekunden. Um aber
eine Darstellung in zehntel Sekunden zu erlangen, muß diese mit 1/10 multipliziert werden.
1/10 hat aber eine nicht endende Binärdarstellung von:
0.0001100110011001100110011001100...
Das zur Berechnung verwendete 24bit Register kürzt die Binärdarstellung auf
0.00011001100110011001100
ab, was zu einem Fehler von ungefähr
9,5*10^(-8)
in Dezimaldarstellung führt. Tatsächlich war die Patriot Raketenstellung über 100 Stunden in
Betrieb, obwohl die Betriebsspezifikation nur 8 Stunden vorsah. Nach dieser langen
Betriebszeit wächst der Fehler jedoch auf
9,5*10^(-8) * 3,6*10^6 = 0,34 sec
an. Die Fluggeschwindigkeit einer Scud Rakete beträgt 6034 km/h und somit ist sie in dieser
Zeit 0,57km weiter als berechnet und außerhalb des „Aufspührsystems“ (Douglas, 2000).
Ein Neustart des Systems oder eine effizientere und sinnvollere Implementierung der
Zeitmessung hätte dieses Problem mit Sicherheit verhindert.
-4-
1.2
Einsatzorte fehlertoleranter Systeme
Es ist klar das fehlertolerante System gerade dann zum Einsatz kommen, wenn ein Versagen
des Systems katastrophale Folgen nach sich ziehen kann. Generell ist eine Aufteilung in vier
verschiedene Gebiete denkbar, welche sich aber auch schneiden können.
a) Anwendungen mit extremer Lebensdauer,
z.B. in der Raumfahrt. Hier ist es meist nicht möglich (oder nur unter großen
finaziellen Anstrengungen), ein sich bereits im Orbit befindliches Objekt zu
warten.
b) Sicherheitskritische Anwendungen,
z.B. in der Medizintechnik. Lebenserhaltende Systeme etwa dürfen unter keinen
Umständen den Betrieb ohne jegliche Vorwarnung einstellen oder von ihren
spezifizierten Leistungen abweichen.
c) Verlängerung der Wartungsintervalle,
z.B. bei räumlich weit verteilten Systemen. Hier wird eine zeitlich hohe
Verfügbarkeit vorausgesetzt, da Reperaturmöglichkeiten oder Wartungspausen nur
zu bestimmten Zeitpunkten möglich sind (Görke, 1989, S.17).
d) Hohe Anforderungen an die Verfügbarkeit,
z.B. in der Telekommunikation oder bei großen Buchungssystemen. In diesen
Bereichen kann ein längerer Ausfall beträchtlichen finanziellen Schaden bedeuten.
Es finden sich sicherlich noch viele weitere Beispiele und Anwendungsbereiche, in denen
fehlertolerante Systeme zum Einsatz kommen. Die Hauptziele sind jedoch meistens die
selben, finanziellen Schaden abzuwenden und Menschenleben zu schützen.
2
Fehler
Eine Definition von Fehler lautet, er sei die Abweichung vom Richtigen (Stoll, S.45). Das
Hauptproblem wird hieraus deutlich. Es ist sehr schwer ein Verfahren oder einen Algorithmus
zu finden, der zu jeder Zeit eindeutig entscheiden kann, was richtig und was falsch ist. Um
fehlertolerante Systeme zu entwerfen, zwingt sich somit eine tiefere Begriffseinteilung und
Klassifizierung auf.
-5-
2.1
Die Grundbegriffe fault, error und failure
Im Vergleich mit der englischen Sprache sind die Begriffe in der deutschen Sprache nicht
deckungsgleich. Fault und error sind streng genommen mit Fehler zu übersetzen (Görke,
1989, S.28). Diese Einteilung kennt aber keinen Unterschied zwischen der Fehlerursache und
deren Auswirkungen.
Fault bezeichnet die Fehlerursache bzw. den Grund, der ein System in einen inkorrekten
Zustand überführt. Dies kann z.B. ein Designfehler oder ein inkorrekter Algorithmus sein.
Die Fehlerursache kann nun zu einem error, der Fehlerauswirkung oder dem Fehlerzustand,
führen. Der error bezeichnet eine lokalisierbare Auswirkung im Systemzustand und hat z.B.
falsche Werte in Variablen zur Folge.
Im schlimmsten Fall folgt auf einen Fehlerzustand das Systemversagen, ein failure. Hierbei
handelt es sich um eine sichtbare Abweichung vom normalen und spezifizierten Verhalten des
Systems, welche nicht selten in großen Unglücken endet.
Die Fehlertoleranz versucht die hier aufgezeigte Kausalität zwischen fault - error und error failure zu unterbinden.
2.2
Klassifizierung
Es ist schwer, Verfahren und Methoden zu entwickeln, die Fehler und ihre Auswirkungen
tolerieren bzw. verhindern sollen. Eine Klassifizierung des Begriffs Fehlers scheint sinnvoll
und hierfür bieten sich folgende Frage n an:
a)
Warum wurde er gemacht?
Zufällig, absichtlich, ... .
b)
Wann gerät er in das System?
Entwicklungszeit, Laufzeit.
c)
Worin liegt sein Ursprung?
Logischer Fehler, physikalischer Fehler.
d)
Wie lange dauert seine Wirkung an?
Permanent, temporär, ... .
e)
Was sind seine Auswirkungen?
Leicht, schwer, (un-)kritisch, ... .
f)
Wo ist er lokalisiert?
Intern, extern, lokal, verteilt, ... .
g)
Wer hat hat ihn gemacht?
Mensch (Bediener, Entwickler),
physikalische Umwelt.
-6-
2.3
Umgang mit Fehlern
Grundsätzlich muß man zwischen dem Umgang mit Fehlern zur Entwicklungszeit und zur
Laufzeit unterscheiden. Man spricht von Fehlervermeidung (fault avoidance) in der
Entwicklungszeit und von Fehlertoleranz (fault tolerance) während der Laufzeit.
Fehlervermeidung kann durch formale Methoden, Software Engeneering, Reviews, Testen,
Lokalisierung, Analyse, Behebung und viele weitere Techniken verwirklicht werden.
Fehlertoleranz zur Laufzeit wird hingegen durch Fehlerentdeckung, Fehlerlokalisierung,
Fehlermeldung und Fehlerbehandlung erreicht. Eine Unterscheidung zwischen Fehlerentdeckung und Fehlerlokalisierung ist wichtig. Es muß nach der Entdeckung der
Auswirkungen eines Fehlers, dessen genauer Ursprung im System, seine Quelle also,
lokalisiert werden, um ihn später erfolgreich behandeln zu können. Nach der Fehlererkennung
und Fehlermeldung müssen nun Techniken zur Fehlerbehebung genutzt werden. Das Ziel
dieser Techniken ist es, den derzeitigen fehlerhaften Systemzustand in einen wohldefinierten
und fehlerfreien Zustand zu transformieren, von dem aus die normalen Systemoperationen
fortgeführt werden. Ohne solch eine Transformation würde wohl ein Versagen des Systems
folgen. Daher ist die Fehlerbehandlung einer der wichtigs ten Aspekte der Fehlertoleranz
(Anderson, 1981, S. 65).
3
Fehlertoleranz
Fehlertoleranz bezeichnet die Fähigkeit eines Systems, auch mit einer begrenzten Anzahl
fehlerhafter Komponenten seine spezifizierte Funktion zu erfüllen (Echtle, 1990, S.9).
Großen
Anteil
am
Erlangen
dieser
Fähigkeit
haben
die
Fehlerbehandlung,
Fehlerkompensation und Redundanz.
3.1
Fehlerbehandlung
Die Fehlerbehandlung beläßt fehlerhafte Komponenten im System und überführt deren
Fehlzustand in einen fehlerfreien Zustand (Echtle, 1990, S.14). Dies kann auf zwei
-7-
verschiedene
Weisen
erreicht
werden,
durch Rückwärtsfehlerbehebung
und
durch
Vorwärtsfehlerbehebung.
3.1.1 Rückwärtsfehlerbehebung
Bei der Rückwärtsfehlerbehebung werden Techniken angewandt, die einen vorherigen
Systemzustand, mit der Hoffnung dass dieser fehlerfrei ist, wiederherstellen. Hierbei wird der
jetzige Zustand nicht berücksichtigt. Dies setzt natürlich die Existenz von Rücksetzpunkten
voraus.
Merkmale:
-
Unabhängig von Schadensbewertung.
-
In der Lage beliebige Fehler zu beheben.
-
Anwendbar als ein allgemeines Konzept für alle Systeme und somit leicht als
Mechanismus verfügbar.
3.1.2 Vorwärtsfehlerbehebung
Die Vorwärtsfehlerbehebung strebt Techniken an, die einen Teil des jetzigen Zustands
manipulieren, um einen neuen Zustand zu generieren. Die Hoffnung hierbei ist das der
gewonnene Systemzustand fehlerfrei sein wird.
Merkmale:
-
Ungeeignet für unvorhersehbare Fehler.
-
Hängt von Schadensbewertung- und Vorhersage ab.
-
Muss für jedes System speziell entworfen werden und ist somit unmöglich als
allgemeines Konzept implementierbar.
3.2
Fehlerkompensation
Im Gegensatz zur Fehlerbehebung verändert die Fehlerkompensation nur das Ergebnis
fehlerhafter Komponenten. Durch diese Kompensierungsmaßnahmen werden ne gative
Fehlerfolgen verhindert (Echtle, 1990, S. 14).
-8-
Ein Verfahren zur Fehlerkompensierung ist die Fehlermaskierung. Sie läßt sozusagen durch
eine „Maske“ nur die Ergebnisse durch, die fehlerfrei sind. Um dies zu bewerkstelligen wird
Informationsredundanz (s. 3.3, S. 9) benötigt, mit deren Hilfe n-von-m-Systeme erschaffen
werden (s. 4.1.1, S. 9).
Merkmale:
-
Reicht als einziges Fehlertoleranzverfahren aus.
-
Maskierer sind vergleic hsweise leicht zu verwirklichen.
-
Sehr schnell, da Wiederholungsbetrieb entfällt.
-
Sehr teurer, da ein hoher Aufwand an Redundanz benötigt wird.
3.3
Redundanz
Redundanz ist ein Teil des Systems, der bei Fehlerfreiheit nicht notwendig wäre.
Es gibt verschiedene Arten von Redundanz, die in kombinierter Form auftreten können:
§
Strukturelle Redundanz
Vervielfältigung von Komponenten baugleicher oder alternativer Art.
§
Zeitliche Redundanz
Zusätzliche Zeit für wiederholte Ausführungen wird ermöglicht.
§
Funktionale Redundanz
Das System wird um zusätzliche für den Nutzbetrieb entbehrliche Komponenten
erweitert.
§
Informations Redundanz
Zur Nutzinformation zusätzliche Information, wie z.B. Prüfbits.
Redundante Mittel können im Normal- oder erst im Ausnahmebetrieb aktiviert werden
(Echtle, 1990, S. 61). Tragen sie zum Normalbetrieb bei, spricht man von statischer
Redundanz. Wenn sie aber erst im Ausnahmebetrieb zur Systemfunktion beitragen, spricht
man von dynamischer Redundanz.
-9-
4
Techniken der Fehlertoleranz
Die Charakteristika von Fehlern in Hardware und Software unterscheiden sich meist. So sind
Fehler in der Hardware oft sporadisch, temporär und unabhängig und können z.B. durch
Alterungs- und Verschleissersche inungen hervorgerufen werden. In der Software hingegen
sind die Fehler meist permanent. Hier treten keine Effekte von Alterung und Verschleiß auf.
Eine Replikation von Komponenten in der Hardware ist somit durchaus sinnvoll. In der
Software jedoch wäre die Replikation von identischen Komponenten sinnlos.
Auf Grund dieser Tatsache gibt es verschiedene Ansätze in der Hardware und Software, um
Fehlertoleranz zu verwirklichen.
4.1
Hardware
4.1.1
Triple Modular Redundancy (TMR)
In seiner Standard Form wird das TMR (s. Abb. 3, S.10) benutzt, um Ausfälle in Hardware
Komponenten zu tolerieren.
Abbildung 3
So könnte z.B., um das Versagen einer Systemkomponente zu tolerieren, dieselbe durch
baugleiche Komponenten 1, 2 und 3 und einen Voter, wie in Abbildung 3 dargestellt, ersetzt
werden. Der Voter überprüft die Ergebnisse der drei Komponenten und wählt mit Hilfe eines
Mehrheitsentscheids das richtige Ergebnis aus. Das TMR macht somit von struktuller,
funktionaler und statischer Redundanz Gebrauch. Beim Ausfall von mehr als einer
- 10 -
Komponente versagt dieser Ansatz jedoch. Zwei zufällig falsche Ergebnisse könnten das
Richtige beim Mehrheitsentscheid überstimmen. Desweiteren wird durch Hinzufügen eines
Voter eine neue kritische Komponente in das System aufgenommen.
Eingesetzt wird die TMR z.B. bei Bremsystemen und Triebwerken. Hier arbeiten alle
Replikate aktiv mit.
4.1.2
Reservekomponenten
Typisch
für
dynamische
strukturelle
Redundanz
ist
die
Unterscheidung
in
Primärkomponenten und Reservekomponenten (Echtle, 1990, S.62). Wie in Abbildung 4
Seite 11 dargestellt übernimmt die Reservekomponente 2 nach einem Versagen der
Primärkomponente 1 den Dienst. Die Fehlererkennungseinheit fault detection veranlaßt
hierbei die Wechseleinheit switch auf die Reservekomponente 2 umzuschalten.
Wird die Reservekomponente ständig aktualisiert, d.h sie ist auf dem gleichen Stand wie die
Primärkomponente, spricht man von einer „heißen Reserve“. Die Komponenten der „kalten
Reserve“ hingegen sind meist bis zu ihrer Aktivierung ausgeschaltet.
Abbildung 4
Der
Einsatz
von
Reservekomponenten
setzt
natürlich
die
Existenz
einer
Fehlererkennungseinheit voraus, die in sich wieder eine kritische und teure Komponente sein
kann.
- 11 -
4.1.3
Bei
Selbstprüfende Paare
den
slebstprüfenden
Paaren
wird
die
Hauptkomponente
verdoppelt.
Eine
Vergleichseinheit (s. Abb.5 S. 12) überprüft beide Ergebnisse und kann bei einer
Abweichnung dieser eine entsprechende Fehlermeldung senden. Ein etwas anderer Ansatz ist
in der unteren Hälfte von Abbildung 5 dargestellt. Hier erfolgt die Aus gabe nur, wenn zwei
Vergleichseinheiten dies zu lassen. Deshalb werden selbstprüfende Paare meistens dann
eingesetzt, wenn nach dem Erkennen eines Fehlers in einen sicheren Zustand (fail-safe)
gewechselt, oder eine „sanfte Leistungsminderung“ (gracefull degration, fail-soft) in Kauf
genommen werden kann. Eine Eisenbahn kann z.B. nach der Feststellung eines
systemkritischen Zustands einfach angehalten werden.
Abbildung 5
4.2
Software
4.2.1
Recovery Blocks
Aus Abbildung 6 Seite 13 wird die Funktionsweise von recovery blocks ersichtlich. Bevor in
die erste Software Komponente (Modul) eingetreten wird, muß implizit ein Rücksetzpunkt
etabliert werden. Hat das erste Modul seine Aufgabe erfüllt wird ein Akzeptanztest
durchgeführt. War das gelieferte Resultat richtig, wird aus dem recovery block ausgetreten.
- 12 -
Bei einem Fehler jedoch, muß zu dem zuvor gesetzten Rücksetzpunkt gesprungen werden und
das nächste Modul wird zur Ausführung benutzt (Anderson, 1981, S. 254). Dieses Verfahren
kann nun beliebig oft wiederholt werden.
Voraussetzung für diesen Ansatz ist natürlich die Existenz eines Akzeptanztests, der eventuell
sehr komplexe Ausmaße annehmen kann und die Möglichkeit zum Zurücksetzen. Außerdem
sollten die einzelnen Module verschieden implementiert sein, um den gleic hen Fehler nicht
ständig zu wiederholen.
Abbildung 6
4.2.2
N-Version Programming
Die TMR (s. 4.1.1, S.9) hat sich in der Hardwarefehlertoleranz als effektive Methode bewährt.
Es liegt nahe dieses Konzept nun auch in der Softwarefehlertoleranz anzuwenden. Wie der
Name schon sagt, wird eine Anzahl von n (n>1) unabhängig entwickelten Versionen eines
Programmes gestartet und ihre Ergebnisse verglichen (s. Abb. 7, S.13) (Anderson, 1981, S.
275f). Auf diese Art kann ein fehlerhaftes Ergebnis maskiert werden.
Das n-version programming setzt die Möglichkeit zur effizienten und nebenläufigen
Abarbeitung und Synchronisierung voraus. Außerdem ist die Existenz eines voters nötig. Will
man aber z.B. mehrer verschiedene Lösungen erlauben (Nullstellenberechnung) oder eine
gewisse Ungenauigkeit (Gleitkommaarithmetik) zulassen, wird das Entwerfen eines
geeigneten voters problematisch.
- 13 -
Abbildung 7
5. Fazit
Der Begriff des Fehlers ist im allgemeinen ein sehr vager Begriff und es gibt sehr viele
unterschiedliche Fehlerarten. Deshalb fordert der Umgang mit ihnen eine genau Identifikation
und Beschreibung, damit geeignete Fehlertoleranztechniken während der Entwurfsphase
berücksichtigt werden können. Diese sollten jedoch nur ein zusätzliches Verfahren darstellen
und nicht andere Verfahren zur Konstruktion korrekter Systeme ersetzen. Außerdem erhöhen
Fehlertoleranztechniken die Systemkomplexität und ihre Verwirklichung ist ein nicht zu
unterschätzender Kostenfaktor.
Murphys Gesetz - wenn etwas schiefgehen kann, dann wird es auch schiefgehen (Graf, 1997,
S. 11) - wird wohl nie ganz unterbunden werden können.
- 14 -
Literaturverzeichnis:
Anderson, T., Lee, P.A.: Fault Tolerance – Principles and Practice. Prentice/Hall International
1981.
Arnold, Douglas N. (2000): The Patriot Missile Failure,
[http://www.ima.umn.edu/~arnold/disasters/patriot.html], (Zuletzt geändert: 23.
August2000; Verfügbarkeitsdatum: 6. Februar2002).
Blair, Michael, Obenski, Sally, Bridickas, Paula: GAO/IMTEC-92-26 Patriot Missile
Software Problem, [http://www.fas.org/spp/starwars/gao/im92026.htm],
(Erstelldatum: 4. Februar1992; Verfügbarkeitsdatum: 6. Februar2002).
Klaus, Echtle : Fehlertoleranzverfahren. Springer Verla g 1990.
Görke, W.: Fehlertolerante Rechensysteme. Oldenbourg Verlag 1989.
Graf, Joachim: Murphys gemeinste Computergesetze. Markt&Technik Buch- und SoftwareVerlag GmbH 1997.
Stoll, Jürgen: Fehlertoleranz in verteilten Realzeitsystemen, Springer Verlag o. J.