PatentDe  


Dokumentenidentifikation DE69900797T2 19.09.2002
EP-Veröffentlichungsnummer 0936555
Titel Cache-Speicherkohärenzprotokoll mit unabhängiger Implementierung von optimierten Cache-Speicheroperationen
Anmelder International Business Machines Corp., Armonk, N.Y., US
Erfinder Arimilli, Ravi Kumar, Austin, Texas 78759, US;
Dodson, John Steven, Pflugerville, Texas 78660, US;
Lewis, Jerry Don, Round Rock, Texas 78681, US
Vertreter Teufel, F., Dipl.-Phys., Pat.-Anw., 70569 Stuttgart
DE-Aktenzeichen 69900797
Vertragsstaaten DE, FR, GB
Sprache des Dokument EN
EP-Anmeldetag 15.02.1999
EP-Aktenzeichen 993010578
EP-Offenlegungsdatum 18.08.1999
EP date of grant 23.01.2002
Veröffentlichungstag im Patentblatt 19.09.2002
IPC-Hauptklasse G06F 12/08

Beschreibung[de]
Bereich der Erfindung

Die vorliegende Erfindung befasst sich im Allgemeinen mit Computersystemen und im Besonderen mit einem Cache- Speicherkohärenzprotokoll, das einen neuen Kohärenz-Status für geänderte Daten bietet und so Verbesserungen beim Eingriff im Cache-Speicher bereitstellt, ohne dass die dabei veränderten Daten in den Systemspeicher geschrieben werden müssen.

Hintergrund der Erfindung

Die grundlegende Struktur eines konventionellen Multiprozessor-Computersystems 10 wird in Fig. 1 gezeigt. Das Computersystem 10 verfügt über mehrere Verarbeitungseinheiten, von denen zwei in Fig. 12a und 12b dargestellt und mit verschiedenen Peripheriegeräten verbunden sind, einschließlich Eingabe-/Ausgabe-Geräten 14 (beispielsweise einem Anzeigemonitor, einer Tastatur, einem grafischen Zeigegerät (Maus) und einem Festplattenspeicher, einem Speichergerät 16 (beispielsweise Random Access Memory bzw. RAM)), die von den Verarbeitungseinheiten verwendet werden, um Programmanweisungen auszuführen, sowie Firmware 18, deren vornehmlicher Zweck es ist, ein Betriebsystem von einem der Peripheriegeräte (normalerweise vom permanenten Speichergerät) zu suchen und zu laden, sobald der Computer eingeschaltet wird. Die Verarbeitungseinheiten 12a und 12b kommunizieren mit den Peripheriegeräten über verschiedene Mittel, einschließlich eine gemeinsam genutzten Verbindung bzw. einem Bus 20 oder über Direct Memory Access Channels (nicht gezeigt). Das Computersystem 10 kann über viele zusätzliche Komponenten verfügen, die hier nicht gezeigt werden, etwa über serielle und parallele Ports, beispielsweise für die Verbindung mit Modems oder Druckern. Es bestehen andere Komponenten, die in Verbindung mit denen im Blockdiagramm von Fig. 1 gezeigten Komponenten verwendet werden können, beispielsweise kann ein Anzeige-Adapter zur Steuerung eines Videomonitors verwendet werden, ein Speicher-Controller kann für den Zugriff auf den Speicher 16 verwendet werden usw. Der Computer kann auch über mehr als zwei Verarbeitungseinheiten verfügen.

In einem symmetrischen Multiprozessor (SMP)-Computer sind im Allgemeinen alle Verarbeitungseinheiten identisch, das heisst, dass alle einen gemeinsamen Satz oder Teilsatz an Anweisungen und Protokollen verwenden und generell über die gleiche Architektur verfügen. Eine typische Architektur wird in Fig. 1 gezeigt. Eine Verarbeitungseinheit umfasst einen Prozessorkern 22 mit einer Vielzahl an Registern und Ausführungseinheiten, die Programmanweisungen ausführen, um den Computer zu betreiben. Eine Verarbeitungseinheit kann beispielsweise den PowerPC (Warenzeichen) Prozessor der International Business Machines Corp. beinhalten. Die Verarbeitungseinheit kann ebenfalls über einen oder mehrere Cache-Speicher verfügen, wie beispielsweise einen Anweisungs- Cache-Speicher 24 und einen Daten-Cache-Speicher 26, die unter Verwendung von Hochgeschwindigkeits-Speichergeräten implementiert werden. Cache-Speicher werden im Allgemeinen verwendet, um Werte temporär zu speichern, auf die wiederholt durch einen Prozessor zugegriffen werden könnte, mit dem Ziel, die Verarbeitung zu beschleunigen, indem der aufwändigere Schritt des Ladens der Werte aus dem Speicher 16 vermieden wird. Diese Cache-Speicher werden als "integriert" ("on- board") bezeichnet, wenn sie mit dem Prozessorkern auf einem einzelnen eingebauten Chip 28 komprimiert werden. Jeder Cache- Speicher ist einem Cache-Controller (nicht gezeigt) zugeordnet, der den Transfer von Daten und Anweisungen zwischen dem Prozessorkern und dem Cache-Speicher verwaltet.

Eine Verarbeitungseinheit kann zusätzliche Cache-Speicher umfassen, etwa Cache-Speicher 30, der als Level 2 (L2)-Cache- Speicher bezeichnet wird, da er die integrierten (Level 1)- Cache-Speicher 24 und 26 unterstützt. Mit anderen Worten, Cache-Speicher 30 agiert als ein Zwischenelement zwischen dem Speicher 16 und den integrierten Cache-Speichern und kann eine größere Menge an Informationen (Anweisungen und Daten) speichern als dies die integrierten Cache-Speicher können, wobei jedoch auch der Zugriff länger dauert. Beim Cache- Speicher 30 kann es sich beispielsweise um einen Chip mit einer Speicherkapazität von 256 oder 512 Kilobytes handeln, während es sich bei dem Prozessor um einem IBM PowerPC der Serie 604 mit integrierten Cache-Speichern handeln kann, mit einem Gesamtspeicher von 64 Kilobytes. Der Cache-Speicher 30 ist mit dem Bus 20 verbunden und das Laden aller Informationen aus dem Speicher 16 in den Prozessorkern 22 muss über den Cache-Speicher 30 ablaufen. Obwohl Fig. 1 nur eine zweistufige Cache-Hierarchie zeigt, können auch mehrstufige Dache-Hierarchien geboten werden, in denen es mehrere Level (L3, L4, usw.) an seriell verbundenen Cache-Speicher gibt. Wenn ein im L1 Cache-Speicher einer gegebenen Verarbeitungseinheit ein Block vorhanden ist, ist dieser auch in den L2 und L3 Cache-Speichern dieser Verarbeitungseinheit vorhanden. Diese Eigenschaft wird als Einbeziehung ("Inclusion") bezeichnet. Weiterhin wird davon ausgegangen, dass das Prinzip der Einbeziehung auf die Cache-Speicher der vorliegenden Erfindung Anwendung findet.

In einem SMP Computer ist es wichtig, dass ein kohärentes Speichersystem bereitgestellt wird, das heisst, dass Schreiboperationen für jeden einzelnen Speicherplatz veranlasst werden, die in einer bestimmten Reihenfolge für alle Prozessoren seriell angeordnet werden. Es wird beispielsweise davon ausgegangen, dass ein Speicherplatz durch eine Sequenz von Schreiboperationen für die Werte 1, 2, 3 und 4 geändert wird. In einem Cache-kohärenten System beobachten alle Prozessoren die Schreibvorgänge in einem gegebenen Speicherplatz, die in der gezeigten Reihenfolge stattfinden. Es ist für ein Verarbeitungselement jedoch möglich, einen Schreibvorgang im Speicherplatz zu versäumen. Ein gegebenes Speicherelement, das den Speicherplatz liest, würde dann die Sequenz 1, 3, 4 lesen, und die Aktualisierung des Wertes 2 verpassen. Ein System mit diesen implementierten Eigenschaften wird als "kohärent" bezeichnet. Virtuell arbeiten alle Kohärenz-Protokolle nur bis zu dem Unterteilungsgrad der Größe eines Cacheblocks. Das heisst, das Kohärenz-Protokoll steuert die Bewegung und die Schreibgenehmigungen für Daten auf einer Cacheblock-Basis und nicht separat für jeden einzelnen Speicherplatz (im Folgenden wird der Begriff "Daten" verwendet, um einen Speicherwert zu bezeichnen, bei dem es sich um einen numerischen Wert handeln kann, der vom Programm verwendet wird oder bei dem es sich um einen Wert handeln kann, der einer Programmanweisung entspricht).

Es besteht eine Anzahl an Protokollen und Techniken zum Erreichen von Cache-Kohärenz, die den Fachleuten bekannt sind. Alle diese Mechanismen zum Erhalten der Kohärenz machen es erforderlich, dass die Protokolle nur einen Prozessor mit einer "Berechtigung" zulassen, die eine Schreiboperation an einem gegebenen Speicherplatz (Cacheblock) zu jedem Zeitpunkt erlaubt. Eine Konsequenz daraus ist, dass bei jedem Versuch eines Verarbeitungselements, in einen Speicherplatz zu schreiben, dieses Verarbeitungselement zunächst alle anderen Verarbeitungselemente darüber informieren muss, dass es auf diesen Speicherplatz schreiben möchte und dass es eine Erlaubnis von allen anderen Verarbeitungselementen erhalten muss, um den Schreibvorgang durchführen zu dürfen.

