-
STAND DER
TECHNIK
-
Aktuelle
Systeme mit redundanter Ausführung
verwenden häufig
eine Kontrollschaltung, die sich selbst prüft und in Hardware implementiert
ist. Der Kontrollschaltung ähnlich
ist der Vergleichsbefehl, der die Ergebnisse aus zwei Threads (z.B.
Speicheradresse und Daten) vergleicht. Es ist möglich, den Vergleichsbefehl
in beiden Threads zu duplizieren, um den Effekt der Selbstprüfung durch
Verdoppelung zu erhalten.
-
Leider
verliert die Architektur durch Duplizieren des Vergleichsbefehls
den Leistungsvorteil des redundanten Multithreading (RMT). Der Leistungsvorteil
von RMT stammt daraus, daß der
erste und der letzte Thread ausreichend weit voneinander entfernt
sind, so daß der
erste Thread Cachefehlgriffe und Fehler in der Sprungvorhersage
für den
ersten Thread vorher abrufen kann. Wenn der Vergleichsbefehl dupliziert
wird, werden nicht nur zusätzliche
Warteschlangen benötigt,
die zu größeren Verwaltungsaufgaben
führen,
sondern die Architektur ist wegen der Synchronisation, die in beiden
Richtungen erforderlich ist, auch nicht in der Lage, die zwei Threads ausreichend
weit voneinander zu halten. Daher wird ein Befehl benötigt, der
eine niedrigere Ausfallrate erreichen kann, ohne den Leistungsvorteil
des RMT zu opfern.
-
KURZBESCHREIBUNG
DER ZEICHNUNGEN
-
Verschiedene
Merkmale der Erfindung sind aus der folgenden Beschreibung der bevorzugten Ausführungsformen
zu erkennen, wie in den begleitenden Zeichnungen illustriert, wobei
gleiche Bezugszahlen im allgemeinen sich auf dieselben Teile in allen
Zeichnungen beziehen. Die Zeichnungen sind nicht unbedingt maßstabsgerecht,
da die Betonung statt dessen auf der Erläuterung der Prinzipien der Erfindungen
liegt.
-
1 ist
ein Blockdiagramm einer Ausführungsform
einer Multithread-Archtitektur.
-
2 ist
ein Flußdiagramm,
das ein Verfahren zur Erzeugung eines Kontrollbefehls erläutert.
-
3 ist
ein Flußdiagramm,
das eine Implementierung eines Kontrollbefehls in jedem Thread erläutert.
-
4 ist
ein Blockdiagramm einer Ausführungsform
eines Kontrollbefehls.
-
5 ist
ein Blockdiagramm eines Systems, das eine Umgebung für Multithread-Prozessoren bereitstellen
kann.
-
6 ist
ein Blockdiagramm eines alternativen Systems, das eine Umgebung
für Multithread-Prozessoren
bereitstellen kann.
-
AUSFÜHRLICHE
BESCHREIBUNG
-
In
der folgenden Beschreibung werden spezielle Details für Zwecke
der Erklärung,
und nicht zur Einschränkung,
dargelegt, wie zum Beispiel besondere Strukturen, Architekturen,
Schnittstellen, Verfahren usw., um für ein gründliches Verständnis der verschiedenen
Erscheinungsformen der Erfindung zu sorgen. Für Fachleute auf diesem Gebiet,
die den Vorteil der aktuellen Offenbarung haben, ist jedoch erkennbar,
daß die
verschiedenen Erscheinungsformen der Erfindung in anderen Beispielen
ausgeführt werden
können,
die von diesen speziellen Details abweichen. In bestimmten Fällen werden
Beschreibungen der bekannten Vorrichtungen, Schaltungen und Verfahren
weggelassen, um die Beschreibung der vorliegenden Erfindung nicht
durch unnötige
Details unverständlich
zu machen.
-
Es
werden Vorrichtungen und ein Verfahren für einen Kontrollbefehl in einer
redundanten Multithreading-Umgebung beschrieben. In der folgenden Beschreibung
werden zahlreiche spezielle Details zum Zweck der Erklärung dargelegt,
um für
ein gründliches
Verständnis
der Erfindung zu sorgen. Für Fachleute
auf dem Gebiet ist jedoch erkennbar, daß die Erfindung ohne diese
speziellen Details ausgeführt
werden kann.
-
1 ist
ein Blockdiagramm einer Ausführungsform
einer redundanten Multithread-Archtitektur.
In einer redundanten Multithread-Archtitektur können Fehler durch Ausführen von
zwei Kopien eines Programms als getrennte Threads festgestellt werden.
-
Jeder
Thread wird mit identischen Eingaben versehen, und die Ausgaben
werden verglichen, um festzustellen, ob ein Fehler aufgetreten ist.
Redundantes Multithreading kann in Bezug auf einen Begriff beschrieben
werden, der hierin als "Bereich
der Replikation" bezeichnet
wird. Der Bereich der Replikation ist die Grenze einer logisch oder
physisch redundanten Operation.
-
Komponenten
im Bereich der Replikation 100 (z.B. ein Prozessor, der
den ersten Thread 105 ausführt, und ein Prozessor, der
den letzten Thread 110 ausführt) unterliegen der redundanten
Ausführung.
Im Gegensatz dazu unterliegen Komponenten außerhalb des Bereichs der Replikation 100 (z.B. Speicher 100)
nicht der redundanten Ausführung. Fehlerschutz
wird durch andere Verfahren bereitgestellt, zum Beispiel durch einen
Fehlerkorrekturcode für
einen Speicher 115. Andere Geräte können außerhalb des Bereichs der Replikation 100 liegen, und/oder
andere Verfahren können
dazu verwendet werden, einen Fehlerschutz für Geräte außerhalb des Bereichs der Replikation 100 bereitzustellen.
-
Daten,
die in den Bereich der Replikation 100 gelangen, gelangen
durch den Eingangsreplikationsagenten 120 dorthin, der
die Daten repliziert und eine Kopie der Daten an den ersten Thread 105 und
an den letzten Thread 110 sendet. Analog treten Daten, die
den Bereich Replikation 100 verlassen, durch den Ausgangsvergleichsagenten 125 aus,
der die Daten vergleicht und feststellt, ob ein Fehler aufgetreten
ist. Das Ändern
der Grenze des Bereichs der Replikation 100 führt zu einer
Abwägung
zwischen Leistung und Umfang der Hardware. Zum Beispiel würde das
Replizieren von Speicher 115 einen schnelleren Zugriff auf
den Speicher dadurch ermöglichen,
daß der
Ausgabevergleich von Speicherbefehlen vermieden wird, würde aber
die Systemkosten durch Verdoppeln des Speichers im System erhöhen.
-
Eine
Ausführungsform
der vorliegenden Erfindung schlägt
einen Mechanismus zum Kontrollieren einer Kontrollschaltung in einer
Softwareimplementierung von RMT vor. Da RMT die Ausgaben von ausgeführten Befehlen
vergleicht (was einen Vergleich Befehl für Befehl erfordert), kann es
auch in Software implementiert werden. Wenn die Softwareimplementierung
von RMT jeden Befehl vergleichen würde, würde dies zu einem beträchtlichen
Verwal tungsaufwand führen.
Statt dessen ermöglicht
RMT jedoch den Vergleich nur der Speicherbefehle und Replizierung
nur der Ladebefehle, was den Software-Verwaltungsaufwand einer RMT-Implementierung beträchtlich
verringert.
-
2 illustriert
ein Verfahren zur Erzeugung eines Kontrollbefehls. Zu Anfang erzeugt
ein Compiler Befehle, wie in den meisten Computern. Aus dem Compiler
erhält
der Computer nun ein Binärprogramm,
das eine Folge von Speicherbefehlen 200 sein kann, aber
nicht darauf beschränkt
ist. Als Nächstes
kann ein binärer Übersetzer
einen Kontrollbefehl vor jedem Speicherbefehl in das Binärprogramm 205 einfügen. Das
binäre Übersetzungsprogramm
kann irgendein binäres Übersetzungsprogramm
sein, das im Fachgebiet bekannt ist. Beim Übersetzen des Binärprogramms
erzeugt das System ein Binärprogramm
sowohl für
den ersten Thread als auch für
den letzten Thread. Das Binärprogramm für den ersten
Thread fügt
den Kontrollbefehl zum Speicherbefehl 210 hinzu. Das Binärprogramm
für den
letzten Thread ersetzt den Speicherbefehl durch den äquivalenten
Kontrollbefehl des letzten Threads 215.
-
3 illustriert
eine Ausführungsform
des Kontrollbefehls. Wenn RMT einen Vergleich erfordert, kann ein
Prozessor sowohl im ersten Thread aus auch im letzten Thread 300 einen
Kontrollbefehl ausgeben. Jeder Kontrollbefehl kann eine Menge von
64 Bit aus jedem Thread tragen. Der Kontrollbefehl kann für jeden
Thread unabhängig 305 die
einzelnen Pipelines durchlaufen, bis er einen Puffer am Ende jeder
Pipeline erreicht. Der Kontrollbefehl wartet auf seinen Counterpart-Kontrollbefehl
im Puffer 310. Diese beiden Kontrollbefehle können sie
dann einen Vergleich der 64-Bit-Mengen vornehmen, die sie mit sich
führen 315.
Bei einer Nichtübereinstimmung
können
sie beide Fehler melden. Bei einer Übereinstimmung können sie
die Prozessoren den Kontrollbefehl 320 ausführen lassen.
Die Pipelines können
von verschiedenen Prozessoren in einem CMP oder vom selben Multithread-Prozessor,
wie in einem SMT-Prozessor, sein.
-
Bei
dieser Implementierung bewahrt der Kontrollbefehl nicht den ersten
Befehl aus der Verarbeitung der Befehle aus der Befehlsschlange
auf. Vielmehr bewahrt er den Retire-Zeiger auf, bis der entsprechende
Kontrollbefehl vom letzten Thread erscheint. Wenn außerdem die
Umgebung keine RMT-Umgebung ist, dann kann der Kontrollbefehl als NOP
(Nulloperation) behandelt werden.
-
4 ist
ein Blockdiagramm eines Beispiels für einen Kontrollbefehl, der
durch zwei Pipelines läuft.
Nehmen wir an, ein Speicherbefehl R1 -> [R2] speichert den Wert in Register R1
auf dem Speicherplatz ab, auf den mit der Adresse in Register R2
gezeigt wird. Dieser Speicherbefehl kann sowohl im ersten als auch
im letzten Thread mit dem Kontrollbefehl repliziert werden. Der
Speicherbefehl im ersten Thread kann sowohl den Kontrollbefehl als
auch den Speicherbefehl umfassen, wie unten gezeigt.
Checkerinst
(Kontrollbefehl) R1
Checkerinst R2
Speichern: R1 -> [R2]. Der erste Thread
kann also den Kontrollbefehl zusammen mit dem Speicherbefehl enthalten,
wenn er durch seine Pipeline 400 läuft.
-
Der
Speicherbefehl im letzten Thread kann nur den Kontrollbefehl umfassen,
wie unten gezeigt.
Checkerinst R1
Checkerinst R2.
-
Der
letzte Thread hat also keinen Speicherbefehl, der durch die Pipeline 405 läuft.
-
Der
Kontrollbefehl Checkerinst R1 vom ersten Thread in Pipeline 400 wartet
auf seinen Counterpart-Kontrollbefehl im Puffer 410. Der
Kontrollbefehl Checkerinst R1 vom letzten Thread in Pipeline 405 wartet
auf seinen Counterpart-Kontrollbefehl im Puffer 415. Der
Kontrollbefehl sucht immer nach seinem Counterpart oder Peer oder
wartet auf ihn. Wenn es einen gespiegelten Thread gibt, sucht der
Kontrollbefehl nach dem Thread in den Puffern 410, 405 oder wartet
auf ihn, um sicherzustellen, daß der
Spiegel-Thread da ist, und vergleicht dann die Kontrollbefehle.
-
Der
Kontrollbefehl Checkerinst R1 vom ersten Thread und Checkerinst
R1 vom letzten Thread können
auf Grund eines Ausführungsbefehls
eine Zweiergruppe bilden und das Registerspezifikationselement und
den Wert von R1 vergleichen, um sicherzustellen, daß die Register
keine Fehler enthalten. Wenn keine Fehler gefunden werden, werden die
Kontrollbefehle ausgeführt 420.
Sobald die Kontrollbefehle ausgeführt werden, wird der Wert von
R1 gespeichert. Der Wert von R1 wird bis zum Ausführungspunkt
mitgenommen und dann gespeichert. So ist das System in der Lage,
alle Speicher gleichzeitig zu kontrollieren, statt Speicher für Speicher,
wie dies vorher getan wurde.
-
5 ist
ein Blockdiagramm eines Systems, das eine Umgebung für Multithread-Prozessoren bereitstellen
kann. Das System, das in 5 illustriert wird, soll einen
Bereich von Systemen repräsentieren.
Alternative Systeme können
mehr, weniger und/oder andere Komponenten umfassen.
-
Ein
System 500 umfaßt
einen Bus 510 oder eine andere Kommunikationsvorrichtung
zum Kommunizieren von Informationen und einen Prozessor(en) 520,
der/die an den Bus 510 zum Verarbeiten von Informationen
angeschlossen ist/sind. System 500 umfaßt ferner einen Direktzugriffsspeicher (RAM)
oder anderen dynamischen Speicher sowie einen statischen Speicher,
wie zum Beispiel eine Festplatte, oder ein anderes Speichergerät 535 (das als
Speicher bezeichnet wird), das mit dem Bus 510 über den
Speichercontroller 530 zum Speichern von Informationen
und Befehlen, die vom Prozessor(en) 520 ausgeführt werden
sollen, verbunden ist. Speicher 535 kann auch zum Speichern
von temporären Variablen
oder anderen Zwischeninformationen während der Ausführung von
Befehlen durch den Prozessor(en) 520 verwendet werden.
Der Speichercontroller 530 kann eine oder mehrere Komponenten
zum Steuern von einer oder mehreren Arten von Speicher und/oder
zugehörigen
Speichergeräten
umfassen. Das System 500 umfaßt auch Nur-Lese-Speicher (ROM)
und/oder ein anderes statisches Speichergerät 540, das an Bus 510 angeschlossen
ist, um statische Informationen und Befehle für den Prozessor(en) 520 zu
speichern.
-
Das
System 500 kann auch über
einen Bus 510 an die Eingabe/Ausgabe (E/A)-Schnittstelle 550 angeschlossen
sein. Die E/A-Schnittstelle 550 stellt eine Schnittstelle
für E/A-Geräte 555 bereit,
die zum Beispiel eine Katodenstrahlröhre (CRT) oder eine Flüssigkristallanzeige
(LCD) umfassen kann, um Informationen für einen Computerbenutzer anzuzeigen,
und ein alphanumerisches Eingabegerät, das alphanumerische und
andere Tasten und/oder ein Cursorsteuergerät, wie zum Beispiel eine Maus,
einen Trackball oder Cursorrichtungstasten umfaßt, umfassen kann. Das System 500 umfaßt ferner
eine Netzschnittstelle 560 für einen Zugang zu einem Netzwerk,
wie zum Beispiel ein lokales Netz, das verdrahtet oder drahtlos
ist.
-
Befehle
werden für
den Speicher 535 aus einem Speichergerät bereitgestellt, wie zum Beispiel einer
Magnetplatte, einer integrierten Nur-Lese-Speicher (ROM)-Schaltung,
CD-ROM, DVD, über
eine Fernverbindung (z.B. über
ein Netz mittels einer Netzschnittstelle 860), die entweder
verdrahtet oder drahtlos ist, usw.
-
Wendet
man sich nun 6 zu, so zeigt das System 600 allgemein
ein System, in dem Prozessoren, Speicher und E/A-Geräte durch
eine Reihe von Punkt-zu-Punkt-Schnittstellen miteinander verbunden
sind. Das System 600 kann auch mehrere Prozessoren umfassen,
von denen aus Gründen
der Übersichtlichkeit
nur zwei, die Prozessoren 605, 610, gezeigt werden.
Die Prozessoren 605, 610 können jeweils einen lokalen
Speichercontrollerhub (MCH) 615, 620 zur Verbindung
mit dem Speicher 625, 630 umfassen. Die Prozessoren 605, 610 können Daten über eine
Punkt-zu-Punkt-Schnittstelle 635 unter Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 640, 645 austauschen.
Die Prozessoren 605, 610 können jeweils Daten mit einem
Chipsatz 650 über
einzelne Punkt-zu-Punkt-Schnittstellen 655, 660 unter
Verwendung von Punkt-zu-Punkt-Schnittstellenschaltungen 665, 670, 675, 680 austauschen.
Der Chipsatz 650 kann auch Daten mit einer Hochleistungs-Grafikschaltung 685 über eine
Hochleistungs-Grafikschnittstelle 690 austauschen.
-
Der
Chipsatz 650 kann Daten mit einem Bus 616 über eine
Busschnittstelle 695 austauschen. Bei jedem der beiden
Systems kann es verschiedene Eingabe/Ausgabe-Geräte 614 auf dem Bus 616 geben,
einschließlich
von, in einigen Ausführungsformen,
Grafikcontrollern niedriger Leistung, Videocontrollern und Netzcontrollern.
Eine weitere Busbrücke 618 kann
in einigen Ausführungsformen
verwendet werden, um einen Datenaustausch zwischen Bus 616 und
Bus 620 zu ermöglichen.
Der Bus 620 kann in einigen Ausführungsformen ein Kleincomputersystemschnittstellen(SCSI)-Bus,
ein IDE-Bus oder ein USB-Bus sein. Zusätzliche E/A-Geräte können mit dem
Bus 620 verbunden sein. Sie können eine Tastatur und Cursorsteuergeräte 622,
einschließlich
einer Maus, einer Audio-E/A 624, Kommunikationsgeräten 626,
umfaßend
Modems und Netzschnittstellen und Datenspeichergeräte 628 umfassen.
Ein Softwarecode 630 kann auf dem Datenspeichergerät 628 gespeichert
werden. In einigen Ausführungsformen kann
das Datenspeichergerät 628 eine
feste Magnetplatte, ein Diskettenlaufwerk, ein optisches Plattenlaufwerk,
ein magnetooptisches Plattenlaufwerk, ein Magnetband oder ein nichtflüchtiger
Speicher, einschließlich
Flash-Speicher,
sein.
-
In
der ganzen Beschreibung wird der Begriff "Befehl" allgemein verwendet, um Befehle, Makro-Befehle,
Befehlsgruppen oder eine beliebige Zahl von anderen Mechanismen
zum Codieren von Prozessoroperationen zu bezeichnen.
-
In
der folgenden Beschreibung werden spezielle Details für Zwecke
der Erklärung,
und nicht zur Einschränkung,
dargelegt, wie zum Beispiel besondere Strukturen, Architekturen,
Schnittstellen, Verfahren usw., um für ein gründliches Verständnis der verschiedenen
Gesichtspunkte der Erfindung zu sorgen. Für Fachleute auf diesem Gebiet,
die Vorteil aus der aktuellen Offenbarung ziehen, ist jedoch erkennbar,
daß die
verschiedenen Erscheinungsformen der Erfindung in anderen Beispielen
ausgeführt
werden können,
die von diesen speziellen Details abweichen. In bestimmten Fällen werden
Beschreibungen der bekannten Vorrichtungen, Schaltungen und Verfahren
weggelassen, um die Beschreibung der vorliegenden Erfindung nicht
durch unnötige
Details unverständlich
zu machen.
-
ZUSAMMENFASSUNG
-
Es
wird ein Verfahren und eine Vorrichtung für einen Kontrollbefehl in einer
redundanten Multithreading (RMT)-Umgebung beschrieben. In einer Ausführungsform
kann ein Prozessor, wenn es das RMT erfordert, einen Kontrollbefehl
sowohl im ersten Thread aus auch im letzten Thread ausgeben. Der Kontrollbefehl
kann für
jeden Thread unabhängig
die einzelnen Pipelines durchlaufen, bis er einen Puffer am Ende
jeder Pipeline erreicht. Dann sucht der Kontrollbefehl, vor dem
Ausführen
des Kontrollbefehls, nach seinem Gegenstück und nimmt einen Vergleich der
Befehle vor. Wenn die Kontrollbefehle übereinstimmen, werden sie ausgeführt und
ausgeschieden. Anderenfalls wird ein Fehler gemeldet.