-
Diese
Erfindung bezieht sich allgemein auf ein Verfahren zum Aufrechterhalten
der Kohärenz
in einer hierarchischen Cacheanordnung eines Computersystems.
-
Die
meisten Computersysteme verwenden eine aus mehreren Ebenen bestehende
Hierarchie von Speichersystemen, wobei sich relativ schnelle, teure
Speicher mit begrenzter Kapazität
auf der höchsten
Ebene der Hierarchie befinden und sich relativ langsamere, kostengünstigere
Speicher mit höherer
Kapazität
auf der untersten Ebene der Hierarchie befinden. In der Regel umfaßt die Hierarchie
einen kleinen schnellen Speicher, der als Cache bezeichnet wird,
der entweder physisch in eine prozessorintegrierte Schaltung integriert
oder der Geschwindigkeit halber physisch nahe des Prozessors angebracht
ist. Es können
getrennte Anweisungscaches und Datencaches vorliegen. Es können mehrere
Ebenen von Caches vorliegen.
-
Viele
Computersysteme verwenden mehrere Prozessoren, von denen jeder mehrere
Ebenen von Caches aufweisen kann. Es können manche Caches durch mehrere
Prozessoren gemeinsam verwendet werden. Alle Prozessoren und Caches
können
einen gemeinsamen Hauptspeicher verwenden. Eine bestimmte Cachezeile
kann gleichzeitig in einem Speicher und in den Cache-Hierarchien für mehrere
Prozessoren vorhanden sein. Alle Kopien einer Cachezeile in den
Caches müssen
identisch sein, eine Eigenschaft, die als Kohärenz bezeichnet wird. Die Protokolle
zum Aufrechterhalten einer Kohärenz
für mehrere
Prozessoren werden als Cache-Kohärenzprotokolle
bezeichnet.
-
Ein
Cache „besitzt" eine Cachezeile,
wenn der Cache über
eine Erlaubnis verfügt,
die Cachezeile zu modifizieren, ohne weitere Kohärenztransaktionen auszugeben.
Es kann lediglich einen „Besitzer" einer Cachezeile
geben. Für
jegliches Cache-Kohärenzprotokoll
muß die
aktuellste Kopie einer Cachezeile von dem derzeitigen Besitzer,
falls vorhanden, wiedergewonnen werden, und dem Anforderer muß eine Kopie
der Daten geliefert werden. Falls die Cachezeile modifiziert werden
soll, muß der
Besitz durch den Anforderer erworben werden, und etwaige gemeinsam
verwendete Kopien müssen
invalidiert werden.
-
Es
gibt drei übliche
Ansätze,
um die Position des Besitzers einer Cachezeile zu bestimmen, mit vielen
Variationen und Zwischenformen. Bei einem Ansatz, der als Snoop-Protokoll
bezeichnet wird, ist der Besitzer unbekannt, und alle Caches müssen befragt
(snooped) werden, um die Position der aktuellsten Kopie der angeforderten
Cachezeile zu bestimmen. Alle Anforderungen eines Zugangs zu einer
Cachezeile, seitens einer beliebigen Vorrichtung in dem System,
werden zu allen Caches in dem System weitergeleitet. Schließlich wird
die aktuellste Kopie einer Cachezeile lokalisiert, und dem Anforderer
wird eine Kopie bereitgestellt. Bei einem Einzelbussystem verwenden
Kohärenzverkehr
(Snooping-Verkehr), Adressen
und oft Daten alle einen gemeinsamen Bus.
-
Bei
einem zweiten Ansatz, der als ein verzeichnisbasiertes Protokoll
bezeichnet wird, wird ein Speicher bereitgestellt, um Informationen über den Zustand
jeder Cachezeile in dem Speichersystem zu pflegen. Beispielsweise
kann ein Verzeichnis für
jede Cachezeile in einem Speicher ein Bit für jede Cache-Hierarchie umfassen,
um anzugeben, ob die Cache-Hierarchie eine Kopie der Cachezeile
aufweist, und ein Bit, um anzugeben, ob die Cache-Hierarchie einen
Besitz aufweist. Für
jede Anforderung eines Zugangs zu einer Cachezeile muß das Verzeichnis konsultiert
werden, um den Besitzer zu bestimmen, und daraufhin wird die aktuellste
Ko pie der Cachezeile wiedergewonnen und dem Anforderer geliefert.
In der Regel werden Markierungen und Statusbits für ein Verzeichnis
in einem Hauptspeicher gespeichert, so daß eine Anforderung von Zustandsinformationen in
dem Hauptspeicher zirkuliert und die Wartezeit des Hauptspeichers
aufweist. Bei einem Mehrbussystem kann ein Verzeichnisverkehr auf
einem separaten Bus stattfinden.
-
Ein
dritter Ansatz ist ein globales Kohärenzfilter, das für jede gültige Cachezeile
in dem Cachesystem eine Markierung aufweist. Ein Kohärenzfilter ist
ein Snoop-System mit einem zweiten Satz von Markierungen, die zentral
gespeichert sind, für
alle Caches in dem System. Eine Anforderung einer Cachezeile wird
an das zentrale Filter und nicht an alle Caches weitergeleitet.
Die Markierungen für
ein Kohärenzfilter
werden üblicherweise
in einem kleinen Hochgeschwindigkeitsspeicher gespeichert. Manche Kohärenzfilter
verfolgen eventuell nur im Besitz befindliche Cachezeilen und enthalten
vielleicht nicht alle gemeinsam verwendeten Cachezeilen in dem System.
Bei einem Mehrbussystem kann ein Kohärenzfilterverkehr auf einem
separaten Bus vorliegen.
-
Bei
relativ kleinen Systemen mit einem Bus oder mit lediglich einigen
wenigen Bussen liefern Snoop-basierte Protokolle die beste Leistungsfähigkeit.
Snoop-basierte Systeme mit einem Bus erhöhen jedoch den Busverkehr,
und bei großen
Systemen mit einem Bus oder mit lediglich einigen wenigen Bussen
kann ein Snoop-Verkehr die Gesamtleistungsfähigkeit begrenzen. Verzeichnisbasierte
Systeme erhöhen
die Zeit, die erforderlich ist, um eine Cachezeile wiederzugewinnen
(Latenz bzw. Wartezeit), relativ zu einem Schnüffeln auf einem einzelnen Bus,
jedoch erfordert ein Verzeichnis bei einem Mehrbussystem weniger
Kohärenzverkehr
auf den Systembussen als Snoop-basierte Systeme. Bei großen Mehrbussystemen,
bei denen ein Busverkehr wichtiger sein kann als eine Wartezeit,
liefern verzeichnisbasierte Systeme in der Regel die beste Gesamtleistungsfähigkeit.
Viele Computersysteme sind eine gewisse Art von Zwischenform aus
Snoop-basierten und verzeichnisbasierten Protokollen. Bei einem
Mehrbussystem können
beispielsweise Snoop-basierte Protokolle zum Zweck einer Kohärenz auf
jedem lokalen Bus verwendet werden, und verzeichnisbasierte Protokolle
können
zum Zweck einer sich über
mehrere Busse erstreckende Kohärenz verwendet
werden.
-
Wenn
ein Prozessor eine Cachezeile anfordert, umfaßt die Gesamtzeit, die erforderlich
ist, um die Cachezeile wiederzugewinnen (Gesamtwartezeit) (1) die
Zeit, die erforderlich ist, um Zugangsrechte unter Verwendung eines
Cache-Kohärenzprotokolls
zu erwerben, (2) die Zeit, die erforderlich ist, um eine Adresse
zu verarbeiten, und (3) die Zeit, die erforderlich ist, um die Daten
wiederzugewinnen und zu transferieren. Wie oben erörtert wurde,
kann ein Busverkehr für
Kohärenzanforderungen
eine Gesamtleistungsfähigkeit
begrenzen.
-
Eine
Möglichkeit,
einen Busverkehr für
Kohärenzanforderungen
zu vermindern, besteht darin, die Cachezeilengröße zu erhöhen. Falls beispielsweise aneinander
angrenzende Cachezeilen angefordert werden, erfordert jede Cachezeile
eine separate Kohärenzanforderung.
Falls eine Cachezeilengröße verdoppelt
wird, werden für
jede Kohärenzanforderung
zweimal so viele Daten gelesen. Ferner ist ein beträchtlicher
Teil der Gesamtwartezeit die Zeit, die erforderlich ist, um eine
Speicheranforderung zu den verschiedenen Speicherkomponenten zu
leiten und die Daten von diesen Komponenten zu erhalten. Größere Cachezeilen
stellen mehr Daten für
jede Anforderung bereit. Wenn die Cachezeilen jedoch noch größer werden,
wird ein Großteil
der transferierten Daten nicht benötigt, und ein Großteil des
Cache-Raums ist mit Daten gefüllt,
die nicht benötigt werden.
Dies erhöht
den Busverkehr für
einen Datentransfer und erhöht
die Cache-Fehlgriffrate,
die beide die Gesamtleistungsfähigkeit
negativ beeinflussen. Ferner kann ein gewisser Bruchteil einer Cachezeile exklusiv
durch mehr als einen Prozessor oder Knoten benötigt werden. Dies kann eine übermäßige Cache-Zu- Cache-Kopieraktivität bewirken,
da die beiden Prozessoren oder Knoten um einen Besitz kämpfen, und
die sich ergebende Anzahl von Kohärenzanforderungen kann steigen.
-
Die
US-A-5,787,475 beschreibt ein variable Prefetch-Schema, bei dem
eine Anzahl von in einer Gruppe übertragenen
Speicherzeilen abhängig
von der Hardware des Computersystems bestimmt wird.
-
Es
ist die Aufgabe der vorliegenden Erfindung, ein Verfahren zu schaffen,
das die zur Aufrechterhaltung der Kohärenz notwendige Busbelastung
reduziert.
-
Diese
Aufgabe wird durch ein Verfahren gemäß Anspruch 1 gelöst.
-
Die
vorliegende Erfindung schafft ein Verfahren zur Aufrechterhaltung
der Kohärenz
in einer hierarchischen Cacheanordnung eines Computersystems mit
einem Bus, über
den eine maximale Anzahl von Cachezeilen als Gruppe übertragen
wird, wobei die Anzahl der tatsächlich übertragenen
Cachezeilen von den Besitzverhältnissen
innerhalb der Gruppe abhängt.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
Blockdiagramm eines beispielhaften Computersystems, das sich zur
Verwendung bei der Erfindung eignet;
-
2 ein
Flußdiagramm
eines beispielhaften Verfahrens zum Aufrechterhalten einer Kohärenz für eine Cachezeilenanforderung
ohne eine Anforderung eines Besitzes;
-
3 ein
Flußdiagramm
eines beispielhaften Verfahrens zum Aufrechterhalten einer Kohärenz für eine Cachezeilenanforderung
mit einer Anforderung eines Besitzes;
-
4 ein
Flußdiagramm
eines beispielhaften alternativen Verfahrens für einen Teil der 3;
-
5 ein
Flußdiagramm
einer beispielhaften Alternative zu den Verfahren der 2 bis 4.
-
1 veranschaulicht
ein beispielhaftes Computersystem, das zur Verwendung bei der Erfindung
geeignet ist. In 1 sind mehrere Knoten (100, 102 und 104)
durch einen Schalter 106 oder eine andere Zwischenverbindung
miteinander verbunden. Jeder Knoten umfaßt mehrere Prozessoren (P).
Jeder Prozessor umfaßt
einen Cache erster Ordnung (C1). Jeder Knoten umfaßt einen
gemeinsam verwendeten Cache zweiter Ordnung (C2) und einen gemeinsam
verwendeten Speicher (M). Jeder gemeinsam verwendete Speicher umfaßt ein Verzeichnis
(D). Die Anzahl der Knoten, die Anzahl der Prozessoren pro Knoten,
die Anzahl der Caches, die Position des Speichers und die Verwendung
der Verzeichnisse dienen alle lediglich Veranschaulichungszwecken.
-
In
bezug auf einen Cache-Fehlgriff sei angenommen, daß die Zeit
(Wartezeit), die ein Prozessor benötigt, um eine Cachezeile von
einem Cache erster Ordnung von einem anderen Prozessor in seinem eigenen
Knoten wiederzugewinnen (beispielsweise die Wartezeit, die der Prozessor 108 benötigt, um eine
Cachezeile von dem Cache 110 wiederzugewinnen) T Nanosekunden
beträgt.
Die Zeit, die der Prozessor benötigt,
um eine Cachezeile von dem Speicher seines eigenen Knotens wiederzugewinnen (beispielsweise
die Wartezeit, die der Prozessor 108 benötigt, um
eine Cachezeile von dem Speicher 112 wiederzugewinnen)
kann ca. 3T Nanosekunden betragen. Die Zeit, die der Prozessor benötigt, um
eine Cachezeile von dem Speicher eines fernen Knoten wiederzugewinnen
(bei spielsweise die Wartezeit, die der Prozessor 108 benötigt, um
eine Cachezeile von dem Speicher 114 wiederzugewinnen),
kann ca. 6T Nanosekunden betragen. Die Zeit, die der Prozessor benötigt, um
eine Cachezeile von einem Cache erster Ordnung in einem fernen Knoten
wiederzugewinnen (beispielsweise die Wartezeit, die der Prozessor benötigt, um
eine Cachezeile von dem Cache 116 wiederzugewinnen), kann
ca. 9T Nanosekunden betragen. Bei einem typischen Einzelbussystem
(beispielsweise Bus 106) ist ein Cache-Zu-Cache-Transfer
in der Regel schneller als ein Transfer von einem Speicher. Bei
einem typischen Mehrbussystem, wie in 1, ist ein
Transfer des schlimmsten Falls von einem Speicher (6T Nanosekunden)
schneller als ein Cache-Zu-Cache-Transfer des schlimmsten Falles (9T
Nanosekunden). Deshalb wird für
ein Mehrbussystem im Vergleich zu einem Einzelbussystem eine andere
Strategie benötigt,
um Cachezeilen im Falle eines Cache-Fehlgriffs wiederzugewinnen,
um die Gesamtspeicher-Wartezeit
zu optimieren.
-
Bei
einem typischen Computersystem entspricht eine Speicheradresse einer
Cachezeile. Wenn eine Adresse einem Speichersystem präsentiert
wird, kann das Speichersystem die angeforderten Daten wiedergewinnen,
möglicherweise
aus mehreren verschachtelten Quellen, und die sich ergebenden Daten
daraufhin in ein Speicherregister plazieren. Um eine Parallelität zu erhöhen, ist
es bekannt, daß Speichersysteme
(beispielsweise Speicher 112) in der Tat mehrere Cachezeilen
wiedergewinnen und mehrere Cachezeilen in ein Speicherregister plazieren.
Bei einem im Handel erhältlichen beispielhaften
Computersystem beträgt
eine Cachezeile beispielsweise 128 Bytes, und wenn eine Cachezeile
angefordert wird, gewinnt das Speichersystem 512 Bytes
(4 Cachezeilen) wieder und plaziert die Cachezeilen in ein Register.
Der anfordernde Prozessor empfängt
lediglich die eine angeforderte Cachezeile. Die übrigen Cachezeilen stehen für ein Lesen
mit verringerter Wartezeit zur Verfügung, wobei angenommen wird,
daß eine
der anderen Cachezeilen bald benötigt
wird. Eine Kenntnis dieser Anordnung kann verwendet werden, um Compiler
zu optimieren, die daraufhin die verringerte Wartezeit für die anderen
Cachezeilen nutzen können.
-
Es
ist ferner bekannt, daß Caches
einen zugeordneten Vorabrufpuffer aufweisen, so daß die angeforderte
Cachezeile und N folgende Cachezeilen im Falle eines Cache-Fehlgriffs
aus dem Speicher wiedergewonnen werden. Üblicherweise ist der Transfer
jeder der N Cachezeilen das Ergebnis einer separaten Bustransaktion.
Der anfordernde Cache empfängt
lediglich die eine angeforderte Cachezeile, und die übrigen Cachezeilen
sind für
ein Lesen mit verringerter Wartezeit verfügbar, wobei angenommen wird,
daß eine
der anderen Cachezeilen bald benötigt
wird.
-
Im
Gegensatz zu obigem kann bei einem Computersystem gemäß der Erfindung
eine Cachezeilengruppe aus dem Speicher wiedererlangt oder aus einem
Cache kopiert werden, und die gesamte Cachezeilengruppe kann durch
den Anforderer mit einer einzigen Leseanweisung im Cache abgespeichert
werden. Ferner wird eine Cache-Kohärenz zusätzlich zu einzelnen Cachezeilen
auch für
Cachezeilengruppen aufrechterhalten. Insbesondere weisen einzelne
Cachezeilen innerhalb einer Cachezeilengruppe unterschiedliche Besitzer
auf. Hieraus ergeben sich mehrere Vorteile. Als erstes betrachte man
die oben erläuterten
relativen Wartezeiten. Falls der Prozessor 108 eine Cachezeile
anfordert, die sich im Speicher 114 befindet, beinhaltet
ein Großteil der
Wartezeit ein Lokalisieren der Cachezeile. Falls es wahrscheinlich
ist, daß benachbarte
Cachezeilen benötigt
werden (räumlich-nahe
Lage), liefert ein System gemäß der Erfindung
mehrere Cachezeilen für
eine sehr geringe inkrementale Wartezeit. Ein individueller Besitz
an Cachezeilen innerhalb von Cachezeilengruppen verringert eine
Cache-Zu-Cache-Kopieraktivität.
Ferner ermöglichen
spezielle Speicheranweisungen einen Transfer einer variablen Anzahl
von Cachezeilen, je nach Besitz, was eine Cache-Zu-Cache-Kopieraktivität weiter
verringert. Wie unten ausführlicher
erläutert
wird, transferiert ein System gemäß der Erfindung in der Regel
ferner eine Cachezeilengruppe von einem Speicher und nicht von einem
Cache, wodurch die durchschnittliche Wartezeit, der lokale Busverkehr
und der Verknüpfungsverkehr
(beispielsweise 118) für
ein Mehrbussystem verringert wird. Falls beispielsweise ein Prozessor
im Knoten 100 eine Cachezeile anfordert, die sich im Speicher 114 im
Knoten 104 befindet und ferner in einem Cache im Knoten 102 abgespeichert
ist, findet das System den Eintrag in dem Verzeichnis für den Knoten 104 und
gewinnt die Cachezeilen direkt aus dem Speicher 114 wieder,
statt einen zusätzlichen
Busverkehr an dem Knoten 102 zu verursachen. Dementsprechend
verringert ein System, das Cachezeilengruppen gemäß der Erfindung
verwendet, die Wartezeit und nutzt die räumlich-nahe Lage sogar über die
von in Sektoren aufgeteilten Caches und Vorabrufpuffern hinaus,
während
es übermäßige Cache-Zu-Cache-Transfers
vermeidet.
-
Typische
Caches weisen eine Cachezeilengröße L auf,
und die Einheit der Kohärenz
und die Einheit des Transfers beträgt L. In Sektoren aufgeteilte
Caches mit Teil-Cachezeilen weisen Teil-Cachezeilen (oder Teilblöcke) der
Größe S auf,
wobei S < L, die
Kohärenzeinheit
kann S sein, und die Transfereinheit kann S oder L sein. Bei einem
Cache gemäß der Erfindung
beträgt
die Cachezeilengröße L, die Transfereinheit
kann L oder ganzzahlige Vielfache von L betragen, und die Kohärenzeinheit
beträgt ganzzahlige
Vielfache von L. Cachezeilengruppen können die Verwendung von Teil-Cachezeilen ergänzen. Das
heißt,
daß in
Sektoren aufgeteilte Caches mit Teil-Cachezeilen sowie ein Schnüffeln in
jedem Knoten verwendet werden können
und Cachezeilengruppen mit einem Verzeichnis oder Kohärenzfilter über mehrere
Knoten verwendet werden können.
-
Falls
ein Speichersystem N Cachezeilen wiedergewinnt und sie in ein Register
plaziert, kann es zweckmäßig sein,
dieselben N Cachezeilen als eine Cachezeilengruppe zu verwenden.
Es ist jedoch nicht nötig,
daß eine
Cachezeilengruppe dieselbe Größe aufweist
wie ein Speicherregister. In einem Teil der folgenden Erörterung
sei angenommen, daß eine
Ca chezeilengruppe lediglich zu Darstellungszwecken aus vier Cachezeilen
besteht. Unter Vorgabe einer M-Bit-Adresse und von N Cachezeilen
in einer Cachezeilengruppe wird eine Cachezeilengruppe durch die
höchstwertigen
M minus log2(N) Bits der Adresse definiert.
Beispielsweise sei angenommen, daß eine Cachezeilengruppe vier
Cachezeilen beträgt,
und unter der Annahme, der Einfachheit halber, einer 16-Bit-Adresse, liegt eine
aus vier Cachezeilen bestehende Cachezeilengruppe vor, die durch
die 14 höchstwertigen
Bits der Adresse in Verbindung mit allen Kombinationen der zwei
mindestwertigen Bits der Adresse definiert wird.
-
Ein
Cache ist bekanntermaßen
in Sätze
organisiert, wobei manche der Adreßbits als ein Index verwendet
werden, um zu bestimmen, welcher Satz für die Adresse zu verwenden
ist. In jedem Satz werden andere Adreßbits, als Markierung bezeichnet, verwendet,
um zu bestimmen, welche Cachezeile in einem Satz der Adresse entspricht.
Bei Cachezeilengruppen gemäß der Erfindung
kann der Index statt einer einzelnen Cachezeile einer Cachezeilengruppe entsprechen.
Unter Vorgabe beispielsweise eines I-Bit-Index können die höchstwertigen I-2 Bits des Index
als Index für
eine aus vier Cachezeilen bestehende Cachezeilengruppe verwendet
werden. Eine Markierung kann für
die gesamte Cachezeilengruppe gelten. Alternativ weist jede Cachezeile
vorzugsweise einen separaten adressierbaren Eintrag auf, wie durch
die Markierung für
die Cachezeile bestimmt wird. Jede Cachezeile weist vorzugsweise
ihren eigenen Kohärenzzustand
auf, und die gesamte Gruppe kann der Zweckmäßigkeit halber optional einen separaten
Kohärenzzustand
aufweisen. Der separate Kohärenzzustand
für die
gesamte Gruppe wird nachfolgend ausführlicher erörtert.
-
Aus
der obigen Erörterung
können
unter Vorgabe einer Adresse N Cachezeilen aus dem Speicher oder
aus einem anderen Cache als eine Gruppe wiedergewonnen werden, und
N Cachezeilen können
als Gruppe in einen Cache plaziert werden. Nachdem die Cachezeilengruppe
in den Cache plaziert wurde, können
die Cachezeilen als Gruppe oder separate Cachezeilen behandelt werden,
wie unten erläutert
wird.
-
Cache-Kohärenzprotokolle
plazieren üblicherweise
jede im Cache abgespeicherte Cachezeile in einen von mehreren Zuständen. Ein üblicher
Ansatz verwendet drei mögliche
Zustände
für jede
Cachezeile in einem Cache. Bevor irgendwelche Cachezeilen in den
Cache plaziert werden, befinden sich alle Einträge in einem vorgegebenen Zustand, der
als „ungültig" („invalid") bezeichnet wird.
Wenn eine zuvor nicht im Cache abgespeicherte physische Cachezeile
in den Cache plaziert wird, wird der Zustand des Eintrags in dem
Cache von Ungültig
zu „Gemeinsam
Verwendet" geändert. Falls
eine Cachezeile in einem Cache modifiziert wird, kann sie auch unmittelbar
in einem Speicher modifiziert werden (als Durchschreiben bezeichnet).
Alternativ dazu kann ein Cache eine modifizierte Cachezeile nur dann
in einen Speicher schreiben, wenn die modifizierte Cachezeile in
dem Cache invalidiert oder ersetzt ist (als Rückschreiben bezeichnet). Wenn
bei einem Rückschreib-Cache
eine Cachezeile in dem Cache modifiziert ist oder werden wird, wird
der Zustand des Eintrags in dem Cache zu „Modifiziert" geändert. Die
soeben beschriebene Zuweisung von drei Zuständen wird manchmal als MSI-Protokoll
bezeichnet, wobei auf den Anfangsbuchstaben jedes der drei Zustände verwiesen
wird.
-
Eine übliche Variation
fügt einen
zusätzlichen
Zustand hinzu. Bei der Variation wird, wenn eine physische Cachezeile
in den Cache kopiert wird, falls keine Kopie der Cachezeile in einem
anderen Cache existiert, die Cachezeile in einen „Exklusiv"-Zustand plaziert.
Das Wort „Exklusiv" bedeutet, daß genau
eine Cache-Hierarchie eine Kopie der Cachezeile aufweist. Falls
sich eine Cachezeile in einem „Exklusiv"-Zustand in einer Cache-Hierarchie für einen
ersten Prozessor befindet, und falls ein zweiter Prozessor dieselbe
Cachezeile anfordert, wird die Cachezeile anschließend in
zwei Cache-Hierarchien kopiert, und der Zustand des Eintrags in
jedem Cache wird auf „Gemeinsam
Verwendet" einge stellt. Diese
soeben beschriebene Zuweisung von vier Zuständen wird manchmal als MESI-Protokoll
bezeichnet, wobei auf den Anfangsbuchstaben jedes der vier Zustände verwiesen
wird. Es gibt noch viele andere Variationen.
-
Eine
Cachezeile in dem Exklusiv-Zustand kann jederzeit durch ihren Besitzer
ohne weitere Kohärenzoperationen
modifiziert werden. Nachdem sie modifiziert wurde, ist die Cachezeile
in dem lokalen Cache als Modifiziert markiert. Der Exklusiv-Zustand ermöglicht,
daß eine
Cachezeile im Besitz befindlich sein kann (die einzige Kopie in
dem System), ohne modifiziert zu sein. Dieses Schema verringert
die Anzahl von zusätzlichen
Kohärenzanforderungen,
die benötigt
werden, um eine Cachezeile zu modifizieren.
-
In
der nachfolgenden Erörterung
wird das MESI-Protokoll verwendet, um ein erstes beispielhaftes
Ausführungsbeispiel
der Erfindung zu veranschaulichen. Die Erfindung ist gleichermaßen auf
andere Cache-Kohärenzsysteme
und -verfahren anwendbar. Ferner werden einige weitere Annahmen vorausgesetzt,
um eine Erörterung
eines ersten beispielhaften Ausführungsbeispiels
wie folgt zu ermöglichen.
Eine Cachezeile wird in dem MESI-Protokoll im Besitz sein, wenn
sie sich in dem Modifiziert- oder Exklusiv-Zustand befindet. Zu
Veranschaulichungszwecken lediglich, falls eine Cachezeile einen
Besitzer (Zustand Modifiziert oder Exklusiv) aufweist und die Cachezeile
durch einen Anforderer angefordert wird, der die Cachezeile eventuell
modifiziert, wird die aktuellste Kopie der Cachezeile dem Anforderer bereitgestellt
und zusätzlich
in einen Speicher geschrieben. Der vorherige Besitzer invalidiert
seine Kopie der Cachezeile, und der neue Besitzer stellt den Anfangszustand
der Cachezeile auf Exklusiv ein. Falls eine Cachezeile nicht im
Besitz befindlich ist (nicht in einem Cache abgespeichert oder mit
dem Zustand Gemeinsam Verwendet im Cache abgespeichert ist), stellt
der Anforderer den Anfangszustand der Cachezeile auf Gemeinsam Verwendet
ein.
-
Weitere
Annahmen können
für Cachezeilengruppen
nützlich
sein. Falls sich eine angeforderte Cachezeile in einer Cachezeilengruppe
befindet, die einen gemischten Besitz aufweist (das heißt mindestens
zwei Cachezeilen in der Gruppe weisen unterschiedliche Besitzer
auf), so sollte der Anforderer vorzugsweise einen Besitz lediglich
der einen angeforderten Cachezeile erhalten, um übermäßige Cache-Zu-Cache-Transfers zu
vermeiden. Falls sich im Gegensatz hierzu eine angeforderte Cachezeile
in einer Cachezeilengruppe befindet, die gänzlich der Besitz eines einzigen
Besitzers sind, ist es wahrscheinlich, daß sich ein Besitz einer gesamten
Datenstruktur ändert,
und der Anforderer sollte vorzugsweise einen Besitz der gesamten
Cachezeilengruppe bekommen. Diese Regeln verringern eine Wartezeit
für Cachezeilengruppen,
indem eine Cachezeilengruppe und ein Besitz der Gruppe transferiert
werden, falls die Cachezeilen alle verwendet sind, um sich im Besitz
desselben vorherigen Besitzers zu befinden, während sie verstärkte Cache-Zu-Cache-Transfers verhindern,
indem sie Cachezeilen, die eine Geschichte aufweisen, in der sie
sich gleichzeitig im Besitz verschiedener Besitzer befanden, nicht
kombinieren.
-
Ein
weiteres optionales Merkmal eines Systems gemäß der Erfindung besteht darin,
dem Anforderer eine Steuerung darüber zu geben, ob mehrere Cachezeilen
transferiert werden sollten, wenn lediglich eine Cachezeile angefordert
wird. Im einzelnen können
neue Speichersystembefehle implementiert werden, die eine Anforderung
optional auf eine einzige Cachezeile begrenzen oder optional erlauben, daß mehrere
Cachezeilen transferiert werden.
-
Angesichts
der obigen Annahmen und Merkmale veranschaulicht 2 ein
beispielhaftes Verfahren zum Aufrechterhalten einer Kohärenz für Cachezeilengruppen
für eine
Cachezeilenanforderung, bei der ein Besitz der angeforderten Cachezeile
nicht angefordert wird. 3 und 4 veranschaulichen ein
beispielhaftes Verfahren zum Aufrechterhalten einer Kohärenz für eine Cachezeilengruppe
für eine Cachezeilenan forderung,
bei der ein Besitz der angeforderten Cachezeile angefordert wird.
In 1 und in der folgenden Erläuterung der 2 bis 4 wird
ein Verzeichnis zum Zweck eines beispielhaften Systems angenommen,
jedoch sind Kohärenzfilter oder
andere Kohärenzverfahren
gleichermaßen
geeignet.
-
In 2 wird
eine Cachezeile angefordert, aber ein Besitz der Cachezeile wird
nicht angefordert. Das heißt,
daß der
Anforderer die Daten lesen muß und
die Daten nicht modifizieren muß.
In dem Verzeichnis werden Kohärenzzustände für die entsprechende
Cachezeilengruppe geprüft.
Bei Schritt 200, falls alle Cachezeilen in der entsprechenden
Cachezeilengruppe nicht im Besitz sind (für MESI befinden sich keine
Cachezeilen in irgendeinem Cache in dem Modifiziert- oder Exklusiv-Zustand),
so erhält
der Anforderer bei Schritt 202 eine Kopie der angeforderten Cachezeile
und Kopien von bis zu allen der anderen Cachezeilen in der entsprechenden
Cachezeilengruppe. Der Anforderer markiert seine Kopie von wiedergewonnenen
Cachezeilen als Gemeinsam Verwendet (sowohl vor Ort als auch in
dem entsprechenden Verzeichnis), und der Anforderer markiert seine Eintragspositionen
für etwaige
nicht wiedergewonnene Cachezeilen als Ungültig. Bei Schritt 204,
falls manche Cachezeilen in der entsprechenden Cachezeilengruppe
im Besitz sind und die angeforderte Cachezeile nicht im Besitz ist,
erhält
der Anforderer bei Schritt 206 eine Kopie der angeforderten
Cachezeile und Kopien von bis zu allen der anderen nicht im Besitz
befindlichen Cachezeilen in der entsprechenden Cachezeilengruppe.
Der Anforderer markiert seine Kopie von wiedergewonnenen Cachezeilen
als Gemeinsam Verwendet (sowohl vor Ort als auch in dem entsprechenden
Verzeichnis), und der Anforderer markiert seine Eintragspositionen
für etwaige
nicht wiedergewonnene Cachezeilen als Ungültig.
-
Man
beachte, daß bei
den Schritten 202 und 206 die angeforderte Cachezeile
und vielleicht andere Cachezeilen in einer Cachezeilengruppe nicht
im Besitz sind. Deshalb können
die nicht im Besitz befindlichen Cachezeilen aus dem Speicher wiedergewonnen
werden, und, wie oben erörtert
wurde, für
ein Mehrbussystem werden die nicht im Besitz befindlichen Cachezeilen
an einem fernen Knoten vorzugsweise aus dem Speicher wiedergewonnen.
Das System kann ein Schnüffeln
in einem Knoten verwenden, wobei eine resultierende Priorität auf ein
Wiedergewinnen von Cachezeilen aus einem Cache, falls verfügbar, gesetzt
wird, und kann ein Verzeichnis oder ein Kohärenzfilter über Knoten verwenden, wobei eine
Priorität
auf ein Wiedergewinnen von Cachezeilen aus dem Speicher gesetzt
wird. Folglich wird die Wartezeit pro Cachezeile verringert, da
mit einer einzigen Anforderung mehrere Cachezeilen transferiert werden,
und für
Mehrbussysteme wird die Wartezeit weiter verringert und der lokale
Busverkehr weiter verringert, da die Cachezeilen statt aus Caches
aus einem Speicher wiedergewonnen werden.
-
Bei
Schritt 208 befindet sich die angeforderte Cachezeile im
Besitz, und falls ein Besitz innerhalb der Cachezeilengruppe gemischt
ist (das heißt,
daß sich
manche Cachezeilen in der entsprechenden Cachezeilengruppe im Besitz
unterschiedlicher Besitzer befinden), dann erhält der Anforderer bei Schritt 210 genau
die angeforderte Cachezeile von dem Besitzer. Wie oben erörtert wurde,
sollte der Anforderer vorzugsweise einen Besitz lediglich der einen
angeforderten Cachezeile erhalten, um übermäßige Cache-Zu-Cache-Transfers
zu vermeiden. Der Anforderer markiert seine Kopie der wiedergewonnenen
Cachezeile als Exklusiv oder Gemeinsam Verwendet (sowohl vor Ort
als auch in dem entsprechenden Verzeichnis), und der Anforderer
markiert seine Eintragspositionen für die nicht wiedergewonnenen
Cachezeilen als Ungültig.
Bei Schritt 212 befinden sich alle Cachezeilen in der entsprechenden
Cachezeilengruppe im Besitz desselben Besitzers. Der Anforderer
kann eine Kopie der angeforderten Cachezeile und Kopien von bis
zu allen der anderen Cachezeilen in der Gruppe von dem Besitzer
erhalten. Wie oben erläutert
wurde, ist es wahrscheinlich, daß sich ein Besitz einer gesamten
Datenstruktur ändert,
und der Anforderer sollte vorzugsweise eine Kopie der gesamten Cachezeilen gruppe
erhalten. Der Anforderer markiert seine Kopie von wiedergewonnenen
Cachezeilen als Exklusiv oder Gemeinsam Verwendet (sowohl vor Ort
als auch in dem entsprechenden Verzeichnis), und der Anforderer
markiert seine Eintragspositionen für etwaige nicht wiedergewonnene Cachezeilen
als Ungültig.
-
In 3 wird
eine Cachezeile angefordert, und ein Besitz der Cachezeile wird
angefordert. Bei Schritt 300, falls alle Cachezeilen in
der entsprechenden Cachezeilengruppe nicht im Besitz sind, kann der
Anforderer bei Schritt 302 eine Kopie der angeforderten
Cachezeile und von bis zu allen der anderen Cachezeilen in der entsprechenden
Cachezeilengruppe erhalten. Alle existierenden Kopien der angeforderten
Cachezeilen, die nicht die Kopie des Anforderers sind, werden als
Ungültig
markiert. Der Anforderer markiert seine Kopie der angeforderten
Cachezeile als Exklusiv und seine Kopien anderer wiedergewonnener
Cachezeilen als Gemeinsam Verwendet (sowohl vor Ort als auch in
dem entsprechenden Verzeichnis), und der Anforderer markiert seine
Eintragspositionen für
etwaige nicht wiedergewonnene Cachezeilen als Ungültig. Bei
Schritt 304, falls einige Cachezeilen in der entsprechenden
Cachezeilengruppe im Besitz sind und die angeforderte Cachezeile
nicht im Besitz ist, erhält
der Anforderer bei Schritt 306 eine Kopie der angeforderten
Cachezeile und Kopien von bis zu allen der anderen nicht im Besitz
befindlichen Cachezeilen in der entsprechenden Cachezeilengruppe.
Alle existierenden Kopien der angeforderten Cachezeilen, die nicht
die Kopie des Anforderers sind, werden als Ungültig markiert. Der Anforderer
markiert seine Kopie der angeforderten Cachezeile als Exklusiv (sowohl
vor Ort als auch in dem entsprechenden Verzeichnis), und der Anforderer
markiert seine Kopien etwaiger anderer wiedergewonnener Cachezeilen
als Gemeinsam Verwendet, und der Anforderer markiert seine Eintragspositionen für etwaige
nicht wiedergewonnene Cachezeilen als Ungültig. Wie oben in Zusammenhang
mit 2 erörtert
wurde, werden nicht im Besitz befindliche Cachezeilen für ein Mehrbussystem
vorzugsweise aus dem Speicher wiedergewonnen. Exklusive Cachezeilen
können
entweder aus dem besitzenden Cache oder Hauptspeicher wiedergewonnen
werden.
-
Bei
Schritt 308 ist die angeforderte Cachezeile im Besitz befindlich,
und falls sich manche Cachezeilen in der entsprechenden Cachezeilengruppe im
Besitz unterschiedlicher Besitzer befinden, erhält der Anforderer bei Schritt 310 genau
die angeforderte Cachezeile von dem Besitzer der angeforderten Cachezeile.
Alle existierenden Kopien der angeforderten Cachezeile, die nicht
die Kopie des Anforderers sind, werden als Ungültig markiert. Der Anforderer markiert
seine Kopie der angeforderten Cachezeile als Exklusiv (sowohl vor
Ort als auch in dem entsprechenden Verzeichnis), und der Anforderer
markiert seine Eintragspositionen für die nicht wiedergewonnenen
Cachezeilen als Ungültig.
Bei Schritt 312 befinden sich alle Cachezeilen in der entsprechenden Cachezeilengruppe
im Besitz desselben Besitzers. Wie oben erläutert wurde, ist es wahrscheinlich,
daß sich
ein Besitz einer gesamten Datenstruktur ändert, und der Anforderer sollte
vorzugsweise einen Besitz der gesamten Cachezeilengruppe erhalten.
Bei Schritt 312 wird die aktuellste Kopie der gesamten Gruppe
in den Speicher kopiert und zu dem Anforderer kopiert, und alle
existierenden Kopien der Gruppe, die nicht die Kopie des Anforderers
sind, werden als Ungültig
markiert. Der Anforderer markiert seine Kopie der Gruppe als Exklusiv
(sowohl vor Ort als auch in dem entsprechenden Verzeichnis).
-
Die
Wahl, ob eine gesamte Gruppe oder lediglich eine Teilmenge einer
Gruppe zu einem Anforderer kopiert werden soll, kann geändert werden.
Insbesondere befindet sich eine Gruppe bei Schritt 312 in 3 im
Besitz, und die gesamte Cachezeilengruppe wird zu dem Anforderer
kopiert. Es ist möglich,
daß ein
Gruppenbesitz zu einem Überlastungszustand
(übermäßige Cache-Zu-Cache-Transfers) führen kann. 4 veranschaulicht
ein alternatives Verfahren, das bei der Entscheidung „JA" für Schritt 308 in 3 beginnt
und bei dem ein Besitz einer Gruppe zerschlagen werden kann, wenn
sie durch den derzeitigen Besitzer lediglich teilweise modifiziert wird.
-
In 4 wird
ein zusätzlicher
Test 400 hinzugefügt,
um zu bestimmen, ob alle Cachezeilen in einer Cachezeilengruppe
durch einen ursprünglichen Besitzer
modifiziert wurden. Bei Schritt 400 befindet sich die gesamte
Cachezeilengruppe im Besitz, und falls manche Cachezeilen nicht
modifiziert wurden (manche Cachezeilen befinden sich nicht in dem
Modifiziert-Zustand), wird bei Schritt 402 lediglich die
angeforderte Cachezeile zu dem Anforderer kopiert. Der Anforderer
markiert seine Kopie der angeforderten Cachezeile als Exklusiv (sowohl
vor Ort als auch in dem entsprechenden Verzeichnis), und der Anforderer
markiert seine Eintragspositionen für die nicht wiedergewonnenen
Cachezeilen als Ungültig.
Als Alternative könnten
bei Schritt 402' zusätzlich zu
einem Kopieren der angeforderten Cachezeile alle Cachezeilen, die
nicht die angeforderte Cachezeile sind, kopiert werden, und der
Zustand der Cachezeilen, die nicht die angeforderte Cachezeile sind,
könnte
als Gemeinsam Verwendet markiert werden. Als weitere Alternative
könnten
bei Schritt 402'' zusätzlich zu
einem Kopieren der angeforderten Cachezeile alle Cachezeilen, die
nicht die angeforderte Cachezeile sind, kopiert werden, und der
Zustand aller nicht-angeforderten Cachezeilen, die sich zuvor in
dem Modifiziert-Zustand befanden, könnte als Exklusiv markiert
werden, und der Zustand aller nicht-angeforderten Cachezeilen, die sich
zuvor in dem Exklusiv-Zustand
befanden, könnte
als Gemeinsam Verwendet markiert werden. Obwohl sich alle Cachezeilen
im Besitz desselben Besitzers befanden, könnte daher, falls zwei Caches
unterschiedliche Cachezeilen innerhalb einer Gruppe modifizieren
müssen,
jeder einen Besitz unterschiedlicher Cachezeilen erhalten, und ein Überlastungszustand
wird vermieden. Falls die gesamte Gruppe durch den ursprünglichen
Besitzer modifiziert wird, wird bei Schritt 404 ein Besitz
der gesamten Gruppe an den Anforderer transferiert, und ein forderer
transferiert, und ein Überlastungszustand
ist unwahrscheinlich.
-
Ferner
kann die Wahl, ob erlaubt werden soll, daß eine ursprüngliche
Kopie einer nicht im Besitz befindlichen Gruppe verbleibt, geändert werden.
Beispielsweise könnte
in 2 bei Schritt 202 die existierende Kopie
der gesamten Cachezeilengruppe invalidiert werden. Falls der Raum
nicht benötigt
wird, kann es der ursprünglichen
Kopie der Cachezeilengruppe jedoch gestattet werden, zu verbleiben,
wie in 2 veranschaulicht ist. Das System kann verfolgen,
wo Kopien von Cachezeilen existieren, und falls eine Cachezeile
modifiziert wird, müssen
lediglich die Caches mit Kopien der modifizierten Cachezeilen benachrichtigt
werden.
-
Wie
oben erörtert
wurde, verringern Verzeichnisse und globale Kohärenzfilter einen Kohärenzverkehr
auf einem Bus, während
sie die Wartezeit erhöhen.
Ein Lesen und Schreiben von Cachezeilengruppen verringert den Kohärenzverkehr,
so daß ein
busbasiertes System wie in 1 verwendet werden
kann, wo ansonsten Verzeichnisse oder globale Kohärenzfilter
erforderlich wären.
Ferner ist die vorliegende Erfindung gleichermaßen auf Systeme anwendbar,
die Verzeichnisse oder globale Kohärenzfilter verwenden. Beispielsweise
können
die Kohärenzzustände für jeden
der Schritte, bei denen Kohärenzzustände ermittelt
werden (2, 200, 204, 208; 3, 300, 304, 308; 4, 400),
durch ein Schnüffeln
oder durch Prüfen
eines Verzeichnisses oder durch Prüfen eines globalen Kohärenzfilters
bestimmt werden.
-
Ausgehend
von den 2 bis 5 ist Besitz
ein wichtiges Konzept für
die Erfindung. Auf einem Besitz statt auf MESI basierende Kohärenzzustände wären besonders
nützlich.
In der früheren US-A-6,868,481
wird eine Alternative zu einem Schnüffeln, zu Verzeichnissen und
globalen Kohärenzfiltern
offenbart. Bei der US-A-6,868,481 erhält ein Computersystem eine
Liste von Markierungen (als Globaler-Besitz-Markierungsliste, GOTL = global ownership
tag list, be zeichnet) für
alle Cachezeilen in dem System aufrecht, für die ein Cache einen Besitz aufweist.
Das heißt,
daß für jede Markierung
in der GOTL die entsprechende Cachezeile modifiziert (dirty) oder
lediglich potentiell modifiziert (potentiell dirty) sein kann. Eine
GOTL umfaßt
im Besitz befindliche Cachezeilen und umfaßt allgemein nicht alle Gemeinsam
Verwendeten Cachezeilen in dem System. Falls eine Cachezeile keinen
Eintrag in der GOTL aufweist, kann angenommen werden, daß die Cachezeile
Gemeinsam Verwendet wird. Man beachte ferner, daß bei einer GOTL in der Tat
ein Besitz transferiert werden kann, ohne daß die Daten transferiert werden
müssen.
-
Eine
GOTL ist besonders auf die vorliegende Erfindung anwendbar. Das
heißt,
daß eine
GOTL einen Eintrag für
jede Cachezeilengruppe, für
die mindestens eine Cachezeile im Besitz ist, aufweisen kann. Ferner
kann jeder Eintrag Informationen bezüglich des Kohärenzzustands
jeder Cachezeile innerhalb der Cachezeilengruppe und bezüglich dessen,
welcher Prozessor oder Cache oder Knoten oder Bus der Besitzer der
Cachezeile ist, umfassen. Falls eine bestimmte Cachezeile in einem
Cache im Besitz ist, können
die Markierungen für
die entsprechende Cachezeilengruppe in die GOTL plaziert werden,
und als Teil des GOTL-Eintrags wird die bestimmte Cachezeile als
im Besitz befindlich markiert, und der Besitzer wird identifiziert.
Für jeden
der Schritte, bei denen Kohärenzzustände bestimmt
werden (2, 200, 204, 208; 3, 300, 304, 308; 4, 400),
können
die Kohärenzzustände durch Prüfen der
GOTL bestimmt werden. Man beachte jedoch, daß sich eine Adresse für eine Cachezeile
normalerweise nur dann in der GOTL befindet, wenn die Cachezeile
im Besitz ist, wohingegen eine Adresse für eine Cachezeilengruppe in
der GOTL auch dann in der GOTL verbleiben kann, wenn jede einzelne Cachezeile
in der Gruppe als gemeinsam verwendet markiert ist. Wie oben erörtert wurde,
könnte
beispielsweise in 2, bei Schritt 202,
die existierende Kopie der gesamten Cachezeilengruppe invalidiert werden,
oder falls der Raum nicht benötigt
wird, kann es der ursprünglichen
Kopie der Cachezeilengruppe gestattet werden, zu verbleiben. Falls
ein Raum in der GOTL benötigt
wird, kann das System wählen, nicht
im Besitz befindliche Cachezeilengruppen auszusondern, bevor Gruppen
mit zumindest teilweisem Besitz ausgesondert werden.
-
5 veranschaulicht
ein Beispiel eines Gegenstücks
zu den 3 und 4 (angeforderter Besitz) beim
Verwenden einer GOTL. Man erinnere sich aus der obigen Erörterung,
daß es
einer Cachezeilengruppe optional gestattet sein kann, in einem Cache
zu verbleiben, obwohl sie sich nicht mehr auch nur teilweise im
Besitz befindet. Dementsprechend kann ein Eintrag für eine Cachezeilengruppe in
einer GOTL verbleiben, obwohl keine Cachezeile in der Cachezeilengruppe
im Besitz ist. Das heißt, daß in einer
GOTL ein Eintrag immer dann erfolgt, wenn eine Cachezeile in der
Cachezeilengruppe im Besitz ist, daß jedoch der Eintrag nicht
unbedingt unmittelbar entfernt wird, wenn alle Cachezeilen innerhalb
der Cachezeilengruppe nicht mehr im Besitz sind. Die GOTL umfaßt lediglich
die schmutzigen bzw. modifizierbaren Cachezeilen. Falls sich die
Cachezeilengruppe, die die angeforderte Cachezeile umfaßt, nicht
in der GOTL befindet (Schritt 500) oder falls die Cachezeilengruppe
in der GOTL verbleibt, jedoch vollständig nicht im Besitz befindlich
ist (Schritt 502), empfängt
der Anforderer bis zu der gesamten Cachezeilengruppe (Schritt 504).
Falls die angeforderte Cachezeile nicht im Besitz ist, jedoch andere
Cachezeilen in der Cachezeilengruppe im Besitz sind (Schritt 506),
werden bis zu alle nicht im Besitz befindlichen Cachezeilen empfangen
(Schritt 508). Falls die angeforderte Cachezeile im Besitz
ist und die Cachezeilengruppe einen gemischten Besitz aufweist,
wird lediglich die angeforderte Cachezeile empfangen (Schritt 512).
Falls sich die gesamte Cachezeilengruppe im Besitz desselben Besitzers
befindet, wird die gesamte Cachezeilengruppe empfangen (Schritt 514).
-
Man
beachte, daß in
den 2 bis 4 manche Schritte dazu führen, daß eine Teilmenge
einer Gruppe kopiert wird, bei spielsweise 2, 202. Wenn
eine CPU-Anweisung beispielsweise eine einzelne Cachezeile anfordert,
können
alle nicht im Besitz befindlichen Cachezeilen in der entsprechenden Cachezeilengruppe
für den
Fall, daß sie
bald benötigt werden,
spekulativ kopiert werden. Alternativ kann ein Besitz mehrerer Cachezeilen
gewährt
werden, obwohl der Anforderer lediglich eine Cachezeile anfordert.
Alternativ dazu kann eine spezielle CPU-Anweisung implementiert
werden, die ausdrücklich
eine Cachezeile plus alle nicht im Besitz befindlichen anderen Cachezeilen
in einer Cachezeilengruppe anfordert. Bei jeder der Alternativen
kopiert das System ein Minimum der angeforderten Cachezeile. Alternativ
dazu kann eine spezielle CPU-Anweisung implementiert werden, die
ausdrücklich
eine Kopie oder einen Besitz einer gesamten Cachezeilengruppe anfordert.
Je nach der übrigen
Systemarchitektur können
Anforderungen, die mehr als eine Cachezeile erbeten, in einer einzigen
unteilbaren Operation durchgeführt
werden müssen.
-
Bei
der obigen Beschreibung wird eine Kohärenz für Cachezeilengruppen aufrechterhalten.
Man könnte
beispielsweise MESI verwenden, bei dem sich eine Cachezeilengruppe
lediglich dann in dem M-Zustand befindet, wenn sich alle Cachezeilen
in der Gruppe in dem M-Zustand befinden, und so weiter. Für die in
den 2 bis 5 veranschaulichten Verfahren
liefert ein Besitz jedoch nützlichere
Kohärenzinformationen
für Cachezeilengruppen.
Für die in
den 2 bis 5 veranschaulichten Verfahren wäre insbesondere
der folgende Satz von Besitzkohärenzzuständen für Cachezeilengruppen
für Entscheidungen 200, 208, 300, 308, 400, 502 und 510 vorzuziehen:
nicht
im Besitz befindlich (alle Cachezeilen innerhalb der Gruppe sind
nicht im Besitz befindlich)
nicht ein Besitzer (mindestens
eine Cachezeile ist im Besitz befindlich, und nicht alle Cachezeilen
befinden sich im Besitz eines Besitzers)
ein Besitzer (alle
Cachezeilen innerhalb der Gruppe befinden sich im Besitz desselben
Besitzers)
ein-Besitzer-modifiziert (alle Cachezeilen innerhalb der
Gruppe werden durch denselben Besitzer modifiziert).
-
Für die Zwecke
der Entscheidungen in 2 bis 5 muß ein Besitz
ferner lediglich auf einer Knoten-Ebene und nicht auf einer Cache-Ebene
vorliegen. Es genügt
zum Beispiel zu wissen, daß sich alle
Cachezeilen innerhalb einer Gruppe im Besitz von Caches befinden,
die sich alle in einem Knoten befinden und auf einem Bus durchschnüffelt werden können.