Um Cache-Kohärenz in einem System zu implementieren, kommunizieren die Prozessoren über eine gemeinsame Verbindung (beispielsweise einen Bus 20). Die Prozessoren geben Nachrichten über die gemeinsame Verbindung weiter, die deren Wunsch angeben, einen Lese- oder Schreibvorgang an Speicherplätzen durchzuführen. Wenn eine Operation in einer Verbindung platziert wird, überwachen ("Snoop") alle anderen Prozessoren diese Operation und entscheiden, ob der Status ihrer Cache-Speicher die angeforderte Operation zulässt und wenn dies der Fall ist, unter welchen Bedingungen. Es bestehen verschiedene Bustransaktionen, die "Snooping"- und Verfolgungs-Aktionen erfordern, um die Bustransaktionen anzuerkennen und Cache-Kohärenz zu erhalten. Die Snooping- Operation wird veranlasst durch den Empfang einer qualifizierten Snoop-Anforderung, generiert durch die Bestätigung bestimmter Bussignale. Die Anweisungsverarbeitung wird nur unterbrochen, wenn ein Snoop-Treffer auftritt und der Snoop-Status-Rechner ermittelt, dass ein zusätzlicher Cache- Snoop erforderlich ist, um die Kohärenz des betroffenen Sektor zu ermöglichen.

Diese Kommunikation ist notwendig, da in Systemen mit Cache- Speichern die aktuellste Kopie eines gegebenen Speicherblocks vom Systemspeicher 16 zu einem der Cache-Speicher im System (wie oben erwähnt) verschoben sein kann. Wenn ein Prozessor (beispielsweise 12a) versucht, auf einen Speicherplatz zuzugreifen, der in seiner Cache-Hierarchie nicht vorhanden ist, kann sich die korrekte Version des Blocks, die den tatsächlichen (aktuellen) Wert für den Speicherplatz enthält, entweder im Systemspeicher 16 oder in einem der Cache-Speicher einer anderen Verarbeitungseinheit, beispielsweise Verarbeitungseinheit 12b, befinden. Wenn sich die korrekte Version in einem oder mehreren der anderen Cache-Speicher im System befindet, muss der korrekte Wert aus den Cache-Speicher im System und nicht aus dem Systemspeicher abgerufen werden.

Ein Beispiel wäre Prozessor 12a bei dem Versuch, einen Speicherplatz zu lesen. Er befragt zunächst seinen eigenen L1 Cache-Speicher (24 oder 26). Wenn sich der Block nicht im L1 Cache-Speicher befindet, wird die Anforderung an den L2 Cache- Speicher (30) weitergegeben. Wenn sich der Block nicht im L2 Cache-Speicher befindet, wird die Anforderung an immer niedrigere Cache-Speicher-Levels weitergegeben, hier beispielsweise an den L3 Cache-Speicher. Wenn sich der Block nicht in den niedrigeren Cache-Speicher-Levels befindet, wird die Anforderung anschließend zur Verarbeitung an die gemeinsame Verbindung (20) weitergegeben. Nachdem eine Operation in der gemeinsamen Verbindung (20) platziert wurde, untersuchen (Snoopen) alle anderen Verarbeitungseinheiten die Operation und ermitteln, ob sich der Block in ihren Cache- Speichern befindet. Wenn eine gegebene Verarbeitungseinheit den von der Verarbeitungseinheit angeforderten Block in ihrem L1 Cache-Speicher hat und sich der Wert in dem Block geändert hat, verfügen nach dem Prinzip der Einbeziehung der Level 2 Cache-Speicher und alle folgenden Cache-Speicher mit niedrigerem Level ebenfalls über eine Kopie des Blocks (ihre Kopien jedoch sind statisch, da die Kopie im Cache-Speicher des Prozessors verändert wurde). Wenn also der Cache-Speicher mit dem niedrigsten Level (beispielsweise L3) der Verarbeitungseinheit die Leseoperation untersucht, ermittelt er, dass der angeforderte Block vorhanden ist und in einem Cache-Speicher mit höherem Level verändert wurde. Wenn dies stattfindet, platziert der L3 Cache-Speicher eine Nachricht in der gemeinsamen Verbindung und informiert die Verarbeitungseinheit, dass sie ihre Operation auf einen späteren Zeitpunkt legen muss, da sich der tatsächliche Wert des Speicherplatzes im L1 Cache-Speicher oben in der Hierarchie befindet und erst abgerufen werden muss, um ihn für die Leseanforderung der anfordernden Verarbeitungseinheit verfügbar zu machen.

Sobald die Anforderung von der anfordernden Verarbeitungseinheit erneut versucht wird, beginnt der L3 Cache-Speicher mit einem Prozess zum Abruf des veränderten Wertes vom L1 Cache-Speicher und macht ihn dem L3 Cache- Speicher, dem Hauptspeicher oder beiden verfügbar, je nach den exakten Details der Implementierung. Um den Block von den Cache-Speichern mit höherem Level zu erhalten, sendet der L3 Cache-Speicher Nachrichten über die Cache-Verbindungen an die Cache-Speicher mit den höheren Levels und fordert den gewünschten Block an. Diese Nachrichten werden in der Einheitenhierarchie nach oben hin verteilt, bis sie den L1 Cache-Speicher erreicht haben und veranlassen, dass der Block nach unten zum niedrigsten Level (L3 oder Hauptspeicher) verschoben wird, damit der Anforderung von der Verarbeitungseinheit entsprochen werden kann.

Die anfordernde Verarbeitungseinheit erneuert die Leseanforderung in der gemeinsamen Verbindung. An diesem Punkt wurde jedoch der veränderte Wert vom L1 Cache-Speicher einer Verarbeitungseinheit abgerufen und in den Systemspeicher gestellt und der Leseanforderung der anfordernden Verarbeitungseinheit kann entsprochen werden. Das eben beschriebene Szenario wird im Allgemeinen als "Snoop Push" bezeichnet. Eine Leseanforderung wird in der gemeinsamen Verbindung untersucht, was die Verarbeitungseinheit veranlasst, den Block in der Hierarchie nach unten zu schieben ("Push"), um der Leseanforderung der anfordernden Verarbeitungseinheit zu entsprechen.

Entscheidend bei dieser Methode ist es, dass ein Prozessor, der einen Block lesen oder schreiben will, den anderen Verarbeitungseinheiten im System diesen Wunsch mitteilen muss, um die Cache-Kohärenz zu erhalten. Um dies zu erreichen, ordnet das Cache-Kohärenz-Protokoll jedem Block auf jedem Level der Cache-Hierarchie einen Statusindikator zu, der den aktuellen Status des Blocks anzeigt. Die Statusinformationen werden verwendet, um bestimmte Optimierungen im Kohärenz- Protokoll zu ermöglichen, die den Nachrichtenverkehr in der gemeinsamen Verbindung und in den Verbindungen zwischen den Cache-Speichern verringern. Ein Beispiel für diesen Mechanismus: wenn eine Verarbeitungseinheit einen Lesevorgang ausführt, erhält sie eine Nachricht darüber, ob dieser Lesevorgang später nochmals versucht werden muss oder nicht. Wenn der Lesevorgang nicht wiederholt wird, enthält die Nachricht normalerweise Informationen dahingehend, dass die Verarbeitungseinheit ermitteln kann, ob eine andere Verarbeitungseinheit ebenfalls über eine noch aktive Kopie des Blocks verfügt (dies wird durchgeführt, indem die anderen Cache-Speicher mit niedrigerem Level einen Status "Geteilt" oder "Ungeteilt" für jeden Lesevorgang erhalten, der nicht wiederholt wird). Daher kann eine Verarbeitungseinheit ermitteln, ob irgendein anderer Prozessor in dem System über eine Kopie des Blocks verfügt. Wenn keine andere Verarbeitungseinheit über eine aktive Kopie des Blocks verfügt, markiert die lesende Verarbeitungseinheit den Status des Blocks als "Exklusiv". Wenn ein Block als exklusiv markiert wird, kann die Verarbeitungseinheit zu einem späteren Zeitpunkt in den Block schreiben, ohne zuerst mit den anderen Verarbeitungseinheiten kommunizieren zu müssen, da keine andere Verarbeitungseinheit über eine Kopie des Blocks verfügt. Es ist daher für einen Prozessor möglich, in einem Speicherplatz zu lesen oder zu schreiben, ohne vorher seine Absicht in der Verbindung kundzutun, jedoch nur dann, wenn das Kohärenz-Protokoll sichergestellt hat, dass kein anderer Prozessor Interesse an dem Block hat.

Die folgende Cache-Kohärenz-Technik wird in einem bestimmten Protokoll implementiert, das als "MESI" bezeichnet und in Fig. 2 dargestellt wird. In diesem Protokoll kann sich ein Cacheblock in einer der vier folgenden Statusarten befinden: "M" (Modified = Geändert), "E" (Exclusive = Exklusiv), "S" (Shared = Geteilt) oder "I" (Invalid = Ungültig). Beim MESI- Protokoll verfügt jeder Cache-Eingang (beispielsweise ein 32- Byte-Sektor) über zwei zusätzliche Bits, die den Status des Eingangs angeben, ausgewählt aus den vier möglichen Statusarten. Je nach Anfangsstatus des Eingangs und der vom anfordernden Prozessor gewünschten Zugriffsart kann sich der Status verändern, und es wird ein bestimmter Status für den Eingang im Cache-Speicher des anfordernden Prozessors gesetzt. Wenn sich beispielsweise ein Sektor im Status "Geändert" befindet, ist der angeforderte Sektor nur in dem Cache- Speicher mit dem geänderten Sektor gültig und der geänderte Wert wurde noch nicht wieder in den Systemspeicher geschrieben. Wenn ein Sektor den Status "Exklusiv" innehat, ist er nur in dem so bezeichneten Sektor vorhanden und ist konsistent mit dem Systemspeicher. Wenn ein Sektor über den Status "Geteilt" verfügt, ist er in dem Cache-Speicher und mindestens einem anderen Cache-Speicher gültig, wobei alle geteilten Sektoren mit dem Systemspeicher konsistent sind. Wenn ein Sektor den Status "Ungültig" aufweist, bedeutet dies, dass dieser Sektor in dem Cache-Speicher nicht vorhanden ist. Wie in Fig. 2 gezeigt, wenn ein Sektor den Status "Geändert", "Geteilt" oder "Ungültig" aufweist, kann er je nach Bustransaktion zwischen den Statusarten wechseln. Während ein Sektor mit Status "Exklusiv" in jeden anderen Status wechseln kann, kann ein Sektor nur Exklusiv werden, wenn er vorher Ungültig war.

