-
Die
Verwendung mehrerer Prozessoren, die Operationen parallel in einem
Computersystem ausführen,
ist schon seit langem als ein Mittel zum Vergrößern von Rechenleistung und
Durchsatz des Systems anerkannt. Um korrekte und wiederholbare Ergebnisse
in einem derartigen System erzeugen zu können, muss jedoch eine Kommunikation
zwischen den verschiedenen Prozessoren in einer gesteuerten Art
und Weise stattfinden. Um diese Kommunikation zu ermöglichen,
greifen die Prozessoren oft auf dieselben Datenspeicherorte in einem
gemeinschaftlich verwendeten Speicherraum zu, um Nachrichten und andere
Daten zwischen denselben zu übertragen, sowie
um auf andere von diesen Prozessoren gemeinschaftlich verwendete
Daten zuzugreifen und dieselben möglicherweise zu modifizieren.
Bei einem Beispiel benötigt
unter Umständen
jeder dieser Prozessoren einen „atomaren" Lese-Modifizier-Schreib-Zugriff auf
einen oder mehrere dieser Speicherorte, um eine Verfälschung
oder Beeinträchtigung
der Daten in diesen Orten zu vermeiden. Mit anderen Worten, unter
Umständen
muss jeder der Prozessoren mehrere Operationen an einem bestimmten
Datum durchführen
ohne dabei einem anderen Prozessor Zugriff auf dieselben Orte zu
gewähren.
-
In
manchen Computersystemen wurden hardwareintensive Grundelemente,
die als „Sperren" („Locks") bezeichnet sind,
wie z. B. Binärsemaphore, Zähllocks
oder Spinlocks (Warteschleifen) eingesetzt, um einen gesteuerten
Zugriff auf von diesen Prozessoren gemeinschaftlich verwendete Daten
bereitzustellen. In der Regel besitzt ein Prozessor, der erfolgreich
auf ein Lock oder ein ähnliches
Grundelement zugreift, einen unterbrechungsfreien Zugang auf einen
oder mehrere durch das Lock geschützte Speicherorte, bis der Prozessor
entscheidet, das Lock freizugeben. Während Locks beim Steuern eines
Zugriffs auf von den Sensoren gemeinschaftlich verwendete Daten
wirksam sind, implementieren Locks im Wesentlichen ein Blockierschema,
was bedeutet, dass andere Prozessoren, die auf dieselben Daten zugreifen
müssen,
vorübergehend
angehalten werden, während
ein anderer Prozessor das Lock besitzt, was sich negativ auf die
Systemleistung auswirkt. Auch der Betrag von Granularität der gemeinschaftlich
verwendeten Daten, die durch ein oder mehrere Locks geschützt sind,
wirkt sich auf den Betrag von Blockierung aus. Zum Beispiel ist
unter erhöhter
Granularität,
bei der jeder Lock eine relativ kleine Datenmenge schützt, der
Betrag an diesen Locks zugeordnetem Mehraufwand vergrößert, jedoch
der Betrag an Konkurrenz für
ein beliebiges einzelnes Lock verringert. Demgegenüber hat
eine niedrige Granularität,
bei der jedes Lock mehr Daten schützt, zur Folge, dass weniger
Locks implementiert werden, bewirkt jedoch auch eine höhere Konkurrenz für jedes
Lock. Diese Blockierung oder Konkurrenz verschlimmert sich, wenn
der Prozessor mit dem Lock ausfällt.
Andere mit Locks einhergehende wohlbekannte Übel, wie z. B. eine Systemblockade (Deadlock),
eine Permanent-Aktivitäts-Blockade (Lifelock)
sowie eine Prioritätsumkehrung
sind ebenfalls problematisch. Ferner vergrößert die Verwendung von Locks
oft unnötigen
Mehraufwand beträchtlich,
da die Wahrscheinlichkeit, dass zwei oder mehr Prozessoren zu einem
beliebigen Zeitpunkt auf den gleichen gemeinschaftlich verwendeten
Speicherort zugreifen, in den meisten Computersystemen relativ niedrig
ist.
-
Um
diese Probleme anzugehen, wurde das Konzept eines Transaktionsspeichers
entwickelt. Statt ein Hardwareblockierschema einzusetzen, nutzt
der Transaktionsspeicher einen optimistischeren, softwareorientierten
Ansatz. Im Allgemeinen führt
ein Prozessor eine Reihe von Operationen, als eine „Transaktion" bezeichnet, an einem
oder mehreren Speicherorten ohne Rücksicht auf die Aktionen anderer
Prozessoren zögerlich
aus, so dass an diesem Punkt keine Blockierung stattfindet. Gleichzeitig zeichnet
der Prozessor die Operationen in einem Protokoll auf. Nach den notwendigen
Operationen „validiert" oder verifiziert
der Prozessor dann, dass keine anderen Prozessoren auf dieselben
gemeinschaftlich verwendeten Daten zugegriffen haben. Falls nicht,
werden sämtliche
an den Daten vorgenommenen Veränderungen „festgeschrieben" oder dauerhaft gemacht.
Andernfalls kann es sein, dass ein Konflikt stattgefunden hat, was
es erforderlich macht, dass der Prozessor sämtliche der einhergehenden
Speicheränderungen
rückgängig macht
und die Transaktion abbricht. In diesem Fall steht es dem Prozessor
in der Regel frei, die Transaktion umgehend erneut zu versuchen.
-
Auch
wenn davon ausgegangen wird, dass ein softwarebasierter Transaktionsspeicher
eine wirksame und effiziente Alternative zu derzeitigen hardwarebasierten
Blockierschemata ist, so fällt
hier doch in der Regel ein beträchtlicher
Betrag an Software-Mehraufwand an, was somit einige der Vorteile, die
ein Transaktionsspeicher liefert, beeinträchtigt.
-
Es
ist die Aufgabe der vorliegenden Erfindung, ein Verfahren sowie
ein Cache-Speichersystem zum Bereitstellen eines Transaktionsspeichers mit
verbesserten Charakteristika zu schaffen.
-
Diese
Aufgabe wird durch ein Verfahren gemäß Anspruch 1 sowie durch eine
Cache-Speichersystem gemäß Anspruch
11 oder 21 gelöst.
-
Bevorzugte
Ausführungsbeispiele
der vorliegenden Erfindung werden nachfolgend Bezug nehmend auf
die beiliegenden Zeichnungen näher
erläutert.
Es zeigen:
-
1 ein
Blockdiagramm eines Cache-Speichersystems zum Bereitstellen eines
Transaktionsspeichers gemäß einem
Ausführungsbeispiel
der Erfindung;
-
2 mögliche Zustände einer
Cache-Line in einem typischen Cache-Speicher des Stands der Technik;
-
3 ein
Flussdiagramm eines Verfahrens zum Bereitstellen eines Transaktionsspeichers
gemäß einem
Ausführungsbeispiel
der Erfindung;
-
4 ein
Blockdiagramm von Datenstrukturen, die in einem Verfahren zum Bereitstellen
eines Transaktionsspeichers einsetzbar sind, gemäß einem weiteren Ausführungsbeispiel
der Erfindung; und
-
5 ein
Flussdiagramm eines Verfahrens zum Bereitstellen eines Transaktionsspeichers,
der die Datenstrukturen gemäß 4 einsetzt,
gemäß einem
weiteren Ausführungsbeispiel
der Erfindung.
-
1 veranschaulicht
ein Ausführungsbeispiel
der Erfindung: ein Cache-Speichersystem 100, das einen
Cache-Speicher 104 und
eine zugeordnete Cache-Steuerung 102 umfasst. Der Cache-Speicher 104 umfasst
eine Anzahl von Cache-Lines (Cache-Zeilen) 106, von denen
jede eine Kopie von Daten fassen kann, die sich in einem gewissen
Abschnitt eines Hauptspeichers (nicht gezeigt) befinden. In der
Regel ist der Cache-Speicher 104 ein kleinerer und schnellerer
Speicher als der Hauptspeicher, was es ermöglicht, dass ein mit dem Cache-Speicher 104 gekoppelter
Prozessor schneller und effizienter auf Daten zugreifen kann. Bei
einem Ausführungsbeispiel
besitzt jede Cache-Line 106 die Kapazität zum Fassen mehrerer adressierbarer
Speicherorte des Hauptspeichers. Die Cache-Steuerung 102 ist
konfiguriert, um den Cache-Speicher 104 zu steuern, um
eine oder mehrere der Cache-Lines 106 als einen Transaktionsspeicher
einzusetzen, wie es nachfolgend noch ausführlicher erklärt ist.
-
Das
Cache-Speichersystem 100 kann in einer Anzahl von Computersystemarchitekturen
eingesetzt werden. Zum Beispiel kann jeder von mehreren Prozessoren
einen Cache-Speicher 104 und eine zugeordnete Cache-Steuerung 102 umfassen,
wobei jeder der Prozessoren durch seinen Cache 104 mit einem
Hauptspeicher gekoppelt ist. In einer weiteren Implementierung kann
ein symmetrisches Multiprozessorsystem (SMP-System; SMP = symmetric
multiprocessor) mehrere Prozessoren umfassen, von denen jeder einen
Cache-Speicher 104, eine Cache-Steuerung 102 und
einen Primärspeicher
umfasst. Jeder Primärspeicher
besteht aus einem Abschnitt eines Hauptspeichers, auf den durch
jeden beliebigen der Prozessoren in dem SMP-System zugegriffen werden
kann. Viele andere Mehrprozessorsysteme, bei denen in jeden Prozessor
ein Cache-Speicher eingegliedert ist, können ebenfalls Nutzen aus einer
Anwendung des Cache-Speichersystems
und der Verfahren, die nachfolgend ausführlicher beschrieben sind,
ziehen.
-
Die
Cache-Steuerung 102 auferlegt dem Cache-Speicher 104 ein
Cache-Kohärenzprotokoll.
Gemäß dem Cache-Kohärenzprotokoll
befindet sich jede Cache-Line 106 in einem bestimmten „Zustand", der sich im Zeitverlauf
abhängig
von Zugriffen auf die Daten in der zugeordneten Cache-Line 106 ändern kann.
Bei einem Ausführungsbeispiel
ist das Cache-Kohärenzprotokoll
ein MOESI-Protokoll (MOESI = Modified-Owned-Exclusive-Shared-Invalid
= Modifiziert-Eigen-Exklusiv-Gemeinschaftlich-Ungültig), das
nach den verschiedenen Zuständen,
die jede der Cache-Lines 106 annehmen kann, benannt ist.
-
Der
Zustandssatz 200 eines MOESI-Cache-Kohärenzprotokolls vom Stand der
Technik ist in 2 graphisch dargestellt. Die
verschiedenen Zustände
(d. h., der Ungültig-Zustand 202,
der Gemeinschaftlich-Zustand 204, der Exklusiv-Zustand 206, der
Eigen-Zustand 208 und der Modifiziert-Zustand 210)
sind in einer hierarchischen Reihenfolge, die den Inhalt jeder Cache-Line
anzeigt, angeordnet. Ein Bewegen einer Cache-Line 106 von
einem niedrigeren Zustand in einen höheren Zustand wird als „Beförderung" bezeichnet, während ein
Versetzen einer Cache-Line 106 von einem höheren Zustand
in einen niedrigeren eine „Degradierung" ist.
-
Der
niedrigste Zustand ist der Ungültig-Zustand
(Invalid-Zustand) 202.
Eine Cache-Line 106 ist ungültig, wenn die Line 106 keine
gültigen
Daten aus ihrem zugeordneten Hauptspeicher enthält. Als Folge ist diese Cache-Line 106 zum
Speichern von Daten verfügbar,
die von dem Hauptspeicher eingelesen werden sollen, und zwar in
der Regel als Folge einer Anforderung nach einem Lesezugriff auf
die Daten von dem mit dem Cache-Speicher 104 gekoppelten
Prozessor.
-
Eine
Cache-Line 106 befindet sich in dem Gemeinschaftlich-Zustand (Shared-Zustand) 204, wenn
die Line 106 eine gültige
(d. h. die aktuellste) Kopie der Daten, die in zugehörigen Speicherorten des
Hauptspeichers gespeichert sind, besitzt. In dem Gemeinschaftlich-Zustand 204 können auch
andere Cache-Speicher 104, die anderen Prozessoren zugeordnet
sind, die aktuellste Kopie derselben Daten fassen.
-
Wenn
eine Cache-Line 106 Daten enthält, die lediglich in dem aktuellen
Cache-Speicher 104 zu finden sind und nicht in einem beliebigen
anderen Cache-Speicher 104 des Systems, und wenn diese Daten
mit dem entsprechenden Datenwert in dem Hauptspeicher übereinstimmen,
dann befindet sich die Cache-Line 106 unter Umständen in
dem Exklusiv-Zustand (Exclusive-Zustand) 206.
-
In
dem Eigen-Zustand (Owned-Zustand) 208 enthält eine
Cache-Line 106 die aktuellste Kopie der zugeordneten Daten
von dem Hauptspeicher. Andere Cache-Speicher 104 in dem
System können
dieselbe aktualisierte Kopie ebenfalls enthalten. Jedoch ist es
möglich,
im Gegensatz zu dem Gemeinschaftlich-Zustand 204, dass
die Daten in einer Eigen-Cache-Line 106 nicht
mit den Daten in den entsprechenden Speicherorten des Hauptspeichers übereinstimmen.
Anders ausgedrückt
ist der zugeordnete Datenwert, der in dem Hauptspeicher gehalten
wird, alt oder „veraltet". In der Regel hält lediglich
ein Cache-Speicher 104 die Daten in dem Eigen-Zustand 208;
alle verbleibenden Cache-Speicher 104, die dieselbe Kopie
der Daten halten, halten ihre zugeordneten Cache-Lines 106 in
dem Gemeinschaftlich-Zustand 204 aufrecht.
-
Über dem
Cache-Kohärenzprotokollzustandssatz 200 befindet
sich der Modifiziert-Zustand (Modified-Zustand) 210. Eine
Cache-Line 106 in dem Modifiziert-Zustand 210 hält die aktuellste
Kopie der zugeordneten Daten, und die entsprechenden Speicherorte
in dem Hauptspeicher sind veraltet. Zudem halten keine weiteren
Cache-Speicher 104 in dem System eine Kopie der Daten in
irgendeiner ihrer Cache-Lines 106.
-
Verschiedene
Lese- und Schreiboperationen an einer Cache-Line 106, die in der Regel
durch einen mit dem Cache-Speicher 104 gekoppelten
Prozessor initiiert werden, ändern
oft den bestimmten Zustand der Cache-Line 106 gemäß dem Cache-Kohärenzprotokoll.
Das Protokoll erlaubt es, dass die verschiedenen Cache-Speicher 104 parallelen
Zugriff durch die Systemprozessoren auf die Daten in dem Hauptspeicher
verbessern, während
es gleichzeitig verhindert, dass die Prozessoren verschiedene Werte
für dieselben
Daten verwenden. Dieses Inkraftsetzen von Datenwerten in den verschiedenen Cache-Speichern 104 findet
teilweise mittels der im Vorhergehenden beschriebenen Cache-Line-Zustände 200 statt,
von denen keiner zulässt,
dass eine Kopie von Daten in einem Cache-Speicher 104 zu
denselben in einem anderen Cache-Speicher 104 gespeicherten
Daten im Widerspruch steht. Wie es nachfolgend beschrieben ist,
wird diese Eigenschaft ausgenutzt, um zumindest einige der Cache-Lines 106 als
einen Transaktionsspeicher einzusetzen.
-
Die
nachfolgende Erörterung
liefert einige Einzelheiten hinsichtlich dessen, wie die Arbeitsweise
des Cache-Speichers 104 und
der zugeordneten Steuerung 102 sowie hinsichtlich dessen,
wie der Zustand jeder Cache-Line 106 bei Betrieb befördert oder
degradiert werden kann, und zwar unter der Annahme der Verwendung
eines typischen MOESI-Cache-Kohärenzprotokolls.
Einige dieser Einzelheiten können
sich von Ausführungsbeispiel
zu Ausführungsbeispiel
unterscheiden.
-
Im
Allgemeinen kann ein Cache-Speicher 104, basierend auf
diesen bestimmten MOESI-Zuständen 200,
einer Leseanforderung von seinem entsprechenden Prozessor entsprechen,
solange sich die Zieldaten in dem Cache-Speicher 104 befinden; mit
anderen Worten, die bestimmte Cache-Line 106, die die Daten
hält, kann
sich in jedem beliebigen Zustand außer dem Ungültig-Zustand 202 befinden.
Jedoch kann eine Schreiboperation von dem Prozessor in seinen Cache-Speicher 104 lediglich
dann stattfinden, wenn die Zieldaten in einer der Cache-Lines 106 in
dem Modifiziert-Zustand 210, dem Eigen-Zustand 208 oder dem Exklusiv-Zustand 206 vorliegen.
Ferner setzt ein Cache-Speichersystem 100 mit einer Cache-Line 106 in
dem Eigen-Zustand 208 in der Regel die anderen Cache-Speicher 104 über die
Schreiboperation in Kenntnis, so dass ihre Kopie der Daten ebenfalls
aktualisiert oder für
ungültig
erklärt
werden kann.
-
Wenn
der Cache-Speicher 104 einer Leseanforderung von seinem
Prozessor nicht entsprechen kann, bewirkt die Cache-Steuerung 102 eine Leseoperation
von dem Hauptspeicher der angeforderten Daten und speichert diese
Daten in eine Cache-Line 106. In der Regel werden die Daten
in eine Ungültig-Cache-Line 106 geschrieben,
sofern eine solche verfügbar
ist. Ansonsten kann zuerst eine gültige Cache-Line 106 aus dem Cache-Speicher 104 „geräumt" oder entfernt werden,
um Platz für
die neuen Daten bereitzustellen. In diesem Fall wird die betreffende
Cache-Line (zumindest vorübergehend)
in den Ungültig-Zustand 202 zurückversetzt.
Im Allgemeinen können
Cache-Lines 106 in dem Gemeinschaftlich-Zustand 204 und
in dem Exklusiv-Zustand 206 zu jedem beliebigen Zeitpunkt
geräumt
werden, wohingegen Cache-Lines 106 in dem Eigen-Zustand 208 und
dem Modifiziert-Zustand 210 in den Hauptspeicher zurückgeschrieben
werden, der eine veraltete Kopie dieser Daten hält.
-
Bei
einer Implementierung kann eine derartige Leseoperation von dem
Hauptspeicher in den Cache-Speicher 104 gemäß entweder
einem „Gemeinschaftlich-Modus" oder einem „Exklusiv-Modus" durchgeführt werden.
Gemäß dem Gemeinschaftlich-Modus tritt die Cache-Line 106,
die die neuen Daten empfängt,
oft in den Gemeinschaftlich-Zustand 204 ein. Der Gemeinschaftlich-Modus
kann verwendet werden, wenn der dem Cache-Speicher 104 zugeordnete
Prozessor kein kurzzeitiges Bedürfnis
zum Ändern
der Daten aufweist, oder wenn eine Kopie der Line bereits in einem
anderen Cache-Speicher gespeichert ist. Wenn stattdessen der Prozessor
plant, einen neuen Wert für
die cache-gespeicherten Daten zu schreiben, können die Daten unter dem Exklusiv-Modus
von dem Hauptspeicher gelesen werden, was ermöglicht, dass die Cache-Line 106,
die die Daten empfängt,
den Exklusiv-Status 206 erlangt. Gemäß dem Exklusiv-Modus wird im
Allgemeinen die jedem der verbleibenden Cache-Speicher 104 zugeordnete
Cache-Steuerung 102 darauf aufmerksam gemacht, dass der
Exklusiv-Modus durch die anfordernde Cache-Steuerung 102 initiiert wird.
-
Dieser
Umstand, dass eine Cache-Steuerung 102 über die Operationen einer anderen
informiert wird, findet bei einem Beispiel mittels „Belauschen" oder Überwachen
einer durch die anderen Cache-Steuerungen 102 eingeleiteten
Busaktivität statt.
In anderen Fällen
ergreift eine Cache-Steuerung 102 die Initiative, um die
anderen Steuerungen 102 über ihre Aktivitäten zu informieren
oder um eine Aktion durch die anderen Steuerungen 102 anzufordern,
und zwar mittels „Rundsendungs"-Nachrichten. Bei
manchen Ausführungsbeispielen
wird eine Mischung aus Belauschungsanforderungen und Rundsendungsnachrichten
eingesetzt, da manchen Situationen am besten durch das eine oder
das andere Genüge
geleistet wird, abhängig
von der bestimmten durchzuführenden
Operation. Bei einem anderen Beispiel kann ein in einem Hauptspei cher
oder einem anderen Speicher gespeichertes Cache-Kohärenzverzeichnis,
auf das im Allgemeinen jede Cache-Steuerung 102 zugreifen kann,
sämtliche
Informationen fassen, die nötig
sind, um eine Cache-Kohärenz
aufrechtzuerhalten.
-
Zum
Beispiel kann die Cache-Steuerung 102 Lesezugriffe belauschen,
um zu bestimmen, ob eine andere Cache-Steuerung 102 versucht,
Daten von dem Hauptspeicher zu lesen, die sich in einer Modifiziert-Cache-Line 106 ihres
zugeordneten Cache-Speichers 104 befinden. Ist dies der
Fall, obliegt der Cache-Speicherung 102 oft die Verantwortung, diese
bestimmte Leseoperation abzufangen, so dass die Cache-Speicherung 102 die
Daten in der Modifiziert-Cache-Line 106 zurück in den
Hauptspeicher schreiben kann. Gemäß diesem Szenario wird die Cache-Line 106 auf
den Gemeinschaftlich-Zustand 204 oder
den Ungültig-Zustand 202 degradiert.
-
Bei
einem weiteren Beispiel fordert die Cache-Steuerung 102 unter
Umständen
ein Schreiben in eine Cache-Line 106 an, die sie derzeit
in dem Gemeinschaftlich-Zustand 204 hält. Zu diesem Zweck muss die
Cache-Steuerung 102 die Line 106 in den Exklusiv-Zustand 206 oder
den Eigen-Zustand 208 befördern. Vor der Beförderung
in den Exklusiv-Zustand 206 kann die Cache-Steuerung 102 eine „Für-ungültig-Erklärungs"-Rundsendung an andere Cache-Steuerungen 102 ausgeben,
so dass dieselben ihre entsprechende Cache-Line 106 in
den Ungültig-Zustand 202 degradieren
können.
-
Gemäß einem
weiteren Szenario kann die Cache-Steuerung 102, die eine
oder mehrere Cache-Lines 106 in dem Exklusiv-Zustand 206 hält, Leseoperationen
von den anderen Steuerungen 102 zu dem Hauptspeicher belauschen.
Betrifft eine dieser Leseoperationen eine der Exklusiv-Cache-Lines 106, degradiert
die Steuerung 102 in der Regel diese Cache-Line 106 auf
den Gemeinschaftlich-Zustand 204. Andere Beispiele von
Operationen in einem Cache-Speicher 104 und seiner Steuerung 102,
die Zustandsveränderungen
von Cache-Lines 106 in den Cache-Speicher 104 und
anderen Cache-Speichern 104 bewirken, bestehen.
-
Während die
vorangehende Erörterung
sich hauptsächlich
auf einen MOESI-Cache-Speicher konzentriert, werden oft auch andere
Cache-Kohärenzprotokolle
verwendet, die einen Teilsatz der in 2 gezeigten
Zustände 200 verwenden.
Beispielsweise können
bei anderen Ausführungsbeispielen
der Erfindung ein MSI-Protokoll (MSI = Modified-Shared-Invalid Modifiziert-Gemeinschaftlich-Ungültig), ein
MESI-Protokoll (MESI
= Modified-Exclusive-Shared-Invalid = Modifiziert-Exklusiv-Gemeinschaftlich-Ungültig) oder
ein MOSI-Protokoll (MOSI = Modified-Owned-Shared-Invalid = Modifiziert-Eigen-Gemeinschaftlich-Ungültig) eingegliedert
werden, was einen einfacheren Entwurf für die Cache-Speicherung 102 zur Folge hat,
dies jedoch möglicherweise
auf Kosten einer weniger effizienten Arbeitsweise verglichen mit
dem MOESI-Protokoll. Zum Beispiel lässt der Eigen-Zustand 208 des
MOESI-Protokolls zu, dass eine Cache-Steuerung 102 ein Zurückschreiben
jeglicher Modifizierungen, die sie an dieser Cache-Line 106 vornimmt,
verzögert,
während es
zulässt,
dass andere Cache-Speicher 104 diese Daten gemeinschaftlich
verwenden. In ähnlicher
Weise lässt
der Exklusiv-Zustand 206 der MOESI- und MESI-Protokolle
zu, dass eine Cache-Steuerung 102 eine Exklusiv-Cache-Line 106 modifiziert,
ohne zuerst andere Kopien dieser in anderen Cache-Speichern 104 gehaltenen
Daten zu für
ungültig
zu erklären.
-
Jegliches
dieser Cache-Kohärenzprotokolle kann
in verschiedenen Ausführungsbeispielen
der Erfindung, wie bei einem Verfahren 300 zum Bereitstellen
eines Transaktionsspeichers, das in dem Flussdiagramm der 3 dargestellt
ist, eingesetzt werden. Das Verfahren 300 ist hierin mit
Bezug auf das Cache-Speichersystem 100 der 1 beschrieben,
obwohl auch andere Cache-Speichersystemkonfigurationen in anderen
Ausführungsbeispielen verwendet
werden können.
In dem Verfahren 300 auferlegt die Cache-Steuerung 102 dem Cache-Speicher 104,
der Cache-Lines 106 aufweist, ein Cache-Kohärenzprotokoll,
wobei jede der Cache-Lines 106 sich in einem der Zustände 200 der 2 befindet
(d. h. in dem Ungültig-Zustand 202,
dem Gemeinschaftlich-Zustand 204, dem Exklusiv-Zustand 206,
dem Eigen-Zustand 208 oder dem Modifiziert-Zustand 210)
(Operation 302). Somit kann jedes beliebige der im Vorhergehenden
beschriebenen Protokolle (d. h. MOESI, MESI, MOSI oder MSI) oder möglicherweise
auch andere, die diese Zustände einsetzen,
in Kraft gesetzt werden.
-
Wenn
der dem Cache-Speicher 104 zugeordnete Prozessor eine Transaktion
einleitet, die zumindest eine der Cache-Lines 106 betrifft,
stellt die Cache-Steuerung 102 sicher, dass sich jede der
Cache-Lines 106 in entweder dem Gemeinschaftlich-Zustand 204 oder
dem Ungültig-Zustand 202 befindet
(Operation 304). Somit degradiert bei einem Ausführungsbeispiel
die Cache-Steuerung 102 jegliche der Cache-Lines 106 in
dem Modifiziert-Zustand 210, dem Eigen-Zustand 208 oder
dem Exklusiv-Zustand 206. Im Fall des Modifiziert-Zustands 210 oder des
Eigen-Zustands 208 kann die Cache-Steuerung 102 die
Daten in den Cache-Lines 106 entfernen oder zurückschreiben,
um die entsprechenden Orte in dem Hauptspeicher zu aktualisieren.
-
Während der
Transaktion kann eine externe Anforderung (d. h., eine Anforderung,
die nicht durch die Transaktion veranlasst ist) nach einer beliebigen der
Cache-Lines 106 in dem Modifiziert-Zustand 210, dem
Eigen-Zustand 208 oder dem Exklusiv-Zustand 206 (Operation 306)
stattfinden, was somit eine Degradierung der betreffenden Cache-Line 106 erforderlich
macht. Zum Beispiel versucht unter Umständen ein anderer Prozessor,
der nicht unmittelbar mit dem Cache-Speicher 104 gekoppelt ist,
Daten von dem Hauptspeicher zu lesen, die in einer der Cache-Lines 106 in
einem dieser Modi cache-gespeichert sind. Somit kann die Cache-Steuerung 102 den Leseversuch
mittels einer Belauschungsanforderung erfassen. Bei einem weiteren
Beispiel kann die externe Anforderung ein Kapazitätsfehler
aufgrund einer Erschöpfung
von freiem Raum in dem Cache-Speicher 104 sein, was somit
ein Räumen
einer der Cache-Lines 106 erforderlich macht. Demzufolge
erklärt die
Cache-Steuerung 102 jede der Cache-Lines 106 in dem Modifiziert-Zustand 210 oder
dem Eigen-Zustand 208 für ungültig (d.
h. degradiert dieselben auf den Ungültig-Zustand 202),
ohne die Cache-Line 106 in den Hauptspeicher zu schreiben
(Operation 308). Ferner degradiert die Cache-Steuerung 102 jede
erste Cache-Line 106 in dem Exklusiv-Zustand 206 entweder
auf den Gemeinschaftlich-Zustand 204 oder den
Ungültig-Zustand 202 Operation 310).
Schließlich
wird die Transaktion abgebrochen (Operation 312), Läuft die
Transaktion erfolgreich ohne einen Abbruch ab, fährt die Cache-Steuerung 102 fort,
den Cache-Speicher 104 gemäß den normalen Cache-Kohärenzprotokollregeln
zu betreiben.
-
Somit
verwendet gemäß verschiedenen möglichen
Ausführungsbeispielen
des Verfahrens 300 die Cache-Steuerung 102 den
Cache-Speicher 104 in Verbindung mit den Cache-Kohärenzrichtlinien
im Wesentlichen zum Verzögern
eines Zurückschreibens
jeglicher Veränderungen
an Daten in den Cache-Lines 106 während der Transaktion zumindest,
bis die Transaktion abgeschlossen ist.
-
Bei
einem Ausführungsbeispiel
hält eine durch
den Prozessor ausgeführte
Software einen einzigen Transaktionszustand für den gesamten Cache-Speicher 104 aufrecht.
In diesem Fall zeigt der Prozessor durch Einstellen des Transaktionszustands
der Cache-Steuerung 102 die Einleitung einer Transaktion
an. In ähnlicher
Weise löscht
der Prozessor den Transaktionszustand, falls die Cache-Steuerung 102 die
Transaktion bis zu dem Zeitpunkt, zu dem der Prozessor die Transaktion
abgeschlossen hat, nicht abgebrochen hat, um der Steuerung 102 diese
Tatsache anzuzeigen. Wenn stattdessen die Cache-Steuerung 102 die
Transaktion abbrechen muss, kann die Steuerung 102 eine
Unterbrechung oder eine Software-Programmunterbrechung an den Prozessor
ausgeben, um den Abbruch der Transaktion anzukündigen. In einer weiteren Implementierung kann
ein Aussagebit einer oder mehrerer Prozessorinstruktionen gesetzt
werden, um anzuzeigen, ob die Instruktionen auszuführen sind.
Bei diesem Ausführungsbeispiel
führt der
dem Cache-Speicher 104 zugeordnete Prozessor lediglich
jeweils eine Transaktion aus. In einer weiteren Implementierung
können
jeweils mehr als eine Transaktion ablaufen, wenn die Transaktionen
gänzlich
unabhängig
sind, derart, dass eine Ausführung
einer Transaktion keine Auswirkung auf durch die andere verarbeiteten
Daten hat.
-
Bei
einem weiteren Ausführungsbeispiel kann
der Prozessor mehrere Transaktionen gleichzeitig verarbeiten, wobei
er eine Datenunabhängigkeit
zwischen den Transaktionen in Kraft setzt. 4 stellt
ein Blockdiagramm bereit, das einen Satz 400 von Datenstrukturen
veranschaulicht, die bei einem Ausführungsbeispiel einsetzbar sind,
um Transaktionen auf einer Cache-Line-weisen Basis nachzuverfolgen.
Im Besonderen umfassen die Datenstrukturen 400 einen Transaktionskennungsvektor
(ID-Vektor; ID = transaction identifier) Vektor 410, der
im Allgemeinen dem Cache-Speicher 104 zugeordnet ist. Bei
dem bestimmten Ausführungsbeispiel
der 4 stellt jedes Bit 412 des Vektors 410 eine
bestimmte Transaktions-ID dar. Somit zeigt ein Setzen eines bestimmten
Transaktions-ID-Bits 412 an, dass die gekennzeichnete Transaktion
derzeit aktiv ist. Somit ist die Anzahl von Transaktionen, die zu
einem beliebigen Zeitpunkt möglicherweise
aktiv sind, gleich der Anzahl von Bits 412 in dem Transaktions-ID-Vektor 410.
-
Die
Datenstrukturen 400 umfassen auch ein Transaktions-ID-Feld 416,
das sich darin befindet, wobei jeder Cache-Line 106 des
Cache-Speichers 104 ein Cache-Line-Statusvektor 414 zugeordnet
ist. Der Cache-Line-Statusvektor 414 kann andere Statusinformationen
für seine
entsprechende Cache-Line 106 umfassen, wie z. B. den aktuellen
Cache-Kohärenzzustand 200 der
Cachezeile, sowie auch eine Cachemarkierung für die Line 106, die
anzeigt, welche Daten von dem Hauptspeicher in der Line 106 gespeichert
sind. Bei dem spezifischen Ausführungsbeispiel
der 4 stellt das Transaktions-ID-Feld 416 einen binär codierten
Wert der Transaktions-ID bereit, dem die Cache-Line 106 zugeordnet
ist. Somit ist jede Cache-Line 106 jeweils höchstens
einer Transaktion zugeordnet. Ist das Transaktions-ID-Feld 416 null,
ist die Cache-Line 106 keiner Transaktion zugeordnet.
-
5 veranschaulicht
ein Verfahren 500 zum Bereitstellen eines Transaktionsspeichers
unter Annahme der Verwendung der Datenstrukturen 400 der 4 in
dem Cache-Speichersystem
der 1. Bei einem Ausführungsbeispiel beginnt eine
Transaktion mit einem Zuordnen der Transaktion einer Transaktions-ID
(Operation 502) und einem Setzen des entsprechenden Transaktions-ID-Bits 412 in
dem Transaktions-ID-Vektor 410 (Operation 504).
Jede der an der Transaktion beteiligten Cache-Lines 106 ist
in dem Transaktions-ID-Feld 416 der
entsprechenden Cache-Line-Statusvektoren 414 mit der Transaktions-ID
markiert (Operation 506).
-
Jede
Transaktion wird dann wie im Vorhergehenden beschrieben verarbeitet,
wobei lediglich die der Transaktions-ID zugeordneten Cache-Lines 106 beteiligt
sind. Zum Beispiel wird gewährleistet,
folgend auf eine Einleitung der Transaktion, dass jede der der Transaktions-ID
zugeordneten Cache-Lines 106 sich entweder in dem Ungültig-Zustand 202 oder dem
Gemeinschaftlich-Zustand 204 befindet (Operation 508);
der Zustand 200 der anderen Cache-Lines 106 in
dem Cache-Speicher 104 muss nicht modifiziert werden.
-
Während der
Transaktion kann eine externe Anforderung nach einer beliebigen
der Cache-Lines 106 mit derselben Transaktions-ID in dem
Modifiziert-Zustand 210, dem Eigen-Zustand 208 oder
dem Exklusiv-Zustand 206 stattfinden (Operation 510), was
eine Degradierung der angeforderten Cache-Line 106 erforderlich
macht. Darauf ansprechend kann die Cache-Steuerung 102 jede der Cache-Lines 106 mit
dieser Transak tions-ID in dem Modifiziert-Zustand 210 oder
dem Eigen-Zustand 208 für ungültig erklären (d.
h. auf den Ungültig-Zustand 202 degradieren),
ohne den Inhalt dieser Cache-Lines 106 in
den Hauptspeicher zurückzuschreiben (Operation 512).
Wie vorher, versucht unter Umständen
ein weiterer, mit dem Cache-Speicher 104 nicht unmittelbar
gekoppelter Prozessor, Daten von dem Hauptspeicher zu lesen, die
in einer der Cache-Lines 106 in einem dieser Modi gespeichert
sind. Mit anderen Worten, die Cache-Steuerung 102 kann
den Leseversuch durch den anderen Prozessor erfassen oder belauschen.
Ferner kann eine auf demselben Prozessor durchgeführte andere
Transaktion ebenfalls die durch die Cache-Steuerung 102 erfasste Anforderung
stellen. Alternativ kann die externe Anforderung wie im Vorhergehenden
beschrieben ein Kapazitätsfehler
sein. Auch kann die Cache-Steuerung 102 ansprechend auf
die externe Anforderung jede dieser Cache-Lines 106 in
dem Exklusiv-Zustand 206 oder dem Gemeinschaftlich-Zustand 204 oder dem
Ungültig-Zustand 202 degradieren
(Operation 514). Die Cache-Steuerung 102 bricht
dann die durch die Transaktions-ID gekennzeichnete Transaktion ab (Operation 516).
Dazu kann die Cache-Steuerung 102 eine Unterbrechung an
den Prozessor ausgeben, zusammen mit der Transaktions-ID der Transaktion,
die abgebrochen wird. Software-Programmunterbrechungen oder Aussagebits
können
bei anderen Ausführungsbeispielen
zu ähnlichen
Zwecken eingesetzt werden. Ansonsten fährt die Cache-Steuerung 102,
wenn die Transaktion erfolgreich abläuft, fort, den Cache-Speicher 104 gemäß den normalen
Cache-Kohärenzprotokollregeln
zu betreiben.
-
Unabhängig davon,
ob die Transaktion erfolgreich abgeschlossen oder abgebrochen wird, wird
das zugeordnete Transaktions-ID-Bit 412 des Transaktions-ID-Vektors 410 gelöscht (Operation 518).
Demgemäß löscht die
Cache-Steuerung 102 das
Transaktions-ID-Feld 416 des Cache-Line-Statusvektors 412 für jede dieser
bestimmten Transaktions-ID
zugeordnete Cache-Line 106 (Operation 520).
-
Wie
im Vorhergehenden beschrieben, verwenden verschiedene Ausführungsbeispiele
der vorliegenden Erfindung eine einem Cache-Speicher zugeordnete
Steuerungslogik, um einen Transaktionsspeicher bereitzustellen,
der in der Vergangenheit fast ausschließlich in Software implementiert
wurde. Somit kann die Anwendung eines oder mehrerer dieser Ausführungsbeispiele
die Entwicklungszeit und -kosten, die mit einem bloßen Software-Transaktionsspeicher
einhergehen, wesentlich verringern und gleichzeitig durch Reduzieren
des Mehraufwands, der normalerweise mit einem Transaktionsspeicher einhergeht,
eine effizientere Lösung
bereitstellen.
-
Auch
wenn hierin verschiedene Ausführungsbeispiele
der Erfindung erörtert
wurden, sind auch andere Ausführungsbeispiele,
die in dem Schutzbereich der Erfindung beinhaltet sind, möglich. Beispielsweise
können,
während
manche Ausführungsbeispiele
der Erfindung im Vorhergehenden hinsichtlich einer SMP-Rechensystemarchitektur
beschrieben sind, andere Systeme, die Mehrfachverarbeitungssysteme
und Mehrfach-Cache-Speicherungssysteme einsetzen, Nutzen aus anderen
Ausführungsbeispielen
der Erfindung ziehen. Ferner können
andere Ausführungsbeispiele
auf einen einzigen Prozessor angewendet werden, der mit einem Einfach-Cache-Speicherungssystem
gekoppelt ist, das mehrere Prozesse oder Stränge und somit mehrere Transaktionen
ausführt.
Auch können
Aspekte eines Ausführungsbeispiels
mit denen alternativer Ausführungsbeispiele
kombiniert werden, um weitere Implementierungen der vorliegenden
Erfindung zu erzeugen. Somit sind, auch wenn die vorliegende Erfindung
im Rahmen spezifischer Ausführungsbeispiele
beschrieben wurde, derartige Beschreibungen zur Veranschaulichung
und nicht zur Beschränkung vorgesehen.
Demgemäß ist der
maßgebende Schutzbereich
der vorliegenden Erfindung lediglich durch die nachfolgenden Patentansprüche begrenzt.