DE69919632T2 - Fehlertoleranz durch N-modulare Softwareredundanz unter Verwendung von indirekter Instrumentierung - Google Patents

Fehlertoleranz durch N-modulare Softwareredundanz unter Verwendung von indirekter Instrumentierung Download PDF

Info

Publication number
DE69919632T2
DE69919632T2 DE69919632T DE69919632T DE69919632T2 DE 69919632 T2 DE69919632 T2 DE 69919632T2 DE 69919632 T DE69919632 T DE 69919632T DE 69919632 T DE69919632 T DE 69919632T DE 69919632 T2 DE69919632 T2 DE 69919632T2
Authority
DE
Germany
Prior art keywords
target program
copies
instrumentation
variable
backend
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE69919632T
Other languages
English (en)
Other versions
DE69919632D1 (de
Inventor
Timothy North Plainfield Tsai
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nokia of America Corp
Original Assignee
Lucent Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Lucent Technologies Inc filed Critical Lucent Technologies Inc
Publication of DE69919632D1 publication Critical patent/DE69919632D1/de
Application granted granted Critical
Publication of DE69919632T2 publication Critical patent/DE69919632T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1658Data re-synchronization of a redundant component, or initial sync of replacement, additional or spare unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/18Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits
    • G06F11/187Voting techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • User Interface Of Digital Computer (AREA)
  • Retry When Errors Occur (AREA)
  • Hardware Redundancy (AREA)

Description

  • Technisches Gebiet
  • Die vorliegende Erfindung betrifft allgemein Datenverarbeitungssysteme und insbesondere Techniken zur Bereitstellung von Fehlertoleranz in solchen Systemen.
  • Allgemeiner Stand der Technik
  • Sowohl in verteilten als auch in nichtverteilten Datenverarbeitungssystemen ist es häufig erwünscht, einen Mechanismus bereitzustellen, durch den das System gegenüber Fehlern, wie zum Beispiel Prozeßausfällen und Maschinenausfällen, tolerant wird. Die wichtigsten Aspekte solcher Fehlertoleranzmechanismen sind im allgemeinen die Fehlererkennung und die Fehlerbehebung. Es wurden herkömmliche Datenverarbeitungssysteme implementiert, die in Verbindung mit Wahlen eine Prozeßduplikation verwenden, um Fehlerdetektion und Prüfpunkte zur Durchführung der Fehlerbehebung durchzuführen. Die Prozeßduplikation umfaßt im allgemeinen das Ausführen mehrerer Kopien eines gegebenen Zielprogramms auf verschiedenen Maschinen und wird auch als Programmierung des Typs "N-Version" oder "N-Modular" bezeichnet. Jede der Kopien des Programms gibt an spezifizierten Haltepunkten Datenwerte zurück und der Wahlprozeß wird dazu verwendet, zu bestimmen, ob etwaige der Prozesse oder Maschinen ausgefallen sind. Wenn zum Beispiel die zurückgegebenen Daten aus allen außer einer der Kopien dieselben sind, kann angenommen werden, daß es bei der Minderheitskopie zu einem Ausfall gekommen ist. Bei einem solchen Ausfall wird unter Verwendung einer der ordnungsgemäß ausgeführten Kopien ein Prüfpunkt genommen und der ausgefallene Prozeß wird von dem Prüfpunkt an neu gestartet. Einzelheiten bezüglich dieser und anderer herkömmlicher Techniken werden zum Beispiel in J. Long, W.K. Fuchs und J.A. Abraham, "Forward recovery using checkpointing in parallel systems", Proc. IEEE International Conference on Parallel Processing, S. 272-275, 1990; D.K.Pradhan und N.H. Vaidya, "Roll-forward and rollback recovery: Performance-reliability trade-off", Proc. 24th Fault-Tolerant Computing Symposium, S. 186-195, 1994; D.K. Pradhan und N.H. Vaidya, "Roll-forward checkpointing scheme: A novel fault-tolerant architecture", IEEE Transactions on Computers, 34(10):1163-1174, Oktober 1994; D.K.Pradhan und N.H. Vaidya, "Roll-forward and rollback recovery:Performance-reliability trade-off", Proc. 24th Fault-Tolerant Computing Symposium, Seiten 186-195, 1994; und in Algirdas A. Avizienis, "The Methodology of N-Version Programming", in Michael R.Lyu, Hersg., Software Fault Tolerance, S. 23-46, John Wiley & Sons Ltd., 1995, beschrieben.
  • Herkömmliche Fehlertoleranztechniken erfordern im allgemeinen die Modifikation entweder von Quellcode oder binärem ausführbarem Code, um die oben erwähnte Fehlerdetektions- und Behebungsfunktionalität hinzuzufügen. Diese Modifikationen werden in der Regel vor der Ausführung des Zielprogramms durchgeführt und erfordern häufig vom Benutzer, Dateien zu editieren oder direkte Instrumentationssoftware auszuführen, was ineffizient sein kann. Außerdem haben herkömmliche Techniken, die ein Betriebssystem verwenden, um Fehler zu erkennen, den Nachteil, daß sie nicht in der Lage sind, die Datenintegrität zu erhalten, wenn keine Betriebssystemprogrammausnahme ausgelöst wird. Andere herkömmliche Methoden verwenden Detektionsverfahren auf Algorithmusbasis, die im allgemeinen für viele Arten von Programmen nicht anwendbar sind.
  • Aus Bondavallia et al.: "State restoration in a COTS-based N-modular architecture", Object-oriented realtime-distributed computing, 1998 (ISORC 98), Proceedings 1998 First International Symposium On, Kyoto, Japan, 20.-22.4.1998, Los Alamitos, CA, USA, IEEE Comput. Soc., US, 20.4.1998, Seiten 174-183, ISBN: 0-8186-8430-5, ist ein Verfahren für ein fehlertolerantes System bekannt, bei dem Duplikate eines Programms unter der Kontrolle einer Steuerung ausgeführt und Werte von Variablen am Ende einer Iteration verglichen werden, um Fehler zu erkennen.
  • Kurze Darstellung der Erfindung
  • Die in den Ansprüchen definierte Erfindung verwendet eine als indirekte Softwareinstrumentation bezeichnete Technik, um Fehlertoleranz in einem Datenverarbeitungssystem zu erreichen. Ein Ausführungsbeispiel wird in einem System implementiert, das eine Anzahl von Computern oder anderen Maschinen enthält. Verschiedene Kopien eines gegebenen Zielprogramms werden auf verschiedenen Maschinen in dem System ausgeführt. Jede der Maschinen, die eine Kopie des Zielprogramms ausführt, enthält eine Steuerung, die die Ausführung dieser Kopie steuert. Die Steuerungen kommunizieren mit einer Benutzerschnittstelle eines Instrumentationswerkzeugs, das auf einer anderen Maschine implementiert sein kann. Ein Benutzer führt einen Dialog mit der Schnittstelle, um folgendes zu spezifizieren: die Variablen, die überwacht oder "gewählt" werden sollen, Haltepunkte, an denen das Wählen stattfindet, Wahl- und Behebungsparameter und andere Informationen, und das Werkzeug übermittelt entsprechende Befehle zu jeder der Steuerungen. Ein Fehler in einer der Kopien wird erkannt, indem Werte einer oder mehrerer der benutzerspezifizierten Variablen, die durch die verschiedenen Kopien an den gekennzeichneten Haltepunkten erzeugt werden, verglichen werden. An einem gegebenen Haltepunkt melden die Steuerungen diese Werte einem Wahlverarbeitungsmechanismus, der auf einer oder mehreren der Maschinen des Systems implementiert werden kann, und der Wahlverarbeitungsmechanismus bestimmt, ob ein Fehler aufgetreten ist. Bei Erkennung eines Fehlers in einer gegebenen der Kopien wird ein Prüfpunkt einer anderen der Kopien genommen, von der bestimmt wurde, daß sie fehlerfrei ist, und eine neue Kopie wird von dem Prüfpunkt an neu gestartet. Die Verwendung getrennter Steuerungen zur Steuerung der Ausführung jeder der Kopien des Zielprogramms auf der Basis von benutzerspezifizierten Informationen ermöglicht es, Fehler zu erkennen und entsprechende Behebungsmaßnahmen zu treffen, ohne Zielprogrammcode zu modifizieren. Andere Ausführungsformen können unter Verwendung einer einzigen Maschine zur Ausführung jeder der Kopien implementiert werden oder können mehrere Kopien auf bestimmten Maschinen ausführen.
  • Die Erfindung stellt eine allgemeine Fehlererkennungs- und -Behebungstechnik bereit, die Datenintegrität für kritische Daten sicherstellt, ohne daß jegliche Modifikationen von Quellcode oder ausführbarem Code notwendig sind, während außerdem ein hoher Grad an Automation und Transparenz für fehlertolerante Konfiguration und fehlertoleranten Betrieb bereitgestellt wird. Die Erfindung eignet sich zur Verwendung mit vielen verschiedenen Arten von Programmen. Zusätzlich gibt die Erfindung die Möglichkeit, eine Fehlererkennung für Anwendungen durchzuführen, für die kein Quellcode oder nur eine minimale Kenntnis des Codes verfügbar ist, darunter sogenannte "Legacy-Anwendungen". Zu den Arten von Fehlern, die in dem Ausführungsbeispiel toleriert werden, gehören transiente und permanente Hardwarefehler auf einer einzigen Maschine und bestimmte Arten von Anwendungs- und Betriebssystemsoftwarefehlern, obwohl andere Ausführungsformen andere Arten von Fehlertoleranz liefern können.
  • Kurze Beschreibung der Zeichnungen
  • 1 ist ein Blockschaltbild eines Ausführungsbeispiels für ein indirektes Instrumentationssoftwarewerkzeug, das zur Implementierung und Fehlertoleranz gemäß der vorliegenden Erfindung verwendet werden kann;
  • 2 zeigt verschiedene Betriebsarten, die von der Ausführungsform von 1 unterstützt werden;
  • 3 und 4 zeigen graphische Erzeugungs- bzw. erzeugte Benutzeroberflächen (GUIs);
  • 5 und 6 zeigen ausführlichere Ansichten des Frontend- bzw. des Backend-Teils des Instrumentationswerkzeugs von 1;
  • 7 zeigt ein Ausführungsbeispiel für ein Datenverarbeitungssystem gemäß der Erfindung, das indirekte Instrumentation zur Bereitstellung von Fehlertoleranz verwendet;
  • 8 zeigt Prüfpunkte in der Ausführungsform von 7; und
  • 9 ist ein Impulsdiagramm der Funktionsweise der Ausführungsform von 7.
  • Ausführliche Beschreibung der Erfindung
  • Die vorliegende Erfindung wird nachfolgend in Verbindung mit einem beispielhaften Datenverarbeitungssystem erläutert. Es versteht sich jedoch, daß die Erfindung nicht auf die Verwendung mit irgendeiner bestimmten Art von Datenverarbeitungssystem beschränkt ist, sondern statt dessen allgemeiner auf jede Datenverarbeitungsumgebung oder -Anwendung anwendbar ist, bei der es erwünscht ist, Fehlertoleranz auf effizientere Weise als bisher möglich bereitzustellen. Die offengelegten Techniken können mit Computern oder andern Maschinen verwendet werden, die in lokalen Netzwerken, großflächigen Netzwerken, städtischen Netzwerken, Intranets, Extranets und globalen Netzwerken, wie zum Beispiel dem Internet, angeordnet sind. Der Begriff "Programm" soll hier jede Art von Anweisung, Code, Prozeß, Thread oder dergleichen bedeuten, die auf einem Computer oder einer anderen Maschine in einem Datenverarbeitungssystem abläuft. Der Begriff "verteiltes System" soll jedes System bedeuten, das zwei oder mehr Computer oder andere Maschinen enthält. Der Begriff "Maschine" soll hier einen Computer, eine Workstation oder eine beliebige andere Art von Datenverarbeitungseinrichtung sowie verschiedene Komponenten solcher Einrichtungen bedeuten. Der Ausdruck "abgesetzte Maschine" soll hier allgemein einen beliebigen Computer, eine beliebige Workstation oder eine beliebige andere Datenverarbeitungseinrichtung bedeuten, der bzw. die im Namen einer anderen Maschine einen Prozeß ausführt. Eine abgesetzte Maschine gemäß der Erfindung muß deshalb nicht geographisch von der Hostmaschine abgesetzt sein. Der Ausdruck "indirekte Instrumentation" bedeutet eine Instrumentation, die implementiert werden kann, ohne entweder den Quellcode oder den ausführbaren Code eines instrumentierten Zielprogramms direkt zu verändern. Ein "Instrumentationswerkzeug" bedeutet allgemein ein beliebiges Softwareprogramm, das mindestens einen Teil eines Instrumentationsprozesses implementiert. Der Begriff "Steuerung" bedeutet allgemein ein beliebiges Softwareprogramm oder einen anderen Mechanismus, das bzw. der eine oder mehrere der hier als einem Backend eines Instrumentationswerkzeugs zugeordneten Funktionen bereitstellt und kann das gesamte Backend oder auch ein Element oder Elemente des Backend bedeuten.
  • Softwareinstrumentation bedeutet allgemein den Vorgang des Modifizierens eines Programms, um zusätzlichen Code, der als Instrumentationscode bezeichnet wird, der verschiedene Arten von Überwachung und Analyse der Programmleistung während der Programmausführung bereitstellen soll, hinzuzufügen. Zusätzlich zu der Überwachung und Analyse der Programmleistung umfaßt Instrumentation auch andere Aktivitäten, wie zum Beispiel Modifikationen für Fehlertoleranz, z.B. Prüfpunkte und Fehlerinjektion. Instrumentation umfaßt also in der Regel eine bestimmte Modifikation eines Zielprogramms, um Funktionalität zu verändern oder hinzuzufügen. Zum Beispiel kann man mit Instrumentationscode Anzeigen bereitstellen, ob bestimmte Zweige genommen werden oder nicht, wenn ein Programm mit einer gegebenen Menge von Eingaben ausgeführt wird, oder einen Prozessor während der Ausführung unterbrechen, um dabei zu helfen, Fehler zu finden.
  • 1 zeigt die allgemeine Architektur eines indirekten Instrumentationssoftwarewerkzeugs, mit dem gemäß der vorliegenden Erfindung Fehlertoleranz bereitgestellt werden kann. Diese Ausführungsform wird in einem verteilten System 10 implementiert, das eine Benutzermaschine 12 und eine abgesetzte Maschine 14 enthält. Die Benutzermaschine 12 und die abgesetzte Maschine 14 kommunizieren über ein Kommunikationsmedium 15, das bei dieser Ausführungsform eine webeingebettete Anwendungsschicht 16 und eine herkömmliche TCP/IP-Schicht (Transmission Control Protocol/Internet Protokol) 18 enthält. Die web-eingebettete Anwendungsschicht 16 kann ein beliebiger geeigneter Nachrichtenweiterleitungsmechanismus sein, der so konfiguriert ist, daß er mit der TCP/IP-Schicht 18 zusammenwirkt. In alternativen Ausführungsformen können andere Arten von Kommunikationsmedien verwendet werden. Außerdem können andere Ausführungsformen des indirekten Instrumentationswerkzeugs mit nur einer Maschine oder mit mehr als zwei verschiedenen Maschinen implementiert werden.
  • Das indirekte Instrumentationssoftwarewerkzeug enthält einen "Frontent"-Teil und einen "Backend"-Teil. Das Frontend wird auf der Benutzermaschine 12 implementiert und enthält unter anderen Elementen eine graphische Benutzeroberfläche (GUI) 20 des Typs "Erzeugung". Bei dem Frontend kann es sich zum Beispiel um eines oder mehrere Java-Applets handeln, die auf einem Computer mit Java-Fähigkeit oder einer anderen geeigneten Maschine ausgeführt werden. Das Backend wird auf der abgesetzten Maschine 14 implementiert und enthält zwei Softwareprozesse: ein Zielprogramm 22, d.h. das Programm, das instrumentiert werden soll, und Backend-Software 24, die die Instrumentation an dem Zielprogramm 22 durchführt. Wie später ausführlicher beschrieben wird, kann die Backend-Software 24 aus mehreren Prozessen und Threads bestehen. In dem Zielprogramm 22 repräsentiert das Element 25 die Steuerflußausführung des Zielprogramms und das Element 26 den Datenraum des Zielprogramms. Die Backend-Software 24 enthält eine Steuerung 27. Das Frontend liefert eine Schnittstelle zwischen dem Benutzer und der Backend-Software 24, die das Zielprogramm 22 steuert. Bei einer fehlertoleranten Datenverarbeitungsimplementierung dient das Frontend außerdem zur Bereitstellung von Wahlfunktionen und Koordination mehrerer Backends. Die GUI 20 des Frontend wird vorzugsweise per Zeigen-und-Klicken gesteuert und enthält Pulldown-Menüs, Fenster, Listen, Schaltflächen und Textfelder, wie in Verbindung mit 3 ausführlicher beschrieben werden wird.
  • Die auf der abgesetzten Maschine 14 ablaufende Steuerung 27 lenkt den Steuerfluß des Zielprogramms 22 und liefert Beobachtbarkeit in den internen Zustand des Programms 22, während es ausgeführt wird. Die Steuerung 27 hat die Fähigkeit, das Zielprogramm zu lenken, um die Ausführung an einem beliebigen Punkt zu beginnen, zu suspendieren und zu beenden. Außerdem kann sie den gesamten Datenraum des Zielprogramms, einschließlich statischer und dynamischer Daten und Prozessorregister beobachten und manipulieren. Die Steuerung 27 kann einen Debugger enthalten, wie zum Beispiel einen herkömmlichen gdb- oder dbx-Debugger, oder eine durch das Betriebssystem bereitgestellte Einrichtung auf niedriger Ebene, z.B. eine herkömmliche ptrace-Einrichtung oder das /proc-Dateisystem in UNIX, die als Teil des Backend dient, das das Zielprogramm 22 direkt steuert und mit diesem kommuniziert. Es wird angenommen, daß bei dem Ausführungsbeispiel die Steuerung 27 den gdb-Debugger enthält, so wie er in R.M. Stallman, "Debugging with GDB: the GNU Source-Level Debugger", Auflage 4.12, Januar 1994, beschrieben wird. Obwohl es Alternativen zur Verwendung in der Steuerung 27 gibt, liefert gdb die gewünschte Funktionalität und wurde umfassend geprüft und auf viele Plattformen portiert. Die Steuerung 27 erlaubt eine Automatisierung indirekter Instrumentation, sodaß die Menge an handcodiertem Instrumentationscode soweit wie möglich reduziert wird. Der Benutzer des Instrumentationswerkzeugs tritt im wesentlichen mit der GUI 20 des Frontend in Dialog, während die Instrumentation durch die Steuerung 27 des Backend durchgeführt wird. Die verteilte Konfiguration des indirekten Instrumentationssoftwarewerkzeugs erweitert seine Nützlichkeit über herkömmliche Softwareinstrumentation hinaus und ermöglicht die Implementierung verteilter Softwarefehlertoleranz auf eine später zu beschreibende Weise.
  • Es ist zu beachten, daß, obwohl das Instrumentationswerkzeug bei dem Ausführungsbeispiel eine Steuerung enthält, die als eine ihrer Komponenten einen Debugger aufweist, das Werkzeug selbst zusätzliche Fähigkeiten bereitstellt, die in der Regel in einem Debugger nicht angetroffen werden. Ein Debugger ist im allgemeinen dazu in der Lage, viele Tasks auf niedriger Ebene durchzuführen, wie zum Beispiel das Verwalten von Haltepunkten, das Ausführen von Debugger-Befehlen, wenn Haltepunkte angetroffen werden, und das Drucken und Modifizieren der Werte von Variablen. Im Gegensatz dazu konfiguriert das Instrumentationswerkzeug bei dem Ausführungsbeispiel den Debugger in der Steuerung 27 dafür, alle notwendigen Tasks auf automatisierte, transparente und verteilte Weise durchzuführen. Zusätzlich fügt das Instrumentationswerkzeug die Fähigkeit des Integrierens und Ausführens von benutzerspezifiziertem Code in Verbindung mit dem Zielprogramm 22 hinzu, um Tasks durchzuführen, die ein Debugger alleine nicht durchführen kann. Das Instrumentationssoftwarewerkzeug liefert außerdem weitere einzigartige Merkmale, wie zum Beispiel einen automatisierten Rückmeldemechanismus, der den oben erwähnten benutzerspezifizierten Code auslöst, wenn ein gekennzeichnetes Ereignis auftritt.
  • 2 zeigt zwei Betriebsarten des Instrumentationswerkzeugs von 1. Wie bereits erwähnt, unterstützt das Instrumentationswerkzeug die Instrumentation eines Zielprogramms 22 durch Bereitstellen einer Erzeugungs-GUI 20. In einer interaktiven Betriebsart ermöglicht es die Erzeugungs-GUI 20 dem Benutzer, eine angepaßte "erzeugte" GUI 30 zu erzeugen, die dann wie gezeigt mit einem Backend 28 verbunden werden kann. Sowohl die Erzeugungs-GUI 20 als auch die erzeugte GUI 30 sind dem Frontend-Teil des Instrumentationswerkzeugs zugeordnet und laufen deshalb bei dem Ausführungsbeispiel auf der Benutzermaschine 12 ab. Das Backend 28 enthält die Backend-Software 24 mit der Steuerung 27 und wird auf der abgesetzten Maschine 14 implementiert. Während der Benutzer mit der Erzeugungs-GUI 20 in Dialog tritt, wird die erzeugte GUI 30 in einem separaten Fenster aufgebaut, das sofort begutachtet und gegebenenfalls modifiziert werden kann. Die Erzeugungs-GUI 20 fordert Zielprogramminformationen von dem Backend 28 an, wie durch die gestrichelte Linie angezeigt, und das Backend 28 antwortet der erzeugten GUI 30 mit den angeforderten Informationen, wie durch die durchgezogene Linie angezeigt. Wenn der Benutzer mit der Instrumentation und der erzeugten GUI 30 zufrieden ist, kann eine Endversion der erzeugten GUI 30 für einen selbständigen Betrieb erzeugt werden, bei dem diese Version unabhängig von der Erzeugungs-GUI 20 ausgeführt werden kann. In dieser selbständigen Betriebsart fordert die erzeugte GUI 30 Zielprogramminformationen während der Zielprogrammausführung direkt von dem Backend 28 an, wie durch die gestrichelte Linie angezeigt, und das Backend 28 antwortet der erzeugten GUI 30 mit den angeforderten Informationen, wie durch die durchgestrichene Linie angezeigt. Ein Benutzer tritt in der Regel zuerst in den interaktiven Modus ein, um die erzeugte GUI 30 anzupassen und die resultierende erzeugte GUI 30 dann in der selbständigen Betriebsart auszuführen.
  • 3 und 4 zeigen Beispiele für eine Erzeugungs-GUI 20 bzw. eine erzeugte GUI 30 gemäß der Erfindung. Die Erzeugungs-GUI 20 von 3 enthält ein Quellenlistenfenster 40, eine Funktionsliste 42, eine Liste globaler Variablen 44 und eine Liste lokaler Variablen 46. Eine aus der Funktionsliste 42 ausgewählte gegebene Funktion wird in der Liste 42 hervorgehoben und wie gezeigt in einem Textfeld 52 angezeigt. Die entsprechenden globalen und lokalen Variablen für die gewählte Funktion werden in der jeweiligen Liste globaler Variablen 44 und der Liste lokaler Variablen 46 angezeigt, während der Quellcode für die Funktion in dem Quellenlistenfenster 40 angezeigt wird. Es werden mehrere Schaltflächen bereitgestellt, darunter eine Zähler-Widget-Schaltfläche 54, eine Textfeld-Widget-Schaltfläche 56 und eine Textbereichs-Widget-Schaltfläche 58. Durch diese Schaltflächen kann ein Benutzer bestimmte Widgets spezifizieren, die in der erzeugten GUI 30 erscheinen. Zum Beispiel kann man mit der Zähler-Widget-Schaltfläche 54 eine bestimmte in einem visuell wahrnehmbaren Format in der erzeugten GUI 30 zu überwachende Variable spezifizieren. Ein solches Format ist ein horizontaler Balken, dessen Länge proportional zu dem Wert der zugeordneten Variablen ist. Andere Arten von Widgets sind zum Beispiel Kreisdiagramm- Widgets, Zeitlinien-Widgets usw. Diese und andere Widget-Klassen können in einer grundlegenden graphischen Widget-Bibliothek enthalten sein, die vom Benutzer erweitert werden kann.
  • Obwohl es in 3 nicht gezeigt ist, können mehrere Pulldown-Menüs in der Erzeugungs-GUI 20 bereitgestellt werden. Zum Beispiel kann die Erzeugungs-GUI 20 ein Menü für Befehle enthalten, die mit dem Zielprogramm als ganzes zusammenhängen, wie zum Beispiel Befehle zum Laden, Ausführen, Unterbrechen, periodischen Unterbrechen oder Beenden des Zielprogramms. Ein anderes Menü kann Instrumentationsbefehle bereitstellen, wie zum Beispiel Befehle zum Setzen von Quellcodezeilen zugeordneten Haltepunkten oder Befehle zum Spezifizieren von Triggermechanismen für benutzerdefinierte Funktionen. Durch die Erzeugungs-GUI 20 kann ein Benutzer also durch das Instrumentationswerkzeug bereitgestellte Instrumentationsoperationen auswählen und konfigurieren. Wenn zum Beispiel ein bestimmter aus einem Pulldown-Menü ausgewählter Instrumentationsbefehl benutzerspezifizierte Parameter erfordert, kann der Benutzer diese Parameter über eine Tastatur in ein entsprechendes Textfeld eingeben. Die in den Fenstern und Listen der Erzeugungs-GUI 20 angezeigten Zielprogramminformationen können wie bereits beschrieben durch die Erzeugungs-GUI 20 von dem Backend angefordert werden.
  • Die erzeugte GUI 30 von 4 enthält ein Fenster 60 zum Auflisten von durch den Benutzer in der Erzeugungs-GUI 20 spezifizierten Haltepunktaktionen und ein Fenster 62 zum Auflisten von Benachrichtigungen, die als Antwort auf die Haltepunktaktionen oder andere benutzerspezifizierte Instrumentation von dem Backend empfangen werden. Die erzeugte GUI 30 enthält ferner eine Menge von variablen Beobachtungsfenstern 64, 66 und 68 zum Spezifizieren des aktuellen Status gewählter Variablen I, len bzw. time ptr. Es ist zu beachten, daß die gewählten Variablen das gewählte Zielprogramm veranschaulichen und daß viele andere Arten von Variablen überwacht werden könnten. Die variablen Beobachtungsfenster sind Beispiele für Zähler-Widgets, die durch Verwendung der Zähler-Widget-Schaltfläche 54 in der Erzeugungs-GUI 20 von 3 spezifiziert werden können. Die erzeugte GUI 30 liefert somit eine Anzeige der aus der Erzeugungs-GUI 20 erzeugten benutzerspezifizierten Instrumentation. Wie bereits erwähnt, kann die erzeugte GUI 30 in einer selbständigen Betriebsart ausgeführt werden, bei der sie mit dem Backend in Dialog treten kann, um die notwendigen Informationen bezüglich des Zielprogramms zu erhalten, während das Programm ausgeführt wird. Ein Benutzer erzeugt mit den Instrumentationserzeugungsmerkmalen der Erzeugungs-GUI 20 eine angepaßte erzeugte GUI 30, die mit dem Backend in Dialog tritt, um die für die Instrumentation erforderlichen Zielprogramminformationen bereitzustellen.
  • 5 zeigt ein beispielhaftes Frontend 100 des Instrumentationswerkzeugs ausführlicher. Das Frontend 100 enthält die Erzeugungs-GUI 20 und die erzeugte GUI 30, wie bereits beschrieben. Die erzeugte GUI 30 enthält Textbereichscode 30A, Zähler-Widget-Code 30B und Textfeldcode 30C. Die Codemengen 30A, 30B und 30C sind für die Erzeugung entsprechender Teile der graphischen Anzeige der erzeugten GUI 30 (siehe 4) verantwortlich. Die graphische Ausgabe der Codemengen 30A, 30B und 30C wird abhängig davon, ob sich der Benutzer dafür entscheidet, das bestimmte Widget als Teil der GUI 30 zu verwenden, als Teil der erzeugten GUI 30 angezeigt. Das Frontend 100 enthält ferner ein PCP-Element (Prism Communications Protocol) 102 zur Implementierung von Übermittlungen zwischen dem Frontend 100 und einem oder mehreren Backends und einen Backend-Zuhörer 104 zum Empfangen von Übermittlungen aus einem oder mehreren Backends über das Kommunikationsmedium 15.
  • 6 zeigt ein beispielhaftes Backend 28 ausführlicher. Um die vielfältigen, von ihm geforderten Verantwortlichkeiten abzuhandeln, ist das Backend bei dieser Ausführungsform in mehrere verschiedene Komponenten aufgeteilt. Diese Komponenten werden im allgemeinen parallel ausgeführt, wobei bestimmte als Fork-Prozesse und andere als Threads ausgeführt werden. Sofern möglich werden immer Threads verwendet, außer wenn die Komponenten selbst zusätzliche Prozesse forken müssen. Mehrere Threads können einen einzigen Prozeß bilden, da sie sich denselben Speicherraum teilen. In 6 zeigen dicke durchgezogene Pfeile ein Fork eines gegebenen Prozesses an und dünne durchgezogene Pfeile einen Thread eines gegebenen Prozesses, und gestrichelte Pfeile zeigen Kommunikation an. Das Backend 28 enthält bei dieser Ausführungsform einen main-Prozeß 110 der seine Funktionsweise steuert. Ein Debugger-Prozeß gdb und ein weiterer Prozeß surrogate werden als Forks von dem main-Prozeß gestartet und readgdb, readweasl und readsurrogate sind Threads des main-Prozesses. Der readgdb-Thread ist für das Lesen von Informationen von dem gdb-Prozeß verantwortlich, der readweasl-Thread für das Lesen von Informationen von dem Kommunikationsmedium 15 und der readsurrogate-Thread für das Lesen von Informationen von dem surrogate-Prozeß. Der gdb-Prozeß steuert durch das Backend 28 unternommene Debugger-Operationen, wie durch einen als ein Fork von dem gdb-Prozeß gestarteten target-Prozeß dargestellt. Der surrogate-Prozeß steuert durch das Backend 28 unternommene Aktionen, wie durch einen als Fork von dem surrogate-Prozeß gestarteten action-Prozeß dargestellt.
  • Wie bereits erwähnt, dient das Backend 28 als Steuerung für das Zielprogramm. Alle Anforderungen von dem Frontend 100 werden durch das Backend abgewickelt, und alle Ausgaben aus dem Zielprogramm 22 an das Frontend werden durch das Backend transferiert. Also ist das Backend bei dieser Ausführungsform die einzige Schnittstelle zwischen dem Frontend und dem Zielprogramm. Die Operationen, die das Backend an dem Zielprogramm durchführt, bilden die Grundlage für indirekte Instrumentation. Das Backend dient nicht nur als die Schnittstelle zwischen dem Zielprogramm und dem Frontend, sondern führt zusätzlich wichtige Funktionen durch. Erstens können immer dann, wenn eine gewünschte Triggerbedingung angetroffen wird, durch den Benutzer auszuführende Backend-Aktionen spezifiziert werden. Diese Aktionen führen Berechnungen durch, verändern die Ausführung des Zielprogramms, einschließlich Zielprogrammvariablenwerte, senden Ausgaben zu dem Frontend, fahren zusätzliche Programme herauf oder führen andere Funktionen durch. Zusätzlich zu der Implementierung von Aktionen kann das Backend außerdem seine eigenen internen Zähler enthalten, die zusätzlich zu den Zielprogrammvariablen als Variablen verwendet werden können. Diese Backend-Aktionen und -Zähler sind sehr leistungsstark und geben die Möglichkeit, die Ausführung des Zielprogramms auf vielfältige Weisen zu verändern.
  • Gemäß der Erfindung kann man mit dem oben beschriebenen Instrumentationswerkzeug Fehlertoleranz in einem Datenverarbeitungssystem bereitstellen. Indirekte Instrumentation ist nützlich, um Funktionalität so zu einem Programm hinzuzufügen, daß viel Transparenz und Automatisierung für den Benutzer bereitgestellt wird. Dies gilt insbesondere für das Hinzufügen von Fehlertoleranz zu einem Programm, das ohne jegliche expliziten Fehlertoleranzfähigkeiten entwickelt wurde. Mit indirekter Instrumentation kann ein solches nichtfehlertolerantes Programm nach einigen wenigen Konfigurationsminuten über eine Erzeugungs-GUI in einer fehlertoleranten Betriebsart ausgeführt werden. Es ist kein Modifizieren oder Neukompilieren von Quellcode erforderlich, da die Fehlerdetektions- oder Behebungssoftware hauptsächlich in dem Steuerungsprogramm enthalten ist. Es sollte beachtet weden, daß die Erfindung keinen Zugang zu Quellcode erfordert, sodaß durch Verwendung der Techniken der Erfindung sogar sogenannter "Legacy"-Code fehlertolerant gemacht werden kann. Wenn der Zielprogramm-Quellcode nicht verfügbar ist, kann die Instrumentation durch Verwendung einer an das Zielprogramm angebundenen Symboltabelle durchgeführt werden. Wenn keine Symboltabelle verfügbar ist, können alle Referenzen auf das Zielprogramm über virtuelle Adressen erfolgen.
  • Die auf indirekter Instrumentation basierende Fehlertoleranz gemäß der Erfindung kann allgemein anwendbare Fehlerdetektion bereitstellen, die die Datenintegrität für eine explizit ausgewählte Menge kritischer Daten erhält. Die bei der nachfolgend zu beschreibenden Ausführungsform tolerierten Fehlertypen umfassen alle Einzelerscheinungen transienter oder permanenter Hardwarefehler, sowie Softwarefehler, die Fehlerbedingungen in der Betriebsumgebung verursachen. In dieser Ausführungsform nicht erkannte Fehler sind zum Beispiel Kommunikationsfehler und andere Softwarefehler, die nur interne Wertfehler verursachen.
  • 7 zeigt ein Ausführungsbeispiel für ein Datenverarbeitungssystem mit Fehlertoleranz gemäß der Erfindung. Diese Ausführungsform enthält eine Frontend 100 und drei separate Backends 28-1, 28-2 und 28-3, die auch als Backend1, Backend2 bzw. Backend3 bezeichnet werden. Das Frontend 100 und die drei Backends 28-i können jeweils auf die oben beschriebene Weise konfiguriert werden. Es wird in diesem Beispiel angenommen, daß das Frontend 100 und die Backends 28-i jeweils einer verschiedenen Maschine entsprechen, obwohl die Erfindung dies nicht erfordert. Das Plazieren des Frontends und der Backends auf verschiedenen Maschinen maximiert tendentiell die Leistung und die Fehlereingrenzung für jedes Backend. Bei anderen Ausführungsformen können eines oder mehrere des Frontend 100 und der Backends 28-i auf derselben Maschine implementiert werden. Wie bereits erwähnt, sind die wichtigsten Aspekte der Fehlertoleranz im allgemeinen Fehlererkennung und Fehlerbehebung. Fehlererkennung in der Ausführungsform von 7 wird über Duplikation eines gegebenen Zielprogramms auf drei verschiedenen Maschinen erreicht, wobei jede Kopie des Zielprogramms durch eines der separaten Backends 28-i auf einer der Maschinen gesteuert wird. Diese Backends kommunizieren mit einem einzigen Frontend 100, das als ein Koordinator für die Backends 28-i dient und wirkt, um Diskrepanzen zwischen verschiedenen Kopien des Zielprogramms zu bestimmen, während die Kopien ausgeführt werden. Die Behebung von erkannten Fehlern wird über einen Prüfpunkt- und Neustartmechanismus erreicht, der nachfolgend beschrieben wird.
  • Im Betrieb kann jede der Kopien des Zielprogramms am Anfang der ersten Programmanweisung vorübergehend gestoppt werden. An diesem Punkt wählt der Benutzer die gewünschten Wählparameter, z.B. Variablen, an denen gewählt werden soll, und Wählzeiten, und Behebungsparameter, unter Verwendung einer Erzeugungs-GUI des Frontend 100. Bei anderen Ausführungsformen spezifiziert der Benutzer nur eine Teilmenge dieser und anderer ähnlicher Parameter. Das Frontend 100 sendet dann die entsprechenden Befehle zu jedem der Backends 28-i. Die oben beschriebene Frontend-Erzeugungs-GUI kann auf einfache Weise modifiziert werden, um diese Benutzerspezifikation der Wählparameter und Behebungsparameter zu erlauben. Wenn die entsprechenden Haltepunkte durch die Backends 28-i eingefügt wurden, wird die Ausführung aller Kopien des Zielprogramms wieder aufgenommen. Für jeden Haltepunkt meldet jedes Backend 28-i den Wert vorgewählter kritischer Variablen dem Frontend 100. Wenn das Frontend 100 findet, daß alle gemeldeten Werte identisch sind, weist es jedes Backend 28-i an, die Ausführung seiner Kopie des Zielprogramms fortzusetzen.
  • 8 zeigt eine Situation, in der das Frontend 100 eine Divergenz in den gemeldeten Werten aus den Backends 28-i erkennt. Das Backend mit dem Minderheitswert wird als das fehlerhafte Backend identifiziert und die Ausführung des Zielprogramms wird auf der entsprechenden Maschine beendet. Das fehlerhafte Backend ist in diesem Beispiel Backend2 (28-2). Dann wird von einem der nicht fehlerhaften Backends, z.B. Backend1 (28-1), ein Prüfpunkt genommen, und diese Prüfpunktdaten werden auf die Maschine mit dem fehlerhaften Backend, d.h. Backend2 (28-2), kopiert und ein neues Zielprogramm wird unter Verwendung der Prüfpunktdaten auf Backend2 eingeleitet. Auf diese Weise werden durch einen Prüfpunkt-Behebungsmechanismus Fehler erkannt und korrigiert.
  • Man beachte, daß bei dieser Ausführungsform ein Prüfpunkt nur genommen wird, wenn ein Fehler erkannt wird, was relativ selten auftreten sollte. Alternative Ausführungsformen könnten jedoch andere Arten von Prüfpunkten verwenden, darunter periodische Prüfpunkte. Das Frontend 100 wirkt bei dem Ausführungsbeispiel als Wahlzähler für Daten, die aus den duplizierten Backends 28-i gesammelt werden. Der von dem Frontend 100 verwendete Wahlverwaltungscode kann Verwaltungscode zur Synchronisation der Backends enthalten. Das libckp-Prüfpunktpaket, das in Y.M. Wang, Y. Huang, K.P. Vo, P.Y. Chung und C. Kintala, "Checkpointing and Its Applications", Proc. 25th Fault-Tolerant Computing Symposium, S. 22-31, 1995, beschrieben wird, kann für die Behebung verwendet werden, um Neustart und Migration von Zielprogrammprozessen durchzuführen, die als fehlerhaft bestimmt wurden. Es kann eine beliebige Anzahl von Backends und deshalb jede beliebige Anzahl von Kopien des Zielprogramms unterstützt werden, obwohl im allgemeinen mindestens drei Backends erforderlich sind, um eine Fehlererkennung in dem Ausführungsbeispiel von 7 durchzuführen.
  • Obwohl die tatsächliche Wahlverarbeitung bei der obigen Ausführungsform auf einem einfachen Vergleich gemeldeter Werte basieren kann, sollte man eine Anzahl von Problemen berücksichtigen. Zum Beispiel werden die Kopien des Zielprogramms im allgemeinen unabhängig ausgeführt. Es kann also ein Synchronisationsmechanismus notwendig sein, um sicherzustellen, daß sich alle Kopien des Zielprogramms an dem identischen logischen Ausführungspunkt befinden, wenn die Werte gemeldet werden. Ein zweckmäßiges Verfahren, um diese Synchronisation zu garantieren, besteht darin, Haltepunkte an denselben Adressen in allen Kopien einzufügen. Die Haltepunkte dienen als eine Art von Barrierensynchronisation, wobei alle Kopien warten müssen, bis die letzte Kopie den Haltepunkt erreicht. Außerdem sollte eine Wahlverarbeitung nur an Daten durchgeführt werden, die deterministisch und daher garantiert für alle Kopien identisch sind, was gewöhnlich Daten wie zum Beispiel Maschinennamen, nichtglobale Taktzeiten und dynamische virtuelle Adressen ausschließt. Die Daten sollten in einem standardisierten Format an das Frontend 100 abgeliefert werden. Die Verwendung eines Debuggers als Backend-Steuerungsprogramm liefert ein zweckmäßiges Verfahren zum Standardisieren von Daten. Wenn symbolische Informationen für das Zielprogramm verfügbar sind, können die Daten, an denen gewählt werden soll, als variable Namen spezifiziert werden. Andernfalls können die Daten immer noch über virtuelle Adressen spezifiziert werden.
  • Duplizierte Eingabe und Ausgabe bei dem Ausführungsbeispiel kann zum Beispiel durch Kopieren von Eingaben in alle duplizierten Zielprogramme und Senken der Ausgabe aus allen außer einem Backend, das als primär gekennzeichnet ist, behandelt werden. Diese Art von Eingangs-/Ausgangs-(E/A-)Verwaltung könnte durch Trappen aller Read()- und Write()-Systemaufrufe durchgeführt werden. Eine solche Read()- und Write()-Technik behandelt im allgemeinen jedoch nicht die Speicherabbildungs-E/A- und ioctl()-Aufrufe. Zur Bereitstellung von E/A-Verwaltung in dem Ausführungsbeispiel könnten auch andere geeignete Techniken verwendet werden.
  • Außerdem sollte man in bezug auf Prüfpunkte mehrere Probleme berücksichtigen. Der Code zum Sichern des Prüfpunkt-Prozeßzustands in einer Datei und zum Neustarten eines neuen Prozesses von der Prüfpunktdaten-Datei kann entweder Teil des Zielprogramms sein oder außerhalb des Zielprogramms existieren. Wenn der Prüfpunktcode Teil des Zielprogramms sein soll, dann kann er durch Quellcodemodifikation, Linken zur Compilezeit oder Linken zur Laufzeit mit dem ursprünglichen Zielprogramm integriert werden. Wenn der Prüfpunktcode außerhalb des Zielprogramms liegt, dann kann man ein Prüfpunkt-Paket, das völlig von der Instrumentation getrennt ist, zur Durchführung der Prüfpunktoperationen verwenden oder es kann die Backend-Steuerung verwendet werden, um die Prüfpunktoperationen durchzuführen. Die letztere Möglichkeit hat den Vorteil, daß sie plattformunabhängig ist, insbesondere wenn zur Speicherung der Prüfpunkt-Daten in einem Standard-Zwischenformat symbolische Informationen verwendet werden.
  • Eine frisch neu gestartete Kopie des Zielprogramms sollte mit den ursprünglichen Kopien des Zielprogramms synchronisiert sein. Dies kann besonders problematisch sein, wenn der Prüfpunktcode in das Zielprogramm integriert ist. In diesem Fall führen sowohl die neu gestartete Kopie des Zielprogramms als auch das Prüfpunkt-Zielprogramm Code asymmetrisch aus. Die neu gestartete Kopie muß nicht unbedingt an derselben Stelle wie die anderen Kopien neu gestartet werden. Sie muß an einer derartigen Stelle neu gestartet werden, daß der nächste Wählpunkt, den sie erreicht, mit dem für die anderen Kopien identisch ist. Daraus folgt, daß die Menge von Wählhaltepunkten beim Neustarten der neuen Kopie des Zielprogramms erhalten werden sollte.
  • Es kann eine Richtlinie hergestellt werden, um die Maschine zu spezifizieren, die zum Neustarten des Zielprogramms verwendet wird. Zum Beispiel kann die neue Kopie des Zielprogramms bis zu einer maximalen Neustartschwelle von X mal auf derselben Maschine neu gestartet werden, wobei X>=0 gilt. Wenn ein Zielprogramm auf einer anderen Maschine neu gestartet wird, dann muß eine Prüfpunktdatei auf die neue Maschine kopiert werden, die der ausgefallenen Maschine ähnlich genug sein muß, damit das Zielprogramm unter Verwendung der kopierten Prüfpunktdatei neu gestartet werden kann.
  • 9 ist ein Diagramm eines Beispiels für eine Ereignissequenz für die Fehlertoleranzimplementierung von 7. Es sind drei Zeitlinien gezeigt, um die Ereignisse für zwei der Backends 28-i und das Frontend 100 zu repräsentieren. Obwohl in der Konfiguration von 7 mehr als zwei Backends vorliegen, sind die einzigen zwei, für die Informationen in dieser beispielhaften Zeitlinie angezeigt werden, das Backend, bei dem ein Fehler auftritt, z.B. Backend2 (28-2), und das Backend, das den für die Behebung zu verwendenden Prüfpunkt erzeugt, z.B. Backend1 (28-1). Die wiederauftretenden Ereignissen zugeordneten Indizes haben die Form Txi_j wobei x der Ereignistyp ist, I das Backend identifiziert und j die Ereignisse für jedes Backend unterscheidet. Für Ereignisse, die gleichzeitig stattfinden, werden gestrichelte vertikale Linien gezeichnet. Man beachte außerdem, daß das Diagramm nicht maßstabsgetreu ist.
  • Man nehme an, daß ein Fehler auf Backend2 auftritt und daß sich dieser Fehler auf einen Wert für eine Datenvariable, die für das Wählen ausgewählt wurde, auswirkt. Dieses Auftreten eines Fehlers ist in 9 als ein X gezeigt. Nachdem der Fehler aufgetreten ist, halten die Backends zum Zeitpunkt Tpi_j an, um ihre Daten zu dem Frontend 100 zu senden. Zu diesem Zeitpunkt ist das Wählen aufgrund des Fehlers nicht einstimmig. Wenn mindestens drei Backends an der Wahl teilnehmen, sollten die beiden nichtfehlerhaften Backends dem Frontend denselben Datenwert präsentieren. Auf diese Weise kann das Frontend bestimmen, welches Backend fehlerhaft ist. Dann wird der Behebungsprozeß eingeleitet. Das Frontend weist eines der nicht fehlerhaften Backends an, einen Prüfpunkt seines Zustands in Form einer Prüfpunktdatei zu erzeugen. In 9 nimmt Backend1 einen Prüfpunkt seines Zustands zum Zeitpunkt Tckpl_1. Das Frontend wartet auf den Prüfpunktabschluß. Wenn Backend1 und Backend2 auf verschiedenen Maschinen verankert sind, dann wird die Prüfpunktdatei von der Backend1-Maschine zu der Backend2-Maschine kopiert. Das Frontend weist dann Backend2 an, das fehlerhafte Zielprogramm zu beenden und unter Verwendung der Prüfpunktdatei ein neues Zielprogramm neu zu starten. Nachdem das neue Zielprogramm denselben Zustand wie die nicht fehlerhaften Zielprogramme erreicht hat, gibt das Frontend zum Zeitpunkt Tci_j den Fortsetzungsbefehl an alle Backends. Abhängig von der Neustartrichtlinie würde, wenn die maximale Neustartschwelle bereits erreicht wurde, das gesamte Backend2 beendet und auf einer anderen Maschine neu gestartet. Außerdem würde die neue Kopie des Zielprogramms auf der neuen Maschine neu gestartet.
  • Wenn sich der Fehler, der auf Backend2 auftritt, so auf das Zielprogramm auswirkt, daß es den Wählhaltepunkt nicht erreichen kann, wartet das Frontend, bis eine maximale Warteschwelle erreicht ist, und erklärt dann Backend2 als fehlerhaft. Dann wird derselbe Behebungsprozeß wie oben beschrieben eingeleitet. Diese Arten von Fehlern können verursachen, daß das Zielprogramm abstürzt, unbestimmte Zeit hängen bleibt oder die Ausführung fortsetzt, ohne auf den korrekten Wählhaltepunkt zu stoßen. In dem letzten Fall bestimmt das Frontend immer noch, daß ein Fehler aufgetreten ist, wenn ein anderer Wählhaltepunkt angetroffen wird.
  • Diese beispielhafte Fehlererkennungs- und- Behebungstechnik toleriert alle Einzelerscheinungen von Hardwarefehlern (transient oder permanent). Permanente Fehler führen dazu, daß Neustarts auf eine nicht fehlerhafte Maschine übergesiedelt werden. Für eine "Einzelfehlererscheinung" sollte ein zweiter Fehler erst dann auftreten, wenn der durch den ersten Fehler eingeleitete Behinderungsprozeß abgeschlossen wurde. Es können außerdem bestimmte Arten von Softwarefehlern toleriert werden. Diese Softwarefehler verursachen Fehler in der Umgebung außerhalb des Zielprogramms, die wiederum dazu führen, daß Systemaufrufe in dem Zielprogramm entweder divergente Werte zurückgeben oder eine Programmbeendigung verursachen. Zum Beispiel kann ein Speicherlecken in dem Zielprogramm letztendlich dazu führen, daß eine Anforderung zusätzlichen Speichers eine Programmbeendigung erzeugt, wenn ein nachfolgender Zugriff auf den nichtzugeteilten Speicher einen illegalen-Speicherzugriff-Fehler verursacht, der vom Betriebssystem erkannt wird. Die Auswahl der Wählparameter ist natürlich sehr wichtig. Die dem Wählen unterliegenden Daten können die Menge "kritischer" Variablen in dem Zielprogramm umfassen. Es folgen Beispiele für solche Variablen:
  • Steuerfluß:
  • Am Steuerfluß beteiligte Variablen, wie zum Beispiel Variablen in dem Bedingungsteil einer Verzweigung oder einer Schleife.
  • Programmausgabe:
  • Variablen werden als Parameter an Ausgangsfunktionen geleitet, darunter visuelle, Datei- und Ausgabezwischenprozesse.
  • Algorithmuseingabe und -ausgabe:
  • Als Eingabe verwendete oder durch Algorithmen und Funktionen als Ausgabe erzeugte Variablen, z.B. die Eingangs- und Ausgangsmatrizen einer Matrixoperation.
  • Es können mehrere Ansätze verwendet werden, um die Zuverlässigkeit des Frontend 100 von 7 zu verbessern, da es ein potentieller Einzelausfallpunkt ist. Zum Beispiel kann Selbstprüfungs- und Behebungscode zusammen mit einem externen Watchdog-Mechanismus zu dem Frontend 100 hinzugefügt werden, um sicherzustellen, daß das Frontend betriebsfähig bleibt. Als ein weiteres Beispiel kann der einzelne Frontend-Prozeß mit redundantem Wählen dupliziert werden. Dies würde jedoch einen verteilten Konsens zwischen mehreren duplizierten Frontend-Prozessen erfordern. Eine verteilte Wahl auf Konsens-Basis zwischen den Backends könnte verwendet werden, damit die Frontend-Wahlverarbeitung völlig überflüssig wird.
  • Die oben beschriebenen Fehlertoleranztechniken wurden unter Verwendung von Fehlerinjektion implementiert und getestet. Obwohl die Fehlerinjektionsprüfung zeigte, daß die Technik beim Tolerieren der beabsichtigten Fehler effektiv ist, besteht eine Auswirkung auf die Leistung. In dem Beispiel von 9 sind die folgenden Quellen von Leistungsverschlechterungen sichtbar: (1) die Zeit zum Herauffahren der Backend-Software, bevor das Zielprogramm tatsächlich mit der Ausführung beginnt. Dies ist als die Zeit Tbi-T0 in 9 gezeigt; (2) die Synchronisationszeit bei jeder Wahl. Dies ist die Zeit, für die jedes Zielprogramm angehalten ist, während es darauf wartet, daß das Frontend die Wahlauszählung abschließt und den Fortsetzungsbefehl ausgibt. In 9 ist diese Zeit als die Zeit Tci_j-Tpi_j für einstimmige Wahlen und die Zeit Tckpn_j-Tpi_j für nicht einstimmige Wahlen gezeigt; und (3) die Behebungszeit, die nach dem Erkennen eines Fehlers auftritt. Diese Zeit ist als die Zeit Tci_j-Tckpi_j in 9 gezeigt.
  • Diese und andere Overheads in dem Ausführungsbeispiel sind auf verschiedene Faktoren zurückzuführen. Erstens verursacht das Backend-Steuerungsprogramm ein Overhead, weil es mit dem Zielprogramm um Prozessorzeit konkurrieren muß. Zweitens führt das Steuerungsprogramm zu einem zusätzlichen Overhead zur Verwaltung der Ausführung des Zielprogramms, einschließlich der Verwaltung von Haltepunkten. Drittens erlegt der Wählprozeß den Zielprogrammen eine bestimmte Form von Barrierensynchronisation auf. Die Wartezeit ist besonders auffällig, wenn die Verarbeitungsgeschwindigkeiten der Backend-Maschinen nicht gleich sind, weil die schnelleren Maschinen darauf warten, daß die langsame Maschine den Wahlpunkt erreicht. Da das Frontend und das Backend verteilt sind, kommt es viertens zu einem Kommunikationsoverhead. Fünftens erfordert der Behebungsprozeß endlich viel Zeit.
  • Es können vielfältige Aktionen unternommen werden, um in dem Ausführungsbeispiel die Overheadzeiten zu vermindern, darunter zum Beispiel die folgenden: (1) Verkleinern der Häufigkeit von Wahlen; (2) Verkleinern der Größe der Daten, an denen gewählt wird und (3) Beseitigen der Anforderung für Zielprogramme, die Ausführung anzuhalten, bis das Frontend das Ergebnis der aktuellen Wahl bestimmt hat. Die Aktion (1) würde die Zahl der Overheads des Typs Tci_j-Tpi_j in 9 vermindern. Die Aktion (2) würde die mittlere Zeit Tcl_j-Tpi_j vermindern, aber wahrscheinlich nur geringfügig. Solange die Daten für das Wählen nicht sehr groß sind, besteht der größte Teil der Zeit Tcl_j-Tpi_j aus Synchronisations- und Kommunikationsoverheads. Die Aktion (3) würde das Overhead Tci_j-Tpi_j vollständig beseitigen, würde aber die Komplexität des Wähl- und Behebungsprozesses vergrößern, weil die Zielprogramme nicht mehr synchronisiert wären. Somit müssen Wahldaten bis zu Benutzung gesichert werden und die Behebung würde eine teilweise Löschung bestimmter Wähldaten erfordern.
  • Es sollte beachtet werden, daß die oben beschriebenen Ausführungsbeispiele der Erfindung in anderen als den oben erwähnten Datenverarbeitungsanwendungen implementiert werden können, darunter andere verteilte und nicht verteilte Datenverarbeitungsanwendungen. Diese und zahlreiche andere alternative Ausführungsformen innerhalb des Schutzumfangs der folgenden Ansprüche werden Fachleuten ohne weiteres ersichtlich sein.

Claims (12)

  1. Verfahren zur Bereitstellung von Fehlertoleranz in einem Datenverarbeitungssystem, mit den folgenden Schritten: Ausführen mehrerer verschiedener Kopien eines Zielprogramms, wobei die Ausführung jeder der verschiedenen Kopien durch eine entsprechende Steuerung gesteuert wird; und Erkennen eines Fehlers in mindestens einer der Kopien durch Vergleichen von Werten mindestens einer Variablen, die von den verschiedenen Kopien für mindestens einen designierten Haltepunkt erzeugt werden, wobei das Verfahren dadurch gekennzeichnet ist, daß die Steuerung mit einer Benutzerschnittstelle eines Instrumentationswerkzeugs kommuniziert; und die Variable und/oder der Haltepunkt durch einen Benutzer in der Benutzerschnittstelle des Instrumentationswerkzeugs spezifiziert und aus der Benutzerschnittstelle zu den Steuerungen übermittelt werden, dergestalt, daß der Fehler ohne Modifikation des Zielprogrammcodes erkannt wird.
  2. Verfahren nach Anspruch 1, bei dem weiterhin nach Erkennung eines Fehlers in einer gegebenen der Kopien ein Haltepunkt einer anderen der Kopien genommen und eine neue Kopie von dem Haltepunkt aus neu gestartet wird.
  3. Verfahren nach Anspruch 1, wobei der Schritt des Ausführens weiterhin das Ausführen jeder der verschiedenen Kopien des Programms auf einer anderen Maschine umfaßt.
  4. Verfahren nach Anspruch 1, bei dem weiterhin dem Benutzer ermöglicht wird, mindestens einen Teil mehrerer der Variablen und mehrerer der Haltepunkte in der Benutzerschnittstelle des Instrumentationswerkzeugs auszuwählen; und entsprechende Befehle an jede der Steuerungen abgeliefert werden.
  5. Verfahren nach Anspruch 1, wobei für jeden von mehreren Haltepunkten jede der Steuerungen den Wert der mindestens einen Variablen einem Wahlverarbeitungsmechanismus in dem Instrumentationswerkzeug meldet.
  6. Verfahren nach Anspruch 5, wobei der Wahlverarbeitungsmechanismus in einem der Benutzerschnittstelle des Instrumentationswerkzeugs zugeordneten Prozeß implementiert wird.
  7. Verfahren nach Anspruch 5, wobei der Wahlverarbeitungsmechanismus in einer oder mehreren der Steuerungen implementiert wird.
  8. Verfahren nach Anspruch 1, wobei eine gegebene Kopie des Zielprogramms als einen Fehler enthaltend identifiziert wird, wenn ihr gemeldeter Wert der mindestens einen Variablen von denen der anderen Kopien des Zielprogramms verschieden ist.
  9. Verfahren nach Anspruch 1, wobei die mindestens eine Variable eine Steuerflußvariable des Zielprogramms, eine als Parameter an eine Ausgabefunktion des Zielprogramms weitergeleitete Variable und/oder eine als Eingabe verwendete oder als Ausgabe durch eine Funktion des Zielprogramms erzeugte Variable umfaßt.
  10. Vorrichtung zur Bereitstellung von Fehlertoleranz in einem Datenverarbeitungssystem, umfassend: mindestens eine Maschine, die so ausgelegt ist, daß sie ein Verfahren nach einem der vorhergehenden Ansprüche ausführt.
  11. Computerprogrammprodukt, das direkt in internen Speicher in einem Datenverarbeitungssystem ladbar ist, wobei das Produkt Softwarecodeteile zur Ausführung eines Verfahrens nach einem der Ansprüche 1 bis 9, wenn das Produkt in einem Datenverarbeitungssystem ausgeführt wird, umfaßt.
  12. Computer-benutzbares Medium, das ein Computerprogrammprodukt nach Anspruch 11 speichert.
DE69919632T 1998-06-19 1999-06-08 Fehlertoleranz durch N-modulare Softwareredundanz unter Verwendung von indirekter Instrumentierung Expired - Lifetime DE69919632T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US100826 1998-06-19
US09/100,826 US6161196A (en) 1998-06-19 1998-06-19 Fault tolerance via N-modular software redundancy using indirect instrumentation

Publications (2)

Publication Number Publication Date
DE69919632D1 DE69919632D1 (de) 2004-09-30
DE69919632T2 true DE69919632T2 (de) 2005-09-15

Family

ID=22281728

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69919632T Expired - Lifetime DE69919632T2 (de) 1998-06-19 1999-06-08 Fehlertoleranz durch N-modulare Softwareredundanz unter Verwendung von indirekter Instrumentierung

Country Status (4)

Country Link
US (1) US6161196A (de)
EP (1) EP0965922B1 (de)
JP (1) JP3624119B2 (de)
DE (1) DE69919632T2 (de)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6393583B1 (en) 1998-10-29 2002-05-21 International Business Machines Corporation Method of performing checkpoint/restart of a parallel program
US6401216B1 (en) * 1998-10-29 2002-06-04 International Business Machines Corporation System of performing checkpoint/restart of a parallel program
US6772367B1 (en) * 1999-10-13 2004-08-03 Board Of Regents, The University Of Texas System Software fault tolerance of concurrent programs using controlled re-execution
US7024592B1 (en) * 2000-08-07 2006-04-04 Cigital Method for reducing catastrophic failures in continuously operating software systems
US6874138B1 (en) * 2000-11-28 2005-03-29 Hewlett-Packard Development Company, L.P. Method and apparatus for resuming execution of a failed computer program
US7096388B2 (en) * 2001-08-08 2006-08-22 Avaya Technology Corp. Fault tolerance software system with periodic external self-test failure detection
DE10142511B4 (de) * 2001-08-30 2004-04-29 Daimlerchrysler Ag Fehlerbehandlung von Softwaremodulen
US7185233B2 (en) * 2002-05-14 2007-02-27 Sun Microsystems, Inc. Method and apparatus for inserting synchronized errors
US7805716B2 (en) * 2002-12-10 2010-09-28 Siemens Aktiengesellschaft Method for executing a first software program, developed for a stored-program controller, on a computer
US7331042B2 (en) * 2002-12-21 2008-02-12 International Business Machines Corporation Fault-tolerant dynamic editing of GUI display and source code
US7200772B2 (en) * 2003-04-29 2007-04-03 Intel Corporation Methods and apparatus to reinitiate failed processors in multiple-processor systems
JP2008530626A (ja) * 2003-06-30 2008-08-07 シーメンス アクチエンゲゼルシヤフト マイクロコンピュータにおけるプログラムの実行を監視する方法
US7178136B2 (en) * 2003-06-30 2007-02-13 International Business Machines Corporation Debugging step-back button
CA2435655A1 (en) * 2003-07-21 2005-01-21 Symbium Corporation Embedded system administration
US20050071820A1 (en) * 2003-09-25 2005-03-31 International Business Machines Corporation Using a debugging framework to enforce best practices in program development
US20050193378A1 (en) * 2004-03-01 2005-09-01 Breault Richard E. System and method for building an executable program with a low probability of failure on demand
JP3808874B2 (ja) * 2004-03-12 2006-08-16 東芝ソリューション株式会社 分散システム及び多重化制御方法
US7849450B1 (en) * 2005-01-28 2010-12-07 Intel Corporation Devices, methods and computer program products for reverse execution of a simulation
CA2504333A1 (en) * 2005-04-15 2006-10-15 Symbium Corporation Programming and development infrastructure for an autonomic element
US7577870B2 (en) * 2005-12-21 2009-08-18 The Boeing Company Method and system for controlling command execution
DE102007033885A1 (de) * 2007-07-20 2009-01-22 Siemens Ag Verfahren zur transparenten Replikation einer Softwarekomponente eines Softwaresystems
US8229886B2 (en) * 2008-02-19 2012-07-24 International Business Machines Corporation Continuously available program replicas
US7941616B2 (en) * 2008-10-21 2011-05-10 Microsoft Corporation System to reduce interference in concurrent programs
CN102918802B (zh) * 2011-05-30 2015-03-11 华为技术有限公司 确定故障指示状态的方法、节点和***
US9454462B2 (en) 2012-03-16 2016-09-27 International Business Machines Corporation Run-time instrumentation monitoring for processor characteristic changes
US9158660B2 (en) 2012-03-16 2015-10-13 International Business Machines Corporation Controlling operation of a run-time instrumentation facility
US9483268B2 (en) 2012-03-16 2016-11-01 International Business Machines Corporation Hardware based run-time instrumentation facility for managed run-times
US9442824B2 (en) 2012-03-16 2016-09-13 International Business Machines Corporation Transformation of a program-event-recording event into a run-time instrumentation event
US9280447B2 (en) 2012-03-16 2016-03-08 International Business Machines Corporation Modifying run-time-instrumentation controls from a lesser-privileged state
US9250902B2 (en) 2012-03-16 2016-02-02 International Business Machines Corporation Determining the status of run-time-instrumentation controls
US9471315B2 (en) 2012-03-16 2016-10-18 International Business Machines Corporation Run-time instrumentation reporting
US9411591B2 (en) 2012-03-16 2016-08-09 International Business Machines Corporation Run-time instrumentation sampling in transactional-execution mode
US9405541B2 (en) * 2012-03-16 2016-08-02 International Business Machines Corporation Run-time instrumentation indirect sampling by address
US9430238B2 (en) 2012-03-16 2016-08-30 International Business Machines Corporation Run-time-instrumentation controls emit instruction
US9367316B2 (en) 2012-03-16 2016-06-14 International Business Machines Corporation Run-time instrumentation indirect sampling by instruction operation code
US9465716B2 (en) 2012-03-16 2016-10-11 International Business Machines Corporation Run-time instrumentation directed sampling
FR3039347B1 (fr) * 2015-07-20 2017-09-08 Bull Sas Procede de sauvegarde de l'environnement de travail d'une session d'un utilisateur sur un serveur
WO2018048720A1 (en) 2016-09-09 2018-03-15 The Charles Stark Draper Laboratory, Inc. Voting circuits and methods for trusted fault tolerance of a system of untrusted subsystems
US9736231B1 (en) 2016-09-23 2017-08-15 International Business Machines Corporation Representational state transfer request routing
US10545850B1 (en) * 2018-10-18 2020-01-28 Denso International America, Inc. System and methods for parallel execution and comparison of related processes for fault protection

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5297274A (en) * 1991-04-15 1994-03-22 International Business Machines Corporation Performance analysis of program in multithread OS by creating concurrently running thread generating breakpoint interrupts to active tracing monitor
US5452441A (en) * 1994-03-30 1995-09-19 At&T Corp. System and method for on-line state restoration of one or more processors in an N module redundant voting processor system
JP3555047B2 (ja) * 1995-12-20 2004-08-18 株式会社日立製作所 複合コンピュータシステム

Also Published As

Publication number Publication date
EP0965922A3 (de) 2003-03-19
JP3624119B2 (ja) 2005-03-02
DE69919632D1 (de) 2004-09-30
EP0965922B1 (de) 2004-08-25
US6161196A (en) 2000-12-12
JP2000081996A (ja) 2000-03-21
EP0965922A2 (de) 1999-12-22

Similar Documents

Publication Publication Date Title
DE69919632T2 (de) Fehlertoleranz durch N-modulare Softwareredundanz unter Verwendung von indirekter Instrumentierung
DE3786956T2 (de) Verwaltung von registrierungsdaten in einem transaktionsorientierten System.
DE69025507T2 (de) Gerät zur Sicherung und Wiederherstellung für Digitalrechner
DE19747396C2 (de) Verfahren und Anordnung zur Schaffung einer Ferndiagnose für ein elektronisches System über ein Netz
DE60025488T2 (de) Vorrichtung und verfahren zur allgemeinen koordination und verwaltung von mehrfachen schnappschussanbietern
DE60019038T2 (de) Intelligente Fehlerverwaltung
DE68927705T2 (de) Verfahren zum Entfernen unbestätigter Änderungen an gespeicherten Daten durch ein Datenbankverwaltungssystem
DE69919404T2 (de) On-line fehlerbeseitigungs- und ablaufverfolgungssytem und verfahren
DE69216020T2 (de) Verbessertes fehlersuchsystem und -verfahren, besonders für die fehlersuche in einer multi-architekturumgebung
DE2722099C2 (de)
DE60130840T2 (de) Vorrichtung und Verfahren zur Katalogisierung von symbolischen Daten zur Verwendung bei der Leistungsanalyse von Computerprogrammen
DE602005003490T2 (de) Verteiltes System mit Quorumredundanz und Verfahren dafür
DE60017457T2 (de) Verfahren zur isolierung eines fehlers in fehlernachrichten
EP1703350B1 (de) Diagnose eines Automatisierungssystems
DE10050684A1 (de) Verfahren und System zur periodischen Ablaufverfolgung für die Echtzeitgenerierung von Segmenten von Aufrufstack-Bäumen
DE4118454A1 (de) System zum automatischen testen von anwendersoftware
DE10225664A1 (de) System und Verfahren zum Prüfen von Systemabrufereignissen mit Systemabrufumhüllungen
DE102013218341A1 (de) Ersatzweise Verlagerung von Threads (Thread-Sparing) zwischen Berechnungskernen in einem Multithread-Prozessor
DE10127170A1 (de) Fehlersuchverfahren und Fehlersuchvorrichtung
DE112013006588T5 (de) Verwaltungssystem zum Verwalten eines Computersystems und Verwaltungsverfahren hierfür
DE202017106569U1 (de) Analyse grossangelegter Datenverarbeitungsaufträge
DE112021002894T5 (de) On-the- fly- pit-auswahl bei disarter-recovery in der cloud
DE602004003327T2 (de) Computersystem und Verfahren zum Wiederanlauf mittels entferntem Kopieren
EP0048991B1 (de) Verfahren und Anordnung zur Behandlung von Unterbrechungsbedingungen während des Arbeitsablaufes in Datenverarbeitungsanlagen mit Mikroprogrammsteuerung
DE69927223T2 (de) Ausfallsicherheit eines Mehrrechnersystems

Legal Events

Date Code Title Description
8364 No opposition during term of opposition