-
Die
vorliegende Erfindung bezieht sich auf ein Verfahren zum Bestimmen
von Snoop-Ergebnissen von Snoop-Anforderungen, die von verschiedenen
Knoten eins Computersystems in unterschiedlichen Knotenempfangsreihenfolgen
empfangen worden sind, sowie auf ein Computersystem zum Ausführen eines
solchen Verfahrens.
-
Multiprozessor-Computersysteme
enthalten Busse, die eine Kommunikation zwischen den Prozessoren
und zwischen einem Chipsatz und den Prozessoren, die jeweils als
Knoten bezeichnet werden, ermöglichen.
Um eine Konkurrenz auf dem Bus zu vermeiden, bestimmt ein zentraler
Arbiter, welcher in dem Chipsatz sein kann, welcher Knoten an dem
Bus eine Nachricht auf dem Bus übertragen
darf. Eine Nachricht auf dem Bus wird an jeden Knoten auf dem Bus
ausgesendet, und jeder Knoten empfängt die Nachricht im wesentlichen
zur gleichen Zeit. Folglich gibt es keine Verwirrung bezüglich der
Reihenfolge, in welcher die Nachrichten gesendet worden sind.
-
Es
wurden Ringtopologien entwickelt, bei welchen jeder Knoten mit einem
benachbarten Knoten an einem Ring verbunden ist. Bei einem Punkt-Zu-Punkt-Ring
ist jeder Knoten von benachbarten Knoten an dem Ring durch Verbindungen
(Leitungen) getrennt. Ein Vorteil der Ringe besteht darin, daß die Treiber
der Leitungen an dem Ring nur mit der Empfängerschaltung des speziellen
Knotens und nicht mit denen sämtlicher
Knoten an dem System belastet werden. Demzufolge können die
Signale ihren Zustand signifikant schneller ändern.
-
Jeder
Knoten kann Nachrichten zu jedem anderen Knoten senden, aber die
Nachrichten werden sequentiell von Knoten zu Knoten weitergeleitet,
statt sie von einem zentralen Punkt zu sämtlichen Knoten gleichzeitig
zu senden. Demzu folge kann keine der Verbindungen von sämtlichen
Knoten beobachtet oder überwacht
werden. Gewöhnlich
weiß ein
Knoten nicht, daß ein
anderer Knoten eine Nachricht gesendet hat, bis sie empfangen worden
ist. Sofern mehr als ein Knoten gleichzeitig Nachrichten sendet,
werden sie von verschiedenen Knoten in unterschiedlicher Reihenfolge
empfangen. Bei Nachrichten, wie beispielsweise Snoop-Anforderungen,
führt dies
zu unrichtigen Ergebnissen.
-
Aus
der
EP 0 817 077 A2 ist
ein Computersystem mit mehreren Prozessor-Knoten bekannt, wobei
die Knoten einen Speicher, eine Verarbeitungsschaltung und an ihrer
Schnittstelle zu einem verbindenden Bussystem Warteschlangen (Puffer)
zum Aufnehmen von Transaktionen in der Reihenfolge, in der sie bei
dem Knoten eintreffen, aufweist. Wenn Transaktionen nicht in der
richtigen (globalen) Reihenfolge präsentiert werden, so wird bei
der bekannten Anordnung eine Transaktion mit Hilfe eines „ignoriere"-Signals verzögert, d.
h. ihre Verarbeitung zurückgestellt.
-
Aufgabe
der Erfindung ist es, Snoop-Transaktionen, die von einem Knoten
außerhalb
ihrer globalen Reihenfolge empfangen werden, schneller, aber dennoch
richtig zu verarbeiten.
-
Diese
Aufgabe wird erfindungsgemäß durch
ein Verfahren mit den Merkmalen des Anspruchs 1 bzw. ein Computersystem
mit den Merkmalen des Anspruchs 3 gelöst. Vorteilhafte und/oder bevorzugte
Weiterbildungen der Erfindung sind in den Unteransprüchen gekennzeichnet.
-
Die
Erfindung ist vollständiger
zu verstehen aus der unten angegebenen detaillierten Beschreibung und
aus den beigefügten
Zeichnungen von Ausführungsbeispielen
der Erfindung, welche jedoch nicht in einem die Erfindung auf die
speziellen beschriebenen Ausführungsbeispiele
einschränkenden
Sinne verstanden werden sollen, sondern nur der Erläuterung
und dem besseren Verständnis
dienen.
-
1 ist
eine schematische Darstellung einer aktuellen Verteilung von Schlitzen
(Slots) bei einem Ausführungsbeispiel
der Erfindung.
-
2 ist
eine schematische Darstellung einer virtuellen Verteilung von Slots
bei einem Ausführungsbeispiel
der Erfindung.
-
3 ist
eine schematische Darstellung bestimmter Schaltungen in einem der
Knoten der 1 und 2 bei einem
Ausführungsbeispiel
der Erfindung.
-
4 ist
eine schematische Darstellung von Details der Steuerschaltung gemäß 3 bei
einem Ausführungsbeispiel
der Erfindung.
-
5 veranschaulicht
Zuweisungen virtueller Slots zu Zwischen-Knoten-Verbindungen, wie
sie bei einem Ausführungsbeispiel
der Erfindung verwendet werden.
-
Die 6, 7, 8, 9, 10 und 11 veranschaulichen
Skyline-Diagramme und zugehörige
Schaltungen, die Daten halten, die sich auf bestimmte Nachrichten
beziehen.
-
12A, 12B und 12C zeigen bestimmte MESI-Zustände in einem Ordnungspuffer
zu bestimmten Zeitpunkten.
-
13A, 13B und 13C zeigen Tag-Zustände im Speicher für eine Adresse
zu bestimmten Zeitpunkten.
-
14 ist
eine schematische Darstellung einer virtuellen Verteilung von Slots
bei einem Ausführungsbeispiel
der Erfindung einschließlich
einer gleichzeitigen bidirektionalen Übertragung zwischen Knoten.
-
15 ist
eine schematische Darstellung bestimmter Schaltungen in einem der
Knoten der 14 bei einem Ausführungsbeispiel
der Erfindung.
-
16 veranschaulicht
Skline-Diagramme, die einer bidirektionalen Übertragung zugeordnet sind.
-
Detaillierte Beschreibung
der bevorzugten Ausführungsbeispiele
-
1. Überblick
-
Gemäß 1 enthält ein Beispielcomputersystem 10 die
Knoten N0, N1, N2 und N3. Die Knoten kommunizieren miteinander über eine
Punkt-Zu-Punkt-Ringtopologie anstelle eines gemeinsamen Busses.
Signale können
zwischen den Knoten N0 und N1 auf den Leitungen 22, zwischen
den Knoten N1 und N2 auf den Leitungen 24, zwischen den
Knoten N2 und N3 auf den Leitungen 26 und zwischen den
Knoten N3 und N4 auf den Leitungen 28 weitergeleitet werden.
Die Leitungen 22-28 können jeweils zahlreiche parallele
Leiter enthalten. Verschiedene Leiter der Leitungen 22,
verschiedene Leiter der Leitungen 24, verschiedene Leiter
der Leitungen 26 und verschiedene Leiter der Leitungen 28 werden
jeweils für
verschiedene Zwecke verwendet. Beispielsweise können virtuelle Schlitze (Slots),
die unten beschrieben werden, auf nur einigen der Leiter der Leitungen 22-28 übertragen
werden. Snoop-Antworten können
auf andere Leitern übertragen
werden als Snoop-Anforderungen. Bei einigen Ausführungsbeispielen werden einige
Signale, wie beispielsweise Datensignale, auf Leitern gesendet,
die nicht in den Leitungen 22-28 enthalten sind. 1 veranschaulicht
ein unidirektionales Beispiel, bei welchem sich die Signale nur
in Uhrzeigerrichtung ausbreiten. Bei dem Beispiel teilen sich die
Knoten keinen globalen Takt und verwenden eine quellensynchrone Übertragung.
-
3 veranschaulicht
ein Ausführungsbeispiel
des Knotens N2, welcher einen Prozessor 30 und einen Cache 34 (welcher
sich auf dem gleichen Chip wie der Prozessor 30 aufhalten
kann) enthält.
Knoten N2 kann mehr als einen Prozessor und/oder Chipsatz für Speicher
und/oder Peripherieeinrichtungen enthalten. Der Prozessor 30 bildet
eine Schnittstelle mit Hilfe einer Netzwerkschnittstellenschaltung,
welche bei einigen Ausführungsbeispielen
eine Empfangsschaltung 42, eine Steuerschaltung 40 und
eine Sendeschaltung 48 enthält. Auf den Cache 34 kann
sowohl über
einen rückseitigen
Bus zum Prozessor 30 als auch direkt zur Steuerschaltung 40 zugegriffen
werden, wie es veranschaulicht ist oder über nur einen oder den anderen.
Der Hauptspeicher 46 ist optional und kann Teil eines gemeinsamen,
mit anderen Knoten geteilten Hauptspeichers sein. Er kann direkt
durch den Prozessor und/oder die Steuerschaltung 40 zugreifbar
sein. 3 veranschaulicht die Empfangsschaltung 42 und
die Sendeschaltung 48 als von der Steuerschaltung 40 getrennt;
jedoch können
die Signale schnell aus der Empfangs- in die Sendeschaltung bewegt
werden, und bei einigen Ausführungsbeispeilen
kann die gleiche Schaltung für
beide verwendet werden. Knoten N2 kann Komponenten enthalten, die
nicht in 3 veranschaulicht sind. Ein
Knoten kann Teil mehr als eines Rings sein. Die hier beschriebenen
Funktionen der Steuerschaltung 40 können von dem Prozessor 30 ausgeführt werden.
Knoten N0, N1 und N3 können
dem Knoten N2 gleich sein oder von ihm abweichen. Um bloß ein Beispiel
zu nennen; die Leiter 22-28 können jeweils eine Länge in der
Größenordnung
von wenigen Zentimetern oder weniger haben. Als weiteres Beispiel
kann das System 10 ein verteiltes Netzwerk sein, bei dem
die Leiter 22-28 beispielsweise mehrere Meter
lang sind.
-
Man
betrachte das folgende Beispiel, bei welchem ein Prozessor im Knoten
N0 zu bestimmen wünscht,
ob ein Cache oder ein anderer den Prozessoren in den Knoten N1,
N2 oder N3 zugeordneter Speicher eine bestimmte Cache-Zeile auf weist.
Eine Anforderungsnachricht (welche in Form eines Pakets vorliegen
kann) wird auf den Leiter 22 zum Knoten N1 gesendet, um
abzufragen, ob der Knoten N1 die Cache-Zeile aufweist. Bevor der
Knoten N1 bestimmt, ob er die Cache-Zeile hat, wird die Nachricht auf den
Leitern 24 an den Knoten N2 weitergeleitet, um abzufragen,
ob der Knoten N2 die Cache-Zeile hat. Bevor der Knoten N2 bestimmt,
ob er die Cache-Zeile hat, wird die Nachricht auf den Leitern 26 zum
Knoten N3 weitergeleitet, um abzufragen, ob der Knoten N3 die Cache-Zeile
hat. Die Nachricht wird auf den Leitern 28 zurück zum Knoten N0
weitergeleitet. Bei dem Beispiel wird die Nachricht von dem Knoten
N0-N4 gesendet, aber ursprünglich
nur von dem Knoten N0 gesendet.
-
System 10 ist
dezentralisiert in der Weise, daß es keinen zentralen Entscheider
(Arbiter) aufweist. Bei einigen Ausführungsbeispielen bildet das
System 10 ein zentralisiertes bus-basiertes System derart
nach, daß herkömmliche
Protokolle (wie beispielsweise das Cache-Kohärenz-Protokoll) mit geringen
oder ohne Änderungen
verwendet werden können.
Bei vielen, wenn nicht allen bus-basierten Systemen darf zu einem
Zeitpunkt nur ein Teilnehmer Daten auf den Bus geben, und sämtliche
Teilnehmer sehen die Nachrichten auf dem Bus gleichzeitig und in
der gleichen Reihenfolge. Bei einem ring-basierten System empfangen
die Teilnehmer solche Pakete in unterschiedlicher Reihenfolge. Einige
Ausführungsbeispiele
der Erfindung umfassen ein passives Nachrichtenordnen unter Verwendung
der Abstraktion eines virtuellen Schlitzes (Slots), durch welche
die Knoten die Nachrichten übereinstimmend
in einer globalen Reihenfolge ordnen können.
-
2. Virtuelle
Slots
-
Bei
einigen Ausführungsbeispielen
ist ein virtueller Slot die Einheit der Ringbandbreite, die ausreicht, um
das größte Paket
oder eine andere Form der in diesem Teil des Rings übermittelten
Nachricht zu transportieren. Wenn ein solches Paket größer ist
als die Anzahl der Leiter des Rings, die zum Übermitteln der Nachrichten
verfügbar
sind, kann es mehr als einen Taktzyklus für einen Teilnehmer beanspruchen,
ein Paket zu senden. Die Länge
eines virtuellen Slot ist die größte Anzahl
von Zyklen, die in den relevanten Leitern des Rings benutzt werden.
-
Das
Folgende ist ein Beispiel für
das System 10, welches 4 Knoten aufweist. Selbstverständlich kann die
Erfindung mit einer größeren oder
geringeren Anzahl von Knoten und mit abweichenden Details implementiert
werden. Es sei angenommen, daß die
Gesamtverzögerung
zwischen einem Paar von Knoten (Laufzeit + Knotenverzögerung) 9 Taktzyklen
beträgt.
Demzufolge werden 36 Taktzyklen für ein einzelnes Flit (kein
vollständiges
Nachrichtenpaket) benötigt,
damit es den Ring durchläuft.
Somit kann der Ring 36 getrennte Flits halten. Ferner sei
angenommen, daß 5
Taktzyklen von einem Knoten zum Senden eines Nachrichtenpakets benötigt werden.
Entsprechend kann der gesamte Ring bis zu [36/5] = 7 Nachrichten
zu einem beliebigen Zeitpunkt halten. Die 36 Flits, die
den Ring durchlaufen, werden so betrachtet, daß sie 7 virtuelle Slots und
ein unbenutztes Flit bilden. Bei dem Beispiel beträgt die Ringkapazität 7 virtuelle
Slots.
-
Die
7 virtuellen Slots (S0, S1, S2, S3, S4, S5 und S6) können sichtbar
gemacht werden, wie es in den 1 und 2 gezeigt
ist. Der eine unbenutzte Zyklus oder das eine unbenutzte Flit ist
in 1, aber nicht in 2, gezeigt. 1 veranschaulicht
eine tatsächliche
Verteilung von Nachrichten-Slots und 2 veranschaulicht
eine virtuelle Verteilung von Nachrichten-Slots.
-
Die
Knoten kennen möglicherweise
nicht genau die verschiedenen Zeitgaben, die bei der Berechnung der
Anzahl der virtuellen Slots in einem Ring verwendet werden. Jedoch
können
die Knoten die Anzahl c der Takte kennen, die sie benötigen, um
eine Nachricht auszusenden (c = 5 bei dem obigen Beispiel). Unter
Verwendung dieser Information können
die Knoten die Anzahl der virtuellen Slots im Ring berechnen. Beispielsweise
sei die folgende Prozedur betrachtet. Beim Systemstart beginnt ein
bestimmter Knoten (z. B. der Knoten N0) damit, Flits auszusenden,
welche die Knoten dann zyklisch durch den Ring herumreichen. Jeder
dieser Flits wird mit einer sich erhöhenden Sequenznummer gekennzeichnet.
Angenommen, der Knoten hat zu dem Zeitpunkt, wenn der mit 0 gekennzeichnete
Flit zu ihm zurückkehrt,
p Flits ausgesendet. Der Knoten weiß dann, daß der Ring p Flits enthalten
kann und die Anzahl der virtuellen Slots wird dann s = [p/c]. Dies
kann zu den anderen Knoten kommuniziert werden.
-
Bei
einigen Ausführungsbeispielen
markiert der spezielle Knoten die erste (Kopfteil-) Nachricht jedes virtuellen
Slots, sobald die Anzahl der virtuellen Slots bestimmt worden ist.
Ein Knoten beginnt damit, ein Paket nur in eine freie Nachricht,
die der Kopfteil eines virtuellen Slots ist, einzusetzen. Der spezielle
Knoten kann einen Slot-ID auf den ersten Flit jedes virtuellen Slot
einbringen, der ihn identifiziert. Die Knoten können dann nach den Flits mit
diesen Slot-IDs sehen, um zu bestimmen, welche Flits sie für ihre Nachrichten
verwenden können.
Ein Knoten bringt den ersten Flit einer Nachricht nur in einen freien
Flit, der der Beginn eines virtuellen Slot ist.
-
Die
Anzahl der virtuellen Slots in einem Ring kann sich über die
Zeit ändern
(z. B. unter sich ändernden thermischen
Bedingungen). Das System kann so ausgebildet sein, daß es entweder
weniger virtuelle Slots verwendet als verfügbar sind (was eine Erhöhung ermöglicht)
oder so, daß es
sich periodisch selbst umkonfiguriert, um Slots hinzuzufügen oder
aufzugeben.
-
3. Passives Nachrichtenordnen
-
Bei
einigen Ausführungsbeispielen
ist das Nachrichtenordnen (das Ordnen der Nachrichten) passiv insofern,
als es keine Kommunikation über
das hinaus erfordert, was erforderlich ist, um die Nachrichten zu übersenden.
Die Knotenempfangsreihenfolge ist diejenige Reihenfolge, in welcher
die Nachrichten tatsächlich
von den Knoten empfangen werden (welche typischerweise für jeden
Knoten verschieden ist). Die virtuelle Zeit wird inkrementiert,
wenn sich virtuelle Slots um den Ring herum bewegen. Die Reihenfolge
in der virtuellen Zeit ist die Reihenfolge der Nachrichten in Übereinstimmung
mit der virtuellen Zeit. Jede Nachricht, die ursprünglich zum
gleichen virtuellen Zeitpunkt gesendet worden ist, befindet sich
in der gleichen Ebene der Reihenfolge der virtuellen Zeit. Die globale
Reihenfolge ist eine Reihenfolge der Nachrichten, mit der sich jeder
Knoten, der an dem globalen Ordnen teilnimmt, einverstanden erklärt. Es kann
einen oder mehrere Knoten in einem Ring geben, der bzw. die nicht
wissen, welches die globale Reihenfolge ist. Beispielsweise kann
ein Knoten ein Eingabe/Ausgabe-Knoten sein, bei dem die globale
Reihenfolge nicht relevant ist und der die globale Reihenfolge nicht
verfolgt.
-
Nachrichten
werden aus dem Ordnungspuffer 62 in der globalen Reihenfolge
zur Ruhe gebracht (retired). Die Nachrichten in der unteren Position
des Ordnungspuffers 62 sind in der globalen Reihenfolge,
weil keine Nachricht in einer früheren
Position in der globalen Reihenfolge eingefügt werden kann. Zu einem Zeitpunkt
können
sich mehr als eine Nachricht in dem Ordnungspuffer 62 in
einer globalen Reihenfolge befinden. In Abhängigkeit von dem sendenden
Knoten und der Anzahl der virtuellen Slots zwischen dem sendenden
und dem empfangenden Knoten kann eine Nachricht in eine Position
eingefügt
werden, die sich bereits in einer globalen Reihenfolge befindet
oder in eine Position, die zu einer globalen Reihenfolge führt, wenn
zusätzliche Nachrichten
empfangen werden. Wenn sich zwei oder mehrere Nachrichten auf der
gleichen Ebene der virtuellen Zeitreihenfolge befinden, wird eine
Schiedsentscheidungstechnik (Tie-Break-Technik) verwendet, um zu bestimmen,
welche in eine frühere
Position in dem Ordnungspuffer 62 eingefügt wird.
Die globale Reihenfolge kann Busreihenfolge genannt werden, da sie
eine Reihenfolge zur Verfügung
stellt, welche ähnlich,
aber nicht notwendigerweise exakt gleich, derjenigen ist, welche
ein gemeinsamer Bus zur Verfügung
stellen würde.
Beispielsweise sei angenommen, daß eine Nachricht 1 vom Knoten
1 gesendet wird, bevor eine Nachricht 2 vom Knoten 2 gesendet wird.
Nachricht 1 kann vor oder nach Nachricht 2 in der globalen Reihenfolge
angeordnet werden, was von den Details des Rings und der virtuellen
Slots abhängig
ist.
-
Die
globale Reihenfolge weist die folgenden drei Eigenschaften auf (die
als Eigenschaft (1), (2) und (3) bezeichnet werden):
- (1) Sofern Knoten A die Nachricht ml als der Nachricht m2 in
der globalen Reihenfolge vorhergehend sieht, so sehen dann alle
Knoten, die an der globalen Ordnung teilnehmen, ml vor m2 in der
globalen Reihenfolge.
- (2) Wenn ein Knoten zuerst die Nachricht ml sendet und dann
die Nachricht m2 sendet, sehen sämtliche an
der globalen Ordnung teilnehmenden Knoten ml vor m2 in der globalen
Reihenfolge.
- (3) Wenn ein Knoten die Nachricht ml in der Knotenempfangsreihenfolge
empfängt
und später
eine Nachricht m2 sendet, dann sehen sämtliche an der globalen Ordnung
teilnehmenden Knoten ml vor m2 in der globalen Reihenfolge.
-
Daß die globale
Reihenfolge nicht notwendigerweise der genauen zeitlichen Reihenfolge
folgt, in welcher die Nachrichten gesendet werden, ist grundsätzlich nicht
wichtig, solange die Eigenschaften (1), (2) und (3) zur Verfügung gestellt
werden.
-
Zusätzlich zu
den Eigenschaften (1)-(3) können
die folgenden zwei zusätzlichen
Eigenschaften (die als Eigenschaft (4) und (5) bezeichnet werden)
bei bestimmten Anwendungen des passiven Nachrichtenordnens nützlich sein.
- (4) Wenn ein Knoten eine Nachricht m in der
Knotenempfangsreihenfolge empfängt,
kennt er die globale Ordnung von m relativ zu den Nachrichten, die
er bereits empfangen hat.
- (5) Der Empfang einer Nachricht an einem Knoten ändert nicht
die relative globale Reihenfolge der früher empfangenen Nachrichten.
-
Es
sei betont, daß das
passive Nachrichtenordnen verwendet werden kann beim Ordnen von
Nachrichten für
eine Viel zahl von Zwecken und Systemen. Beispielsweise kann das
passive Nachrichtenordnen verwendet werden, um Snoop-Anforderungen
auf einem Ring zu ordnen. Als weiteres Beispiel kann das passive Nachrichtenordnen
darüber
hinaus von einem verteilten Netzwerk von Computern verwendet werden,
um eine konsistente Reihenfolge der Nachrichten in einer verteilten
Datenbank zur Verfügung
zu stellen.
-
Ein
Element eines bestimmten Protokolls wie beispielsweise des Cache-Kohärenz-Protokolls
besteht darin, daß sämtliche
Knoten sämtliche
Transaktionen in der gleichen Reihenfolge sehen. Mit dem durch das passive
Anforderungsordnen zur Verfügung
gestellten globalen Ordnen sehen sämtliche Knoten sämtliche Transaktionen
in der gleichen Reihenfolge.
-
a. Abstraktion des virtuellen
Slots
-
Die
Virtueller-Slot-Abstraktion kann bei der Bestimmung des "virtuellen Zeitpunkts" einer Nachrichtenübertragung
verwendet werden. Nachrichten können
in Übereinstimmung
mit diesem virtuellen Zeitpunkt in einem Ordnungspuffer geordnet
werden.
-
i. Wenn Slots gleichmäßig verteilt
sind
-
Angenommen,
es gibt s virtuelle Slots in dem Ring und jeder Slot weist c Flits
auf. Wenn die Anzahl der Knoten (n) s gleichmäßig aufteilt, kann es s/n Slots
oder (sc/n Flits) auf jeder Verbindung (link) geben, wobei s/n und
sc/n ganze Zahlen sind. Dies bedeutet, daß sc/n Zyklen benötigt werden,
damit eine Flit von einem Knoten zu einem anderen Knoten läuft. Knoten
können
diese Information benutzen, um zu bestimmen, wann eine Nachricht
gesendet wurde. Wenn ein Knoten das erste Flit einer Nachricht von
einem stromaufwärts
liegenden Nachbarn empfängt,
weiß er,
daß die
Nachricht u sc/n Zyklen zuvor gesendet wurde, wobei u die Anzahl
der Knoten stromauf ist. Wenn alles perfekt synchronisiert ist,
können
sich die Knoten präzise
auf die Sendezeit einer Nachricht einigen. Da jedoch das System
nicht perfekt synchronisiert ist, können die Knoten ihre Berechnung
nicht auf Taktzyklen sondern auf virtuellen Slots, die bei dem Ring
ein treffen, begründen.
Da die Knoten sich auf die Struktur der Abstraktion der virtuellen
Slots einigten, sind die Knoten virtuell synchronisiert.
-
Knoten
brauchen nicht die Flits (oder "virtuellen
Zyklen") zu zählen. Es
ist ausreichend, die virtuellen Slots zu zählen, wie sie bei dem Ring
vorbeikommen (der erste Flit eines virtuellen Slot kann identifizierbar sein).
Wenn eine Nachricht bei einem Knoten eintrifft, kann der Knoten
bestimmen, daß sie
u = s/n Slots zuvor gesendet wurde. Ein Knoten kann sich über seine
eigene Nachricht zu seiner Sendezeit bewußt werden, wobei er weiß, daß die Nachricht
0 Slots zuvor gesendet wurde.
-
Der
Knoten kann das Alter "einer
Nachricht" in Einheiten
der virtuellen Slots oder der virtuellen Zeit verfolgen. Wenn eine
Nachricht von einem Knoten u Verbindungen (links) stromaufwärts empfangen
worden ist, weiß der
Empfänger,
daß sie
us/n Slots alt ist und kann sie in geeigneter Weise in einem Ordnungspuffer kennzeichnen
(tag). Wenn jeweils ein virtueller Slot empfangen wird, werden die
Nachrichten jeweils um ein Slot gealtert. Es ist nicht erforderlich,
daß das
Alter explizit als eine Zahl irgendwo in den Knoten gespeichert wird.
Stattdessen können
die Knoten eine Schaltung enthalten, die um einen Zustand voranrückt, wenn
sich das Alter erhöht.
-
Da
kein Knoten mehr als n-1 Verbindungen (links) stromauf angeordnet
ist, ist bei einigen Ausführungsbeispielen
u < n, so daß us/n < s für sämtliche
möglichen
u ist. Die älteste
Nachricht, die ein Knoten empfangen könnte, würde ein Alter von s – 1 Slots
haben. Somit weiß ein
Knoten, sobald eine Nachricht ein Alter von s-1 aufweist, daß irgendwelche
nachfolgend eintreffenden Nachrichten zu einer späteren virtuellen
Zeit gesendet worden sind. Demzufolge kann ein Ordnen einer Nachricht
in dem Ordnungspuffer abgeschlossen werden, wenn ihr Alter s – 1 ist.
-
ii. Wenn Slots nicht gleichmäßig aufgeteilt
sind
-
Man
betrachte beispielsweise einen Ring, der 4 Knoten aufweist, die
7 virtuelle Slots halten (n = 4 und s = 7), wie es in 2 der
Fall ist. In diesem Fall ist es ausreichend, die virtuellen Slots
unter den Verbindungen (links) in dem Ring aufzuteilen. Knoten können beispielsweise
bei der Initialisierung entscheiden, welche Verbindungen wieviele
virtuelle Slots halten. Im Falle der 2 kann es
entschieden worden sein, daß
- • die
Verbindung vom Knoten 0 zum Knoten 1 zwei virtuelle Slots hält
- • die
Verbindung vom Knoten 1 zum Knoten 2 zwei virtuelle Slots hält
- • die
Verbindung vom Knoten 2 zum Knoten 3 zwei virtuelle Slots hält
- • die
Verbindung vom Knoten 3 zum Knoten 0 einen virtuellen Slot hält.
-
5 veranschaulicht
die Zuweisung virtueller Slots in Zwischen-Knoten-Verbindungen in Übereinstimmung
mit dieser Bestimmung. Wenn die Slots nicht gleichmäßig verteilt
sind, kann eine Slots-Funktion gemäß in Tabelle 1 definiert werden:
Tabelle
1
-
Die
Slots-Funktion kann verwendet werden, um das "Alter" einer Nachricht zu bestimmen, die empfangen
worden ist. Insbesondere kann man eine Funktions "verzögerung" derart ableiten,
daß eine
Verzögerung (i,
j) das "Alter" einer Nachricht
(auf der Grundlage ihrer Slot-Verzögerung) ist, die durch den
Knoten i vom Knoten j empfangen worden ist. Sie kann berechnet werden
als Verzögerung
(i, j) = Slots (j) + Slots (nächstes
(j)) + ... + Slots (vorgehendes(i)), wobei vorhergehendes(i) = n
+ i – 1
mod n ist, sofern i ≠ j
ist, und Verzögerung (i,
i) = 0 ist. Für
5 stellt
Tabelle 2 eine Verzögerungsfunktion
zur Verfügung
(Berechnung der Nachrichtenverzögerungen
(in Einheiten der Slots)):
Tabelle
2
-
Beispielsweise
zeigt Tabelle 2 an, daß die
Nachricht, die Knoten 2 vom Knoten 0 empfängt, 4 Slots zuvor gesendet
worden ist.
-
Wenn
ein bestimmter Knoten nicht an dem globalen Ordnen teilnimmt, arbeitet
die Abstraktion der virtuellen Slots und zugeordneten Verzögerungsfunktionen
dennoch, könnte
aber entsprechend modifiziert werden. Wenn beispielsweise Knoten
N1 nicht teilnimmt, können
noch 4 virtuelle Slots benötigt
werden, damit eine Nachricht sich vom Knoten N0 zu N2 ausbreitet,
wie es in Tabelle 2 gezeigt ist.
-
Bei
einigen Ausführungsbeispielen
sind dann, wenn eine Nachricht m Slots alt ist (wobei m die Maximalanzahl
der Slots in der Verzögerungsfunktion
ist (in dem Beispiel ist m = 6)), die Nachrichten irgendwelcher zu
derselben virtuellen Zeit gesendeter Anforderungen empfangen worden.
An diesem Punkt kann das Ordnen abgeschlossen werden.
-
4 veranschaulicht
gewisse Schaltungen, die bei einem Ausführungsbeispiel der Steuerschaltung 40 des
Knotens N2 gemäß 3 enthalten
sind. Gemäß den 3 und 4 stellt
eine Positionierschaltung 60 eine von der Empfangs schaltung 42 auf
den Leitungen 70 oder aus dem Prozessor 30 auf
den Leitungen 76 empfangene Nachricht einer geeigneten
Position im Ordnungspuffer 62 zur Verfügung. Die Verarbeitungsschaltung 66 kann
verschiedene Funktionen ausführen,
wie beispielsweise das Bereitstellen von Nachrichten an den Prozessor 39.
Bei einigen Ausführungsbeispielen
initiiert die Verarbeitungsschaltung 66 eine Snoop-Operation
bei dem Speicher, wie beispielsweise bei dem Cache 34.
Der Ordnungspuffer 62 enthält eine Position für jeden
Slot auf dem Ring. Die Positionen sind in der globalen Reihenfolge
angeordnet, wobei die höchste
die späteste
in der globalen Reihenfolge ist, und die unterste die früheste in
der globalen Reihenfolge. In Abhängigkeit
von den virtuellen Zeiten, zu welchen die Nachrichten ursprünglich gesendet
worden sind, kann sich mehr als eine Position bei dem gleichen virtuellen
Zeitpunkt aufhalten. Die Positionierschaltung 60 bringt
die Nachricht an die richtige Anfangsposition auf der Grundlage
ihrer virtuellen Zeit. Wenn dann neue Nachrichten empfangen werden,
altern die zuvor positionierten Nachrichten und bewegen sich zum
Boden des Ordnungspuffers 62. (Bei einigen Ausführungsbeispielen
können
die Nachrichten mittels Änderungen
von Bits anstelle der physischen Änderung von Positionen zum
Abwärtsbewegen
in dem Ordnungspuffer 62 altern.) Bei einigen Ausführungsbeispielen
ist es wünschenswert,
daß bestimmte
Nachrichten miteinander verknüpft
werden. Beispielsweise können
bestimmte Snoop-Anforderungen zu der gleichen Adresse miteinander über Zeiger
verknüpft
werden. Bei einigen Ausführungsbeispielen
stellt die Positionierschaltung 60 diese Zeiger zur Verfügung. Darüber hinaus
kann eine optionale Einstellschaltung 64 verwendet werden,
um Daten zwischen Positionen zu bewegen und/oder zu ändern. Nachrichten,
welche in Bezug auf die von der Positionierschaltung 60 empfangene
Nachricht an der Bodenposition eingestellt werden können, sind
in der globalen Reihenfolge, mit welcher jeder Knoten einverstanden
ist. Die Nachrichten werden der Sendeschaltung 48 über die
Leitungen 72 oder dem Prozessor 30 über die
Leitungen 76 oder einer anderen Schaltung zur Verfügung gestellt. Bei
einigen Ausführungsbeispielen
kann nur die Bodenposition des Ordnungspuffers 62 die sich
zur Ruhe setzende Nachricht (retiring message) halten. Bei anderen
Ausführungsbeispielen
können
irgendwelche Positionen die Retiring-Nachrichten halten. Die Verbindung
der Leitungen 72 mit dem Ordnungspuffer 62 stellt
einen Ausgang des Ordnungspuffers 62 für irgendeine Retiring-Nachricht
haltende Position dar. Um eine Verwirrung zu vermeiden und weil
Details implementierungsspezifisch sind, sind nicht sämtliche
Steuerschaltungen (z. B. Schnittstellenschaltungen) und zugehörige Leitungen
für die 3 und 4 veranschaulicht.
Man beachte, daß die
Nachrichten in einer anderen Form in dem Ordnungspuffer 62 vorliegen
können,
als sie von der Verarbeitungsschaltung 66 empfangen worden
sind.
-
b. Visualisierung durch "Skyline-Diagramme"
-
Die
Betriebsweise der Ordnungspuffer, wie beispielsweise des Ordnungspuffers 62 für den Knoten
2, kann mit Hilfe von "Skyline-Diagrammen" sichtbar gemacht
werden. 6 veranschaulicht beispielhafte
Skyline-Diagramme 102, 104, 106 und 108 für die Knoten
0, 1, 2 bzw. 3. Demzufolge veranschaulicht das Skyline-Diagramm 106 die
Betriebsweise des Ordnungspuffers 62 in Knoten 2. Obwohl
die Skyline-Diagramme mehr als s Positionen zeigen (wobei s die
Anzahl der Slots ist), können
zu einem vorgegebenen Zeitpunkt nur s Positionen belegt werden.
Die Positionierschaltung (z. B. in 4) enthält Demultiplexer
(DEMUX), die ähnlich
den in 6 veranschaulichten sind, welche eine Nachricht
empfangen und eine Knoten-ID-Nummer aus einem Slot oder dem Prozessor
innerhalb des Knotens senden. Die Spalten der Skyline-Diagramme entsprechen
den Nachrichten aus den verschiedenen Knoten. Der Demultiplexer
weist eine Nachricht derjenigen Spalte zu, die dem sendenden Knoten-ID
entspricht. D. h., Spalte 0 hält
die von dem Knoten N0 gesendeten Nachrichten; Spalte 1 hält die von
dem Knoten N1 gesendeten Nachrichten; usw. Die Höhe der Spalten differieren
und sind gleich der Anzahl der virtuellen Slots s abzüglich der
oben definierten Verzögerungsfunktion. Beispielsweise
ist die Höhe
der Spalte 3 in dem Diagramm für
Knoten 1 s-Verzögerung
(1,3) = 7 – 3
= 4. Zur Vereinfachung der Beschreibung werden im Falle eines Rings
mit 7 virtuellen Slots die Abschnitte der Spalten als Ebene 0, Ebene
1, Ebene 2, Ebene 3, Ebene 4, Ebene 5 und Ebene 6 bezeichnet, obwohl
nicht jede Spalte jede Ebene aufweist. Zu derselben virtuellen Zeit
gesendete Nachrichten werden auf der gleichen Ebene positioniert,
obwohl sie von den verschiedenen Knoten zu verschiedenen virtuellen
Zeiten empfangen werden.
-
Wenn
eine Nachricht empfangen wird, wird sie an die Spitze derjenigen
Spalte angeordnet, die dem Knoten entspricht, der die Nachricht
gesendet hat. Mit jedem nachfolgend empfangenen Slot altern sämtliche Nachrichten
und fallen eine Ebene nach unten. Wenn eine Nachricht den Boden
erreicht, ist sie s-1 Slots alt (bei diesem Beispiel 6 Slots alt),
und das globale Ordnen kann dadurch abgeschlossen werden, daß bestimmt wird,
welche Nachrichten, die das gleiche Slot-Alter aufweisen, die Priorität erhalten.
Man beachte, daß es nicht
erforderlich ist, daß die
Knoten die virtuelle Zeit verfolgen, wie beispielsweise mit Hilfe
eines Zählers.
Statt dessen kann die Schaltung lediglich Nachrichten in der richtigen
Position in dem Ordnungspuffer plazieren und die anderen Nachrichten
altern, indem sie um eine Ebene bewegt werden. Darüber hinaus
braucht der Ordnungspuffer 62 nicht sämtliche Komponenten des Skyline-Puffers
zu enthalten. Beispielsweise haben die Skyline-Puffer mehr Positionen
als es Slots gibt. Der Ordnungspuffer 62 weist eine Position
für jeden
Slot auf. Jedoch können
Ausführungsbeispiele
der Erfindung mit Ordnungspuffern implementiert werden, die von
dem Ordnungspuffer 62 abweichen.
-
i. Beispiel: vier zur
gleichen virtuellen Zeit gesendete Slots
-
6, 7, 8 und 9 veranschaulichen
ein Beispiel für
den Ring gemäß 2.
Jeder Knoten ruft die Sendung einer Nachricht in einem virtuellen
Slot zu der gleichen virtuellen Zeit (VT0) hervor. Die virtuellen
Slots bewegen sich um den Ring herum, wobei sie vier Nachrichten
der Reihe nach liefern. Die Knotenempfangsreihenfolge ist für jeden
Knoten verschieden. Dennoch bestimmen sämtliche vier Knoten korrekt, daß die vier
Nachrichten zur gleichen virtuellen Zeit gesendet wurden.
-
Zum
virtuellen Zeitpunkt VT0 sendet der Knoten N0 ursprünglich eine
Nachricht im Slot S0, der Knoten N1 sendet ursprünglich eine Nachricht im S2,
der Knoten N2 sendet ursprünglich
eine Nachricht in dem Slot S4 und der Knoten N3 sendet ursprünglich eine
Nachricht in dem Slot S6. Jedoch ist diese Tatsache nicht sofort
jedem Knoten bekannt. Statt dessen werden die verschiedenen Slots
zu den Ordnungspuffern der verschiedenen Knoten zu verschiedenen
Zeiten geliefert. Zum virtuellen Zeitpunkt VT0 werden die Slots
S0, S2, S4 und S6 den Ordnungspuffern der Knoten N0, N1, N2 bzw.
N3 zur Verfügung
gestellt. Gemäß 6 werden die
Nachrichten der Slots S0, S2, S4 und S6 auf der Ebene 0 der Spalten
0, 1, 2 bzw. 3 der Skyline-Diagramme 102, 104, 106 bzw. 108 empfangen.
Man beachte, daß in
den 6 bis 10 die Symbole "S0", "S2", "S4" und "S6" die in den Slots
S0, S2, S4 und S6 mitgeführten
Nachrichten repräsentieren.
Selbstverständlich
sind die Slots selbst nicht in dem Ordnungspuffer.
-
Zum
virtuellen Zeitpunkt VT1 werden die Slots jeweils um eine Ebene
auf dem Ring vorgerückt.
D. h., Slot 0 wird dahin vorgerückt,
wo Slot 1 zum Zeitpunkt VT0 gewesen ist; Slot 1 schreitet dahin
voran, wo Slot 2 zum Zeitpunkt VT0 war; usw., wobei Slot 6 dorthin
vorgerückt
wird, wo Slot 0 zum Zeitpunkt VT0 war. Wenn die Slots in die Knoten
eintreten, werden die Nachrichten in den Skyline-Diagrammen gealtert
und bewegen sich zur nächsten
Ebene. Dementsprechend werden, wie es in 7 veranschaulicht
ist, die Nachrichten der Slots S0, S2, S4 und S6 zur Ebene 1 der
Spalten 0, 1, 2 bzw. 3 der Skyline-Diagramme vorgerückt. Darüber hinaus
wird zum virtuellen Zeitpunkt VT1 die Nachricht des Slots S6 aus
dem Knoten 3 von dem Ordnungspuffer des Knotens N0 empfangen. Die
Nachricht des Slots S6 wird in Spalte 3, Ebene 1 des Skyline-Diagramms 102 plaziert.
Da Spalte 3 kürzer
ist als Spalte 0, sind die Nachrichten der Shots S0 und S6 auf derselben
Ebene in dem Skyline-Diagramm 102 zum virtuellen Zeitpunkt
VT1. Dies macht Sinn, da sie ursprünglich zum gleichen virtuellen
Zeitpunkt gesendet worden sind.
-
Mit
jedem Vorrücken
der Slots um den Ring herum empfangen verschiedene Knoten Slots,
die von verschiedenen Knoten herrühren, aber zum gleichen virtuellen
Zeitpunkt gesendet wurden. Die zuvor empfangenen Nachrichten werden
die Skyline-Diagramme hinab vorgerückt, wenn sich die Slots um
den Ring herumbewegen. Im folgenden wird zusammengefaßt, welche
Knoten welche Slots aus welchen Knoten empfangen und wo die Slots
plaziert werden.
-
Zum
virtuellen Zeitpunkt VT0:
- N0 empfängt S0 aus N0 (Nachricht wird
an der Spitze der Spalte 0 plaziert)
- N1 empfängt
S2 aus N1 (Nachricht wird an der Spitze der Spalte 1 plaziert)
- N2 empfängt
S4 aus N2 (Nachricht wird an der Spitze der Spalte 2 plaziert)
- N3 empfängt
S6 aus N3 (Nachricht wird an der Spitze der Spalte 3 plaziert)
-
Zum
virtuellen Zeitpunkt VT1:
- N0 empfängt S6 aus N3 (Nachricht wird
an der Spitze der Spalte 3 plaziert)
-
Zum
virtuellen Zeitpunkt VT2:
- N1 empfängt S0 aus N0 (Nachricht wird
an der Spitze der Spalte 0 plaziert)
- N2 empfängt
S2 aus N1 (Nachricht wird an der Spitze der Spalte 1 plaziert)
- N3 empfängt
S4 aus N2 (Nachricht wird an der Spitze der Spalte 2 plaziert)
-
Zum
virtuellen Zeitpunkt VT3:
- N0 empfängt S4 aus N2 (Nachricht wird
an der Spitze der Spalte 2 plaziert)
- N1 empfängt
S6 aus N3 (Nachricht wird an der Spitze der Spalte 3 plaziert)
-
Zum
virtuellen Zeitpunkt VT4:
- N2 empfängt S0 aus N0 (Nachricht wird
an der Spitze der Spalte 0 plaziert)
- N3 empfängt
S2 aus N1 (Nachricht wird an der Spitze der Spalte 1 plaziert)
-
Zum
virtuellen Zeitpunkt VT5:
- N0 empfängt S2 aus N1 (Nachricht wird
an der Spitze der Spalte 1 plaziert)
- N1 empfängt
S4 aus N2 (Nachricht wird an der Spitze der Spalte 2 plaziert)
- N2 empfängt
S6 aus N3 (Nachricht wird an der Spitze der Spalte 3 plaziert)
-
Zum
virtuellen Zeitpunkt VT6:
- N3 empfängt S0 aus N0 (Nachricht wird
an der Spitze der Spalte 0 plaziert)
-
8 veranschaulicht
die Nachrichten in den Skyline-Diagrammen 102 bis 108 zum
virtuellen Zeitpunkt VT4.
-
9 veranschaulicht
die Nachrichten in den Skyline-Diagrammen 102 bis 108 zum
virtuellen Zeitpunkt VT6. Jedes Skyline-Diagramm weist dieselbe
Kombination von vier Nachrichten auf, was Sinn macht, da die Nachrichten
zu derselben virtuellen Zeitpunkten gesendet wurden. Jeder Knoten
verwendet das gleiche Schema zum Bestimmen der Priorität zwischen
den Nachrichten zu derselben virtuellen Zeit. Beispielsweise könnte eine
einem geringeren Knoten-ID zugeordnete Nachricht eine Priorität gegenüber Nachrichten,
die höheren
Knoten-IDs zugeordnet sind, einnehmen.
-
Bis
zum virtuellen Zeitpunkt VT6 wurden noch nicht sämtliche Nachrichten empfangen
und ist die globale Reihenfolge der Nachrichten nicht bekannt. Nimmt
man beispielsweise an, daß die
Nachricht in der Spalte 0 die oberste Priorität hat, ist es gewöhnlich bis
VT6 nicht bekannt, ob eine Nachricht in Spalte 0 des Knotens 3 empfangen
werden wird, und wenn dies der Fall ist, welchen Inhalts die Nachricht
sein wird. Bestimmte Techniken können
verwendet werden, um die Operation der Knoten zu beschleunigen.
Wenn beispielsweise die Spalte 0 die höchste Priorität aufweist
und die Spalte 3 die geringste Priorität, so ist es möglicherweise
im Falle des Knotens 2 zum Zeitpunkt VT4 (auf Ebene 4) bekannt,
daß die
Nachrichten vor S0, S2 und S4 die ersten drei Prioritäten sein
würden.
Angenommen, die Antwort auf die Nachrichten S0, S2 und S4 hängt nicht
von dem Inhalt der Nachricht von S6 ab, so kann der Knoten N3 in
der Lage sein, an den Nachrichten von S0, S2 und S4 vor dem Zeitpunkt
VT6 zu agieren. Die Nachricht mit der höchsten Priorität kann für jeden
Knoten zum Zeitpunkt VT5 bekannt sein. Tatsächlich sind sämtliche
Nachrichten außer
der Nachricht der Spalte 0 des Knotens 3 bis dahin bekannt. In diesem
Fall sind die Knoten N0, N1, N2 und N3 ggf. in der Lage, vor dem
Zeitpunkt VT6 an den Nachrichten der höchsten Priorität zu agieren.
Jedoch können
die Knoten so implementiert sein, daß keine Nachricht bearbeitet
wird, bis sämtliche
Nachrichten in der Ebene 6 der Skyline-Diagramme empfangen worden sind. Einige
Skyline-Diagramme können
mehr als eine Spalte mit nur einer Position aufweisen, wobei in
diesem Fall es weniger Stellen geben kann, bei denen die globale
Reihenfolge bekannt ist, bevor jede Nachricht sich an der Ebene
6 befindet.
-
ii. Beispiel: zu verschiedenen
virtuellen Zeitpunkten gesendete Slots
-
Zur
Vereinfachung veranschaulichen die Beispiele gemäß den 6 bis 9 nur
das Voranschreiten von Nachrichten, die ursprünglich zu dem gleichen virtuellen
Zeitpunkt gesendet worden sind. Ursprünglich zu verschiedenen virtuellen
Zeitpunkten gesendete Nachrichten in Slots werden auf verschiedenen
Ebenen positioniert. Beispielsweise sei angenommen, daß zum virtuellen
Zeitpunkt VT0 die Knoten N0 und N1 ursprünglich Nachrichten in den Slots
S0 bzw. S2 gesendet haben, und daß zum virtuellen Zeitpunkt
VT1 die Knoten N0 und N1 Nachrichten in Slot S6 bzw. in Slot S1
ursprünglich
gesendet haben, aber keine weiteren Nachrichten senden. Zu den virtuellen
Zeitpunkten VT0 und VT1 empfangen die Ordnungspuffer für die Knoten
N0 und N1 die Nachrichten, die diese Knoten ursprünglich senden.
Die Nachrichten der Slots S0, S1, S2 und S6 altern in den Skyline-Diagrammen 102 und 104 mit
jedem Vorrücken
der virtuellen Zeit. Zum virtuellen Zeitpunkt VT2 empfängt die
Spalte 0 des Skyline-Diagramms 104 die Nachricht des Slots
S0, und Spalte 1 des Skyline-Diagramms 106 empfängt die
Nachricht des Slots S2. 10 veranschaulicht
die Skyline-Diagramme zum Zeitpunkt VT2. Zur Vereinfachung sind
keinerlei weitere Nachrichten gezeigt.
-
4. Außer-der-Reihe-Snooping
-
Snoop-Operationen
bei Speichern, wie beispielsweise Caches, sind gut bekannt. Wenn
jedoch Knoten Snoop-Anforderungsnachrichten in unterschiedlicher
Reihenfolge empfangen, sollte irgendein Mechanismus verwendet werden,
um zu sichern, daß jeder
Knoten die Anforderungen in der gleichen Reihenfolge sieht, so daß die Cache-Kohärenz aufrechterhalten
bleibt. Ein Außer-der-Reihe-Snooping
kann auf verschiedenen Netzwerken möglich sein, die die Eigenschaften
(1) bis (3) zur Verfügung
stellen. Das Netzwerk braucht nicht in Form eines Rings vorzuliegen.
Wenn das Netzwerk in Form eines Rings vorliegt, können die
oben beschriebenen passiven Nachrichten-Ordnungstechniken beim Ordnen
von Anforderungen nützlich
sein. Jedoch selbst dann, wenn ein Ring verwendet wird, können von
dem oben beschriebenen passiven Nachrichten-Ordnungstechniken abweichende
Techniken verwendet werden, um die Anforderungen zu ordnen.
-
Das
Außer-der-Reihe-Snooping-Schema
ist für
einen darunterliegenden Kommunikationsmechanismus entwickelt, bei
dem Nachrichten schnell geliefert werden, aber bei welchem die Kenntnis über ihre
abschließende
Reihenfolge (relativ zueinander) verzögert sein kann. Einige Ausführungsbeispiele
der Erfindung ermöglichen
ein Initiieren des Snoopings bei Empfang der Snoop-Anforderung,
während
sie noch die endgültige
Cache-Kohärenz
aufrechterhalten. Die Erfindung gestattet eine Initiierung des Snooping
vor dem Abschluß des
Ordnens der Anforderungen.
-
Die
detaillierte Technik für
das Außer-der-Reihe-Snooping, die unten
beschrieben wird, umfaßt
die obengenannten Eigenschaften 1 bis 5. Jedoch sind die Eigenschaften
4 und 5 nicht erforderlich.
-
Es
ist zulässig,
Snoop-Operationen in der Knotenempfangsreihenfolge auszuführen, solange
die Ergebnisse (sowohl die Snoop-Ergebnisse als auch die Rückschreiboperationen)
in einer globalen Reihenfolge verteilt werden. Änderungen an den Tags dürfen solche
sein, die auftreten würden,
wenn die Snoop-Operationen in der globalen Reihenfolge ausgeführt würden. Sämtliche
Knoten haben die gleiche Sicht auf den Speicher (Cache-Kohärenz), und
bei einigen Implementierungen werden Verfahren der Zwischen-Prozeß-Synchronisation
(Verriegelungen, Schreibordnen, Interrupt-Ordnen) bewahrt. Bei einigen
Implementierungen umfassen die Snoop-Antworten clean (sauber) (Zeile
nicht gefunden oder ungültiger
(invalid) (I) Zustand), hit (Treffer) (exklusiver (E) oder geteilter
(S) Zustand) und hitm (modifizierter (M) Zustand), aber die Erfindung
ist nicht darauf beschränkt.
-
Der
Ordnungspuffer in jedem Knoten, wie beispielsweise der Ordnungspuffer 62,
empfängt
Snoop-Anforderungen für
verschiedene Speicherzeilenadressen. Der hier interessierende Fall
liegt vor, wenn es zwei oder mehr ausstehende Anforderungen für die gleiche
Adresse gibt.
-
Wenn
ein Knoten eine Anforderung empfängt
(in der Knotenempfangsreihenfolge), ist er bei einigen Ausführungsbeispielen
in der Lage, diese Anforderung in bezug auf irgendwelche Anforderungen,
die bereits eingetroffen sind oder von diesem Knoten ausgegeben
worden sind, zu ordnen. Später
eintreffende Anforderungen dürfen
nicht die relative globale Reihenfolge der vorhandenen Anforderungen
beeinflussen.
-
Tabelle
3 stellt bestimmte beispielhafte Cache-Kohärenz-Transaktionen und Abkürzungen
zur Verfügung,
die bei Snoop-Anforderungen
in Verbindung mit der vorliegenden Erfindung vorhanden sein können. Selbstverständlich können auch
andere Transaktionen verwendet werden, und die Erfindung ist nicht
auf die Details gemäß Tabelle
3 eingeschränkt.
-
-
a. Überblick über den Snoop-Prozeß
-
Bei
einigen Ausführungsbeispielen
wird, sobald eine Anforderung von einem Knoten empfangen worden
ist, eine Snoop-Operation für
diesen ausgegeben. Eine Lese-Modifiziere-Schreib-Operation wird
an den Cache-Tags ausgeführt,
wie sie gut bekannt ist. Während
der neue Tag-Zustand in der üblichen
Weise festgelegt (committed) wird, wird das Snoop-Ergebnis nicht unmittelbar
an den anfordernden Knoten zurückgegeben. Statt
dessen wird das alte Tag gespeichert, bis die Anforderung global
geordnet ist. An diesem Punkt kann der Knoten bestimmen, welches
das Snoop-Ergebnis der Anforderung wäre, sofern es durch eine Snoop-Operation
in der globalen Reihenfolge gewonnen worden wäre. Dieses Ergebnis wird an
den anfordernden Knoten zurückgegeben.
-
Bei
einigen Ausführungsbeispielen
wird dann, wenn eine Snoop-Operation durchgeführt wird und eine Tag-Übereinstimmung
erfaßt
wird, möglicherweise
der MESI-Zustand (M, E, S oder I) in dem Tag geändert. Diese Änderung
kann als eine Funktion f angesehen werden, die auf die MESI-Bits
angewen det wird (z. B.: neue MESI Bits = f alte MESI Bits)). Tabelle
4 gibt eine beispielhafte Ungültig
invalid)-MESI-Funktion an. Tabelle 5 gibt eine beispielhafte Geteilt(share)-MESI-Funktion an.
-
Bei
bestimmten Prozessoren der Intel Corporation wird Tabelle 5 derart
geändert,
daß der
neue Zustand S ist, wenn der aktuelle Zustand M ist.
-
Bei
einigen Ausführungsbeispielen
kann eine Snoop-Operation eine Ungültig (invalid)-MESI-Funktion in
Erwiderung einer BRILO- oder einer BILO-Anforderung verwenden und
eine Geteilt (share)-MESI-Funktion in Erwiderung einer BRL-Anforderung.
Man beachte, daß diese
beide Funktionen wie folgt miteinander kombiniert werden:
inval°inval = inval°share = share°inval = inval;
share°share
= share.
-
Die
Tatsache, daß die
Menge {inval, share} bei Zusammensetzung geschlossen ist, bedeutet,
daß richtige
Snoop-Ergebnisse berechnet werden können, nachdem ein Außer-der-Reihe-Snooping auftrat.
Der Umstand, daß sie
kommutativ ist (inval°share
= share°inval),
bedeutet, daß selbst
dann, wenn Snoop-Operationen außer
der Reihe ausgeführt
werden, das endgültige
Snoop-Ergebnis dasjenige ist, was bei der richtigen Reihenfolge
gewonnen würde.
Die Reihenfolge, in welcher die Snoop-Operationen an den Tags durchgeführt werden,
ist aus der Perspektive des endgültigen
Tag-Zustands unwesentlich.
-
b. Detaillierter Snoop-Prozeß
-
Im
folgenden werden zusätzliche
Details angegeben, die bei einigen Ausführungsbeispielen enthalten sein
können.
- • Die
Snoop-Ergebnisse werden so berichtet, als ob die Snoop-Operationen
in der globalen Reihenfolge ausgeführt würden. Folglich wird der ursprüngliche
Zustand der Tags (vor einem gegebenen Snoop) bewahrt, bis festgestellt
wird, daß keine
weiteren Snoop-Anforderungen eintreffen können, die der gegebenen Snoop-Operation
in der globalen Reihenfolge vorhergehen. Dieser ursprüngliche
Tag-Zustand wird an die neue Snoop-Operation weitergeleitet, sofern
die neue Snoop-Operation der alten Snoop-Operation in der globalen
Reihenfolge vorhergeht.
- • Der
modifizierte Tag-Zustand wird zurückgeleitet zu nachfolgenden
Snoop-Anforderung in der globalen Reihenfolge, nachdem die globale
Reihenfolge der Snoop-Anforderungen bekannt ist. Dies ermöglicht jeder
Snoop-Anforderung, ihr Ergebnis so zu berichten, als ob es in der
globalen Reihenfolge aufgetreten wäre.
- • Snoop-Operationen
werden in einer unteilbaren (atomic) Lese-Modifiziere-Schreib-Sequenz
in der empfangenen Reihenfolge ausgeführt.
- • Der
ursprüngliche
Tag-Zustand wird bewahrt und an Snoop-Anforderungen weitergeleitet, welche
die gleiche Zeile treffen und in der Knotenempfangsreihenfolge später eintreffen,
aber in der globalen Reihenfolge früher angeordnet sind.
- • Es
wird ein Zeiger (zum Verknüpfen)
auf (in der globalen Reihenfolge) nachfolgende Snoop-Anforderungen,
welche die gleiche Zeile treffen, derart aufrechterhalten, daß der modifizierte
Tag-Zustand zu nachfolgenden Anforderungen in der globalen Reihenfolge
weitergeleitet werden kann.
-
Die
unten angegebene Tabelle 6 zeigt Begriffe und die Terminologie für bestimmte
Merkmale, die für ein
besseres Verständnis
einiger Ausführungsbeispiele
der Erfindung verwendet werden können.
-
-
Mit
den Definitionen gemäß Tabelle
6 können
Aussagen wie die folgende verstanden werden:
if(TAG[Request.Index]
== Request.Tag)do_something(), in bezug auf den unten angegebenen
Pseudocode.
-
Ein
Außer-der-Reihe-Snooping
kann durch die bei dem oben beschriebenen passiven Nachrichtenordnen
verwendete Struktur durchgeführt
werden. Beispielsweise können
SSRB und SRB im Ordndungspuffer 62 in 3 sein.
Bei einigen Ausführungsbeispielen
kann in dem Skyline-Diagramm der SSRB durch die Spalte dargestellt
werden, die Anforderungen aus dem den Ordnungspuffer enthaltenen
Knoten empfängt;
und der SRB kann durch die anderen Spalten dargestellt werden. Beispielsweise
ist in 11, die das Skyline-Diagramm 102 veranschaulicht,
der SSRB durch die Spalte 0 und der SRB durch die Spalten 1 bis
3 dargestellt. Man beachte, daß selbst
dann, wenn ein Knoten sich selbst keiner Snoop-Operation unterzieht
(self snoop), Anforderungen aus diesem Knoten für andere Knoten noch in dem
Ordnungspuffer angeordnet werden können, so daß jeder Knoten die gleiche
globale Reihenfolge hat. Die Positionen in dem Ordnungspuffer des
anfordernden Knotens, die dessen eigene Snoop-Anforderungen halten,
können
SSRB genannt werden oder nicht. Die Positionierschaltung 60 kann
Snoop-Anforderungen, die die gleiche Adresse aufweisen, über Zeiger zwischen
den Anforderungen verbinden oder verknüpfen (link).
-
Bei
einigen Ausführungsbeispielen
können
die Ordnungspuffer-Einträge
(z. B. der SRB und möglicherweise
der SSRB) die Felder gemäß Tabelle
7 enthalten. Es sind nicht sämtliche
Felder erforderlich und zusätzliche
Felder können
verwendet werden.
-
-
Das
Folgende beschreibt die Operation einiger Ausführungsbeispiele der Erfindung
und wird veranschaulicht durch ein Beispiel in Verbindung mit den 12A, 12B und 12C, die einen Ordnungspuffer 62 zu den
Zeitpunkten 1, 2 und 3 zeigen, und den 13A, 13B und 13C,
die den MESI-Zustand einer
Adresse X in einem Speicher-Tag der Tags 36 zu den Zeitpunkten
1, 2 und 3 zeigen. In der Knotenempfangsreihenfolge werden zunächst eine
Snoop-Anforderung (1) (einschließlich des Kommandos C1), dann eine
Snoop-Anforderung (2) (die ein Kommando C2 einschließt) und
dann eine Snoop-Anforderung (3) (die ein Kommando C3 einschließt) von
dem Ordnungspuffer 62 empfangen. Die Anforderungen (1),
(2) und (3) sind jeweils für
die Adresse X. Anforderungen für
andere Adressen können
enthalten sein, sind aber nicht in den 12A, 12B oder 12C gezeigt.
Vor dem Empfang der Snoop-Anforderung 1 durch den Ordnungspuffer 62 hat
die Adresse X entweder den M-, E-, S- oder I-Zustand (um allgemein
zu bleiben, wurde MESI geschrieben).
-
Das
MESI-Protokoll ist ein Beispiel eines Cache-Zeilen-Kohärenz-Protokolls.
Die MESI-Zustände
in den Speicher-Tags 36 sind Beispiele von Speicher-Cache-Zeilen-Kohärenz-Zuständen und
werden durch Speicher-Cache-Zeilen-Kohärenz-Zustandsbits in den Tags 36 dargestellt.
Die MESI-Zustände
in dem Ordnungspuffer 62 sind Beispiele von Ordnungspuffer-Cache-Zeilen-Kohärenz-Zuständen und
werden durch die Ordnungspuffer-Cache-Zeilen-Kohärenz-Zustandsbits in dem Ordnungspuffer 62 dargestellt.
Die Tabellen 4 und 5 sind Beispiele von Cache-Zeilen-Kohärenz-Funktionen.
Die Erfindung ist nicht auf eine Verwendung in Verbindung mit dem
MESI-Protokoll eingeschränkt, sondern
kann in Verbindung mit anderen Cache-Zeilen-Kohärenz-Protokollen verwendet
werden (welche einige oder sämtliche
MESI-Zustände
und möglicherweise
zusätzliche
Cache-Zeilen-Kohärenz-Zustände enthalten
können).
In Abhängigkeit
von den Details der anderen Cache-Zeilen-Kohärenz-Protokolle können die
Tabellen 4 und/oder 5 und/oder andere Cache-Zeilen-Kohärenz-Funktionen,
die bei Zusammensetzung geschlossen und die kommutativ sind, verwendet
werden.
-
Wenn
eine neue Snoop-Anforderung für
die Adresse X von einem Knoten empfangen wird, wird sie in die Position
des Ordnungspuffers 62 positioniert, die zu der globalen
Reihenfolge führt.
Der Ordnungspuffer 62 wird durchsucht, um eine am nächsten liegende
frühere
und/oder eine nächstliegende
spätere
Snoop-Anforderung in dem Ordnungspuffer 62 zu identifizieren,
die ebenfalls auf die Adresse X gerichtet ist (nächstliegende frühere übereinstimmende
Anforderung oder nächstliegende
spätere übereinstimmende
Anforderung genannt). Von einer früheren Snoop-Anforderung wird
angenommen, daß sie
in der globalen Reihenfolge früher
auftritt und vor späteren
Snoop-Anforderungen aus dem Ordnungspuffer 62 zur Ruhe
gebracht (retired) wird. Nächstliegend
bedeutet am nächsten
in der globalen Reihenfolge. Man beachte, daß eine Anforderung die nächstliegende
frühere übereinstimmende
Anforderung auch dann sein kann, wenn es nur eine frühere übereinstimmende
Anforderung gibt, und daß eine
nächstliegende
spätere übereinstimmende
Anforderung auch dann vorhanden sein kann, wenn es nur eine spätere übereinstimmende
Anforderung gibt. Eine neue Anforderung zeigt auf ihre nächstliegende
frühere übereinstimmende
Anforderung, sofern diese vorhanden ist, und auf ihre nächstliegende
spätere übereinstimmende
Anforderung, sofern vorhanden.
-
Ein
MESI-Zustand wird dem MESI-Feld für die neue Anforderung in dem
Ordnungspuffer 62 zur Verfügung gestellt. Wo dieser MESI-Zustand
herrührt,
hängt davon
ab, ob es eine spätere übereinstimmende
Anforderung gibt. Sofern es keine spätere übereinstimmende Anforderung
gibt, wird der MESI-Zustand
(d. h. entweder M, E, S oder I) in dem Tag für die Adresse X in dem Speicher
(z. B. Cache 36) der Ordnungspufferposition für die neue
Anforderung zur Verfügung
gestellt. Beispielsweise wird in 12A der
MESI-Zustand des Cache 36 (da er vor dem Zeitpunkt 1 existierte)
zum Zeitpunkt 1 dem MESI-Feld der Anforderung (1) zur Verfügung gestellt.
Man beachte, daß bei
dem Beispiel die Zeitpunkte 1, 2 und 3 nicht als genaue Momente
gedacht sind, sondern als Zeitintervalle. Beispielsweise kann das
Ereignis der 12A zum Zeitpunkt 1 vor, gleichzeitig
mit oder nach dem Ereignis der 13A auftreten,
welches ebenfalls zum Zeitpunkt 1 stattfindet.
-
Sofern
es eine spätere übereinstimmende
Anforderung gibt, wird der MESI-Zustand der nächstliegenden späteren übereinstimmenden
Anforderung kupiert und wird zum MESI-Zustand der neuen Anforderung. Beispielsweise
ist in 12B der MESI-Zustand der Anforderung
(2) zum Zeitpunkt 2 der gleiche wie der MESI-Zustand der Anforderung
(1) zum Zeitpunkt 1. Man beachte, daß einige Anforderungen sowohl
eine frühere als
auch eine spätere übereinstimmende
Anforderung haben können.
Beispielsweise ist Anforderung (3) sowohl frü her als Anforderung (1) als
auch später
als Anforderung (2). Demzufolge wird, wie es in dem vorhergehenden
Absatz beschrieben wurde, der MESI-Zustand in Anforderung (1) in
den MESI-Zustand der Anforderung (3) kopiert. Auf diese Weise fließen frische
MESI-Bits vorwärts
in der globalen Reihenfolge und werden in die abschließende (retiring)
Anforderung aufgenommen.
-
Bei
einigen Ausführungsbeispielen
wird nach dem Zeitpunkt, zu dem sichergestellt ist, daß die MESI-Bits
einer Anforderung sich nicht ändern
können
(z. B. dann, wenn die Anforderung aus dem Ordnungspuffer 62 zur
Ruhe gebracht (retired) ist), der MESI-Zustand der nächstliegenden
späteren übereinstimmenden Anforderung
der zur Ruhe gebrachten (retiring) Anforderung aktualisiert. Der
aktualisierte MESI-Zustand
ist derjenige, welcher durch die geeignete MESI-Funktion (z. B. in Tabelle 4 oder 5)
erzeugt worden ist, wenn die Eingabe der Funktion der aktuelle MESI-Zustand
in der nächstliegenden
späteren übereinstimmenden
Anforderung ist. Welche MESI-Funktion die richtige ist, hängt von
dem Kommando der abschließenden
(retiring) Anforderung ab. Wie angemerkt, kann eine Snoop-Operation "invalid" (Tabelle 4) in Erwiderung
eines BRILO- oder eines BILO-Kommandos und "share" (Tabelle 5) in Erwiderung eines BRL-Kommandos
verwenden. Beispielsweise ist in 12C bei
Abschluß (retirement)
der Anforderung (2) der MESI-Zustand für die Anforderung (3) gleich
fC2(MESI), was bedeutet, daß der
neue MESI-Zustand für
die die Anforderung (3) haltende Position des Ordnungspuffers 62 das
Ergebnis des MESI-Zustands der Anforderung (2) vor dem Abschluß (retirement),
angewendet auf die MESI-Funktion für das Kommando C2, ist. Angenommen,
es gibt keine weiteren Anforderungen an die Adresse X, wenn die
Anforderung (3) abschließt
(retires), so wäre
der MESI-Zustand
der Anforderung (1) fC3(fC2(MESI))). Bei anderen Ausführungsbeispielen
werden die MESI-Zustände
der nächstliegenden
späteren übereinstimmenden
Anforderungen jedes Mal dann geändert,
wenn der MESI-Zustand einer früheren
Anforde rung errichtet wird, wenn eine neue Anforderung von dem Ordnungspuffer 62 empfangen wird.
Bei beiden Ausführungsbeispielen
fließen
die aktualisierten MESI-Zustände
rückwärts zu früheren Anforderungen.
Eine Einstellschaltung 64 kann MESI-Zustände modifizieren
und MESI-Zustände
zwischen Positionen des Ordnungspuffers bewegen. Bei dem Beispiel
können
fC1, fC2 und fC3 Tabelle 4, Tabelle 5 oder ähnliche Tabellen implementieren,
was von den Kommandos C1, C2 und C3 abhängt. Wenn beispielsweise C1 BRILO
ist, könnte
fC1 Tabelle 4 implementieren.
-
Der
MESI-Zustand in dem Speicher-Tag (z. B. im Cache 62) wird
mit dem von der geeigneten MESI-Funktion erzeugten MESI-Zustand
aktualisiert, wobei der aktuelle MESI-Zustand in dem Speicher-Tag
die Eingabe für
die MESI-Funktion ist. Welche MESI-Funktion geeignet ist, hängt von
dem Kommando der neuen Snoop-Anforderung ab. In 13A beispielsweise ist der MESI-Zustand für die Adresse
X zum Zeitpunkt 1 fC1(MESI), was bedeutet, daß der MESI-Zustand in dem Speicher-Tag
im Cache 62 vor dem Zeitpunkt 1 an die MESI-Funktion für das Kommando
C1 angelegt wird. In 13B ist der MESI-Zustand in
dem Speicher-Tag für
die Adresse X zum Zeitpunkt 2 fC2(fC1(MESI)). In 13C ist der MESI-Zustand in dem Speicher-Tag für die Adresse
X fC3(fC2(fC1(MESI))) zum Zeitpunkt 3, was vor oder nach dem Abschluß (retirement)
der Anforderung in (2) sein kann.
-
Bei
einigen Ausführungsbeispielen
werden die oben beschriebenen Aktivitäten in dem Beispiel der 12A-12C und 13A – 13C nur für
Anforderungen in dem SRB-Abschnitt des Ordnungspuffers durchgeführt. Beispielsweise
sind nur Anforderungen in dem SRB-Abschnitt übereinstimmende Anforderungen.
Bei anderen Ausführungsbeispielen
können
die Aktivitäten
für Anforderungen
in sowohl dem SRB- als auch dem SSRB-Abschnitt des Ordnungspuffers
durchgeführt
werden.
-
Der
MESI-Zustand einer Anforderung beim Abschluß (retirement) und der MESI-Zustand
des zugehörigen
Speicher- Tags sind
unabhängig
von der Knotenempfangsreihenfolge der Anforderungen gleich.
-
Bei
Abschluß (retirement)
wird die Snoop-Antwort (z. B. clean, hit, hitm) in der Steuerschaltung 40 mit Hilfe
einer auf dem MESI-Zustand der Anforderung bei Abschluß (retirement)
und dem Kommando der abschließenden
Anforderung basierenden Funktion berechnet. Die Erfindung ist nicht
auf einen speziellen Typ von Snoop-Antworten oder Funktionen für eine Berechnung
der Snoop-Antworten beschränkt.
Bei einigen Ausführungsbeispielen
sind zwei der Leitungen 22-28 dem Übertragen
von hit- und hitm-Snoop-Antwortsignalen gewidmet. Beispielsweise
könnte
die Einstellschaltung 64 den hit- und den hitm-Zustand
berechnen und sie den Leitungen 72 liefern. Es kann eine
Verdrahtetes-ODER-Technik verwendet werden, wobei jeder Knoten einen
hit- oder hitm-Leiter auf niedrigen Pegel ziehen kann. Wenn weder
hit noch hitm angelegt sind, wird einen Snoop-Antwort clean angenommen.
Die Snoop-Antworten können
für eine
fest vorgegebene Dauer (z. B. einen Ringzyklus) nach der Anforderung übertragen
werden. Die Erfindung ist nicht auf irgendeine spezielle Implementierung
des Snooping oder des Sendens von Snoop-Antworten eingeschränkt. Es
ist nicht erforderliche, daß jeder
Knoten einen Speicher aufweist, an dem eine Snoop-Operation durchgeführt werden
kann. Beispielsweise kann der Ring auch einen Knoten enthalten,
der einen Chipsatz ohne Speicher für Snoop-Operationen aufweist.
Bei einen solchen Ausführungsbeispiel
kann dieser Knoten einen Ordnungspuffer enthalten oder nicht. Die
Ordnungspuffer und Positionierschaltung in anderen Knoten würden entsprechend
konfiguriert werden.
-
Der
folgende Pseudocode liefert eine weitere Darstellung der Snooping-Operation
einiger Ausführungsbeispiele
der Erfindung. In der Praxis kann der Pseudo-Code über eine
spezielle Hardware, Software, Firmware oder irgendwelche anderen
Mittel oder Kombinationen von diesen implementiert werden.
-
-
-
5. Bi-direktionales Signalisieren
-
Arten
der bi-direktionalen Signalisierung auf dem Ring umfassen (1) die
Verwendung verschiedener Leitungen für verschiedene Richtungen und
(2) die Verwendung der gleichen Leitung für beide Richtungen. Siehe beispielsweise
US-Patent 5,604,450 von Borkar et a1. Bei einer Technik zur Verwendung
des gleichen Leiters wissen beide Knoten, daß der andere Knoten ein logisch
hohes Signal sendete, sofern der Leiter auf hohem Pegel bleibt,
und beide Knoten wissen, daß der
andere Knoten ein logisch niedriges Signal sendete, wenn der Leiter
auf niedrigem Pegel bleibt. Jeder Knoten weiß, daß der andere Knoten ein Signal
mit einem abweichenden Zustand sendete, wenn der Leiter sich auf
eine abweichende Spannung ändert
(z. B. 1/2 VDD), wenn VDD hoch ist. Der empfangende Knoten kann
seine Empfängerschaltungen
von VDD/2 zu VDD/4 ändern.
Andere Schemata können
für die
bi-direktionale Signalisierung verwendet werden. Details der bidirektionalen
Signalisierung und der Auswahl der Richtungen können ausgewählt werden, um die Liefergeschwindigkeit
und die Balanceleistung zu verbessern.
-
14 veranschaulicht
einen bi-direktionalen Ring 120, bei welchem die Knoten
N0 und N1, N1 und N2, N2 und N3 und N3 und N0 bi-direktional über die
Leitungen 122, 124, 126 bzw. 128 miteinander
verbunden sind. Wie bei dem System 10 können verschiedene Leiter der
Leitungen 122-128 verwendet werden, um verschiedene
Arten von Signalen zu führen.
Wenigstens ein Teil der Bidirektionalität ist vom Typ (2). Es wird
auf 15 Bezug genommen; die Empfangsschaltungen 84 und 90,
beispielsweise im Knoten N2, empfangen Signale aus verschiedenen
Richtungen, während
die Sendeschaltungen 86 und 88 Signale in verschiedene Richtungen
senden. Die Steuerschaltung 82 kann ähnlich der Steuerschaltung 40 sein,
behandelt aber Signale in beiden Richtungen.
-
Die
Ebene der virtuellen Slots und die zugehörige Aktivität (z. B.
Schiedsentscheidung) kann unabhängig
für die
beiden Richtungen aufrechterhalten werden. Eine Überlastung (congestion) in
einer Richtung braucht nicht den Ringverkehr in der anderen Richtung
zu unterbrechen. Bei einigen Ausführungsbeispielen kann es jedoch
sein, daß dann,
wenn die Speicherkonsistenz es erfordert, die Knoten damit fortfahren,
ihre Nachrichten in der Reihenfolge auszugeben. Beispielsweise sei
angenommen, daß eine
erste Nachricht eines Knotens im Uhrzeigersinn gesendet werden soll
und seine zweite Nachricht ertgegen des Uhrzeigersinns. Sofern der
Ring im Uhrzeigersinn überfüllt ist,
und der entgegen des Uhrzeigersinns es nicht ist, könnte es
sein, daß der
Knoten dann (wenn ein Ordnen erforderlich ist) es nicht mehr versucht,
die Nachricht entgegen des Uhrzeigersinns auszugeben, bis die im
Uhrzeigersinn zu sendende Nachricht auf den Ring gegeben wird.
-
Es
kann eine Schaltung enthalten sein, um es Nachrichten (z. B. Snoop-Anforderungen),
die in entgegengesetzten Richtungen gesendet werden, zu ermöglichen,
konsistent geordnet zu sein. Knoten können beispielsweise einen einzigen
Ord nungspuffer für
beide Richtungen aufrechterhalten. Wenn zwei Richtungen perfekt
synchronisiert werden (was möglicherweise
unrealistisch ist), könnte
eine feste Positionsbeziehung zwischen den Slots verwendet werden,
um zu sichern, daß sämtliche
teilnehmenden Knoten diese konsistent verarbeiten.
-
Wenn
die beiden Richtungen nicht perfekt synchronisiert sind, können die
Knoten Anforderungspakete so verarbeiten, als ob eine spezielle
Positionsbeziehung vorhanden wäre.
Insbesondere kann jeder Knoten die Richtungen beim Verarbeiten von
Slots abwechseln. Wenn jedoch die Ringe nicht perfekt synchronisiert
sind, könnte
es ein, daß sich
die eintreffenden Slots aus den zwei Richtungen nicht miteinander
abwechseln. Beispielsweise sei angenommen, daß ein Knoten die Nachrichen
A und C in der Richtung im Uhrzeigersinn nacheinander empfängt, bevor
die Nachricht B aus der anderen Richtung eintrifft. C sollte nicht
in den Ordnungspuffer plaziert werden, bis B eintrifft. Jedoch ist
es für
den Knoten nicht durchführbar,
einfach den Ring im Uhrzeigersinn anzuhalten, ein Weiterleiten von
C abzulehnen (und neue Slots im Uhrzeigersinn anzunehmen), während er
wartet. Stattdessen wird er C wie üblich weiterleiten, aber er
wird, anstelle des Eingebens von C in den Ordnungspuffer, C in einen
ersten Richtungspuffer (z. B. einen Uhrzeigersinn-Puffer) eingeben
und ihn dort halten, bis B eintrifft. Es gibt einen entsprechenden
zweiten Richtungspuffer (z. B. einen Puffer für die Richtung entgegen des
Uhrzeigersinns). Bei einem Ausführungsbeispiel
ist einer der beiden stets leer, so daß sie mit Hilfe desselben Speichers
implementiert werden können. 16 veranschaulicht
einen Ordnungspuffer 160, beispielsweise des Knotens N0.
Die Betriebsweise des Ordnungspuffers 160 kann durch ein
Skyline-Diagramm für
jede Richtung veranschaulicht werden. Die beiden Skyline-Diagramme können ein
unterschiedliches Erscheinungsbild haben, wie dies in 16 der
Fall ist oder dasselbe Erscheinungsbild (z. B. die zwei Skyline-Diagramme 102).
Erste und zweite Richtungspuffer 162 und 168 stellen
Anfor derungen den Positionierschaltungen 164 und 170 zur
Verfügung,
von welchen sie dem Ordnungspuffer 160 zur Verfügung gestellt
werden. Es können
andere Anordnungen verwendet werde. Eine Verarbeitungsschaltung ähnlich der
Verarbeitungsschaltung 66 kann enthalten sein.
-
Wenn
die beiden Richtungen in willkürlicher
weise "aus der Synchronisation" zueinander herauslaufen können, gibt
es möglicherweise
keinen weg, um die Größe des ersten
und zweiten Richtungspuffers zu begrenzen. Somit ist es wünschenswert,
zu begrenzen, um wieviel die Richtungen aus der Synchronisation
herausgehen können.
Dies kann ausgeführt
werde, indem man einen der Knoten (z. B. N0), einen Master-Knoten, die
Taktimpulse der beiden Richtungen konsistent einmals pro Ringumlauf
regnerieren läßt. Obwohl
dies nicht garantiert, daß die
beiden Richtungen perfekt synchronisiert sind, begrenzt es, um wieviel
die Richtungen voneinander abdriften können und gestattet uns somit,
die Größe des Uhrzeigersinn- und Entgegenuhrzeigersinn-Puffers
zu begrenzen.
-
6. Zusätzliche Informationen und Ausführungsbeispiele
-
Es
kann Zwischenstrukturen (wie beispielsweise einen Puffer) oder Signale
zwischen zwei veranschaulichten Strukturen oder innerhalb einer
als kontinuierlich veranschaulichten Struktur (wie beispielsweise eines
Leiters) geben. Die Begrenzungen der Kästen in den Figuren dienen
der Veranschaulichung und sind nicht in einem einschränkenden
Sinne zu verstehen. Pfeile zeigen bestimmte Signalflüsse bei
bestimmten Ausführungsbeispielen,
aber nicht jedes Signal, wie beispielsweise Steuersignale und Anforderungen
für Daten.
-
Gewöhnlich wird
dort, wo es keine oder relativ wenige leere virtuelle Slots zwischen
den Nachrichten gibt, die globale Reihenfolge von der Knotenempfangsreihenfolge
abweichen. Dort jedoch, wo Nachrichten ausreichend weit voneinander
beabstandet sind, kann die globale Reihenfolge die gleiche wie die
Knotenempfangsreihenfolge sein.
-
Bei
einigen Ausführungsbeispielen
enthält
ein Ring nur zwei Knoten, wobei die Signale bidirektional zwischen
den Knoten weitergeleitet werden (z. B. gleichzeitig auf wenigstens
einem Leiter und/oder jeweils in einer Richtung auf mehr als einem
Leiter).
-
Die
Erfindung ist nicht auf Leiter eingeschränkt, die Spannungssignale führen. Beispielsweise
können die
Leiter Lichtleiter sein. Zwei oder mehrere der Knoten in einem Ring
können
drahtlos über
elektromagnetische Signale miteinander verbunden sein.
-
Sofern
in der Beschreibung von einer Komponente, einem Merkmal, eine Struktur
oder einem Charakteristikum die Rede ist, das enthalten sein "kann" oder "könnte", bedeutet dies, daß es nicht erforderlich ist, daß diese
bestimmte Komponente, das Merkmal, die Struktur oder das Charakteristikum
enthalten ist. Die Bezugnahme auf "einige Ausführungsbeispiele" in der Beschreibung
bedeutet, daß ein
bestimmtes Merkmal, eine Struktur oder ein Charakteristikum, das
in Verbindung mit den Ausführungsbeispielen
beschrieben ist, in wenigstens einigen Ausführungsbeispielen aber nicht
notwendigerweise in allen Ausführungsbeispielen
der Erfindung enthalten ist. Der an verschiedenen Stellen auftretende
Begriff "einige
Ausführungsbeispiele" bezieht sich nicht
notwendigerweise auf dieselben Ausführungsbeispiele.
-
In
der Weise, wie es hier verwendet wird, wird ein Bit "angelegt", wenn es einen bestimmten
Spannungszustand hat oder sich innerhalb eines Bereichs befindet,
der dem Anlegen zugeordnet ist, und "weggenommen", wenn es irgendeinen abweichenden Zustand
aufweist oder sich in einem anderen Bereich befindet, der dem Wegnehmen
zugeordnet ist. Ein angelegtes oder weggenommenes Bit könnte eine
logische 1, eine logische 0, VDD/2 oder irgendein anderer Wert oder
Bereich von Werten sein, was von der Implementierung abhängig ist.
Ein Anhängige-Anforderung-Puffer
(PRB; Pending Request Buffer) kann Anforderungen eines Knotens halten,
welche noch nicht an den eigenen Ordnungspuffer des Knotens ausgegeben
oder an einen anderen Knoten gesendet worden sind.
-
Bei
einigen Implementierungen können
Anforderungen, nachdem sie den Ordnungspuffer verlassen, in einem
Ausstehende-Anforderung-Puffer (ORB; Outstanding Request Buffer)
gespeichert werden, auf den in Tabelle 6 Bezug genommen wird. Dieser
Puffer kann als inhaltsadressierbarer Speicher (CAM) implementiert werden,
der eine neue Anforderung (intern oder snoop) mit allen aktuellen
Einträgen
in einem einzigen Zyklus vergleicht. Dieser Puffer kann verwendet
werden, weil die Cache-Tags den Zustand des Zeilen-Besitzes und der
Verantwortlichkeit reflektieren, aber nicht notwendigerweise das
Vorhandensein von Daten. Sobald die Snoop-Antwort für eine Cache-Zeile empfangen
worden ist, übernimmt
der Anforderung die Verantwortung für die Zeile, setzt sie in den
M-Zustand in dem Cache. Jetzt sei angenommen, daß eine weitere BRILO-Anforderung
für dieselbe
Zeile eintrifft und von dem Knoten einer Snoop-Operation unterzogen
wird. Die Cache-Zeile ist in dem M-Zustand und der Knoten wird in
richtiger Weise HITM als Snoop-Ergebnis zurückgeben; jedoch darf er nicht
ein Rückschreiben
(WB) für
die Zeile liefern, bis er die Daten für seine eigene (frühere) BRILO-Anforderung
gewinnt (und sie einmal verwendet). Die Informationen über ausstehende
Anforderungen (die die Snoop-Phase durchlaufen und für einen
Abschluß in
der Reihenfolge festgelegt sind, aber noch keine Daten empfangen
haben) werden in dem ORB aufgezeichnet. Der ORB und der PRB können durch
die Kästen
in den 3 und 4 oder durch zusätzliche,
nicht veranschaulichte Kästen
präsentiert
werden. Bei einigen Implementierungen kann ein Knoten, um ein Verfolgen
der zu dem Knoten zurückkommenden
Daten zu unterstützen,
eine spezielle statische Identifikation (ID) haben und bis zu N
Anforderungen, die auf dem Bus ausstehen (z. B. N = 16). Ein Acht-Bit-Feld
für zurückgestellt-ID
(deferred ID), DID[7:0]: = {AgentType, AgentID[2:0], RegID[4:0]
= } identifiziert ein deutig jede Anforderung und kennzeichnet die
Datenantwort für
diese Anforderung.
-
Bei
einigen Ausführungsbeispielen
wird dann, wenn ein virtueller Slot keine Nachricht enthält, nichts in
den Ordnungspuffer eingesetzt, außer dem Altern der vorhandenen
Nachrichten. Bei anderen Ausführungsbeispielen
wird ein Bit oder werden Bits in eine Position in den Ordnungspuffer
eingesetzt (dort, wo eine Nachricht angeordnet würde) und die vorhandenen Nachrichten
altern. Bei noch anderen Ausführungsbeispielen wird
nichts eingesetzt und die vorhandenen Nachrichten altern nicht.