-
Die vorliegende Erfindung bezieht sich allgemein auf Multiprozessor-
Computersysteme, in denen die Prozessoren sich Speicherkapazitäten teilen, und im
Besonderen auf ein Multiprozessor-Computersystem, das Cache-Interferenzen aufgrund
cachekohärenter Transaktionen durch das Vorhandensein von Cache-Controllern für jeden
Datenprozessor verringert, wobei die Cache-Controller in einem ersten Modus eine
gewöhnliche Einsichtnahme in die Cache-Lines vornehmen und in einem zweiten Modus auf
eine bestimmte Cache-Line zugreifen können, ohne die gesamte Adresse analysieren zu
müssen.
Hintergrund der Erfindung
-
Die Notwendigkeit, "Cachekohärenz" in Multiprozessorsystemen zu erhalten, ist
bekannt. "Cachekohärenz" zu erhalten bedeutet im Mindesten, daß jedesmal, wenn Daten von
einem Prozessor in einen bestimmten Bereich eines gemeinsamen Adreßbereichs geschrieben
werden, die Caches aller anderen Prozessoren, in denen Daten für denselben Adreßbereich
gespeichert sind, entweder ungültig gemacht oder mit den neuen Daten überschrieben werden.
-
Es gibt zwei primäre Systemarchitekturen, die für die Erhaltung von Cachekohärenz
genutzt werden. Die eine, hier als Cache-Snoop-Architektur bezeichnet, erfordert, daß die
Caches aller Datenprozessoren jeweils eine Schaltung für das Überwachen eines
gemeinsamen Adreßbusses sowie diverse Steuerleitungen beinhalten, um zu erkennen, wenn im
gemeinsamen Speicher enthaltene Daten mit neuen Daten überschrieben werden, wobei
festgestellt wird, ob im Cache des jeweiligen Datenprozessors in diesem Speicherbereich ein
Eintrag verzeichnet ist und dessen Cache-Inhalt und/oder das entsprechende Cache-Tag
aktualisiert werden, wenn im Cache gespeicherte Daten durch einen anderen Prozessor
ungültig gemacht werden. In der Cache-Snoop-Architektur ist also jeder Datenprozessor dafür
zuständig, seinen eigenen Cache in einem Zustand zu halten, der mit denen der anderen
Caches übereinstimmt.
-
In einer zweiten Cachekohärenz-Architektur, hier als Memory-Directory-Port-
Architektur bezeichnet, beinhaltet der Hauptspeicher für jeden Datenblock einen Satz
Zustandsbits, die anzeigen, welche Datenprozessoren, wenn überhaupt, diesen Datenblock in
ihrem Cache gespeichert haben. In den Zustandsbits des Hauptspeichers können zusätzliche
Informationen gespeichert sein, wie z. B. darüber, welcher Prozessor als der "Besitzer" des
Datenblocks gilt, wenn die Cachekohärenz-Architektur das Speichern solcher Informationen
erfordert.
-
In der vorliegenden Erfindung gewährleistet ein System-Controller die Cachekohärenz
zwischen den Cache-Speichern verschiedener Datenprozessoren, indem er einen Duplikatsatz
der Cache-Tags speichert und anhand dieser Duplikate der Cache-Tags feststellt, welche
Cache-Speicher Daten enthalten, die den jeweiligen von den Datenprozessoren
durchgeführten Speichertransaktion entsprechen. Der System-Controller stellt fest, wann der
Inhalt einer Cache-Line in einem Cache-Speicher ungültig gemacht werden muß, und wann
eine Cache-Line in einem Cache-Speicher als Datenquelle für von einem anderen
Datenprozessor angeforderte Daten dienen muß. Die Cache-Tag-Duplikat-Architektur
eliminiert die Notwendigkeit der Busüberwachung durch die Datenprozessoren, ohne daß
dabei die mit der Memory-Directory-Port-Architektur verbundenen Verzögerungen auftreten.
-
In Fig. 11 ist ein vereinfachtes Blockdiagramm einer bekannten Cache-
Speichervorrichtung 400 aus dem Stand der Technik dargestellt, die an einen Datenprozessor
402 angeschlossen ist. Der Cache-Speicher beinhaltet ein Cache-Line-Array 404 und ein
Cache-Tag-Array 406. Das Cache-Line-Array 404 beinhaltet 2CS Cache-Lines 410, wobei CS
die Anzahl der für das eindeutige Identifizieren einer Cache-Line 410 nötigen Adreßbits ist.
In jeder Cache-Line 410 ist ein Datenblock festgelegter Größe, z. B. 64 Bytes, gespeichert.
Das Cache-Tag-Array 406 beinhaltet 2CS Cache-Tags 412.
-
Die Cache-Schaltung 414 steuert die Funktion des Cache-Speichers 400. Eine
Komparatorschaltung 416 vergleicht einen Bereich der in einer Cache-Speicher-Anforderung
angegebenen Adresse mit dem in einem ausgewählten Cache-Tag 412 gespeicherten Adreß-
Tag und überprüft den in dem ausgewählten Cache-Tag enthaltenen Cache-Zustandswert, um
festzustellen, ob das Adreß-Tag gültig ist.
-
Die Zustandsaktualisierungsschaltung 418 ist eine Schaltung für das Aktualisieren der
Adresse und Information über den Cache-Zustand, die in dem Cache-Tag 412 gespeichert
sind, das von der in einer Cache-Speicher-Anforderung angegebenen Adresse ausgewählt
wird. Die Cache-Line-Zugriffs-/Aktualisierungs-Schaltung 420 ist eine Schaltung zum Lesen
und Schreiben von Daten aus der bzw. in die Cache-Line 410, die von der in einer Cache-
Speicher-Anforderung angegebenen Adresse ausgewählt wird.
-
Ein "Cache-Miss" ist definiert als das Unvermögen, einen bestimmten Datenblock in
einem Cache-Speicher zu lokalisieren. Ist in einer Cache-Speicher-Anforderung die Adresse
eines Datenblocks angegeben, der nicht im Cache-Speicher gespeichert ist, so spricht man
vom Auftreten eines Cache-Miss.
-
Ein "Cache-Hit" ist definiert als das Lokalisieren eines bestimmten Datenblocks in
einem Cache-Speicher. Ist in einer Cache-Speicher-Anforderung die Adresse eines
Datenblocks angegeben, der im Cache-Speicher gespeichert ist, so wird die Speicher-
Anforderung vom Cache-Speicher bearbeitet, und man spricht vom Auftreten eines Cache-
Hit.
-
Da die vorliegende Erfindung ein System und Verfahren beinhaltet, die beim
Auftreten eines Cache-Hit Cache-Speicheroperationen um einen oder zwei Taktzyklen
beschleunigen, ist die Schaltung für die Reaktion auf einen Cache-Miss durch das
Weiterleiten der Speicherzugriffs-Anforderung an eine andere Speichervorrichtung, wie z. B.
einen großen Cache-Speicher oder den Hauptspeicher des Systems, in Fig. 11 nicht
dargestellt.
-
Eine Cache-Speicherzugriffsoperation in einem Standard Cache-Speicher 400 aus dem
Stand der Technik wie dem in Fig. 11 gezeigten beginnt, ungeachtet dessen, ob es sich um
eine Lese- oder Schreiboperation handelt, folgendermaßen. Dem Cache-Speicher 400 werden
von einem Datenprozessor 402 oder einer anderen Vorrichtung ein Adreßwert und ein
Befehlssignal übermittelt. Der Adreßwert enthält eine Sequenz von Adreßbits, die hier in drei
Gruppen unterteilt werden: {A}, {B} und {C}. Der volle Adreßwert, der dem Cache-Speicher
übermittelt wird, wird als {A B C} dargestellt, wobei {A} die signifikantesten Adreßbits
repräsentiert, {B} einen Satz Adreßbits mittlerer Signifikanz, und {C} einen Satz am
wenigstens signifikanter Adreßbits repräsentiert.
-
Die Merkmale des Oberbegriffs von Anspruch 1 sind in "A Second Level Cache
Controller for a Super-Scolar Sparc Processor", Compcon 92, San Francisco, 24. - 28. Februar
1992, no. contr. 37, S. 142-151 dargestellt.
-
Als Beispiel sei angenommen, daß ein System einen 41-Bit-Adreßwert PA< 40 : 0>
nutzt, wobei PA für "physikalische Adresse" steht, und wobei jeder einzelne Adreßwert ein
bestimmtes Byte im Hauptspeicher des Systems darstellt. Beinhaltet dieses System einen
Datenprozessor mit einem Cache-Speicher 400, der eine Cache-Line der Größe 64 Byte und
einen Cache-Speicher der Größe 512 KByte hat, dann stellt {A} die 21 signifikantesten
Adreßbits PA< 40 : 19> , {B} die 13 Adreßbits mittlerer Signifikanz PA< 18 : 6> und {C} die 6
am wenigsten signifikanten Adreßbits PA< 5 : 0> dar.
-
Der Cache-Speicher 400 in diesem Beispiel hat 213 Cache-Lines 410 und 2¹³
entsprechende Cache-Tags 412. In jedem Cache-Tag 412 ist ein Cache-Line Zustandswert
und ein Adreß-Tag gespeichert. Der Cache-Line Zustandswert zeigt an, ob die entsprechende
Cache-Line gültige Daten enthält, und ob der in der entsprechenden Cache-Line 410
gespeicherte Datenblock ausschließlich in diesem Cache-Speicher gespeichert ist oder mit
wenigstens einem anderen Cache-Speicher geteilt wird. Der Cache-Zustandswert zeigt auch
an, ob die entsprechende Cache-Line modifizierte Daten enthält, die in den Hauptspeicher
zurückgeschrieben werden müssen, wenn der in der Cache-Line 410 gespeicherte Datenblock
aus dem Cache-Speicher entfernt wird. Das Adreß-Tag im Cache-Tag 412 enthält die {A}-
Adreßbits PA< 40 : 19> , die neben der Position des Cache-Tag im Cache-Tag-Array 406 den
Basisort des Datenblocks im Hauptspeicher eindeutig identifizieren.
-
In einem gewöhnlichen Cache-Speicher beginnt jede Cache-Speicheroperation mit den
{B}-Adreßbits, durch die ein entsprechendes aus 2B Cache-Tags im Cache-Tag-Array
ausgewählt und auf dieses zugegriffen und die entsprechende Cache-Line 410 im Cache-Line-
Array angesteuert wird. Eine Komparatorschaltung vergleicht das Adreß-Tag in dem Cache-
Tag, auf das zugegriffen wurde, mit den {A}-Adreßbits und den Cache-Line-Zustandswert
mit einem Cache-Zustandswert, der als "ungültig" definiert ist. Stimmt das Adreß-Tag mit
den {A}-Adreßbits überein und der Cache-Zustandswert ist nicht ungültig, dann handelt es
sich um einen Cache-Hit. Ein Cache-Hit/Miss-Signal wird an die
Zustandsaktualisierungsschaltung 418 und die Cache-Line-Zugriffs-/Aktualisierungsschaltung 420 übertragen, so daß
diese Schaltungen die anstehende Cache-Speicheranforderung entsprechend verarbeiten
können.
-
Bei zum Beispiel einer Leseanforderung (auch als Ladeanforderung bekannt) kann bei
Auftreten eines Cache-Miss die Anforderung nicht abgearbeitet werden, weshalb diese an
eine andere, größere Speichervorrichtung weitergeleitet wird, während bei Auftreten eines
Cache-Hit die Leseanforderung abgearbeitet wird. Bei einer Schreibanforderung wird bei
Auftreten eines Cache-Hit die Schreibtransaktion abgearbeitet, indem Daten in die
ausgewählte Cache-Line 410 geschrieben und der im entsprechenden Cache-Tag 412
gespeicherte Zustandswert, wenn nötig, aktualisiert wird, um anzuzeigen, daß in der Cache-
Line 412 modifizierte Daten gespeichert sind.
-
Tritt beim Abarbeiten einer Schreibanforderung ein Cache-Miss auf, und ist das
entsprechende Cache-Tag 412 ungültig, dann können Daten in die entsprechende Cache-Line
410 geschrieben und im Cache-Tag ein neuer Zustandswert gespeichert werden. Tritt jedoch
für eine Schreibanforderung ein Cache-Miss auf, und der im entsprechenden Cache-Tag 412
gespeicherte Zustandswert zeigt an, daß die Cache-Line sowohl gültig als auch modifiziert ist,
dann wird der gegenwärtig in der Cache-Line gespeicherte Datenblock entfernt und muß in
den Hauptspeicher zurückgeschrieben werden.
-
Die Schritte "Cache-Tag-Einsicht" und "Vergleichen" nehmen üblicherweise einen
oder zwei Taktzyklen des Datenprozessors in Anspruch, in Abhängigkeit von der konkreten
Gestaltung der Cacheschaltung 414. Wird die Cache-Zugriffsanforderung auf den Cache-
Speicher 400 durch den Datenprozessor 402 initiiert, dann sind die Schritte "Cache-Tag-
Einsicht" und "Vergleichen" notwendig. Ein Zugriff auf den Cache-Speicher durch den
Datenprozessor 402 ist erheblich schneller als ein Zugriff auf den Hauptspeicher, selbst mit
den Verzögerungen, die durch die Schritte "Cache-Tag-Einsicht" und "Vergleichen"
verursacht werden.
-
Wird jedoch eine Cache-Speicherzugriffsanforderung auf den Cache 414 von
einer anderen Datenprozessorvorrichtung initiiert, so entstehen mehrere zusätzliche
Verzögerungen, durch die die Speicherzugriffszeit weit näher an der Zugriffszeit auf den
Hauptspeicher liegt, als an der üblichen Zugriffszeit auf einen Cache-Speicher. Die
vorliegende Erfindung stellt eine Zweitor-Cachesteuerungsschaltung dar, die die Zugriffszeit
auf einen entfernt gelegenen Cache-Speicher um einen oder zwei Taktzyklen verringert,
indem das Vergleichen der Cache-Tags beim Zugreifen auf den Cache-Speicher eliminiert
wird, sofern durch die entfernt gelegene zugreifende Vorrichtung gewährleistet ist, daß der
durch die Transaktion angeforderte Datenblock gegenwärtig im Cache-Speicher gespeichert
ist. Kann die entfernt gelegene zugreifende Vorrichtung dies nicht gewährleisten, so
verwendet der Cache-Controller das Standard-Zugriffsverfahren auf den Cache-Speicher. Die
entfernt gelegene zugreifende Vorrichtung zeigt an, ob diese Gewährleistung besteht, indem
sie bei jeder Cache-Speicher-Zugriffsanforderung ein bestimmtes Cache-Zugriffs-
Betriebsarten-Flag setzt.
Zusammenfassung der Erfindung
-
Die Erfindung ist in Anspruch 1 definiert.
-
Zusammenfassend handelt es sich bei der vorliegenden Erfindung um ein
Multiprozessor-Computersystem mit mehreren Subsystemen und einem an einen System-
Controller gekoppelten Hauptspeicher. Ein Verbindungsmodul stellt entsprechend den vom
System-Controller empfangenen Verbindungs-Steuersignalen eine Verbindung zwischen
Hauptspeicher und Subsystemen her.
-
Mindestens zwei der Subsysteme sind Datenprozessoren, von denen jeder einen
entsprechenden Cache-Speicher hat, in dem verschiedene Datenblocks sowie ein Satz Master-
Cache-Tags (Etags) gespeichert sind, einschließlich eines Cache-Tags für jeden im Cache-
Speicher gespeicherten Datenblock.
-
Jeder Datenprozessor hat ein Master-Interface, um Speichertransaktionsanforderungen
an den System-Controller zu versenden, und um vom System-Controller den Speicher-
Transaktionsanforderungen anderer Datenprozessoren entsprechende
Cachezugriffsanforderungen zu empfangen.
-
Der System-Controller hat ein entsprechendes an jeden Datenprozessor gekoppeltes
Interface zum Empfangen und Versenden von Speicherzugriffsanforderungen von den und an
die entsprechenden Datenprozessoren.
-
Die Cache-Speicher aller Datenprozessoren haben eine
Zweitor-Cachesteuerungsschaltung zum Empfangen von Zugriffsanforderungen. Ein erster Port empfängt
Zugriffsanforderungen vom entsprechenden Datenprozessor, und ein zweiter Port empfängt
Zugriffsanforderungen vom System-Controller. Alle Zugriffsanforderungen an den Cache-
Speicher beinhalten einen Adreßwert, während Zugriffsanforderungen vom System-
Controller auch ein Betriebsarten-Flag beinhalten.
-
Ein Komparator im Cache-Controller verarbeitet den in jeder Zugriffsanforderung
enthaltenen Adreßwert und generiert ein Hit/Miss-Signal, das anzeigt, ob der dem Adreßwert
entsprechende Datenblock im Cache-Speicher gespeichert ist.
-
Der Cache-Controller beinhaltet ferner eine Zugriffsschaltung mit zwei Betriebsarten,
einschließlich einer ersten Standard-Betriebsart, in der dem Schreib-/Lesezugriff auf den
Cache-Speicher das Generieren des Hit/Miss-Signal durch den Komparator in Reaktion auf
den Adreßwert der Zugriffsanforderung vorangeht, und einer zweiten beschleunigten
Betriebsart, in der der Schreib-/Lesezugriff auf den Cache-Speicher initiiert wird, ohne daß
darauf gewartet werden muß, daß der Komparator den Adreßwert der Zugriffsanforderung
verarbeitet. Die Zugriffsschaltung verarbeitet in der ersten Betriebsart alle
Zugriffsanforderungen des an den Cache-Speicher gekoppelten Datenprozessors sowie
Zugriffsanforderungen des System-Controllers, wenn das Betriebsarten-Flag einen ersten
Wert hat. In der zweiten Betriebsart verarbeitet es Zugriffsanforderungen des System-
Controllers, wenn das Betriebsarten-Flag einen zweiten Wert hat, der sich vom ersten Wert
unterscheidet.
Kurzbeschreibung der Figuren
-
Weitere Gegenstände und Merkmale der Erfindung gehen in Verbindung mit den
Figuren aus der nachfolgenden ausführlichen Beschreibung und den Ansprüchen hervor. Die
Figuren zeigen:
-
Fig. 1 ein Blockschaltbild eines Computersystems, das die vorliegende Erfindung
beinhaltet,
-
Fig. 2 ein Blockschaltbild eines Computersystems mit der Adreßbus- und
Datenbuskonfiguration einer Ausführung der Erfindung,
-
Fig. 3 die Signalleitungen eines Ports gemäß einer bevorzugten
Ausführung der Erfindung,
-
Fig. 4 ein Blockschaltbild der Schnittstellen und Port-ID-Register in einem Port
gemäß einer bevorzugten Ausführung der Erfindung,
-
Fig. 5 ein Blockschaltbild eines Computersystems, das die vorliegende Erfindung
beinhaltet, in dem die Anforderungs- und Datenwarteschlangen während einer
Datentransferaktion dargestellt sind,
-
Fig. 6 ein Blockschaltbild des System-Controller-Konfigurationsregisters in einer
bevorzugten Ausführung der vorliegenden Erfindung,
-
Fig. 7 ein Blockschaltbild eines cachenden UPA-Master-Ports und des Cache-
Controllers im entsprechenden UPA-Modul,
-
Fig. 8 einen vereinfachten Ablaufplan typischer
Schreib-/Lese-Datenflußtransaktionen in einer bevorzugten Ausführung der vorliegenden Erfindung,
-
Fig. 9 den Rückschreibe-Puffer und die temporären Dtag-Puffer für das abwickeln
kohärenter Cache-Rückschreibe-Operationen,
-
Fig. 10 das Datenpaketformat für ein Anforderungspaket für eine kohärente
Speichertransaktion,
-
Fig. 11 ein Blockschaltbild für einen standardgemäßen Cache-Speicher aus dem Stand
der Technik und einen Cache-Speicher-Controller,
-
Fig. 12 ein Blockschaltbild eines Multiprozessorsystems, in dem die Datenprozessoren
den Cache-Speicher-Controller der vorliegenden Erfindung beinhalten.
Beschreibung der bevorzugten Ausführungsform
Terminologieverzeichnis:
-
Cachekohärenz: Aufrechterhaltung der Übereinstimmung sämtlicher Kopien aller
Datenblöcke.
-
Tag: Ein Tag ist eine Aufzeichnung in einem Cache-Index, die den Zustand
einer Cache-Line anzeigt und in der die höherwertigen Adreßbits der
Adresse des in der Cache-Line gespeicherten Datenblocks gespeichert
sind.
-
Etag: Primäranordnung von Cache-Tags für einen Cache-Speicher. Das
Datenprozessormodul in einem UPA-Port greift auf die Etag-
Anordnung zu und aktualisiert diese.
-
Dtag: Im System-Controller abgelegte Kopie der Cache-Tag-Anordnung.
-
Interconnect: Anordnung von Systemkomponenten, die Datenprozessoren, Ein-
(Verbindungsmodul)Ausgabe-Prozessoren und deren Ports miteinander verbinden. In der
bevorzugten Ausführung der Erfindung beinhaltet das "Interconnect"
den System-Controller 110, das Verbindungsmodul 112, die
Datenbusse 116, die Adreßbusse 114 und die Antwortbusse 120 (für
S_REPLYs) und 122 (für P-REPLYs).
-
Victim: Aus einer Cache-Line entfernter Datenblock.
-
Dirty Victim: Datenblock, der vom entsprechenden Datenprozessor aktualisiert
wurde, bevor er im Cache durch einen anderen Datenblock entfernt
wurde. Dirty Victims müssen für gewöhnlich in den Hauptspeicher
zurückgeschrieben werden, in der vorliegenden Erfindung kann jedoch
auf das Zurückschreiben verzichtet werden, wenn der selbe Datenblock
vor Aktivierung der Rückschreibe-Transaktion von einem anderen
Datenprozessor ungültig gemacht wird.
-
Line: Speichereinheit in einem Cache-Speicher, in der ein einzelner
Datenblock gespeichert ist.
-
Ungültig machen: (Invalidierung) Verändern des Zustands einer Cache-Line zu "ungültig" durch
Schreiben des entsprechenden Zustandswerts in das Tag der Cache-
Line.
-
Master-Klasse: Unabhängige Anforderungs-Warteschlange im UPA-Port für einen
Datenprozessor. Ein Datenprozessor mit einem UPA-Port mit K
Master-Klassen kann in jeder der K Master-Klassen
Transaktionsanforderungen ausgeben. Jede Master-Klasse hat ihren
eigenen Anforderungs-FIFO-Puffer für die Ausgabe von
Transaktionsanforderungen an den System-Controller sowie ihren
eigenen individuellen Eingangsdatenpuffer für ankommende
Datenpakete als Rückmeldung auf Transaktionsanforderungen und
ihren eigenen Ausgangsdatenpuffer für das Speichern von zu
übertragenden Datenpaketen.
-
Zurückschreiben: (Writeback) Kopieren modifizierter Daten von einem Cache-Speicher in den
Hauptspeicher.
Abkürzungsverzeichnis:
-
DVMA: Direct virtual memory access (wie DMA, hier direkter Speicherzugriff)
-
DVP: Dirty Victim pending
-
I/O: Ein-/Ausgabe
-
IVP: Empfehlung zum Ungültigmachen
-
MOESI: die 5 Etag-Zustände: exclusive modified (M), shared modified (O), exclusive
clean (E), shared clean (S), invalid (I)
-
MOSI: die 4 Dtag-Zustände: exclusive and potentially modified (M), shared modified
(O), shared clean (S), invalid (I)
-
NDP: kein Daten-Tag vorhanden
-
PA[xxx]: physikalische Adresse [xxx]
-
SC: System-Controller
-
UPA: Universelle Port-Architektur
-
In Fig. 1 ist ein Multiprozessor-Computersystem 100 dargestellt, in dem die
Computerarchitektur der vorliegenden Erfindung verwirklicht ist. Das Multiprozessor-
Computersystem 100 beinhaltet eine Anordnung von "UPA-Modulen". Die UPA-Module 102
beinhalten Datenprozessoren und Slave-Vorrichtungen wie Ein-/Ausgabeelemente und
ähnliches. Jedes UPA-Modul 102 hat einen Port 104, hier UPA-Port genannt, wobei "UPA"
"universelle Port-Architektur" bedeutet. Zur Vereinfachung werden UPA-Module und ihre
entsprechenden Ports häufig mit dem Sammelbegriff "Ports" oder "UPA-Ports" bezeichnet,
wobei davon ausgegangen wird, daß der betreffende Port oder UPA-Port sowohl einen Port
als auch das entsprechende UPA-Modul beinhaltet.
-
Das System 100 enthält weiter einen Hauptspeicher 108, der in mehrere
Speicherbanken 109 Bank&sub0; bis Bankm unterteilt werden kann, einen System-Controller 110 und ein
Verbindungsmodul 112 für die Verbindung zwischen den Ports 104 und dem Hauptspeicher
108. Das Verbindungsmodul 112 kann, gesteuert vom Datenweg-Installationssignal des
System-Controllers 110, einen Datenweg zwischen einem beliebigen Port 104 und jedem
beliebigen anderen Port 104 bilden, oder zwischen einem beliebigen Port 104 und jeder
beliebigen Speicherbank 109. Das Verbindungsmodul 112 kann einfach ein einzelner
gemeinsamer Datenbus mit ansteuerbaren Zugriffsports für jeden UPA-Port und einem
Speichermodul sein, oder es kann ein etwas komplexerer Kreuzschienenschalter mit m Ports
für m Speicherbanken und n Ports für n UPA-Ports sein, oder eine Kombination aus beiden.
Die vorliegende Erfindung ist nicht von der Art des verwendeten Verbindungsmoduls 112
abhängig, somit kann die vorliegende Erfindung mit vielen verschiedenen
Verbindungsmodul-Konfigurationen angewendet werden.
-
Ein UPA-Port 104 ist mit dem Verbindungsmodul 112 und dem System-Controller
110 durch einen paketvermittelten Adreßbus 114 bzw. einen paketvermittelten Datenbus 116
verbunden, die beide unabhängig voneinander funktionieren. Ein UPA-Modul koppelt sich
logisch an einen UPA-Port an. Das UPA-Modul 102 kann einen Datenprozessor, einen Ein-
/Ausgabecontroller mit Schnittstellen zu Ein-/Ausgabebussen oder einen Bildspeicher-Puffer
enthalten. Die UPA-Verbindungsarchitektur der bevorzugten Ausführung unterstütz bis zu 32
UPA-Ports sowie mehrere Adreß- und Datenbusse zur Verbindung. Bis zu 4 UPA-Ports 104
können den selben Adreßbus 114 teilen, wobei der Zugang durch ein Buszuteilungsprotokoll
geregelt wird.
-
Der System-Controller 110 ist eine zentrale Steuerschaltung, die folgende Funktionen
ausübt:
-
- Kohärenzkontrolle;
-
- Steuerung von Speicher und Datenweg; und
-
- Ansteuern der riegelartigen Konnektivität für mehrere Adreßbusse.
-
Der System-Controller 110 steuert das Verbindungsmodul 112 und koordiniert den
Datentransfer zwischen zwei UPA-Ports 104 oder zwischen einem UPA-Port 104 und dem
Speicher 108. Die Architektur der vorliegenden Erfindung unterstützt eine beliebige Anzahl
von Speicherbanken 109. Der System-Controller 110 steuert die zeitliche Koordination des
Speicherzugriffs in Verbindung mit der Datenwegvergabe, um eine maximale Nutzung beider
Ressourcen zu gewährleisten.
-
Der System-Controller 110, das Verbindungsmodul 112 und der Speicher 108
befinden sich in der "Verbindungs-Domäne" und sind durch ihre entsprechenden UPA-Ports
104 an UPA-Module 102 gekoppelt. Die Verbindungs-Domäne ist völlig synchron mit einem
zentral verteilten Systemtaktsignal, das von einem Systemtaktgeber 118 generiert und auch an
die UPA-Module 104 ausgegeben wird. Wenn dies gewünscht ist kann jedes UPA-Modul 102
seinen eigenen internen Taktgeber mit dem Verbindungstaktgeber des Systems
synchronisieren. Wenn nicht anders angegeben wird, wenn in dieser Schrift von "Taktsignalen" die
Rede ist, auf den Systemtaktgeber Bezug genommen.
-
Jeder UPA-Adreßbus 114 ist ein 36-Bit bidirektionaler paketvermittelter
Anforderungsbus mit 1-Bit ungerader Parität. Er überträgt die Adreßbits PA[40 : 4] mit einem
41-Bit physikalischen Adreßraum sowie die Transaktions-Identifikations-Information.
-
Wie in Fig. 1 und 2 gezeigt kann es in dem System mehrere Adreßbusse 114 geben,
mit bis zu 4 UPA-Ports 104 auf jedem Adreßbus 114. Die genaue Anzahl der Adreßbusse
variiert und ist generell von den Geschwindigkeitsanforderungen des Systems abhängig. Da
das Erhöhen der Anzahl der Ports auf einem Adreßbus 114 die Signalübertragung über diesen
Adreßbus verlangsamt, wird die maximale Anzahl der Ports je Adreßbus durch die für den
Adreßbus erforderliche Geschwindigkeit der Signalübertragung bestimmt.
-
Die Datenwegschaltung (d. h. das Verbindungsmodul 112) und die Adreßbusse 114
sind (voneinander) unabhängig skalierbar. Dadurch ist es möglich, die Anzahl der Adreßbusse
für eine bestimmte Anzahl von Prozessoren zu erhöhen oder zu verringern und dadurch die
Geschwindigkeits-/Kosten-Abstimmung der Übertragung von Transaktionsanforderungen
über die Adreßbusse zu optimieren, und zwar vollkommen unabhängig von Entscheidungen
bezüglich der Geschwindigkeits-/Kosten-Abstimmung bezüglich der Konstruktion des
Verbindungsmoduls 112.
-
In Fig. 3 ist die Gesamtheit der Signale dargestellt, die von einem UPA-Port mit allen
vier Schnittstellen (siehe unten) gemäß der bevorzugten Ausführung der Erfindung
empfangen und gesendet werden. Tabelle 1 ist eine Kurzbeschreibung jedes der in Fig. 3
dargestellten Signale.
Tabelle 1
Definition der UPA-Port-Schnittstellensignale
Signal Beschreibung
Datenbussignale
-
UPA_Databus[128] 128-Bit Datenbus. In Abhängigkeit von der
erforderlichen Geschwindigkeit und der verwendeten
Bustechnologie kann ein System einen 128-Bit Datenbus
für jeden UPA-Port haben, oder jeder Datenbus kann von
mehreren Ports genutzt werden.
-
UPA_ECC[16] Bus zum Übertragen von Fehlerkorrekturcodes (Error
Correction Code). UPA ECC< 15 : 8> überträgt den ECC
für UPA Databus< 127 : 64> . UPA ECC< 7 : 0> überträgt
den ECC für UPA Databus< 63 : 0> .
-
UPA_ECC_Valid ECC gültig. Einseitig gerichtetes Signal vom System-
Controller an jeden UPA-Port, wird vom System-
Controller ausgegeben um anzuzeigen, ob der ECC für
die Daten auf dem Datenbus gültig ist.
Adreßbussignale
-
UPA_Addressbus[36] 36-Bit paketvermittelter Transaktionsanforderungsbus.
Siehe Paketformat in Fig. 9A, 9B und 9C.
-
UPA_Req_In[3] Buszuteilungsanforderungsleitungen für bis zu 3 weitere
UPA-Ports, die evtl. diesen UPA Addressbus teilen.
-
UPA_Req_Out Buszuteilungsanforderung von diesem UPA-Port.
-
UPA_SC_Req_In Buszuteilungsanforderung vom System-Controller.
-
UPA_Arb_Reset_L Rücksetzen der Buszuteilung, wird gleichzeitig mit
-
UPA_Reset_L ausgegeben.
-
UPA_AddrValid Zwischen dem System-Controller und jedem UPA-Port
gibt es eine separate, bidirektionale Leitung für das
Signal "Adresse gültig". Angesteuert wird sie von dem
Port, der die Buszuteilung erhält, oder vom System-
Controller, wenn dieser den Adreßbus ansteuert.
-
UPA_Data_Stall Datenstausignal, wird vom System-Controller an jeden
UPA-Port ausgegeben um während der Übertragung
eines Datenpakets anzuzeigen, ob es zwischen den Quad-
Wörtern eines Datenpakets einen Datenstau gibt.
Antwortsignale
-
UPA_P_Reply[5] Antwortpaket des Ports, wird von einem UPA-Port direkt
an den System-Controller ausgegeben. Jedem UPA-Port
ist ein UPA_P_Reply-Bus zugewiesen.
-
UPA_S_Reply[6] Antwortpaket des System-Controllers, wird vom System-
Controller direkt an den UPA-Port ausgegeben. Jedem
UPA-Port ist ein UPA_S_Reply-Bus zugewiesen.
Diverse Signale
-
UPA_PortID[5] Identifikationssignal des festverdrahteten 5-Bit-UPA-Ports.
-
UPA_Reset_L Rücksetzen. Wird vom System-Controller nach dem Einschalten
sowie bei jedem schwerwiegenden Rücksetzen des Systems
ausgegeben.
-
UPA_Sys_Clk[2] Differentialer UPA-Systemtakt, wird vom Systemtaktgeber an
alle UPA-Ports ausgegeben.
-
UPA_CPU_Clk[2] Differentialer Prozessortakt, wird von der Systemtaktsteuerung
nur an die UPA-Ports von Prozessoren ausgegeben.
-
UPA_Speed[3] Nur für die UPA-Ports der Prozessoren, in diesem
festverdrahteten 3-Bit Signal ist die maximale Geschwindigkeit,
mit der der UPA-Port fungieren kann, kodiert.
-
UPA_IO_Speed Wird nur von den Ein-/Ausgabe-UPA-Ports verwendet, in
diesem Signal ist die maximale Geschwindigkeit, mit der der
UPA-Port fungieren kann, kodiert.
-
UPA_Ratio Nur für die UPA-Ports der Prozessoren, in diesem Signal ist das
Verhältnis des Systemtakts zum Prozessortakt kodiert, es wird
vom Prozessor genutzt, um bei Verwendung synchroner interner
Schnittstellen Systemtakt und Prozessortakt intern zu
synchronisieren.
-
UPA_JTAG[5] JTAG-Abtaststeuersignale, TDI, TMS, TCLK, TRST L und
TDO. TDO wird vom UPA-Port ausgegeben, die anderen sind
Eingangssignale.
-
UPA_Slave_Int_L Interrupt, für UPA-Ports, die nur als Slave fungieren. Diese
Leitung geht vom UPA-Port an den System-Controller.
-
UPA_XIR_L XIR-Rücksetzsignal, wird vom System-Controller ausgegeben,
um ein XIR-Rücksetzen zu signalisieren.
-
Ein gültiges Paket auf dem UPA-Adreßbus 114 wird vom Absender (d. h. dem UPA-
Port 104 oder dem System-Controller 110) identifiziert, indem er das Signal UPA_Addr_valid
ausgibt.
-
Der System-Controller 110 ist mit jedem UPA-Adreßbus 114 im System 100
verbunden. Alle UPA-Adreßbusse 114 werden den UPA-Ports 104 und dem System-
Controller 110 über ein Buszuteilungsprotokoll zugewiesen.
-
UPA-Ports kommunizieren nicht direkt mit anderen UPA-Ports über einen
gemeinsamen Adreßbus 114. Stattdessen wird, wenn ein anfordernder UPA-Port ein
Anforderungspaket generiert und damit den Zugriff auf einen angesteuerten UPA-Port
anfragt, vom System-Controller 110 ein Slave-Zugriff auf den angeforderten UPA-Port
gewährt, indem das Anforderungspaket zurückgeschickt und der Ziel-UPA-Port durch das
Signal UPA-Addr_valid markiert wird.
-
Ferner wird der UPA-Adreßbus nicht von einem UPA-Port "abgehört", um die
Cachekohärenz aufrechtzuerhalten. Der System-Controller 110 hört den UPA-Adreßbus für
die UPA-Ports ab, deren UPA-Module einen Cache-Speicher beinhalten, der ein Schreib-
Invalidierungs-Cachekohärenzprotokoll wie unten beschrieben verwendet.
-
Die mit einem UPA-Port 104 verbundenen UPA-Adreßbusse 114 und UPA-
Datenbusse 116 sind voneinander unabhängig. Eine Adresse wird mit ihren Daten nach den
unten beschriebenen Regeln assoziiert.
-
Der UPA-Datenbus ist ein bidirektionaler 128-Bit Quad-Wort Datenbus, plus 16
zusätzlicher EEC- (Fehlerkorrekturcode-) Bits. Ein "Wort" ist hier definiert als eine 32-Bit, 4-
Byte Dateneinheit. Ein Quad-Wort besteht aus 4 Wörtern oder 16 Bytes. In manchen
Ausführungen können alle oder manche der Datenbusse 116 im System 100 bidirektionale 64-
Bit 2-Wort bidirektionale Datenbusse sein, plus 8 Zusatzbits für den Fehlerkorrekturcode. Die
ECC-Bits werden für den 128-Bit breiten Datenbus in zwei 8-Bit Hälften unterteilt. Obwohl
der 64-Bit breite UPA-Datenbus halb so viele Signalleitungen hat, kann er die gleiche Anzahl
von Bytes pro Transaktion übertragen wie der 128-Bit breite UPA-Datenbus, jedoch in der
doppelten Anzahl von Taktzyklen. In der bevorzugten Ausführung ist die kleinste Einheit der
kohärenten Datenübertragung 64 Byte, wobei vier Übertragungen zu 16 Bytes während 4
aufeinanderfolgender System-Taktzyklen über den 128-Bit UPA-Datenbus erforderlich sind.
-
Ein als "Master" fungierender UPA-Port, auch UPA-Master-Port genannt, ist hier
definiert als ein Port, der eine Datenübertragungstransaktion initiieren kann. Alle UPA-
Module von Datenprozessoren müssen einen als Master fungierendes UPA-Port 104 haben.
-
Es ist zu beachten, daß Grafikvorrichtungen, die über manche Fähigkeiten von
Datenprozessoren verfügen können, üblicherweise nur eine Slave-Schnittstelle haben. Slave-
Schnittstellen sind nachfolgend beschrieben. In dieser Schrift ist ein "Datenprozessor"
definiert als programmierbarer Computer oder programmierbare
Datenverarbeitungsvorrichtung (z. B. ein Mikroprozessor), der/die Daten sowohl von einem Hauptspeicher lesen
als auch in einen Hauptspeicher schreiben kann. Ein "Datenprozessor" ist meistens, aber nicht
immer, mit einem Cache-Speicher verbunden. Ein Ein-/Ausgabe-Controller ist zum Beispiel
ein Datenprozessor, und sein UPA-Port ist ein Master-UPA-Port. Oft ist es jedoch so, daß ein
Ein-/Ausgabe-Controller keinen Cache-Speicher hat (oder zumindest keinen Cache-Speicher,
der Daten im kohärenten Bereich speichern kann).
-
Ein cachender UPA-Master-Port ist ein Master-UPA-Port für einen Datenprozessor,
der ebenfalls einen kohärenten Cache hat. Der cachende UPA-Master-Port ist am
Cachekohärenzprotokoll beteiligt.
-
Ein "Slave"-UPA-Port ist hier definiert als unfähig, Datentransfer-Transaktionen zu
initiieren, sondern bei solchen Transaktionen als Empfänger zu fungieren. Ein Slave-Port
reagiert auf Anforderungen des System-Controllers. Der einem Slave-Ports zugeordnete
Adreßraum ist für programmierte Ein-/Ausgabeoperationen vorgesehen. Ein "Slave-Port" in
einem Master-UPA-Port (d. h. eine Slave-Schnittstelle in einem Master-UPA-Port) wickelt
auch Rückkopier-Anforderungen für Cache-Blöcke sowie Interrupt-Transaktionen im UPA-
Port eines Datenprozessors ab.
-
Jede 8-Bit-Gruppe des ECC überträgt den Shigeo Kaneda 64-Bit SEC-DED-S4ED
Code. Das Interconnect generiert weder den ECC, noch überprüft es ihn. Jeder Daten
ausgebende UPA-Port generiert die entsprechenden ECC-Bits, und der die Daten empfangende
UPA-Port überprüft die ECC-Bits. UPA-Ports mit der Fähigkeit, als Master zu fungieren,
unterstützen den ECC. Nur als Slave fungierende UPA-Ports mit einem Bildspeicher-Puffer
müssen den ECC nicht unterstützen (siehe UPA_ECC_Valid - Signal).
-
Der UPA-Datenbus 116 ist kein modulübergreifend genutzter gemeinsamer Datenbus.
Wie in Fig. 1 und 2 dargestellt kann das System mehr als einen UPA-Datenbus 116 enthalten,
die genaue Anzahl hängt von der konkreten Ausführung ab. Daten werden auf dem 128-Bit
breiten UPA-Datenbus immer in Einheiten von 16 Byte pro Taktzyklus übertragen, und auf
dem 64-Bit breiten UPA-Datenbus in Einheiten von 16 Byte pro zwei Taktzyklen.
-
Die Größe jeder Cache-Line beträgt in der bevorzugten Ausführung 64 Byte, oder
sechzehn 32-Bit-Wörter. Wie im folgenden noch erläutert werden wird ist 64 Byte die
kleinste Datenübertragungs-Einheit für alle Transaktionen, die mit dem Übertragen von
gecachten Daten zusammenhängen. Daraus folgt, daß jedes Datenpaket aus gecachten Daten,
das über das Interconnect übertragen wird, aus 64 Bytes besteht. Bei der Übertragung nicht
gecachter Daten können 1 bis 16 Byte in einem einzelnen Quad-Wort übertragen werden,
gekennzeichnet durch eine 16-Bit Bytemaske, die anzeigt, welche Bytes im Quad-Wort die zu
übertragenden Daten enthalten.
-
Der System-Controller 110 teilt durch ein Signal, das hier S_REPLY heißt, eine
Datenübertragung auf einem UPA-Datenbus 116 zu. Für die Übertragung von Blöcken wird,
falls aufeinanderfolgende Quad-Wörter nicht in aufeinanderfolgenden Taktzyklen aus dem
Speicher gelesen oder in diesen geschrieben werden können, das Signal UPA_Data_Stall vom
System-Controller 110 an den UPA-Port ausgegeben.
-
Für kohärente Blocklese- und Rückkopier-Transaktionen von 64-Byte Datenblöcken
wird das Quad-Wort (16 Bytes), das die physikalischen Adreßbits PA[5 : 4] trägt, zuerst
abgeschickt, und die nachfolgenden Quad-Wörter werden in der in Tabelle 2 dargestellten
Reihenfolge übertragen. Das die Adresse tragende Quad-Wort wird zuerst übertragen, so daß
der anfordernde Datenprozessor das die Adresse tragende Quad-Wort empfangen und mit
dessen Verarbeitung beginnen kann, bevor er das letzte Quad-Wort aus dem entsprechenden
Datenblock empfangen hat. Verzögerungen aufgrund der Cache-Aktualisierungs-Transaktion
können auf diese Weise verringert werden. Das Lesen und Schreiben von nicht gecachten
Datenblöcken der Größe 64 Byte ist immer auf den Grenzwert 64 Byte für die Blockgröße
ausgerichtet (PA[5 : 4] = 0 · 0).
-
Es ist zu bemerken, daß diese Datenpakete der Größe 64 Byte ohne eine angehängte
Adresse, ein Adreß-Tag oder Transaktions-Tag verschickt werden. Die Daten und
Informationen zur Adresse werden davon getrennt über unabhängige Busse übertragen. Dieser
Ansatz ist effizient, um jedoch eingehende Datenpakete mit Cache-Miss Datenanforderungen
abzugleichen, muß eine bestimmte Reihenfolge eingehalten werden: Die Reihenfolge, in der
Datenpakete an einen UPA-Port übertragen werden, muß die gleiche sein wie die der
Übertragung der entsprechenden Anforderungen innerhalb einer Master-Klasse. (Bei
Datenanforderungen in verschiedenen Master-Klassen sind an die Reihenfolge keine
Bedingungen geknüpft.) Wird diese Bedingung eingehalten, dann muß jedes eingehende
Datenpaket die Antwort auf die am längsten anstehende Cache-Miss Transaktionsanforderung
für die entsprechende Master-Klasse sein.
Tabelle 2
Anforderungs- und Antwortnachrichten
-
Transaktionen werden durch "Anforderungs"-Nachrichten initiiert und nach Erhalt
einer "Antwort"-Nachricht ausgeführt. Alle Anforderungen von UPA-Ports sind hier mit
P_REQ gekennzeichnet, was für "Port-Anforderung" ("Port Request") steht. Eine Port-
Anforderung wird über den Adreßbus 114 des UPA-Ports übertragen. Wird der Adreßbus 114
von mehr als einem Port genutzt, dann überträgt der anfordernde Port seine Anforderung erst,
nachdem er in der Buszuteilung an der Reihe ist.
-
Jede Portanforderung wird vom System-Controller 110 durch eine hier als S_REPLY
bezeichnete Antwortnachricht bestätigt. Es gibt einen dafür bestimmten Punkt-zu-Punkt 5-Bit
System-Antwortbus, den S_REPLY-Bus 120, für jeden UPA-Port, über den einseitig gerichtet
5-Bit Antwortnachrichten vom System-Controller 110 an jeden UPA-Port gesendet werden.
Der System-Controller 110 setzt über den S_REPLY-Bus 120 einen Antwortcode ab, um den
Eingang einer Transaktionsanforderung zu bestätigen, und um das Aussenden und Übertragen
von Daten auf den bzw. dem UPA-Datenbus 116 zu koordinieren. Konkret generiert der
System-Controller 110 eine Nachricht S_REPLY als Antwort auf eine P_REQ entweder dann,
wenn der System-Controller 110 bereit ist, den für die angeforderte Transaktion nötigen
Datenweg aufzubauen, oder, falls die Transaktion keinen Datentransfer erfordert (z. B. wenn
eine Ungültigmachung angefordert ist) nachdem die angeforderte Transaktion ausgeführt ist.
Die Nachricht S_REPLY wird vom System-Controller praktisch gleichzeitig mit dem
Absenden der entsprechenden Setup-Signale an das Verbindungsmodul 112 generiert.
-
Jede vom System-Controller 110 initiierte Transaktion wird initiiert durch das
Absenden einer Nachricht S_REQ (d. h. der Anforderung des System-Controllers) über den
Adreßbus 114, der an den UPA-Port 104, an den die Anforderung gerichtet ist, angeschlossen
ist. Vom System-Controller 110 initiierte Transaktionen sind in der Regel "verschachtelte
Transaktionen", die vom System-Controller 110 als Antwort auf eine
Transaktionsanforderung eines UPA-Ports ausgeführt werden. Zum Beispiel kann eine bestimmte von einem
UPA-Port angeforderte Speichertransaktion es erfordern, daß alle Cache-Einträge anderer
UPA-Ports für den angeforderten Datenblock ungültig gemacht werden, bevor der System-
Controller den angeforderten Datenblock an den Cache des anfordernden UPA-Ports
übertragen kann. Das Ungültig machen der Caches wird vom System-Controller ausgeführt,
indem Transaktionsanforderungen an alle UPA-Ports versendet werden, in deren Caches der
angeforderte Datenblock gespeichert ist.
-
Jeder UPA-Port 104 hat einen bestimmten Punkt-zu-Punkt 5-Bit Port-Antwort-Bus,
P_REPLY, 122, der von diesem Port genutzt wird, um Anforderungen des System-Controllers
zu bestätigen.
-
Alle Anforderungen des System-Controllers werden an den "Slave-Port" Bereich des
Empfänger-UPA-Ports verschickt. Zur Bestätigung einer vom System-Controller 110
empfangenen Transaktion verschickt der Slave-Port des UPA-Ports über den P_REPLY-Bus
122 einen Antwortcode, der anzeigt: bei einer Leseanforderung: daß die angeforderten Daten
bereit stehen; bei einer Schreibanforderung: daß die übertragenen Daten angenommen
wurden; bei einer Invalidierungsanforderung: daß die Cache-Invalidierung ausgeführt ist; und
bei Interrupt-Anforderungen: daß der Interrupt abgearbeitet wurde.
-
Der System-Controller 110 löst in Reaktion auf die vom UPA-Slave-Port erhaltene
Bestätigungsnachricht P_REPLY die Übertragung seiner Nachricht S_REPLY an den
anfordernden UPA-Port aus.
Cache-Speicher, Tags und Snoop-Bus
-
Wie in Fig. 1 dargestellt gibt es für jedes UPA-Modul 102, das einen Cache-Speicher
130 beinhaltet, einen Primär-Cache-Index 132 mit einer Anordnung von Pimär-Cache-Tags,
genannt Etags. In den meisten Ausführungen ist der Cache-Speicher 130 ein "Sekundär-
Cache" oder ein "Tertiär-Cache", da im UPA-Modul 102 des Datenprozessors 178 (siehe Fig.
4) üblicherweise ein Primär- oder Sekundär-Cache integriert ist. Duplikate von Cache-Tags
werden lediglich für den äußersten kohärenten Direct-Mapped-Cache eines jeden
Datenprozessors beibehalten, alle anderen Caches niedrigerer Ordnung werden als zum UPA-
Port gehörig betrachtet und durch den UPA-Port durch perfekte Integration kohärent gehalten.
-
Für jede Line des Cache-Speichers 130 gibt es ein Etag, und in jeder Line des Caches
ist ein 64-Byte (16-Wort) Datenblock gespeichert. In der bevorzugten Ausführung ist in
jedem Etag der Tag-Zustand und ein Satz von Adreßbits gespeichert, die die Adresse des in
der Cache-Line gespeicherten 64-Byte Blocks markieren.
-
Wie eben erwähnt beträgt die Größe eines Cache-Blocks 64 Byte. Die Einheit der
Cachekohärenz ist ebenfalls 64 Byte. Die Caches der verschiedenen UPA-Ports können
unterschiedlich groß sein. Zudem werden in der bevorzugten Ausführung in Datenprozessoren
und Ein-/Ausgabe-UPA-Ports nur Direct-Mapped-Caches verwendet. Die Ein-/Ausgabe-
UPA-Ports können eine beliebige unter verschiedenen Strukturen von Cache-Speichern
haben. Die Unterstützung solcher Cache-Speicher Strukturen durch den System-Controller
wird durch spezielle Kopien von Tags einer gleichartigen Struktur im System-Controller
realisiert. In der bevorzugten Ausführung verfügt der Ein-/Ausgabe-UPA-Port über mehrere
vollassoziative kohärente Puffer mit einer entsprechenden Anzahl von Dtags im System-
Controller.
-
Standardgemäß hängt die Anzahl der zum Identifizieren eines Datenblocks nötigen
Adreßbits von der Größe des Cache-Speichers und des in diesen eingemappten Adreßraums
ab. Für einen Adreßraum der Größe 8 Gigabyte und einen Direct-Mapped-Cache-Speicher der
Größe 512 Kbyte werden zum Beispiel 14 Adreßbits benötigt, um den Datenblock in jeder
Line des Cache-Speichers zu markieren. Das bedeutet, daß bei einer 33-Bit Adresse PA[32 : 0]
für ein bestimmtes Byte und einer 27-Bit Adresse PA[32 : 6] für den entsprechenden 64-Byte
Datenblock, der in einem 512 Kilobyte Cache-Speicher mit 64-Byte Lines gespeichert ist, die
14 signifikantesten Adreßbits PA[32 : 19] der vollständigen Adresse des Datenblocks im
Cache-Tag gespeichert werden, um den Datenblock zu markieren, und die nächsten 13 Bits
PA[18 : 6] der Adresse des Datenblocks bestimmen, in welcher Cache-Line der Datenblock
gespeichert ist. Im System 100 mit einem 1 Terrabyte kohärenten Adreßraum PA[39 : 0] und
einem 512 Kilobyte Direct-Mapped-Cache-Speicher 130 müssen in jedem Etag die 21
signifikantesten Bits der vollständigen, in der entsprechenden Line des Cache-Speichers
gespeicherten Adresse des Datenblocks gespeichert sein.
-
Die Anzahl der im Cache-Index gespeicherten Adreßbits und damit die Größe des
Caches für jeden Master-UPA-Port wird durch die Initialisierungssoftware des Systems
bestimmt, indem die ID-Register 158 jedes UPA-Ports, wie im folgenden noch beschrieben
wird, geprüft werden.
-
Um Interferenzen zwischen Snoop-Vorgang und dem Zugreifen eines Ports auf seinen
koährenten Cache in Multiprozessor-Systemen zu vermeiden, wird ein duplikater Tag-Satz
(Dtags) 134, in dem die Etags 132 des UPA-Moduls gespiegelt sind, vom System-Controller
110 für jedes UPA-Modul aufbewahrt, das einen Cache-Speicher hat, der mit den anderen
Cache-Speichern im System 100 kohärent gehalten werden muß. Die Dtags 134 unterstützen
Direct-Mapped-Cache-Speicher. Pür jeden Etag-Eintrag gibt es einen entsprechenden Dtag-
Eintrag, so daß das Überprüfen der Dtags dem System-Controller 110 den Zustand des
entsprechenden Etags für einen Datenblock korrekt anzeigt, ohne daß der Zugriff eines
Prozessors auf seine Etags gestört werden müßte.
-
Der Snoop-Bus 140 ist ein Adreßbus, der alle relevanten physikalischen Adreßbits
PA[40 : 6] übertragen kann, die der Größe des cachebaren Adreßraums im System (Größe des
Hauptspeichers) entsprechen. Der Snoop-Bus beinhaltet ferner zwei bidirektionale Bit-
Leitungen, eine Leitung für das Match-Signal und eine Schreibsteuerungsleitung für jede
Dtag-Anordnung 134. Die beiden Bit-Leitungen übertragen beim Lesen der Dtags einen 2-
Bit-kodierten Cache-Line Zustand von der Dtag-Anordnung 134 zum System-Controller 110,
und sie übertragen einen 2-Bit-kodierten aktualisierten Cache-Line Zustand, wenn der
System-Controller 110 die Dtags aktualisiert. Die Match-Leitung für eine bestimmte Dtag-
Anordnung überträgt ein Match-Signal, das anzeigt, ob die Adresse auf dem Snoop-Bus 140
mit der Adresse eines im entsprechenden Cache-Speicher gespeicherten Datenblocks
übereinstimmt. Das Match-Signal ist dem Hit/Miss-Signal des Cache äquivalent, das vom
Primär-Cache-Index des Cache-Speichers in Reaktion auf die gleiche Adresse generiert wird,
mit dem Unterschied, daß das Match-Signal von der Dtag-Anordnung generiert wird, ohne in
den Primärindex des Cache-Speichers (d. h. die Etag-Anordnung) einzugreifen.
-
Der Snoop-Bus 140 ist vom Adreßbus 114 und dem Datenbus 116 unabhängig
skalierbar. Die Anzahl der verwendeten parallelen Snoop-Busse 140 und die Anzahl der Dtag-
Anordnungen 134, die jeden Snoop-Bus 140 beladen, kann also einzig durch die erforderliche
Geschwindigkeit der Dtag-Einsicht und der Aktualisierungs-Operationen bestimmt werden,
völlig unabhängig von den Geschwindigkeitsanforderungen des Adreßbusses 114 und des
Datenbusses 116.
Ausführung der UPA-Ports
-
Jeder UPA-Port 104 ist durch einen einmaligen 5-Bit Wert gekennzeichnet, der Port-
ID oder UPA_Port_ID (siehe Fig. 3) genannt wird. Dadurch sind in einem System 100
maximal 32 UPA-Ports möglich.
-
Wie in Fig. 4 dargestellt kann jeder UPA-Port vier funktionelle Schnittstellen haben:
ein Master-Interface 150, ein Slave-Interface 152, ein Interrupter-Interface 154 und ein
Interrupt-Handler-Interface 156. Alle UPA-Ports haben das UPA-Slave-Interface 152 und ein
Port-ID-Register 158. Das Port-ID-Register 158 wird vom UPA-Port 104 genutzt, um dem
System-Controller 110 seine Kapazitäten mitzuteilen.
-
Wie in Fig. 4 dargestellt schließen diese Schnittstellen eine Anzahl von
Warteschlangen mit ein. Das Slave-Interface 152 hat eine Warteschlange für eingehende
Anforderungen zum Empfang von Transaktionsanforderungen (PREQ, SREQ), Interrupt-
Anforderungen (INT) und mit den Anforderungen verbundene Daten (PREQ_DQ, INT_DQ).
Das Master-Interface 150 hat die Warteschlangen C0, C1 für abgehende Anforderungen und
beinhaltet wahlweise die Warteschlangen für eingehende und abgehende Daten IDQ0, ODQ0,
IDQ1, ODQ1 für jede Master-Klasse.
-
Manche der nachfolgenden Erläuterungen beziehen sich auf bestimmte Transaktions-
und Antwortnachrichten. Die Gesamtheit solcher Transaktions- und Antwortnachrichten ist
im Kapitel "Genaue Beschreibung der Transaktionen" in diesem Dokument dargestellt.
Das Port-ID-Register 158 hat folgende Felder:
-
- Das ID-Feld 160 ist ein 16-Bit Feld das das mit dem Port verbundene UPA-Modul
kennzeichnet, davon sind 6 Bits für eine Herstelleridentifikation vorgesehen (Kennzeichnung
durch Sun Microcystems, Inc.), 6 Bits für den Modul- oder Prozessortyp (Kernzeichnung
durch den Hersteller), und 4 Bits für die Versions- oder Neuauflage-Nr. des Moduls
(Kennzeichnung durch den Hersteller).
-
- Das UPACAP-Feld 161 ist ein 5-Bit Kennzeichnungsfeld für die Angabe der
Fähigkeiten des UPA-Ports.
-
- UPACAP[0] bedeutet, daß die UPA ein Master-Interface hat.
-
- UPACAP[1] bedeutet, daß das UPA-Modul einen Cache hat (der aus dem UPA-Port
einen "CacheMaster" macht).
-
- UPACAP[2] bedeutet, daß der UPA-Port ein Interrupter-Interface hat, das das Signal
UPA_Slave_Int_L nutzt. Dieses Bit wird primär von UPA-Ports gesetzt, die
ausschließlich als Slave fungieren. Die Software kennzeichnet diesen UPA-Port als
Target-MID, das mit einem Interrupt-Handler verbunden ist.
-
- UPACAP[3] bedeutet, daß der UPA-Port ein Interrupter-Interface hat, das das
Transaktionsanforderungsprotokoll P_INT_REQ nutzt. Die Software kennzeichnet
diesen UPA-Port als Target-MID, das mit einem Interrupt-Handler verbunden ist.
-
- UPACAP[4] bedeutet, daß der UPA-Port ein Interrupt-Handler-Interface hat. Der
System-Controller leitet die Interrupt-Anforderungen P_INT_REQ nur dann von
anderen UPA-Ports an diesen Port weiter, wenn dieses Bit gesetzt ist.
-
- Das Feld ECCNotValid 162 ist ein 1-Bit Feld, das anzeigt, daß dieser UPA-Port den
ECC nicht unterstützt. Dieses Feld ist auf 0 · 0 gesetzt, wenn der UPA-Port beim Aussenden
von Daten den ECC generieren kann. Es ist auf 0 · 1 gesetzt, wenn der UPA-Port das
Generieren des ECC beim Aussenden von Daten nicht unterstützt, sondern der System-
Controller 110 benötigt wird, um dem Empfänger-UPA-Port anzuzeigen, daß die ECC-
Kontrolle deaktiviert werden soll. Ist ECCNotValid auf 0 · 1 gesetzt, dann wird vom UPA-Port
weder die ECC-Kontrolle auf dem UPA-Datenbus, noch die Paritätskontrolle auf dem UPA-
Adreßbus unterstützt.
-
- Das Feld ONEREAD 164 ist ein 1-Bit Feld, das anzeigt, daß dieser UPA-Port
lediglich eine anstehende Slave-Lese-Transaktionsanforderung P_REQ zu einem Zeitpunkt
unterstützt. Ist das Feld ONEREAD gesetzt, so kann dieser UPA-Port die Nachrichten
P_RAB_REPLY und P_RASP_REPLY nicht ausgeben, sondern muß die Antwortnachricht
P_RASB_REPLY nutzen. Daraus folgt, daß, wenn das Feld ONEREAD gesetzt ist, dieser
UPA-Port die an ihn gerichteten Transaktionsanforderungen P_NCRD_REQ und
P_BCBRD_REQ für einen Slave-Zugriff mit P_RASB beantworten muß. Wie im folgenden
noch erläutert verwahrt der System-Controller Informationen über MID, Klasse und Größe,
die für solche Transaktionen benötigt werden, für den UPA-Port. Die
Transaktionsanforderungsnachricht P_NCRD_REQ und die Antwortnachricht P_RASB werden ebenfalls
im folgenden noch genauer beschrieben.
-
- Das Feld PREQ_RQ[3 : 0] 166 ist ein 4-Bit Feld, in dem die Größe der Warteschlange
167 für PREQRQ im Slave-Interface 152 kodiert ist. Dieses Feld markiert die maximale
Anzahl der (in 2 Zyklen) eingehenden Transaktionsanforderungspakete P_REQ, die das UPA-
Slave-Interface 152 gleichzeitig aufnehmen kann. Der Mindestwert von PREQ_RQ ist 0 · 1, da
jeder UPA-Port zumindest den Slave-Lesezugriff auf seine Port-ID-Register unterstützten
muß.
-
- Das Feld PREQ_DQ[5 : 0] 168 ist ein 6-Bit Feld, in dem die Größe der Warteschlange
169 für PREQ_DQ kodiert ist. In diesem Feld ist die Anzahl der eingehenden Quad-Wörter
(16-Byte Einheiten) markiert, die der UPA-Slave-Port in seiner P_REQ Warteschlange 169
für das Schreiben von Daten aufnehmen kann. Die PREQ_DQ Warteschlange für dass
Schreiben von Daten muß für die maximale Anzahl der Anforderungen, die in der
Anforderungswarteschlange PREQ_RQ stehen können, Datenblöcke (64 Byte) erfassen
können. Daraus folgt, daß die Größe der Daten-Warteschlange PREQ_DQ immer das
vierfache der im Feld 166 PREQ_RQ festgelegten Größe beträgt, außer wenn PREQ_DQ auf
0 · 0 gesetzt werden kann, wenn der UPA-Port den Slave-Schreibzugriff nicht unterstützt.
-
- Das Feld PINT_RDQ[1 : 0] 170 ist ein 2-Bit Feld, in dem die Größen der
Warteschlangen 171, 172 für INT_RQ und INT_DQ kodiert sind. Das Feld PINT_RDQ 170
ist nur dann gültig, wenn der UPA-Port ein Interrupt-Handler-Interface 156 hat. Die Größe
der Warteschlange für Interupt-Anforderungen, INT_RQ 171, entspricht dem Binärwert
dieses Felds plus 1. Die maximale Größe der Warteschlange für Interrupt-Anforderungen
beträgt 4 Interrupt-Anforderungen. Zusammengefaßt markiert dieses Feld die Anzahl der (in 2
Zyklen) eingehenden Anforderungen P_INT_REQ, die der UPA-Slave-Port aufnehmen kann,
sowie die Anzahl der 64-Byte Interrupt-Datenblöcke, die das UPA-Slave-Interface aufnehmen
kann.
-
Bezüglich des Felds UPACAP ist zu sagen, daß es kein Maskenbit gibt, das die
Fähigkeiten des Slave anzeigt, da jeder UPA-Port ein Slave-Interface haben muß, damit die
Port-ID-Register gelesen werden können. Im folgenden werden einige Beispiele für
Einstellungen des Felds UPACAP gezeigt. Bei einem UPA-Port mit allen Funktionen, wie
z. B. einem Prozessormodul, ist die UPACAP-Maske auf O · 1B gesetzt. Bei einem nur als
Slave fungierenden UPA-Port wie z. B. einem Graphikbauelement, der nur für Slave-Zugriff
gemappt ist und nicht unterbrechen kann, ist die UPACAP-Maske auf 0 · 0 gesetzt. Bei einem
intelligenten, nur als Slave fungierenden UPA-Port, der Interrupts generiert (mit UPA_Slave-
Int) ist die UPACAP-Maske auf 0 · 04 gesetzt. Bei einem Ein-/Ausgabe-UPA-Port, der
DVMA-Operationen (direkter virtueller Speicherzugriff) ausführen kann, keinen Cache hat
und Interrupt-Anforderungs-Transaktionen P_INT_REQ generiert ist die UPACAP-Maske
auf 0 · 9 gesetzt.
Master Interface
-
Das Vorhandensein eines Master-Interface 150 ist optional. Hat ein UPA-Port ein
UPA-Master-Interface so kann er Transaktionsanforderungen (P_REQ) initiieren. Ein UPA-
Port 104 mit einem Master-Interface 150 wird hier als Master-Port bezeichnet.
-
Das UPA-Modul für einen Master-Port kann einen physikalisch adressierten
kohärenten Cache haben, in diesem Falle spricht man von einem Cache-Master-Port. Der
Cache ist am "MOESI-Cachekohärenzprotokoll" beteiligt (das im folgenden noch näher
erläutert wird) und reagiert auf Rückkopier-Invalidierungsanforderungen des System-
Controllers 110. Der kohärente Cache schließt alle anderen nebengeordneten lokalen Caches
im UPA-Modul vollständig ein. In der bevorzugten Ausführung kann in jedem cachenden
UPA-Master-Port höchstens ein Dirty Victim - Rückschreibetransaktion anstehen, zum Teils
deshalb, weil die Cache-Speicher aller Datenprozessoren nur einen einzigen Rückschreibe-
Puffer haben (siehe Puffer 280 in Fig. 8), und zum Teil um die komplexe Steuerlogik, die das
Vorhandensein mehrerer Rückschreibe-Puffer erfordern würde, zu umgehen.
-
In anderen Ausführungen, in denen der Datenprozessor mehrere Aufgaben und Cache-
Misses oder Prefetches ausgeben kann, können im Datenprozessor mehrere Rückschreibe-
Puffer und im System-Controller eine entsprechende Anzahl temporärer Dtag-Puffer
vorhanden sein. Die hier beschriebenen Logikprotokolle zur Behandlung von
Rückschreibetransaktionen funktionieren mit jeder beliebigen Anzahl von anstehenden
Rückschreibetransaktionen des UPA-Ports.
-
Ein UPA-Master-Interface 150 hat für zwei "Klassen" von Transaktionsanforderungen
bis zu zwei unabhängige Warteschlangen C0 und C1 für abgehende Anforderungen. C0 und
C1 werden auch "Master-Klassen" genannt, da es sich dabei um Klassen von Transaktionen
handelt, die von UPA-Master-Ports initiiert werden. Das UPA-Master-Interface kann
Transaktionsanforderungen aus jeder beliebigen Klasse ausgeben. Die Klasse, der die
Anforderung angehört, wird dem System-Controller durch ein bestimmtes Bit in jedem
Transaktionsanforderungs-Paket angezeigt. Die Port-Identifikation des UPA-Ports ist
ebenfalls im Transaktions-Paket enthalten, und zwar im MID-Feld (siehe nachfolgendes
Kapitel "Transaktionen"). Ferner kann das Master-Interface 150 für jede der
Transaktionsklassen Warteschlangen für eingehende und abgehende Daten beinhalten, die mit
IDQ0, ODQ0, und IDQ1, ODQ1 bezeichnet sind.
-
Der Zweck des Vorhandenseins von zwei oder mehr Transaktionsklassen (hier als
Master-Klassen bezeichnet) besteht darin, die parallele Verarbeitung von
Speichertransaktionen zu verstärken, indem jeder Datenprozessor anzeigen kann, welche
Speichertransaktionen sequentiell geordnet sein müssen, und welche nicht. Transaktionen
eines Datenprozessors, die der selben Master-Klasse angehören, sind "streng geordnet", d. h.
daß die Transaktionen innerhalb jeder Klasse in der Reihenfolge ausgeführt werden müssen,
in der der Datenprozessor die Speicheranforderungen in der betreffenden Klasse generiert.
Bei Speichertransaktionen in verschiedenen Klassen ist keine bestimmte Ordnung
erforderlich. Gibt der Datenprozessor also Speichertransaktions-Anforderungen T1-1, T1-2
und T1-3 in dieser Reihenfolge in Klasse 1 aus, und Speichertransaktionen T2-1 und T2-2 in
dieser Reihenfolge in Klasse 2, dann muß der System-Controller die Transaktionen T1-1, T1-
2 und T1-3 in der selben Reihenfolge ausführen, in der sie generiert wurden. Der System-
Controller muß gleichermaßen die Transaktionen T2-1 und T2-2 in der selben Reihenfolge
ausführen, in der sie generiert wurden, er kann jedoch die Transaktionen T2-1 und T2-2 in
Bezug auf die Transaktionen T1-1, T1-2 und T1-3 zu jeder beliebigen Zeit ausführen.
-
Daten-Warteschlangen werden in der bevorzugten Ausführung genutzt, um das
Abwickeln von Datentransfers zu vereinfachen. Warteschlangen für abgehende Daten werden
immer mit zu übertragenden Daten gefüllt, bevor die entsprechende Transaktions-
Anforderung oder Antwortnachricht übertragen wird. Auf diese Weise wird bei Übertragung
einer Anforderungsnachricht für eine Datenschreib-Transaktion oder einer Antwortnachricht
"Daten bereitgestellt" durch einen UPA-Port dem Verbindungsmodul versichert, daß die
entsprechenden Daten für die sofortige Übertragung bereitstehen. Warteschlangen für
eingehende Daten, die meist optional sind, werden üblicherweise durch FIFO (first-in
firstout) -Puffer realisiert, die unabhängig von den Zuständen aller anderer Logikschaltungen
gefüllt werden können. Daraus folgt, daß, wenn ein UPA-Port Warteschlangen für eingehende
Daten hat, weder das UPA-Modul (z. B. ein Datenprozessor), noch sein UPA-Port das
Handshake-Protokoll für das Empfangen von Datenpaketen ausführen müssen. Vielmehr
werden die Daten einfach vom Verbindungsmodul in der Warteschlange für eingehende
Daten abgelegt, und der entsprechende UPA-Port oder sein UPA-Modul verarbeitet die Daten,
sobald die erforderlichen Ressourcen verfügbar sind.
-
Die S_REPLYs für Transaktionen in jeder Master-Anforderungsklasse werden vom
System-Controller 110 an den anfordernden Master-UPA-Port in der selben Reihenfolge
ausgegeben, in der die Transaktions-Anforderungen ursprünglich vom anfordernden UPA-
Port ausgegeben wurden. Diese Bedingung wird im System-Controller verwirklicht durch (A)
Behandeln jeder Anforderungs-Warteschlange SCIQ0/1 einer Master-Klasse als first-in
firstout - Puffer, so daß die Transaktionen innerhalb jeder Master-Anforderungs-Klasse vom
System-Controller genau in der Reihenfolge aktiviert werden, in der die Transaktions-
Anforderungen ausgegeben wurden, und (B) dadurch, daß innerhalb einer Menge aktiver
Transaktionen die S_REPLYs für Transaktionen, die von der selben Master-Klasse im selben
UPA-Port angefordert wurden, in der gleichen Reihenfolge ausgegeben werden, in der diese
Transaktionen aktiviert wurden.
-
Wie oben ausgeführt bestehen zwischen den beiden Transaktions-Anforderungs-
Klassen C0, C1 bezüglich der Reihenfolge keine Bedingungen. Die S_REPLY für eine
Anforderung aus einer Klasse kann früher oder später eintreffen als die S_REPLY für eine
Anforderung aus der zweiten Klasse, ungeachtet der Reihenfolge, in der diese Anforderungen
dem System-Controller übertragen wurden.
-
Bezüglich der Anforderungen verschiedener Master-UPA-Ports sind ebenfalls keine
Bedingungen an die Reihenfolge gestellt. Lese-/Schreib-Anforderungen von verschiedenen
Master-UPA-Ports, die an das Slave-Interface eines UPA-Ports gerichtet sind, können vom
Slave-Interface des UPA-Ports in beliebiger Reihenfolge ausgeführt werden, Anforderungen
des selben Master-UPA-Ports aus der selben Master-Anforderungs-Klasse müssen jedoch
vom Slave-Interface des UPA-Ports in der Reihenfolge ausgeführt werden, in der sie vom
Slave-Interface des UPA-Ports empfangen wurden.
-
Bezüge auf Ein-/Ausgabevorrichtungen sind sequenziell beständig. Das Slave-UPA-
Interface sortiert Transaktionen nach den Adressen der Vorrichtungen. Bezüge auf die selbe
Ein-/Ausgabevorrichtung (oder einen vorbestimmten Adreßbereich) müssen in der
Reihenfolge ausgeführt werden, in der sie beim UPA-Slave-Interface eintreffen. Es sind
jedoch keine Bedingungen an die Reihenfolge von Bezugnahmen auf verschiedene Ein-
/Ausgabevorrichtungen gerichtete Bezüge gestellt, die vom selben UPA-Slave-Interface
abgehen (wie z.B in einer Busbrücke), und das UPA-Slave-Interface kann an verschiedene
Ein-/Ausgabevorrichtungen (oder verschiedene vorbestimmte Adreßbereiche) gerichtete
Transaktionen parallel verarbeiten.
-
Jedes UPA-Modul muß alle Transaktions-Anforderungen, die eine bestimmte
Reihenfolge einhalten müssen, in ein und dieselbe Master-Anforderungs-Klasse einordnen.
Die Klassen aller Prozessor-UPA-Module werden vorzugsweise wie folgt gekennzeichnet:
-
- Klasse 0 wird für Lesetransaktionen aufgrund von Cache-Misses und das Laden von
Blöcken verwendet.
-
- Klasse 1 wird für Rückschreibe-Anforderungen, Schreib-Invalidierungs-
Anforderungen, das Speichern von Blöcken, Interrupt-Anforderungen und nicht gecachte
Lese-/Schreib-Anforderungen verwendet.
-
Das Zuordnen von Speichertransaktionen zu Klassen macht es möglich, daß durch
Cache-Misses verursachte Speichertransaktionen durch andere Transaktionen nicht blockiert
werden und ist besonders dann notwendig, wenn der Datenprozessor mehrere anstehende
Aufgaben und/oder Prefetching unterstützt. Dadurch wird, neben weiteren Vorteilen, eine
geringstmögliche Wartezeit für Cache-Inhalte gewährleistet.
-
Das Verbindungsmodul kann die parallele Verarbeitung von Transaktionen
maximieren und macht es möglich, daß diese - außer bei Transaktionen vom selben UPA-Port
und der selben UPA-Klasse - in beliebiger Reihenfolge ausgeführt werden. Zum
Aufrechterhalten der Kohärenz, und zum Erzielen von Sequenzbeständigkeit werden
programmierseitig die Speichermodelle TSO (Total Store Order), PSO (Partial Store Order)
und RMO (Relaxed Memory Order) sowie das Speichermodell (Strong Sequential Order) für
den Ein-/Ausgabebereich unterstützt, ohne daß tatsächlich die Hardware des
Verbindungsmoduls sequenzbeständig gemacht werden müßte.
-
Ein UPA-Master-Port ist einzig für das Sortieren seiner internen Speichervorgänge auf
Grundlage seines Speichermodells zuständig, und es kann jede beliebige Kombination von
Transaktionen aus jeder beliebigen Anforderungsklasse ausgeben, die die Anforderungen
seines Speichermodells erfüllt. Der Datenprozessor des UPA-Ports kann die beiden Master-
Klassen dafür nutzen, Transaktionen zu parallelisieren und so zu ordnen, wie es sein lokales
Speichermodell erfordert. Alle Beschränkungen und Synchronisierungen werden vom
Datenprozessor auf Grundlage seines Speichermodells hergestellt, bevor es die Transaktionen
aus den Master-Klassen ausgibt.
-
Alle Datentransaktionen werden immer vollständig durchgeführt, und es gibt kein
Wiederhol-NACK vom System-Controller 110 an den Master-UPA-Port (mit Ausnahme einer
Interrupt-Transaktion).
-
Der UPA-Master-Port darf keinen Lese-/Schreib-Slave-Zugriff auf seinen eigenen
Slave-Port vornehmen, auch darf er keinen Datenblock anfordern, der bereits in seinem Cache
gespeichert ist oder Interrupts an sich selbst abschicken. Rückschleifen werden von der
bevorzugten Ausführung der vorliegenden Erfindung aufgrund von Einschränkungen der
Elektrik in Verbindung mit den Konnektoren nicht unterstützt. Die Verwendung von
Rückschleifen wird jedoch durch die System-Architektur der vorliegenden Erfindung nicht
logisch verhindert. Die S_REPLY-, Datentransfer- und Cachekohärenzprotokolle sind
tatsächlich so konstruiert, daß sie Rückschleifen unterstützen.
Slave-Interface
-
Alle UPA-Ports haben ein Slave-Interface 152, und alle UPA-Ports verwenden das
Port-ID-Register 158. Ein Slave-Interface 152 kann nur auf Transaktionen antworten, sie aber
nicht initiieren. Ein Slave-Interface 152 wird hier manchmal auch "Slave-Port" genannt. Mit
Slave-Port ist hier stets das Slave-Interface eines UPA-Ports gemeint, unabhängig davon, ob
der UPA-Port ein Master-UPA-Port ist.
-
Ein UPA-Slave-Interface 152 auf einem cachenden Master-UPA-Port gestattet dem
UPA-Port, vom System-Controller 110 Rückkopier-Invalidierungs-Anforderungen zu
empfangen.
-
Ein UPA-Slave-Interface 152 gestattet einem UPA-Port, Interrupt-Paket-
Transaktionen zu empfangen, wenn das Slave-Interface Teil eines UPA-Ports ist, der ein
Interrupt-Handler-Interface 156 hat.
-
Ein UPA-Slave-Interface hat einen nicht gecachten Adreßraum, und es gestattet den
programmierten Ein-/Ausgabe- (PIO) Lese- und Schreibzugriff auf Bauelemente und
Register, einschließlich des Lesens seines Port-ID-Registers 158, auf dem UPA-Modul von
Master-UPA-Ports. Jedem UPA-Slave-Interface ist ein 8-Gigabyte nicht gecachter Adreßraum
zugeordnet. Wird von einem UPA-Port das an ihn gerichtete Signal UPA Addr Valid
registriert und das signifikanteste Adreßbit PA[40] ist gleich 1, dann stellen die
physikalischen Adreßbits PA[32 : 4] des Transaktionsanforderungs-Pakets Adressen im nicht
gecachten Adreßraum dar.
-
Die Architektur des UPA-Verbindungsmoduls legt weder den Adreßraum des
gesamten Systems fest, noch die Adressen-Dekodierung der Systemregister, mit Ausnahme
des Port-ID-Registers 158.
-
Ein UPA-Slave-Interface verarbeitet PIO Lese-/Schreib-Transaktionsanforderungen
aus der selben Master-Klasse eines Master-UPA-Ports in der selben Reihenfolge, in der diese
Anforderungen empfangen werden. D. h. es verschickt P_REPLY-Nachrichten für diese
Transaktionsanforderungen in der Reihenfolge, in der die Transaktionsanforderungen
empfangen wurden. Es muß jedoch keine Reihenfolge einhalten, wenn es sich um
Anforderungen aus verschiedenen Master-Klassen eines UPA-Ports handelt, oder um
Anforderungen von verschiedenen UPA-Ports.
-
Ist das UPA-Slave-Interface mit der Schnittstelle für einen Ein-/Ausgabebus
verbunden, dann muß die Schnittstelle für den Ein-/Ausgabebus ebenfalls die Reihenfolge der
von ihr empfangenen Transaktionen für jede einzelne Adresse oder jeden einzelnen
Adreßbereich einhalten. Folgt zum Beispiel auf eine Schreibtransaktion zu Adresse A (oder
zu Bauelement A) auf dem Ein-/Ausgabebus eine Lesetransaktion zu Adresse A (oder zu
Bauelement A) auf dem selben Ein-/Ausgabebus, dann darf die Schnittstelle für den Ein-
/Ausgabebus die Lese-Transaktion nicht vor der Schreib-Transaktion anordnen. Folgt jedoch
auf eine Schreibtransaktion zu Adresse A (oder zu Bauelement A) eine Lesetransaktion von
Adresse B (oder zu Vorrichtung B), dann ist die Reihenfolge der Verarbeitung durch die
Schnittstelle für den Ein-/Ausgabebus beliebig. Der genaue Reihenfolge-Mechanismus auf
dem Ein-/Ausgabebus kann zwischen verschiedenen Ausführungen der Schnittstelle für den
Ein-/Ausgabebus variieren. Die Verwendung eines Blockierbits oder einer blockierenden
Bitmap-Struktur ähnlich der oben für die Reihenfolge der Klassen beschriebenen ist jedoch
sowohl für das klassenbasierende Ordnen als auch für das Ordnen aufgrund der Ein-
/Ausgabeadresse möglich.
-
Ein UPA-Slave-Interface kann nicht gewährleisten, daß eine Schreib-Transaktion
vollständig ausgeführt wird. Folgt auf eine Schreibtransaktion eine Lesetransaktion (durch
den selben Prozessor), dann wird das Ergebnis der letzten Schreibtransaktion ausgegeben,
wenn der Bereich existiert. Da jedoch das Lesen von und Schreiben in Register von Ein-
/Ausgabebauelementen für die jeweilige Ausführung spezifische Nebeneffekte haben kann, ist
die Semantik von jedem Ein-/Ausgabebauelement abhängig.
-
Ein Master-UPA-Port kommuniziert mit einem Slave-UPA-Port nur über das
Verbindungsmodul 112, selbst wenn die beiden den selben UPA-Adreßbus nutzen.
-
Ein nur als Slave fungierender UPA-Port (ein UPA-Port, der kein Master-Interface
hat), kann eine dafür bestimmte Interrupt-Ader nutzen, um dem System-Controller einen
Interrupt zu signalisieren. Der System-Controller generiert dann für ihn ein Interrupt-Paket
und verschickt dieses an einen Interrupt-Hander-UPA-Port.
-
Der System-Controller 110 bearbeitet die Flußsteuerung von Anforderungen an das
Slave-Interface eines UPA-Ports, indem er die maximale Größe der in den Fig. 4 und 5
dargestellten drei Warteschlangen für beim Slave ankommende Anforderungen (PREQ_RQ,
SREQ_RQ, INT_RQ) und der beiden Daten-Warteschlangen (PREQ_DQ, INT_DQ) kennt.
Die Port-ID-Register 158 für jeden UPA-Port legen die maximale Anzahl anstehender
Transaktions-Anforderungen jeder Art fest, die gleichzeitig in den Warteschlangen
gespeichert sein kann und bestimmen somit, wie viele solcher Anforderungen sie vom
System-Controller 110 erhalten können, bevor ein Teil dieser Anforderungen abgearbeitet ist.
Das Port-ID-Register 158 legt auch die maximale Anzahl der Quad-Wörter (16-Byte
Einheiten) fest, die jede Daten-Warteschlange aufnehmen kann.
-
Die Schnittstelle 152 des UPA-Slave-Port kann empfangene Transaktionen nicht mit
"Wiederholung NACK" beantworten. Um die Notwendigkeit solcher negativer
Rückmeldungen zu umgehen, gibt der System-Controller 110 nicht mehr Anforderungen an
das UPA-Slave-Interface aus, als die Warteschlangen des Slave-Interface aufnehmen können.
Die vom UPA-Slave-Interface ausgegebene P_REPLY, die bestätigt, daß eine
vorangegangene Transaktion vollständig ausgeführt ist, teilt dem System-Controller 110 mit,
daß die Warteschlange des Slave-UPA-Port für eingehende Anforderungen wieder eine
Anforderung dieser Art aufnehmen kann.
-
Die maximale Größe der Warteschlange 174 für Anforderungen des System-
Controllers SREQ-RQ im Slave-Port-Interface 152 ist in der bevorzugten Ausführung auf 1
festgelegt. Bei einem Slave-UPA-Port kann es also höchstens eine anstehende S_REQ geben.
-
Die Nutzung lediglich einer einzigen Warteschlange 174 für eingehende
Anforderungen SREQ_RQ, ohne daß dabei die Leistung des Systems beeinträchtigt wird, ist
deshalb möglich, weil alle S_REQ-Anforderungen beim Slave-Interface höchste Priorität
genießen und so schnell abgearbeitet werden, daß es nicht nötig ist, 5 REQ-Anforderungen in
einer Warteschlange zu speichern. In der bevorzugten Ausführung, wie in Fig. 7 dargestellt,
ist der Cache-Controller 176 in jedem cachenden UPA-Master-Port 104 eine Zweitor-
Steuerungsschaltung, so daß der Cache-Controller Cachezugangs-Anforderungen sowohl vom
Datenprozessor 178 des Ports, als auch aus der Anforderungswarteschlange SREQ-RQ
entgegennehmen kann, wobei eine SREQ-RQ vor dem Datenprozessor die höhere Priorität
genießt. Bei dieser Konfiguration werden SREQs aus der Anforderungswarteschlange 174 für
SREQ-RQs im allgemeinen von jedem Slave-Interface innerhalb von 2 bis 5 System-
Taktzyklen abgearbeitet. Wurde z. B. eine einzelne Lese-/Modifizier-/ oder Schreib-Operation
im Cache-Speicher vom Datenprozessor 178 unmittelbar einen Taktzyklus vor dem Absetzen
der SREQ begonnen, dann kann es 3 zusätzliche System-Taktzyklen dauern, bis diese Cache-
Transaktion zu Ende geführt ist, danach wird SREQ abgearbeitet, üblicherweise innerhalb von
2 System-Taktzyklen.
-
Zudem kann unter Verwendung der oben beschriebenen Methodologie der Zweitor-
Cachesteuerungsschaltung eine Rückkopier-Anforderung von einem Datenprozessor 178 zu
einem anderen in ungefähr der gleichen Zeitspanne durchgeführt werden, die für das Laden
aus dem Hauptspeicher benötigt wird, wenn beim Verbindungsmodul keine konkurrierende
Speichertransaktion anliegt. Konkret dauert in der bevorzugten Ausführung das Laden aus
dem Hauptspeicher ca. 8 System-Taktzyklen, und das Rückkopieren vom Cache-Speicher
eines Datenprozessors in den Cache-Speicher eines anderen Datenprozessors dauert ebenfalls
ca. 8 System-Taktzyklen, wenn keine konkurrierenden Speichertransaktionen anliegen.
-
In den meisten Ausführungen muß jedes UPA-Slave-Interface Paritätskontrollen bei
Transaktions-Anforderungen durchführen, die es über den UPA-Adreßbus empfangen hat,
und es muß alle Paritätsfehler mit einer P_REPLY-Nachricht für schwerwiegende Fehler
melden. Bei den meisten Ausführungen muß jedes UPA-Slave-Interface 152 auch durch eine
ECC-Kontrolle bei Schreibtransaktionen feststellen, ob der ECC gültig ist, und es muß
Datenfehler protokollieren und melden.
Interrupter-Interface
-
Das Vorhandensein eines Interrupter-Interface 154 ist optional. Unterstützt der UPA-
Port ein Master-Interface 150, dann kann es von jeder beliebigen Master-Klasse im Master-
UPA-Port eine Interrupt-Paket-Transaktion an einen Ziel-Slave-UPA-Port abschicken, der als
Interrupt-Handler fungiert.
-
Ein Interrupter-Interface in einem Master-UPA-Port generiert Interrupts, indem es eine
P_INT_REQ-Transaktion initiiert (siehe nachfolgendes Kapitel "Transaktionen"). Der
Master-UPA-Port generiert ein Interrupt-Paket für einen bestimmten Ziel-UPA-Port, der als
Interrupt-Handler fungiert, indem er im Anforderungspaket ein Target-ID< 4 : 0> markiert. Das
Target-ID ist das gleiche wie das individuelle 5-Bit UPA_Port_ID des Ziel-UPA-Ports. Ein
Interrupt, der von einem UPA-Port an sich selbst abgeschickt wird, wird vom UPA-Interface
in der bevorzugten Ausführung aus Gründen, die mit den elektrischen KonnekPortsn
zusammenhängen, nicht unterstützt, er könnte aber in anderen Ausführungen der vorliegenden
Erfindung unterstützt werden.
-
Das Target-ID eines (oder mehrerer) als Interrupt-Handler fungierender UPA-Ports
wird jedem nicht-Prozessor-Interrupter-UPA-Port durch die Initialisierungssoftware des
Systems zugeordnet. Der nicht-Prozessor-Interrupter-UPA-Port kann dann Interrupt-
Transaktionen nur an die zugeordneten Target-IDs senden. Ein Prozessor-UPA-Port kann
Interrupt-Transaktionen an jedes beliebige Interrupt-Handler-Target-ID senden (für
Softwareaufrufe von einem Prozessor zum anderen).
-
Das Target-ID< 4 : 0> für jede Interrupt-Transaktions-Anforderung P_INT-REQ wird
im physikalischen Adreßfeld PA< 18 : 14> im ersten Zyklus des 2-Zyklen-Jnterrupt-Pakets
übertragen (siehe Fig. 9 C). Der UPA-Port kann die P_INT_REQ jeder beliebigen Master-
Anforderungs-Klassse zuordnen. Die Zuordnung zu einer bestimmten Klasse ist nicht
erforderlich. In der bevorzugten Ausführung wird es jedoch der Klasse 1 zugeordnet, um
Transaktionen von Cache-Inhalten nicht zu blockieren.
-
Empfängt der UPA-Port, der die Interrupt-Transaktion initiiert hat, eine
Antwortnachricht S_INAK (auch als Antwortnachricht NACK bekannt), dann entfernt der
anfordernde UPA-Port die Interrupt-Daten aus seiner Warteschlange für Ausgangsdaten und
die Anforderung P_INT_REQ aus der Warteschlange der Master-Anforderungs-Klasse; nach
mehreren Back-off-Intervallen wird ein erneuter Versuch unternommen.
-
Empfängt der UPA-Port eine Antwortnachricht S_WAB, die aussagt, daß die 64 Byte
der Interrupt-Daten auf dem UPA-Datenbus verschoben werden sollen, dann ist gewährleistet,
daß sowohl die P_INT_REQ als auch die Daten vom System-Controller an den Ziel-UPA-
Port übertragen werden (wie eine nicht gecachte Block-Schreib-Transaktion), wenn das Ziel
ein gültiger Interrupt-Handler ist. Ist das Ziel kein Interrupt-Handler, dann kann es vom
System-Controller annulliert (und ein Zustands-Bit gesetzt) werden, oder der Empfänger-
UPA-Port kann es (stillschweigend) annullieren.
-
Ein Interrupter kann mehrere "Rücken-an-Rücken" (Back-to-Back) P_INT_REQs mit
verschiedenen Ziel-IDs an veschiedene Ziel-UPA-Ports verschicken. Kann das Interrupt-
Paket vom System-Controller ausgeliefert werden, dann wird es angenommen. Ansonsten gibt
der System-Controller die Nachricht NACK aus.
-
Gibt ein Interrupter mehrere Back-to-Back - P_INT_REQ-Transaktionen an
verschiedene UPA-Ports aus, dann ist nicht gewährleistet, daß diese in der Reihenfolge ihrer
Ausgabe angeliefert werden. Back-to-Back - P_INT_REQs mit dem selben Ziel-ID werden
jedoch vom System-Controller in der Reihenfolge ihrer Ausgabe beim Ziel-UPA-Port
angeliefert, vorausgesetzt, daß Interrupt-Anforderungen, die vom System-Controller 110 mit
NACK beantwortet werden, vom UPA-Interrupter-Interface noch einmal in ihrer
ursprünglichen Reihenfolge ausgegeben werden.
-
Unterstützt der UPA-Port kein Master-Interface, benötigt jedoch ein Interrupt-
Interface 154, dann wird das Interrupt-Interface 154 durch eine bestimmte Ader (in Fig. 3 als
UPA_Slave_Int_L gekennzeichnet) angeschlossen, um dem System-Controller 110 einen
einzelnen Interrupt mit Priorität zu signalisieren. Der System-Controller 110 veranlaßt dann,
daß ein Interrupt-Paket generiert und an einen Interrupt-Handler-UPA-Port verschickt wird.
In Slave-UPA-Ports mit einem Interrupter-Interface kann kein zweiter Interrupt auf
der Leitung UPA_Slave_Int_L abgesetzt werden, bevor der Interrupt-Handler den Interrupt
durch einen Slave-Schreibzugriff auf ein vorbestimtes Interrupt-Lösch-Register im Slave-
UPA-Port gelöscht hat. Zudem steht für Interrupts, die über die Leitung UPA_Slave_Int_L
generiert werden, nur ein einziges Interrupt-Prioritäts-Niveau zur Verfügung.
Interrupt-Handler-Interface
-
Ein UPA-Port kann ein Interrupt-Handler 156 sein. Ein UPA-Modul eines
Datenprozessors unterstützt normalerweise das Interrupt-Handler-Interface. Um als Interrupt-
Handler fungieren zu können muß ein UPA-Port die in Fig. 16 dargestellten Warteschlangen
INT und INT_DQ unterstützen. Die Warteschlange für INT-Anforderungen kann maximal 4
Interrupts aufnehmen.
-
Eine sich in der Warteschlange für INT-Anforderungen befindende P_INT_REQ wird
vom Prozessor geprüft. In der bevorzugten Ausführung wird eine Unterbrechungs-
Steuerungssoftware aktiviert. Nachdem der Interrupt-Handler den Interrupt abgearbeitet hat,
veranlaßt sie den UPA-Port, die Antwortnachricht P_REPLY zu generieren, um dem System-
Controller anzuzeigen, daß die P_INT_REQ abgearbeitet ist und nun eine weitere
P_INT_REQ in der Warteschlange für eingehende Interrupt-Anforderungen aufgenommen
werden kann. In der bevorzugten Ausführung wird die P_REPLY generiert, sobald die
Software einen Eintrag in das "Interrupt-Lösch-Register" des Interrupt-Handler-Interface
schreibt.
Register des System-Controllers
-
Wie in Fig. 5 dargestellt verfügt der System-Controller 110 über getrennte
Warteschlangen für eingehende Transaktions-Anforderungen in jeder Master-Klasse (SCIQ0,
SCIQ1) sowie über eine Warteschlange (SCRQ) für sowohl Anforderungen, die er selbst
generiert, als auch Anforderungen, die er an UPA-Ports weitereleitet. Der System-Controller
110 verfügt weiter über ein Register SC ID 180, um den UPA-Ports seine Kapazitäten
mitzuteilen, über ein Register SC Config 190, und über ein Array 200 für die Zustände noch
nicht abgearbeiteter Transaktionen. Das Register SC Config 190 speichert die Kapazitäten
aller UPA-Ports des Systems, und es verfolgt, wie viele Transaktions-Anforderungen
gegenwärtig in den Eingangs-Warteschlangen aller UPA-Ports 104 gespeichert sind. Über das
Array 200 für die Zustände noch nicht abgearbeiteter Transaktionen verfolgt der System-
Controller alle inaktiven und aktiven noch anstehenden Transaktionen.
-
Das Register SC ID 180 hat folgende Felder:
-
- Das Feld ID 181 ist ein 16-Bit Feld, das den System-Controller kennzeichnet.
-
- Das Feld UPANUM 182 ist ein 5-Bit Maskenfeld, das die maximale Anzahl der UPA-
Ports anzeigt, die der System-Controller unterstützen kann.
-
- Das Feld SCIQ0[3 : 0] 183 ist ein 4-Bit Feld, das die Anzahl der (2-Zyklen)
Anforderungspakete anzeigt, die in der Warteschlange der Klasse 0 für eingehende
Anforderungen SCIQ 0 eines bestimmten UPA-Ports gespeichert werden können.
-
- Das Feld SCIQ 1[3 : 0] 184 ist ein 4-Bit Feld, das die Anzahl der (2-Zyklen)
Anforderungspakete anzeigt, die in der Warteschlange der Klasse 1 für eingehende
Anforderungen SCIQ 1 eines bestimmten UPA-Ports gespeichert werden können.
Für jeden Master-UPA-Port gibt es einen eigenen Satz von SCIQ0- und SCIQ1-
Registern, um die Größe der Warteschlangen für eingehende Anforderungen SCIQ0 und
SCIQ1 jedes solchen Master-UPA-Ports anzuzeigen.
-
Wie in Fig. 6 dargestellt beinhaltet das Register SC Config 190 eine Zeile oder
Aufzeichnung 192 für jeden UPA-Port, der vom System-Controller 110 unterstützt werden
kann. Die Position einer Zeile im Register SC Config entspricht der Port-ID des zugehörigen
UPA-Ports. Die erste Zeile des Registers SC Config 190 enthält die Konfigurationsdaten des
UPA-Ports mit der Port-ID 00000, die zweite Zeile enthält die Konfigurationsdaten des UPA-
Ports mit der Port-ID 00001, und so weiter. Jede solche Aufzeichnung wird hier eine "Port-
Aufzeichnung im Register SC Confg" genannt. Eine Port-Aufzeichnung im Register SC
Config 190 hat folgende Felder:
-
- "Kopie des UPA_Port_ID_Reg" 193 ist wortgetreu eine Kopie des Port-ID-Registers
des entsprechenden UPA-Ports.
-
- Das Feld Cache Index Maske (CIM) 194 markiert die Anzahl von Block-Einträgen
oder Lines eines Etags im kohärenten Cache des entsprechenden UPA-Ports, falls vorhanden.
Dieses Feld zeigt dem System-Controller an, wie viele niederwertige Adreßbits der
physikalischen Adresse PA[40 : 6] für Adreßvergleiche bei Ausführung des
Cachekohärenzproto-kolls zu verwenden sind. Dieses Feld ist nur bei Cache-Master-UPA-
Ports gültig.
-
- Das Feld InCnt 195 beinhaltet die Anzahl von Interrupt-Anforderungen, die der
System-Controller 110 an den entsprechenden UPA-Port weitergeleitet hat und die noch vom
UPA-Port bestätigt werden müssen. Der System-Controller blockiert die Übertragung
weiterer Interrupt-Anforderungen an diesen UPA-Port, wenn der in diesem Feld eingetragene
Wert dem des Feldes PINT_RDQ[1 : 0] 170 in der Kopie 193 des UPA_Port ID-Registers
entspricht.
-
- Das Feld PReqCnt 196 beinhaltet die Anzahl von Port-Transaktions-Anforderungn,
die der System-Controller 110 an den entsprechenden UPA-Port weitergeleitet hat und die
noch vom UPA-Port bestätigt werden müssen. Der System-Controller blockiert die
Übertragung weiterer Port-Transaktions-Anforderung an diesen UPA-Port, wenn der in
diesem Feld eingetragene Wert dem des Feldes PREQ_RQ[3 : 0] 166 in der Kopie 193 des
UPA-Port-ID-Registers entspricht.
-
- Das Feld SReqCnt 197 beinhaltet die Anzahl von Transaktions-Anforderungen des
System-Controllers, die an den entsprechenden UPA-Port verschickt wurden und die noch
vom UPA-Port bestätigt werden müssen. Der System-Controller blockiert die Übertragung
weiterer System-Controller-Transaktions-Anforderungen an diesen UPA-Port, wenn der in
diesem Feld eingetragene Wert 1 ist, da die Kapazität der Warteschlangen der Slave-
Interfaces für SREQ nicht größer als 1 ist.
Datenfluß
-
In den Fig. 5 und 7 ist der charakteristische Datenfluß beim Lesen von Speichern und
Schreiben in Speicher dargestellt. Obwohl in den Figuren nicht eigens gezeigt, hat der
System-Controller 110 für jeden Master-UPA-Port einen eigenen Satz von Warteschlangen
SCIQ 0 und SCIQ 1 für eingehende Anforderungen. Zudem muß angemerkt werden, daß das
Ablaufdiagramm in Fig. 8 nicht alle Schritte aller Datentransfer-Transaktionen beinhaltet. Es
zeigt lediglich die Schritte, die bei den meisten Datentransfer-Transaktionen gleich sind.
Weitere Einzelheiten aller definierter Datentransfer-Transaktionen sind im Kapitel
"Detaillierte Beschreibung von Transaktionen" dargestellt.
-
Der UPA-Master-Port gibt über seinen UPA-Adreßbus eine Lese-/Schreib-
Transaktions-Anforderung (P_REQ) an den System-Controller 110 aus (210), die der System-
Controller in eine seiner beiden Warteschlangen für eingehende Anforderungen aufnimmt
(212). Handelt es sich um eine kohärente Anforderung (214), dann nimmt der System-
Controller 110 über den Snoop-Bus eine Dtag-Einsicht (Snoop) vor, auf die eine Dtag-
Aktualisierungs-Operation folgt (216). Gleichzeitig mit der Dtag-Einsicht startet der System-
Controller einen Speicherzyklus, wenn eine Lese-Transaktion einer im Hauptspeicher
gespeicherten Adresse ausgeführt wird (217).
-
Bei einer "Snoop-Operation" wird gleichzeitig auf alle mit dem Snoop-Bus 140
verbundenen Dtag-Arrays 134 zugegriffen um festzustellen, ob in einem oder mehreren der
Dtag-Arrays 134 ein gültiger Eintrag für eine bestimmte Adresse gespeichert ist. Jedes Dtag-
Array 134 reagiert auf eine Snoop-Operation mit der Ausgabe eines 2-Bit-Zustandswerts
sowie eines Hit/kein Hit - Bit. Der von einem Dtag-Array ausgegebene 2-Bit-Zustandswert
zeigt nur dann den Zustand eines Dtag an, wenn das Hit/kein Hit - Bit anzeigt, daß im Dtag-
Array 134 ein passender Eintrag gefunden wurde. Wird in einem Dtag-Array ein "Hit"
aufgespürt, dann nimmt das "Hit"-Bit einen Wert an, der "wahr" anzeigt, und der 2-Bit Dtag-
Zustandswert ist nicht gleich 00.
-
In Abhängigkeit von der spezifischen anliegenden Transaktions-Anforderung können,
wenn in einem der Dtag-Arrays 134 ein "Hit" aufgespürt wird, Daten aus dem Cache-
Speicher eines der Master-UPA-Ports ausgelesen werden, die Cache-Einträge in manchen
oder allen der Cache-Speicher, die für diese spezifische Adresse Daten speichern, können
ungültig gemacht werden, oder die Tag-Zustände eines oder mehrerer Einträge in den Dtag-
Arrays und Etag-Arrays können, wie im folgenden noch beschrieben, auf andere Weise
aktualisiert werden.
-
Wird bei einer kohärenten Lese-Transaktion durch die Snoop-Operation festgestellt,
daß die Daten aus dem Speicher stammen, weil (A) für die spezifische Adresse in den Dtag-
Arrays 134 keine "Hits" ermittelt wurden (222), oder (B) alle den Cache-Hits entsprechenden
Dtags sich im nicht modifizierten S- (Shared Clean) Zustand befinden und es sich bei der
Transaktion nicht um eine Lesen-zum-Übernehmen (read to own, RDO), Transaktion handelt
(223), dann wird vom System-Controller 110 über das Verbindungsmodul 112 ein Datenweg
vom Hauptspeicher zum anfordernden UPA-Port angelegt (224). Der System-Controller 110
schickt eine S_REPLY-Nachricht an den anfordernden UPA-Port (226), wenn gemäß der
vergangenen Zeit der anfordernde UPA-Port den der bestimmten Adresse entsprechenden
Datenblock erhalten haben müßte (228).
-
Eine kohärente Leseoperation vom Cache eines anderen UPA-Port ist dann nötig,
wenn ein Cache-Hit für einen Cache-Speicher in einem Datenprozessor festgestellt wurde
(222), der nicht der anfordernde Prozessor ist, und wenn entweder (A) das Dtag des nicht
anfordernden Datenprozessors sich im Zustand O oder M befindet und der Datenblock als
modifiziert gekennzeichnet ist, oder (B) die Lesetransaktion eine "Lesen-zum-Übernehmen"-
Transaktion (P_RDO_REQ) (223) ist.
-
Stellt der System-Controller fest (222, 223), daß ein Datenblock aus dem Cache eines
anderen UPA-Port entnommen werden muß, dann sendet der System-Controller 110 eine
Rückkopier-Anforderung S_REQ an das Slave-Interface des Quell-UPA-Ports und bricht den
Speicherzyklus ab (240). In Systemen mit mehr als zwei Datenprozessoren sendet der
System-Controller auch eine Invalidierungs-Transaktions-Anforderung (S_INV_REQ) an alle
cachenden UPA-Master-Ports außer dem Quell-UPA-Port, für die ein Cache-Hit ermittelt
wurde (240).
-
Stehen die Daten bereit, dann gibt der Slave-UPA-Port eine P_REPLY an den System-
Controller 110 aus (242). Der System-Controller 110 verschickt dann Steuersignale an das
Verbindungsmodul 112, um einen Datenweg vom Quell-UPA-Port zum anfordernden UPA-
Port zu bilden (244). Der System-Controller 110 verschickt auch eine S_REPLY an das
Slave-Interface des Quell-UPA-Ports, damit dieser die angeforderten Daten auf den UPA-
Datenbus verschiebt, und er verschickt eine S_REPLY an den anfordernden UPA-Master-Port
(246), damit dieser die Daten von seinem UPA-Datenbus entnehmen kann (228).
-
Bei einer typischen kohärenten Schreib (P_WR_REQ) - Transaktion werden vom
System-Controller Invalidierungs-Anforderungen an die Cache-Speicher verschickt, in denen
Datenblöcke gespeichert sind, die mit dem, der in den Hauptspeicher geschrieben wird,
identisch sind (218). Der System-Controller verschickt auch eine S_REPLY an den
anfordernden UPA-Port (230), damit dieser die Daten für die Schreiboperation zur Verfügung
stellt (232), nachdem vom System-Controller 110 über das Verbindungsmodul 112 ein
Datenweg vom anfordernden UPA-Port zum Hauptspeicher hergestellt und der Hauptspeicher º
dafür vorbereitet wurde, die Daten einzuschreiben (220).
-
Rückschreibe-Transaktionen (P_WRB_REQ) werden anders behandelt als andere
kohärente Schreib-Transaktionen. Erweist sich durch die Einsichtnahme in die Dtags (Snoop),
daß das Dtag, das der Adresse der Rückschreibe-Transaktions-Anforderung entspricht,
ungültig ist (250), dann bedeutet das, daß ein anderer Datenprozessor eine Transaktion
durchgeführt hat, die das Ungültigmachen des mit dieser Adresse versehenen Datenblocks
erforderte. In diesem Falle wird die Rückschreibe-Transaktion vom System-Controller
aufgehoben, indem dieser eine Rückschreibe-Lösch-Antwortnachricht (S_WBCAN) an den
anfordernden UPA-Port schickt (251); woraufhin der anfordernde UPA-Port den Inhalt seines
Rückschreibe-Puffers 280 ungültig macht (siehe Fig. 9).
-
Wird die Rückschreibe-Transaktion nicht gelöscht (250), dann stellt der System-
Controller einen Datenweg vom anfordernden UPA-Port zum Hauptspeicher her (252) und
verschickt eine Bestätigungsnachricht für das Schreiben des Blocks (S_WAB) an den
anfordernden Datenprozessor (253), die diesen anweist, den Datenblock an den Hauptspeicher
auszugeben (253, 254).
-
Wie in Fig. 8D dargestellt, werden bei einer Dtag-Aktualisierung (216) neue Dtag-
Werte meist in dem Dtag-Eintrag gespeichert, der bei einer Dtag-Einsichtnahme gelesen wird.
Bezüglich Lese/Rückschreib-Transaktionspaaren gibt es jedoch zwei Ausnahmen.
-
Ist bei einer Dtag-Aktualisierung für eine Rückschreibe-Transaktion im temporären
Puffer des Dtag DtagTB für den anfordernden Prozessor gerade ein gültiger Wert gespeichert
(255), dann bedeutet das, daß die mit der aktuellen Rückschreibe-Transaktion verbundene
Lese-Transaktion zu Ende geführt ist (d. h. sie wurde vor der Rückschreibe-Transaktion
beendet). In diesem Falle wird durch die nach der Rückschreibe-Transaktion durchgeführte
Dtag-Aktualisierung (256) der Inhalt des DtagTB in das Dtag übertragen, das der in der
Rückschreibe-Anforderung enthaltenen Adresse entspricht. Enthält der DtagTB gerade keinen
gültigen Wert (255), dann bedeutet das, daß die damit verbundene Lesetransaktion noch nicht
zu Ende geführt ist. In diesem Falle wird durch die Dtag-Aktualisierung für die Rückschreibe-
Transaktion das Dtag ungültig gemacht, das der in der Rückschreibe-Transaktions-
Anforderung enthaltenen Adresse entspricht.
-
Es ist zu beachten, daß, wenn beim Löschen einer Rückschreibe-Transaktion das Bit
für "DtagTB gültig" auf "wahr" gesetzt wird, bei der Dtag-Aktualisierung weiterhin der Inhalt
des DtagTB in das Dtag der entsprechenden Cache-Line kopiert wird. Die Dtags für alle
anderen Datenprozessoren werden weder geprüft, noch durch die
Rückschreibe-Transaktiongeändert.
-
Beim Durchführen der Dtag-Aktualisierung für eine Lese-Transaktion wird, wenn das
Bit DVP (dirty victim pending) auf "1" gesetzt und die Einsichtnahme in die Dtags für den
anfordernden Prozessor anzeigt, daß die entsprechende Rückschreibe-Transaktion noch
ansteht (also der Dtag-Zustand für den angeforderten Datenblock nicht gleich I ist) (258), der
neue Dtag-Zustand für den angeforderten Datenblock im temporären Puffer des Dtag
(DtagTB) gespeichert, bis die Rückschreibeaktion durchgeführt ist (259a). Im anderen Falle
(also wenn der Dtag-Zustand für den angeforderten Datenblock gleich I ist) ist die
Rückschreibe-Transaktion vor der Lese-Transaktion durchgeführt worden, und der durch die
Transaktion hervorgerufene neue Dtag-Wert wird direkt in das Dtag für den angeforderten
Datenblock geschrieben (259b).
-
Bei Transaktionen des Typs "Lesen zum Verwerfen" wird keine Dtag-Aktualisierung
durchgeführt, da diese Transaktionen den Inhalt der Cache-Speicher von UPA-Modulen nicht
beeinflussen. Dementsprechend sollte das DVP-Bit bei Transaktionen des Typs "Lesen zum
Verwerfen" nicht gesetzt werden, da durch solche Transaktionen keine Datenblöcke in Cache-
Speichern ersetzt werden.
-
In Fig. 8A und 8B ist eine typische nicht gecachte Slave-Lese-Sequenz von einem
anderen UPA-Port dargestellt, die folgendermaßen vor sich geht. Der UPA-Master-Port gibt
über seinen UPA-Adreßbus eine Leseanforderung (P_REQ) an den System-Controller 110
aus (210, 212). Nachdem er die Adresse dekodiert und festgesellt hat, daß diese sich nicht im
kohärenten Bereich befindet (214), verschickt der System-Controller 110 die P_REQ über den
UPA-Adreßbus des Ziel-UPAs (nachdem er den Zugriff auf diesen angefordert hat) an das
Slave-Interface des Ziel- (adressierten) UPA-Ports (260). Sobald die angeforderten Daten zur
Übertragung bereitstehen gibt der Ziel-UPA-Port die Nachricht P_REPLY an den System-
Controller 110 aus (261). Der System-Controller 110 stellt im Verbindungs-Modul 112 einen
Datenweg vom Ziel-UPA-Port zum anfordernden UPA-Port her (262), gibt die Nachricht
S_REPLY an den Ziel-UPA-Port aus, damit dieser die angeforderten Daten auf seinen UPA-
Datenbus verschiebt, und gibt die Nachricht S_REPLY and den anfordernden UPA-Master-
Port aus (263), damit dieser die Daten über seinen UPA-Datenbus in Empfang nimmt (264).
-
Eine typische nicht gecachte Slave-Schreib-Sequenz an einen anderen UPA-Port geht
folgendermaßen vor sich. Der UPA-Master-Port gibt über seinen UPA-Adreßbus eine
Schreib-Anforderung (P_REQ) an den System-Controller 110 aus (210, 212). Nachdem er die
Adresse dekodiert und festgesellt hat, daß diese sich nicht im kohärenten Bereich befindet
(214), verschickt der System-Controller 110 die P_REQ an den UPA-Port, an den sich die
Anforderung richtet, über den UPA-Adreßbus dieses Ports (nachdem er den Zugriff auf diesen
angefordert hat) (250). Der System-Controller 110 stellt im Verbindungs-Modul 112 einen
Datenweg vom anfordernden UPA-Port zum Ziel-UPA-Port her (266), gibt die Nachricht
S_REPLY an den anfordernden Master-Port aus, damit dieser die angeforderten Daten auf
seinen UPA-Datenbus verschiebt, und gibt die Nachricht S_REPLY and den Ziel-UPA-Port
aus, damit dieser die Daten über seinen UPA-Datenbus in Empfang nimmt (267). Der
anfordernde Master-Port bewertet die Transaktion als vollendet, wenn er die Nachricht
S_EPLY erhalten und die Daten übertragen hat. Der Ziel-UPA-Port gibt jedoch die
Nachricht P_REPLY aus, wenn er die ausgegebenen Daten fertig verarbeitet hat (268), was
zum Zwecke der Flußkontrolle wichtig ist, da die P_REPLY dem System ermöglicht, seinen
Zählerstand PReqCnt für Anforderungen, die in den Warteschlangen des UPA-Port-Slaves für
eingehende Anforderungen und Daten anstehen, zu vermindern.
-
Es ist anzumerken, daß, da die Adreß- und Datenwege voneinander unabhängig sind,
und da die Slave-Interfaces der UPA-Ports Warteschlangen sowohl für eingehende
Anforderungen und eingehende Daten beinhalten, das Anforderungs-Paket und die diesem
entsprechenden Daten in beliebiger Reihenfolge an das Slave-Interface des UPA-Ports
übertragen werden können, d. h. die Daten können vor der Adresse übertragen werden und
umgekehrt. Werden die Daten dem Slave-Interface vor dem entsprechenden Anforderungs-
Paket angeliefert, dann stehen die angelieferten Daten einfach so lange in der Warteschlange
des Slave-Interfaces für eingehende Daten an, bis das Slave-Interface bereit ist, diese zu
verarbeiten.
-
Hat das Slave-Interface die Daten und die Transaktions-Anforderung aus seiner
Warteschlange genommen, dann gibt es die Nachricht P_REPLY and den System-Controller
110 aus, um anzuzeigen, daß es für eine weitere Slave-Transaktion bereit ist. An diesem
Punkt betrachtet der System-Controller 110 die Transaktion als vollendet.
-
Zur Flußkontrolle gehört, daß das Quell-Bauelement (A) die maximale Größe der
stromabgelegenen Warteschlange immer im voraus kennt, und (B) die verbleibende Kapazität
in dieser Warteschlange überwacht. Die Maximalgröße der Warteschlangen wird von der
Initialisierungs-Software beim Systemstart statisch festgelegt, von den UPA-Port-ID-
Registern 158 für alle UPA-Ports, und vom SC-ID-Register 180 im System-Controller, und
werden in die Flußkontroll-Register für die stromaufgelegene Warteschlange geschrieben. Die
Flußkontroll-Register im System-Controller sind (A) die Größenparameter der Warteschlange
PREQ_RQ und PINT_RDQ, die in der Kopie 193 des UPA-Port-ID-Registers im System-
Controller gespeichert sind, und (B) die Zähler IntCnt, PReqCnt und SReqCnt 194, 195 und
196 im Register SC Config 190. Weitere Flußkontroll-Register im System sind die Register
270, 272 im Master-Interface 150 des UPA-Ports. Im Einzelnen schließt, wie in Fig. 5 zu
sehen ist, jedes Master-Interface 150 jedes UPA-Ports 104 zwei Register 270-0, 270-1 mit
ein, die die Größen der Anforderungs-Warteschlangen der Master-Klassen C0 und C1 für
diesen UPA-Port im System-Controller anzeigen, und zwei Zähler 272-0, 272-1, die die
Anzahl gegenwärtig anstehender Anforderungen in jeder der beiden Anforderungs-
Warteschlangen der beiden Master-Klassen anzeigen. Die Werte für die Größen der
Warteschlangen im SC-ID-Register SCIQ0, SCIQ1 (183, 184) für jeden UPA-Master-Port
werden in die Größenregister 270 jedes entsprechenden UPA-Port-Master-Interfaces beim
Systemstart durch die Initialisierungssoftware kopiert.
-
Die Ausgangswarteschlangen für Daten und Anforderungen unterliegen keinen
bestimmten Einschränkungen bezüglich der Größe oder sonstigen Anforderungen, mit der
Ausnahme, daß jede solche Warteschlange groß genug sein muß, um die maximale Anzahl
von Anforderungen oder Datenpaketen aufzunehmen, die das entsprechende Bauelement
entgegennehmen kann. Ferner sind diese Größenwerte, da die Größen der Warteschlangen für
ausgehende Daten und Anforderungen für andere Bauelemente im System zum Zwecke der
Flußkontrolle nicht relevant sind, nicht in den Konfigurationsregistern vermerkt, auf die die
Initialisierungssoftware zugreift.
-
Nach der Software-Initialisierung gibt die nächstgelegene Warteschlange nicht mehr
Anforderungen an die unmittelbar unter ihr gelegene Warteschlange aus, als diese ihrer
Kapazität nach aufnehmen kann. Eine S_REPLY vom System-Controller 110 an den UPA-
Port zeigt dem UPA-Port an, daß der System-Controller 110 in der entsprechenden
Warteschlange einen Platz für eine weitere Anforderung frei gemacht hat und für eine weitere
Master-Anforderung für diese Warteschlange bereit ist. Eine P_REPLY von einem UPA-Port
an den System-Controller 110 zeigt diesem an, daß der UPA-Slave-Port in seiner
entsprechenden Warteschlange einen Platz für eine weitere Anforderung frei gemacht hat und
für eine weitere Slave-Anforderung bereit ist.
-
Ein stromaufgelegenes Bauelement wie z. B. ein UPA-Port kann, ohne auf eine
Antwortnachricht warten zu müssen, in schneller Folge eine Reihe von Transaktionen
übermitteln, bis die Kapazität einer stromabgelegenen Warteschlange erreicht ist, dann muß
es wenigstens eine S_REPLY oder P_REPLY abwarten, bevor weitere Anforderungen an die
stromabgelegene Warteschlange übermittelt werden.
-
Die Flußkontrolle ist in Fig. 5 graphisch dargestellt. Die Warteschlangen für
eingehende Anforderungn SCIQ0 und SCIQ1 des System-Controllers 110 sind in Bezug auf
die Anforderungs-Warteschlangen der UPA-Master-Klassen C0 und C1 stromabgelegen
(umgekehrt betrachtet sind C0 und C1 stromaufgelegen). Dementsprechend sind alle
Warteschlangen im UPA-Slave-Interface für den System-Controller 110 stromabgelegen.
Übersicht über das Cachekohärenz-Modell
-
Das in der vorliegenden Erfindung verwendete Cachekohärenz-Protokoll ist ein
Modell der Punkt-zu-Punkt Schreib-Invalidierung. Es basiert auf den 5 "MOESI"-Zuständen,
die in den Cache-Tags (Etags) eines cachenden UPA-Master-Ports gespeichert sind. (In einer
weiteren Ausführung der Erfindung werden, wie im folgenden noch beschrieben wird, vier
"MESI"-Zustände Für Systeme verwendet, die mit dem Protokoll der "reflektierenden
Speicher" arbeiten). Das Cachekohärenz-Protokoll funktioniert nur mit physikalisch
indizierten Caches mit physikalischen Identifizierungskennzeichen (Physically Indexed
Physically Tagged, PIPT). Der UPA-Cachekohärenz-Bereich ist auf die physikalisch
adressierten Caches beschränkt. Ein virtuell adressierter Primär-Cache, falls vorhanden, muß
vom UPA-Modul selbst kohärent gehalten werden. Ein Etag hat folgende Cache-Zustände
(Wechsel eines Etag-Zustands siehe Fig. 10):
-
- Invalid (I): Der Cache-Index und der Inhalt der Cache-Line sind ungültig.
-
- Shared Clean (S): Der Datenblock, der in der diesem Etag entsprechenden Cache-Line
gespeichert ist, wurde (A) von dem an diesen Cache gekoppelten Datenprozessor nicht
modifiziert, und kann (B) in einem oder mehreren weiteren Cache-Speichern gespeichert
werden.
-
- Exclusive Clean (E): Der Datenblock, der in der diesem Etag entsprechenden Cache-
Line gespeichert ist, wurde nicht von dem an diesen Cache gekoppelten Datenprozessor
modifiziert und ist in keinem weiteren Cache-Speicher gespeichert.
-
- Shared Modified (O): Der Datenblock, der in der diesem Etag entsprechenden Cache-
Line gespeichert ist, wurde von dem an diesen Cache gekoppelten Datenprozessor modifiziert
und kann in einem oder mehreren weiteren Cache-Speichern gespeichert werden.
-
- Exclusive Modified (M): Der Datenblock, der in der diesem Etag entsprechenden
Cache-Line gespeichert ist, wurde von dem an diesen Cache gekoppelten Datenprozessor
modifiziert und ist in keinem weiteren Cache-Speicher gespeichert.
-
In einer weiteren Ausführung der vorliegenden Erfindung wird, für Systeme, die mit
Protokollen der "reflektierenden Speicher" arbeiten, werden nur 4 "MESI" Zustände
verwendet. Der O-Zustand wird deshalb nicht benötigt, weil in einem reflektierenden-
Speichersystem immer dann, wenn ein erster Datenprozessor für einen Datenblock, der im
Cache eines zweiten Datenprozessors im M-Zustand (Exclusive Modified) gespeichert ist,
einen Cache-Miss verzeichnet, bei der Rückkopier-Operation, durch die der Datenblock vom
zweiten in den ersten Datenprozessor kopiert wird, auch der modifizierte Datenblock in den
Hauptspeicher kopiert wird. Im Falle einer regulären Rückkopier-Operation ist bei
Beendigung der Transaktion der Datenblock in beiden Datenprozessoren im S- (Shared
Clean) Zustand gespeichert. Im Falle einer Rückkopier- und Invalidierungs-Operation
befindet sich das Etag des anfordernden Datenprozessors für diesen Datenblock im E-
(Exclusive Clean) Zustand, und das entsprechende Etag des anderen Datenprozessors ist
ungültig. In einem Multiprozessor-System mit reflektierenden Speichern wird ein Datenblock
also nie geteilt, solange er sich in einem modifzierten Zustand befindet. Die Eliminierung des
O-Zustandes wird dem Datenprozessor vom System-Controller durch eine bestimmte
Rückkopier-Transaktion angezeigt, die S_CPB_MSI_REQ heißt (an Stelle von S_CPB_REQ)
und den Datenprozessor veranlaßt, die M → 5 -Umwandlung anstatt der M → O -
Umwandlung durchzuführen.
-
Die Einheit der Cachekohärenz ist eine Blockgröße von 64 Bytes. Bei kohärenten
Lese-/Schreib-Transaktionen werden Daten ausschließlich in Blöcken von 64 Bytes unter
Verwendung von 4 Quad-Wörtern übertragen
-
Es gibt keine Anforderung an die Mindest- oder Höchstgröße eines Caches. Die Größe
des Caches in einem UPA-Master-Port wird durch die Initialisierungssoftware des Systems
bestimmt, und die Anzahl der Bits im Cache-Index wird in eine Cache-Index-Maske (CIM)
194 im Register SC Config 190 des System-Controllers geschrieben.
-
Der System-Controller 110 (SC) hält die Cachekohärenz von UPA-Master-Caches
aufrecht, indem er in Reaktion auf Lese- oder Schreibzugriff auf geteilte oder modifizierte
Datenblöcke anderer UPA-Ports Rückkopier-Invalidierungs-Transaktionen an spezifische
UPA-Ports übermittelt. Wird ein Datenblock von einem UPA-Port zum ersten Mal
angesteuert, dann wird der Datenblock diesem UPA-Port exklusiv zugeordnet, so daß er
später direkt von diesem UPA-Port beschrieben werden kann, ohne daß dieser beim
Verbindungsmodul den Schreibzugriff anfordern muß. Wird dieser Block später von einem
anderen UPA-Port angesteuert, dann schickt der System-Controller 110 die entsprechende
Rückkopier-Invalidierung an den ersten UPA-Port und führt einen Cache-zu-Cache
Datentransfer zum anfordernden UPA-Port durch. Allgemein gewährleistet der System-
Controller 110 den exklusiven Besitz von Speicherinhalten, indem alle weiteren Kopien der
Daten ungültig gemacht werden, bevor dem anfordernden UPA-Master-Port der
Schreibzugriff gestattet wird, und bei jedem nachfolgenden Laden oder Speichern durch jeden
anderen UPA-Master-Port wird immer auf den aktuellen Wert dieser Daten zugegriffen,
ungeachtet dessen, welcher Master diese Daten zuletzt gespeichert hat.
-
In einer weiteren "Ausführungs-" Variante ist es dem die Speicherung ausführenden
Prozessor gestattet fortzufahren, noch bevor alle andern Kopien ungültig gemacht sind. In
einer solchen Ausführung können sich anderen Prozessoren in ihren Caches vorübergehend
weiterhin die alten Werte zeigen, bis die anstehende Invalidierungs-Transaktion wirksam
wird. Die Speicher-Misses von Prozessoren mit anstehenden Invalidierungen werden jedoch
verzögert, und das Verbindungsmodul hält sie so lange zurück, bis die Invalidierungen in
diesen Prozessoren vollendet sind. Durch diese Verbesserung muß der System-Controller
nicht warten, bis alle Invalidierungs-Antwortnachrichten eingegangen sind. Aber auch in
dieser verbesserten Version sind Speicherinhalte immer noch exklusiv (d. h. nur ein Prozessor
kann zu einem Zeitpunkt einen Cache-Block beschreiben), und es gibt zu keiner Zeit
vorübergehende Zustände zwischen zwei Speicherungen des selben Datenblocks durch zwei
Prozessoren.
-
Wie in den Fig. 7 und 9 zu sehen ist beschränkt das Cachekohärenz-Protokoll der
vorliegenden Erfindung anstehende Rückkopier-Invalidierungs-Transaktionen vom System-
Controller 110 zum UPA-Port auf eine Transaktion pro UPA-Port, und der UPA-Port muß die
Anforderung mit hoher Priorität abarbeiten, indem er dieser den Vorzug vor dem lokalen
Zugriff auf den kohärenten Cache einräumt.
-
Das Cachekohärenz-Protokoll unterstützt Writeback-Caches und beschränkt
anstehende Dirty-Victim-Rückschreibe-Transaktionen auf eine solche Transaktion pro UPA-
Port. Um die Bearbeitung des UPA-Ports von zum Dirty Victim gewordenen Lines zu
vereinfachen, die im kohärenten Bereich gespeichert bleiben müssen, bis die Rückschreibe-
Transaktion beendet ist, gestattet das Cachekohärenz-Protokoll dem UPA-Master-Port nicht,
die Rückschreibe-Transaktion zu widerrufen, wenn das Dirty Victim vor deren Beendigung
ungültig gemacht wird. Statt dessen ist der System-Controller dafür zuständig zu veranlassen,
daß das Rückschreiben abgebrochen (gelöscht) werden muß, wenn die Rückschreibe-
Transaktion auftaucht.
-
In einer weiteren Ausführung wird das gleichzeitige Ausführen mehrerer
Rückschreibe-Transaktionen unterstützt, indem in den Prozessoren mehrere Rückschreibe-
Puffer sowie eine gleich große Anzahl von temporären Dtag-Puffern im System-Controller
vorhanden sind. Das Protokoll ist auch für das gleichzeitige Ausführen mehrerer
Rückschreibe-Transaktionen verwendbar. In der bevorzugten Ausführung wird nur mit einer
anstehenden Rückschreibe-Transaktion gearbeitet, weil der bevorzugte Datenprozessor nicht
mehrere anstehende Cache-Miss-Transaktionen ausgibt. Für die alternative Ausführung müßte
ein Datenprozessor verwendet werden, der mit mehreren anstehenden Cache-Misses arbeitet.
Um in Multiprozessor-Systemen Snoop-Interferenzen mit dem Zugriff eines
Prozessors auf seinen kohärenten Cache zu vermeiden wird vom System-Controller 110 für
jeden cachenden Master-UPA-Port eine Kopie des Cache-Indexes (genannt Dtag-Index)
unterhalten, in der die Dtag-Anordnung (Dtags) kopiert ist, die eine Spiegelung der Etags des
UPA-Ports darstellt. Die Dtags verwenden 4 "MOSI"-Cache-Zustände, wobei die E- und M-
Zustände der Etags zusammengeführt sind. Die Dtags unterstützen Direct-Mapped-Caches.
Für jeden Etag-Eintrag gibt es einen entsprechenden Dtag-Eintrag, so daß bei einer
Einsichtnahme in die Dtags durch den System-Controller 110 der Zustand des entsprechenden
Etags für einen Datenblock korrekt angezeigt wird, ohne daß dabei der Zugriff eines
Prozessors auf seine Etags gestört wird. Die Dtags können folgende Zustände einnehmen:
-
- Invalid (I): Die Inhalte von Cache-Index und Cache-Line sind ungültig.
-
- Shared Clean (S): Der in der Cache-Line, die diesem Etag entspricht, gespeicherte
Datenblock wurde (A) von dem an diesen Cache gekoppelten Datenprozessor nicht
modifiziert, und kann (B) in einem oder mehreren weiteren Cache-Speichern gespeichert sein.
-
- Shared Modified (O): Der in der Cache-Line, die diesem Etag entspricht, gespeicherte
Datenblock wurde von dem an diesen Cache gekoppelten Datenprozessor modifiziert und
kann in einem oder mehreren weiteren Cache-Speichern gespeichert sein.
-
- Exclusive and Potentially Modifed (M): Der in der Cache-Line, die diesem Etag
entspricht, gespeicherte Datenblock kann von dem an diesen Cache gekoppelten
Datenprozessor modifiziert worden sein und ist in keinem weiteren Cache-Speicher
gespeichert.
-
Der E-Zustand wird in den Dtags aus folgendem Grund nicht verwendet. Wenn ein
Datenprozessor einen Cache-Miss verzeichnet und mit der "Lesen-zum-Übernehmen"
Transaktions-Anforderung Daten anfordert, dann empfängt der UPA-Port des
Datenprozessors das angeforderte Datenpaket und setzt seinen Etag-Zustand auf M, während
das entsprechende Dtag vom System-Controller ebenfalls auf den Zustand M gesetzt wird.
Der System-Controller "nimmt" also "an", daß der Datenprozessor den angeforderten
Datenblock modifizieren wird und speichert für die Cache-Line einen Zustandswert ab, der
anzeigt, daß der Datenblock modifiziert worden ist, noch der Datenprozessor den
angeforderten Datenblock tatsächlich modifiziert haben kann. Daraus folgt, daß, wenn ein
Datenprozessor einen Datenblock modifiziert, den er auf eine Transaktionsanforderung
P_RDO_REQ erhalten hat, dann ist es nicht nötig, daß er eine Transaktion an den System-
Controller verschickt, da im entsprechenden Dtag des System-Controllers für die Cache-Line ·
schon der M-Zustand verzeichnet ist. Hinzu kommt, daß, wenn aufgrund einer
fehlgeschlagenen Ladeanforderung ein Datenblock im Cache eines anfordernden
Datenprozessors mit einem Etag im E-Zustand und einem Dtag im M-Zustand abgespeichert
wird, der Datenprozessor keine Transaktionsanforderung an den System-Controller ausgibt,
wenn er den Datenblock danach modifiziert, weil sich das Dtag schon im M-Zustand
(Exclusive Modified) befindet. Das Integrieren des E-Zustands des Dtags in den M-Zustand
wird hier als "first write" - Verbesserung bezeichnet, hierdurch wird die Anzahl der
Transaktionen, die von jedem Datenprozessor generiert werden müssen, erheblich reduziert.
-
Wie oben beschrieben wird in Systemen, die das Protokoll der "reflektierenden
Speicher" verwenden, der O-Zustand nicht benötigt, da ein modifzierter Datenblock niemals
geteilt wird. Daraus folgt, daß in einem Multiprozessor-System mit reflektierenden Speichern
für Dtags nur 3 "MSI"-Zustände verwendet werden.
-
Der System-Controller unterstützt das Cachen durch einen Ein-/Ausgabe-UPA-Port.
Hat der Ein-/Ausgabe-UPA-Port z. B. N voll assoziative Cache-Puffer, dann hat der System-
Controller eine entsprechende Anzahl voll assoziativer Dtags. Die Unterstützung des Cache-
Speichers eines Ein-/Ausgabe-UPA-Ports durch den System-Controller ist von den Ein-
/Ausgabebussen und der mit dem Ein-/Ausgabe-UPA-Port verbundenen Ein-/Ausgabe
unabhängig.
-
Wie in Fig. 9 zu sehen ist verfügt die vorliegende Erfindung über einen speziellen
Mechanismus für das Rückschreiben verschobener Cache-Datenblocks, genannt "Dirty
Victims", wobei sich "dirty" auf den Umstand bezieht, daß der verschobene Datenblock
modifizierte Daten enthält, die von dem mit dem UPA-Port verbundenen Datenprozessor
geschrieben wurden, und "Victim" sich auf das Verschieben eines Cache-Datenblocks beim
Zugriff des Datenprozessors auf andere Daten bezieht, die in der selben Cache-Line
abgebildet sind wie der Datenblock, der verschoben wird. Der Cache-Rückschreibe-
Mechanismus der vorliegenden Erfindung macht es möglich, daß die Rückschreibe-
Transaktion unabhängig von der Transaktion durchgeführt wird, mit der ein neuer Datenblock
in der Cache-Line gespeichert wird, die vorher durch das Dirty Victim besetzt war, wodurch
die üblicherweise mit Rückschreibe-Transaktionen verbundenen Anforderungen an die
Reihenfolge vermieden werden.
-
In Fig. 9 sind die Etags 132 des Prozessors dargestellt, sowie der eine Rückschreibe-
Puffer 280 des Prozessors, die kopierten Einträge in den Dtag-Arrays des System-Controllers
110, und die temporären Dtag-Puffer (DtagTBs) 282 innerhalb des System-Controllers für
jeden cachenden UPA-Master-Port. Der DtagTB fungiert als der n+1ste Dtag-Eintrag (wobei
n die Anzahl der Etag-Einträge im Etag-Array ist) und speichert vorübergehend den Dtag-
Zustand für einen neuen Cache-Block, wenn ein Cache-Miss einen "dirty" Block aus dem
Cache verschiebt. Die Cache-Fill (Lese-) Transaktion wird unabhängig von der Rückschreibe-
Transaktion des Dirty Victim durchgeführt, um unerwünschte Cache-Misses zu minimieren.
-
Wird die Lese-Transaktion zuerst beendet, dann wird die Information über den
entsprechenden neuen Dtag-Zustand im DtagTB gespeichert. Sobald dann die Rückschreibe-
Transaktions-Anforderung für den Dirty-Victim-Block ausgeführt ist und die Dtag-
Aktualisierung für die Rückschreibe-Transaktion durchgeführt wird, wird der Inhalt des
DtagTB auf den Dtag-Eintrag für die entsprechende Cache-Line für diesen Prozessor
übertragen. Die Übertragung vom DtagTB auf das Dtag ist eine Dtag-Aktualisierung. Wird
die Rückschreibe-Transaktion zuerst beendet, dann wird der DtagTB nicht benötigt.
-
Immer dann, wenn das dem DtagTB entsprechende Zustandsbit gesetzt wird, wird der
DtagTB in alle Dtag-Einsichtnahmen und alle Dtag-Aktualisierungen mit eingeschlossen. Es
ist beispielsweise möglich, daß eine durch eine Cache-Fill-Operation aktualisierte Cache-Line
durch eine nachfolgende Transaktion modifiziert oder ungültig gemacht wird, allerdings noch
bevor die entsprechende Rückschreibe-Transaktion durchgeführt ist. Deshalb wird der
DtagTB in jeder Hinsicht genauso behandelt, wie jeder andere Dtag-Eintrag, wenn das
zugehörige Zustandsbit gesetzt ist und die ausgeführte Transaktion keine Rückschreibe-
Transaktion ist. Die Dtag-Aktualisierung für eine Rückschreibe-Transaktion bedingt, wie
oben dargestellt, daß der Inhalt des DtagTB in das reguläre Dtag-Array übertragen wird.
-
In Fig. 9 sind zwei Datenprozessoren 102-1 und 102-k zu sehen, die den selben
Datenblock A cachen. Bei Prozessor 1 ist Block A im O-Zustand (shared modified), und bei
Prozessor k ist er im S-Zustand (shared clean). Prozessor 1 mach Block A für einen neuen
Datenblock B zum Victim und verschiebt den "dirty" Block A in seinen Rückschreibe-Puffer
280-1, damit er in den Speicher geschrieben wird. Der System-Controller 110 hält den Dtag-
Zustand für Block B im DtagTB 282-1 fest, kennzeichnet den Puffer 282-1 als gültig und
wartet auf die Rückschreibe-Transaktion. Sollte Prozessor k ebenfalls Block A für Block B
zum Victim machen, dann würde in den Etags und in den Dtags für Prozessor k Block A
einfach durch Block B überschrieben werden, und der Rückschreibe-Puffer sowie der DtagTB
in Prozessor k würden nicht für eine Transaktion verwendet werden, da die Victim-Cache-
Line in Prozessor leer wäre.
-
Im folgenden ist eine Beispielsequenz für Ereignisse in einem System dargestellt, in
dem das Cachekohärenz-Protokoll der vorliegenden Erfindung sowie die zentralen Tag-
Kopien wie in Fig. 9 dargestellt verwendet werden.
-
Wie in Fig. 8 gezeigt gibt ein UPA-Master-Port ein Signal aus, um die Zuteilung des
UPA-Adreßbusses anzufordern (vorausgesetzt, daß ein gemeinsamer UPA-Adreßbus
verwendet wird). Der UPA-Master-Port erhält schließlich die Buszuteilung und schiebt ein
Anforderungspaket auf den UPA-Adreßbus (210).
-
Der System-Controller 110 empfängt die Anforderung (212), entschlüsselt die
Transaktionsart und die im Anforderungspaket enthaltene physikalische Adresse und
bestimmt, ob es sich um eine kohärente Lese- oder Schreib-Transaktions-Anforderung handelt
(214), der System-Controller nimmt für eine Einsichtnahme die vollständige Adresse in der
Snoop-Pipeline auf (216). Die Transaktion zählt nun als aktiviert, und sie bleibt aktiv, bis die
mit ihr einhergehende Aktualisierung für diese Transaktion beendet ist und die Nachricht
S_REPLY an den anfordernden UPA-Master-Port verschickt wird. Solange die Transaktion
aktiv ist verhindert der System-Controller, daß weitere eingehende Transaktionen mit dem
gleichen Cache-Index aktiv werden. Das Blockieren von Transaktionen wird im
nachfolgenden Kapitel "Aktivierung von Transaktionen" noch ausführlich beschrieben.
-
Befindet sich die in der kohärenten Transaktion angegebene Adresse im
Hauptspeicher, dann initiiert der System-Controller auch den Speicherzyklus (217). Befindet
sich die angegebene Adresse nicht im Hauptspeicher, dann wird die kohärente Transaktion
mit einer Fehlermeldung beendet.
-
Der System-Controller führt alle Ergebnisse der Einsichtnahme in die Dtags
zusammen und legt im nächsten Zyklus fest, wo die Daten für ein Lese-Transaktion
entnommen werden (222, 223). Sind die Daten dem Hauptspeicher zu entnehmen, dann fährt
der System-Controller mit dem Speicherzyklus fort. Sind die Daten dem Cache eines anderen
Master-UPA-Ports zu entnehmen, dann bricht der System-Controller den Speicherzyklus ab
und sendet eine S_REQ an mindestens einen der UPA-Ports, die über eine Kopie der
angeforderten Cache-Line verfügen (240). Die Art der einem Quell-UPA-Port übermittelten
S_REQ hängt von der Art der P_REQ des anfordernden UPA-Ports ab: für eine Anforderung
P_RDO_REQ ist die dem Quell-Port übermittelte S_REQ eine S_CPI_REQ; für eine
P_RDS_REQ oder P_RDSA_REQ ist die übermittelte S_REQ eine S_CPB_REQ; für eine
P_RDD_REQ ist die übermittelte S_REQ eine S_CPD_REQ.
-
Wird vom anfordernden UPA-Port die Exklusivbenutzung des bestimmten
Datenblocks angefordert (d. h. die Anforderung ist eine P_RDO REQ-Anforderung), dann
werden S_REQ-Invalidierungs-Anforderungen an alle Ports verschickt, die über eine Kopie
der angeforderten Cache-Line verfügen. Der System-Controller wartet auf eine P_REPLY
von den UPA-Ports, an die eine S_REQ verschickt wurde, und generiert erst dann die
S_REPLY für den anfordernden UPA-Port (246).
-
Davon abweichend kann der System-Controller 110 die S_REPLY für den
anfordernden UPA-Port generieren, nachdem er die P_REPLY vom Quell-UPA-Port erhalten
hat, ohne die P_REPLYs von anderen UPA-Ports, an die eine S_REQ verschickt wurde,
abzuwarten. Die kohärente Lese-Transaktion wird jedoch nicht durchgeführt und aus dem
Array 200 des System-Controllers für den Zustand noch anstehender Transaktionen, in dem
aktive Transaktionen verzeichnet sind, entfernt, bevor der System-Controller alle P_REPLYs
Von den UPA-Ports, an die eine S_REQ verschickt wurde, erhalten hat. Diese zweite Methode
wird bevorzugt, da sie Wartezeiten verringert. Der anfordernde Datenprozessor erhält die
angeforderten Daten früher, wenn das zweite Cachekohärenz-Protokoll verwendet wird.
Zudem werden die Cache-Invalidierungs-S_REQ-Transaktionen parallel zur
Datenübertragung an den anfordernden UPA-Port durchgeführt, wobei die verfügbaren
Ressourcen des Systems effizient genutzt werden.
-
Die Dtags werden gleichzeitig für alle UPA-Ports geschrieben, die bei der
Einsichtnahme einen Treffer gemeldet haben. Die MOSI-Zustandsbits in den Dtags werden
mit dem neuen Wert aktualisiert.
-
Stehen die Daten für die Übertragung zum anfordernden UPA-Port bereit, dann
verschickt der System-Controller die bestätigende S_REPLY an den anfordernden UPA-Port,
und die Daten werden über den UPA-Datenbus entweder aus dem Quell-Cache oder aus dem
Hauptspeicher übertragen.
-
Ist die aktive Anforderung eine Rückschreibe-Anforderung, dann werden die
Einsichtnahme in die Dtags und deren Aktualisierung nur für den anfordernden Master-UPA-
Port durchgeführt, und zwar vor dem Generieren der S_REPLY für diesen, mit der entweder
die Daten auf den UPA-Bus verschoben werden oder die Rückschreibe-Transaktion
abgebrochen wird.
-
Ist die aktive Transaktion eine Schreib-Invalidierungs-Anforderung, dann werden
Einsichtnahme und Aktualisierung genauso durchgeführt, wie bei einer kohärenten Lese-
Anforderung. Der System-Controller verschickt eine Invalidierungs-S_REQ an alle UPA-
Ports, die bei der Einsichtnahme einen Treffer gemeldet haben. Die S_REPLY an den
anfordernden Master-UPA-Port, die bewirkt, daß die Daten auf den UPA-Datenbus
verschoben werden, wird zurückgehalten, bis alle P_REPLY-Bestätigungen für
Invalidierungen eingegangen sind. Davon abweichend kann der System-Controller 110 die
S_REPLY an den anfordernden UPA-Port generieren, nachdem er, wenn überhaupt, nur vom
Quell-UPA-Port die P_REPLY erhalten hat, ohne auf die P_REPLYs der anderen UPA-Ports,
an die S_REQs verschickt wurden, abzuwarten. Die kohärente Schreib-Transaktion
wird jedoch nicht beendet und aus dem Array 200 des System-Controllers für den Zustand
noch anstehender Transaktionen, in dem aktive Transaktionen verzeichnet sind, entfernt,
bevor der System-Controller alle P_REPLYs von den UPA-Ports, an die eine S_REQ
verschickt wurde, erhalten hat. Diese zweite Methode wird bevorzugt, da sie Wartezeiten
verringert.
-
In Fig. 10 ist das Datenpaket-Format kohärenter P_REQ und S_REQ - Transaktions-
Anforderungs-Pakete dargestellt. Das NDP (No Dtag Present) - Bit in S_REQ -
Anforderungspaketen wird vom System-Controller nur in solchen Systemen gesetzt (d. h. auf
"1"), die keine Dtags verwenden. In Systemen, die Dtags verwenden, wird das NDP-Bit
gelöscht (d. h. auf "0" gesetzt). Die Cache-Controller in allen Datenprozessoren prüfen in jeder
empfangenen S_REQ das NDP-Bit um festzustellen, ob ein standardgemäßer Cache-Zugriffs-
Modus oder ein beschleunigter Cache-Zugriffs-Modus zu verwenden ist.
Zweitor-Cachesteuerun Sschaltung
-
Die Funktionsweise eines standardgemäßen Controllers aus dem Stand der Technik
wurde im vorangegangenen Text beschrieben, im Kapitel "Hintergrund der Erfindung", unter
Bezugnahme auf Fig. 11.
-
In Fig. 12 ist ein Blockdiagramm einer Zweitor-Cachespeichervorrichtung 440
dargestellt, die mit einem Datenprozessor 402 und einem System-Controller 110 verbunden
ist. Der Cache-Speicher beinhaltet ein Cache-Line-Array 404 und ein Cache-Tag-Array 406.
Das Cache-Line-Array 404 beinhaltet 2CS Cache-Lines 410, wobei CS die Anzahl der
Adreßbits ist, die benötigt wird, um eine Cache-Line 410 eindeutig zu identifizieren. In jeder
Cache-Line 410 ist ein Datenblock von festgelegter Größe gespeichert, wie z. B. 64 Bytes. Das
Cache-Tag-Array 406 beinhaltet 2CS Cache-Tags 412.
-
Die Cache-Schaltung 444, auch Cache-Controller genannt, steuert die Funktion des
Cache-Speichers 440. Eine Komparatorschaltung 445 vergleicht einen Bereich der in einer an
den Cache-Speicher gerichteten Anforderung enthaltenen Adresse mit dem in einem
ausgewählten Cache-Tag 412 gespeicherten Adreß-Tag, und sie überprüft den im
ausgewählten Cache-Tag enthaltenen Cache-Zustandswert um festzustellen, ob das Adreß-
Tag gültig ist.
-
Die Zustandsaktualisierungsschaltung 448 ist eine Schaltung für das Aktualisieren der
Adresse und der Information über den Cache-Zustand, die in dem Cache-Tag 412 gespeichert
sind, das von der in einer Cachespeicher-Anforderung enthaltenen Adresse ausgewählt wird.
Die Cache-Line-Zugriffs-/Aktualisierungs-Schaltung 450 ist eine Schaltung für das Lesen und
Schreiben von Daten aus einer bzw. in die Cache-Line 410, die von der in einer
Cachespeicher-Anforderung enthaltenen Adresse ausgewählt wird.
-
Der Cache-Controller 444 beinhaltet eine Arbiter-Schaltung 446, die vom System-
Controller 110 und vom Datenprozessor 402 kommende Speicherzugriffs-Anforderungen
koordiniert. Ein Demultiplexer 452 verbindet den internen Datenbus 454 des Cache-
Controllers mit entweder einem zum Datenprozessor 402 gehörigen Datenbus 456 oder einem
zum Verbindungsmodul gehörigen Datenbus 458, je nachdem, von welchem Bauelement die
gerade vom Cache-Controller 444 abgearbeitete Cache-Zugriffsanforderung stammt. Die vom
Demultiplexer 452 hergestellte Datenbusverbindung basiert auf einem DP/SC -
Betriebsartensignal, das vom Arbiter 446 generiert wird.
-
Da die vorliegende Erfindung ein System und ein Verfahren zum Beschleunigen von
Cachespeicher-Operationen durch einen Taktzyklus oder zwei Taktzyklen im Falle eines
Cache-Hits darstellt, ist in Fig. 12 die Schaltung für das Beantworten eines Cache-Miss durch
Weiterleiten der Speicherzugriffs-Anforderung an eine andere Speichervorrichtung, wie z. B.
den Hauptspeicher des Systems, nicht gezeigt.
-
Wird entweder vom Datenprozessor 402 oder dem System-Controller 110 eine
Cachespeicher-Zugriffsoperation initiiert, dann werden dem Cache-Speicher 440 ein
Adreßwert und ein Steuersignal übermittelt. Der Adreßwert beinhaltet eine Sequenz von
Adreßbits, die hier zum besseren Verständnis in die drei Gruppen {A}, {B} und {C} unterteilt
werden. Der volle Adreßwert, der dem Cache-Speicher übermittelt wird, wird in dieser Schrift
als {ABC} dargestellt, wobei {A} die signifikantesten Adreßbits repräsentiert, {B} eine
Menge von Adreßbits mittlerer Signifikanz, und {C} eine Menge der am wenigsten
signifikanten Adreßbits repräsentiert.
-
Als Beispiel sei angenommen, das ein System, das einen 41-Bit-Adreßwert PA< 40 : 0>
verwendet, wobei PA "physikalische Adresse" bedeutet, und wobei jeder einzelne Adreßwert
ein bestimmtes Byte im Hauptspeicher des Systems darstellt. Hat nun dieses System einen
Datenprozessor mit einem Cache-Speicher 440, dessen Cache-Line-Größe 64 Byte und dessen
Cache-Speichergröße 512 KByte beträgt, dann repräsentiert {A} die 21 signifikantesten
Adreßbits PA< 40 : 19> , {B}die 13 Adreßbits mittlerer Signifikanz PA< 18 : 6> und {C} die 6
am wenigsten signifikanten Adreßbits PA< 5 : 0> .
-
Der Cache-Speicher 440 in diesem Beispiel hat 2~3 Cache-Lines 410 und 213
entsprechende Cache-Tags 412. In jedem Cache-Tag 412 sind der Zustandswert einer Cache-
Line und ein Adreß-Tag gespeichert. Der Zustandswert der Cache-Line zeigt an, ob in der
entsprechenden Cache-Line gültige Daten gespeichert sind und ob der in der entsprechenden
Cache-Line 410 gespeicherte Datenblock ausschließlich in diesem Cache-Speicher enthalten
ist oder mit mindestens einem anderen Cache-Speicher geteilt wird. Der Cache-Zustandswert
zeigt auch an, ob in der entsprechenden Cache-Line modifizierte Daten gespeichert sind, die
in den Hauptspeicher zurückgeschrieben werden müssen, wenn der in der Cache-Line 410
gespeicherte Datenblock aus dem Cache-Speicher entfernt wird. Das Adreß-Tag im Cache-
Tag 412 beinhaltet die {A}-Adreßbits PA< 40 : 19> , die neben der Position des Cache-Tag im
Cache-Tag-Array 406 den Basisort des Datenblocks im Hauptspeicher eindeutig
identifizieren.
-
In der vorliegenden Erfindung haben alle Cache-Speicher von Datenprozessoren zwei
Ports. Dadurch können sowohl der Datenprozessor 402 und der System-Controller 110
Speicherzugriffs-Anforderungen an den Cache-Speicher 440 des Datenprozessors
verschicken. In der vorliegenden Erfindung haben Cache-Zugriffsanforderungen des System-
Controllers (die im S_REQ-Puffer 442 abgelegt werden) immer Priorität vor Cache-
Zugriffsanforderungen des Datenprozessors 402. Immer dann, wenn eine Cache-
Zugriffsanforderung vom Arbiter 446 zur Verarbeitung ausgewählt wird, wird die
ausgewählte Anforderung zu Ende verarbeitet. Ist diese Anforderung beendet, dann wird,
wenn sowohl vom Datenprozessor als auch vom System-Controller Anforderungen anstehen,
vorn Arbiter 446 immer die Anforderung des System-Conirollers ausgewählt und an die
andere Cache-Schaltung innerhalb des Cache-Controllers 444 weitergeleitet. Der Arbiter 446
ist also eine Kodiervorrichtung mit festgelegter Priorität. Der Arbiter gibt an den
Demultiplexer 452 ein DP/SC - Betriebsartensignal aus, das die Lenkung von Datensignalen
zu und vom internen Datenbus 454 des Cache-Controllers steuert.
-
Es gibt zwei bevorzugte Ausführungen des System-Controllers: Die eine enthält Dtags
wie oben beschrieben, die andere enthält keine Dtags. Wie in Fig. 10 dargestellt ist in jeder
Cache-Speicher-Zugriffsanforderung (an anderen Stellen dieser Schrift auch S_REQs
genannt) des System-Controllers 110 an einen beliebigen UPA-Port ein NDP (no Dtag
present) -Betriebsartenflag enthalten. Das NDP-Flag wird in Systemen, in denen der System-
Controller Dtags enthält, auf "0" gesetzt, in Systemen, in denen der System-Controller keine
Dtags enthält, wird es auf "1" gesetzt. Das NDP-Flag ist ein Betrietriebsarten-Flag, da es in den
Cache-Controllern aller an den System-Controller 110 gekoppelten Datenprozessoren 402 die
Betriebsart steuert.
-
Wie in Fig. 12 zu sehen ist haben die Cache-Controller aller an den System-Controller
gekoppelten Datenprozessoren zwei Betriebsarten: Eine Standard-Betriebsart, bei der ein
Cache-Hit/Miss - Signal generiert wird, bevor eine Lese-/Schreib-Transaktion zu den Cache-
Speicher-Arrays 404, 406 fortgesetzt werden kann, und eine beschleunigte Betriebsart, bei der
die Schaltung für das Generieren des Cache-Hit/Miss - Signals unterdrückt wird und der
Zugriff auf das Cache-Speicher-Array fortgesetzt wird, ohne das Cache-Hit/Miss - Signal
abzuwarten, wodurch die Verarbeitung der Cache-Zugriffsanforderung um einen oder zwei
Taktzyklen beschleunigt wird.
-
Im Einzelnen sind die Cache-Speicher-Operationen, die durch das Setzen des NDP auf
"0" beschleunigt werden, der Schreib-Zugriff auf das Cache-Tag-Array 406 zum Speichern
von aktualisierten Cache-Zustandswerten und neuen Adreß-Tag-Werten, sowie der Lese-
/Schreibzugriff auf das Cache-Line-Array 404 für sowohl das Lesen von Daten aus dem
Cache-Speicher und das Schreiben von Daten in den Cache-Speicher. Es ist zu bemerken, daß
ein Lesezugriff auf das Cache-Tag-Array 406 immer unmittelbar nach der Initialisierung der
Verarbeitung aller Zugriffsanforderungen erfolgt und deshalb ein Lesezugriff auf das Cache-
Tag-Array 406 durch die vorliegende Erfindung nicht beschleunigt wird.
-
Jedes Mal, wenn ein System-Controller, der Dtags verwendet, über den UPA-Port 104
eine Cache-Zugriffsanforderung auf den Cache-Speicher verschickt, dann hat es das
entsprechende Dtags im Dtag-Array 134 für den Datenprozessor 402 bereits eingesehen und
anhand des Dtag festgestellt, daß der Datenblock, auf den zugegriffen werden soll,
gegenwärtig im Cache-Speicher 440 des Datenprozessors 402 gespeichert ist. Anders
ausgedrückt verschickt der System-Controller 110 niemals eine Cache-Speicher-
Zugriffsanforderung an einen UPA-Port 104, bevor es anhand der Dtags 134 bereits
festgestellt hat, daß der Datenblock, auf den sich der in der Zugriffsanforderung enthaltene
Adreßwert bezieht, in dem vom UPA-Port 104 unterstützten Cache-Speicher 440 enthalten ist.
-
Daraus folgt, daß der Cache-Controller 444 des Empfänger-UPA-Ports 104 nicht
feststellen muß, ob ein Cache-Hit vorliegt, wenn er vom System-Controller eine Cache-
Zugriffsanforderung enthält, bei der das NDP-Bit gleich "0" ist.
-
Andererseits ist es möglich, daß, wenn ein System-Controller, der keine Dtags
verwendet, eine Cache-Zugriffsanforderung auf einen Cache-Speicher 440 über dessen UPA-
Port 104 verschickt, der Cache-Speicher 440 den der Cache-Zugriffsanforderung
entsprechenden Datenblock nicht enthält. Deshalb muß der Cache-Speicher 440 seine
standardgemäße Cache-Hit/Miss - Kontrolle durchführen, bevor eine solche Cache-
Zugriffsanforderung verarbeitet wird.
-
Wie in Fig. 12 dargestellt empfängt der Arbiter 446 Cache-Zugriffsanforderungen und
gibt in Reaktion auf diese vier Signale aus: eine Adresse {ABC}, eine Transaktionsart (auch
Befehl genannt), ein NDP-Betriebsartenflag und ein DP/SC - Betriebsartensignal.
Das NDP-
Betriebsartenflag wird an den Komparator 445 sowie an clie Zustands-Aktualisierungs-
Schaltung 448 und die Cache-Line-Zugriffs-/Aktualisierungs-Schaltung 450 übermittelt. Das
NDP-Betriebsartenflag ist für Zugriffsanforderungen des Datenprozessors immer auf "1"
gesetzt, bei Zugriffsanforderungen des System-Controllers wird es auf den Wert gesetzt, den
das darin enthaltene NDP-Flag hat.
-
Ist das NDP-Betriebsartenflag auf "1" gesetzt, dann funktionieren die Teilschaltungen
des Cache-Controllers 444, die den Komparator 445, die Zustands-Aktualisierungs-Schaltung
448 und die Cache-Line-Zugriffs-/Aktualisierungsschaltung 450 beinhalten, in ihrer
standardgemäßen Betriebsart, die im Kapitel "Hintergrund der Erfindung" unter Bezugnahme
auf Fig. 11 beschrieben ist.
-
Ist das NDP-Betriebsartenflag auf "0" gesetzt, darm wird die standardgemäße
Betriebsart des Komparators445 unterdrückt und statt dessen die Ausgabe des Cache-Hit/Miss
- Signals durch den Komparator 445 unmittelbar auf den Hit-Wert (also "1") gesetzt. Ist das
NDP-Betriebsartenflag auf "0" gesetzt, dann wird die Funktion der Zustands-Aktualisierungs-
Schaltung 448 und der Cache-Line-Zugriffs-/Aktualisierungsschaltung 450 beschleunigt.
Konkret bedeutet das, daß die Zustands-Aktualisierungs-Schaltung 448 und die Cache-Line-
Zugriffs-/Aktualisierungsschaltung 450 standardgemäß einen sich über mehrere Taktzyklen
erstreckenden Wartezustand einnehmen, während sie darauf warten, daß die {B}-Adreßbits
auf einen der Cache-Tags und eine der Cache-Lines zugreifen und der Komparator 445 ein
Hit/Miss - Signal generiert. Die Dauer dieses Wartezustands wird um einen oder zwei
Taktzyklen - je nach Schaltung und Taktzyklus, die konkret verwendet werden - verringert,
wenn das NDP-Betriebsartenflag auf "1" gesetzt ist. Daraus folgt, daß die Funktion des
Cache-Speichers in jedem der Datenprozessoren 402 für vom System-Controller empfangene
S_REQs beschleunigt wird, wenn der System-Controller Dtags verwendet.
-
Wird von einem System-Controller, der Dtags verwendet, eine Rückkopier-
Transaktion (z. B. einer S_CPB_REQ - Cache-Zugriffsanforderung) initiiert, dann werden die
Daten, die in der Cache-Line gespeichert sind, die durch die in der Cache-
Zugriffsanforderung enthaltenen {B}-Adreßbits identifiziert wird, von einem Quell-Cache-
Speicher 440 an den anfordernden Datenprozessor ausgegeben, ohne das entsprechende
Adreß-Tag und den im Cache-Tag gespeicherten Cache-Line-Zustandswert zu prüfen. Auf
ähnliche Weise wird in einer Cache-Line-Invalidierungs-Transaktion (z. B. einer S_INV_REQ
- Cache-Zugriffsanforderung) in dem von den {B}-Adreßbits identifizierten Cache-Tag ein
neuer Cache-Zustandswert, der einen ungültigen Zustandswert anzeigt, gespeichert, ohne das
entsprechende Adreß-Tag zu prüfen.
Weitere Ausführungen
-
Ungeachtet dessen, daß die vorliegende Erfindung unter Bezugnahme auf einige
wenige konkrete Ausführungen beschrieben wurde, ist die Beschreibung als
Veranschaulichung der Erfindung zu verstehen, nicht aber als Begrenzung des Inhalts der
Erfindung. Einem Fachmann können sich verschiedene Modifikationen erschließen, die
innerhalb des Umfangs der in den nachfolgenden Patentansprüchen definierten Erfindung
liegen.