P. Borrill "Futurebus Protocols Keep Cache Data Consistent", Computer Technology Review, v.9, n. 10, 21. Juni 1989, SS. 36- 38, P. Sweazy et al., "A Class of Compatible Cache Consistency Protocols and their Support by the IEEE Futurebus", Proceedings of the Annual Symposium on Computer Architecture, Tokio, 2.-5. Juni 1986, n.13, SS. 414-423, Institute of Electrical and Electronic Engineers auf den Seiten 416-420 und "Caching on Futurebus, Electronic Engineering, v.60, n.739, 1. Juli 1988, SS. 31, 33, 34, 36, auf den Seiten 33-34 legen ein Protokoll offen, in dem zusätzlich zu den oben beschriebenen Statusarten MESI ein Status O für Geteilt, Geändert, Eigentum ("Owned") hinzugefügt wurde.

Eine weitere Verbesserung beim Zugriff auf Cacheblocks kann durch Verwendung des Cache-Speicherkohärenz-Protokoll erreicht werden. Diese Verbesserung, "Eingriff" ("Intervention") genannt, ermöglicht einem Cache-Speicher die Steuerung über einen Speicherblock, um die Daten in diesem Block direkt einem anderen, den Wert (für eine Leseoperation) anfordernden Cache- Speicher zur Verfügung zu stellen, mit anderen Worten, es wird umgangen, dass die Daten in den Systemspeicher geschrieben werden müssen, von wo sie der anfordernde Prozessor lesen kann. Der Eingriff oder die Intervention kann nur durch einen Cache-Speicher stattfinden mit dem Wert in einem Block, dessen Status Geändert oder Exklusiv lautet. In diesen beiden Statusarten gibt es nur einen Block mit einer gültigen Kopie des Wertes, so dass es einfach ist, diesen Wert über den Bus 20 zu schreiben, ohne ihn zunächst in den Systemspeicher schreiben zu müssen. Der Interventionsvorgang beschleunigt also die Verarbeitung durch Vermeiden des längeren Prozesses des Schreibens und Lesens im Systemspeicher (was drei Busoperationen und zwei Speicheroperationen mit sich bringt). Diese Prozedur führt nicht nur zu besserer Latenz, sondern sie erhöht auch die Busbandbreite.

Ein Teil der Interventionsprozedur ist es, dass der Speicher- Controller für den Systemspeicher ebenfalls die Interventionsantwort von einer Cachezeile mit einem Status Geändert erhält, so dass der Speicher-Controller die geänderten Daten parallel lesen kann, während diese in den anderen Prozessor geschrieben werden. Am Ende der Prozedur wechselt der Cache-Speicher, der die Daten im Status Geändert innehatte, in den Status Geteilt, und der Cacheblock des anderen Prozessors wechselt ebenfalls vom Status Ungültig in den Status Geteilt, da die geänderten Daten in den Systemspeicher kopiert werden. In konventionellen Cache- Kohärenz-Protokollen müssen die geänderten Daten bei Intervention in den Systemspeicher geschrieben werden, während diese Methode parallel ausgeführt werden kann, um die Verarbeitung zu beschleunigen, und auch dies kann in vielen Fällen unnötig sein. Wenn beispielsweise ein geänderter Cacheblock in einem ersten Prozessor verwendet wird, um Daten in einen Cache-Speicher eines zweiten Prozessor zu schreiben, kann der zweite Prozessor die Daten weiter ändern, was letztlich eine weitere Schreiboperation in den Systemspeicher erforderlich macht. Wenn keine weiteren Prozessoren diese Daten (Speicherblock) in dem Zeitraum zwischen dem Schreiben der Daten durch den ersten Prozessor und dem Ändern der Daten durch den zweiten Prozessor anfordern, wird die erste Schreiboperation in den Systemspeicher (Teil des Interventionsvorgangs) überflüssig.

Ein Schema vermeidet unnötige Schreibvorgänge in den Systemspeicher, indem der zweite Prozessor gezwungen wird, die geschriebenen Daten in einem Status Geändert zu halten, auch wenn der Prozessor die Daten lediglich für einen Lesevorgang benötigte. Auf diese Weise ist der zweite Prozessor dafür verantwortlich, die Daten zu einem späteren Zeitpunkt zurück in den Systemspeicher zu schreiben. Das Hauptproblem mit dieser Implementierung ist jedoch, dass der ändernde (erste) Prozessor seine Cachezeile auf einen Status Ungültig setzen muss, so dass diese Daten nicht geteilt d. h. gemeinsam genutzt werden können. Es kann nur jeweils ein Prozessor zu einem bestimmten Zeitpunkt die Daten lesen und die Daten müssen zwischen den Prozessoren hin und her bewegt werden, was neuerlichen Busverkehr verursacht. Es wäre daher eine Methode zur Erhaltung der Cache-Kohärenz wünschenswert, die eine effiziente Änderung der Daten ermöglicht, jedoch unnötige Schreiboperationen in den Systemspeicher vermeidet. Es wäre weiterhin von Vorteil, wenn diese Methode es ermöglichen würde, geänderte Daten von einem Cache-Speicher zum anderen zu bewegen, ohne den Systemspeicher einzubeziehen, während die Daten geteilt, d. h gemeinsam genutzt werden können.

Offenlegung der Erfindung

Entsprechend bietet die vorliegende Erfindung eine Methode zum Erhalt der Cache-Kohärenz in einem Multiprozessorsystem (10) nach Anspruch 1. Die vorliegende Erfindung bietet ebenfalls ein Multiprozessor-Computersystem nach Anspruch 5.

Kurzbeschreibung der Zeichnungen

Die neuartigen Eigenschaften der vorliegenden Erfindung werden in den angehängten Ansprüchen beschrieben. Die Erfindung selbst jedoch, sowie eine bevorzugte Verwendungsart, weitere Ziele und Vorteile dadurch, werden am besten verständlich unter Bezugnahme auf die folgende detaillierte Beschreibung eines Ausführungsbeispiels in Verbindung mit den Zeichnungen, wobei:

Fig. 1 ein Blockdiagramm eines Multiprozessor-Computersystems nach Stand der Technik zeigt;

Fig. 2 ein Statusdiagramm eines Cache-Kohärenz-Protokolls (MESI) nach Stand der Technik zeigt;

Fig. 3 ein Statusdiagramm eines Cache-Kohärenz-Protokolls mit einem Status Markiert für geänderte Daten zeigt, das Intervention zulässt, ohne dass die Daten in den Systemspeicher geschrieben werden müssen; und

Fig. 4 ein Blockdiagramm eines Multiprozessor-Computersystems mit einer Mehrfachlevel-Architektur zeigt, die so eingerichtet werden kann, dass der Status Markiert der vorliegenden Erfindung auf einer globalen und einer lokalen (CPU-Cluster) Skala verwendet werden kann; und

Fig. 5 ein Statusdiagramm eines Cache-Kohärenz-Protokolls zeigt, kombiniert mit einem Kohärenz-Protokoll, das die Identifizierung einer Cachezeile ermöglicht, die als letztes einen Wert gelesen hat.

Beschreibung des bevorzugten Ausführungsbeispiels

Die vorliegende Erfindung umfasst eine Methode zur Verwaltung von Cache-Kohärenz in einem Multiprozessorsystem, etwa dem System in Fig. 1, wobei die vorliegende Erfindung jedoch auch auf Computersysteme angewendet werden könnte, die nicht unbedingt dem konventionellen Standard entsprechen, das heisst sie können neue Hardware-Komponenten umfassen, die nicht in Fig. 1 gezeigt werden, oder sie können eine neuartige Verbindungsarchitektur für bestehende Komponenten beinhalten. Daher sollte es den Fachleuten klar sein, dass die vorliegende Erfindung nicht auf das verallgemeinerte System in Fig. 1 beschränkt ist.

Fig. 3 zeigt ein Statusdiagramm eines Ausführungsbeispiels für ein Cache-Kohärenz-Protokoll. Dieses Protokoll ähnelt dem MESI-Protokoll nach Stand der Technik in Fig. 2, da es die gleichen vier Statusarten (Geändert, Exklusiv, Geteilt und Ungültig) umfasst. Doch es umfasst weiterhin einen neuen Status "T" (Tagged = Markiert), um anzugeben, dass ein Cacheblock durch einen Prozessor geändert wurde, aber noch nicht in den Systemspeicher geschrieben wurde. Wenn ein Cacheblock beispielsweise in einem Prozessor den Status Geändert aufweist und eine Leseoperation durch einen anderen Prozessor angefordert wird, würde der erste Prozessor eine Antwort Intervention Geändert senden und der lesende Prozessor kann danach die Daten im Status T halten (der erste Prozessor wechselt vom Status Geändert zum Status Geteilt). Diese Operation kann mit weiteren Prozessoren wiederholt werden, so dass der Cache-Speicher, der zuletzt eine Kopie der geänderten Daten gelesen hat, der Cache-Speicher ist, der den Wert im Status T hält, und alle anderen Prozessoren verfügen über eine Kopie des Wertes im Status Geteilt. Auf diese Weise wird ein Cache-Speicher "markiert", um anzugeben, das er derzeit verantwortlich ist für das Schreiben der geänderten Daten zu einem späteren Zeitpunkt in die Speicherhierarchie, wenn nötig, entweder durch Schreiben in einen anderen Cache Speicher während einer Antwort Intervention Geändert oder durch Zurückschreiben in den Systemspeicher. Dieser Ansatz verringert die Gesamtanzahl an Schreiboperationen in den Systemspeicher.

Im MESI-Protokoll nach Stand der Technik würde ein Cache- Speicher, der eine Kopie eines geänderten Wertes liest, vom Status Ungültig zum Status Geteilt (anstelle des Status T) wechseln, und die Antwort Intervention Geändert würde ebenfalls durch den Speicher-Controller aufgenommen werden, um die Daten in den Speicher zu schreiben. Im grundlegenden Protokoll der vorliegenden Erfindung, hier als "T-MESI"- Protokoll bezeichnet, ignoriert der Controller die Transaktion, um Bandbreite frei zu machen. Ein geänderter Wert wird nur dann in den Systemspeicher geschrieben, wenn dies erforderlich wird, beispielsweise als Ergebnis eines Least- Recently-Used (LRU)-Cache-Algorithmus zum Rückgängigmachen der Zuordnung.

