-
Beschreibung des Stands der
Technik
-
In
einem Multiprozessorsystem mit mehreren Caches kann jeder Cache
eine Kopie von Daten aufweisen, die im Speicher gespeichert sind.
Probleme erwachsen dann, wenn mehrere Kopien der Daten in den Caches
nicht kohärent
sind. Verschiedene Techniken sind entwickelt worden, um Datenkohärenz zu
gewährleisten.
Wenn zum Beispiel die Daten in einem Cache verändert wurden, werden andere
Daten als ungültig
gekennzeichnet, damit sie nicht verwendet werden.
-
Eine
Kopie der Daten in dem Cache wird oft als eine Cachezeile, eine
Speicherzeile oder eine Zeile bezeichnet. Als eine Snoop-Operation
wird ein Vorgang bezeichnet, bei dem ein Agent eines Busses den
Bus nach Speichertransaktionen überwacht,
z. B. einen Lese/Schreib-Vorgang auf einen Hauptspeicher-Ort, der sich
auch in einem Cache befindet. Der Agent kann die Zustände der
Cachezeilen, die an den Speichertransaktionen beteiligt sind, in
einem Verzeichnis, z. B. einem Snoop-Filter, aufzeichnen. Der Zustand
der Cachezeile kann anzeigen, ob die Zeile nur eine gültige Kopie
außerhalb
des Hauptspeichers aufweist, mehrere gültige Kopien, die sich mehrere
Caches teilen, aufweist oder invalidiert wurde. Ein Dateneintrag
in dem Snoop-Filter wird oft durch seine Adresse im Hauptspeicher
indiziert.
-
Es
ist im allgemeinen erstrebenswert, einen großen Snoop-Filter vorzusehen,
der eine Abdeckung bereitstellt, die mehrmals die gesamte Größe der Prozessorcaches
beträgt
(z. B. 8×-Abdeckung, was ein
Fachbegriff ist, der anzeigt, daß der Snoop-Filter Informationen
enthalten kann, die ungefähr
acht mal so viele Cachezeilen beschreiben, wie die Caches, auf die
sich der Snoop-Filter bezieht, enthalten können). Ein großer Snoop-Filter
kann die Trefferrate der Prozessorcaches erhöhen und die Systemleistung
verbessern. Weil die Größe der Prozessorcaches jedoch
mit der Zeit ansteigt, ist es für
Schaltugsdesigner jedoch aufgrund von Beschränkungen der Die-Größe schwierig,
auch nur eine 1×-Abdeckung
bereitzustellen. Daher wird für
den Snoop-Filter manchmal der Raum knapp, um den Zustand einer Zeile
für eine
neue Speichertransaktion aufzuzeichnen, und sie müssen möglicherweise
einen Eintrag aus dem Snoop-Filter entfernen, um die neue Transaktion
unterzubringen. Sobald eine Eintrag aus dem Snoop-Filter entfernt
ist, wird eine Invalidierungs-Rücknachricht
an alle Prozessorcaches gesendet, die möglicherweise eine gültige Kopie
der Zeile, die mit dem entfernten Eintrag verknüpft ist, enthalten. Experimente
zeigen, daß eine
bedeutende Anzahl von Cache-Fehlzugriffen (z. B. 20%) von Rück-Invalidierungen einer
Cachezeile herrühren,
die gerade verwendet werden sollte.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Ausführungen
werden als Beispiel und nicht als Beschränkung in den Figuren dargestellt,
bei denen gleiche Bezugszeichen ähnliche
Elemente darstellen. Man beachte, daß Bezugnahme auf „eine" oder „die eine" Ausführung in
dieser Offenbarung nicht notwendigerweise stets dieselbe Ausführung bezeichnen,
und solche Bezeichnungen bedeuten mindestens eine.
-
1 ist
ein Blockdiagramm einer Ausführung
eines Multiprozessorsystems, welches eine Mehrzahl von Caches umfaßt.
-
2 ist
ein Blockdiagramm einer Ausführung
eines Kohärenzcontrollers
des Multiprozessorsystems von 1, bei welcher
der Kohärenzcontroller
einen Snoop-Filter und eine Kohärenz-Engine
umfaßt.
-
3 ist
ein Beispiel eines Flußdiagramms,
das ein Verfahren für
eine Ablaufsteuerungsregel zeigt, die von der Kohärenz-Engine
von 2 implementiert wird.
-
DETAILLIERTE BESCHREIBUNG
-
Mit
Bezug auf 1 kann eine Ausführung eines
Multiprozessorsystems 10 eine Mehrzahl von Verarbeitungsknoten 17 umfassen,
die mit einem Chipsatz 13 zusammengeschaltet sind. Jeder
der Verarbeitungsknoten 17 kann einen oder mehrere Prozessoren 11 (zwei
Prozessoren pro Verarbeitungsknoten sind gezeigt) und einen Cache 12 umfassen.
Auf jeden der Caches 12 kann lokal von den Prozessoren 11 eines „Heimatknotens" (des Verarbeitungsknotens,
in dem dieser Cache liegt) und entfernt von Prozessoren 11 von „Fremdknoten" (die Verarbeitungsknoten abgesehen
von dem Heimatknoten) zugegriffen werden. Der Cache 12 wird als
ein „lokaler
Cache" mit Bezug
auf die Prozessoren 11 des Heimatknotens bezeichnet. Die
Verarbeitungsknoten 17 können mit dem Chipsatz 13 über einen
oder mehrere Frontside-Busse (FSBs) 14 (nur zwei FSBs sind
gezeigt) oder andere Arten von Datenwegen (z. B. Punkt-Zu-Punkt-Verbindungen)
gekoppelt sein. Ein oder mehrere Verarbeitungsknoten 17 können auf
einem einzigen Chip implementiert sein. das System 10 kann
aufgrund der hohen gemeinsamen Prozessorleistung, die es besitzt,
auch als ein Server-System verwendet werden. Das System 10 kann
jedoch auch als Desktopcomputer oder irgend ein anderes Rechnersystem verwendet
werden.
-
Der
Chipsatz 13 kann einen Kohärenzcontroller 132 zur
Verarbeitung von Anforderungen, die von den FSBs empfangen werden,
und zur Aufrechterhaltung von Datenkohärenz zwischen den Caches 12 umfassen. Die
Funktionen des Kohärenzcontrollers 132 werden
unten im Detail mit Bezug auf 2 erörtert. Der
Chipsatz 13 kann einen Speichercontroller 134 umfassen,
um eine Schnittstelle für
die Verarbeitungsknoten 17 und andere Komponenten des Systems 10 bereitzustellen,
um auf Speicherplätze
eines Speichers 15 zuzugreifen. Der Speicher 15 kann
eine oder mehrere Arten von Speichervorrichtungen umfassen, wie
beispielsweise Vorrichtungen mit dynamischem RAM (DRAM), Vorrichtungen
mit synchronem dynamischem RAM (SDRAM), SDRAM-Vorrichtungen mit
doppelter Datenrate (DDR) oder andere flüchtige oder nichtflüchtige Speichervorrichtungen,
die für
Server- und allgemeine Anwendungen geeignet sind. Bei manchen Serveranwendungen können Datenbits,
die in dem Speicher 15 gespeichert sind, durch einen Fehlerkorrekturcode
(ECC) vor Fehlern geschützt
sein.
-
Der
Chipsatz 13 kann auch einen E/A-Controller 136 umfassen,
um eine Schnittstelle für
die Verarbeitungsknoten 11 und andere Komponenten des Systems 10 bereitzustellen,
um auf eine oder mehrere E/A-Vorrichtungen 16 zuzugreifen.
Die E/A-Vorrichtungen 16 können ISA-Vorrichtungen (Industry
Standard Architecture), PCI-Vorrichtungen (Peripheral Component
Interconnect), PCI-Express-Vorrichtungen,
USB-Vorrichtungen (Universal Serial Bus), SCSI-Vorrichtungen (Small
Computer System Interface) oder andere standardisierte oder proprietäre E/A-Vorrichtungen,
die für
Server oder allgemeine Anwendungen geeignet sind, umfassen. In manchen
Ausführungen
kann der Chipsatz 13 als ein einzelner Chip implementiert
sein. In manchen Ausführungen
kann der Chipsatz 13 als zwei oder mehrere Chips implementiert
sein. Der Chipsatz 13 kann manchmal als Speicher-Steuerungshub (MCH)
oder als eine Northbridge (NB) bezeichnet werden. Bei Multi-Chip-Implementierungen
können
die sekundären
Chips des Chipsatzes 13 als ein Eingang/Ausgang-Hub (IOH),
ein Eingang/Ausgang-Steuerungshub (ICH) und/oder als eine Southbridge
(SB) bezeichnet werden.
-
Die
Prozessoren 11 können
Speicherzeilen in ihren jeweiligen lokalen Caches 12 speichern,
um einen schnellen Zugriff zu erleichtern. Die Caches 12 können Daten,
Befehle oder eine Kombination der beiden speichern. Für jede der
Cachezeilen können
die Caches 12 eine Markierung (z. B. einen Abschnitt einer
Speicheradresse) speichern, um die Cachezeile mit einer zugehörigen Zeile
im Speicher 15 zu verknüpfen
oder auf sie abzubilden. Die Caches 12 können auch
einen Kohärenzzustand
für jede
der Cachezeilen speichern und aktualisieren. Beispielsweise können die
Caches 12 MESI-Kohärenzzustände unterstützen, bei
denen eine Cachezeile sich in einem modifizierten Zustand (M), einem
exklusiven Zustand (E), einem geteilten Zustand (S) oder einem ungültigen Zustand
(I) befindet.
-
Gemäß einem
Beispiel eines Cache-Kohärenzprotokolls,
das MESI-Zustände
verwendet, zeigt der ungültige
Zustand (I) an, daß die
verknüpfte
Cachezeile keine aktuelle Kopie der Zeile ist. Die aktuelle Kopie
der Zeile kann sich im Speicher 15 und/oder in einem der
anderen Caches 12 in den Fremdknoten befinden. Der geteilte
Zustand (S) zeigt an, daß die
verknüpfte
Cachezeile eine aktuelle Kopie der Zeile ist, und daß Null oder mehr
andere Caches 12 auch eine aktuelle Kopie der Zeile in
dem geteilten Zustand aufweisen können. Der exklusive Zustand
(E) zeigt an, daß der
Cache 12, in dem sich die verknüpfte Cachezeile befindet, den
Besitz der Zeile erhalten hat und eine aktuelle Kopie der Zeile
aufweist. Weiter zeigt der E-Zustand an, daß kein anderer Cache 12 eine
Kopie der Zeile in dem M-, E- oder S-Zustand aufweist. Der modifizierte
Zustand (M) zeigt an, daß der
Cache 12, in dem sich die verknüpfte Cachezeile befindet, eine
aktuelle Kopie der Zeile, die modifiziert wurde, aufweist. Wie bei
dem E-Zustand zeigt der M-Zustand an, daß kein anderer Cache 12 eine
Kopie der Zeile in dem M-, E- oder S-Zustand aufweist. Weiter zeigt
der M-Zustand an, daß die
verknüpfte
Zeile möglicherweise
aktueller ist, als die zugehörige
Datenzeile im Speicher 15. Weil eine Zeile mit entweder
dem M-Zustand oder dem E-Zustand exklusiv mit einem der Caches 12 verknüpft ist
(z. B. vom ihm besessen oder modifiziert wird), können der
M-Zustand und der E-Zustand in einen E/M-Zustand kombiniert werden,
der manchmal ebenfalls als ein exklusiver Zustand bezeichnet wird.
-
Die
Zustande der Cachezeilen können
von einem zentralisierten Verzeichnis, z. B. einem Snoop-Filter oder
irgend einer anderen Speicherkomponente in einem zentralisierten
Ort des Systems 10, verfolgt werden. Mit Bezug auf die 2 kann
in einer Ausführung
der Kohärenzcontroller 132 einen
Snoop-Filter 24 aufweisen, um Kohärenzinformation über die
Cachezeilen bereitzustellen. Wie in 2 gezeigt
ist, kann eine Ausführung des
Kohärenzcontrollers 132 mehrere
FSB-Ports (FSB_Port_0 21 und FSB_Port_1 22), eine
Kohärenz- Engine 23 und
einen Snoop-Filter 24 umfassen.
-
Der
Snoop-Filter 24 kann eine oder mehrere Speicherarrays,
wie beispielsweise einen vollassoziativen Array, einen teilassoziativen
Array oder einen direkt abgebildeten Array umfassen, der Wege oder
Zeilen aufweist, um Kohärenzinformationen
zu speichern. In einer Ausführung
umfaßt
der Snoop-Filter 24 einen teilassoziativen 96-Wege-Array,
bei dem jeder der 4K Sätze 96 Slots
(oder Wege) 225 umfaßt
(nur einer ist gezeigt), um Kohärenzinformation
von 96 Cachezeilen zu speichern. Eine Cachezeile kann beispielsweise
mittels der letzten zwölf
Bits der Speicheradresse auf einen der 4K Sätze abgebildet werden. Jeder
der Wege 225 kann Informationen für eine Zeile speichern. Die
Informationen können
eine Adreßmarkierung
und einen Präsenz-Vektor umfassen.
Die Adreßmarkierung
kann die gesamte Speicheradresse der Zeile oder einen Teil von ihr
umfassen. In dem obigen Beispiel, bei dem die zwölf letzten Speicheradressenbits
verwendet werden, um einen Satz zu finden, kann die Adreßmarkierung
der Rest der Speicheradressenbits sein, die diesen zwölf Adressenbits
vorangehen. Der Präsenz-Vektor
kann anzeigen, welcher FSB 14 mit dem Cache 12 verbunden ist,
der die Cachezeile aufweisen könnte.
-
In
einer Ausführung
kann der Snoop-Filter 24 nur diejenigen Einträge speichern,
die mit Zeilen verknüpft
sind, die den E/M-Zustand aufweisen. Solche Snoop-Filter-Einträge werden
manchmal als E/M-Einträge bezeichnet.
Das bedeutet, daß der
Snoop-Filter 24 einen E/M-Eintrag für eine Zeile speichern kann,
wenn irgend ein Cache 12 eine exklusive Kopie der Zeile
außerhalb
des Hauptspeichers 15 enthält oder enthalten kann. Das
Speichern von ausschließlich
den E/M-Einträgen kann
die gesamte Anzahl von Einträgen,
die im Snoop-Filter 24 gespeichert sind, verringern und
kann im Ergebnis die Größe des Snoop-Filters
vergrößern. Dafür kann das
ausschließliche
Speichern der E/M-Einträge
die Anzahl von Snoop-Vorgängen
vergrößern, die durch
den Snoop-Filter 24 erzeugt werden. Speziell für leseintensive
Anwendungen verbessert sich jedoch im allgemeinen die Systemleistung.
-
In
einer Ausführung
kann, wenn eine Anforderung nach einer Speichertransaktion an dem
Kohärenzcontroller 132 eingeht,
die Kohärenz-Engine 23 ermitteln,
wohin die Anforderung weitergeleitet wird. Als eine Speichertransaktion
wird eine Transaktion bezeichnet, die Zugriff auf den Speicher 15 oder
irgendwelche Caches 12 erfordert. Die Kohärenz-Engine 23 kann
im Snoop-Filter 24 suchen,
um zu ermitteln, ob der Snoop-Filter Informationen zu der angeforderten
Zeile aufweist. Wenn der Snoop-Filter 24 die Informationen
aufweist, leitet die Kohärenz-Engine 23 die
Anforderung an den FSB-Port (21 oder 22) weiter,
wobei sie mit dem Cache 12 eine Verbindung herstellt, der
eine aktuelle Kopie der Zeile aufweist, basierend auf dem Präsenz-Vektor
der Zeile.
-
Wenn
die Transaktion gegebenenfalls den Zustand der ageforderten Zeile ändern kann,
aktualisiert die Kohärenz-Engine 23 die
Information im Snoop-Filter 24, um die Änderungen wiederzugeben. Wenn
der Snoop-Filter 24 keine Informationen für diese
Zeile aufweist, kann die Kohärenz-Engine
dem Snoop-Filter einen Eintrag hinzufügen, um Kohärenz-Informationen der angeforderten
Zeile zu speichern.
-
Um
ausschließliche
E/M-Speicherung im Snoop-Filter
24 zu unterstützen, implementiert
die Kohärenz-Engine
23 eine
Ablaufsteuerungsregel, um Datenkohärenz zu gewährleisten. Die Ablaufsteuerungsregel teilt
die Speicheranforderungsarten in Leseanforderungen und Schreibanforderungen.
Die Leseanforderungen werden von den Schreibanforderungen abgekoppelt.
Sowohl die Prozessoren
11 als auch die E/A-Vorrichtungen
16 (
1)
können
die Leseanforderungen und die Schreibanforderungen ausgeben. Für Prozessor-Anforderungen
können
die Schreibanforderungen „Write" (auch bekannt als „Write-for-Ownership") und „Write-Invalidate" umfassen. Für jede Anforderungsart
werden im Fall eines Snoop-Filter-Treffers und eines Snoop-Filter-Fehlzugriffs
unterschiedliche Kohärenzmaßnahmen
getroffen. Die Kohärenz-Engine
23 kann
die Ablaufsteuerungsregel durch Hardware oder eingebettete Firmware
implementieren.
| Anforderungsart | Snoop-Filter-Ergebnis | Snoop-Filter-Maßnahme | Kohärenzmaßnahme |
| Prozessor-Read | Treffer | Eintrag
entfernen | „Goto_S"-Snoop des aktuellen
Besitzers |
| Fehlzugriff | Keine | Keine |
| Prozessor-Write (Read-for-Ownership | Treffer | Besitzer
aktualisieren | Invalidierender
Snoop auf gegenwärtigen
Besitzer |
| Fehlzugriff | Eintrag
zuteilen | Invalidierender
Snoop auf alle Agenten |
| Prozessor-Write-Invalidate | Treffer | Eintrag
entfernen | Invalidierender
Snoop auf gegenwärtigen
Besitzer |
| Fehlzugriff | Keine | Invalidierender
Snoop auf alle Agenten |
| E/A-DMA-Read | Treffer | Eintrag
entfernen | „Goto_S"-Snoop des aktuellen
Besitzers |
| Fehlzugriff | Keine | Keinen |
| E/A-DMA-Write | Treffer | Eintrag
entfernen | Invalidierender
Snoop auf gegenwärtigen
Besitzer |
| Fehlzugriff | Keine | Invalidierender
Snoop auf alle Agenten |
Tabelle
1. Ablaufsteuerungsregel des Snoop-Filters nur E/M
-
Ein
Beispiel der Ablaufsteuerungsregel wird mit Bezug auf die Tabelle
1 beschrieben. Für
jede Anforderungsart (z. B. Lese- oder Schreibanforderung) und für jedes
Snoop-Filter-Ergebnis (z. B. Treffer oder Fehlzugriff) trifft die
Kohärenz-Engine 23 eine
Snoop-Filter-Maßnahme
und eine Kohärenzmaßnahme,
um die Datenkohärenz
beizubehalten. Als eine Snoop-Filter-Maßnahme wird eine Maßnahme zur
Aktualisierung der Snoop-Filter-Einträge bezeichnet. Als eine Kohärenzmaßnahme wird
eine Maßnahme
bezeichnet, die eine Snoop-Nachricht an einen oder mehrere Prozessoren
sendet, um die Kohärenzzustände der
Cachezeilen zu aktualisieren. In einer Ausführung kann die Kohärenz-Engine 23 Schaltungen
aufweisen, die eine Snoop-Filter-Aktualisierungseinheit 25,
eine Invalidierungseinheit 26 und eine Goto_S-Einheit 27 zur
Implementierung der Snoop-Filter-Maßnahmen und der Kohärenzmaßnahmen
umfaßt.
-
Es
wird beispielsweise angenommen, daß ein Prozessor anfordert,
eine Zeile aus dem Hauptspeicher zu lesen, und die Anforderung zu
einem Treffer im Snoop-Filter 24 führt. Ein Treffer im Snoop-Filter 24 bedeutet,
daß sich
der Eintrag in einem exklusiven Zustand (E/M) befindet und die verknüpfte Zeile
gegenwärtig
von einem Prozessorcache besessen wird. Daher bewirkt die neue Leseanforderung
von einem anderen Prozessor, daß die
Zeile den E/M-Zustand verläßt und in
den S-Zustand eintritt. Weil der Snoop-Filter 24 nur E/M-Einträge speichert,
sollte der gerade angeforderte Eintrag, der sich nun im S-Zustand
befindet, aus dem Snoop-Filter entfernt werden. Daher weist die
Snoop-Filter-Aktualisierungseinheit 25 den Snoop-Filter 24 an,
diesen Eintrag aus dem Snoop-Filter zu entfernen. Weiter sendet
die Goto_S-Einheit 27 eine „Goto_S"-Snoop-Nachricht, um den gegenwärtigen Besitzer
der Zeile zu informieren, daß die
Zeile nun geteilt ist. So kann der gegenwärtige Besitzer den Status der
Zeile von E/M auf S ändern.
-
Wenn
die Leseanforderung zu einem Fehlzugriff bei dem Snoop-Filter 24 führt, kann
der angeforderte Eintrag gegenwärtig
von Null oder mehr Caches besessen werden. Die aktuelle Kopie im
Hauptspeicher ist auf dem neuesten Stand und die neue Leseanforderung ändert diesen
aktuellen Zustand nicht. Daher wird der Snoop-Filter 24 nicht
aktualisiert und es wird keine Kohärenzmaßnahme getroffen.
-
Wenn
der Prozessor anfordert, eine Zeile in den Hauptspeicher zu schreiben,
und die Anforderung zu einem Treffer im Snoop-Filter 24 führt, aktualisiert
die Snoop-Filter-Aktualisierungseinheit 25 den
Snoop-Filter-Eintrag, um anzuzeigen, daß der anfragende Prozessor
der neue Besitzer der Zeile ist. Der Snoop-Filter 24 behält den Eintrag,
weil der Eintrag sich immer noch in dem E/M-Zustand befindet, obwohl
das exklusive Eigentumsrecht sich geändert hat. Die Invalidierungseinheit 26 sendet
eine Invalidierungsnachricht an den gegenwärtigen Besitzer der Zeile,
um anzuzeigen, daß die
aktuelle lokale Kopie nicht mehr auf dem neuesten Stand ist. Dadurch
wird das exklusive Zugriffsrecht dem anfordernden Prozessor gewährt, und
die Kopie, die vom gegenwärtigen
Besitzer besessen wird, wird invalidiert.
-
Angenommen,
der Prozessor fordert an, eine Zeile in den Hauptspeicher zu schreiben,
und die Anforderung führt
zu einem Fehlzugriff beim Snoop-Filter 24. Ein Fehlzugriff
zeigt an, daß die
Zeile nicht von irgendeinem Prozessor exklusiv besessen wird. Da
die Schreibanforderung dazu führen
wird, daß die
Zeile exklusiv von dem anfordernden Prozessor besessen wird, teilt
die Snoop-Filter-Aktualisierungseinheit 25 der
angeforderten Zeile einen Snoop-Filter-Eintrag zu. Die Kopien der
Zeile, die möglicherweise
außerhalb
des Hauptspeichers gecachet sind, werden invalidiert. Daher gibt
die Invalidierungseinheit 26 eine Invalidierungsnachricht
an alle der Prozessoren aus, um anzuzeigen, daß die aktuellen lokalen Kopien
nicht mehr auf dem neuesten Stand sind. Als Ergebnis werden dem
anfordernden Prozessor exklusive Zugriffsrechte gewährt.
-
In
einem anderen Szenario kann der Prozessor anfordern, ein Write-Invalidate
auf eine Zeile auszuführen.
Eine Write-Invalidate-Operation besteht aus einer Schreiboperation
auf den Hauptspeicher zusammen mit einer Invalidierung aller Kopien
im lokalen Cache des Prozessors. Nach dem Write-Invalidate enthält der Hauptspeicher
die einzige aktuelle Kopie in dem System. Daher wird, wenn überhaupt,
der verknüpfte
Snoop-Filter-Eintrag gelöscht,
um anzuzeigen, daß der
Eintrag nicht mehr exklusiv von dem gegenwärtigen Besitzer besessen wird.
Wenn daher die Write-Invalidate-Anforderung
zu einem Fehlzugriff führt,
sendet die Invalidierungseinheit 26 eine Invalidierungsnachricht
an alle Prozessoren, um anzuzeigen, daß die Kopien außerhalb
des Hauptspeichers nicht mehr auf dem neuesten Stand sind. Das Ergebnis
der Write-Invalidate-Anforderung
besteht darin, daß kein
Cache 12 eine Kopie der Zeile aufweist.
-
Eine
E/A-Vorrichtung kann manchmal eine direkte Speicherzugriff(DMA)-Leseanforderung
veranlassen. Eine E/A-DMA-Leseanforderung wird in der selben Weise
gehandhabt wie eine Prozessor-Leseanforderung. Wenn daher einen
Treffer beim Snoop-Filter 24 auftritt, wird der verknüpfte Snoop-Filter-Eintrag
entfernt und die Kopie, die vom gegenwärtigen Besitzer besessen wird,
wird in den S-Zustand versetzt. Wenn einen Fehlzugriff auftritt,
wird keine Snoop-Filter-Maßnahme oder
Kohärenzmaßnahme ausgeführt.
-
Wenn
die E/A-Vorrichtung eine DMA-Schreibanforderung veranlaßt, und
die Anforderung zu einem Treffer führt, entfernt die Snoop-Filter-Aktualisierungseinheit
den Eintrag, um anzuzeigen, daß die
verknüpfte Zeile
sich nicht mehr in dem E/M-Zustand befindet. Eine Invalidierungsnachricht
wird an den Prozessor gesendet, der gegenwärtig die Zeile besitzt. Wenn
die Anforderung zu einem Fehlzugriff führt, wird eine Invalidierungsnachricht
an alle Prozessoren gesendet, weil ein jeder von ihnen möglicherweise
eine Kopie der Zeile besitzt. Der E/A-Transfer geschieht, nachdem
die Kohärenzmaßnahme ausgeführt ist.
-
Ein
Beispielvorgang, der von der Kohärenz-Engine 23 ausgeführt wird,
ist in 3 gezeigt. Mit Bezug auch auf 1,
empfangt bei Block 310 die Kohärenz-Engine 23 eine
Anforderung von einem der Prozessoren oder der E/A-Vorrichtungen
nach einer Speichertransaktion. Bei Block 320 sucht die
Kohärenz-Engine 23 im Snoop-Filter 24,
um zu ermitteln, ob die angeforderte Zeile einen Eintrag in dem
Snoop-Filter aufweist. Wenn es einen Eintrag für die angeforderte Zeile im
Snoop-Filter 24 gibt,
ermittelt die Kohärenz-Engine 23 bei
Block 330, ob die Anforderung den exklusiven Besitz des
Eintrags ändern
kann. Bei Block 340 aktualisiert die Kohärenz-Engine 23 den
Snoop-Filter, wenn
eine Änderung
des exklusiven Besitzes vorliegt. Die Kohärenz-Engine 23 aktualisiert
den Snoop-Filter 24 nicht, wenn keine Änderung des exklusiven Besitzes
vorliegt. Kehrt man zu Block 320 zurück, so ermittelt die Kohärenz-Engine 23,
wenn die angeforderte Zeile keinen Eintrag im Snoop-Filter 24 aufweist,
bei Block 350, ob die Anforderung dazu führen kann,
daß die
Zeile exklusiv von einem Prozessor besessen wird. Wenn die Zeile
exklusiv von einem Prozessor besessen wird, so teilt die Kohärenz-Engine 23 bei
Block 360 einen Eintrag für die angeforderte Zeile zu.
Die Kohärenz-Engine 23 aktualisiert den
Snoop-Filter 24 nicht, wenn die Zeile nicht von einem Prozessor
exklusiv besessen wird.
-
Bei
Block 370 gibt, abgesehen von der Situation, bei der die
angeforderte Transaktion eine Lesevorgang ist, der zu einem Fehlzugriff
führt,
die Kohärenz-Engine 23 eine
Snoop-Nachricht an einen oder mehrere Prozessoren aus. Die Snoop-Nachricht
kann aus einer „Goto_S"-Nachricht bestehen,
die einen gegenwärtigen Besitzer
einer Zeile darüber
informiert, daß die
Zeile in den S-Zustand
gewechselt ist. Die Snoop-Nachricht kann aus einer Invalidierungsnachricht
bestehen, die einen gegenwärtigen
Besitzer einer Zeile darüber
informiert, daß die
Zeile nicht mehr gültig
ist. Die Snoop-Nachricht kann zu einem gegenwärtigen Besitzer einer Zeile
gesendet werden, oder kann in manchen Szenarios an alle der Prozessoren
gesendet werden, wenn manche von ihnen eine Kopie der Zeile besitzen
können.
Die Art der Snoop-Nachricht und das Ziel der Snoop-Nachricht können von
der Art der Anforderung und dem Ergebnis des Snoop-Filters (z. B.
einem Treffer oder einem Fehlzugriff) abhängen. Bei Block 380 kann,
nachdem die Snoop-Nachricht gesendet wurde, der anfordernde Agent
fortfahren, um die angeforderte Transaktion durchzuführen.
-
In
der vorangegangenen Patentschrift wurden spezifische Ausführungen
beschrieben. Es ist jedoch klar, daß verschiedene Modifikationen
und Änderungen
darauf angewendet werden können,
ohne von dem generellen Geist und Schutzumfang der angefügten Ansprüche abzuweichen.
Die Patentschrift und die Zeichnungen sollen demnach in einem erläuternden
anstatt einem einschränkenden
Sinn angesehen werden.