-
Die vorliegende Erfindung betrifft einen Kreuzschienenschalter für ein symmetrisches Multiprozessorsystem, insbesondere einen Kreuzschienenschalter zum Reduzieren der Latenzzeit von exklusiven Leseanforderungen in einem symmetrischen Multiprozessorsystem.
-
Ein symmetrisches Multiprozessor-(SMP-)System enthält ein oder mehrere CPU-Zellplatinen. Eine CPU-Zellplatine enthält eine oder mehrere CPUs, Cache und Speicher. Die Zellplatinen sind durch ein „Systemgewebe” verbunden, typischerweise ein Satz von Verbindungen, die einen oder mehrere Kreuzschienenschalter umfassen. Daten können zwischen Zellplatinen (und auch zwischen CPUs auf einer einzigen Zellplatine) gemeinschaftlich verwendet werden, aber ein Protokoll muss befolgt werden, um Cache-Kohärenz beizubehalten. Obwohl Caches Daten gemeinschaftlich verwenden können, können die gleichen Speicheradressen niemals in unterschiedlichen Cachespeichern unterschiedliche Werte aufweisen.
-
Eine gemeinsame Cache-Kohärenzimplementierung verwendet Verzeichnisse, die als Cache-Kohärenzverzeichnisse bezeichnet werden, die jedem Cache zugeordnet sind. Ein Cache-Kohärenzverzeichnis zeichnet die Adressen aller Cachezeilen auf, zusammen mit dem Status (z. B. ungültig, gemeinschaftlich verwendet, exklusiv) und der Position der Zeile in dem System. Ein Bitvektor wird allgemein verwendet, um die Cachezeilenposition darzustellen, wobei jedes Bit einem Prozessor oder (bei einigen Implementierungen) einem Prozessorbus entspricht. Bei den Informationen in dem Cache-Kohärenzverzeichnis wird ein Protokoll implementiert, um die Cache-Kohärenz beizubehalten.
-
Bei einem typischen Cache-Kohärenzprotokoll hat jede Cacheadresse ein Ausgangsverzeichnis, und exklusive Lesevorgänge, die den Cache irgendwo in dem System verfehlen, gehen zuerst zu diesem Verzeichnis. Sofern die verfehlte Adresse nicht „lokal” ist (an einer bestimmten Zellplatine bzw. Schaltungsplatine), muss ein Cachefehlschlag eine Überquerung des Systemgewebes durchführen. Abhängig von der Konfiguration des Systemgewebes müssen ein oder mehrere Kreuzschienenschalter überkreuzt werden, um das Ausgangsverzeichnis für eine bestimmte Adresse zu erreichen (falls die verfehlte Adresse keine lokale Adresse war).
-
Sobald die Anforderung das Ausgangsverzeichnis erreicht, gibt es drei mögliche Fälle:
- 1. Es existieren keine entfernten Kopien der Zeile (wie es von dem Verzeichnis bestimmt wurde). In diesem Fall ruft das Ausgangsverzeichnis die angeforderte Zeile entweder von dem lokalen Speicher oder lokalen Cache ab und sendet dieselbe über das Systemgewebe an die anfordernde CPU.
- 2. Entfernte gemeinschaftlich verwendete Kopien existieren. In diesem Fall muss das Ausgangsverzeichnis „Ungültig-Machen”-Befehle an alle Knoten senden, die Kopien enthalten, und dann die angeforderte Zeile entweder von dem lokalen Speicher oder lokalen Cache abrufen, und dieselbe über das Systemgewebe an den anfordernden Knoten senden.
- 3. Entfernte exklusive Kopien existieren. Das Ausgangsverzeichnis ruft diese Kopie ab, macht dieselbe in dem entfernten Cache ungültig und sendet dieselbe dann an den anfordernden Knoten.
-
Die Latenzzeit dieser Anforderungen wird dominiert durch die Anzahl von Sprüngen, von denen jeder die Zeit erhöht, die erforderlich ist, um das Systemgewebe zu überqueren. Während SMPs größer werden, erhöht sich die Anzahl von Kreuzschienenschaltern und die Länge der Verbindungen zwischen den Knoten, was wiederum die Durchschnittszeit verlängert, die benötigt wird, um einen Sprung durchzuführen. Außerdem halten einige SMP-Entwürfe das Verzeichnis in dem Hauptspeicher (im Gegensatz zum Cache), was bewirkt, dass der obige Fall 3 noch mehr Zeit benötigt.
-
Es gibt ein Entwurfsproblem mit dem obigen Systemtyp, der ähnlich ist wie das Leistungsproblem: das Erhöhen der Anzahl von Kreuzschienenschaltern und Verbindungen reduziert die Sprunglatenzzeit, aber die Kosten dieser zusätzlichen Komponenten und die Schwierigkeit, dieselben in einem Gehäuse einer bestimmten Größe zu entwerfen und dieselben mit Leistung zu versorgen und zu kühlen, sind keine kleinen Probleme.
-
Die
EP 0 489 583 A2 zeigt ein eng gekoppeltes, kohärentes Computersystem, welches einen Kreuzschienenschalter aufweist, über den die Bandbreite des Speichersystems und des Speicherbusses erhöht werden kann, wodurch unerwünschte Engpässe vermieden werden. Lokale Verzeichnisse eines für jeden Knoten, der durch den Kreuzschienenschalter verbunden wird, sind vorgesehen, um gültige Daten nachzuverfolgen und Engpässe aufgrund von Cache-Kohärenzüberprüfungen zu vermeiden.
-
Es ist die Aufgabe der vorliegenden Erfindung, eine Vorrichtung zum Aufrechterhalten der Kohärenz von Cachespeichern in einem Multiprozessorsystem zu schaffen, bei der die mittlere Latenzzeit für Lesevorgänge verkürzt werden kann.
-
Diese Aufgabe wird durch eine Vorrichtung gemäß Anspruch 1 gelöst.
-
Bevorzugte Ausführungsbeispiele der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf beiliegende Zeichnungen näher erläutert. Es zeigen:
-
1A ein Diagramm eines beispielhaften Ausführungsbeispiels des vorliegenden Systems;
-
1B ein Diagramm eines beispielhaften Ausführungsbeispiels des vorliegenden Systems mit mehreren Kreuzschienenschaltern;
-
2A und 2B Flussdiagramme, die einen beispielhaften Satz von Schritten zeigen, die beim Verarbeiten einer exklusiven Leseanforderung bei einem Ausführungsbeispiel des vorliegenden Systems durchgeführt werden; und
-
3 ist ein Flussdiagramm, das einen beispielhaften Satz von Schritten zeigt, die durch ein Ausführungsbeispiel des vorliegenden Systems beim Verarbeiten eines Cachefehltreffers durchgeführt werden.
-
Das vorliegende System umfasst ein symmetrisches Multiverarbeitungs-(SMP-)System, das zumindest einen Kreuzschienenschalter umfasst. 1A ist ein Diagramm eines beispielhaften Ausführungsbeispiels des vorliegenden Systems 100, das eine Mehrzahl von Zellplatinen 102(*) umfasst, die über einen Kreuzschienenschalter 101 miteinander gekoppelt sind. Bei dem vorliegenden Dokument bezieht sich ein Sternchen in Klammern '(*)' nach einem Bezugszeichen auf ein einzelnes oder mehrfaches Auftreten der Entität, die durch das Bezugszeichen bezeichnet wird, wobei eine Mehrzahl von Entitäten des Typs, die so bezeichnet sind, in zumindest einem Ausführungsbeispiel existieren können. 1B ist ein Diagramm eines beispielhaften Ausführungsbeispiels des vorliegenden Systems mit einer Mehrzahl von Kreuzschienenschaltern 101(1), 101(2), ... 101(N). Es sollte angemerkt werden, dass alternative Ausführungsbeispiele des vorliegenden Systems mehr als einen Kreuzschienenschalter 101(*) umfassen können, der auf analoge Weise funktioniert wie der einzelne Kreuzschienenschalter, der hierin beschrieben ist, mit bestimmten Cache-Kohärenzverzeichnis-Adressierungsunterschieden, wie sie nachfolgend beschrieben sind.
-
Wie es in 1A gezeigt ist, umfasst jede Zellplatine 102(*) einen oder mehrere Prozessoren (CPUs) 103, die einen Prozessorcachespeicher 106, einen Speicher 105, der durch die Prozessoren gemeinschaftlich verwendet wird, und eine Speichersteuerung 104 umfassen. Jede physikalische Zellplatine 102 weist eine entsprechende analoge logische Entität auf, die als „Zelle” bezeichnet wird, und der Begriff „Zelle 102” wird hierin nachfolgend verwendet, um dieses logische Gegenstück zu bezeichnen, es sei denn, es wird speziell auf die physikalische Zellplatine Bezug genommen. Der Kreuzschienenschalter 101 umfasst einen Systemspeicher 110, der ein zentralisiertes Cache-Kohärenzverzeichnis 108 umfasst, und eine Liste 109 von modifizierten Cachezeilen, die durch Kreuzschienenlogik gespeichert sind. Wenn der Kreuzschienenschalter 101 erfasst, dass eine Cachezeile modifiziert wurde (durch Untersuchen der Antwort, die in dem Cache-Kohärenzprotokoll gegeben wird), speichert derselbe die Cachezeile in der Modifizierte-Zeile-Liste 109.
-
Eine Cachezeile ist die Grundeinheit einer Cachespeicherung, genauso wie ein adressierbares Wort die Grundeinheit einer Speicherspeicherung ist. Cachezeilen können beispielsweise auf 128 Bytes oder 4 Wörtern bestehen. Die Hierarchie von Datenspeichereinheiten (von kleinstem zu größtem) ist:
Bit
Byte
Wort
Cachezeile
Cachesatz
-
Es gibt größere Dateneinheiten als einen Cachesatz, aber auf der Cacheebene der Hardware ist der Cachesatz die größte sichtbare Einheit.
-
Die Modifizierte-Zeile-Liste 109 verkürzt die mittlere Latenzzeit für exklusive Lesevorgänge. Falls beispielsweise eine Cachezeile in der Zelle A modifiziert wird, dann ist es nicht notwendig, wenn Zelle B diese Zeile anfordert, das Systemgewebe zu der Zelle A zu überqueren, um die Zeile wiederzugewinnen, da die modifizierte Zeile in einer zentralen Position zwischengespeichert wird.
-
Bei dem vorliegenden System ist der Cachespeicher 105 auf jeder der Zellplatinen 102 ein Durchschreibe-Cache. Mit dem Durchschreibe-Cache wird jede Cachezeile (oder einfach „Zeile”), die auf dem Cache einer bestimmten Zellplatine modifiziert wird, beispielsweise auf dem Cache 105(1), an die Modifizierte-Zeile-Liste 109 der Kreuzschiene gesendet, wo Anforderungen von anderen Zellplatinen 102(*) schneller auf die modifizierte Zeile zugreifen können, als wenn dieselbe nur in dem Cachespeicher 105(1) der bestimmten Platine gespeichert wäre.
-
Das Format eines beispielhaften Cache-Kohärenzverzeichnisses
108 ist in der nachfolgenden Tabelle 1 gezeigt: Tabelle 1. Cache-Kohärenzverzeichnis 108
| Cache-ID | Kennung | Index | Status |
-
Bei einem beispielhaften Ausführungsbeispiel existieren die folgenden Felder in jedem Cache-Kohärenzverzeichnis
108:
| 'Cache-ID' | identifiziert die aktuelle Stelle der Cachezeile. Für gemeinschaftlich verwendete Zeilen kann es mehr als einen Eintrag geben. |
| 'Index' | identifiziert den Cachezeilensatz; und |
| 'Kennung' | identifiziert die Zeile in dem Satz |
| 'Status' | MESI – „modifiziert”, „exklusiv”, „gemeinschaftlich verwendet” oder „ungültig” (beispielsweise). |
-
Cachezeilen sind in Sätzen gruppiert, um Hardwareentwurf zu vereinfachen. Die Cache-ID ist der Identifizierer des Caches und zeigt den bestimmten Cache 105(*) an, in dem sich die Zeile aktuell befindet. Die Cachezeilenadresse umfasst ein Kennungsfeld, ein Indexfeld und ein Blockversatzfeld (das verwendet wird, um die Zeile in einem Satz zu finden). Der Blockversatz bezieht sich auf das Wort in der Cachezeile und wird nicht benötigt für einen Verzeichniseintrag, da die Leseanforderung diese Informationen liefern wird. Somit enthält jeder Cache-Kohärenzverzeichniseintrag alle Informationen, die benötigt werden, um es einem Anfrager zu ermöglichen, auf eine bestimmte Cachezeile zurückzugreifen, während es gleichzeitig dem System ermöglicht wird, die Cache-Kohärenz beizubehalten. Bei einem beispielhaften Ausführungsbeispiel ist das Cache-Kohärenzverzeichnis 108 in inhaltsadressierbarem Speicher (CAM) implementiert, und die Modifizierte-Cache-Zeile-Liste 109 ist in einem herkömmlichen DRAM implementiert, obwohl das Verzeichnis 108 und die Modifizierte-Zeile-Liste 109 alternativ über jeden anderen geeigneten Speichertyp implementiert werden können. Die Logik in dem Kreuzschienenschalter 101 handhabt das Aktualisieren des Cache-Kohärenzverzeichnisses 108.
-
Die Verwendung eines zentralisierten Cache-Kohärenzverzeichnisses 108 liefert Protokolloptimierung und ermöglicht auch, dass modifizierte Cachezeilen zentral positioniert werden (in dem Kreuzschienenschalter 101) in Fällen, wo dieselben durch eine Zelle 102(*) angefordert werden, die keine lokale Kopie einer angeforderten Zeile aufweist. Das vorliegende System implementiert ein Protokoll zum Beibehalten der Cache-Kohärenz, wie es in der Technik gut bekannt ist (siehe beispielsweise Kapitel 8.4 von Computer Architecture, A Quantitative Approach (2. Ed.), Hennessey und Patterson, Morgan-Kaufmann publisher, ISBN 1-55860-329-8).
-
Bei dem vorliegenden Ausführungsbeispiel sind Prozessorcaches 106 auf den Zellplatinen als Durchschreibe-Caches implementiert, so dass es von dem Cache-Kohärenzverzeichnis 108 bestimmt werden kann, ob eine gegebene Cachezeile modifiziert ist oder nicht. Die Verwendung von Durchschreibe-Cache 105 auf jeder der Zellplatinen 102(*) ermöglicht es dem Cache-Kohärenzverzeichnis 108, zu bestimmen, ob eine bestimmte Zeile modifiziert wurde oder nicht.
-
2A und 2B sind Flussdiagramme, die einen beispielhaften Satz von Schritten zeigen, die beim Verarbeiten einer exklusiven Leseanforderung durchgeführt werden, bei einem Ausführungsbeispiel des vorliegenden Systems. Wenn eine exklusive Leseanforderung sowohl den Cache als auch den lokalen Speicher in einer bestimmten Zelle 102(*) verfehlt, wie es in 2A gezeigt ist, (bei Schritt 205), wird die angeforderte Adresse bei Schritt 215 zu dem „Ausgangs”-Kreuzschienenschalter-Cache-Kohärenzverzeichnis 108 für die angeforderte Speicheradresse weitergeleitet.
-
Die normale Bedeutung von „Ausgang” bezieht sich auf ein System, bei dem der Adressraum zwischen den Zellen unterteilt ist. Falls es bei solch einem System acht Adressen und zwei Zellen gibt, hat jede Zelle vier Adressen, und diese Zelle ist eine „Ausgangszelle” für diese vier Adressen. Falls sich ein Cache-Kohärenzverzeichnis auf der Zelle befindet (wie beim Stand der Technik), dann ist ein „Ausgangsverzeichnis” eine natürliche Erweiterung von „Ausgangszelle”. Bei dem vorliegenden System wurden jedoch die Cache-Kohärenzverzeichnisse, die vorher an jeder der Zellen angeordnet waren, von den Zellen entfernt, während das Adressunterteilungsmerkmal beibehalten wurde, durch Kombinieren der Verzeichnisse von jeder der Zellen auf dem Kreuzschienenschalter 101. Daher gibt es in einem Mehrkreuzschienensystem mehr als ein „Ausgangs”-Kreuzschienenschalter-Cache-Kohärenzverzeichnis, dessen tatsächliche Position eine Funktion der angeforderten Speicheradresse ist. In diesem Dokument wird die Ausgangszelle für eine bestimmte Cachezeile als Zelle 102(H) bezeichnet, und die anfordernde Zelle wird als Zelle 102(R) bezeichnet, auch wenn diese spezifischen Bezugszeichen nicht auf einer Zeichnung vorliegen (da die Ausgangszelle und die anfordernde Zelle situationsabhängig sind).
-
In einem System wie demjenigen, das in 1A gezeigt ist, wo das System nur einen Kreuzschienenschalter aufweist, besteht der Systemadressraum von Interesse im Wesentlichen aus dem Systemspeicher 101 in dem Kreuzschienenschalter 101. Bei einem System mit mehreren Kreuzschienenschaltern 101, wie z. B. dem in 1B gezeigten System, wird der Systemadressraum anfangs zwischen den verfügbaren Kreuzschienenschaltern unterteilt. Somit handhabt das Cache-Kohärenzverzeichnis 108 bei dem vorliegenden System auf einem hypothetischen Kreuzschienenschalter „A” die Adressen 0 bis 3, das Cache-Kohärenzverzeichnis auf dem hypothetischen Kreuzschienenschalter „B” handhabt die Adressen 4–7, usw.
-
Bei einer Mehrfachkreuzschienenversion des vorliegenden Systems wird das „Ausgangsverzeichnis” (das Ausgangs-Cache-Kohärenzverzeichnis) 108 für eine bestimmte Speicheradresse gemäß der folgenden Prozedur bestimmt: falls es beispielsweise vier Ausgangsverzeichnisse 108 auf vier Kreuzschienenschaltern 101 gibt, dann werden zwei Bits der angeforderten Adresse verwendet, um zu bestimmen, welche Kreuzschiene 101 das geeignete Verzeichnis aufweist.
-
Obwohl die spezifischen zwei Bits, die verwendet werden, um die geeignete Kreuzschiene zu lokalisieren, implementierungsspezifisch verwendet wird, ist das Grundkonzept, dass die Kreuzschienenadressen verwendet werden, um auch die Cache-Kohärenzverzeichnisse 108 zu bestimmen. Somit gibt es ein Verzeichnis 108 pro Kreuzschiene 101, und jedes Verzeichnis ist „Ausgang” für einen bestimmten Satz von Adressen.
-
Falls, wie es in 2A angezeigt ist, die Zelle 102(*), die den exklusiven Lesevorgang erzeugt, eine lokale Kopie der angeforderten Cachezeile aufweist, dann wird die Zeile bei Schritt 210 zurückgesendet, und für diese bestimmte Anforderung ist keine (weitere) Verarbeitung durch das vorliegende System notwendig. Falls jedoch die Zelle, die eine Leseanforderung empfängt, keine lokale Kopie der angeforderten Cachezeile aufweist, dann wird die Situation als „Cachefehlschlag” bezeichnet. Wenn eine empfangende Zelle 102(*) keine lokale Kopie der angeforderten Cachezeile aufweist, sendet die Zelle die Anforderung für eine Zeile (die anfordernde Zelle muss nur eine Adresse für die angeforderte Zeile liefern) an den geeigneten Kreuzschienenschalter 101(*), und zeigt somit an, dass die Zeile weder in dem Cache noch in dem Speicher auf dieser Zelle war.
-
3 ist ein Flussdiagramm, das einen beispielhaften Satz von Schritten zeigt, die durch ein Ausführungsbeispiel des vorliegenden Systems durchgeführt werden beim Verarbeiten eines Cachefehltreffers, der allgemein durch das vorliegende System auf die nachfolgend beschriebene Weise gehandhabt wird:
Bei Schritt 305 prüft der Kreuzschienenschalter 101 sein Cache-Kohärenzverzeichnis 108, um die Position der angeforderten Zeile und ihren Zustand zu finden (z. B. modifiziert, exklusiv, gemeinschaftlich verwendet oder ungültig). Falls bei Schritt 310 bestimmt wird, dass die Zeilenadresse eine „Nicht-Ausgangs”-Adresse ist, dann leitet der Kreuzschienenschalter 101(*), der derzeit die Anforderung handhabt, die Anforderung bei Schritt 315 an den Kreuzschienenschalter 101(*) weiter, für den diese Adresse „Ausgang” ist. Falls diese Adresse eine Ausgangsadresse ist, wird andernfalls bei Schritt 302 das Cache-Kohärenzverzeichnis 108 geprüft, um zu bestimmen, ob die Zeile modifiziert wurde. Falls die Zeile keine modifizierte Zeile ist, dann leitet der Kreuzschienenschalter 101 die Anforderung an die „Ausgangs”-Zellplatine für diese Adresse weiter bei Schritt 325. Falls das Cache-Kohärenzverzeichnis 108 anzeigt, dass die Zeile modifiziert ist, sollte die Zeile in der Modifizierte-Zeile-Liste 109 des Kreuzschienenschalters sein.
-
Bei Schritt 330 gewinnt der Kreuzschienenschalter 101 die modifizierte Zeile wieder durch ein Verfahren analog zum Zugreifen auf Cachespeicher; d. h. durch Verwenden inhaltsadressierbarer Kennungen, die zu der physikalischen Adresse zeigen, die in der Modifizierte-Zeile-Liste 109 angezeigt ist. Bei Schritt 335 wird dann eine Prüfung durchgeführt, um zu bestimmen, ob die Anforderung für eine Cachezeile ein exklusiver Lesevorgang oder ein gemeinschaftlich verwendeter Lesevorgang war. Falls die Anforderung ein gemeinschaftlich verwendeter Lesevorgang war, dann sendet der Kreuzschienenschalter bei Schritt 345 eine Mitteilung an den Cache, der die Zeile modifiziert hat, die anzeigt, dass die Zeile gemeinschaftlich verwendet ist. Bei einigen Protokollen wird die Zeile ungültig gemacht. Falls die Anforderung für einen exklusiven Lesevorgang war, dann sendet der Kreuzschienenschalter bei Schritt 335 eine Mitteilung an den Cache, der die Zeile modifiziert hat, die anzeigt, dass die Zeile nun ungültig ist.
-
Somit ist ersichtlich, dass das Kreuzschienen-Cache-Kohärenzverzeichnis 108 verwendet wird, um zu bestimmen, wo eine angeforderte Cachezeile derzeit lokalisiert ist, und auch, ob die Zeile modifiziert wurde oder nicht. Falls die Adresse der angeforderten Zeile eine „Ausgangs”-Adresse ist und modifiziert wurde, ist die Zeile in der Modifizierte-Zeile-Liste 109 auf dem entsprechenden Kreuzschienenschalter 101(*). Jeder andere Anforderungstyp wird weitergeleitet, entweder zu einem anderen Kreuzschienenschalter 101(*) oder zu einer Zelle 102(*).
-
Wie es in 2A angezeigt ist, sobald eine Cachezeilenanforderung das Ausgangskreuzschienenverzeichnis 108 erreicht, gibt es vier mögliche Fälle, die bei Schritt 220 bestimmt sind, durch eine Untersuchung des Cache-Kohärenzverzeichnisses 108 in dem Kreuzschienenschalter 101. Es ist anzumerken, dass 2B ein Fortsetzungsflussdiagramm von 2A ist, wobei die Blöcke 221–224 in 2A in 2B fortgesetzt werden bei Blöcken 230, 240, 250 bzw. 260. Die in Blöcken 221–224 durchgeführten Operationen werden nachfolgend beschrieben:
Bei Block 22 gibt es keine Kopie der Cachezeile auf dem Kreuzschienenschalter, und die einzige Kopie ist in der Ausgangszelle 102(H) gespeichert, wo dieselbe in einem exklusiven Modus sein kann oder nicht. Wie es in 2B gezeigt ist, sendet in dieser Situation der Kreuzschienenschalter 101, der die Anforderung empfängt, eine „Lesen-Ungültig-Machen”-Mitteilung an die Ausgangszelle 102(H) und leitet die Zeile bei Schritt 230 an die anfordernde Zelle 102(R) weiter. Es ist anzumerken, dass „Lesen-Ungültig-Machen” impliziert, dass die Ausgangszelle mit der aktuellen Version der Zeile antwortet.
-
Eine Kopie der angeforderten Zeile wird auf dem Kreuzschienenschalter 101 zwischengespeichert, und das Cache-Kohärenzverzeichnis 108 wird bei Schritt 232 aktualisiert, um den exklusiven Besitz durch die anfordernde Zelle 102(R) zu reflektieren. Die nächste exklusive Leseanforderung wird dann bei Schritt 205 verarbeitet (in 2A).
-
Bei Block 222 hat der Kreuzschienenschalter eine Kopie der angeforderten Zeile. Wie es in 2B gezeigt ist, sendet in diesem Fall der Kreuzschienenschalter 101, der die Anforderung empfängt, bei Schritt 240, einen „Ungültig-Machen”-Befehl an die Zelle 102(*), die die Zeile besitzt, und leitet dann dessen Kopie bei Schritt 242 an die anfordernde Zelle weiter. Als Nächstes wird bei Schritt 244 das Cache-Kohärenzverzeichnis 108 der Kreuzschiene aktualisiert, um die Änderungen beim Besitz zu reflektieren. Bei einem beispielhaften Ausführungsbeispiel kann die Implementierung einen Mechanismus umfassen zum Vermeiden einer Wettbewerbsbedingung, bei der die Zelle, die die Zeile besitzt, im Prozess des Durchschreibens eines neuen Werts ist, wenn der Exklusiv-Lesebefehl der anfordernden Zelle die Kreuzschiene erreicht. Bei Schritt 246 wird eine Bereitstellung durchgeführt, wie z. B. Handshaking bzw. Quittungsaustausch oder Wiederholung, um sicherzustellen, dass kein neuer Wert für die Zeile unterwegs ist, während der alte Wert zu der anfordernden Zelle weitergeleitet wird. Dieses Beibehalten einer Kopie der Zeile in der Kreuzschiene spart einen Speicherlesevorgang und zwei Gewebesprünge im Vergleich zu vorhergehenden Verfahren. Die nächste exklusive Leseanforderung wird dann bei Schritt 205 verarbeitet (in 2A).
-
Bei Block 223 hat der Kreuzschienenschalter keine Kopie der angeforderten Zeile, aber es gibt eine Kopie der Zeile auf einer Nicht-Ausgangszelle 102(*) in exklusivem Modus. Wie es in 2B gezeigt ist, sendet der Kreuzschienenschalter 101, der die Anforderung empfängt, in dieser Situation eine „Lesevorgang-Ungültig-Machen”-Mitteilung an die Zelle, die die Cachezeile besitzt, bei Schritt 250, und leitet die Zeile bei Schritt 252 an die anfordernde Zellplatine weiter. Eine Kopie der Zeile wird auf dem Kreuzschienenschalter zwischengespeichert und das Verzeichnis wird bei Schritt 254 aktualisiert, um exklusiven Besitz durch die anfordernde Zelle zu reflektieren. Die nächste exklusive Leseanforderung wird dann bei Schritt 205 verarbeitet (in 2A).
-
Bei Block 224 existieren entfernte gemeinschaftlich verwendete Kopien der angeforderten Zeile, wie es durch das Cache-Kohärenzverzeichnis 108 bestimmt ist. Wie es in 2B gezeigt ist, sendet der Kreuzschienenschalter 101, der die Anforderung empfängt, in diesem Fall bei Schritt 260 die Anforderung „Lesevorgang-Ungültig-Machen”-Befehle an alle Zellen, die Kopien enthalten, macht bei Schritt 262 alle Kopien der angeforderten Zeile ungültig und ruft dann die angeforderte Zeile von der Ausgangszelle ab und sendet dieselbe bei Schritt 264 über das Systemgewebe an die anfordernde Zelle. Eine Kopie der Zeile wird auf dem Kreuzschienenschalter 101 zwischengespeichert, und das Cache-Kohärenzverzeichnis 108 wird bei Schritt 266 aktualisiert, um exklusiven Besitz durch die anfordernde Zelle zu reflektieren. Die nächste exklusive Leseanforderung wird dann bei Schritt 205 verarbeitet (in 2A).
-
Für Cachezeilen, die regelmäßig modifiziert werden, sollte der Fall, der durch Block 222 (und folgende Blöcke) dargestellt ist, der üblichste Fall sein; somit wird das Zwischenspeichern heißer Zeilen zu einer wesentlichen Reduktion bei der durchschnittlichen Außerzellenlatenzzeit führen.
-
Bestimmte Änderungen können an den obigen Verfahren und Systemen durchgeführt werden, ohne von dem Schutzbereich des vorliegenden Systems abzuweichen. Es ist anzumerken, dass alle Gegenstände, die in der obigen Beschreibung enthalten sind oder in den beiliegenden Zeichnungen gezeigt ist, als darstellend und nicht in einem beschränkenden Sinne zu sehen sind. Beispielsweise kann das in 1A und 1B gezeigte System aufgebaut sein, um andere Komponenten als die darin gezeigten zu umfassen, und die Komponenten können in anderen Konfigurationen angeordnet sein. Die in 2A, 2B und 3 gezeigten Elemente und Schritte können ebenfalls gemäß den hierin beschriebenen Verfahren modifiziert werden und die hierin gezeigten Schritte können in anderen Konfigurationen angeordnet werden, ohne von der Wesensart des so beschriebenen Systems abzuweichen.