Wie beim Protokoll nach Stand der Technik können sich die vier Statusarten M-E-S-I ändern, basierend auf dem Anfangsstatus des Eingangs und auf der Zugriffsart durch den anfordernden Prozessor. Die Weise, in der diese vier Statusarten sich ändern, ist generell identisch mit der Weise des MESI- Protokolls nach Stand der Technik, mit den im Folgenden beschriebenen Zusätzen. Wie in Fig. 3 gezeigt, kann eine Cachezeile auch vom Status Ungültig zum Status Markiert, vom Status Markiert zum Status Ungültig und vom Status Markiert zum Status Geteilt wechseln. Dieses Ausführungsbeispiel des T- MESI-Protokolls kann unter Bezugnahme von Tabelle noch besser verstanden werden. Diese Tabelle zeigt die Cache-Kohärenz- Statusarten für einen bestimmten Cacheblock in drei verschiedenen Prozessoren P&sub0;, P&sub1; und P&sub2;.

In der ersten Zeile beginnen alle Prozessoren mit den Cacheblocks im Status Ungültig (Invalid). In der zweiten Zeile führt der Prozessor P&sub0; eine Operation Lesen-in-der-Absicht-zu- ändern (Read With Intend To Modify = RWITM) aus und seine Cachezeile wechselt von Ungültig in Geändert. Danach fordert der Prozessor P&sub1; ein Lesen der Cachezeile an, Prozessor P&sub0; interveniert, wechselt in den Status Geteilt und Prozessor P&sub1; wechselt vom Status Ungültig (I) in den Status Markiert (die dritte Zeile in der Tabelle). Später fordert der Prozessor P&sub2; ein Lesen der Cachezeile an, Prozessor P&sub1; interveniert, wechselt in den Status Geteilt und Prozessor P&sub2; wechselt vom Status Ungültig in den Status Markiert (die vierte Zeile der Tabelle 1)

Tabelle 1 zeigt weiterhin, wie eine Cachezeile im Status T gezwungen werden kann, die Daten in den Systemspeiche: zu schreiben, auch wenn die Zuordnung der Zeile nicht rückgängig gemacht wurde. Einige Prozessorarchitekturen, einschließlich der des PowerPC Prozessors, erlauben die Ausführung einer speziellen Anweisung, einer anderen Anweisung als der RWITM Anweisung, wenn ein Prozessor die Berechtigung zum Schreiben in einen Block benötigt. Die Anweisung "DClaim" ist ein Beispiel für diese Cachezeile. In der fünften Zeile der Tabelle 1 hat der Prozessor P&sub1; eine Anforderung für einen DClaim dieser Cachezeile übermittelt, Prozessor P&sub2; untersucht den DClaim, sendet eine Wiederholungsnachricht und versucht einen Push der Daten zum Systemspeicher. Sobald der Push abgeschlossen ist, wechselt diese Cachezeile von Markiert nach Ungültig, doch die Cachezeile in den Prozessoren P&sub0; und P&sub1; bleibt beim Status Geteilt. Nach der Wiederholung gibt der Prozessor P&sub2; den DClaim erneut aus, was nicht mehr wiederholt wird, und so wechselt die Cachezeile zu Ungültig im P&sub0; und wird Geändert im P&sub1;.

Es ist möglich, dass einige geänderte Werte von einem Cache- Speicher zum anderen übergehen, jedoch niemals so in den Systemspeicher geschrieben werden. Es kann beispielsweise ein Prozessor einen RWITM für einen Wert anfordern, der sich bereits im T Status befindet: alle entsprechenden Cachezeilen in anderen Prozessoren im Status Geteilt sowie die Cachezeile im T Status wechseln zum Status Ungültig, nachdem der Wert über Intervention unter Verwendung des Cache-Speichers, dem der Wert "gehörte" (dem Cache-Speicher im T Status) geschrieben wurde. Der neue Prozessor, der die Anweisung RWITM ausführte, wird in den Status Geändert gesetzt, und so wird der Wert, der zunächst im T Status gehalten wurde, nie in den Systemspeicher geschrieben.

Der T Status verfügt sowohl über Eigenschaften des Status Geteilt (da die Daten in einem Geteilt Status in einem oder mehreren Prozessoren gehalten werden) als auch des Status Geändert (da die Daten geändert wurden, jedoch noch nicht in den Systemspeicher geschrieben wurden). Aus der CPU- Perspektive ist der Status T (Markiert) tatsächlich gleich dem Status S (Geteilt), doch von einer Systembus-Perspektive aus wird eine Cachezeile mit einem T Status im Wesentlichen wie ein geänderter Block behandelt.

Im Ausführungsbeispiel der Fig. 3 wechselt der "T" Status zwischen den Cachezeilen, doch in dem Ausführungsbeispiel der vorliegenden Erfindung bleibt der T Status der Cachezeile des ursprünglichen Prozessors erhalten, der den Wert geändert hat. Mit anderen Worten, eine Cachezeile, die einen Wert im Status Geändert hält, würde in den Status Markiert wechseln, beim Schreiben der Daten in einen anderen Prozessor (anstatt in den Status Geteilt zu wechseln). Das Statusdiagramm für dieses alternative Ausführungsbeispiel ähnelt dem in Fig. 3, mit der Ausnahme, dass eine Cachezeile im Status Geändert in den Status Markiert, jedoch nicht in den Status Geteilt wechseln kann. Ein solches Ausführungsbeispiel kann in einigen Fällen wünschenswert sein, um den Wert im Cache-Speicher veralten zu lassen. Wenn beispielsweise der Cache-Speicher über mehrere Level (mindestens bis L3) verfügt, kann der Wert durch einen Push-Vorgang des Wertes vom L2 Cache-Speicher zum L3 Cache- Speicher später in andere L3 Cache-Speicher geschrieben werden und dies schneller als in dem Fall, dass das System auf den Abruf vom Level 2 warten muss. Dieser Push-Vorgang für den Wert kann im Hintergrund stattfinden, beispielsweise als ein Ergebnis des Rückgängig machens der LRU-Zuordnung, nicht in Reaktion auf eine spezifische Busoperation und er kann so zu einem effizienteren Gesamtbetrieb führen.

In der vorliegenden Erfindung kann das Protokoll erstellt werden, um bestimmte Kohärenzantworten an einen Prozessor zu leiten, der eine Leseoperation anfordert, von den Snoopers aller Cache-Speicher, die in einem Multiprozessor- Computersystem anderen Prozessoren zugeordnet sind. Die Antworten für ein Ausführungsbeispiel der Erfindung werden in Übereinstimmung mit Tabelle 2 formuliert:

Tabelle 2

Die Signale haben die Form einer 3-Bit Snoop-Antwort, deren Wert (Adressantwort) und Definition in Tabelle 2 dargestellt sind. Diese Signale werden verschlüsselt, um das Snoop- Ergebnis nach dem Adressbesitz anzugeben. Die Tabelle 2 zeigt Antworten für eine geteilte Zeile und eine leere (ungültige) Zeile sowie eine Antwort Wiederholung. Diese drei Antworten sind den Fachleuten im Wesentlichen bekannt. Tabelle 2 zeigt vier neue Antworten, "Intervention Markiert", "Intervention Geteilt", "Status Entfernt" und "Erneute Ausführung". Die Antwort Intervention Markiert wird verwendet, wenn ein Cacheblock einen Wert entweder im Status Geändert oder Markiert enthält, um anzuzeigen, dass der Wert geändert werden kann, dass jedoch der neue Cacheblock, der den Wert anfordert, temporär für das Kopieren des Wertes zurück in den Systemspeicher verantwortlich ist (andere Antworten können für Geänderte oder Markierte Blöcke gegeben werden, falls gewünscht, wie unten beschrieben, mit der selektiven Implementierung des Status "T").

Die anderen drei Antworten sind nicht direkt mit der vorliegenden Erfindung verbunden. Die Antwort Intervention Geteilt ermöglicht es einem Block, eine gültige Kopie des Wertes zu halten, um ihn zu schreiben (siehe auch das unten beschriebene T-MESI-Protokoll). Die Antwort Status Entfernt, die nur bei Leseoperationen eingesetzt wird, wird verwendet, um anzuzeigen, dass der Lesevorgang erfolgreich sein wird, und die Kohärenzantwort Geteilt oder Exklusiv wird später ausgegeben, zusammen mit den Daten und unter Verwendung eines anderen Signals. Die Antwort Erneute Ausführung wird verwendet, wenn die Kohärenzantwort nicht sofort ermittelt werden kann und die Anforderung an eine niedrigere Stelle in der Hierarchie weitergegeben werden muss. Die Antwort Erneute Ausführung unterscheidet sich von der Wiederholung dadurch, dass die frühere Nachricht erneut ausgegeben werden muss und über den gleichen Identifier verfügen muss, damit sie mit der zuvor weitergegebenen Nachricht verglichen werden kann.

Weiterhin kann jeder Antwort ein Prioritätswert zugeordnet werden, um es der Systemlogik zu ermöglichen, zu ermitteln, welche der Antworten bei der Formulierung einer einzelnen Antwort an den anfordernden Prozessor Priorität haben sollte, wie in Tabelle 2 gezeigt. Wenn beispielsweise ein oder mehrere Cache-Speicher mit einer Antwort Markiert antworten (Priorität 2) und einer oder mehrere Cache-Speicher mit einer Antwort Wiederholung (Priorität 1) antworten, erhält die Antwort Wiederholung Priorität und die Systemlogik gibt die Antwort Wiederholung an den anfordernden Prozessor aus. Diese Systemlogik kann sich in vielen Komponenten befinden, etwa einer Systemsteuereinheit oder sogar im Speicher-Controller.

