-
Die
vorliegende Erfindung bezieht sich allgemein auf Computersysteme.
Insbesondere bezieht sich die vorliegende Erfindung auf fehlertolerante und
hoch verfügbare
Computersysteme.
-
Frühere Lösungen für ein Bereitstellen
einer Fehlertoleranz bei einer Digitalverarbeitung sind entweder
hardwarebasiert, softwarebasiert oder eine Kombination von beidem.
Eine Fehlertoleranz kann in Hardware durch ein Laufenlassen zweier
vollständiger
zentraler Verarbeitungseinheiten (CPUs) im Verriegelungsschritt
oder dreier CPUs in einer „Wähl"-Konfiguration bereitgestellt
werden. Ein System kann z. B. drei CPUs, die den gleichen Befehlsstrom
ausführen,
gemeinsam mit drei separaten Hauptspeichereinheiten und separaten
I/O-Vorrichtungen verwenden, die Funktionen duplizieren, so daß, wenn
eines jedes Typs von Element ausfällt, das System weiterhin funktioniert.
Leider umfassen derartige Systeme einen ungeheuren Systemmehraufwand,
nicht nur hinsichtlich der Anzahl benötigter CPUs, sondern auch hinsichtlich
der Infrastruktur, die die CPUs unterstützt (Speicher, Leistung, Kühlsysteme
usw.).
-
Softwarebasierte
Lösungen
beruhen üblicherweise
auf einem zumindest dreimaligen vollständigen erneuten Laufenlassen
eines Programms. Dies führt
zu effektiven Ausführungszeiten,
die dreimal länger
als dann sind, wenn das Programm nur einmal laufengelassen wird.
Kombinationsschemata erfordern sowohl eine zusätzliche Hardware (z. B. zweimal
die Hardware) als auch eine zusätzliche
Verarbeitung. Die zusätzliche
Verarbeitung kann die Form einer Software-Prüfpunktgebung
annehmen. Die Software-Prüfpunktgebung
betrifft die Fähigkeit,
bei einem Fehler eine spezifische Befehlssequenz „erneut
abzuspielen".
-
Die
oben erläuterten
bestehenden Lösungen sind
teuer in Bezug auf Kosten und/oder Systemverhalten. So sind Verbesserungen
an Systemen und Verfahren zum Bereitstellen einer fehlertoleranten
Digitalverarbeitung sehr wünschenswert.
-
Es
ist die Aufgabe der vorliegenden Erfindung, einen Mikroprozessor
mit verbesserten Charakteristika, ein verbessertes Verfahren zum
anvisierten fehlertoleranten Rechnen, eine Rechenvorrichtung mit
verbesserten Charakteristika oder ein Computerprogrammprodukt mit
verbesserten Charakteristika zu schaffen.
-
Diese
Aufgabe wird durch einen Mikroprozessor gemäß Anspruch 1, ein Verfahren
gemäß Anspruch
6, eine Rechenvorrichtung gemäß Anspruch 14
oder ein Computerprogrammprodukt gemäß Anspruch 16 gelöst.
-
Ein
Ausführungsbeispiel
der Erfindung bezieht sich auf einen Mikroprozessor zum anvisierten (targeted)
fehlertoleranten Rechnen. Der Decodierschaltungsaufbau des Mikroprozessors
ist konfiguriert, um eine fehlertolerante Version eines Befehls und
eine nicht-fehlertolerante Version des Befehls unterschiedlich voneinander
zu decodieren. Der Ausführungsschaltungsaufbau
des Mikroprozessors ist konfiguriert, um die fehlertolerante Version
des Befehls mit einer Redundanzprüfung auszuführen und die nicht-fehlertolerante
Version des Befehls ohne Redundanzprüfung auszuführen.
-
Ein
weiteres Ausführungsbeispiel
der Erfindung bezieht sich auf ein Verfahren zum anvisierten fehlertoleranten
Rechnen in einer zentralen Verarbeitungseinheit (CPU). Das Verfahren
umfaßt
ein Decodieren einer fehlertoleranten Version eines Befehls, um
einen ersten Operationscode zu erzeugen, und ein Decodieren einer
nicht-fehlertoleranten Version des Befehls, um einen zweiten Operationscode
zu erzeugen. Der erste Operationscode wird mit Redundanzprüfung ausgeführt.
-
Der
zweite Operationscode wird ohne Redundanzprüfung ausgeführt.
-
Ein
weiteres Ausführungsbeispiel
der Erfindung bezieht sich auf ein Computerprogrammprodukt. Das
Programmprodukt umfaßt
einen ersten Typ computerlesbarer Befehle, die mit Redundanzprüfung auszuführen sind,
und einen zweiten Typ computerlesbarer Befehle, die nicht-redundant
auszuführen
sind.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beigefügten
Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein exemplarisches schematisches
Diagramm eines CPU-Schaltungsaufbaus zur anvisierten Fehlertoleranz
gemäß einem
Ausführungsbeispiel
der Erfindung, wobei es für
Fachleute auf dem Gebiet des Mikroprozessorentwurfs ersichtlich
ist, daß weitere
Entwürfe
existieren können,
die die gleiche Basisfunktion durchführen;
-
2A eine exemplarische Befehlssequenz unter
Verwendung einer fehlertoleranten Version eines Befehls gemäß einem
Ausführungsbeispiel
der Erfindung;
-
2B ein Flußdiagramm
eines Verfahrens, das in einer CPU während einer Ausführung eines fehlertoleranten
Befehls gemäß einem
Ausführungsbeispiel
der Erfindung durchgeführt
wird; und
-
3 ein Diagramm, das zwei
unterschiedliche Pegel einer anvisierten Fehlertoleranz gemäß einem
Ausführungsbeispiel
der Erfindung darstellt.
-
Wie
oben erläutert
wurde, weisen frühere Systeme
und Verfahren zur fehlertoleranten Digitalverarbeitung verschiedene
Nachteile auf. Die vorliegende Erfindung bezieht sich auf Systeme
und Verfahren zum verbesserten fehlertoleranten Rechnen.
-
Ein
herkömmlicher
Befehlssatz eines modernen Mikroprozessors besteht aus Befehlen,
die im allgemeinen für
Leistung optimiert sind. Gemäß einem
Ausführungsbeispiel
der Erfindung werden spezielle Befehle, die fehlertolerante Merkmale
aufweisen, hinzugefügt,
um einen derartigen herkömmlichen
Befehlssatz zu ergänzen.
Eine arithmetische oder logische Operation kann z. B. zwei Typen
oder Versionen aufweisen. Eine nicht-fehlertolerante Version verwendet
einen Ausführungspfad,
der für
eine schnelle Leistung konfiguriert ist, während eine fehlertolerante
Version einen Pfad mit Redundanzprüfung verwendet, um die Korrektheit
des Ergebnisses sicherzustellen. Im Gegensatz dazu liefern herkömmliche
CPUs üblicherweise
keine derartige Verifizierungsoption für arithmetische und logische
Funktionen. Dies ist so, da die Verifizierung dieser Funktionen üblicherweise
langsam und komplex ist, was eine Leistung in Bezug auf Geschwindigkeit
reduziert. Weitere Strukturen in dem Mikroprozessor, wie z. B. Cache-Speicher,
Register, Übersetzungspuffer (Translation
Lookaside Buffer; TLBs) und dergleichen, werden üblicherweise durch Paritätsbits oder eine
Fehlerkorrekturcodierung verifiziert.
-
Ein
Ausführungsbeispiel
der vorliegenden Erfindung verwendet spezielle Versionen bestimmter CPU-Befehle,
um eine Fehlertoleranz auf eine anvisierte Art und Weise bereitzustellen.
Spezifische Operationen innerhalb einer Anwendung können für eine Fehlertoleranz
anvisiert sein, während
weitere Operationen (oder weitere gesamte Programme) ohne den Mehraufwand
aufgrund einer Redundanzprüfung
durchgeführt
werden können.
-
Eine
derartige anvisierte Fehlertoleranz weist gegenüber früheren Lösungen verschiedene Vorteile
auf. Sie kann selektiv auf Systemprozesse angewendet werden, anstatt
auf alle Systemprozesse angewendet zu werden. Es gibt einige Prozesse, die
nicht wesentlich genug sind, um die Zuordnung derartiger Betriebsmittel
zu rechtfertigen, oder die erwünschterweise
so schnell wie möglich
laufen sollen (ohne durch eine Redundanzprüfung verlangsamt zu werden).
Ein Druck-Spooler-Programm z. B. ist wahrscheinlich nicht ausreichend
wesentlich, um eine Fehlertoleranz zu benötigen. Gemäß einem Ausführungsbeispiel
der Erfindung erlaubt eine anvisierte Fehlertoleranz es, daß ein derartiges
nichtwesentliches Programm ohne die speziellen Redundanzprüf-Befehle geschrieben
werden kann, so daß das nichtwesentliche
Programm nicht unnötig
wertvolle Systembetriebsmittel verbraucht. Andererseits können wesentliche
Programme oder Prozesse, die eine Redundanzprüfung benötigen, unter Verwendung der
speziellen Befehle geschrieben sein, um eine fehlertolerante Ausführung derselben
zu liefern. Die Wahl bleibt dem Anwendungsprogrammierer überlassen.
-
1 ist ein schematisches
Diagramm eines CPU-Schaltungsaufbaus für eine anvisierte Fehlertoleranz
gemäß einem
exemplarischen Ausführungsbeispiel
der Erfindung. Der CPU-Schaltungsaufbau umfaßt eine
Abrufeinheit 102, einen Befehls-Cache 104, eine
Befehlsdecodiereinheit 106, einen Register-Lade/Speicher-Schaltungsaufbau 108,
eine Gleitkomma-Registerdatei 110, eine erste Gleitkomma-Einheit
(FPU #1) 112, eine zweite Gleitkomma-Einheit (FPU #2) 114 und
einen Hardware-Komparator und zugeordnete Flags 116.
-
Natürlich umfaßt die CPU
weitere Komponenten und Verbindungen über die dargestellten hinaus.
Die dargestellten Komponenten umfassen diejenigen, die zu der exemplarischen
fehlertoleranten Operation gehören,
die unten Bezug nehmend auf die 2A und 2B erläutert ist.
-
Gemäß einem
Ausführungsbeispiel
der Erfindung ist der Befehlsdecodierer-Schaltungsaufbau 106 konfiguriert,
um eine fehlertolerante und eine nicht-fehlertolerante Version eines
Befehls unterschiedlich voneinander zu decodieren. Der fehlertolerante
Befehle kann durch einen ersten Opera tionscode (OP-Code) dargestellt
werden, während
die nicht-fehlertolerante
Version des gleichen Befehls durch einen zweiten Operationscode
dargestellt werden kann. Der CPU-Schaltungsaufbau
ist konfiguriert, um die fehlertolerante Version des Befehls mit Redundanzprüfung auszuführen und
die nicht-fehlertolerante Version des Befehls ohne Redundanzprüfung auszuführen.
-
Gemäß einem
Ausführungsbeispiel
können die
Flags (siehe 116) ein erstes „Gültig"-Flag und ein zweites „Vergleichsergebnis"-Flag umfassen. Das Gültig-Flag
kann verwendet werden, um die Gültigkeit
eines gespeicherten Ergebnisses anzuzeigen. Das Vergleichsergebnis-Flag
kann das Ergebnis eines Vergleichs anzeigen, der durch den zugeordneten
Komparator durchgeführt
wird.
-
2A stellt eine exemplarische
Befehlssequenz unter Verwendung einer fehlertoleranten Version eines
Befehls gemäß einem
Ausführungsbeispiel
der Erfindung dar. Die exemplarische Befehlssequenz umfaßt einen
fehlertoleranten Multiplikationsbefehl (FT_MULT). Weitere Beispiele
umfassen einen fehlertoleranten Additionsbefehl (FT_ADD), weitere
fehlertolerante arithmetische Befehle und fehlertolerante logische
Befehle (FT_AND, FT_NAND, FT_OR, FT_XOR und dergleichen).
-
Die
Sequenz in 2A beginnt
durch ein Laden eines Operands x in ein erstes Register R1 und ein
Laden eines Operands y in ein zweites Register R2. Nachdem die Register
mit den Operanden beladen sind, wird die Multiplikationsoperation
durchgeführt.
-
Bei
einer normalen nicht-fehlertoleranten Multiplikation (MULT) wird
der Inhalt von R1 und R2 direkt an eine Gleitkomma-Einheit gesandt,
die ein Ergebnis erzeugt, das in einem dritten Register R3 gespeichert
wird. Es wird davon ausgegangen, daß das Ergebnis in R3 gültig für die MULT-Operation ist.
-
Hier
führen
wir jedoch eine fehlertolerante Multiplikation (FT_MULT) aus. Die
Operation FT_MULT ist langsamer und komplexer als die Operation
MULT. Die spezifischen Schritte, die bei einem Ausführungsbeispiel
eines Durchführens
einer derartigen fehlertoleranten Operation beinhaltet sind, sind wie
folgt in Bezugnahme auf 2B beschrieben.
-
2B ist ein Flußdiagramm
eines Verfahrens, das in einer CPU während einer Ausführung eines
fehlertoleranten Befehls gemäß einem
Ausführungsbeispiel
der Erfindung durchgeführt
wird. Der Prozeß beginnt
mit einem Senden 202 des Inhalts des ersten und des zweiten
Registers (R1 und R2) an eine erste Gleitkomma-Einheit (FPU #1)
und an eine zweite Gleitkomma-Einheit (FPU #2). Wie in 2B gezeigt ist, kann dies
aus Effizienzgründen
in zwei parallelen Schritten (202-1 und 202-2)
durchgeführt werden.
Der Schaltungsaufbau kann z. B. konfiguriert sein, wie in 1 dargestellt ist, wobei
der Inhalt von R1 und R2 aus der Registerdatei 110 parallel
in sowohl die FPU #1 112 als auch die FPU #2 114 geladen
wird.
-
Jede
der FPUs #1 und #2 führt
dann die bezeichnete Operation bezüglich der Operanden durch (204-1 bzw. 204-2).
In dem Fall von FT_MULT ist die Operation eine Multiplikation der
beiden Operanden. Die Ergebnisse der Operationen werden durch jede FPU
an einen Komparator gesandt 206-1 und 206-2. Der
Komparator weist vorzugsweise eine Hardware-Schaltung 116 auf,
die entworfen ist, um schnell die beiden Ergebnisse zu vergleichen
und zu bestimmen 208, ob dieselben übereinstimmen oder nicht.
-
Wenn
die beiden Ergebnisse übereinstimmen,
wird ein gültiges
Ergebnis in einem dritten Register R3 gespeichert 210.
Das Ergebnis kann als gültig
angezeigt werden, indem ein Gültig-Flag
gesetzt wird, das dem Komparator zugeordnet ist. (Eine Rücksetzung
des Gültig-Flags
würde ein
ungültiges Ergebnis
anzeigen.) Ein Herausfinden, daß die
Ergebnis se übereinstimmen,
verifiziert die Genauigkeit der durchgeführten Operation.
-
Andererseits
wird, wenn die Ergebnisse nicht übereinstimmen,
eine Bestimmung 212 hinsichtlich dessen durchgeführt, ob
die maximalen N Male zum Wiederholen oder erneuten Durchführen der
Operation erreicht wurden. Eine Zählervorrichtung kann verwendet
werden, um die Wiederholungsmale zu verfolgen. Bei einer spezifischen
Implementierung kann N dreimal sein. Alternativ kann N einmal, zweimal,
viermal oder mehr betragen. Bei einem Ausführungsbeispiel kann die Zahl
N ein Parameter des fehlertoleranten Befehls sein, derart, daß N auswählbar sein
kann.
-
Wenn
die maximalen N Male zum Wiederholen bereits durchgeführt wurden,
kann eine Maschinenprüfung
durchgeführt
werden 214, um die sichtlich fehlerhafte Operation der
CPU zu prüfen und/oder
diagnostizieren. Eine Fehlernachricht kann als ein Ergebnis der
Maschinenprüfung
erzeugt werden.
-
Wenn
die maximalen N Male zum Wiederholen nicht erreicht sind, kehrt
der Prozeß schleifenmäßig zurück, derart,
daß die
FPUs die Operation erneut durchführen 204 und
ihre Ergebnisse erneut an den Komparator senden 206. Die
Bestimmung 208 hinsichtlich dessen wird erneut durchgeführt, ob
die Ergebnisse übereinstimmen
oder nicht. Wenn dieses Mal eine Übereinstimmung vorliegt, wird
ein gültiges Ergebnis
in R3 gespeichert 210. Wenn keine Übereinstimmung vorliegt, wird
wieder eine Prüfung 212 durchgeführt, um
zu sehen, ob die maximale Wiederholungsanzahl erreicht wurde. Wenn
das Maximum ohne Übereinstimmung
erreicht wurde, kann eine Maschinenprüfung durchgeführt werden 214.
Andernfalls kehrt der Prozeß schleifenmäßig wieder
zurück,
um die Operation in den FPUs zu wiederholen.
-
Bei
einem Ausführungsbeispiel
wird ein Protokoll von Vergleichsfehlern behalten (d. h. wenn die Vergleichsergebnisse
nicht übereinstimmen).
Wenn z. B. eine erste Iteration der Operation den Vergleich nicht
besteht, jedoch eine spätere
Iteration durchkommt, können
der eine oder die mehreren Vergleichsfehler selbst dann protokolliert
werden, wenn keine Maschinenprüfung
durchgeführt
wurde. Das Protokollieren kann als ein zusätzlicher Schritt implementiert
sein, nachdem eine Bestimmung 208 durchgeführt ist,
daß die
Ergebnisse nicht übereinstimmen. Das
Protokollieren kann z. B. als ein zusätzlicher Schritt zwischen den
Blöcken 208 und 212 in 2 durchgeführt werden.
-
3 ist ein Diagramm, das
zwei unterschiedliche Pegel einer anvisierten Fehlertoleranz gemäß einem
Ausführungsbeispiel
der Erfindung darstellt.
-
Eine
erste Ebene einer Anvisierung befindet sich auf der Programmebene.
Ein Ausführungsbeispiel
der Erfindung ermöglicht
es, daß ein
Programm mit bestimmten fehlertoleranten (F-T) Aspekten oder ohne
fehlertolerante Aspekte geschrieben werden kann. Ein Programm mit
fehlertoleranten Aspekten ist als Programm A 302 dargestellt,
während
ein Programm ohne fehlertolerante Aspekte als Programm B 303 dargestellt
ist. Das Programm A 302 umfaßt zumindest eine Routine 304,
die fehlertolerante Versionen eines oder mehrerer Befehle verwendet.
Andererseits umfaßt
das Programm B 303 nur Routinen 306, die keine
fehlertoleranten Versionen von Befehlen verwenden. Anders ausgedrückt erlaubt
es ein Ausführungsbeispiel
der Erfindung, daß ein
Programm anvisiert werden kann, um eine Fehlertoleranz zu umfassen
oder nicht. Programme ohne Fehlertoleranz sollten am schnellsten
durchgeführt
werden.
-
Eine
zweite Ebene einer Anvisierung ist pro Routine oder Sequenz von
Befehlen, oder sogar pro Befehl, innerhalb eines Programms. Es wird
das Programm A 302 aus 3 betrachtet.
Das Programm A 302 umfaßt einige Routinen 304,
die anvisiert sein können,
um fehlertolerante Befehle zu verwenden, und weitere Routinen 306,
die keine fehlertoleranten Befehle verwenden. Die zur Fehlertoleranz
anvisier ten Routinen 304 können in einem bestimmten Aspekt
wesentlicher sein. Die Genauigkeit ihrer Berechnungen kann z. B.
als wesentlich erachtet werden, so daß diese Berechnungen anvisiert
sind, um unter Verwendung fehlertoleranter Befehle durchgeführt zu werden.
Andererseits können
die Routinen 306, die keine fehlertoleranten Befehle verwenden,
hinsichtlich einer Berechnungsgenauigkeit weniger wesentlich sein.
-
Ausführungsbeispiele
der vorliegenden Erfindung weisen verschiedene Vorteile gegenüber fehlertoleranten
Rechentechniken des Stands der Technik auf. Ein Hardware- und/oder
Software-Mehraufwand, der zur Bereitstellung einer Fehlertoleranz
benötigt
wird, kann unter Umständen
reduziert werden. Dies wird dadurch durchgeführt, daß der Programmschreiber spezifische
Befehle im Inneren eines Programms mit einer „Sicherheit einer Korrektheit" anvisieren kann.
Die erforderliche Hardware ist reduziert, da dieses Schema nicht
mehrere CPUs und keine zusätzliche
zugeordnete Infrastruktur benötigt.
Die Software-Ausführungszeiten
werden relativ schnell gehalten, da die Hardware selbst die Redundanzprüfung auf
einer anvisierten Basis durchführt.