-
Hintergrund
-
Bei
einem Mehrprozessorsystem, das mehrere Prozessoren und mehrere Caches
aufweist, kann jeder Cache eine Kopie eines Abschnittes aus Daten
speichern, die in einem Speicher abgelegt sind. Probleme treten
auf, wenn mehr als ein Cache eine Kopie desselben Datenabschnitts
enthält.
Verschiedene Techniken sind entwickelt worden, um die Datenkohärenz bei
mehreren Caches sicherzustellen. Wenn zum Beispiel die Daten in
einem Cache abgeändert
werden, werden andere Kopien der Daten als ungültig markiert, so dass sie
nicht verwendet werden.
-
Um
dabei zu helfen, die Cache-Kohärenz aufrecht
zu erhalten, umfassen viele Systeme ein Verzeichnis, so wie einen
Snoop-Filter, um beim Bestimmen des Vorhandenseins und des Status
von Daten in Cache-Zeilen solcher mehreren Chaches zu helfen. Eine
Snoop-Operation kann stattfinden, bei der ein Agent eines Bus Speichertransaktionen,
z. B. Lese/Schreib-Operationen, überwacht.
Der Agent kann die Zustände
der Cache-Zeilen, die bei den Speichertransaktionen in dem Snoop-Filter
befasst sind, aufzeichnen. Der Zustand einer Cache-Zeile kann angeben,
ob die Zeile nur eine gültige
Kopie außerhalb
des Hauptspeichers hat, mehrere gültige Kopien hat, die von mehreren
Caches gemeinsam genutzt werden, oder keine Kopien außerhalb
des Hauptspeichers hat (d. h. die in allen Caches ungültig gemacht
worden ist). Ein Dateneintrag in dem Snoop-Filter wird oftmals teilweise
durch einen Bereich seiner Adresse in dem Hauptspeicher indexiert.
-
Dem
Snoop-Filter fehlt manchmal der Raum, um den Zustand einer Zeile
für eine
neue Speichertransaktion aufzuzeichnen, und muss einen Eintrag aus
dem Snoop-Filter ausräumen,
um die neue Transaktion unterzubringen. Oftmals, wenn ein Eintrag
aus dem Snoop-Filter geräumt
wird, wird eine Rück-Invalidierungsnachricht
an jeden Prozessorcache gesendet, der möglicherweise eine gültige Kopie der
Zeile hält,
die mit dem geräumten
Eintrag verknüpft ist.
Viele Cache-Fehler werden auf von einem Snoop-Filter herrührenden
Rück-Invalidierungen einer
Cache-Zeile zurückgeführt, die
gerade verwendet werden sollte.
-
Einige
Snoop-Filter werden als inklusive Snoop-Filter (ISFs – Inclusive
Snoop Filters) dahingehend bezeichnet, dass die Information in dem
Snoop-Filter und ebenso in Cache-Zeilen des Cache gehalten wird,
die der Snoop-Filter abdeckt. Bei einer inklusiven Cache-Hierarchie
umfasst einer der Cache-Speicher (d. h. ein Cache-Speicher niedrigerer Ebene)
eine Untermenge der Daten, die in einem anderen Cache-Speicher (d.
h. einem Cache-Speicher höherer
Ebene) enthalten ist. Cache-Hierarchien können das Leistungsverhalten
von Prozessoren verbessern, da sie es ermöglichen, dass ein kleinerer Cache
mit einer relativen schnellen Zugriffsgeschwindigkeit häufig benutzte
Daten enthält.
Ein größerer Cache
wiederum mit einer geringeren Zugriffsgeschwindigkeit als der kleinere
Cache speichert weniger häufig
verwendete Daten (ebenso wie Kopien der Daten in dem Cache niedrigerer
Ebene).
-
Snoop-Filter,
ebenso wie die Caches, die sie abdecken, weisen Einträge zu und
löschen
diese. Da jedoch eine inklusive Cache-Hierarchie mit einem ISF gewisse
gemeinsame Daten speichert, kann das Räumen einer Cache-Zeile in einer
Cache-Ebene oder einem Snoop-Filter das Räumen einer Cache-Zeile in einer
anderen Ebene der Cache-Hierarchie bewirken, um die Cache-Kohärenz beizubehalten.
Die ISFs müssen
sicherstellen, dass eine Cache-Zeile, deren Adresse aus dem Snoop-Filter
geräumt
wird, aus allen abgedeckten Caches entfernt wird. Im Allgemeinen
umfasst dies das Senden einer Rück-Invalidierungsanfrage
von dem Snoop-Filter
an die abgedeckten Caches. Wenn der Snoop-Filter viele solcher Anfragen
sendet, verbraucht er Bandbreite auf der Koppelstruktur, was die
effektive Speicherwartezeit erhöhen
kann, ebenso werden möglicherweise
nützliche
Cache-Einträge
entfernt.
-
Kurzbeschreibung der Zeichnungen
-
1 ist
ein Blockschaubild einer Ausführungsform
eines Mehrprozessorsystems.
-
2 ist
eine Blockschaubild eines Kohärenzcontrollers
gemäß einer
Ausführungsform
der vorliegenden Erfindung.
-
3 ist
ein Blockschaubild, das die Wechselwirkung zwischen einem Caching-Agent,
einem Snoop-Filter und einem Bereitstellungsbereich gemäß einer
Ausführungsform
der vorliegenden Erfindung zeigt.
-
4 ist
ein Ablaufdiagramm eines Verfahrens gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
Genaue Beschreibung
-
Bei
verschiedenen Ausführungsformen
kann ein Snoop-Filter so ausgestaltet sein, dass er eine verringerte
Anzahl an Rück-Invalidierungsnachrichten
an die Caches schickt, an die er gekoppelt ist. Auf diese Weise
müssen
weniger Einträge
aus den Caches geräumt
werden, was die Treffergeschwindigkeiten beim Cache verbessert.
Das Verringern der Anzahl der Rück-Invalidierungsnachrichten
wird auch den Systemverkehr auf der Koppelstruktur verringern, was
die Speicherwartezeit und andere Faktoren, die die Leistungsfähigkeit
des Systems bestimmen, verbessert. Genauer kann bei verschiedenen Implementierungen
ein Snoop-Filter, der einen Eintrag aus dem Snoop-Filter ausräumen soll
(wobei der Eintrag mit einer gegebenen Cache-Zeile verknüpft ist)
das Senden der Rück-Invalidierungsnachricht vermeiden,
wenn es wahrscheinlich ist, dass ein entsprechender Cache in kurzer
Zeit seine eigene Invalidierungsnachricht für diese Cache-Zeile ausgeben wird.
Auf diese Weise können
die Kosten des Aussendens der Rück-Invalidierungsnachricht
von dem Snoop-Filter vermieden werden.
-
Abhängig von
der Größe des Cache
und von der Anwendung wird ein wesentlicher Anteil der Cache-Zeilen,
die von einem Snoop-Filter geräumt
werden, abgeändert
(auch als „schmutzig” bezeichnet). Wenn
ein Cache entscheidet, eine schmutzige Zeile auszuräumen, gibt
er im Allgemeinen eine „explicit writeback” (EWB)-Transaktion
aus. Bei manchen Implementierungen wird diese Transaktion als ein
ungültig
machende explizite Rückschreibe
(oder BWL.INVLD)-Transaktion bezeichnet, welche die beiden Semantiken
in eine einzige Transaktion kombiniert. Genauer berichtet diese
Transaktion den aktuellen Wert der in Frage stehenden Cache-Zeile
und liefert eine Angabe, dass die Cache-Zeile vollständig aus
allen Ebenen der Cache-Hierarchie entfernt worden ist. Ausführungsformen
verstärken
dieses zweite Attribut, so dass ein Snoop-Filter, der diesen Cache abdeckt,
seinen zugeordneten Eintrag stumm entfernen kann. Das heißt, der
Snoop-Filter kann den entsprechenden Eintrag aus dem Snoop-Filter
ohne das Ausgeben einer Rück-Invalidierungsanfrage
ausräumen.
-
Somit,
wenn ein ISF feststellen kann, dass ein abgedeckter Cache wahrscheinlich
eine ungültig machende
explizite Rückschreibetransaktion
für einen
ISF-Eintrag ausgeben wird, der geräumt worden ist oder geräumt werden
soll, kann er das Ausgeben einer Invalidierungsanfrage verzögern. Dann,
wenn der Cache diese Transaktion für die in Frage stehende Cache-Zeile ausgibt, braucht
der Snoop-Filter die Invalidierungsanfrage nicht auszugeben.
-
Somit
können
Ausführungsformen
einen ersten Mechanismus zur Verfügung stellen, der einem ISF
eine Angabe liefert, dass wahrscheinlich ein ungültig machendes explizites Rückschreiben
für einen geräumten (oder
gerade zu räumenden)
Eintrag in den Snoop-Filter ausgegeben wird, und einen zweiten Mechanismus,
um diese Information zu nutzen, von einer Ausgabe einer Invalidierungsanfrage über eine
gegebene Zeitdauer abzusehen. Wenn die zugeordnete ungültig machende
explizite Rückschreibetransaktion
während
dieser Zeitdauer empfangen wird, kann der Snoop-Filter vermeiden,
dass die Anfrage versendet wird.
-
Bei
einer Ausführungsform
kann der erste Mechanismus Hinweise bei Lesetransaktionen verwenden,
die angeben, welcher Ort in einer Cache-Zeile in einem bestimmten
Cache geräumt
wird, um Raum für
die Leseergebnisse zu schaffen. Der Hinweis selbst kann Information
umfassen, hiernach als ein „EWB-Hinweis” bezeichnet,
um zu berichten, dass der geräumte
Weg modifiziert wird. Eine alternative Form dieses Mechanismus kann
Information in dem Snoop-Filter selbst verwenden. Zum Beispiel kann,
nach dem Empfangen des Räumhinweises, der
Snoop-Filter eine Angabe enthalten, dass der Cache exklusive Eigentümerschaft
für die
Zeile, die geräumt
werden soll, erhalten hat. Das Anfragen nach exklusiver Eigentümerschaft
einer Zeile ist stark mit dem Abändern
der Zeile korreliert (typischerweise weit über 90 Prozent Wahrscheinlichkeit
für Anwendungen
der Befehlssatzarchitektur (ISA – Instruction Set Architecture)
Intel®64
und Intel® Architektur (IA)-32.
Somit kann diese Angabe bewirken, dass der Snoop-Filter das Ausgeben
einer Invalidierungsnachricht verzögert.
-
Bei
einer Ausführungsform
kann der zweite Mechanismus als ein Puffer implementiert werden, so
wie eine virtuelle oder physikalische Schlange oder ein Pool aus
Invalidierungsanfragen. Das heißt, der
Snoop-Filter kann in einen Haupt-Snoop-Filterbereich, in dem alle
Snoop-Filtereinträge gespeichert sind,
und einen Neben-Snoop-Filterbereich, der hierin als ein Bereitstellungspool
oder Invalidierungspool bezeichnet wird, in den Einträge, die
aus dem Snoop-Filter geräumt
werden sollen, gespeichert werden, aufgeteilt werden. Somit können vor
dem Räumen
und über
wenigstens eine Zeitdauer (z. B. bei manchen Ausführungsformen
eine vorbestimmte Zeitdauer, die in der Größenordnung von ungefähr 100 Nanosekunden
sein kann), in der eine Invalidierungsanfrage von dem Snoop-Filter
von der Sendung zurückgehalten
werden, geräumte
Einträge
aus dem Haupt-Snoop-Filterbereich in diesem Bereitstellungspool
gespeichert werden. Somit können
einlaufende ungültig
machende explizite Rückschreibetransaktionen
verwendet werden, um ein Durchsuchen in diesem Pool zu bewirken,
welches den Satz anhängiger Einträge umfasst,
die Invalidierungsanfragen erwarten, und jedwede passenden Größen zu löschen. Anhängige Invalidierungen
bei dieser virtuellen oder physikalischen Struktur können nach
einer gewissen Zeitdauer ausgegeben werden, können auf irgendeiner Altersrangbasis
ausgegeben werden, sollte die Belegung des Pools oder der Schlange
einen Wert erreichen, und/oder können
ausgegeben werden, wenn ausreichende Systemquellen verfügbar werden.
-
Mit
Bezug auf 1 ist ein Blockschaubild einer
Ausführungsform
eines Mehrprozessorsystems 10 gezeigt. Wie es in 1 gezeigt
ist, kann das System 10 eine Vielzahl von Verarbeitungsknoten 17 haben,
die mit einem Chipsatz 13 gekoppelt ist. Jeder der Verarbeitungsknoten 17 kann
einen oder mehrere Prozessoren 11 (zwei Prozessoren pro
Verarbeitungsknoten sind gezeigt, wobei jeder Prozessor ein Prozessorkern
oder ein Mehrkernprozessor sein kann) und einen Cache 12 umfassen.
Auf jeden Cache 12 kann lokal von Prozessoren eines „Home-Knotens” (der Verarbeitungsknoten
in dem sich der Cache befindet) und von Fern durch Prozessoren 11 von „Fern-Knoten” (den Verarbeitungsknoten
neben dem Home-Knoten) zugegriffen werden. Der Cache 12 wird
als ein „lokaler
Cache” mit
Bezug auf die Prozessoren 11 des Home-Knoten bezeichnet
und kann aus einem relativ kleinen, jedoch schnellen Speicher gebildet
sein, so wie einem statischen Speicher mit wahlfreiem Zugriff (SRAM – Static
Random Access Memory). Die Verarbeitungsknoten 17 können mit
dem Chipsatz 13 über
einen oder mehrere Front Side Busse (FSBs) 14 (nur zwei
FSBs sind gezeigt) oder andere Arten von Koppelstrukturen, so wie
Punkt-zu-Punkt-Verbindungen gekoppelt sein. Ein oder mehrere der
Verarbeitungsknoten 17 können auf einem einzigen Chip
implementiert werden. Das System 10 kann wegen der starken
gesammelten Verarbeitungsleistung, die es besitzt, als ein Serversystem
verwendet werden, obwohl der Umfang der vorliegenden Erfindung in
dieser Hinsicht nicht beschränkt
ist.
-
Der
Chipsatz 13 kann einen Kohärenz-Controller 132 umfassen,
der einen Snoop-Filter gemäß einer
Ausführungsform
der vorliegenden Erfindung umfasst, um Anfragen zu verarbei ten,
die von den FSBs 14 empfangen worden sind, und um die Datenkohärenz unter
den Caches 12 aufrecht zu erhalten. Die Funktionen des
Kohärenzcontrollers 132 werden hiernach
mit Bezug auf die 2 diskutiert. Der Chipsatz 13 kann
einen Speichercontroller 134 zum Bereitstellen einer Schnittstelle
für die
Verarbeitungsknoten 17 und weitere Komponenten des Systems 10 zur
Verfügung
stellen, um auf Speicherorte eines Speichers 15 zuzugreifen.
Der Speicher 15 kann eine dynamische Speichereinheit mit
wahlfreiem Zugriff (DRAM – Dynamic
Random Access Memory) oder eine andere flüchtige oder nicht flüchtige Speichereinheit
sein, die für
Serveranwendungen oder allgemeine Anwendungen geeignet ist.
-
Der
Chipsatz 13 kann auch einen I/O-Controller 136 umfassen,
um eine Schnittstelle für
die Verarbeitungsknoten 11 und weitere Komponenten des Systems 10 zur
Verfügung
zu stellen, um auf eine oder mehrere I/O-Baugruppen 16 zuzugreifen.
Die I/O-Baugruppen 16 können
Industry Standard Architecture(ISA)-Baugruppen, Peripheral Connect
Interconnect(PCI)-Baugruppen,
PCI Express-Baugruppen, Universal Serial Bus(USB)-Baugruppen, Small Computer
System Interface(SCSI)-Baugruppen oder andere standardmäßige oder
patentrechtlich geschützte
I/O-Baugruppen, die für
Serveranwendungen oder allgemeine Anwendungen geeignet sind, umfassen.
Bei manchen Ausführungsformen
kann der Chipsatz 13 als ein einzelner Chip implementiert sein.
Bei manchen Ausführungsformen
kann der Chipsatz 13 als zwei oder mehr Chips implementiert sein.
-
Die
Prozessoren 11 können
Speicherzeilen in ihren jeweiligen lokalen Caches 12 speichern,
um den schnellen Zugriff zu vereinfachen. Die Caches 12 können Daten,
Befehle oder eine Kombination aus beiden speichern. Für jede Cache-Zeile
können
die Caches 12 einen Tag (z. B. einen Teil einer Speicheradresse)
speichern, um die Cache-Zeile einer entsprechenden Zeile im Speicher 15 zuzuordnen
oder sie darauf abzubilden. Die Caches 12 können auch einen
Kohärenzzustand
für jede
Cache-Zeile speichern und aktualisieren. Zum Beispiel können die
Caches 12 MESI Kohärenzzustände unterstützen, bei denen
eine Cache-Zeile einen modifizierten (M – Modified) Zustand, einen
exklusiven (E – Exclusive)
Zustand, einen gemeinsam genutzten (S – Shared) Zustand oder einen
ungültigen
(I – Invalid)
Zustand haben kann.
-
Mit
Bezug auf 2 kann bei einer Ausführungsform
der Kohärenz-Controller 132 einen
Snoop-Filter 24 umfassen, um Kohärenzinformation über die
Cache-Zeilen zur Verfügung
zu stellen. Wie in 2 gezeigt, kann eine Ausführungsform
eines Kohärenz-Controllers 132 mehrere
FSB-Ports (FSB_Port_0 21 und FSB_Port_1 22), eine
Kohärenzmaschine 23,
einen Snoop-Filter 24 und einen Bereitstellungspool 28 haben.
-
Der
Snoop-Filter 24 kann eine oder mehrere Speicheranordnungen
umfassen, so wie zum Beispiel eine vollassoziative Anordnung, einen
teilassoziative Anordnung oder eine direkt abgebildete Anordnung,
die Wege oder Zeilen umfasst, um Kohärenzinformation zu speichern.
Bei einer Ausführungsform
weist der Snoop-Filter 24 eine teilassoziative Anordnung
mit N Wegen auf, wobei jede der Teilmengen N Slots (oder Wege) 225 (von
denen nur einer gezeigt ist) zum Speichern von Kohärenzinformation von
N Cache-Zeilen umfasst. Eine Cache-Zeile kann auf eine der Teilmengen
abgebildet werden, indem beispielsweise bestimmte Bits der Speicheradresse verwendet
werden. Der Weg 225 kann Information über eine Zeile speichern. Die
Information kann ein Adressen-Tag, MESI-Kohärenzzustandsinformation und
einen Anwesenheitsvektor umfassen. Der Anwesenheitsvektor kann angeben,
welcher FSB 14 mit dem Cache verbunden ist, der die Cache-Zeile
enthalten könnte.
-
Bei
einer Ausführungsform
kann der Snoop-Filter 24 nur diejenigen Einträge speichern,
die mit Zeilen in dem E/M-Zustand verknüpft sind. Derartige Snoop-Filtereinträge können als
E/M-Einträge
bezeichnet werden. Das heißt,
der Snoop-Filter 24 kann einen E/M-Eintrag für eine Zeile
speichern, wenn irgendein Cache eine exklusive Kopie der Zeile außerhalb
des Hauptspeichers enthält
oder enthalten kann. Das Speichern nur der E/M-Einträge kann
die Gesamtanzahl der Einträge,
die in dem Snoop-Filter 24 gespeichert sind, verringern,
und kann effektiv die Größe des Snoop-Filters
erweitern. Als ein Kompromiss kann das Speichern nur der E/M-Einträge bewirken,
dass sich die Anzahl der Snoops, die von dem Snoop-Filter 24 erzeugt
wird, erhöht.
Insbesondere für
leseintensive Anwendungen jedoch verbessert sich das Leistungsverhalten
des Gesamtsystems allgemein.
-
Wie
es weiter in der 2 gezeigt ist, kann der Snoop-Filter 24 mit
dem Bereitstellungspool 28 verknüpft sein. Obwohl sie mit solchen
Strukturen bei der Ausführungsform
der 2 gezeigt ist, ist der Umfang der vorliegenden
Erfindung in dieser Hinsicht nicht beschränkt, und bei verschiedenen
Implementierungen kann der Bereitstellungspool 28 ein Teil
des Snoop-Filters 24 sein. Der Bereitstellungspool 28 kann
Einträge
speichern, die aus dem Snoop-Filter 24 ausgeräumt worden
sind, bevor sie tatsächlich
geräumt
werden (und somit aus dem Bereitstellungspool 28 entfernt
werden), und eine entsprechende Invalidierungsnach richt wird von
der Kohärenzmaschine 23 zu
einem oder mehreren Prozessorknoten übertragen.
-
Bei
einer Ausführungsform
kann, wenn eine Anfrage nach einer Speichertransaktion am Kohärenz-Controller 132 eintrifft,
die Kohärenzmaschine 23 festlegen,
wohin die Anfrage geschickt werden soll. Eine Speichertransaktion
bezieht sich auf eine Transaktion, die den Zugriff auf einen Speicher
oder einen Cache erfordert. Die Kohärenzmaschine 23 kann
den Snoop-Filter 24 durchsuchen, um festzustellen, ob der
Snoop-Filter Information über
die angefragte Zeile enthält.
Wenn der Snoop-Filter 24 die Information hat, schickt die
Kohärenzmaschine 23 die
Anfrage an den FSB-Port (21 oder 22), der mit dem
Cache verbunden ist, der eine aktuelle Kopie der Zeile hat, basierend
auf dem Anwesenheitsvektor für
die Zeile. Wenn die Transaktion möglicherweise den Zustand der
angefragten Zeile ändern
könnte, aktualisiert
die Kohärenzmaschine 23 die
Information im Snoop-Filter 24, wobei die Aktualisierungseinheit 25 verwendet
wird, um die Änderungen
wiederzugeben. Wenn der Snoop-Filter 24 keine Information
für die
Zeile hat, kann die Kohärenzmaschine 23 einen Eintrag
in den Snoop-Filter
hinzufügen,
um Kohärenzinformation über die
angefragte Zeile aufzuzeichnen, wobei ebenfalls die Aktualisierungseinheit 25 verwendet
wird.
-
Im
Zusammenhang mit dem Einfügen
eines neuen Eintrags in einen vollen Snoop-Filter oder beim Empfang
einer Invalidierungstransaktion von einem Cache, der mit einem gegebenen
Eintrag in dem Snoop-Filter 24 verknüpft ist, kann eine Invalidierungseinheit 26 der
Kohärenzmaschine 23 verwendet
werden, um die Invalidierung eines Eintrags in dem Snoop-Filter
zu bewirken. Beim Durchführen solcher
Invalidierungen wird der ausgewählte
Eintrag aus dem Snoop-Filter 24 geräumt. Wenn es jedoch wahrscheinlich
ist, dass eine invalidierende explizite Transaktion von einem Cache
geräumten
Eintrag empfangen werden wird, kann die Invalidierungseinheit 26 bewirken,
dass der Snoop-Filter 24 den Eintrag in dem Bereitstellungspool 28 leitet,
so dass das Senden einer Rück-Invalidierungsnachricht
vermieden wird.
-
Nun
mit Bezug auf die 3 ist ein Blockschaubild gezeigt,
welches die Wechselwirkung zwischen einem Caching-Agent, einem Snoop-Filter
und einem Bereitstellungsbereich gemäß einer Ausführungsform
der vorliegenden Erfindung veranschaulicht. Insbesondere zeigt die 3 einen
Caching-Agent 17, der einem der Prozessorknoten der 2 entsprechen
kann. Der Caching-Agent 17 ist an den Snoop-Filter 24 gekoppelt,
der wiederum an einen Bereitstellungspool 28 gekoppelt
ist. Für
die einfache Veranschaulichung ist der Bereitstel lungspool 28 weiter
an den Caching-Agent 17 gekoppelt gezeigt. Es soll jedoch
verstanden werden, dass bei verschiedenen Implementierungen der
Snoop-Filter 24 und der Bereitstellungspool 28 ein
Teil eines Chipsatzes oder einer anderen Schnittstellenkomponente sein
kann, die wiederum an einen entsprechenden Caching-Agent gekoppelt
ist.
-
Während des
Betriebs kann ein Cache-Speicher, der mit dem Caching-Agent 17 verknüpft ist,
so wie ein Cache der Ebene 2 (L2 – Level 2) feststellen, dass
er sich auf einem Kapazitätswert
befindet und er somit, um zusätzliche
Information zu speichern, einen oder mehrere Einträge löschen muss.
Um dies zu tun, kann der Caching-Agent 17 eine Kapazitätsräumtransaktion
an die Schnittstelle senden, die den Snoop-Filter 24 umfasst.
Da der Snoop-Filter 24 ein inklusiver Snoop-Filter ist,
kann, nach dem Empfang einer solchen Kapazitätsräumtransaktion, der Snoop-Filter 24 bewirken,
dass der zugeordnete Eintrag für
die Cache-Zeile, der vom Caching-Agent 17 geräumt werden
soll, von dem Snoop-Filter selbst geräumt wird. Wie in 3 gezeigt,
kann, wenn der Snoop-Filter 24 feststellt, dass für diese
Cache-Zeile vom Caching-Agent 17 wahrscheinlich
eine ungültig machende
explizite Rückschreibtransaktion
ausgegeben wird, der Snoop-Filter 24 in diesem Fall anstatt direkt
den Eintrag aus dem Snoop-Filter 24 zu räumen und
das Senden einer Invalidierungsanfrage vom Snoop-Filter 24 an
den Caching-Agent mit exklusivem Eigentum an der Zeile zu senden,
bewirken, dass der anhängige
Eintrag in den Bereitstellungspool 28 bewegt wird. Das
heißt,
der Bereitstellungspool 28 kann Speicherraum für verschiedene
Einträge,
die auf das Räumen
von dem Snoop-Filter 24 warten, umfassen. Wenn der Caching-Agent 17 vor dem
Ablauf einer gegebenen Zeitdauer, nachdem dieser Eintrag in den
Bereitstellungspool 28 gebracht ist, eine Invalidierungsräumtransaktion
ausgibt, kann der Eintrag aus dem Bereitstellungspool 28 ohne Senden
der Rück-Invalidierungsanfrage
geräumt werden.
-
Nun
mit Bezug auf 4 ist ein Ablaufdiagramm eines
Verfahrens gemäß einer
Ausführungsform
der vorliegenden Erfindung gezeigt. Das Verfahren 300 kann
verwendet werden, um das Senden einer Invalidierungsanfrage von
einem Snoop-Filter gemäß einer
Ausführungsform
der vorliegenden Erfindung zu verzögern. Wie es in der 4 gezeigt
ist, kann das Verfahren 300 damit beginnen, eine Angabe über eine
anhängige
Kapazitätsräumung von
einem Caching-Agent zu empfangen (Block 310). Als nächste kann
von dem Snoop-Filter festgestellt werden, ob eine Invalidierungs-Rückschreibetransaktion von
dem Caching-Agent wahrscheinlich ist (Diamant 320). Obwohl
in dieser Hinsicht nicht beschränkt,
wie oben diskutiert, kann diese Feststellung basierend auf einem
oder mehreren Hinweisen von dem Ca ching-Agent getroffen werden und/oder
basierend auf Information, die bereits in dem Snoop-Filter vorhanden
ist. Wenn eine solche Transaktion unwahrscheinlich ist, geht die
Steuerung zum Block 330 weiter, an dem der zugeordnete
Snoop-Filtereintrag gelöscht
werden kann und eine Invalidierungstransaktion von dem Snoop-Filter
an einen oder mehrere Caching-Agent basierend auf Information in
dem Snoop-Filter gesendet werden kann.
-
Jedoch,
wie oben diskutiert, kann das Senden einer solchen Invalidierungstransaktion
die Bandbreite der Koppelstruktur des Systems beeinflussen. Demgemäß geht bei
verschiedenen Ausführungsformen,
wenn festgestellt wird, dass eine invalidierende Rückschreibtransaktion
von dem Caching-Agent wahrscheinlich ist, die Steuerung statt dessen
vom Diamanten 320 zum Block 340. Dort kann der
zugeordnete Snoop-Filtereintrag zu einem Bereitstellungsbereich
bewegt werden, so wie einem Bereitstellungs- oder Invalidierungspool.
Dann kann festgestellt werden, ob innerhalb einer bestimmten Zeitdauer,
beginnend, wenn der Eintrag in den Bereitstellungsbereich bewegt
wurde (Diamant 350) eine ungültig machende Rückschreibtransaktion
von dem Caching-Agent erhalten wird. Das heißt, dieser Bereitstellungspool
kann einer Liste von Invalidierungstransaktionen, die verschickt
werden sollen, entsprechen, so lange ein Eintrag nicht durch Empfang
einer einlaufenden invalidierenden Rückschreibtransaktion innerhalb
einer gegebenen Zeitdauer gelöscht wird.
Auf diese Weise wird, wenn eine solche ungültig machende Rückschreibtransaktion
empfangen wird, das Senden einer Invalidierungsnachricht von dem Snoop-Filter
vermieden.
-
Wenn
die ungültig
machende Rückschreibtransaktion
innerhalb dieses Intervalls empfangen wird, kann der Snoop-Filtereintrag
ohne Senden einer Invalidierungstransaktion geräumt werden (Block 360).
Wenn jedoch eine derartige Transaktion nicht innerhalb dieser vorbestimmten
Zeitdauer von dem Caching-Agent empfangen wird, geht die Steuerung statt
dessen vom Diamanten 350 zum Block 330, wie oben
diskutiert. Obwohl es mit dieser besonderen Implementierung in der
Ausführungsform
der 4 gezeigt ist, ist der Umfang der vorliegenden
Erfindung in dieser Hinsicht nicht beschränkt.
-
Ausführungsformen
können
somit die Bandbreite der Koppelstruktur des Systems durch einen inklusiven
Snoop-Filter verringern, der die effektive Speicherwartezeit verringern
und das Leistungsverhalten des Systems verbessern kann. Weiter,
indem ungültig
machender Verkehr basierend wenigstens teilweise auf der Verfügbarkeit
von Systemressourcen moduliert wird, kann die Variabilität beim Leistungsverhalten
des Systems verringert werden.
-
Ausführungsformen
können
in Code implementiert werden und können auf einem Speichermedium
gespeichert werden, auf dem Befehle gespeichert sind, die verwendet
werden können,
um ein System so zu programmieren, dass es die Befehle ausführt. Das
Speichermedium kann irgendeinen Typ einer Platte umfassen, einschließlich Floppy-Disks, optische
Platten Nur-Lese-Speicher als Compact-Disk (DC-ROMs – Compact
Disk Read Only Memories), wiederbeschreibbare Compact-Disks (CD-RWs – Compact
Disk rewritables) und magnetooptische Platten, Halbleitereinheiten,
so wie Nur-Lese-Speicher (ROMs – Read
Only Memories), Speicher mit wahlfreiem Zugriff (RAMs – Random
Access Memories), so wie dynamische Speicher mit wahlfreiem Zugriff
(DRAMs – Dynamic
Random access Memories), statische Speicher mit wahlfreiem Zugriff (SRAMs – Static
Random Access Memories), löschbare
programmierbare Nur-Lese-Speicher (EPROMs – Erasable programmabe Read-Only
Memories), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher
(EEPROMs – Electrically Erasable
Programmable Read-Only Memories), magnetische oder optische Karten
oder irgendein anderer Typ Medium, der für das Speicher elektronischer Befehle
geeignet ist, ist jedoch nicht darauf beschränkt.
-
Obwohl
die vorliegende Erfindung im Hinblick auf eine beschränkte Anzahl
von Ausführungsformen
beschrieben worden ist, werden Fachleute zahlreiche Modifikationen
und Abänderungen
davon erkennen. Es ist beabsichtigt, dass die angefügten Ansprüche alle
derartigen Modifikationen und Abänderungen
abdecken, die in den wahren Gedanken und Umfang dieser vorliegenden
Erfindung fallen.