Die ersten Werte, die für Prioritäten in Tabelle 2 gezeigt werden, bieten die höchste Priorität für die Antwort Wiederholung. Ein alternatives Schema kann jedoch geboten werden, um die Verwendung des T-MESI-Protokolls zu erweitern. In dieser Alternative, gezeigt durch die Prioritätszahlen in Klammern in der Tabelle, verfügt die Antwort Intervention Geteilt über die höchste Priorität, gefolgt von der Antwort Wiederholung und weiter gefolgt von der Antwort Intervention Markiert. Alle anderen Prioritäten sind die gleichen wie im ersten Schema. In diesem alternativen Schema überschreibt eine Antwort Intervention Geteilt stets alle anderen Antworten, was aus vielen Gründen akzeptabel ist. Zunächst, wenn eine Cachezeile einen Wert (Daten oder Anweisungen) im unten beschriebenen Status "R" hält (verwendet für die Intervention Geteilt), dann können keine anderen Cache-Speicher einen Wert mit der gleichen Adresse im Status Geändert oder Markiert halten und es ist klar, dass kein anderer Cache-Speicher in der Lage ist, mit einer Antwort Intervention Markiert zu antworten. Ebenso verhält es sich, wenn andere Cache-Speicher eine Wiederholung ausgeben: Jede spätere Antwort von diesem Cache-Speicher basierend auf der Wiederholung könnte geteilt, d. h. gemeinsam genutzt werden, was wiederum bedeutet, dass es akzeptabel ist, die Antwort Intervention Geteilt zuerst auszugeben.

Die vorliegende Erfindung kann selektiv in Computersysteme implementiert werden, die über Cache-Speicher verfügen, welche das T-MESI-Protokoll unterstützen und die über andere Cache- Speicher verfügen, welche dieses Protokoll nicht unterstützen. Ein Multiprozessorsystem beispielsweise kann ursprünglich mit vier eingebauten Einheiten in der Schaltkarte hergestellt und verkauft worden sein, wenn es dennoch über vier weitere Steckplätze zur späteren Ergänzung anderer Verarbeitungseinheiten verfügt. Die ursprünglichen Verarbeitungseinheiten (oder deren Cache-Controller) können preisgünstiger sein und entsprechend keine Unterstützung für das T-MESI-Protokoll bieten, auch wenn die Systemlogik (Systemsteuereinheit) dieses Protokoll unterstützt. Diese ursprünglichen Verarbeitungseinheiten können jedoch ohne großen Kostenaufwand mit Mitteln ausgestattet werden, um anzuzeigen, ob sie Unterstützung für das Protokoll bieten, etwa durch die Verwendung eines Einzelbit-Flags, das die Systemlogik über die Anwesenheit oder die Abwesenheit eines T- MESI-Protokolls informiert. Wenn dann neue Verarbeitungseinheiten an den Steckplätzen hinzugefügt werden, deren Cache-Speicher das T-MESI-Protokoll unterstützen, kann die Systemlogik unter Verwendung des Flags zwischen diesen Cache-Speichern unterscheiden und das Protokoll mit den entsprechenden Verarbeitungseinheiten verwenden.

Für die folgende Beschreibung wird von einem System ausgegangen, das über mehrere Verarbeitungseinheiten verfügt, die das T-MESI-Protokoll unterstützen, sowie über mehrere Verarbeitungseinheiten verfügt, die dies nicht tun. Wenn jede Einheit eine Leseanforderung ausgibt, beinhaltet die Anforderung den Flag, der die T-MESI-Unterstützung anzeigt. Wenn ein Wert in einer Cachezeile im Status Geändert (dies kann durch beide Arten von Verarbeitungseinheit geschehen sein) gehalten wird und dieser Wert dann durch eine Verarbeitungseinheit angefordert wird, die das T-MESI- Protokoll nicht unterstützt, leitet die Systemlogik eine Antwort Intervention Geändert an den anfordernden Prozessor und den Speicher-Controller weiter. Die Cachezeile wechselt vom Status Ungültig in den Status Geteilt und der Speicher- Controller nimmt den Wert und speichert ihn während der Intervention im Systemspeicher. Wenn jedoch die anfordernde Verarbeitungseinheit T-MESI unterstützt, leitet die Systemlogik eine Antwort Intervention Markiert weiter (sie konvertiert eine Antwort Intervention Geändert von einem nicht kompatiblen Cache-Speicher in eine Antwort Intervention Markiert). Die Cachezeile in der anfordernden Verarbeitungseinheit wechselt von Ungültig zu Markiert und der Speicher-Controller ignoriert die Transaktion. In beiden Situationen wechselt die Cachezeile in der schreibenden Verarbeitungseinheit von Geändert in Geteilt. Diese Konstruktion erlaubt es den Computersystemen, die Voreile vorhandener Verarbeitungseinheiten zu nutzen, die das T-MESI- Protokoll unterstützen, unabhängig davon, ob T-MESI-Protokolle und normale Protokolle vermischt werden. Die selektive Implementierung des Protokolls kann auch für Diagnosezwecke genutzt werden.

Abgesehen von der Verwendung eines Flags zur selektiven Implementierung des Status Markiert basierend auf dem anfordernden Prozessor (heterogene Unterstützung) kann ein System-Flag bereitgestellt werden, um den Status Markiert auf globaler Basis zu aktivieren oder zu deaktivieren, beispielsweise unter Verwendung eines Einzelbit-Feldes in der Systemlogik. Der Master-Prozessor beispielsweise (der anfordernde Prozessor) kann das T-MESI-Protokoll unterstützen, doch das System will den geänderten Wert in der Speicherhierarchie nach unten verschieben, beispielsweise zu einem vertikalen L3 Cache.

Wie oben erwähnt, werden Übertragungen und Kohärenzantworten für die Statusarten und Operationen, die nicht in Tabelle 1 und 2 aufgeführt sind, mit einem MESI-Protokoll nach Stand der Technik ausgeführt. Die folgenden Punkte werden unter Berücksichtigung des MESI-Protokolls, wie in Fig. 3 implementiert, beschrieben: Ein Eingang kann nur in den Status T wechseln, wenn er sich derzeit im Status Ungültig befindet (wenn er bereits im Status Geteilt ist, würde er im Status Geteilt verbleiben und wenn ein Cache-Speicher einen Wert im Status T enthält, kann er sich in keinem Cache-Speicher mit den Statusarten M oder E befinden) und ein Eingang T kann nur in den Status Geteilt (bei einer Antwort Intervention Geändert), Ungültig (bei einer Rückgängigmachung der Zuordnung oder bei einem DClaim Push) oder Geändert (wenn der gleiche Prozessor bereits geänderte Daten weiter ändert) wechseln.

Mit diesem neuen T-MESI-Protokoll geht das Eigentum an einem Block an den Cache-Speicher über, der die Daten zuletzt gelesen hat, was weiterhin den Vorteil mit sich bringt, dass der Status Zuletzt Genutzt (Most recently Used) erhalten bleibt und damit die Möglichkeit verringert wird, dass die Zuordnung rückgängig gemacht wird, wenn ein Least Recently Used (LRU)-Mechanismus eingesetzt wird. Der Cache-Staius "T" kann auch vorteilhaft in anderen Anwendungen genutzt werden, etwa einem intelligenten Eingabe-/Ausgabe-(E/A)-Controller, der den Prozessor/Cache-Speicher unterbricht, der zuletzt einen E/A Status-Standort gelesen hat, da dieser Prozessor/Cache-Speicher sehr wahrscheinlich den E/A- Gerätetreiber-Code gespeichert hat und daher den Code schneller ausführen kann als ein anderer Prozessor, der den Code erst in seinen Cache-Speicher laden muss. Natürlich ist die vorliegende Erfindung vor allem vorteilhaft, da sie die geteilte Nutzung von Daten ermöglicht, die geändert und abgerufen wurden.

Ein anderer Aspekt des Status "T" ist der, dass wenn die Zuordnung einer Cachezeile in diesem Status rückgängig gemacht wird, wird dieser Vorgang allen anderen Prozessoren über die gemeinsame Verbindung mitgeteilt. Diese Sichtbarkeit der rückgängig gemachten Zuordnung bietet den weiteren Vorteil, dass eine Unterstützung für historische Cachestatus- Informationen geboten wird. Es wird von einem Beispiel ähnlich dem in Tabelle 1 dargestellten ausgegangen, in dem drei Prozessoren über dazugehörige Cachezeilen verfügen, die im Status Ungültig beginnen. Wenn der erste Prozessor eine RWITM Operation startet, wechselt seine Cachezeile von Ungültig zu Geändert und wenn ein zweiter Prozessor danach ein Lesen der Cachezeile anfordert, ruft der erste Prozessor die Daten ab, lässt seine Cachezeile in den Status Geteilt wechseln und die Cachezeile des zweiten Prozessors wechselt vom Status Ungültig in den Status Markiert (wie in den ersten drei Zeilen der Tabelle 1). Nun hat der erste Prozessor seine Cachezeile mit einer speziellen Form des Status Geteilt markiert, die als "ST" (Shared-Tagged = Geteilt-Markiert) bezeichnet werden kann. Wenn nun der dritte Prozessor die Zuordnung der Cachezeile im Status T (beispielsweise über einen LRU-Mechanismus) wieder rückgängig macht, wird dem ersten Prozessor die Rückgängigmachung der Zuordnung mitgeteilt und er kann darauf reagieren, indem er seine Cachezeile im Status "ST" in einen anderen Status ändert, wobei dieser andere Status von der jeweiligen Implementierung abhängt. Die Cachezeile im Status Markiert (Tagged) kann beispielsweise in den Systemspeicher geschrieben werden und die Cachezeile im Status "ST" kann in einen speziellen Status wechseln, der als Status "R" (Recently accessed) bezeichnet wird, der zur Intervention geteilter Daten genutzt werden kann. Der Status "R" wird im Folgenden sowie im US-Patent US-A-601 8799 näher beschrieben.

