-
Die
vorliegende Erfindung bezieht sich auf Speicher in Computersystemen.
Insbesondere bezieht die vorliegende Erfindung sich auf eine effiziente
Auswahl von Speicherbetriebsarten (Speichermodi) in diesen Computersystemen.
-
In
einem einfachen Zuordnungsschema für Cache-Speicherraum für ein Computersystem
mit Caches auf mehreren Ebenen (multilevel caches), werden alle
Datenstrukturen automatisch in beiden Ebenen bzw. Levels von Cache-Speichern
aufgenommen. Wenn der Umfang einer Datenstruktur größer ist
als der kleinere Cache niedrigerer Ebene (lower-level cache), das
heißt,
wenn die Datenstruktur nicht in den Cache niedrigerer Ebene passt,
wird die Datenstruktur aus dem Cache niedrigerer Ebene verschoben.
Wenn dann die Datenstruktur kleiner ist als der größere Cache
höherer
Ebene (higher-level cache) bleibt der größte Teil der Datenstruktur
in dem Cache höherer
Ebene.
-
Unglücklicherweise
wird, während
auf einige Komponenten von Datenstrukturen häufig zugegriffen wird, auf
andere Komponenten nur einmal zugegriffen und es nicht leicht, einen
künftigen
Zugriff bzw. Zugriffe auf eine bestimmte Komponente vorherzusagen,
ohne dass man irgendeine statistische Analyse macht und/oder das
Programm kennt, welches die Datenstrukturen) besitzt. Beispielsweise
verwendet ein Computerprogramm womöglich ein großes Array, in
dem es einmal auf jedes Element des Arrays zugreift. Jedes Element
wird dann in einer ziemlich komplizierten Berechnung verwendet,
die temporäre Variable
beinhaltet. In diesem Beispiel erhöht die Cache-Aufnahme jedes
Elementes des großen
Arrays die Berechnungsgeschwindigkeit nicht beträchtlich. Im Gegensatz hierzu
führt die
Aufnahme der temporären
Variablen in den Cache zu einer schnelleren Ausführung des Programms.
-
Demnach
ist das oben beschriebene Schema, auch wenn es einfach ist, ineffizient,
da die Wahrscheinlichkeit, dass auf eine bestimmte Komponente erneut
zugegriffen wird, nicht notwendigerweise mit der Größe der übergeordneten
Datenstruktur zusammenhängt.
Da Cache-Speicher
nicht unendlich groß sind,
kann eine ineffiziente Nutzung des Cache-Speicherraumes bewirken,
dass einige andere nützliche
Datenstrukturen vorzeitig ersetzt, d. h. vor nachfolgenden Zugriffen
aus dem Cache (den Caches) ausgestoßen werden.
-
Es
besteht daher ein Bedarf an einem effizienten Mechanismus für die Auswahl
von Datenstrukturen für
die Cache-Aufnahme, welcher die Zuweisung von Speicherraum in dem
Cache höherer
Ebene in einem Computersystem mit Caches auf mehreren Ebenen optimiert,
um die Ausnutzung der Caches maximal zu machen und um die gesamte
Zugriffszeit auf Daten minimal zu machen.
-
Die
Europäische
Patentanmeldung EP-A-0,780,769, veröffentlicht am 25. Juni 1997
mit einem Prioritätsdatum
vom 22. Dezember 1995, bezieht sich auf eine hybride, nicht gleichförmige Speicherarchitektur
(non-uniform memory architecture – NUMA) und eine Nur-Cache-Speicherarchitektur
(cache-only memory architecture – COMA). Es wird ein Cache-kohärentes Protokoll
für ein
Computersystem bereitgestellt, welches eine Mehrzahl von Untersystemen
hat, die durch eine Systemverbindung miteinander verbunden sind.
Insbesondere diskutiert dieses Dokument die Verwendung eines Fehlers
für vermeidbare
NUMA_Fehlzugriffe, um erkannte, vermeidbare NUMA-Cache-Fehlzugriffe
zu überwachen.
Das Dokument erläutert
auch die Cache-Speicherung in dem COMA und dem Cache oder in dem L2-Cache
entsprechend dem ausgewählten
NUMA- oder COMA-Betrieb. Die am 25. Juni 1997 veröffentlichte
Europäische
Patentanmeldung EP-A-0 780 770 mit einem Prioritätsdatum vom 22. Dezember 1995
ist auch auf eine ähnliche
Architektur und ein Cache-kohärentes
Protokoll gerichtet.
-
Der
Artikel „Efficient
Shared Memory with Minimal Hardware Support" von Kontothanassis und Scott, p. 29–35, Computer
Architecture News, September 1995, offenbart ein System mit einem
gemeinsam verwendeten Speicher in einem nicht Cache-kohärenten,
nicht gleichförmigen
Speicherzugriffssystem und einen Mechanismus für die Erfassung von Cache-Fehlzugriffen.
Das System unterstützt
eine Veränderung
der Granularität
der Datenübertragung
für den
Cache. Insbesondere wird auf einer Maschine, welche Cache-Auffüllungen
(Übertragungen
in Cache-Zellengröße) von
entfernt gelegenen Speichern unterstützt, eine Option bereitgestellt, um
stattdessen eine vollständige
Seitenkopie in dem lokalen Speicher zu erzeugen. Es hat sich herausgestellt,
dass keine dieser Optionen in allen Fällen die beste ist und dementsprechend
wird ein hybrider Ansatz vorgeschlagen, in welchem die Granularität dynamisch
Seite für
Seite verändert
werden kann.
-
Gemäß einem
ersten Aspekt der vorliegenden Erfindung wird ein Verfahren zum
Verwenden von Speicherraum in einem Computersystem bereitgestellt,
welches einen Speicher niedrigerer Ebene und einen Speicher höherer Ebene
hat, wie es in Anspruch 1 definiert ist.
-
Gemäß einem
zweiten Aspekt der vorliegenden Erfindung wird ein Cache-Ressourcen-Zuweiser bereitgestellt,
wie er in Anspruch 7 definiert ist.
-
Gemäß einem
dritten Aspekt der vorliegenden Erfindung wird ein Computerprogramm
bereitgestellt, wie es in Anspruch 12 definiert ist.
-
Ausführungsformen
der vorliegenden Erfindung stellen ein effizientes Schema für die Auswahl von
Betriebsarten der Speicherung (Speichermodi) einer Cache-Hierarchie
auf mehreren Ebenen (levels) eines Computersystems bereit, welches
zumindest einen Cache niedrigerer Ebene (lower-level cache – LLC) und
einen Cache höherer
Ebene (higher-level cache – HLC)
hat.
-
In
einer Ausführungsform
wird Speicherraum in dem Cache niedrigerer Ebene (LLC) in Größeneinheiten
von Cache-Zeilen zugewiesen, während
Speicherraum in dem Cache höherer
Ebene (HLC) in Einheiten von Seitengröße zugewiesen wird, wobei jede Seite
zwei oder mehr Cache-Zeilen umfasst. Man beachte jedoch, dass, auch
wenn die beispielhaften Speichereinheiten, die für die Speicherung von Komponenten
und Blöcken
von Daten verwendet werden, Cache-Zeilen bzw. Seiten sind, die Erfindung
ebenso auf andere Speichereinheiten und Untereinheiten anwendbar
ist.
-
Dementsprechend
werden während
der Ausführung
eines Programms Komponenten in der Größe von Cache-Zeilen eines Blockes
von Daten in Seitengröße schrittweise
in den Cache-Zeilen
der LLCs gespeichert. Anschließend
stellt das System fest, dass es an der Zeit ist, die Zuweisung von
Cache-Ressourcen, das heißt
zwischen dem LLC und dem HLC, zu überprüfen. Der Auslöser für die Überprüfung kann
außerhalb
des Prozessors liegen, zum Beispiel ein Zeitgeber, welcher den Prozessor
periodisch (durch Interrupts) unterbricht. Alternativ kann der Auslöser für die Überprüfung von
dem LLC oder dem HLC kommen, beispielsweise wenn der LLC voll ist,
oder wenn die Ausnutzung des HLC unter einen gewissen Prozentsatz
fällt.
-
Eine Überprüfung der
Zuweisung umfasst die Identifizierung von Komponenten, die zu ihren
jeweiligen Datenblöcken
gehören,
und die Feststellung, ob die Anzahl von in dem Cache aufgenommenen
Komponenten, die mit ihren Blöcken
identifiziert wurden, einen Schwellenwert überschreiten. Wenn der Schwellenwert
für die
Cache-aufgenommenen Komponenten, die zu einem bestimmten Block gehören, überschritten
ist, wird Speicherraum in dem HLC zugewiesen, um Komponenten aus
dem Block zu speichern. Dieses Schema erhöht in vorteilhafter Weise die
Wahrscheinlichkeit künftiger
Cache-Treffer durch optimale Ausnutzung des HLC zum Speichern von
Speicherblöcken
mit einer beträchtlichen
Anzahl nutzbarer Komponenten.
-
In
einer Ausführungsform,
wie sie in einem COMA/NUMA-Computersystem implementiert ist, entspricht
die Auswahl von Speicherorten, das heißt in dem HLC gegenüber dem
LLC, der Auswahl von COMA- und NUMA-Cache-Betriebsarten. Es versteht
sich jedoch, dass das Auswahlschema ebenso auf alle Cache-Ebenen
und auf eine breite Vielfalt von Cache-Systemarchitekturen anwendbar ist, einschließlich eines
reinen COMA-Cache oder NUMA-Cache,
ohne jedoch hierauf beschränkt
zu sein.
-
Die
Erfindung wird nun anhand eines Beispiels unter Bezug auf die beigefügten Zeichnungen beschrieben,
in welchen durchgehend gleiche Teile mit den gleichen Bezugszeichen
bezeichnet sind und in denen:
-
1A ein
Blockdiagramm ist, welches ein Computernetzwerksystem 100 mit
einer hybriden Nur-Cache-Speicherarchitektur/nicht-gleichförmigen Speicherarchitektur
(CO-MA/NUMA) ist,
-
1B ein
beispielhafter Speicherplan für ein
vernetztes Computersystem nach 1A ist,
-
2 ein
Flussdiagramm ist, welches einen Teil einer Ausführungsform der Erfindung für die Zuweisung
von Cache-Speicherraum in einem Computersystem mit mehreren Prozessoren
veranschaulicht,
-
3 ein
Flussdiagramm ist, welches einen Teil einer anderen Ausführungsform
der Erfindung für die
Zuweisung von Speicherraum in einem Computersystem mit einem Prozessor
veranschaulicht,
-
4 ein
Flussdiagramm ist, welches die Ausführungsform des Zuordnungsschemas
nach 2 veranschaulicht,
-
5A–5C Flussdiagramme
sind, die eine andere Ausführungsform
der Erfindung zeigen.
-
In
der folgenden Beschreibung liefern zahlreiche Details ein umfassendes
Verständnis
der Erfindung. Diese Details umfassen Funktionsblöcke und
eine beispielhafte Cache-Architektur, um ein kosteneffizientes Schema
für die
Zuweisung von Speicherressourcen, zum von Beispiel Cache-Speichern,
eines Computersystems, zu unterstützen. Zusätzlich ist die vorliegende
Erfindung, während
sie unter Bezug auf ein spezielles Cache-Zuweisungsschema beschrieben
wird, welches eine Betriebsartauswahl für ein NUMA/COMA-Multiprozessor-Computersystem
beinhaltet, auf einen breiten Bereich von Cache- und Systemarchitekturen
anwendbar. In ande ren Fällen
bzw. in anderer Hinsicht werden wohlbekannte Schaltkreise und Strukturen
nicht im Einzelnen beschrieben, um die Erfindung nicht unnötig zu verschleiern.
-
Eine
hybride Nur-Cache-Speicherarchitektur/nicht-gleichförmige Speicherarchitektur
(COMA/NUMA) mit einem gemeinsam verwendeten globalen Speicheradressraum
und einem kohärenten Cache-System
für ein
vernetztes Computersystem bietet eine geeignete, beispielhafte Hardwareumgebung
für die
Implementierung der vorliegenden Erfindung.
-
1A ist
ein Blockdiagramm, welches ein solches hybrides COMA/NUMA-Computersystem 100
zeigt. Das System 100 umfasst eine Mehrzahl von Teilsystemen
bzw. Untersystemen (Knoten) 110, 120, ... 180,
die über
eine globale Verbindung 190 miteinander verbunden sind.
Jedem Teilsystem bzw. Untersystem ist eine eindeutige Netzwerkknotenadresse
zugewiesen. Jedes Teilsystem umfasst einen oder mehrere Prozessoren,
eine entsprechende Anzahl von Speichererweiterungseinheiten (MMUs)
und hybride Caches zweiter Ebene (second-level caches – L2$s),
einen COMA-Cache/Speicher, eine globale Schnittstelle, einen Cache
dritter Ebene (L3$) und eine lokale Verbindung. Beispielsweise umfasst
das Teilsystem 110 die Prozessoren 111a, 111b ... 111i, die
MMUs 112a, 112b, ... 112i, L2$s 113a, 113b,
... 113i, den COMA-Cache/Speicher 114,
die globale Schnittstelle 115, den L3$ 118 und
die lokale Verbindung 119. In diesem Beispiel kann jeder
der Prozessoren 111a, 111b, ... 111i einen
optionalen, kompakten Cache erster Ebene (L1$) umfassen (nicht in 1A dargestellt).
-
Um
ein verzeichnisbasiertes Cache-Kohärenz-Schema zu unterstützen, umfassen
die Teilsysteme 110, 120, ... 180 auch
Verzeichnisse 116, 126, ... 186, die
jeweils mit globalen Schnittstellen 115, 125,
... 185 verbunden sind. Daten, die von irgendeinem der
COMA-Caches/Speicher 114, 124, ... 184 stammen,
das heißt
deren „Heimat"-Ort dieses ist, können in
dem Anziehungsspeicher (AM) des Systems 100 dupliziert
werden. Beispielsweise enthält
in der COMA-Betriebsart
der Cache eines Teilsystems sowohl COMA-Cache/Speicher 114, 124,
... 184 als auch L2$s 113a ... 113i, 123a ... 123i und 183a ... 183i und
Daten, deren „Heimat" in dem Cache-Speicher 114 des
Teilsystems 110 ist, können
in einem oder mehreren der Cache-Speicher 124, ... 184 dupliziert
werden und können
auch in einem oder mehreren der L2$s 113a ... 113i, 123a ... 123i,
und 183a ... 183i dupliziert werden. Alternativ
enthält
im NUMA-Betrieb der Cache eines Teilsystems L2$s 113a ... 113i, 123a ... 123i,
und 183a ... 183i, und Daten, deren „Heimat" sich in dem Cache-Speicher 114 des Teilsystems 110 befindet,
können
in einen oder mehrere der L2$s 113a ... 113i, 123a ... 123i und 183a ... 183i und
möglicherweise
auch in L3$ 118, 128 ... 188 dupliziert
werden.
-
In
einer Ausführungsform
der vorliegenden Erfindung, wie sie in den beispielhaften hybriden
COMA/NUMA-Computersystemen 100 nach 1A implementiert
ist, ist der „Heimat"-Ort der Daten in
dem COMA-Cache/Speicher 124 des Teilsystems 120, das
heißt
das Teilsystem 120 ist sowohl das Heimat- als auch das
Besitzer-Teilsystem für
die Daten. Kopien der Daten können
auch in dem Anziehungsspeicher-(AM)-Raum eines oder mehrerer der
anfordernden Teilsysteme gespeichert werden, beispielsweise in dem
AM-Speicherraum des anfordernden Teilsystems 110 durch
Zuweisung von Speicherraum in dem COMA-Cache/Speicher 114 und/oder
in den Hybrid-Cache zweiter Ebene (L2$s) 113a, 113b,
... 113i.
-
Das
Heimatverzeichnis 126 ist für die Aufbewahrung einer Hauptaufzeichnung
existierender Kopien der Heimatseite in dem gesamten System 100 verantwortlich.
Zusätzlich
verfolgen Speicheranhänge
(MTAGs), die zu den jeweiligen AM-Verzeichnissen, das heißt den Verzeichnissen 116 und 186,
gehören,
den Zustand der lokalen Kopien in jedem anfordernden Teilsystem
unter Verwendung eines von vier beispielhaften Zuständen. Ein
Ungültigkeits(„I")-Zustand zeigt an,
dass das betreffende Teilsystem keine (im Cache aufgenommene) Kopie
einer interessierenden Datenzeile hat. Ein Zustand der gemeinsamen
Verwendung („S") zeigt an, dass
das Teilsystem und möglicherweise
auch weitere Teilsysteme eine gemeinsam verwendete (im Cache aufgenommene)
Kopie der interessierenden Datenzeile hat. Ein Besitzzustand („O") zeigt an, dass
das Teilsystem und möglicherweise
auch andere Teilsysteme eine (im Cache aufgenommene) Kopie der interessierenden
Datenzeile hat. Das Teilsystem mit der O-Kopie muss nach dem Austausch
ein Zurückschreiben
durchführen.
Ein modifizierter Zustand („M") zeigt an, dass
das Teilsystem die einzige (im Cache aufgenommene) Kopie der interessierenden Datenzeile
hat, das heißt
das Teilsystem ist der einzige Besitzer der Datenzeile und es gibt
keine S-Kopien in den anderen Teilsystemen.
-
In
dieser Implementierung wird ein Einschluss zwischen den L1$s und
den L2$s aufrechterhalten, jedoch ist kein Einschluss zwischen den
L2$s und den Caches dritter Ebene (L3$s) erforderlich. Mit anderen
Worten, Daten, die in L1$ residieren, residieren auch in einem entsprechenden
L2$. Daten jedoch, die in den L1$ oder L2$ residieren, müssen nicht
notwendigerweise auch in einem entsprechenden L3$ residieren. Der
L3$ kann also möglicherweise
keine Cache-Zeile von Daten zuordnen, selbst wenn Speicherraum für die Cache-Zeile
von Daten in dem L2$ zugewiesen ist.
-
In
der folgenden Beschreibung stellt das Auswahlschema der vorliegenden
Erfindung fest, ob eine bestimmte Datenstruktur, welche gerade in
einem Cache niedrigerer Ebene (LLC) gespeichert wird, zum Beispiel
in dem L2$ 113a oder in dem L3$ 118, nunmehr in
einem Cache höherer
Ebene (HLC), beispielsweise dem COMA-Cache 114 eines anfordernden
Teilsystems 110 in einer hybriden COMA/NUMA-Umgebung gespeichert
werden sollte oder nicht. Dementsprechend kann dieses Auswahlschema
verwendet werden, um zu bestimmen, wenn Daten, die gerade im NUMA-Betrieb
gespeichert werden, nunmehr im COMA-Betrieb gespeichert werden sollten.
Es versteht sich jedoch, dass das Auswahlschema auf alle Cache-Ebenen
und auf eine Vielzahl von Cache- und Systemarchitekturen anwendbar
ist.
-
2 ist
ein Flussdiagramm, welches einen zugrunde liegenden Aspekt der vorliegenden
Erfindung zeigt, wie sie auf einem Multiprozessor-Computersystem 100 implementiert
ist. Man beachte, dass aus Gründen
der Effizienz sowohl der L2$ als auch der L3$ gleichzeitig Daten
zuweisen und in einer Cache-Zeile speichern.
-
Wenn
der Prozessor 111a des anfordernden Teilsystems 110 eine
Datenanforderung ausgibt, wird eine Suche nach Daten in dem L2$ 113a und
dann in dem L3$ 118 durchgeführt (Schritt 210).
Wenn die Daten nicht innerhalb des anfordernden Teilsystems 110 gefunden
werden, das heißt
von dem Teilsystem 110 ein Cache-Fehlzugriff erfasst wird,
so wird eine Anforderung an das Heimatteilsystem 120 durchgeführt, um
die Daten heranzuholen (Schritt 220).
-
Das
anfordernde Teilsystem 110 versucht dann festzustellen,
ob der Cache-Fehlzugriff ein „vermeidbarer" Cache-Fehlzugriff
ist (Schritt 230). Ein Cache-Fehlzugriff ist vermeidbar,
wenn der Cache-Fehlzugriff dadurch hätte vermieden werden können, dass
die Daten in dem L3$ 118 geblieben wären. Ein Beispiel eines vermeidbaren
Cache-Fehlzugriffs ist ein „überschüssiger" Cache-Fehlzugriff, der
als ein Cache-Fehlzugriff definiert wird, dem ein Kapazitätsfehlzugriff
oder Konfliktfehlzugriff voranging. Andere Ursachen von vermeidbaren
Cache-Fehlzugriffen kann man sich ebenfalls vorstellen. Diese Cache-Fehlzugriffe
umfassen Cache-Fehlzugriffe, welche durch Neukonfigurierung von
L3$ 118 vermeidbar wären,
um neuen Cache-Speicherraum in
L3$ 118 frei zu machen, anstatt ältere Daten zu ersetzen durch
beispielsweise dynamisches Neubemessen der Größe (Vergrößern) des L3$ 118.
-
In
dieser Implementierung wählt
das Heimatverzeichnis 126 des Heimatteilsystems 120 eine
Liste von anfordernden Teilsystemen mit einer gemeinsam verwendeten
(S)Kopie der Daten, die in jeder Cache-Zeile gespeichert sind, beispielsweise
in einem Feld dir_share-bit [node], wobei node = 1, ... n und n
die Gesamtzahl an Teilsystemen ist. Zusätzlich umfasst das Heimatverzeichnis 126 die
Identität
des aktuellen Besitzers (Besitzer-ID) der Daten in jeder Cache-Zeile. Wenn es also
aktuell keinen Besitzer gibt, so identifiziert owner_ID den letzten
Besitzer. Das Heimatverzeichnis 126 umfasst auch ein Rückschreibebit
(wb_bit), welches anzeigt, ob der letzte Besitzer die Daten in den
Speicher zurückgeschrieben
hat oder ob er noch immer der Besitzer ist. Der letzte Schreiber
(last write) der Daten kann aus der jeweiligen Besitzer_ID und den
Feldern wb_bit in dem Verzeichnis 126 bestimmt werden.
Dementsprechend kann ein überschüssiger Cache-Fehlzugriff durch
eine Boolsche Gleichung wiedergegeben werden, wie zum Beispiel:
(RTS & dir_share-bit
[node] = 1) OR (RTO & last_write
= node),
wobei RTS ein Lesen zum Zwecke des gemeinsamen Verwendens
und RTO ein Lesen zum Zwecke des Besitzens ist.
-
In
einer Variante ist das Verzeichnis 126 ein Verzeichnis-Cache,
welcher Zustandsinformationen über
die Cache-Zeile hat, auf die als letztes zugegriffen wurde.
-
In
dieser Variante können
nur vermeidbare Fehlzugriffe, deren jeweiliger Eintrag in diesem
Verzeichnis-Cache liegt, bewirken, dass das anfordernde Teilsystem 110 Speicherraum
in dem L3$ 118 zuweist.
-
Wenn
das anfordernde Teilsystem 110 einen vermeidbaren Fehlzugriff
erfasst, so wird in dem L3$ 118 zum Speichern der Daten
eine geeignete Stelle zugewiesen (Schritt 250). Die geeignete
Stelle kann zugewiesen werden, indem man zunächst nach einer freien Stelle
oder einer Stelle sucht, die ungültige oder
abgelaufene Daten enthält
(Schritt 260). Wenn keine leere oder ungültige Stelle
gefunden werden kann, so wird eine verwendete Stelle zugewiesen und
es ist ein Ersatz für
die verschobenen bzw. ausgetauschten Daten erforderlich. Die verwendete
Stelle kann unter den in Verwendung befindlichen Stellen nach dem
Zufallsprinzip ausgewählt
werden. Alternativ kann ein Auswahlkriterium, wie zum Beispiel nach dem
Prinzip des am weitesten zurückliegenden
Gebrauchs (least-recently-used (LRU)) oder nach dem Prinzip des
Gebrauchs mit der geringsten Häufigkeit (least-frequently-used – LFU) angewendet
werden, um eine Stelle unter den in Verwendung befindlichen Stellen
auszuwählen.
-
Wenn
ein Ersatz für
die aus der ausgewählten,
in Verwendung befindlichen Stelle verschobenen Daten erforderlich
ist, sendet das anfordemde Teilsystem 110 die verschobenen
Daten zurück
an ihr Besitzer-Teilsystem (Schritt 265).
-
Wenn
umgekehrt der Cache-Fehlzugriff kein vermeidbarer Cache-Fehlzugriff
ist, jedoch eine leere Position in dem Cache 118 vorhanden
ist (Schritte 230 und 240), so wird die leere
Speicherstelle dem Cache 118 zugewiesen und die Daten werden
an der zugewiesenen Stelle gespeichert (Schritte 255 und 270).
Wenn anderenfalls der Cache-Fehlzugriff kein vermeidbarer Cache-Fehlzugriff
ist und der Cache 118 voll ist (Schritte 230 und 240),
so werden die Daten nicht in dem Cache 118 aufgenommen.
-
In
jedem der obigen Fälle
werden die Daten für
den anfordernden Prozessor 111a bereitgestellt (Schritt 280).
Man beachte, dass die Daten für
einen anfordernden Prozessor 111a zu jedem Zeitpunkt bereitgestellt
werden können,
nachdem die Daten von dem Besitzer-Teilsystem 120 herangeholt
worden sind, das heißt
sie können
bereitgestellt werden vor oder nach irgendeinem erforderlichen Cache-Speicherschritt 270.
-
3 ist
ein Flussdiagramm, das eine weitere Ausführungsform der vorliegenden
Erfindung zeigt, welche in einem Computersystem mit einem einzigen
Prozessor implementiert ist. Auch wenn die vorliegende Beschreibung
der Ein-Prozessor-Ausführungsform
auf einem Computersystem mit einem Prozessor, einem Cache und einem
Hauptspeicher beruht, ist das Auswahlschema ebenso anwendbar auf
irgendein beliebiges Ein-Prozessor-Computersystem mit mehreren Caches
und/oder Speichern. Beispielsweise kann der Hauptspeicher ein Cache höherer Ebene
sein.
-
Wenn
der Prozessor eine Datenanforderung ausgibt, so wird eine Suche
nach den Daten in dem Cache durchgeführt (Schritt 310).
Wenn die Daten nicht gefunden werden, das heißt, wenn ein Cache-Fehlzugriff
erfasst wird, holt der Prozessor die Daten aus dem Hauptspeicher
(Schritt 320).
-
Der
Prozessor versucht dann zu bestimmen, ob der Cache-Fehlzugriff ein „vermeidbarer" Cache-Fehlzugriff
ist bzw. war (Schritt 330). Ein Beispiel eines vermeidbaren
Cache-Fehlzugriffs in einer Ein-Prozessor-Umgebung liegt dann vor,
wenn dieselben Daten zuvor von dem Prozessor angefordert und aus
dem Hauptspeicher in den Cache herangeholt worden waren.
-
Wenn
der Prozessor einen vermeidbaren Fehlzugriff erfasst, so wird eine
geeignete Stelle in dem Cache zum Speichern der Daten zugewiesen (Schritt 350).
Die geeignete Stelle kann zugewiesen werden, indem man zunächst nach
einer leeren Stelle oder nach einer Stelle sucht, die ungültige oder
abgelaufene Daten enthält
(Schritt 360). Wenn keine leere oder ungültige Speicherstelle
gefunden werden kann, so wird eine in Verwendung befindliche Speicherstelle
zugewiesen und ein Ersatz für
die verschobenen Daten ist möglicherweise
erforderlich. Die verwendete Speicherstelle kann nach dem Zufallsprinzip
oder unter Verwendung eines Algorithmus, wie zum Beispiel LRU oder
LFU, ausgewählt
werden.
-
Wenn
der Ersatz für
die ausgetauschten Daten aus der in Verwendung befindlichen Speicherstelle
erforderlich ist, schreibt der Prozessor die Daten zurück in den
Hauptspeicher (Schritt 365). Man beachte, dass sowohl in
den Ein-Prozessor- als auch in den Multi-Prozessor-Systemen, soweit
ein zwangsweises „Durchschreiben" des/der Caches durchgesetzt
wird, die verschobenen Daten einfach verworfen werden können, da
die Inhalte des/der Cache(s) und Speicher immer kohärent sind. „Zurückkopier"-Caches können ebenfalls
verschobene Daten einfach verwerten, wenn die verschobenen Daten nicht
modifiziert worden sind.
-
Wenn
umgekehrt der Cache-Fehlzugriff nicht ein vermeidbarer Cache-Fehlzugriff
ist, und wenn der Cache nicht voll ist (Schritte 330 und 340),
so weist der Prozessor eine leere Speicherstelle in dem Cache zu
und die Daten werden an der zugewiesenen Stelle gespeichert (Schritte 355 und 370).
Wenn ansonsten der Cache-Fehlzugriff nicht ein vermeidbarer Cache-Fehlzugriff
ist und wenn der Cache voll ist (Schritte 330 und 340),
so werden die Daten nicht im Cache aufgenommen.
-
In
jedem der obigen Fälle
werden die Daten für
den anfordernden Prozessor bereitgestellt (Schritt 380).
Man beachte, dass die Daten für
den anfordernden Prozessor vor oder nach dem Schritt 370 der
Aufnahme im Cache bereitgestellt werden können.
-
Wie
oben gemäß der vorliegenden
Erfindung erläutert,
wie es durch die 4 und 5A–5C veranschaulicht
wird, wird eine Feststellung getroffen, ob Daten effizienter gespeichert
werden können, wenn
Speicherraum in nach Seiten bemessenen Einheiten in einem Cache
höherer
Ebene (HLC), beispielsweise im COMA-Cache 114, zugewiesen
werden können,
anstatt in nach Cache-Zeilen bemessenen Teileinheiten in einem Cache
niedrigerer Ebene (LLC), beispielsweise im L2$ 113a und/oder
L3$ 118 zugewiesen zu werden. Mit anderen Worten, das Auswahlschema
legt fest, welche Seite(n) von Daten Nutzen daraus ziehen würde(n),
wenn darauf im COMA-Betrieb anstatt im NUMA-Betrieb zugegriffen werden
würde.
-
In
dieser Implementierung kann die Größe des COMA-Cache 114 während der
Programmausführung
dynamisch verändert
werden und sie kann maximal die Größe des Speicherraumes des lokalen Knotens
annehmen. In dem COMA-Cache 114 aufgenommene Daten werden
nicht in dem L3$ 118 aufgenommen. Da die COMA-Cache-Größe in einfacher Weise
erhöht
werden kann und da die Hardwarezusatzlast für die Unterstützung von
Datenzugriffen in dem COMA-Cache 114 wesentlich
geringer gehalten werden kann als die Handwarezusatzlast zum Unterstützen von
Datenzugriffen im L3$ 118, kann das Umwandeln von Seiten
aus dem NUMA- in den COMA-Betrieb die Datenzugriffsanforderung von
dem L3$ 118 verringern.
-
Gemäß 4 werden
Komponenten eines Blockes von Daten, beispielsweise Cache-Zeilen
von einer Seite von Daten kontinuierlich in einem Cache niedrigerer
Ebene (LLC) gespeichert und ersetzt, wobei die Anzahl der im Cache
aufgenommenen Komponenten fluktuiert (Schritt 410). In
dieser Implementierung werden Feststellungen getroffen, ob die in dem
LLC aufzunehmenden individuellen Cache-Zeilen in der oben beschriebenen
und in den 2 und 3 gezeigten
beispielhaften Weise vorgenommen werden. Cache-Zeilen können jedoch
auch auf der Basis anderer Kriterien in dem LLC aufgenommen werden
oder sie können
einfach jedes Mal dann im Cache aufgenommen werden, wenn die entsprechenden
Cache-Zeilen durch ein Teilsystem angefordert werden.
-
Schließlich erfasst
das Teilsystem 110 ein Auslösesignal zur Überprüfung der
Zuweisung von Speicherraum in dem LLC (Schritt 420). Man
beachte, dass eine Überprüfung der
LLC-Speicherzuweisung
auf eine ganze Anzahl von Arten ausgelöst werden kann. Beispielsweise
kann eine Zuweisungsüberprüfung ausgelöst werden,
wenn die Ausnutzung des Caches höherer
Ebene (HLC), zum Beispiel des COMA-Cache 114, unter einen
Schwellenwert herabsinkt, oder wenn der LLC auf Grund zu zahlreicher Datenaustausche
zu viel Last aufnimmt, oder wann immer ein Zeitgeber des Systems 100 abläuft.
-
Nach
Erfassen eines Signals zur Speicherüberprüfung überprüft das Teilsystem 110 die
Inhalte des LLC (Schritt 430) und identifiziert Seiten
von Daten, die eine beträchtliche
Anzahl von Cache-Zeilen haben, welche in dem LLC vorhanden sind
(Schritt 440). Wenn irgendwelche neuen Blöcke von
Daten ein Nachprüfungskriterium
erfüllen,
wenn beispielsweise die Anzahl von Cache-Zeilen einer Seite einen Schwellenwert überschreitet,
so wird ein Speicherblock (Seite) in dem HLC für den neuen Datenblock zugewiesen
(Schritt 450). Dieser Schwellenwert kann vorbestimmt sein
oder über
Software auswählbar
sein.
-
Wenn
der HLC voll ist, sollte ein alter Block an Daten für den Ersatz
bzw. Austausch ausgewählt (Schritt 460)
werden. Es sind verschiedene Variationen des Blockauswahlprozesses
möglich.
Beispielsweise kann der ausgewählte
alte Datenblock der am weitesten zurückliegend verwendete (LRU)-Block von
Daten sein. Andere wohlbekannte Speicheraustauschkriterien schließen das
der am wenigsten häufigen
Verwendung ein.
-
Nachdem
ein alter Block von Daten für
den Austausch ausgewählt
worden ist, kann ein Zurückschreibevorgang
des alten Datenblockes erforderlich sein, je nachdem in dem HLC
implementierten Austauschprotokoll. In diesem Beispiel wird, da
der HLC, zum Beispiel der COMA-Cache 114, ein Rückkopier-Cache
ist, der ersetzte Datenblock an seine entsprechende Heimatstelle
zurückgeschrieben
(Schritt 470). Umgekehrt kann, wenn der HLC ein Durchschreibe-Cache
ist, der ausgetauschte Datenblock einfach verworfen werden. In jedem
Fall können
nunmehr Komponenten des neuen Datenblockes in dem neu zugewiesenen
Blockraum in dem HLC im Cache aufgenommen werden (Schritt 480).
-
In
einer weiteren alternativen Ausführungsform
der Erfindung, wie sie in 5A dargestellt
ist, kann eine Nachprüfung
der Speicherzuweisung ausgelöst
werden, nachdem ein Cache-Fehlzugriff
im Zusammenhang mit einer Komponente aus einem Block von Daten steht.
Dementsprechend wird, wenn ein Cache-Fehlzugriff vorliegt, das heißt eine
zu einem Block von Daten gehörige
Komponente weder in dem LLC noch in dem HLC gefunden wird (Schritt 510),
die Komponente von der Heimatstelle (dem Heimatort) herangeholt
(Schritt 520). Wenn andere Komponenten, die zu demselben
Block von Daten gehören,
aktuell in dem HLC gespeichert sind, das heißt Speicherraum für den zugehörigen Datenblock bereits
in dem HLC zugewiesen worden ist, so wird die Komponente innerhalb
desselben zugewiesenen Speicherblockes in dem HLC gespeichert (Schritt 570).
-
Wenn
umgekehrt Speicherraum für
den zugehörigen
Block noch nicht in dem HLC zugewiesen worden ist (Schritt 530),
und das Teilsystem 110 feststellt, dass eine Überprüfung der
Cache-Zuweisung zwischen
dem HLC und dem LLC an der Zeit ist (Schritt 540), so stellt
das Teilsystem 110 fest, ob die Gesamtzahl zugewiesener
Komponenten, die in dem LLC aufgenommen ist, den Schwellenwert bzw. Grenzwert überschreitet
(Schritt 550). Der Grenzwert bzw. der Schwellenwert kann
ein vorbestimmter Wert sein oder er kann ein dynamisch auswählbarer
Wert sein. Wenn der Schwellenwert überschritten wird, so wird
der Speicherraum für
den zugehörigen
Block in dem HLC zugewiesen (Schritt 560).
-
5B zeigt
den HLC-Zuweisungsschritt 560 im Detail. Wenn der HLC voll
ist (Schritt 561), so kann, je nachdem, ob der HLC ein
Zurückschreibe- oder
Durchschreibe-Cache ist, ein Zurückschreiben der
verschobenen Daten an die Heimatstelle erforderlich sein. In diesem
Beispiel wird, da der HLC, das heißt der COMA-Cache 114,
ein Rückkopier-Cache ist,
ein Zurückschreiben
des ausgetauschten bzw. verschobenen Blockes ausgelöst, bevor
der frei gemachte Block an Speicherraum in dem HLC erneut beschrieben
werden kann (Schritte 562 und 563). Wenn umgekehrt
leerer Speicherraum in dem HLC vorhanden ist, wird ein Block an
leerem Speicherraum für
den neuen Datenblock zugewiesen (Schritte 561 und 564).
-
Gemäß 5A kann
nun, nachdem Speicherraum in dem HLC für den neuen Datenblock zugewiesen
worden ist, die zu dem neuen Block gehörige Komponente nunmehr in
dem HLC gespeichert werden (Schritt 570). In dieser Implementierung
wird die Komponente optional in dem LLC gespeichert (Schritt 580).
-
Gemäß 5C kann
die vorliegende Ausführungsform
mit einer selektiven Cache-Aufnahmemethode
umgesetzt werden. Dementsprechend wird, anstatt dass bei jedem Cache-Fehlzugriff einfach
in dem LLC aufgenommen wird, eine Komponente nur dann im Cache aufgenommen,
wenn ein „vermeidbarer" Fehlzugriff vorliegt
(Schritt 581). Ein Beispiel eines vermeidbaren Fehlzugriffes
ist ein „überschüssiger" Fehlzugriff, wie
zum Beispiel ein Kapazitäts-Fehlzugriff oder
ein Konflikt-Fehlzugriff.
-
Wenn
der Cache-Fehlzugriff ein vermeidbarer Fehlzugriff ist, so wird
Speicherraum in dem LLC für
diese Komponente zugewiesen (Schritt 583). Je nachdem,
ob der LLC ein Rückkopier-
oder Durchschreibe-Cache ist, kann ein Zurückschreiben einer ersetzten
Komponente an ihre Heimatstelle erforderlich sein. In diesem Falle
wird, da der LLC, zum Beispiel L2$ 113a, ein Rückkopier-Cache
ist, ein Zurückschreiben
der ersetzten Komponente ausgelöst,
bevor die neue Komponente in dem LLC gespeichert werden kann (Schritte 584, 586 und 587).
Wenn hingegen leerer Speicherraum in dem LLC vorhanden ist, so wird
Speicherraum zugewiesen und die neue Komponente wird in dem LLC
gespeichert (Schritte 582, 585 und 587).
-
Wiederum
gemäß 5A wird
in jedem der obigen Fälle
die Datenkomponente für
den anfordernden Prozessor bereitgestellt (Schritt 590).
Man beachte, dass die Daten für
den anfordernden Prozessor jederzeit bereitgestellt werden können, nachdem
die Komponenten von der Heimatstelle herangeholt worden sind (Schritt 520),
das heißt
entweder vor oder nachdem die Komponente in dem HLC und/oder dem
LLC aufgenommen worden ist.
-
Es
sind verschiedene Optimierungen des oben beschriebenen Speicherauswahlmechanismus möglich. Beispielsweise
kann anstelle der automatischen Cache-Aufnahme von Komponenten,
die zu einem neuen Block von Daten gehören, in dem Cache höherer Ebene,
wann immer die Anzahl zugehöriger
Komponenten, die in dem Cache niedrigerer Ebene aufgenommen sind,
einen Schwellenwert überschreitet,
der neue Block nur dann in dem HLC aufgenommen werden, wenn die
Anzahl von im Cache aufgenommenen Komponenten in dem LLC die Anzahl
von Cache-Treffern überschreitet,
die den älteren
Block betreffen, der gerade in dem HLC aufgenommen ist und der für den Austausch
ausgewählt worden
ist. Der Schutzumfang der Erfindung sollte durch die folgenden Ansprüche festgelegt
werden.