-
GEBIET
-
Die
vorliegende Erfindung betrifft schnelle Punkt-zu-Punkt-Verbindungen
(interconnect links) und insbesondere Kohärenzprotokolle
zur Implementierung einer kohärenten Verbindungsarchitektur.
-
HINTERGRUND
-
Wenn
ein elektronisches System mehrere Cache-Speicher enthält,
wird die Gültigkeit oder Kohärenz der in dem System
gehaltenen Daten beibehalten, um die Integrität von Datenoperationen
sicherzustellen. Kohärenz wird häufig durch Manipulieren
von Daten gemäß einem Cache-Kohärenzprotokoll
erzielt. Da die Anzahl von Caches und/oder Prozessoren zunimmt,
nimmt die Komplexität des Bewahrens von Kohärenz
zu, was möglicherweise zu einer größeren
Anzahl von Konflikten zwischen der Vielzahl von Komponenten eines Systems
führt.
-
Wenn
beispielsweise mehrere Komponenten (z. B. ein Cache-Speicher, ein
Prozessor) denselben Datenblock anfordern, wird ein Konflikt zwischen
den mehreren Komponenten auf eine Art gelöst, die die Gültigkeit
der Daten bewahrt. Bisherige Cache-Kohärenzprotokolle weisen
typischerweise eine einzige Komponente auf, die für die
Konfliktlösung verantwortlich ist. Da jedoch die Komplexität
des Systems zunimmt, kann der Verlass auf eine einzige Komponente
zur Konfliktlösung die Gesamtsystemleistung verringern.
-
Allgemein
gibt es zwei grundlegende Schemata zum Liefern von Kohärenz:
Snooping („Schnüffeln”) (nun häufig
Symmetric MultiProcessing (SMP) genannt) und Verzeichnisse (häufig
Distributed Shared Memory (DSM) genannt). Der grundlegende Unterschied
zwischen diesen beiden Schemata dreht sich um die Platzierung und
den Zugriff auf Meta-Information; d. h. darüber, wo Kopien
einer Cache-Zeile gehalten werden.
-
Für
verzeichnisbasierte Schemata gibt es zusätzlich zu einem
festen Platz, an dem die nicht gecacheten (gepufferten) Daten gespeichert
werden, einen festen Ort, das Verzeichnis, der bzw. das angibt,
wo gecachete Kopien stehen bzw. gespeichert sind. Zum Zugreifen
auf eine Cache-Zeile in einer neuen Weise muss ein Knoten mit dem
Knoten kommunizieren, der das Verzeichnis enthält und gewöhnlich
derselbe Knoten ist, der den Aufbewahrungsort der ungecacheten Daten
enthält, wodurch dem antwortenden Knoten ermöglicht wird,
die Daten bereitzustellen, wenn die Hauptspeicherkopie gültig
ist. Ein derartiger Knoten, in einem Verzeichnissystem, wird als
ein Home node bezeichnet.
-
Das
Verzeichnis kann auf zwei Arten verteilt sein. Erstens werden Hauptspeicherdaten
(der ungecachete Aufbewahrungsort) häufig auf Knoten aufgeteilt,
wobei das Verzeichnis in derselben Weise verteilt ist. Zweitens
kann die Meta-Information selbst verteilt sein, wobei sie an dem
Home node als kleine Information, ob die Zeile gecachet ist, und
falls ja, wo eine einzelne Kopie steht, bleibt. SCI z. B. verwendet
dieses Schema, wobei jeder Knoten, der eine gecachte Kopie enthält,
Verbindungen zu anderen Knoten mit gecachten Kopien aufrechterhält,
wodurch somit ein vollständiges Verzeichnis gemeinsam aufrechterhalten
wird.
-
Für
Snooping-Caches wird die Meta-Information mit den gecacheten Kopien
selbst verteilt, so dass jede gültige Kopie einer Cache-Zeile
von einer Einheit gehalten wird, die Anforderungen von Zugriff auf
die Cache-Zeile erkennen und entsprechend antworten soll. Typischerweise
gibt es einen Aufbewahrungsort, an dem die Daten in einem ungecacheten
Zustand gehalten werden, d. h. deren ursprünglichen Ort.
Häufig wird ein Agent oder eine für diesen ursprünglichen
Ort verantwortliche Einheit als ein Home node bezeichnet. Wenn Zugriff
auf eine Cache-Zeile angefordert wird, sendet ein anfordernder Knoten
häufig die Adresse einer angeforderten Cache-Zeile gemeinsam
mit notwendigen Berechtigungen, und Knoten, die eine Kopie der angeforderten
Cache-Zeile halten, antworten entsprechend.
-
In
einigen der gegenwärtigen Kohärenz- und Nachrichtenprotokolle
führen jedoch Teillesevorgänge Lesen von Cache-Zeilen
und Nicht-Snoop-Speicherzugriffe, d. h. nicht kohärente
Zugriffe in einer kohärenten Architektur, unter bestimmten
Bedingungen potentiell zum Weiterleiten von ungültigen
Daten an einen Anforderer. Häufig ergeben sich diese Umstände
anhand von Verletzungen von Speicherordnungsregeln in einem Protokoll.
Folglich kann eine illegale Operation von Agenten durchgeführt
werden, die die ungültigen Daten empfangen, was potentiell
zur Instabilität in einem System führt.
-
Kurzbeschreibung der Zeichnungen
-
Die
vorliegende Erfindung wird beispielhaft und nicht beschränkend
durch die Figuren der beigefügten Zeichnungen beschrieben.
-
1 stellt
eine Ausführungsform einer Protokollarchitektur dar.
-
2 stellt
eine Ausführungsform eines Systems dar, das mehrere Prozessoren
enthält, die mit einem Chipsatz unter Verwendung einer
Punkt-zu-Punkt-Verbindung gekoppelt sind.
-
3 stellt
eine Ausführungsform eines Blockdiagramms für
eine bidirektionale Verbindungsarchitektur unter Verwendung eines
geschichteten Eingabe-Ausgabe(Input/Output(I/O))-Stapels dar.
-
4a stellt
eine Ausführungsform eines Protokolldiagramms für
ein Nachrichtenprotokoll zwischen mehreren Knoten dar, das potentiell
zu einem Zugriff auf ungültige Daten führt.
-
4b stellt
eine Ausführungsform eines Protokolldiagramms zum Liefern
von gültigen Daten als Antwort auf Teil- und Nicht-Snoop-Speicherzugriffe
dar.
-
5a stellt
eine weitere Ausführungsform eines Protokolldiagramms für
ein Nachrichtenprotokoll zwischen mehreren Knoten dar, das potentiell
zu einem Zugriff auf ungültige Daten führt.
-
5b stellt
eine weitere Ausführungsform eines Protokolldiagramms zum
Liefern von gültigen Daten als Antwort auf Teil- und Nicht-Snoop-Speicherzugriffe
dar.
-
Ausführliche Beschreibung
-
In
der folgenden Beschreibung werden zahlreiche spezielle Details,
wie z. B. spezielle Verbindungsarchitekturen, spezielle Nachrichten,
spezieller Pseudocode, spezielle Verbindungsarchitekturschichten,
etc., dargestellt, um für ein umfassendes Verständnis
der vorliegenden Erfindung zu sorgen. Für einen Fachmann auf
dem Gebiet wird jedoch ersichtlich sein, dass diese speziellen Details
zur Umsetzung der vorliegenden Erfindung nicht verwendet werden
müssen. In anderen Fällen sind allgemein bekannte
Komponenten oder Verfahren, wie z. B. spezielle Verbindungsschichtarchitekturdetails,
spezielle nicht wichtige Nachrichten und Protokolle, spezielle Funktionsdetails
von Prozessoren und Caches, etc. nicht im Detail beschrieben worden,
um ein unnötiges Verschleiern der vorliegenden Erfindung
zu vermeiden.
-
Das
hierin beschriebene Verfahren und die hierin beschriebene Vorrichtung
dienen zur richtigen Speicherordnung zwischen Teilzugriffen und
Nicht-Snoop-Speicherzugriffen in einer Verbindungsarchitektur. Speziell
wird Beachtung von Speicherordnungsanforderungen hauptsächlich
unter Bezugnahme auf eine illustrative Verbindungsarchitektur auf
Basis einer Cache-kohärenten Verbindung diskutiert. Die
Verfahren und Vorrichtungen zum Liefern von richtigen Speicherordnungsanforderungen
sind jedoch nicht so eingeschränkt, da sie mit jeder Verbindungsarchitektur
implementiert werden können.
-
Ausführungsform einer
illustrativen Verbindungsarchitektur
-
1 stellt
eine Ausführungsform einer höheren vereinfachten
Protokollarchitektur dar. In einer Ausführungsform dient
die Protokollarchitektur zum Bewahren von Datenkonsistenz zwischen
Daten in Caches in der Architektur während normaler Transaktionen,
sowie während widerstreitender Anforderungen. Zusätzlich sorgt
die Protokollarchitektur in einer Ausführungsform auch
für Fortschritt (forward Progress) für jede Anforderung,
so dass jede Anforderung erfüllt und beendet bzw. abgeschlossen
(retired) ist.
-
Eine
Protokollarchitektur kann irgendeine Anzahl von Knoten oder Agenten
enthalten. In einer Ausführungsform enthält ein
Knoten einen Prozessor, der mit einem internen Cache-Speicher, einem
externen Cache-Speicher und/oder einem externen Speicher verbunden
ist. Ein Knoten oder Agent kann sich jedoch auf jedes Bauelement
oder Ansammlung derselben in einer Verbindungsarchitektur, wie z.
B. einen Prozessor, einen Memory Controller Hub, und E/A(I/O)-Hub,
einen Generic Controller Hub, E/A(I/O)-Bauelement, eine Ansammlung
von E/A(I/O)-Bauelementen oder irgendein anderes Bauelement/andere
Komponente, die auf Speicher zugreifen kann, beziehen. In einer
anderen Ausführungsform ist ein Knoten ein elektronisches
System (z. B. Computersystem, Mobilgerät), das mit anderen
elektronischen Systemen verbunden ist. Es können auch andere
Typen von Knotenkonfigurationen verwendet werden.
-
Wie
dargestellt, enthält die Architektur 100 Cache-Knoten/Agenten 105–106 und
Home Agents 110–112. In einer Ausführungsform
dienen die Home Agents 110–112 zum Schützen
von Speicherstellen, die finale Aufbewahrungsorte eines kohärenten
Speicherplatzes sind. Mit anderen Worten ist der Agent 110 ein Home
Agent, der für eine Vielzahl von ursprünglichen
physikalischen Speicherstellen für Daten eines kohärenten
Speicherplatzes verantwortlich ist. Home Agents 110–112 können
irgendeine Kombination der folgenden Aufgaben ausführen,
die einschließen: Verfolgen von Cache-Zustandsübergängen
von Caching-Agenten 105–106, Verwalten
von Konflikten unter Caching-Agenten 105–106,
Verbinden mit Speicher, Liefern von Daten und/oder Eigentümerschaft
(ownership), sowie irgendwelche anderen bekannten mit Home Agents
verbundene Aufgaben.
-
In
einer Ausführungsform enthalten Cache-Agenten 105–106 Agenten,
die mit Cache-Speichern verbunden sind, wie z. B. Prozessoren, die
Cache-Speicher und Caching-E/A(I/O)-Proxy-Instanzen enthalten. Cache-Agenten 105–106 können
irgendeine Kombination der folgenden Aufgaben sowie irgendwelche
andere Aufgaben, wie Durchführen von Lese- und Schreibanforderungen
in kohärenten Speicherplatz, Halten von gecacheten Kopien
von Daten aus kohärentem Speicherplatz und Liefern von
gecacheten Kopien an andere Peer-Caching-Agenten durchführen.
Ein Caching-Agent oder -Knoten kann auch als ein Peer-Agent/Knoten im
Verhältnis zu einem anderen Caching-Agenten bezeichnet
werden. Obwohl dies in 1 nicht speziell dargestellt
ist, kann die Protokollarchitektur auch Nicht-Caching-Agenten, wie
z. B. einen Eingabe/Ausgabe(Input/Output(I/O))-Hub enthalten, um
Transaktionen im Namen von I/O-Einrichtungen mitzumachen oder zu
bezeugen.
-
In
einer Ausführungsform bewahren Caching-Agenten 105–106 und
Home Agents 110–112 Datenkonsistenz und
sorgen sie für Fortschritt durch Austausch von Nachrichten über
Netzwerkstruktur 101. In einer Ausführungsform
erleichtert das Netz 101 den Transport von Nachrichten
von einem Agenten/Knoten zu einem anderen Agenten/Knoten durch ein
Punkt-zu-Punkt-Verbindungsnetzwerk. Es wird häufig gesagt,
dass 1 eine abstrakte Ansicht von einem zugrunde liegenden
Netzwerk eines Cache-Kohärenzprotokolls darstellt.
-
In
einer Ausführungsform kann die Verbindungsarchitektur
100 eine
Kombination von neuartigen Merkmalen enthalten, wie sie in den folgenden
parallel anhängigen Anmeldungen beschrieben sind. Zum Beispiel
beschreibt
US-Patent Nr. 6,922,756 mit
dem Titel „Forward State for Use in Cache Coherency in
a Multi-Node System” die Verwendung eines Forward-Cache-Kohärenzzustands
(F-Zustand). Ferner werden Beispiele für Kohärenzprotokolle
in zahlreichen Situationen in der Anmeldung mit der Anmeldenummer XX/XXX,XXX
(Anwaltsaktenzeichen P15925), eingereicht ..., mit dem Titel „A
Two-Hop Cache Coherency Protocol”, Anmeldung mit der Anmeldenummer
XX/XXX,XXX (Anwaltsaktenzeichen P18890), eingereicht am ..., mit
dem Titel „A Messaging Protocol”, Anmeldung mit
der Anmeldenummer XX/XXX,XXX (Anwaltsaktenzeichen P118891) eingereicht
am ..., mit dem Titel „A Cache Coherence Protocol”,
Anmeldung mit der Anmeldenummer XX/XXX,XXX (Anwaltsaktenzeichen
P22376), eingereicht am ..., mit dem Titel „A Two-Hop Source Snoop
Based Cache Coherence Protocol” und Anmeldung mit der Anmeldenummer
XX/XXX,XXX (Anwaltsaktenzeichen P23106), eingereicht am ..., mit
dem Titel „A Two-Hop Source Snoop Based Messaging Protocol” diskutiert.
-
Weitere
Beispiele schließen die Anmeldung mit der Nummer 10/XXX,XXX
(Anwaltsaktenzeichen P13923), eingereicht am ..., 2002, mit dem
Titel „Speculative Distributed Conflict Resolution for
a Cache Coherency Protocol”; Anmeldung mit der Nummer 10/XXX,XXX
(Anwaltsaktenzeichen P13984), eingereicht am ..., 2002, mit dem
Titel „Hierarchical Directories for Cache Coherency in
a Multiprocessor System”; Anmeldung mit der Nummer 10/XXX,XXX
(Anwaltsaktenzeichen P13985), eingereicht am ..., 2002, mit dem
Titel „Hierarchical Virtual Model of a Cache Hierarchy
in a Multiprocessor System”; Anmeldung mit der Nummer 10/XXX,XXX
(Anwaltsaktenzeichen P13986), eingereicht am ..., 2002, mit dem
Titel „Non-Speculative Distributed Conflict Resolution
for a Cache Coherency Protocol” ein.
-
Man
beachte, dass die in den oben erwähnten parallel anhängigen
Anmeldungen beschriebenen Merkmale in den hierin beschriebenen Ausführungsformen
enthalten sein können; die hierin beschriebenen Ausführungsformen
sind jedoch nicht derart eingeschränkt, da sie zusätzliche
Merkmale sowie potentiell keines der oben beschriebenen Merkmale
enthalten können.
-
2 stellt
eine Ausführungsform eines Systems dar, das mehrere Prozessoren
enthält, die unter Verwendung einer Punkt-zu-Punkt-Verbindungsarchitektur
mit einem Chipsatz gekoppelt sind. Das System von 2 kann
auch mehrere Prozessoren enthalten, von denen nur zwei, Prozessoren 205, 210,
der Klarheit halber gezeigt sind. Wie dargestellt ist, enthält
jeder der Prozessoren 205, 210 zwei Verarbeitungselemente 206–207, 211–212;
trotzdem kann irgendeine Anzahl von Verarbeitungselementen in den
Prozessoren 205,210 enthalten sein.
-
Ein
Verarbeitungselement bezieht sich auf eine Thread-Einheit, eine
Prozesseinheit, einen Kontext, einen logischen Prozessor, einen
Hardware-Thread, einen Kern und/oder irgendein anderes Element,
das einen Zustand für einen Prozessor halten kann, wie
z. B. einen Ausführungszustand oder Architekturzustand.
Mit anderen Worten bezieht sich ein Verarbeitungselement in einer
Ausführungsform auf irgendeine Hardware, die mit Code unabhängig
verknüpft werden kann, wie z. B. einem Software-Thread,
Betriebssystem, einer Anwendung oder einem anderen Code. Als ein
Beispiel bezieht sich ein physikalischer Prozessor typischerweise
auf eine integrierte Schaltung, die potentiell irgendeine Anzahl
von anderen Verarbeitungselementen, wie z. B. Kerne oder Hardware-Threads,
enthält.
-
Ein
Kern bezieht sich häufig auf Logik, die sich auf einer
integrierten Schaltung befindet, die einen unabhängigen
Architekturzustand bewahren kann, wobei jeder unabhängig
bewahrte Architekturzustand mit mindestens einigen dedizierte Ausführungsressourcen
verknüpft ist. Im Gegensatz zu Kernen bezieht sich ein Hardware-Thread,
der auch als ein physikalischer Thread bezeichnet werden kann, typischerweise
auf jede Logik, die sich auf einer integrierten Schaltung befindet,
die einen unabhängigen Architekturzustand bewahren kann,
wobei die unabhängig bewahrten Architekturzustände
sich den Zugriff auf Ausführungsressourcen teilen. Somit
können ersichtlich mehrere Software-Threads, wie z. B.
mehrere Replikationen einer Single-Threaded-Anwendung, parallel
auf mehreren Verarbeitungselementen ausgeführt werden,
die eine Kombination von irgendwelchen der vorangehend genannten
Verarbeitungselementen, wie z. B. Kerne oder Hardware-Threads, enthalten
können.
-
In
den Prozessoren 205, 210 sind auch Ressourcen 208, 213 dargestellt,
die typischerweise Register, Einheiten, Logik, Firmware, Speicher
und andere Ressourcen zum Ausführen von Code oder zum Verbinden mit
anderen Einrichtungen enthalten. Wie oben angegeben, können
einige der Ressourcen 110 für Verarbeitungselemente
teilweise oder vollständig dediziert sein, während
andere zwischen Verarbeitungselementen geteilt werden. Zum Beispiel
können kleinere Ressourcen, wie z. B. Befehlszeiger und
Umbenennungslogik für physikalische Threads repliziert
werden. Einige Ressourcen, wie z. B. Umordnungspuffer in einer Umordnungs/Rückordnungseinheit
(reorder/retirement unit), Befehlsnachschlageübersetzungspuffer
(Instruction lookaside translation buffer (ILTB)), Lade/Speicherpuffer,
und Warteschlangen können durch Partitionieren geteilt werden.
Andere Ressourcen, wie z. B. universelle interne Register, Seitentabellenbasisregister,
niedriger Daten-Cache, ein Daten-TLB, Ausführungseinheit
und eine Out-Off-Order-Einheit werden potentiell unter Threads vollständig
geteilt. Im Gegensatz dazu können Kerne dedizierte Ausführungsressourcen
aufweisen, während sie sich zumindest einen Teil eines
höheren Caches, wie z. B. einen prozessorexternen Cache-Speicher
(second level cache (L2)), teilen.
-
In
einer Ausführungsform schließen Ressourcen 208, 213 eine
Prozessor-Pipeline ein, die irgendeine Anzahl von Pipeline-Stufen
enthalten kann. Übliche Beispiele für Pipeline-Stufen
schließen eine Befehlszeigerstufe, eine Holstufe, eine
Dekodierstufe, eine Ansteuerstufe und Zuordnungsstufe, eine Umbenennungsstufe,
eine Warteschlangenbildungsstufe, eine Umordnungsstufe, eine Zeitsteuerstufe,
eine Verteilstufe, eine Ausführungsstufe, eine Speicherzugriffsstufe,
und eine Registerzugriffsstufe ein. Man beachte, dass diese Liste
von Stufen eine beispielhafte nicht abschließende Liste
von Prozessor-Pipeline-Stufen enthält, da irgendwelche
bekannten Pipeline-Stufen in Prozessor 100 enthalten sein
können.
-
Die
Prozessoren 205, 210 können dementsprechend
jeweils auch eine Speichersteuerung oder einen lokalen Memory Controller
Hub (MCH) als Verbindung mit dem Speicher 209, 214 enthalten.
Die Speicher 209, 214 enthalten irgendeinen Speicherbaustein,
wie z. B. Random Access Memory (RAM), Cache-Speicher, Flash-Speicher
oder einen anderen Speicherbaustein. In einer Ausführungsform
enthält der Speicher 214 einen Cache-Speicher
auf höherer Ebene (Higher-Level Cache Memory) enthalten,
während Ressourcen 213 einen Cache-Speicher auf
niedrigerer Ebene enthalten. In einer anderen Ausführungsform
enthält der Speicher 209 einen Dynamic Random
Access Memory (DRAM), der mit dem Prozessor 205 verbunden
ist, der einen Cache-Speicher zum Cachen von Daten aus dem DRAN 209 enthält.
Man beachte, dass es sich hierbei um eine illustrative Ausführungsform
handelt, da Speicher 209, 214 potentiell jede
Art von Speichereinrichtung enthält.
-
In
einer Ausführungsform, in der die Speicher 209, 214 Cache-Speicher
enthalten, die entweder in den Prozessoren 205, 210 enthalten
oder dazu extern angeordnet sind, wie dies dargestellt ist, können
die Prozessoren 205, 210 ein Home node sowie ein
Peer-Caching-Knoten sein. Wenn zum Beispiel eine Transaktion auf eine
Speicherstelle in dem Speicher 209 Bezug nimmt, wird festgelegt,
dass der für den Speicher 209 verantwortliche
Agent, d. h. Prozessor 205, ein Home Agent im Verhältnis
zur Transaktion und zur Speicherstelle ist. In ähnlicher
Weise wird bei einer Transaktion, die auf eine andere Speicherstelle
Bezug nimmt, wie z. B. eine Stelle in dem Speicher 214,
der Prozessor 205 als ein Peer-Caching-Agent bestimmt.
-
Wie
ersichtlich ist, verbinden Punkt-zu-Punkt-Verbindungen 220–224 Komponenten
miteinander in einer Punkt-zu-Punkt-Weise. Physikalische Verbindungen 220–224 enthalten
in einer Ausführungsform jeweils eine bidirektionale Differenzsignalisierungsverbindung,
wie z. B. die mit einer unten unter Bezugnahme auf 3 diskutierten
physikalischen Schicht verbundenen physikalischen Verbindungen.
Folglich können die Prozessoren 205, 210 und
der Chipsatz 230 miteinander direkt kommunizieren.
-
Der
Chipsatz 230 ist häufig ein allgemeiner Bezugspunkt
für mehrere integrierte Schaltungen, wie z. B. ein Memory
Controller Hub, der mit einem Input/Output(I/O)-Hub gekoppelt ist.
In einer Ausführungsform, in der Agenten jeweils eine Version
eines Memory Controller Hub als Verbindung mit dem Speicher enthalten, bezieht
sich jedoch der Chipsatz 230 auf einen I/O-Hub oder einen
anderen Steuer-Hub. In einer Ausführungsform ist der Chipsatz 230,
wie oben erörtert, ein nicht-cachender Agent zum Mitmachen
an Transaktionen oder Bezeugen derselben. Der Chipsatz 230 ist
jedoch nicht derart beschränkt, da in anderen Ausführungsformen der
Chipsatz 230 ein Caching Agent (zwischenspeichernder Agent),
der einen Cache-Speicher enthält, und/oder ein Home Agent
ist, der einen Speicher mit Aufbewahrungsorten für Daten
an ursprünglichen Speicherstellen enthält.
-
Wie
dargestellt ist, dient der Chipsatz 230 auch zum Verbinden
mit einer Vielzahl von Verbindungs- und I/O-Einrichtungen, wie z.
B. Peripheral Component Interconnect(PCI)- oder PCI Express(PCI-E)-Einrichtung 261,
Integrated Device Electronics(IDE)- oder Advanced Transfer Attachment(ATA)-Einrichtung 262,
Universal Serial Bus(USB)-Einrichtung 262, Local Area Network
(LAN) oder Wireless LAN(WLAN)-Einrichtung 264, Audioeinrichtung 265 und
andere I/O-Einrichtung 266, die auch andere Verbindungsarchitektur
zur Kopplung von I/O-Einrichtungen, wie hierin beschrieben, enthalten
können.
-
In 3 ist
eine Ausführungsform eines Blockdiagramms für
eine bidirektionale Verbindungsarchitektur unter Verwendung eines
geschichteten Verbindungsstapels dargestellt. Die Bezugnahme auf
Schichten von 3, wie z. B. eine physikalische
Schicht 302, enthält auch die Diskussion einer
generischen Schicht, die in verschiedenen Agenten implementiert
werden kann, wie z. B. physikalische Schicht 302a und physikalische
Schicht 302b. Wie dargestellt ist, ist der Verbindungsstapel
in fünf Schichten unterteilt, von denen eine oder mehrere
potentiell optional auf einer Entwurfimplementierung basieren. Zum
Beispiel ist Routing-Schicht 304 in einer Ausführungsform
in die Funktionalität der Verbindungsschicht 303 eingebettet;
somit ist die Routing-Schicht in einer Ausführungsform
keine separate und verschiedene Schicht.
-
In
einer Ausführungsform ist die physikalische Schicht 302 für
elektrische Übertragung von Information auf ein physikalisches
Medium verantwortlich. Zum Beispiel wird eine physikalische Punkt-zu-Punkt-Verbindung
zwischen Verbindungsschichtinstanzen 303a und 303b verwendet.
Als ein Anschauungsbeispiel enthält die physikalische Verbindung
ein Differenzsignalisierungsschema, das ein bidirektionales Differenzsignalisierungspaar 351 und 352 enthält.
Hier ist die physikalische Schicht in einen elektrischen Unterblock
und einen logischen Unterblock potentiell logisch aufgeteilt, so
dass die physikalische Schicht zum Isolieren des Restes des Stapels
von der elektrischen Übertragung von Information und zum
Kommunizieren mit der Verbindungsschicht 303 dient.
-
In
einer Ausführungsform abstrahiert die Verbindungsschicht 303 die
physikalische Schicht 302 von oberen Schichten des Stapels
und liefert verbindungsbezogene Dienste, wie z. B. zuverlässige
Datenübertragung und Flusskontrolle zwischen verbundenen
Agenten/Instanzen, und Virtualisierung eines physikalischen Kanals/einer
physikalischen Schnittstelle in mehrere virtuelle Kanäle
und Nachrichtenklassen. Hier können virtuelle Kanäle
als mehrere virtuelle Netzwerke zur Verwendung durch obere Schichten
des Stapels angesehen werden. Zum Beispiel stützt sich
die Protokollschicht 306 potentiell auf die durch die Verbindungsschicht 303 bereitgestellte
Abstraktion zum Abbilden einer Protokollnachricht in eine Nachrichtenklasse
und somit auf einen oder mehrere virtuelle(n) Kanal/Kanäle.
-
Die
Routing-Schicht 304 liefert in einer Ausführungsform
ein flexibles Verfahren zum Routen (Leiten) von Paketen von einer
Quelle zu einem Ziel. Wie oben angegeben, kann in extrem einfachen
Topologien die Routing-Schicht 304 nicht explizit vorliegen,
sondern stattdessen in der Funktionalität der Verbindungsschicht 303 integriert
sein. Zum Beispiel kann sich die Routing-Schicht 304 auf
der Abstraktion der Verbindungsschicht 303 zum Spezifizieren
eines <Port, virutelles
Netzwerk> Paares zum
Routen eines Pakets stützen. Hier wird Routingtabelleninformation
bereitgehalten, um Routing-Informationen für Pakete zu
liefern.
-
In
einer Ausführungsform stellt die Transportschicht 305 zuverlässige
Endpunkt (end-to-end) Übertragungsdienste bereit. Ähnlich
wie die Routing-Schicht 304 basiert die Transportschicht 305 auch
optional auf Entwurfimplentierung. Beispielsweise stützt
sich die Transportschicht 305 auf Routing-Schicht 304-Dienste zum
Bereitstellen von zuverlässiger Übertragungsunterstützung
für die Protokollschicht 306. In einer Verbindungsarchitektur
enthält eine Untergruppe von Komponenten in einer Ausführungsform
die Transportschicht 305. Folglich definiert diese Untergruppe
von Komponenten Unterfelder von Paketen bezüglich der Transportschicht 305,
während andere Komponenten potentiell keine derartigen
Unterfelder definieren.
-
Die
Protokollschicht 306 dient in einer Ausführungsform
zum Implementieren eines höheren Kommunikationsprotokolls
zwischen Knoten/Agenten, wie z. B. Cache-Kohärenz, Ordnung,
Peer-zu-Peer-Kommunikation, Unterbrechungszustellung etc. Mit anderen
Worten definiert dementsprechend die Protokollschicht 306 zulässige
Nachrichten, Anforderungen, Antworten, Phasen, Kohärenzzustände,
etc. für Knoten oder Agenten, wie z. B. Home nodes, Peer-Knoten,
Caching-Knoten und Nicht-Caching-Knoten. Beispiele für
Nachrichten, wie z. B. Home-node-Nachrichten, Snoop-Nachrichten,
Antwortnachrichten etc. werden unten erörtert.
-
Es
ist zu beachten, dass Diskussion von Schichten und damit verbundener
Logik in beliebiger Weise gekoppelt werden kann. Zum Beispiel kann
gesagt werden, dass die Protokolllogik mit einer physikalischen Schicht
gekoppelt ist, d. h. Übertragungs- oder Empfangslogik.
Wie anhand von 3 ersichtlich ist, kann hier in
einer Ausführungsform die Protokolllogik mit einer physikalischen
Schicht nicht direkt gekoppelt sein, sondern über eine
Logik einer anderen Schicht. Ferner ist in einer Ausführungsform
der Verbindungsstapel mit Logik einer inneren Komponente, wie z.
B. Cache-Steuer- oder Cache-Speicher-Logik, gekoppelt, um geeignete Cache-Kohärenzaktionen
zu initiieren.
-
Überblick von einer Ausführungsform
eines MESIF-Protokolls
-
In
einer Ausführungsform liefert das grundlegende Modified
Exclusive Shared Invalid Forward(MESIF)-Protokoll ein Protokoll,
das einem Snoop-Protokoll ähnelt, ohne die potentiellen
Beschränkungen eines einzelnen Serialisierungsbusses. Wie
ein Snooping-Cache-Protokoll stützt sich MESIF auf Knoten
mit gecachten Kopien von Daten, um Kohärenz aufrechtzuerhalten.
Die Verwendung von Punkt-zu-Punkt-Verbindungen statt eines synchronen,
zentralisierten Sendens führt zum Problem von „time-warp”,
d. h. der Tatsache, dass Ereignisse anscheinend in einer anderen
Reihenfolge aus Sicht von unterschiedlichen Knoten stattfinden.
Als ein Beispiel handhabt das MESIF-Protokoll „time-warp” durch
Erkennen von potentiellen Fehlern aufgrund von „time-warp” und
liefert Protokoll- oder Softwarelösung dafür.
-
Ein
Home node ist häufig mit einer ungecacheten Kopie von Daten
verbunden. Folglich kann ein Home node an einer Transaktion bezüglich
Daten teilnehmen, die mit dem Home node verbunden sind. Jedoch muss der
Home node nicht in einem mit einer Transaktion verbundenen „kritischen
Weg” enthalten sein, sondern kann sich vielmehr ein Home
node sich in die Transaktion einwerfen (interject), um Konflikte
und time-warp-Probleme zu lösen. Aufgrund der gleichzeitigen
Sendeart des Schemas erzielt das MESIF in einer Ausführungsform
die mit Snooping-Protokollen verbundene geringe Latenz, während
es eine cachebare Kopie der Daten erlangt, in bestimmten Fällen,
bei der minimal möglichen Latenz: eine Anforderung-Antwort
in einem einzigen Umlauf.
-
In
einer Ausführungsform ist eine mit einem MESIF-Protokoll
in Beziehung stehende grundlegende Transaktion mit Senden einer
anfänglichen Anforderung an alle Peer-Knoten sowie einen
Home node verbunden. Wenn eine Kopie in Kohärenzzustand
E, F oder M gecacht ist, ist sie in der Antwort enthalten. Eine
zweite Nachricht wird danach an den Home node gesendet, die ihn
informiert, dass die Anforderung erfüllt worden ist. Wenn
die angeforderte Zeile nicht gecachet ist oder wenn nur S-Zustand-Kopien
existieren, wird die an den Home node gesendet zweite Anforderung
verwendet, um die frühere Anforderung zu bestätigen,
die der Home node inzwischen aus seinem Speicher geholt haben kann.
In jedem Fall antwortet der Home node auf die zweite Anforderung
(und potentiell auf die erste, obwohl sie manchmal kombiniert werden
können) zum Zwecke der Synchronisation und Konfliktlösung.
Man beachte, dass der Home node einen oder mehr Cache(s) aufweisen kann,
so dass er auf die anfängliche Anforderung genau wie jeder
andere Knoten antworten kann.
-
In
einer Ausführungsform werden Konflikte in einer verteilten
Art gehandhabt. Das time-warp-Problem erschwert die Detektion von
Konflikten, weil individuelle Anforderungen um eine beliebig lange
Zeit verzögert werden können. Es wird jedoch ein
Konflikt detektiert werden, wenn jeder Knoten eine Überwachung
hinsichtlich Konflikten nach Vornahme einer Anforderung durchführt.
Mehrere Knoten können potentiell einen Konflikt detektieren,
aber als ein Beispiel wird mindestens einer der Knoten einen Konflikt
detektieren. Folglich enthält eine Antwort von einem Knoten
in einer Ausführungsform potentiell Konfliktinformation.
-
In
einer Ausführungsform kann ein Knoten, der eine Kopie der
Daten von einer Antwort erhält, die Daten intern unmittelbar
nach Erhalt verwenden, aber bewirkt er nicht die für den
Rest des Systems, d. h. global sichtbare Verwendung der Daten, bis
der Knoten eine Bestätigung erhalten hat. Die Bestätigung
kann auch Befehle enthalten, dass der anfordernde Knoten eine Kopie
an einen anderen Knoten weiterleiten muss und vielleicht den Knoten
zum Verlassen seines eigenen Caches zwingen.
-
Wenn
ein Knoten auf eine Anforderung von einem anderen Knoten durch Liefern
der gecacheten Daten antwortet, verschiebt letztendlich der Knoten
in einer Ausführungsform andere Anfragen, die er für
dieselben Cache-Zeile erhält, bis der Knoten eine Antwort
von dem Home node empfängt, die die Tatsache bestätigt, dass
der Knoten die Daten weitergeleitet hat, wodurch somit sichergestellt
wird, dass alle Knoten dieselbe Reihenfolge der Übertragung
der (wahrscheinlich beschreibbaren) Cache-Zeile beachten.
-
Wie
oben angegeben, ist der Home node ein Aufbewahrungsort für
ungecachete Daten, aber der Home node kann auch einen Prozessor
und einen Cache enthalten. Wenn der Home node-Prozessor einen Fehlgriff
auf den Cache begeht, sendet der Home node Anforderungen an alle anderen(Peer-)Knoten
und handhabt der Home node die Anforderung intern so, als wäre
sie irgendeine andere Anforderung, die bei dem Home node ankommt.
Es ist zu beachten, dass dies ein Speziellfall ist, in dem der Home
node Nachrichten nicht explizit an sich selbst (den Home node) sendet.
Wenn zusätzlich eine externe Anforderung von Daten, die
lokal gecachet sind, eintrifft, antwortet der Home node geeignet.
-
Das
offenbarte Nachrichtenprotokoll definiert einen Satz von zulässigen
Nachrichten zwischen Kohärenz(Cache und Home)-Agenten,
Nicht-Caching-Agenten sowie anderen Agenten (Speichersteuerungen,
Prozessoren etc.). Ein Kohärenzprotokoll verwendet die
Nachrichten als Wörter und Grammatik in einem Algorithmus
zum Ausdrücken eines Kohärenzgedankens. Dieser
Algorithmus ordnet Anforderungen vernünftig, löst Konflikte
und beschreibt Interaktionen zwischen Caching-Agenten. Obwohl oben
ein MESIF-Protokoll beschrieben wird, muss das MESIF-Cache-Kohärenzprotokoll
nicht notwendigerweise benutzt werden. Zum Beispiel kann der Forward-Zustand
nicht benutzt werden, was zur Verwendung des bekannten MESI-Protokolls führt.
Außerdem ist zu beachten, dass die obige Diskussion einen
beispielhaften Überblick von einer Ausführungsform
für ein MESIF-Protokoll enthält. Demzufolge können
sich oben beschriebene zahlreiche Komponenten in separaten Ausführungsformen
unterscheiden. Eine nicht abschließende beispielhafte Auflistung
von potentiellen Nachrichten, die in einem Nachrichten- und/oder
Kohärenzprotokoll verwendet werden, ist unten enthalten.
-
Snoop-Nachrichten
-
In
einer Ausführungsform sind Snoop-Nachrichten auf Caching-Agenten,
wie z. B. Peer-Caching-Agenten, gerichtet. Snoop-Nachrichten enthalten
typischerweise keine Home node Kennung (Identifier (ID)), so dass
sie zu Peer-Caching-Agenten, aber nicht zu einem Home node geleitetet
werden.
- Snoop Data (SnpData): Dies ist ein Snoop zum Erhalten
von Daten in E-, F- oder S-Zuständen.
- Snoop Invalidate Own (SnpInvOwn): Dies ist ein Snoop zum Erhalten
von Daten in E- oder M-Zuständen. In einer Ausführungsform
dient ein Peer-Agent zum Liefern der Daten als Antwort auf Halten
der Daten in seinem lokalen Speicher in dem E- oder M-Zustand.
- Snoop Invalidate Invalid to Exclusive (SnpInvItoE): Dies ist
ein Snoop zur Ungültigerklärung eines Peer-Caching-Agenten
und zum Entleeren irgendwelcher M-Zustand-Daten zum Home node.
- Snoop Invalidate X to Invalid (SnpInvXtoI): Dies ist ein Snoop
zur Ungültigerklärung eines Peer-Caching-Agenten
und zum Entleeren irgendwelcher M-Zustand-Daten zum Home node.
- Snoop Invalidate No Forward (SnpInvNoFwd): Dies ist ein Snoop
zum Erhalten von Daten, die bewirken, dass ein Peer-Agent (1) die
Daten in Speicher zurückschreibt (write back), die in bestimmten
Cache-Kohärenzzuständen gehalten werden, (2) die
in einem lokalen Speicher gehaltenen Daten ungültig erklärt
und (3) die Daten dem anfordernden Knoten nicht direkt bereitstellt.
In einer Ausführungsform dient ein Peer-Agent zum Zurückschreiben
der in einem M-Zustand gehaltenen Daten. In anderen Ausführungsformen
dient ein Peer-Agent auch zum Zurückschreiben der in einem
E-Zustand, S-Zustand, F-Zustand oder einer Kombination derselben gehaltenen
Daten.
-
Home-Nachrichten
-
Die
folgenden Nachrichten sind mit einem Home node verbunden. Beispielsweise
sind einige der folgenden Anforderungsnachrichten an einen Home
node. In der Tat beachte man die Ähnlichkeit zwischen einigen
der Snoop-Nachrichten und Home-Nachrichten. Zum Beispiel sind SnpInvNoFwd
von oben und RdInvNoFwd von unten ähnlich, außer
dass die Snoop-Nachricht auf Peer-Caching-Agenten gerichtet ist
und die Lesenachricht auf einen Home Agent gerichtet ist. Folglich
wird häufig gesagt, dass sowohl die SnpInvNoFwd als auch
die RdInvNoFwd derselbe Nachrichtentyp, wie z. B. ein Read Invalidate-Typ,
ein Snoop Invalidate-Typ, ein Read Invalidate No Forward-Typ und
der Snoop Invalidate No Forward-Typ, sind.
-
Andere
Home-Nachrichten schließen Home-Zurückschreib-Markierungsnachrichten
ein. Hier können Daten über WbData-Nachrichten
separat gesendet werden, die in irgendeiner Reihenfolge bezüglich
der Markierungsnachrichten empfangen werden können. Andere
Beispiele für Home-Nachrichten, die unten enthalten sind,
sind Home-Snoop-Antwortnachrichten von Caching-Agenten an Home Agents
und Home-Konfliktbestätigungsnachrichten zum Signalisieren
eines Beginns einer Konfliktphase.
-
- Read Data (RdData): Dies ist eine Anforderung von Daten
in einem Exklusiv(E)-Zustand sowie potentiell einem Forward(F)-Zustand
oder einem S-Zustand in Abhängigkeit von der Ausführungsform.
- Read Invalidate Own (RdInvOwn): Dies ist eine Anforderung einer
Cache-Zeile in M- oder E-Zuständen.
- Invalidate Invalid to Exclusive (InvItoE): Dies ist eine Anforderung
einer Cache-Zeile ohne Daten.
- Non-Snoop Read (NonSnpRd): Dies ist eine Anforderung zur Durchführung
eines nicht kohärenten Lesens aus Speicher.
- Non-Snoop Write (NonSnpW): Dies ist eine Anforderung zur Durchführung
eines nicht kohärenten Schreibens in Speicher.
- Read Invalidate No Forward (RdInvNoFwd): Dies ist eine Anforderung
zum Lesen von Daten aus Speicher. In einer Ausführungsform
dient ein Home node zum Warten auf Daten, die aus einem Caching-Agenten
als Antwort auf Empfangen dieser Nachricht zurückzuschreiben
sind, und dann zum Liefern von korrekten Daten an den anfordernden
Agenten nach Empfang der Daten, die zurückschrieben wurden.
In einer anderen Ausführungsform dient der Home node zum
Empfangen einer Antwortnachricht von einem Peer-Caching-Agenten, das
eine in Bezug genommene Zeile in einem Ungültig-Zustand
gehalten wird. Hier dient der Home node zum Liefern der korrekten
Daten aus seinem lokalen Speicher oder dem ursprünglichen
Speicheraufbewahrungsort.
-
Wie
oben diskutiert, ist zu beachten, dass eine RdInvNoFwd- einer SnpInvFwd-Nachricht ähnelt;
jedoch ist häufig bei einer Snoop-Nachricht eine Home node-Kennung
(ID) nicht in der Nachricht enthalten, so dass ein Snoop nicht zum
Home node geleitet wird, während eine RdInvNoFwd zu einem
Home node geleitet wird.
-
- Write Back Modified to Invalid, Shared, or Exclusive (WbMtoI,
WbMtoS und WbMtoE): Die ist eine Anforderung zum Zurückschreiben
einer Cache-Zeile in einem M-Zustand in Speicher und entsprechendes Überführen
des Cache-Zeilenzustands in einen Ungültig-Zustand, einen
Geteilt-Zustand oder einen Exklusiv-Zustand. In einer Ausführungsform
sind diese Nachrichten Markierungsnachrichten zum Anzeigen, dass
Daten gesendet werden sollen. während die Daten tatsächlich über
eine separate Nachricht, wie z. B. eine WB*Data*-Nachricht transportiert
werden.
- Response Invalid or Shared (RspiI oder RspS): Peer-Agent wird
dementsprechend mit Zeile in Ungültig-Zustand oder in einem
S-Zustand gelassen.
- Response Forward Invalid or Shared (RspFwdI oder RspFwdS): Peer
hat Daten an den Anforderer gesendet und die Zeile bleibt entsprechend
in einem Ungültig- oder Geteilt-Zustand.
- Response Forward Invalid or Shared Writeback (RspFwdIWb oder
RspFwdSWb): Peer hat Daten an den Anforderer und eine WbIData an
einen Home node gesendet und die Zeile bleibt entsprechend in dem
Ungültig- oder Geteilt-Zustand.
- Response Invalid or Shared Writeback (RespIWb oder RespSWb):
Peer hat die Daten mit einer in-flight-WbIData-Nachricht an den
Home geleert und hat keine Nachricht an den Anforderer gesendet.
- Response Conflict (RspCnflt): Peer bleibt mit Zeile in Ungültig-Zustand
und der Peer weist eine widersprechende offene Anforderung auf.
- Acknowledge Conflict (AckCnflt): Bestätige Empfang
eines Datenabschluss/Datenbewilligung und Abschluss/Zwangsbestätigung-Konflikts.
-
Nicht-Daten-Antwortnachrichten
-
In
einer Ausführungsform enthalten Nicht-Daten-Antwortnachrichten
Bewilligungsnachrichten zum Bewilligen von Eigentümerschaft
an einer Zeile ohne Senden von Daten. Nicht-Daten-Antwortnachrichten
können auch Abschlussnachrichten zum Signalisieren von
Abschluss und potentiellen Extrahieren von Daten von einem Eigentümer
unter Konfliktbedingungen enthalten.
-
- Grant_Completion (GntCmp): Bewilligungsexklusive Eigentümerschaft
ohne Daten Grant Force Acknowledge Conflict (Gnt_FrcAckCnflt): Bewilligungsexklusive
Eigentümerschaft ohne Daten plus ein Zwangsbestätigungskonflikt.
- Completion (CMP): Alle Snoop-Antworten erfasst und keinen Konflikt
detektiert.
- Force Acknowledge Conflict (FrcAckCnflt): Snoop-Antworten erfasst
für einen Bestätigungskonflikt.
- Complete Forward Invalidate Own (Cmp_FwdInvOwn): Schließe
Anforderung ab, leite die Zeile in Exklusiv- oder Modifiziert-Zustand
an den Anforderer und erkläre lokale Kopie für
ungültig.
-
Datenantwortnachrichten
-
- DataC_*: Daten in korrespondierendem MESIF-Zustand.
- DataC_*_Cmp: Daten in korrespondierendem ESIF-Zustand mit einem
Abschuss.
- DataC_*_FrcAckCnflt: Daten in korrepondierendem ESIF-Zustand
mit einem FrcAckCnflt.
- Wb*Data: Schreibe Daten zurück (writeback), Übergang
in korrespondierenden E-, S- oder I-Zustand.
- Non-Snoop Write Data (NonSnpWr): Dies ist ein nicht-kohärentes
Schreiben in Speicher.
-
In 4a ist
eine Ausführungsform eines Protokolldiagramms zur Nachrichtenübertragung
zwischen mehreren Knoten dargestellt. Vier Knoten oder Agenten sind
dargestellt: Ein I/O-Hub, ein Home node, ein Prozessor A mit einem
Cache und ein Prozessor B mit einem Cache. Man beachte, dass, wie
dargestellt, die Prozessoren A, B Peer-Caching-Agenten enthalten,
während der I/O-Hub ein Non-Caching Agent, d. h. ein Zeuge (witness),
ist.
-
Das
in
4a dargestellte Protokoll ergibt sich als Antwort
auf die folgende stark vereinfachte Wechselwirkungsstruktur:
Prozessor
B: X = 1 | //B
schreibt in Daten X |
Prozessor
A: wenn (X == 1) Y = 1 | //A
führt Teil-Rd von X durch & schreibt in Y |
IOH:
wenn (Y == 1) behauptet (X == 1) | //IOH
führt ein Nicht-Snoop-RD von Y und X |
| durch |
-
Man
beachte hier, dass in einer Ausführungsform die Verbindungsarchitektur
Teilspeicherzugriffe und Nicht-Snoop-Speicherzugriffe unterstützt.
Zum Beispiel enthält ein Teilspeicherzugriff, der auch
als ein nicht cachebarer (un-cacheable(UC))-Speicherzugriff bezeichnet
werden kann, einen Zugriff auf einen Teil einer Cache-Zeile. Hier
enthält ein Teil der Cache-Zeile potentiell ungültige
Daten, so dass ein Teil entweder aktualisiert oder gelesen wird,
gemäß dem Speicherzugriff. Zusätzlich
bezieht sich ein Nicht-Snoop-Speicherzugriff auf einen nicht kohärenten
Speicherzugriff von einem Nicht-Caching-Agenten, wie z. B. dem I/O-Hub.
-
Unter
spezieller Bezugnahme auf 4a führt
der Prozessor B das Schreiben auf Daten X, d. h. X = 1 durch. Als
Antwort auf das Teillesen von Daten X von dem Prozessor A wird eine
RdInvOwn(X)-Nachricht an den Home node gesendet und eine SnpInvOwn(X)-Nachricht
an den Peer-Agenten B gesendet. Da B gegenwärtig die mit
Daten X verbundene Cache-Zeile in einem modifizierten Zustand hält,
liefert der Agent B als Antwort auf Empfang der SnpInvOwn(X) die
Daten X in einer DataC_M(X = 1)-Nachricht an den anfordernden Agenten
A und sendet RspFdwI(X)-Nachricht an den Home node, um anzuzeigen,
dass er die Daten an den anfordernden Agenten A geliefert und die
Cache-Zeile in dem Ungültig-Zustand, d. h. LLC = M, I,
gelassen hat. Hier sendet der Home node eine Abschluss(X)-Nachricht
an den Prozessor A, um einen Abschluss der Transaktion anzuzeigen.
-
Nachdem
der Agent B die Daten an den anfordernden Agenten A sendet, aber
bevor der Agent A die Abschlussnachricht erhält, gibt jedoch
der Agent B eine Anforderungsnachricht d. h. SnpInvOwn(X), die Daten X
anfordert und als eine separate Transaktion mit gepunkteten Linien
dargestellt ist, aus. Folglich detektiert der Agent A einen Konflikt
bezüglich der Daten X. Demzufolge sendet der Agent A eine
RspCnflt an den Home node und später eine AckCnflt(X) als
Antwort auf Erhalt von Daten/den Abschluss.
-
Demzufolge
sendet der Home node, als der Vermittler von Konflikten, einer Agent
A Cmp_FwdInvOwn an Agent A. Als Antwort schreibt Agent A X = 1 an
den Home-nod mit Nachrichtenmarkierung RspIWb(X) und Datennachricht
WbIData(X = 1) zurück und führt Agent A das cachebare
Schreiben auf Y, d. h. Y = 1, durch. Hier wird Y = 1 an den Home
Agent mit Markierung WbMtoI(Y) und Datennachricht WbIData(Y = 1)
zurückgeschrieben.
-
Die
Rückschreib(writeback)-Nachrichten von dem Agenten A zum
Liefern des Werts von X als 1 werden jedoch aufgrund einer Vielzahl
von Gründen verzögert. Zwischenzeitlich führt
der Nicht-Caching-Agent I/O-Hub das Nicht-Snoop-Lesen von Y, d.
h. NonSnpRd(Y) und das Nicht-Snoop-Lesen von X, d. h. NonSnpRd(X),
durch. Wie anhand der Darstellung ersichtlich ist, weist X in der
DataC_I_Cmp(X = 0)-Nachricht, die als Antwort auf die NonSnpRd(X)
erfolgt, einen Wert von 0 statt 1 aufgrund der Verzögerung
der Rückschreib(writeback)-Nachrichten vom Agenten A zum
Home node auf. Im wesentlichen wird ein ungültiger Wert von
0 dem I/O-Hub anstelle des gültigen Werts von 1 bereitgestellt,
was daran liegt, dass ein früheres Teillesen in einen Konflikt
verwickelt ist und ein Nicht-Snoop-Lesen von einem Nicht-Caching-Agenten
durchgeführt wird, bevor die korrekten Daten in dem Home
node empfangen werden.
-
Hier
können die potentiellen Probleme dahingehend zusammengefasst
werden, dass die Read Invalidate Own-Nachricht potentiell bewirkt,
dass ein Peer-Agent (B) eine modifizierte Kopie an den Teilleseanforderer
(A) ohne ein Zurückschreiben in den Speicher weiterleitet
und mit der Zeit A globale Beobachtung erreicht und den korrekten
Wert von X an den Home node zurückliefert, wobei der Home
node bereits potentiell einen falschen Wert an den I/O-Hub geliefert
hat.
-
Somit
wird in einer Ausführungsform ein spezieller Nachrichtentyp
für Teilspeicherzugriffe, wie z. B. ein Teillesen, verwendet.
In einer Ausführungsform enthält der Nachrichtentyp
eine Snoop-Ungültigerklärungs-Nachricht, die an
einen Peer-Agenten gerichtet ist, um anzuzeigen, dass eine zugehörige
Cache-Zeile für ungültig erklärt und
nicht an den Teilleseanforderer weitergeleitet werden sollte. Außerdem
dient in einer anderen Ausführungsform die Nachricht auch
dazu, dem Peer-Agenten anzuzeigen, dass Daten in einem speziellen
Cache-Kohärenzzustand, wie z. B. einem modifizierten Zustand,
in den Speicher, d. h. den Home node, zurückgeschrieben
werden sollten.
-
In ähnlicher
Weise enthält der spezielle Nachrichtentyp in einer Ausführungsform
eine an einen Home node gerichtete Leseungültigkeitserklärungsnachricht
anstelle einer an einen Peer-Agenten gerichteten Snoop-Ungültigerklärungsnachricht.
In einer Ausführungsform dient ein Home node zum Liefern
der korrekten Daten an den Teilleseanforderer als Antwort auf Erhalt
der Leseungültigerklärungsnachricht. Hier enthält
Bereitstellen der korrekten Daten potentiell Warten auf einen Cache-Agenten,
der die Snoop-Nachricht zum Zurückschreiben seiner Kopie
der in dem speziellen Cache-Kohärenzzustand, wie z. B.
einem modifizierten Zustand, gehaltenen Daten erhielt, und Liefern
der Kopie an den Teilleseanforderer. In einer anderen Ausführungsform enthält
das Liefern der korrekten Daten potentiell Empfangen einer Antwort
von einem Peer-Agenten, dass er die Cache-Zeile in einem ungültigen
Zustand hält, und Liefern einer lokalen Kopie der Daten
in dem Home node oder einer Kopie der Daten von einem ursprünglichen
Aufbewahrungsort, der mit dem Home node verbunden ist, an den Teilleseanforderer.
-
Als
ein erstes Beispiel enthält der Nachrichtentyp eine Read
Invalidate No Forward (RdInvNoFwd)-Nachricht, wobei die Snoop-Invalidate-Nachricht
an den Peer-Agenten eine Snoop Invalidate No Forward(SnpInvNoFwd)-Nachricht
enthält und die Read Invalidate- Nachricht an den Home Node
eine Read Invalidate No Forward-Nachricht enthält. Der
Nachrichtentyp und die Nachrichten sind jedoch nicht so beschränkt. In
der Tat wird in einer anderen Ausführungsform eine andere
Snoop Invalidate-Nachricht, wie zum Beispiel SnpInvItoE oder SnpInvXtoI
verwendet. Wie oben diskutiert, dient hier der Snoop zum Ungültigerklären
und Anzeigen durch die Nachricht selbst oder durch Implementierung
des generischen Protokolls, dass Daten nicht direkt von dem empfangenen
Agenten an den ein Teillesen fordernden Agenten weitergeleitet werden
sollen.
-
4b stellt
eine Ausführungsform eines Protokolldiagramms zum Liefern
von gültigen Daten als Antwort auf Teil- und Nicht-Snoop-Speicherzugriffe
dar. Ähnlich wie das Diagramm von 4a sind
dieselben Agenten im oben erwähnten Wechselwirkungsmuster
involviert. Hier wird jedoch statt Senden einer RdInvOwn(X)-Nachricht
an den Home node und einer SnpInvOwn(X)-Nachricht an den Peer-Agenten
B als Antwort auf die Teilleseanforderung durch Agent A eine RdInvNoFwd(X)-Nachricht
an den Home node gesendet und eine SnpInvNoFwd(X)-Nachricht an den
Peer-Agenten B als Antwort auf die Teilleseanforderung gesendet.
-
Wenn
hier der Peer-Agent B die SnpInvOwn(X)-Nachricht empfängt,
wird die mit den Daten verbundene Cache-Zeile in einem modifizierten
Cache-Kohrenzzustand gehalten. Somit wird die modifizierte Kopie der
Daten, d. h. X = 1, zu dem Home node zurückgeschrieben,
d. h. zurückgeschoben, durch Nachrichten RspIWb(X) und
WbIData(X = 1), statt dass Daten direkt an den Teilleseanforderagenten
A in 4a geliefert werden.
-
Ein ähnlicher
Protokollfluss wie in 4a führt dann mit einer
Konfliktphase fort. Man beachte jedoch, dass, wenn die NonSnpRd(X),
d. h. Nicht-Snoop-Lesen, von dem I/O-Hub angefordert wird, die gültigen
Daten von X = 1 bereits in den Speicher zurückgeschrieben
worden sind, selbst wenn die Verzögerung von RspI(X) nach
dem Nicht-Snoop-Lesen auftritt. Somit führt in dieser Ausführungsform
die Verwendung einer Snoop-Invalidate No Forward-Nachricht anstelle
der Snoop Invalidate Own-Nachricht für das Teillesen zu
einer Korrektur der obengenannten potentiellen Probleme. Mit anderen
Worten werden als Antwort auf die Snoop Invalidate No Forward-Nachricht
für das Teillesen die Daten nicht direkt an den Teilleseanforderer
weitergeleitet und erfolgt das Zurückschreiben von modifizierten
Daten vor dem Nicht-Snoop-Lesen durch den I/O-Hub.
-
In
5a ist
eine Ausführungsform eines Protokolldiagramms für
ein anderes Szenario, das bei einer Speicherordnungsverletzung potentiell
auftreten kann, dargestellt. Das in
5a dargestellte
Protokoll ergibt sich als Antwort auf das folgende beispielhafte
Wechselwirkungsmuster:
IOH:
Daten = Neu; Flag = Neu; | //NS
Schreiben zu Daten & Flag |
A:
Wenn (Flag == Neu) behaupte (Daten == Neu); | //Teillesen
von Daten und Flag |
B:
Lese Daten == Alt; | //cachebares
Lesen von Daten |
-
Als
erstes initiiert Agent B eine Cache-kohärente Lesetransaktion
von Daten. RdData- und SnpData-Nachrichten werden an den Home node
und Peer-Agenten A gesendet. Peer-Knoten A antwortet dem Home node
mit einer RspI, um anzuzeigen, dass eine mit Daten verbundene Cache-Zeile
in einem Gültig-Zustand geblieben ist. Demzufolge liefert
der Home node eine DataC_E_E_Cmp-Nachricht an Agent B, der die Cache-Zeile
in einen Exklusiv-Zustand mit Daten = 0, d. h. alt, überführt.
Außerdem initiiert der I/O-Hub oder Erzeuger Nicht-Snoop-Schreibtransaktionen
mit dem Home, was dazu führt, dass Daten und Flag jeweils
auf neu, d. h. einen Wert von 1, gesetzt werden.
-
Verbraucheragent
A initiiert dann Teillesetransaktionen von Flag und Daten. Wenn
jedoch Peer-Agent B die SnpInvOwn(D) empfängt, hält
Agent B die mit den Daten verbundene Cache-Zeile in einem Exklusiv-Zustand.
Folglich liefert der Peer-Agent B seine gecachte Kopie von Daten,
d. h. Daten gleich alt, und eine RspFwdI-Nachricht an den Home node.
Leider führt As Lesen von Daten, statt Holen der letzten
Kopie von Daten, die der Erzeuger I/O-Hub, in Speicher abgelegt
hat, zu einer veralteten Kopie in Bs Cache zur Weiterleitung an
A, obwohl As Lesen von Flag nicht die letzte Kopie aus dem Speicher
erhält.
-
Beispielsweise
nehme man an, dass I/O-Hub das Nicht-Snoop-Schreiben im Auftrag
einer I/O-Einrichtung durchführt, die mit dem Prozessor
A kommuniziert. Idealerweise überprüft der Prozessor
A das Flag, um zu sehen, warm neue Daten eingetroffen sind, was
dem Prozessor ermöglicht, andere Operationen durchzuführen,
bis die Daten für die Handhabung bereit sind. In der dargestellten
Gruppe von Bedingungen liest jedoch der Prozessor A das Flag als
neu, um darauf hinzuweisen, dass neue Daten eingetroffen sind, und
arbeitet er potentiell an ungültigen, alten Daten, in der
Annahme, dass sie neue Daten sind, auf der Grundlage des neuen Flag-Werts.
Demzufolge führt diese Speicherordnungsverletzung potentiell
zu einer ungültigen Ausführung.
-
In 5b ist
eine Ausführungsform eines Protokolldiagramms zum Liefern
von geeigneter Speicherordnung für das obengenannte Wechselwirkungsmuster
dargestellt. Hier wird die ursprüngliche kohärente
Lesetransaktion mit Anforderung-, Antwort- und Abschlussphasen durchgeführt.
In ähnlicher Weise werden die Nicht-Snoop-Schreibvorgänge
von einem Nicht-Caching-Agenten durchgeführt, um Daten
und Flag zu aktualisieren. Für die Teillesevorgänge
von Flag und Daten werden jedoch Read Invalidate No Forward- und
Snoop Invalidate No Forward-Nachrichten verwendet. Folglich leitet
der Peer-Agent B in beiden Fällen Daten nicht direkt an
Verbraucher/teilleseanfordernde Agenten A weiter. Stattdessen wird
mit in dem Exklusiv-Zustand gehaltenen Daten in dieser Ausführungsform
eine RspI an den Home node gesendet und die Cache-Zeile in einen
Ungültig-Zustand überführt. Außerdem
liefert der Home node die korrekten Daten, d. h. Daten = neu, die von
dem I/O-Hub-Erzeuger hinterlegt wurden.
-
Wie
anhand des Vorangehenden ersichtlich ist, können somit
Speicherordnungsverletzungen, die sich anhand von Teillesevorgängen
und nicht kohärenten Speicherzugriffen ergeben, durch Verwendung
von Protokollnachrichten für die Teillesevorgänge,
damit Peer-Agenten deren gecachten Kopien für ungültig
erklären und nicht weiterleiten, vermieden werden. Oben
werden einige erläuternde Beispiele für Speicherordnungsverletzungen
und wie sie korrigierbar sind, diskutiert. Dennoch sind durch die
Verwendung von genannten Nachrichten potentiell viel mehr Wechselwirkungsmuster
zwischen Teilzugriffen und nicht kohärenten Zugriffen korrigierbar.
Außerdem führt die Implementierung dieser Protokollnachrichten,
in einer Ausführungsform, in Protokolllogik potentiell
zu vermindertem Risiko, das Legacy-Softwarespeicherordnungsverletzungen
verursacht werden, reduziert die Last auf Software-Programmierer,
an Softwarebeschränkungen festzuhalten, um Speicherordnung
zu erzwingen, und ermöglicht neue Hardware- und Softwarenutzungsmodelle.
-
Ein
hierin verwendetes Modul bezieht sich auf irgendeine Hardware, Software,
Firmware oder eine Kombination derselben. Häufig variieren
und potentiell überlappen Modulgrenzen, die als gewöhnlich
separat dargestellt sind. Zum Beispiel können ein erstes
und ein zweites Modul sich Hardware, Software, Firmware oder eine
Kombination derselben teilen, während sie potentiell etwas
unabhängige Hardware, Software oder Firmware beibehalten
können. In einer Ausführungsform schließt
die Verwendung des Begriffes Logik Hardware, wie z. B. Transistoren,
Register oder andere Hardware, wie z. B. programmierbare logische
Einrichtungen, ein. In einer Ausführungsform kann jedoch
Logik auch Software oder mit Hardware integrierten Code, wie z.
B. Firmware oder Mikrocode, enthalten.
-
In
der hierin verwendeten Form schließt ein Wert irgendeine
bekannte Darstellung einer Zahl, eines Zustands, eines logischen
Zustands oder eines binären logischen Zustands ein. Häufig
bezieht sich die Verwendung von Logikebenen, Logikwerten oder logischen
Werten auch auf 1 und 0, die binäre Logikzustände einfacher
präsentieren. Zum Beispiel bezieht sich eine 1 auf eine
hohe Logikebene und 0 bezieht sich auf eine niedrige Logikebene.
In einer Ausführungsform kann eine Speicherzelle, wie z.
B. ein Transistor oder eine Flashzelle, einen einzigen logischen
Wert oder mehrere logische Werte halten. Andere Darstellungen von
Werten in Computersystemen sind jedoch verwendet worden. Zum Beispiel
kann die Dezimalzahl Zehn auch als ein Binärwert von 1010
und als ein hexadezimaler Buchstabe A repräsentiert werden.
Somit enthält ein Wert jede Darstellung von Information,
die in einem Computersystem gehalten werden kann.
-
Ferner
können Zustände durch Werte oder Teile von Werten
repräsentiert werden. Beispielsweise kann ein erster Wert,
wie z. B. eine logische Eins, einen Standard- oder Anfangszustand
repräsentieren, während ein zweiter Wert, wie
z. B. eine logische Null, einen Nicht-standard-Zustand repräsentieren
kann. Zusätzlich beziehen sich die Begriffe Rücksetzen
und Setzen in einer Ausführungsform auf einen Standard-
bzw. einen aktualisierten Wert oder Zustand. Zum Beispiel enthält
ein Standardwert potentiell einen hohen logischen Wert, d. h. Rücksetzen,
während ein aktualisierter Wert potentiell einen niedrigen
logischen Wert, d. h. Setzen, enthält. Man beachte, dass
irgendeine Kombination von Werten zum Repräsentieren einer
beliebigen Zahl von Zuständen verwendet werden kann.
-
Die
Ausführungsformen von Verfahren, Hardware, Software, Firmware
oder Code, die/der oben dargelegt sind/ist, können über
Befehle oder Code implementiert werden, die/der auf einem maschinenzugänglichen
oder maschinenlesbaren Medium gespeichert sind bzw. ist, das durch
ein Verarbeitungselement ausführbar ist. Ein maschinenzugängliches/lesbares
Medium enthält irgendeine Einrichtung, die Information
liefert (d. h. speichert und/oder sendet) in einer durch eine Maschine
wie z. B. einen Computer oder ein elektronisches System, lesbaren
Form. Zum Beispiel enthält ein maschinenzugängliches
Medium Direktzugriffsspeicher (Random-Access Memory (RAM)), wie
z. B. SRAM (Static RAM) oder DRAM (Dynamic RAM); ROM, magnetisches
oder optisches Speichermedium; Flash-Speichereinrichtungen; elektrische
Speichereinrichtung, optische Speichereinrichtungen, akustische
Speichereinrichtungen oder andere Form von Fortpflanzungssignal(z. B.
Trägerwellen, Infrarotsignale, digitale Signale)-Speichereinrichtung
etc. Zum Beispiel kann eine Maschine auf eine Speichereinrichtung
durch Empfang eines Fortpflanzungssignals, wie z. B. einer Trägerwelle,
von einem Medium zugreifen, das die auf dem Fortpflanzungssignal
zu sendende Information halten kann.
-
Die
Bezugnahme auf „eine (1) Ausführungsform” oder „eine
Ausführungsform” in der gesamten Beschreibung
bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder
eine Charakteristik, das/die in Verbindung mit der Ausführungsform
beschrieben wurde, in mindestens einer Ausführungsform
der vorliegenden Erfindung enthalten ist. Somit muss sich das Auftreten
der Phrasen „in einer (1) Ausführungsform” oder „in
einer Ausführungsform” an zahlreichen. Stellen
in der gesamten Beschreibung nicht notwendigerweise immer auf dieselbe
Ausführungsform beziehen. Außerdem können
die bestimmten Merkmale, Strukturen oder Charakteristiken in irgendeiner
geeigneten Weise in einer oder mehreren Ausführungsformen
kombiniert werden.
-
In
der vorangehenden Beschreibung erfolgte eine ausführliche
Beschreibung unter Bezugnahme auf spezielle beispielhafte Ausführungsformen.
Es wird jedoch ersichtlich sein, dass zahlreiche Modifikationen
und Änderungen daran vorgenommen werden können,
ohne aus dem breiten Geist und Schutzbereich der Erfindung zu gelangen,
wie sie in den beigefügten Ansprüchen dargelegt
ist. Die Beschreibung und die Zeichnungen sind somit in einem erläuternden
Sinne statt in einem beschränkenden Sinne zu betrachten.
Außerdem bezieht sich die vorangehende Verwendung von Ausführungsformen
und andere beispielhafte Sprache nicht notwendigerweise auf dieselbe
Ausführungsform oder dasselbe Beispiel, sondern bezieht
sich auf unterschiedliche und verschiedene Ausführungsformen
sowie potentiell auf dieselbe Ausführungsform.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste
der vom Anmelder aufgeführten Dokumente wurde automatisiert
erzeugt und ist ausschließlich zur besseren Information
des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen
Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt
keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-