In einer alternativen Implementierung kann die Cachezeile im Status "ST" einfach in den Status "T" übergehen und den Push des Wertes umgehen, anstatt den geänderten Datenwert von der Cachezeile im Status "T" bei der Rückgängigmachung der Zuordnung in den Systemspeicher zu schreiben. Es besteht auch kein Bedarf, die Daten vom Cacheblock Markiert zu kopieren, da die Daten im Block Geteilt-Markiert die gleichen sind, der Cachestatus wird nur aktualisiert. Diese Schritte werden in den ersten vier Zeilen von Tabelle 3 dargestellt:

Tabelle 3

Die Verwendung des Status Geteilt-Markiert erlaubt es dem Computersystem, Intervention nach der Rückgängigmachung der Zuordnung einer markierten Cachezeile zu unterstützen und damit die Systemleistung zu steigern.

Die ersten vier Zeilen zeigen die Verwendung des Status "ST" von der Konvertierung eines Cacheblocks im Status "M" stammend, während die unteren vier Zeilen der Tabelle 3 zeigen, wie ein markierter Cacheblock ebenfalls zu Geteilt- Markiert wechseln kann. Die fünfte und sechste Zeile zeigen den Cacheblock im Status T, wie er von einem zum anderen Prozessor übergeht, wobei der Cacheblock im Prozessor P&sub1; vom Status T in den Status ST wechselt, der Cacheblock im Prozessor P&sub0;, der zuvor Geteilt-Markiert war, in den Status Geteilt wechselt. In der siebten Zeile wird die Zuordnung des Cacheblocks in Prozessor P&sub2; rückgängig gemacht, was den Cacheblock in Prozessor P&sub1; veranlasst, vom Status ST zurück in den Status T zu wechseln. Zu diesem Zeitpunkt befindet sich kein Cacheblock im Status ST, auch wenn sich einer im Status S und ein anderer im Status T befindet (diese Bedingung kann ebenfalls auftreten, wenn die Zuordnung der Cachezeile Geteilt-Markiert zu einem früheren Zeitpunkt rückgängig gemacht wird). Nichtsdestotrotz kann der Status ST wie er in Erscheinung treten, etwa in der letzten Zeile, wenn der Prozessor P&sub2; einen weiteren Lesevorgang anfordert.

Dieser Ansatz kann implementiert werden, wenn die Cachezeile im Status T eine entsprechende Nachricht rundsendet, die den Wunsch nach einem Cacheblock im Status ST angibt, um eine Schreiboperation in den Systemspeicher zu vermeiden. Wenn die Nachricht durch eine Cachezeile im Status ST empfangen wird, überträgt diese Cachezeile eine entsprechende Antwort und die Zuordnung der Cachezeile im Status T wird einfach rückgängig gemacht. Wenn keine Antwort erfolgt (das heisst, es befindet sich keine Cachezeile im Status ST), dann muss der Prozessor mit der Cachezeile im Status Markiert den geänderten Wert beim Rückgängig machen der Zuordnung in den Systemspeicher schreiben.

In den folgenden Implementierungen des Status Geteilt-Markiert gibt es nur eine Cachezeile, die bei Rückgängigmachung der Zuordnung der Cachezeile Markiert an einen anderen Status geleitet werden kann. In einer umfangreicheren Implementierung können mehrere Level an historischen Cache-Informationen bereitgestellt werden. Anstelle eines Cacheblocks Geteilt- Markiert, der zu jedem Zeitpunkt vorhanden ist, können mehrere Cacheblöcke im Status Geteilt-Markiert vorhanden sein. Diese Implementierung kann vorteilhafterweise erreicht werden, indem jedem Status Geteilt-Markiert eine Seriennummer entsprechend seinem historischen Level gegeben wird, das heisst ein Status ST1 für die Cachezeile, die die Daten gerade in die Cachezeile T geschrieben hat, ein Status ST2 für die Cachezeile, die die Daten zuvor in die Cachezeile ST1 geschrieben hat, ein Status ST3 für die Cachezeile, die die Daten davor in die Cachezeile ST2 geschrieben hat, und so weiter. Wenn die Zuordnung einer Cachezeile Markiert rückgängig gemacht wird, werden alle Cachezeilen Geteilt-Markiert ein Level hochgestuft, wie in Tabelle 4 dargestellt.

Tabelle 4

In den ersten drei Zeilen der Tabelle 4, ähnlich wie in den Tabellen 1 und 3, wird die Cachezeile des Prozessors P&sub0; geändert, schreibt dann den Wert in die Cachezeile von Prozessor P&sub1;, der in Markiert wechselt. Die Cachezeile von P&sub0; wechselt in die erste Stufe des Status Geteilt-Markiert. In den nächsten zwei Zeilen geht die Cachezeile Markiert zum Prozessor P&sub2; und Prozessor P&sub3; über, während die vorigen Cachezeilen Markiert in die erste Stufe des Status Geteilt- Markiert wechseln. Jede Zeile, die in der ersten Stufe des Status Geteilt-Markiert war, wechselt in die zweite Stufe Geteilt-Markiert und in der fünften Zeile wechselt die Cachezeile im Prozessor P&sub0; von der zweiten Stufe des Status Geteilt-Markiert zur dritten Stufe des Status Geteilt- Markiert. In der sechsten Zeile wird die Zuordnung der Cachezeile in Prozessor P&sub3; durch den LRU-Mechanismus rückgängig gemacht, die Cachezeile ST1 in Prozessor P&sub2; wechselt in den Status T, die Cachezeile ST2 in Prozessor P&sub1; wechselt in den Status ST1 und die Cachezeile ST3 im Prozessor P&sub0; wechselt in den Status ST2.

Die Verwendung eines seriellen Identifiers mit den Stufen des Status Geteilt-Markiert erreicht eine weitere Leistungssteigerung in Verbindung im dem LRU-Mechanismus zum Rückgängig machen der Zuordnung, da die Wahrscheinlichkeit verringert wird, dass die Zuordnung einer Cachezeile in einer bestimmten n-ten Stufe rückgängig gemacht wird, womit insgesamt die Wahrscheinlichkeit steigt, dass der geänderte Wert in der horizontalen Cachestruktur verbleibt. Die einzige Begrenzung der Anzahl der Stufen für historische Cache- Informationen ist die Anzahl der Bits im Cache-Kohärenz- Statusfeld für die Cachezeile.

Die folgende Beschreibung der Erfindung ist generell anwendbar auf eine Cache-Architektur auf jeder Stufe, das heisst L2, L3 usw., doch im Falle von mehrstufigen Cache-Speichern kann die Erfindung weiterhin vorteilhaft mit einen leicht veränderten Modell eingesetzt werden. Fig. 4 zeigt ein Multiprozessor- Computersystem 40, das zwei CPU-Cluster 42a und 42b umfasst. Der CPU-Cluster 42a verfügt über vier CPUs 44a, 44b, 44c und 44d, wovon jeder einen Prozessorkern mit integrierten (L1) Anweisungs- und Daten-Cache-Speichern sowie einen L2 Cache- Speicher aufweist. Die L2 Cache-Speicher dieser vier CPUs 44a, 44b, 44c und 44d sind mit einem gemeinsamen L3 Cache-Speicher 46a verbunden, der wiederum über eine gemeinsame Verbindung oder einen Bus 50 mit dem Systemspeicher (RAM) 48 verbunden ist. Der CPU Cluster 42b hat gleichfalls vier CPUs 44e, 44f, 44g und 44h, die ebenfalls über einen Prozessorkern mit integrierten (L1) Anweisungs- und Daten-Cache-Speicher sowie über einen L2 Cache-Speicher verfügen. Die L2 Cache-Speicher dieser vier CPUs 44e, 44f, 44g und 44h sind mit einem weiteren gemeinsamen L3 Cache-Speicher 46b verbunden, der wiederum über einen Bus 50 mit dem Speicher 48 verbunden ist. In einer hierarchischen Variation des T-MESI-Protokolls können sich bis zu drei entsprechende Cachezeilen im Status Markiert befinden: eine Cachezeile in den L2 Cache-Speichern der CPUs 44a, 44b, 44c und 44d, eine Cachezeile in den L2 Cache-Speichern der CPUs 44e, 44f, 44g und 44h sowie eine Cachezeile in einem der beiden L3 Cache-Speicher 46a und 46b.

In dem folgenden Beispiel beginnen alle Cachezeilen in den CPUs 44a-44h im Status Ungültig. Der Prozessor 44a führt eine RWITM Operation aus und daher wechselt seine Cachezeile (L2) vom Status Ungültig in den Status Geändert; die entsprechende Cachezeile im L3 Cache-Speicher 46a wechselt ebenfalls vom Status Ungültig in den Status Geändert. Danach fordert der Prozessor 44b ein Lesen der Cachezeile an, der Prozessor 44a interveniert und seine Cachezeile (L2) wechselt in den Status Geteilt, während die Cachezeile (L2) des Prozessors 44b vom Status Ungültig in den Status Markiert übergeht. Die Cachezeile im L3 Cache-Speicher 46a bleibt im Status Geändert. Später fordert der Prozessor 44e ein Lesen der Cachezeile an, der Prozessor 44b interveniert, doch seine Cachezeile (L2) bleibt im Status Markiert, da sie sich in einem anderen CPU Cluster von Prozessor 44e befindet. Die Cachezeile (L2) im Prozessor 44e wechselt dennoch vom Status Ungültig in den Status Markiert. Da die geänderten Daten durch beide L3 Cache- Speicher gegangen sind, wechselt die Cachezeile im L3 Cache- Speicher 46a dennoch von Geändert in Geteilt und die Cachezeile im L3 Cache-Speicher 46b wechselt von Ungültig in Markiert. Wenn danach der Prozessor 44f ein Lesen der Cachezeile anfordert, kann sie von der Cachezeile (L2) des Prozessors 44e geschrieben werden. In einem solchen Fall wechselt die Cachezeile (L2) des Prozessors 44e vom Status Markiert in den Status Geteilt und die Cachezeile (L2) des Prozessors 44f wechselt vom Status Ungültig in den Status Markiert. Diese Schritte werden in Tabelle 5 dargestellt.

Tabelle 5

In der letzten Zeile der Tabelle 5 verfügt jeder CPU Cluster über eine Cachezeile im Status T und einer der Cache-Speicher verfügt ebenfalls über eine Zeile im Status T. Diese Bedingung erlaubt das Schreiben der geänderten Daten auf dem Level 2 von einem lokalen Prozessor (das heisst innerhalb desselben Clusters wie der anfordernde Prozessor), um die Leistung weiter zu steigern. Wenn also der Prozessor 44c danach das Lesen der Cachezeile anfordert, wird diese Anforderung von der Cachezeile (L2) des Prozessors 44b erfüllt, doch wenn der Prozessor 44g danach das Lesen der Cachezeile anfordert, wird diese Anforderung von der Cachezeile (L2) des Prozessors 44f erfüllt. Beide Operationen würden auf der L2 Stufe stattfinden, ohne jeden Eingriff durch die L3 Cache-Speicher 46a und 46b. Wenn mehr als zwei CPU-Cluster bereitgestellt werden, könnte sich die Cachezeile T auf ähnliche Weise in den L3 Cache-Speicher bewegen. Dieses Konzept kann auf Cache- Architekturen ausgedehnt werden, die sogar mehr als drei Cache-Speicher Levels (L1, L2, L3) haben. Der Status T muss nicht auf allen Levels implementiert werden.

Die vorliegende Erfindung kann ebenfalls mit anderen Varianten des MESI-Protokoll kombiniert werden, wie etwa das oben erwähnte R-MESI-Protokoll, das im US-Patent US-A-601 8791 beschrieben wird. Entsprechend diesem Protokoll wird ein Status Recent ("Zuletzt") für den Cache-Speicher aktiviert, der zuletzt die Daten gelesen hat, was eine Antwort Intervention Geteilt ermöglicht. Eine Kombination RT-MESI- Protokoll kann daher abgeleitet werden und ein Ausführungsbeispiel wird in Fig. 5 gezeigt. In dieser Mischform des Protokolls kann eine Cachezeile im Status Markiert in den Status Zuletzt wechseln, nachdem der geänderte Wert an einen anderen Speicherort in der Speicherhierarchie geschrieben wurde (etwa in einen anderen Cache-Speicher im Systemspeicher) und eine Cachezeile, die sich im Status Geändert befindet, kann ebenso in den Status Zuletzt (Recent) wechseln, wenn an einen anderen Speicherort geschrieben wird. Ein Beispiel wird in Tabelle 6 gezeigt.

Tabelle 6

In Tabelle 6 beginnen alle entsprechenden Cachezeilen in den Prozessoren P&sub0;, P&sub1; und P&sub2; im Status Ungültig (ähnlich wie in Tabelle 1), und wenn der Prozessor P&sub0; eine RWITM Operation im dazugehörigen Speicherblock ausführt, wechselt seine Cachezeile in Geändert. Wenn Prozessor P&sub1; eine Leseoperation ausführt, wechselt seine dazugehörige Cachezeile in Markiert, doch die Cachezeile des Prozessors P&sub0; wechselt nun in Zuletzt, anstelle von Geteilt (die dritte Zeile in Tabelle 6). Wenn danach Prozessor P&sub2; eine Leseoperation ausführt, wechselt seine Cachezeile in Markiert, während die Cachezeile des Prozessors P&sub1; in Zuletzt wechselt und die Cachezeile des Prozessors P&sub0; wechselt in Geteilt (die vierte Zeile der Tabelle 6). Wenn der Prozessor P&sub2; die Zuordnung des Blocks rückgängig macht (beispielsweise aufgrund eines LRU-Algorithmus) hält der Prozessor P&sub1; den Wert immer noch im Status R. Auf diese Weise kann der Prozessor P&sub1; den Wert zu einem späteren Zeitpunkt über eine Antwort Intervention Geteilt schreiben. In einer anderen Variante dieses Protokolls kann der Status Exklusiv umgangen werden und durch den Status Zuletzt ersetzt werden.

Den Fachleuten sollte klar sein, dass komplexere Formen des RT-MESI-Protokolls möglich sind, beispielsweise als eine Mischform unter Verwendung des zuvor erwähnten Status ST, wobei eine Cachezeile im Status S in den Status R wechselt (anstelle des Status T), wenn die Zuordnung der Cachezeile, die derzeit den Wert im Status T hält, rückgängig gemacht wird, davon ausgehend, dass der Wert zurück in den Systemspeicher geschrieben wird. Ähnliche Ausführungsbeispiele können abgeleitet werden, unter Verwendung von historischen Cache- Informationen, bereitgestellt durch mehrere Stati Geteilt- Markiert. Das RT-MESI-Protokoll kann ebenfalls mit der globalen/lokalen Cache-Konstruktion von Fig. 4 implementiert werden. Ein Beispiel wäre der lokale Cache-Speicher der Verarbeitungseinheit 44d mit einem Wert im Status M, wobei dann der Wert in die Verarbeitungseinheit 44h geschrieben würde. Wie zuvor würde die Cachezeile in der Verarbeitungseinheit 44h von Ungültig in Markiert wechseln, doch nun kann die Cachezeile in der Verarbeitungseinheit 44d von Geändert in Zuletzt wechseln.

Beide Statusarten T und R bieten einen Mechanismus zur eindeutigen Identifizierung eines Cacheblocks aus einer Gruppe von Cacheblöcken, die einen Wert gemeinsam nutzen. Wie bereits erwähnt, macht es dieser Aspekt der Statusarten möglich, den Block zur Intervention zu nutzen. Diese eindeutige Markierung des Blocks hat weitere Vorteile. Der eine betrifft die zuvor erwähnte DClaim Operation. Diese Operation kann praktisch simultan von mehreren Prozessoren ausgegeben werden, was zu Kollisionen führt. Der Status T kann verwendet werden, um eine Kollisionspriorität zuzuordnen, die in Konflikt stehende DClaim Anforderungen von anderen Cache-Speichern überschreibt. Durch Bereitstellen einer solchen Kollisionspriorität kann die DClaim Operation vom T Statusblock weiterhin platziert werden (beispielsweise in eine Warteschlange für Cache- Speicheroperationen für eine mögliche Rundsendung an die restliche Speicherhierarchie), doch die Speicheranweisung DClaim kann sofort ausgeführt werden, was zu einem schnelleren Betrieb des gesamten Systems führt.

Während der Status T somit vorteilhafterweise genutzt werden kann für (i) die Änderung von Daten, (ii) das Verfolgen der Verantwortlichkeit zum Schreiben der geänderten Daten in die Speicherhierarchie und (iii) das Bereitstellen einer DClaim Kollisionspriorität, müssen diese drei Funktionen nicht unbedingt in einem einzelnen Kohärenzstatus kombiniert werden. Tabelle 7 unten zeigt ein komplizierteres Kohärenz-Protokoll, in dem diese Funktionen unabhängig voneinander ausgeführt werden.

Tabelle 7 Cacheblock Mögliche Statusarten für andere Cacheblöcke (horizontal)

I Q QD QT QDT R RD RT RDT S SD ST SDT H M I

H Q QD QT QDT R RD RT RDT S SD ST SDT H M I

M I

Q R RD RT RDT S SD ST SDT H I

QD R RT S ST H I

QT R RD S SD H I

QDT R S H I

R Q QD QT QDT S SD ST SDT H I

RD Q QT S ST H I

RT Q QD S SD H I

RDT Q S H I

S Q QD QT QDT R RD TRT RDT S SD ST SDT H I

SD Q QT R RT S ST H I

ST Q QD R RD S SD H I

SDT Q R S H I

In Tabelle 7 zeigt die linke Spalte den Status eines bestimmten Cacheblocks und die rechte Spalte zeigt die möglichen Kohärenz-Stati der dazugehörigen Blöcke in anderen horizontalen Cache-Speichern. Diese Variante des Protokolls bietet fünfzehn Kohärenz-Stati, so dass vier Bits für das Kohärenzfeld erforderlich sind. Die drei oben genannten Funktionen sind unabhängig voneinander wie folgt zugeordnet. Zunächst einmal darf jeder Kohärenz-Status mit einem tiefgestellten D (QD, QDT, RD, RDT, SD oder SDT) eine DClaim Operation ausführen (das heisst, ein solcher Block verfügt über Kollisionspriorität, wenn in Konflikt stehende DClaims auftauchen). Als Nächstes ist jeder Kohärenz-Status mit einem tiefgestellten T (QT, QDT, RTr RDT, ST, SDT) verantwortlich für das Schreiben der geänderten Daten nach unten in der Speicherhierarchie. Dann ist jeder Kohärenz-Status R(x) (R, RD, RT oder RDT) berechtigt, den Wert zu ändern. Der Kohärenz- Status Q(X) (Q, QD, QT oder QDT) wird eingesetzt, um Intervention zu bieten, wenn kein Status R(x) vorhanden ist, das heisst, der Status R(x) erlaubt primäre Intervention und die Statusarten Q(x) (historisch) erlauben sekundäre Intervention. Der Status H (Hover) ist der unten genannte Wartestatus. In diesem Ausführungsbeispiel wird kein Status E verwendet.

Die drei genannten Funktionen sind unabhängig voneinander implementiert, können jedoch in bestimmten Kohärenz-Stati miteinander kombiniert werden. Die beiden Funktionen Intervention und Verantwortlichkeit zum Rückschreiben werden in den Statusarten RT und QT kombiniert. Die beiden Funktionen Intervention und DClaim Priorität werden in den Statusarten RD und QD kombinert. Die beiden Funktionen Verantwortlichkeit zum Rückschreiben und DClaim Priorität werden in den Statusarten SDT kombiniert. Alle drei Funktionen werden in den Statusarten QDT und RDT kombiniert. Die Unabhängigkeit dieser drei Funktionen kann gesteuert werden durch Setzen von Systembits unter Verwendung eines Datenfluss-Rechners. Dieses Konzept kann auch auf die Cache-Speicher unterstützenden, zusammengefassten CPUs angewendet werden.

Letztlich ist die vorliegende Erfindung ebenfalls kompatibel mit der Verwendung von "cross-bars". Cache-Designs nach Stand der Technik verwenden ein Adressen-Cross-Bar und ein Daten- Cross-Bar, um die Kommunikation auszudehnen. Generell verfügen Cachespeicher nicht über eine Punkt-zu-Punkt-Kommunikation, sondern sie müssen Anforderungen und Antworten als Rundsendung an andere Speicherorte in der Speicherhierarchie ausgeben. Cross-Bars sind einfach Schalter und Relais, die die Anforderungen und Antworten auf verschiedene Pfade im Bus lenken, um den Bus effizienter zu nutzen. Mit anderen Worten alle diese Cache-Speicher sind verbunden mit dem Cross-Bar und dieses verwaltet eine Warteschlange, so dass die Cache- Operationen gleichmäßig über die verschiedenen Pfade im Bus verteilt werden können, wodurch erheblich mehr Bandbrite für den Bus geschaffen wird. Der System-Controller kann die Cross- Bars steuern. Ein gegebener Cache-Speicher (beispielsweise L2) muss den Cross-Bar-Controller informieren, dass der Cache- Speicher hinsichtlich eines gegebenen Tags Operationen zu erwarten hat.

Das T-MESI-Protokoll ist nützlich in Verbindung mit Cross- Bars, da bestimmte Adressen- und Datenoperationen nur den Geräten dargestellt werden, die diese Operationen benötigen. Ein Beispiel dafür wären die vier Verarbeitungseinheiten, eine mit einem Cacheblock im Status T, eine mit dem entsprechenden Cacheblock im Status ST und die anderen beiden mit den entsprechenden Blöcken im Status I. Wenn einer der beiden letzteren Prozessoren das Lesen des Wertes anfordert, kann die Systemlogik bestimmen, dass die Antwort mit der höchsten Priorität (Intervention Markiert) nur an drei der vier Prozessoren gesendet werden soll. Daher wird diese Adressenoperation dem vierten Prozessor nicht dargestellt (dem nicht anfordernden Prozessor mit seinem Block im Status I). Ähnlich kann das Daten-Cross-Bar verwendet werden, um den Wert selbst nur dem anfordernden Prozessor darzustellen. Wenn ein Prioritätsschema verwendet wird, in dem die Antwort Intervention Markiert eine Antwort Wiederholung überschreibt, dann muss die Antwort möglicherweise dem wiederholenden Prozessor dargestellt werden.

Obwohl die Erfindung unter Bezugnahme auf bestimmte Ausführungsbeispiele beschrieben wurde, hat diese Beschreibung keine einschränkende Wirkung. Es sind verschiedene Änderungen des offenlegten Ausführungsbeispiels sowie alternative Ausführungsbeispiele der Erfindung möglich, wie es den Fachleuten klar sein dürfte. Dieses Protokoll kann beispielsweise mit Cache-Kohärenz-Protokollen kombiniert werden, bei denen es sich nicht um R-MESI-Protokoll, sondern beispielsweise um ein H-MESI-Protokoll handelt, wobei eine Cachezeile im Status Warten ("Hover") arbeitet, um auf die Übertragung gültiger Daten zu warten. Dieses H-MESI-Protokoll könnte kombiniert werden mit dem T-MESI-Protokoll der vorliegenden Erfindung, etwa durch eine Cachezeile im Status H, die in einen Status ST wechselt, wenn die wartende Cachezeile im Status Hover die gültigen Daten lädt. Es ist daher klar, dass solche Änderungen vorgenommen werden können, ohne dass vom Ziel der vorliegenden Erfindung entsprechend der angehängten Ansprüche abgewichen wird.


Anspruch[de]

1. Eine Methode zur Verwaltung von Cache-Kohärenz in einem Multiprozessor-Computersystem (10) mit einem Systemspeichergerät (48), einem Bus (50), verbunden mit dem genannten Systemspeichergerät und mit einer Vielzahl an Verarbeitungseinheiten (42a, 42b), verbunden mit dem genannten Bus, wobei jede Verarbeitungseinheit über mindestens einen Cache-Speicher (44a-44h) verfügt, folgende Schritte umfassend:

Kopieren eines Wertes, zugeordnet zu einem Speicherblock des genannten Systemspeichergeräts in einen ersten Cacheblock, befindlich in einem ersten Cache-Speicher und Kopieren des genannten Wertes vom genannten ersten Cacheblock in einen zweiten Cacheblock, befindlich in einem zweiten Cache-Speicher, wobei der erste Cache- Speicher eine erste Verarbeitungseinheit unterstützt und der zweite Cache-Speicher eine zweite Verarbeitungseinheit unterstützt und Wert im ersten Cacheblock hinsichtlich eines älteren Werts im Speicherblock geändert wurde;

Zuordnen eines ersten Kohärenz-Status zum ersten Cacheblock mit der Angabe, das der erste Cacheblock eine gemeinsame Kopie des Wertes enthält und den Wert exklusiv schreiben wird, wobei diese Methode durch folgende Schritte gekennzeichnet ist:

Zuordnen eines zweiten Kohärenz-Status zum zweiten Cacheblock mit der Angabe, dass der zweite Cacheblock eine gemeinsame Kopie des Wertes enthält und über Kollisionspriorität gegenüber jeder, in Konflikt stehenden Anforderung verfügt, um den Speicherblock für eine spätere Änderung zu beanspruchen;

Kopieren des geänderten Wertes in einen dritten Cacheblock in einem dritten Cache-Speicher, der eine dritte Verarbeitungseinheit unterstützt; und

Zuordnen eines dritten Kohärenz-Status zum dritten Cacheblock mit der Angabe, dass der dritte Cacheblock eine gemeinsame Kopie des geänderten Wertes enthält und für das Schreiben des geänderten Wertes zurück in den Speicherblock verantwortlich ist.

2. Eine Methode nach Anspruch 1, weiterhin folgende Schritte umfassend:

Ausgeben einer ersten Anforderung, einem anderen Cacheblock zugeordnet, um den Speicherblock für weitere Änderungen zu beanspruchen;

Ausgeben einer zweiten Anforderung, dem zweiten Cacheblock zugeordnet, um den Speicherblock für spätere Änderungen zu beanspruchen, so dass die zweite Anforderung in Konflikt mit der ersten Anforderung steht; und

Zurückziehen der ersten Anforderung in Reaktion auf die Ausgabe der zweiten Anforderung.

3. Eine Methode nach Anspruch 1, weiterhin folgenden Schritt umfassend: Schreiben des geänderten Wertes in den Speicherblock vom dritten Cacheblock.

4. Ein Multiprozessor-Computer, folgendes umfassend:

Ein Systemspeichergerät (48);

Einen Bus (50), verbunden mit dem genannten Systemspeichergerät;

Eine Vielzahl an Verarbeitungseinheiten (42a, 42b, 42c), verbunden mit dem genannten Bus, wobei jede genannte Verarbeitungseinheit über mindestens einen Cacheblock (44a-44h) verfügt, um Werte aus dem genannten Systemspeicherblock zu speichern; und

Ein Cache-Kohärenz-Mittel, das weiterhin Mittel für folgendes umfasst: (i) Kopieren eines Wertes, einem Speicherblock des genannten Systemspeichergeräts zugeordnet, in einen ersten Cacheblock, einer ersten Verarbeitungseinheit zugeordnet, und Kopieren des genannten Wertes vom genannten ersten Cacheblock in einen zweiten Cacheblock, einer zweiten Verarbeitungseinheit zugeordnet, und wobei der Wert im ersten Cacheblock hinsichtlich einem älteren Wert im genannten Speicherblock geändert wurde, (ii) Zuordnen eines ersten Kohärenz-Status zum genannten ersten Cacheblock mit der Angabe, dass der genannte erste Cacheblock eine gemeinsame Kopie des Wertes enthält und den Wert exklusiv schreiben wird, wobei das genannte Computersystem dadurch gekennzeichnet ist, dass das genannte Cache-Kohärenz-Mittel weiterhin Mittel für folgendes umfasst: (iii) Zuordnen eines zweiten Kohärenz-Status zum genannten zweiten Cacheblock mit der Angabe, dass der genannte zweite Cacheblock eine gemeinsame Kopie des Wertes enthält und über Kollisionspriorität gegenüber jeder in Konflikt stehenden Anforderung zur Beanspruchung des genannten Speicherblocks für spätere Änderungen verfügt; (iv) Kopieren des geänderten Wertes in einen dritten Cacheblock, einer dritten Verarbeitungseinheit zugeordnet, und (v) Zuordnen eines dritten Kohärenz-Status zum genannten dritten Cacheblock mit der Angabe, dass der genannte dritte Cacheblock eine gemeinsame Kopie des geänderten Wertes enthält und für das Schreiben des geänderten Wertes zurück in den genannten Speicherblock verantwortlich ist.

5. Ein Computersystem nach Anspruch 4, wobei das genannte Cache-Kohärenz-Mittel weiterhin Mittel für folgendes umfasst: (vi) Ausgeben einer ersten Anforderung, einem weiteren Cacheblock zugeordnet, um den genannten Speicherblock für spätere Änderungen zu beanspruchen, (vii) Ausgeben einer zweiten Anforderung, dem zweiten Cacheblock zugeordnet, um den Cacheblock für spätere Änderungen zu beanspruchen, so dass die zweite Anforderung mit der ersten Anforderung in Konflikt steht und (viii) Zurückziehen der ersten Anforderung in Reaktion auf die zweite Anforderung.

6. Ein Computersystem nach Anspruch 4, wobei das genannte Cache-Kohärenz-Mittel weiterhin Mittel zum Schreiben des geänderten Wertes in den genannten Speicherblock vom genannten dritten Cacheblock umfasst.







IPC
A Täglicher Lebensbedarf
B Arbeitsverfahren; Transportieren
C Chemie; Hüttenwesen
D Textilien; Papier
E Bauwesen; Erdbohren; Bergbau
F Maschinenbau; Beleuchtung; Heizung; Waffen; Sprengen
G Physik
H Elektrotechnik

Anmelder
Datum

Patentrecherche

Patent Zeichnungen (PDF)

Copyright © 2008 Patent-De Alle Rechte vorbehalten. eMail: info@patent-de.com