-
Gebiet der Erfindung
-
Die vorliegende Erfindung betrifft
Verfahren und eine Vorrichtung für
parallele Multiprozessor-Computersysteme und insbesondere eine Multiprozessor-Node-Controller-Schaltung
und ein entsprechendes Verfahren.
-
Hintergrund der Erfindung
-
Multiprozessorsysteme (MP-Systeme)
sind Rechensysteme, die aus einigen oder Hunderten oder Tausenden
von Verarbeitungselementen (PEs) bestehen. Wenngleich die Leistungsfähigkeit
eines MP-Computersystems mit zahlreichen Befehlen und zahlreichen
Daten ("Multiple-Instruction
Multiple-Data (MIMD)")
in seiner Fähigkeit
liegt, unabhängige
Code-Threads gleichzeitig auszuführen,
erschweren es die inhärent
asynchronen Zustände
der PEs (in bezug zueinander) in einem solchen System, eine deterministische
Ereignisreihenfolge zu erzwingen, wenn diese erforderlich ist. Programmfolgen,
die eine Interaktion zwischen mehreren PEs in der Art einer koordinierten
Kommunikation, eines sequentiellen Zugriffs auf geteilte Ressourcen,
gesteuerter Übergänge zwischen
parallelen Bereichen usw. einschließen, können eine Synchronisation (in
der Art einer Grenzen- und/oder Eureka-Synchronisation) der PEs
erfordern, um eine geeignete Ausführung zu gewährleisten.
Eine solche Erfindung, die Router, Netzwerke und eine Synchronisationsvorrichtung
und -verfahren einschließt,
ist in WO-A-99/26148 näher
beschrieben.
-
Einige MP-Systeme, die symmetrisch
verteilte Mikroprozessoren aufweisen, verwenden ein kohärentes Modell
eines Cache-Speichers. Ein solches System ist in WO-A-99/26144 beschrieben.
-
Es besteht auf dem Fachgebiet ein
Bedarf an einer verbesserten Node-Controller-Vorrichtung und einem
Verfahren zum Verbessern der Kommunikation zwischen verschiedenen
Abschnitten eines MP-Systems. Es besteht weiterhin ein Bedarf an
einem Node-Controller, der "gut
skaliert", wodurch
für kleine
und große
Systeme ausgezeichnete Vorteile in Hinblick auf die, Leistungsfähigkeit
in bezug auf Kosten erzielt werden. Es besteht weiterhin ein Bedarf
an einem Node-Controller,
der eine sehr hohe Flexibilität,
Leistungsfähigkeit
und Geschwindigkeit aufweist.
-
Gemäß einem ersten Aspekt sieht
die vorliegende Erfindung ein Multiprozessor-Computersystem vor mit:
mehreren
Node-Clustern, wobei jeder Node-Cluster einen Node-Controller umfaßt, und
einem
Interprozessor-Kommunikationsnetzwerk, das eine Verbindung zwischen
den mehreren Node-Controllern schafft,
wobei jeder Node-Controller
umfaßt:
eine
Crossbar-Einheit,
mehrere Ports, die jeweils mit der Crossbar-Einheit
in Wirkverbindung stehen und derart angeordnet sind, daß sie mit
jeweils entweder einem der mehreren Prozessoren, einem Speicher,
einem Input/Outputsystem oder dem Interprozessor-Netzwerk verbunden sind, wobei die mehreren
Ports einen ersten, einen zweiten und einen dritten Port aufweisen,
wobei der erste und der zweite Port von einem ersten, und der dritte
Port von einem zweiten Port-Typ sind, wobei der erste und der zweite
Port-Typ unterschiedliche Funktionen ausführen.
-
Gemäß einem zweiten Aspekt sieht
die vorliegende Erfindung einen Node-Controller in einem Multiprozessor-Computersystem mit
mehreren Nodes, die zu einem Node-Cluster verbunden sind und über ein
Interprozessor-Kommunikationsnetzwerk verbunden sind, vor, wobei
der Node-Controller mit dem Interprozessor-Kommunikationsnetzwerk
in Wirkverbindung steht und umfaßt:
eine Crossbar-Einheit,
mehrere
Ports, die jeweils mit der Crossbar-Einheit in Wirkverbindung stehen,
wobei die mehreren Ports einen ersten, einen zweiten und einen dritten
Port aufweisen, wobei der erste und der zweite Port von einem ersten, und
der dritte Port von einem zweiten Port-Typ sind, wobei der erste
und der zweite Port-Typ unterschiedliche Funktionen ausführen.
-
Gemäß einem dritten Aspekt sieht
die vorliegende Erfindung vor: ein Verfahren zum Verbinden von Einheiten
in einem Multiprozessor-Computersystem, das mindestens einen ersten
Node-Controller, einen zweiten Node-Controller, eine erste Vielzahl
an in Wirkverbindung mit dem ersten Node-Controller stehenden Prozessoren, eine
zweite Vielzahl an mit dem zweiten Node-Controller in Wirkverbindung
stehenden Prozessoren, einen ersten mit dem ersten Node-Controller
in Wirkverbindung stehenden Speicher, ein erstes in Wirkverbindung
mit dem ersten Node-Controller stehendes Input/Outputsystem, und
ein Interprozessor-Kommunikationsnetzwerk aufweist, das eine Wirkverbindung
zwischen dem ersten Node-Controller
und dem zweiten Node-Controller schafft, wobei der erste Node-Controller
aufweist: einen mit dem ersten Speicher verbundenen Speicherport,
einen mit dem Input/Outputsystem verbundenen Input/Outputport, mehrere
unabhängige Prozessorports
mit einem ersten Prozessorport, der in Wirkverbindung mit einem
ersten Teilsatz der ersten Vielzahl von Prozessoren steht, und einem
zweiten Prozessorport, der in Wirkverbindung mit einem zweiten Teilsatz
der ersten Vielzahl von Prozessoren steht, mit folgenden Schritten:
Übertragen
von Daten zwischen dem Speicherport und dem ersten Prozessorport über eine
Crossbar-Einheit,
Übertragen
von Daten zwischen dem Speicherport und dem zweiten Prozessorport über die
Crossbar-Einheit,
Übertragen
von Daten zwischen dem Speicherport und dem Input/Outputport über die
Crossbar-Einheit, und
Übertragen
von Daten zwischen dem Speicherport und einem Netzwerkport über die
Crossbar-Einheit.
-
Gemäß einem anderen Aspekt sieht
die vorliegende Erfindung vor: einen Node-Controller für die Benutzung
in einem Multiprozessor-Computersystem gemäß dem ersten Aspekt, wobei
der Node-Controller umfaßt:
eine Crossbar-Einheit, und mehrere Ports, die jeweils in Wirkverbindung
mit der Crossbar-Einheit stehen und dazu ausgelegt sind, mit jeweils
entweder einem der mehreren Prozessoren, einem Speicher, einem Input/Outputsystem
oder dem Interprozessor-Kommunikationsnetzwerk
verbunden zu werden, wobei die mehreren Ports einen ersten, einen
zweiten und einen dritten Port aufweisen, wobei der erste und der
zweite Port von einem ersten Port-Typ, und der dritte Port von einem
zweiten Port-Typ
sind, wobei der erste und der zweite Port-Typ dazu ausgelegt sind,
unterschiedliche Funktionen auszuführen.
-
Eine Ausführungsform der vorliegenden
Erfindung sieht ein Verfahren und eine Vorrichtung vor, wodurch
eine hochparallele Verarbeitung mit einem Node-Controller ermöglicht wird,
der sowohl in kleinen als auch in großen Multiprozessorsystemen
verwendbar ist, und wodurch über
einen großen
Bereich von Systempreisen und -fähigkeiten
ausgezeichnete Vorteile in Hinblick auf die Leistungsfähigkeit
im Verhältnis
zu den Kosten ermöglicht
werden. Gemäß manchen
Ausführungsformen
ist dieser Node-Controller auf einem Einzelchip implementiert, der
zwei oder mehr Prozessorports, die jeweils Einzelprozessor- und/oder
Multiprozessor-Untersysteme (die jeweils optional lokale Cache-Speicher
aufweisen) unterstützen,
sowie einen oder mehrere der folgenden Port-Typen: Ein-/Ausgabe-(I/O)-Port,
Speicherport, Verzeichnisport und Netzwerkschnittstellen-Port bereitstellt.
-
Traditionell werden verteilte Mikroprozessoren
unter Verwendung eines getrennten Verzeichnis-Controllers zusammen
mit einem Speicher-Controller aufgebaut, die mit dem Netzwerk-Controller,
der Ein-/Ausgabeschnittstelle und Prozessoren verbunden sind. Gemäß verschiedenen
Ausführungsformen
der vorliegenden Erfindung befinden sich der Speicher- Controller (der wahlweise
einen Verzeichnis-Controller aufweist, der Cache-Kohärenzfunktionen
bereitstellt) und der I/O-Controller und der Netzwerk-Controller
alle auf einem Chip, der eine Anzahl von Prozessorports aufweist.
Hierdurch wird eine Anzahl von Vorteilen erzielt. Erstens sind Übertragungen
zwischen beliebigen der Nodes direkt, erfolgen auf dem Chip und
werden unter Verwendung eines einzigen Protokolls implementiert,
so daß die Übertragungen
nicht so viele Chip-Grenzen überqueren müssen. Zweitens
wird durch Einbetten von all diesem auf einem Einzelchip innerhalb
des Chips ein vollständiger
Crossbar-Entwurf verwendet. Hierdurch wird eine nicht blockierende
Kommunikation bereitgestellt, wodurch ein ferner Node direkt mit
dem Speicher des lokalen Nodes kommunizieren kann, während der
lokale Node mit seinem I/O-System kommuniziert, ohne daß zwischen
diesen Kommunikationen Warteschlangen auftreten. Dagegen würde bei
einem Bussystem eine der Kommunikationen auf den Abschluß der anderen warten
müssen.
Diese können
bei Ausführungsformen
der vorliegenden Erfindung, bei denen eine Crossbar-Einheit verwendet
wird, gleichzeitig ausgeführt
werden. Weiterhin ist es beim Einbauen aller dieser Einheiten in
einen Einzelchip kostenwirksamer, mit derselben Architektur ein
kleineres System aufzubauen, weil kein Zusatzaufwand dadurch auftritt,
daß eine
große
Anzahl zusätzlicher
Chips vorhanden ist, um eine große Systemkonfiguration zu unterstützen, wenn
kein großes
System aufgebaut wird.
-
Ausführungsformen der vorliegenden
Erfindung sehen ein Multiprozessor-Computersystem vor (beispielsweise
ein kleines Multiprozessorsystem mit nur zwei miteinander verbundenen
Node-Controllern oder ein Multiprozessorsystem mit bis zu Hunderten
oder Tausenden von Node-Controllern, die über ein Router-Netzwerk miteinander
verbunden sind). Eine solche Ausführungsform des Systems umfaßt einen
ersten Node-Controller,
einen zweiten Node-Controller, eine erste Anzahl von Prozessoren,
die wirkungsmäßig mit dem
ersten Node-Controller
gekoppelt sind, eine zweite Anzahl von Prozessoren, die wirkungsmäßig mit
dem zweiten Node-Controller
gekoppelt sind, einen ersten Speicher, der wirkungsmäßig mit
dem ersten Node-Controller gekoppelt ist, ein erstes Ein-/Ausgabesystem,
das wirkungsmäßig mit
dem ersten Node-Controller gekoppelt ist, und ein Interprozessor-Kommunikationsnetzwerk,
das wirkungsmäßig zwischen
den ersten Node-Controller und den zweiten Node-Controller geschaltet
ist. Gemäß dieser
Ausführungsform
umfaßt
der erste Node-Controller:
eine Crossbar-Einheit, einen Speicherport, der wirkungsmäßig zwischen
die Crossbar-Einheit und den ersten Speicher geschaltet ist, einen
Ein-/Ausgabeport, der wirkungsmäßig zwischen
die Crossbar-Einheit und das erste Ein-/Ausgabesystem geschaltet
ist, einen Netzwerkport, der wirkungsmäßig zwischen die Crossbar-Einheit
und das Interprozessor-Kommunikationsnetzwerk geschaltet ist, und
eine Anzahl unabhängiger
Prozessorports einschließlich
eines ersten Prozessorports, der wirkungsmäßig zwischen die Crossbar-Einheit
und einen ersten Teilsatz der ersten Anzahl von Prozessoren geschaltet
ist, und eines zweiten Prozessorports, der wirkungsmäßig zwischen
die Crossbar-Einheit und einen zweiten Teilsatz der ersten Anzahl
von Prozessoren geschaltet ist. Gemäß manchen Ausführungsformen
des Systems ist der erste Node-Controller auf einem einzigen integrierten
Schaltungschip hergestellt.
-
Gemäß manchen Ausführungsformen
des Systems ist der Speicher auf einer Anzahl einsteckbarer Speicher/Verzeichniskarten
gepackt, wobei jede Karte eine Anzahl von Speicherchips einschließlich eines
ersten Teilsatzes von Speicherchips, die dafür vorgesehen sind, Speicherdaten
zu halten, und eines zweiten Teilsatzes von Speicherchips, die dafür vorgesehen
sind, Verzeichnisdaten zu halten, aufweist. Weiterhin umfaßt der Speicherport
einen Speicherdatenport einschließlich eines Speicherdatenbusses
und eines Speicheradreßbusses,
die mit dem ersten Teilsatz von Speicherchips gekoppelt sind, und
einen Verzeichnisdatenport einschließlich eines Verzeichnisdatenbusses
und eines Verzeichnis adreßbusses,
die mit dem zweiten Teilsatz von Speicherchips gekoppelt sind. Gemäß manchen
dieser Ausführungsformen
ist das Verhältnis
zwischen (Datenplatz im ersten Teilsatz von Speicherchips) und (Datenplatz
im zweiten Teilsatz von Speicherchips) auf jeder der Speicher/Verzeichniskarten
auf einen Wert gelegt, der auf der Größe des Multiprozessor-Computersystems beruht.
-
Gemäß manchen Ausführungsformen
des Systems kombiniert die Crossbar-Einheit selektiv zwei seriell
empfangene Daten-Doppelwörter zu
einem einzigen Vierwort-Mikropaket zur Übertragung über die Crossbar-Einheit, wobei
jedes Doppelwort wenigstens 64 Datenbits enthält und das einzige Vierfachwort
wenigstens 128 Datenbits enthält.
-
Eine andere Ausführungsform der vorliegenden
Erfindung sieht ein Verfahren vor, das zusammen mit einem oder mehreren
der vorstehend beschriebenen Systeme verwendbar ist. Das Verfahren
beinhaltet das Übertragen
von Daten zwischen dem Speicherport und dem ersten Prozessorport,
zwischen dem Speicherport und dem zweiten Prozessorport, zwischen
dem Speicherport und dem Ein-/Ausgabeport und zwischen dem Speicherport
und dem Netzwerkport.
-
Manche Ausführungsformen des Verfahrens
umfassen weiterhin das direkte Übertragen
von Daten zwischen dem ersten Node-Controller und dem zweiten Node-Controller,
die über
das Interprozessor-Kommunikationsnetzwerk direkt miteinander verbunden
sind.
-
Manche Ausführungsformen des Verfahrens
umfassen weiterhin das indirekte Übertragen von Daten zwischen
dem ersten Node-Controller und dem zweiten Node-Controller über einen
Router-Chip, der mit einem oder mehreren anderen Node-Controllern verbunden
ist.
-
Kurzbeschreibung der Zeichnung
-
1 zeigt
eine Ausführungsform
des Multiprozessorsystems 100 gemäß der vorliegenden Erfindung.
-
2 zeigt
eine Ausführungsform
eines Node-Clusters 170 mit einem Router 76 mit
sechs Router-Verbindungen 72 und acht Prozessoren 74,
wobei vier Prozessoren 74 mit jedem der zwei Node-Controller 75 verbunden
sind.
-
3 zeigt
eine Ausführungsform
eines Multiprozessorsystems 300 mit einem einzigen Router 76.
-
4 zeigt
eine Ausführungsform
eines Multiprozessorsystems 400 ohne Router-Chips, jedoch
mit zwei Node-Controllern,
die miteinander verbunden sind.
-
5 zeigt
eine Ausführungsform
eines Multiprozessorsystems 500 gemäß der vorliegenden Erfindung.
-
6A zeigt
ein DIMM-Modul 600.
-
6B zeigt
eine DIMM-Führung 673 mit
vier DIMM-Modulen 600.
-
7A zeigt
den Node-Controller 75 gemäß einer Ausführungsform
der vorliegenden Erfindung.
-
7B zeigt
eine Ausführungsform
des Node-Controllers 75, wobei weiterhin Hinweise zum Datenfluß in den
Node-Controller 75 und
innerhalb von diesem enthalten sind. 7B zeigt
auch den Node-Controller 75, der innerhalb eines Einzelchips 475 implementiert
ist.
-
7C zeigt
ein Diagramm des Node-Controllers 75 innerhalb eines Nodes 370,
worin die verschiedenen Schnittstellenbreiten und Taktgeschwindigkeiten
für eine
Ausführungsform
der vorliegenden Erfindung dargestellt sind.
-
7D zeigt
Kopfteil- und Datenformate für
Nachrichten gemäß einer
Ausführungsform
des Node-Controllers 75.
-
7E zeigt
das Feldformat für
Quellen- und Ergänzungsfelder.
-
7F zeigt
eine Tabelle von Steuersignalverwendungen für das Steuerfeld 741 oder
das Steuerfeld 747.
-
7G zeigt
eine Vorrichtungskennungscodierung für das Feld 743.
-
7H zeigt
die Terminologie, die zum Beschreiben des Inhalts des Quellenfelds
im Kopfteil von Nachrichten für
die XB-Einheit 279 verwendet wird.
-
Die 7I, 7J, 7K, 7L, 7M und 7N zeigen eine mehrteilige Tabelle (Tabelle
3), die interne Bedrock-Nachrichtenquellen-
und Ergänzungsfelder
beschreibt.
-
7O ist
eine Tabelle (Tabelle 4) der Xsel-Auswahlcodierungen für die XB-Einheit 279.
-
8 ist
ein Blockdiagramm gemäß einer
Ausführungsform
der XB-Einheit 279.
-
8A zeigt
eine Tabelle von POQ/PI-Schnittstellensignalen.
-
8B zeigt
eine Tabelle von PIQ/PI-Schnittstellensignalen.
-
9 zeigt
ein Zeitablaufdiagramm 900 für die PIQ-Einheit.
-
9A zeigt
eine Tabelle von MOQ/MD-Schnittstellensignalen.
-
10 zeigt
ein Zeitablaufdiagramm 1000 von MD/MOQ-Schnittstellensignalen.
-
10A zeigt
eine Tabelle von XB/MD-Schnittstellensignalen.
-
11 zeigt
ein Zeitablaufdiagramm 1100 für die NOQ-Schnittstelle.
-
11A zeigt
eine Tabelle von NOQ/NI-Schnittstellensignalen.
-
11B zeigt
eine Tabelle von XB/NI-Schnittstellensignalen.
-
12 zeigt
ein Protokoll für
Zugriffsfehler (AE).
-
12A zeigt
eine Tabelle von LOQ/LB-Schnittstellensignalen.
-
12B zeigt
eine Tabelle von LIQ/LB-Schnittstellensignalen.
-
12C zeigt
eine Tabelle von IOQ/II-Schnittstellensignalen.
-
12D zeigt
eine Tabelle von IIQ/II-Schnittstellensignalen.
-
13 zeigt
eine Tabelle von Abtast-Bypass-Zuteiler-Schnittstellensignalen.
-
14 zeigt
ein Diagramm des XB-Zuteilerfilters 1400 für die XB-Einheit 279,
wobei das MOQ-Filter als ein Beispiel dargestellt ist.
-
15 zeigt
ein Diagramm einer Wellenfront-Zuteilerstruktur 1500 (dieses
Diagramm zeigt nur einen von sechs Zuteilern fester Priorität).
-
15A zeigt
eine Tabelle von Abtastwellenfront-Zuteiler-Schnittstellensignalen.
-
16 zeigt
ein Zeitablaufdiagramm der Ablaufsteuerung in der XB-Einheit 279.
-
16A zeigt
eine Tabelle von Kanälen
zum Anfordern von Eingangswarteschlangen.
-
17 zeigt
ein Blockdiagramm von MOQ-Datenpuffern.
-
17A zeigt
eine Tabelle von Signalen zum Anfordern von Eingangswarteschlangen.
-
18 zeigt
ein Blockdiagramm von NOQ-Puffern.
-
19 zeigt
ein Blockdiagramm von IOQ-Puffern.
-
20 zeigt
ein Blockdiagramm von MIQ-Puffern.
-
21 zeigt
ein Blockdiagramm von LIQ-Puffern.
-
22 zeigt
Zellenzählwerte
für eine
Ausführungsform
der XB-Einheit 279, worin die Organisation und die Größen verschiedener
Register und Strukturen in der XB-Einheit 279 dargestellt
sind.
-
23 zeigt
ein Blockdiagramm der PI-Einheit 270.
-
23A zeigt
Geschwindigkeiten für
SYSAD-Schnittstellen für
einige T-Rex-Geschwindigkeiten und Taktteiler.
-
24 zeigt
ein Blockdiagramm für
den Adreß-
und Datenweg für
die PI-Einheit 270.
-
25 zeigt
ein Datenstrukturdiagramm eines RRB-Elements.
-
25A zeigt
verschiedene RRB-Statusbits.
-
26 zeigt
ein Blockdiagramm einer RRB-Einheit.
-
27 zeigt
ein Datenstrukturdiagramm eines WRB-Elements.
-
27A ist
eine Tabelle (Tabelle 35) von WRB-Statusbits.
-
28 zeigt
eine Datenstruktur gemäß einer
Ausführungsform
eines IRB-Elements.
-
29 zeigt
ein Diagramm von Funktionen, die von einer PI-Einheit 270 gemäß einer
Ausführungsform
der vorliegenden Erfindung bereitgestellt werden.
-
29A ist
eine Tabelle (Tabelle 36) von T-Rex erzeugter Anforderungen.
-
29B ist
eine Tabelle (Tabelle 37) von RRB-Anforderungen für WRB-Konflikte.
-
29C ist
eine Tabelle (Tabelle 38), in der das Datenformat für auswärts gerichtete
Anforderungen dargestellt ist.
-
29D ist
eine Tabelle (Tabelle 39), in der das Datenformat für einwärts gerichtete
Antwortaktionen dargestellt ist.
-
30 ist
ein Zeitablaufdiagramm für
die SYSAD-Zuteilung
für eine
externe T-Rex-Blockdatenantwort.
-
31 ist
ein Blockdiagramm einer Ausführungsform
der MD-Einheit 275.
-
32 ist
ein Blockdiagramm einer Ausführungsform
eines Speicher-DIMMs 600.
-
32A ist
eine Tabelle (Tabelle 58) von DIMM-Konfigurationen.
-
33 ist
ein Blockdiagramm einer Ausführungsform
eines Paars von "Standard"-Speicher-DIMMs 680.
-
34 ist
ein Blockdiagramm einer Ausführungsform
eines Paars von "Premium"-Speicher-DIMMs 690 (wobei
eine Hälfte
des Paars dargestellt ist).
-
34A ist
eine Tabelle (Tabelle 59) der verwendeten Adreßübersetzung.
-
34B ist
eine Tabelle (Tabelle 60) einwärts
gerichteter Nachrichten für
die MD-Einheit 275.
-
34C ist
eine Tabelle (Tabelle 61) auswärts
gerichteter Nachrichten für
die MD-Einheit 275.
-
35 ist
ein Blockdiagramm einer Ausführungsform
der Warteschlangen der MD-Einheit 275.
-
36 ist
ein Blockdiagramm einer Ausführungsform
der Schnittstelle zwischen der MD-Einheit 279 und einem
externen EPROM-, UART-, LED- und Synergie-Brückenchip.
-
37 zeigt
eine Ausführungsform
eines Speicherblock-Datenwegs.
-
38 zeigt
eine Ausführungsform
eines Abruf-und-Operations-Cache-Datenwegs.
-
39 ist
ein Blockdiagramm der Haupt-Adreß- und Datenwege der NI-Einheit 274.
-
40 zeigt
eine Nachrichten-Seitenbandcodierung.
-
41 zeigt
ein Blockdiagramm der Verbindungen zwischen dem Node-Controller 75 und
dem Router 76 gemäß einer
Ausführungsform.
-
42 zeigt
ein Diagramm hoher Ebene der IO-Einheit und ihre Position in bezug
auf den Rest des Node-Controllers 75 und des Ein-/Ausgabeports 79.
-
Beschreibung der bevorzugten
Ausführungsformen
-
In der folgenden detaillierten Beschreibung
der bevorzugten Ausführungsformen
wird auf die anliegende Zeichnung Bezug genommen, die zu dieser
Beschreibung gehört,
worin zur Veranschaulichung spezifische Ausführungsformen dargestellt sind,
in denen die Erfindung verwirklicht werden kann. Es ist zu verstehen,
daß auch
andere Ausführungsformen
verwendet werden können
und daß strukturelle Änderungen
vorgenommen werden können,
ohne vom Schutzumfang der in den anliegenden Ansprüchen definierten
Erfindung abzuweichen.
-
Einige Ausführungsformen der vorliegenden
Erfindung betreffen Router, Netzwerke und Synchronisationsvorrichtungen
und -verfahren, wie weiter in WO-A-99/26148 beschrieben ist.
-
Einige Ausführungsformen implementieren
Multiprozessorsysteme, die im allgemeinen kein kohärentes Cache-Modell
verwenden. Andere Ausführungsformen
schließen
Cache-Kohärenzmechanismen
und -verfahren ein, wie in WO-A-99/26144 beschrieben ist. Insbesondere
sieht die vorliegende Erfindung einen Node-Controller vor, der kostengünstig ist
und eine ausgezeichnete Funktionsweise bereitstellt, sowohl wenn
er herunterskaliert wird, als auch wenn er heraufskaliert wird (d.h.
zu einer großen
Anzahl von Prozessoren).
-
1 zeigt
eine Ausführungsform
eines Multiprozessor-Computersystems 100 gemäß der vorliegenden
Erfindung mit einem oder mehreren Node-Clustern 170, wobei
jeder Node-Cluster 170 null
bis N Prozessoren 74, null bis M Speicher 77 und
null bis I Ein-/Ausgabe-(I/O)-Teilsysteme 79 aufweist.
Abhängig
von den Anforderungen eines Benutzers kann das Verbindungsnetzwerk 175 als
ein dreidimensionaler Torus, ein N-dimensionaler Hyperwürfel oder
ein anderes geeignetes Verbindungsnetzwerk zwischen Routern 76 eingerichtet werden.
Gemäß einer
Ausführungsform
weist jeder Router 76 acht Ports 211 auf, wobei
jeder Port 211 verwendet werden kann, um entweder mit anderen
Routern 76 zu verbinden oder um mit einem bis N Node-Controllern 75 zu
verbinden, die jeweils null oder mehr Prozessorelemente (PEs) 74 aufweisen.
Demgemäß kann ein
Router 76 bei manchen Ausführungsformen lediglich als
ein Verbindungs-Node in dem Netzwerk 175 (d.h. eine Schaltung
innerhalb des Blocks 175 statt innerhalb des Node-Clusters 170)
ohne PEs 74 oder einem Speicher 77 oder I/O-Teilsysteme 79 verwendet
werden, und alle seine Ports werden zum Verbinden mit anderen Routern 76 verwendet.
-
Bei anderen Ausführungsformen werden, wie in 1 dargestellt ist, einige
der Ports 211 zum Verbinden mit anderen Routern 76 über das
Netzwerk 175 verwendet, und andere Ports 211 werden
zum Verbinden über
einen Node-Controller 75 mit
einer Anzahl 141 von PEs 74, mit Speichern 77 und
mit I/O-Teilsystemen 79 verwendet.
-
2 zeigt
Einzelheiten einer solchen Ausführungsform
eines Node-Clusters 170 mit einem Router 76, der
sechs Router-Verbindungen 72 (d.h. Verbindungen mit anderen
Routern 76) und zwei Node-Controller-Verbindungen 73 (auch
als Kanal 73 bezeichnet) (d.h. Verbindungen mit den zwei
Node-Controllern 75, welche
wiederum gemeinsam mit acht Prozessorelementen 74 verbunden
sind) aufweist. Ein bis vier PEs 74 sind mit jedem Node-Controller 75 verbunden,
und sie teilen sich einen einzigen Speicher 77 mit einer
oder mehreren Speicherbänken.
Bei manchen Ausführungsformen
weist jede Bank zwei oder mehr Speicherkarten auf, auf die parallel
zugegriffen wird. Bei manchen Ausführungsformen weist jede Speicherkarte
getrennte Teilsätze
von Speicherchips auf, wobei ein Teilsatz Speicherdaten zugewiesen
ist und ein anderer Verzeichnisdaten zugewiesen ist (solche Karten
werden manchmal als Speicher/Verzeichnis-Karten bezeichnet). Jeder
Node-Controller 75 ist optional mit einem I/O-Teilsystem 79 verbunden,
das Verbindungen zu herkömmlichen Hochgeschwindigkeits-I/O-Ports
und Vorrichtungen, wie Workstations, Plattensystemen und Bandsystemen usw.
bereitstellt.
-
Bei einer Ausführungsform weist jeder Node-Controller 75 bis
zu fünf
Schnittstellenports, d.h. PI0 271, PI1 272, II 273,
NI 274 und MI 275 auf. Die Prozessorportschnittstelle
0 (PI0) 271 ist mit einem ersten Teilsatz 241 von
Prozessoren 74 verbunden, die Prozessorportschnittstelle 1 (PI1) 272 ist
mit einem zweiten Teilsatz 242 von Prozessoren 74 verbunden
und die Ein-/Ausgabe-Portschnittstelle (II) 273 ist mit
einem Ein-/Ausgabesystem 79 verbunden, die Netzwerkportschnittstelle
(NI) 274 ist entweder mit einem Router 76 verbunden, wie
in 2 dargestellt ist,
oder mit einem anderen Node-Controller 75 verbunden, wie
in der nachstehenden 4 dargestellt
ist. Die Speicherschnittstelle (MI) 275 ist mit dem Speicher 77 verbunden.
-
3 zeigt
eine andere Ausführungsform,
in der ein Multiprozessorsystem 300 mit einem einzigen Node-Cluster 170 mit
einem einzigen Router 76 dargestellt ist, der keine Routerverbindungen 72 und
acht Node-Controller-Verbindungen (Kanäle) 73 (d.h. Verbindungen
mit den acht Node-Controllern 75, die wiederum gemeinsam
mit zweiunddreißig
Prozessoren 74 verbunden sind) aufweist. Jeder Port 211 verbindet
mit bis zu einem Prozessor-Cluster 370, und jeder Prozessor-Cluster 370 weist
bis zu vier PEs 74, einen gemeinsamen Speicher 77 für die PEs 74 und
ein gemeinsames I/O-Teilsystem 79 auf, die alle über einen
Node-Controller 75 verbunden sind. Bei dieser Ausführungsform
ist der Router 76 mit keinem anderen Router 76 verbunden. Natürlich brauchen
bei anderen Konfigurationen nicht alle Ports 211 verwendet
zu werden, und nicht alle Prozessor-Cluster 370 müssen mit
vier PEs 74 voll belegt werden.
-
4 zeigt
eine Ausführungsform
eines Multiprozessorsystems 400 ohne Router-Chips, jedoch
mit zwei Node-Controllern 75,
die unter Verwendung eines einzigen Interprozessor-Kommunikationskanals 73 miteinander
verbunden sind. Diese Ausführungsform
läßt bis zu
acht Prozessoren 74 zu. Dies ist die maximale Anzahl von
PEs 74 für
diese Ausführungsform
eines Node-Controllers 75 (von denen jeder mit bis zu vier
PEs 74 verbinden kann). Jeder Node-Controller 75 verbindet
mit bis zu einem anderen Prozessor-Cluster 370, und jeder
Prozessor-Cluster 370 hat bis zu vier PEs 74,
einen gemeinsamen Speicher 77 für die PEs 74 und ein gemeinsames
I/O-Teilsystem 79, die alle über einen Node-Controller 75 verbunden
sind. Natürlich
brauchen bei anderen Konfigurationen nicht alle Prozessor-Cluster 370 vollständig mit
vier PEs 74 belegt sein, und es werden bei wieder anderen
Ausführungsformen
mehr als acht Prozessoren unterstützt.
-
Systemarchitektur
-
Die Systemarchitektur gemäß der vorliegenden
Erfindung (manchmal als "SN1" bezeichnet), die
in 5 dargestellt ist,
weist einen oder mehrere Prozessor/Speicher-Nodes 370 auf,
die mit einem allgemeinen Verbindungsnetzwerk (auch als ein Interprozessor-Kommunikationsnetz
bezeichnet) 575 verbunden sind, dessen Bandbreite mit der
Anzahl der Prozessoren skaliert. Bei verschiedenen Ausführungsformen
kann das Interprozessor-Kommunikationsnetz 575 einfach
ein einziger Interprozessor-Kommunikationskanal 73 sein,
der direkt mit zwei Node-Controllern 75 gekoppelt ist,
wie in 4 dargestellt
ist, oder es kann ein umfangreiches Netzwerk aufweisen, das viele
Node-Controller 75 verbindet. Ein solches umfangreiches
Netzwerk schließt
ein Netzwerk miteinander verbundener Router 76 ein, wie
es in 1 dargestellt
ist, andere Ausführungsformen schließen jedoch
andere Verbindungsnetzwerke ein, wie auf dem Fachgebiet wohlbekannt
ist.
-
Organisation
hoher Ebene des SN1-Systems
-
Der globale gemeinsame Speicher 577 im
SN1 ist unterteilt, wobei ein Abschnitt des Speichers 77 auf jede
Gruppe von vier Prozessoren 74 verteilt ist (also lokal
damit verbunden ist). Dieses Unterteilen bietet eine sehr geringe
Latenz für
Speicher, der dicht beim Prozessor 74 angeordnet ist, während die
allgemeine Verbindung einen globalen Zugriff auf den gesamten Speicher 577 von
jedem Prozessor 74 ermöglicht.
Ein verzeichnisbasiertes Protokoll wird zum Aufrechterhalten der
Cache-Kohärenz über den
gesamten globalen Speicher 577 verwendet. Die Ein-/Ausgabe
(I/O) 579 innerhalb des SN1-Systems ist auch mit einem
I/O-Schnittstellen-Verbindungspunkt
(II-Port) 273 auf jedem CPU/Speicher-Node 370 unterteilt.
Wie beim verteilten Speicher 577 ist jeder I/O-Port 273 von
jedem Prozessor 74 adressierbar.
-
Gemäß einer Ausführungsform
ist jeder CPU/Speicher-Node 370 in ein "Kastenmodul" gepackt. Große CPU-Konfigurationen können unter
Verwendung mehrerer Node-Module aufgebaut werden. Diese Nodes 370 sind
mit Verbindungsstrecken über
Router 76, die jeweils auch in einem Kasten gepackt sind,
verbunden. Bei verschiedenen Ausführungsformen enthält jeder
Node 370 bis zu vier T-Rex- oder Merced-Prozessoren, Speicher-Verzeichnis-Bänke 77,
die jeweils ein gewisses Maß an
Hauptspeicher und ein zugeordnetes Maß an Verzeichnisspeicher aufweisen,
einen Anbringungsport 274 zur Multinode-Verbindung über das Verbindungsnetzwerk
(manchmal als CrayLink2 bezeichnet) und einen II-Anbringungsport 273 für das I/O-Teilsystem 79.
Der Verbindungsnetzwerk-Anbringungsport ist in jeder Richtung bei
1600 MB/s voll duplexfähig.
-
Der I/O-Anbringungsport (manchmal
als "XTOWN2" bezeichnet) ist
bei 1200 MB/s voll duplexfähig, kann
jedoch auf 800 MB/s verlangsamt werden, um eine Verbindung mit älteren I/O-Vorrichtungen oder
Graphikkomponenten von älteren
SN0-Systemen herzustellen.
-
Der Anbringungsport für die CrayLink2
verbindet mit dem Routing-Netzwerk 175. Das Routing-Netzwerk 175 ist
aus Router-Chips 76 mit acht Ports aufgebaut, die unter
Verwendung von Kabeln mit Nodes und miteinander verbinden. Die in
der SN1-Familie verwendete Verbindungstopologie ist im nächsten Abschnitt
beschrieben.
-
DIMM-Modul 600
-
Das DIMM-Modul 600 (siehe 6A) ist eine vertikal eingesteckte
PCB (gedruckte Leiterplatte) mit 294 Stiftpositionen, die Teile
für Hauptspeicher
und für
Verzeichnisspeicher enthält.
-
DIMM-Führungssockel 671 und
Hebel 672
-
6B zeigt
eine DIMM-Führung 673 mit
vier DIMM-Modulen 600.
Weil das DIMM-Modul 600 extra lang ist, ist ein externes
Führungs-/Tragteil 673 erforderlich.
Die Führung 673 trägt vier
Module 600, ermöglicht eine
Luftströmung
und stellt Merkmale für
einen Einführungs-/Entnahmemechanismus
bereit. Gemäß einer Ausführungsform
wird ein Führungsentwurf
an beiden Enden des DIMMs verwendet, wie in 6B dargestellt ist.
-
Hebel 672 befinden sich
am oberen Teil der Führung 671.
Diese Hebel 672 bieten einen mechanischen Vorteil beim
Einführen,
Herausnehmen und Festhalten der DIMM-Module 600.
-
In 6B sind
am nahen Ende angeordnete DIMM-Riegel geschlossen dargestellt. Am
fernen Ende angeordnete Riegel sind im offenen Zustand dargestellt.
-
Gemäß manchen Ausführungsformen
ist der Node-Controller 75 auf einem einzigen IC-Chip 475 implementiert
(siehe 7B), und gemäß einer
speziellen Ausführungsform
ist er auf einem als "Bedrock" bezeichneten Einzelchip
implementiert. Bezüge
auf Bedrock sollen diese spezielle Ausführungsform des Node-Controllers 75 bedeuten,
es wird jedoch auch an andere Ausführungsformen der Erfindung
gedacht. Insbesondere sind bei manchen erwogenen Ausführungsformen
bestimmte der nachstehend beschriebenen Merkmale fortgelassen, und
andere Ausführungsformen
replizieren beschriebene Merkmale oder fügen bestimmte Kombinationen
von Merkmalen hinzu und nehmen diese fort.
-
Überblick über das System
-
Gemäß einer Ausführungsform
spezifiziert die vorliegende Erfindung einen Multiprozessor mit
einem verteilten gemeinsamen Speicher mit 1 bis 4096 Prozessoren
(wenngleich die Bedrock-SN1-Node-Implementation gemäß einer
Ausführungsform
maximal 1024 Prozessoren unterstützt).
SN1 unterstützt
vollständig
einen einzigen Adreßraum
und bietet eine Cache-Kohärenz über die
gesamte Maschine. SN1 ist zu einer Anzahl von Nodes organisiert,
wobei jeder Node den lokalen Speicher mit den Prozessoren verbindet
und einen Port zum Router-Netzwerk
und einen Port zum I/O-Teilsystem bereitstellt. Bedrock ist die
erste Implementation eines SN1-Nodes. Jeder Bedrock unterstützt bis
zu 4 T-Rex+-Prozessoren, einen Abschnitt des globalen Speichers,
ein Verzeichnis zum Aufrechterhalten der Cache-Kohärenz, eine
Schnittstelle zum Crosstalk-IO-Teilsystem und eine Schnittstelle
zum SN1-(SN1Net)-Router-Netzwerk,
wie in 7A dargestellt
ist.
-
Überblick über den Node-Controller 275 (Bedrock)
-
Der Bedrock-Chip bietet eine Verbindbarkeit
zwischen vier Typen externer Schnittstellen und einer Schnittstelle
für lokale
Chip-Ressourcen. Jede der Schnittstellen wird durch eine als Einheit
bekannte Unterabteilung des Bedrocks verwaltet. Die Einheitsnamen
sind von den Schnittstellen abgeleitet, die sie verwalten, nämlich der
IO-Schnittstelleneinheit
(II), der Netzwerk-Schnittstellen einheit (NI), der Speicher/Verzeichnis-Schnittstelleneinheit
(MD), der zwei Prozessorschnittstelleneinheiten (PI0 und PI1) und
dem lokalen Block (LB). Die Einheiten sind mit einem zentralen Crossbar
(XB) verbunden, wie in 7B dargestellt
ist. Bedrock unterstützt
geteilte Speichersysteme mit bis zu 256 SN1Net-Nodes (1024 Prozessoren).
-
Die verschiedenen internen Bedrock-Schnittstellen
kommunizieren durch Senden von Nachrichten über die XB-Einheit. Wie in
der SN1-Cache-Kohärenz-Protokoll-Spezifikation
erklärt
wird, werden Nachrichten in zwei Gruppen, nämlich Anforderungen und Antworten,
unterteilt, um eine Systemblockierung zu verhindern. Wenn eine Nachricht über den
I/O-Port (Crosstalk-Protokoll)
oder den Netzwerk-Port (SN1Net-Protokoll)
ankommt, wird die Nachricht in das interne Bedrock-Format umgewandelt.
Das Umgekehrte geschieht, wenn eine Nachricht einen dieser Ports
verläßt.
-
7A zeigt
den Node-Controller 75 gemäß einer Ausführungsform
der vorliegenden Erfindung. 7B zeigt
den Node-Controller 75 gemäß einer Ausführungsform,
der weiter Angaben zum Datenfluß in
den Node-Controller 75 und innerhalb von diesem aufweist. 7B zeigt auch den innerhalb
eines Einzelchips 475 implementierten Node-Controller 75. 7C zeigt ein Diagramm des
Node-Controllers 75 innerhalb
eines Nodes 370, worin die verschiedenen Schnittstellenbreiten
und Taktgeschwindigkeiten für
eine Ausführungsform der
vorliegenden Erfindung beschrieben sind. 7D zeigt Kopfteil- und Datenformate
für Nachrichten
gemäß einer
Ausführungsform
des Node-Controllers 75.
-
Internes Nachrichtenformat
von Bedrock
-
Die interne Nachricht von Bedrock
(eine Ausführungsform
des Node-Controllers 75) (siehe 7D) weist einen Kopfrahmen auf (ein
Rahmen ist eine Bitgruppe, die konzeptuell oder logisch eine einzige
Einheit ist. Der Begriff bezieht sich nicht auf die Anzahl der zum
Verarbeiten der Informa tionen erforderlichen Taktzyklen und auch
nicht auf die Einheitsgröße der gleichzeitig "auf die Leitung" gegebenen Bits (entweder
durch den Bedrock-XB oder über
das Router-Netzwerk
oder Crosstalk-Schnittstellen)), und es folgen (optional) ein oder
mehrere Datenrahmen, die insgesamt 64 bis 1024 Datenbits für die Nachricht
aufweisen. Das Format für jeden
der Bedrock-Rahmen (der Kopfteil, die Doppelwortdaten und die Vierwortdaten)
ist in 4 dargestellt. Einem
Kopfrahmen können
0, 1, 2 oder 16 Doppelwortdatenrahmen oder an der MD-Schnittstelle
0, 1 oder 8 Vierwortdatenrahmen folgen (jede bestimmte Bedrock-MD-Schnittstelle
verwendet nur eines dieser Datenformate). Die meisten Schnittstellen
an der Bedrock-Crossbar-Einheit akzeptieren/übertragen ein 160-Bit-Mikropaket-Flit (das
entweder einen Kopfteil, ein Daten-Doppelwort oder ein Daten-Vierfachwort
aufweist) in einem einzigen Taktzyklus. Die Crossbar-Einheit von
Bedrock verarbeitet jedes Mikropaket (vom Eingabeport zum Ausgabeport)
in zwei Taktzyklen. Wenn immer möglich,
kombiniert die Crossbar-Einheit 2 empfangene Doppelwörter zu
einem einzigen Vierwort-Mikropaket.
-
Wenn jeder Rahmen in die Bedrock-XB-Einheit
eintritt oder aus dieser austritt, geben die Steuersignale (in 4 definiert und in Tabelle
1 detailliert beschrieben) alle oder einige der folgenden Informationen
an:
-
- – für welche
lokale Bedrock-Einheit (d.h. für
welchen XB-Port) der Rahmen bestimmt ist (Xsel)
- – ob
der Rahmen eine Anforderung oder eine Antwort ist (d.h. die Klasse,
die den verwendeten virtuellen Kanal definiert)
- – ob
dieser Rahmen die aktuelle Nachricht abschließt (Endteil). Es sei bemerkt,
daß das
Xsel-Feld nur für Kopfteile
gültig
ist und daß Datenrahmen
dem Kopfteil immer zur Zieleinheit folgen.
-
7E zeigt
das Feldformat für
Quellen- und Zusatzfelder. 7F zeigt
eine Tabelle von Steuersignalverwendungen für das Steuerfeld 741 oder
das Steuerfeld 747.
-
7G zeigt
eine Vorrichtungskennungscodierung für das Feld 743. 7H zeigt die zum Beschreiben
des Inhalts des Quellenfelds im Kopfteil der Nachrichten für XB 279 verwendete
Terminologie.
-
Die 7I, 7J, 7K, 7L, 7M und 7N zeigen eine mehrteilige Tabelle (Tabelle
3), die interne Bedrock-Nachrichtenquellen- und Zusatzfelder beschreibt. 7O ist eine Tabelle (Tabelle
4) der Xsel-Auswahlcodierungen für
XB 279.
-
Der Kopfrahmen enthält die Quellen-
und Zusatzfelder, das Nachrichtentypfeld (Befehlsfeld) und 37 Bits
(39 : 3) der gültigen
Adresse. Nachfolgende Datenrahmen enthalten 64 oder 128 Datenbits
zuzüglich
eines Bits zum Angeben eines unkorrigierbaren Datenfehlers (UCE).
Das UCE-Bit wird gesetzt, falls für dieses Datenwort ein unkorrigierbarer
Fehler in der Art eines Doppelbitfehlers im Speicher gefunden wurde.
Es sei bemerkt, daß das
Vierwort-Datenformat explizit in DataEven- und DataOdd-Doppelwörter unterteilt
ist. Immer dann, wenn Vierfachwörter
zur Übertragung
entlang einer schmaleren Schnittstelle in Doppelwörter aufgeteilt werden
müssen,
wird zuerst DataEven übertragen.
Falls ein Doppelwort mit gültigen
Daten über
die Vierwortschnittstelle gesendet wird, wird angenommen, daß es in
DataEven vorhanden ist.
-
7G (Tabelle
2) spezifiziert die Werte, die in den Quellen- und Zusatzfeldern
des Kopfrahmens enthalten sind. Das allgemeine Format der in diesen
Feldern verwendeten Bezeichner ist in 5 dargestellt. Die Node-Kennung entspricht
der Router-Netzwerkadresse [39 : 32] (wenn das System in seinem
Standard-M-Modus arbeitet). Der Node-Adreßraum (der gesamte in einem
Node adressierbare Speicher) ist daher die Adresse [31 : 0], wodurch
bis zu 8 Gigabytes an adressierbarem Speicher je Node zugelassen
werden. In 7H "Terminologie zum
Beschreiben des Inhalts des Quellenfelds im Kopfteil" bezeichnet das Quellenfeld
(in 7E dargestellt)
eines der folgenden:
- – Es bezeichnet für Verzeichnisrevisionsnachrichten
(wie XFER oder SHWB), die von der Netzwerkschnittstelle ausgegeben
werden, einen Kohärenzanforderungsinitiator
(d.h. eine Quelle).
- – Für andere
Nachrichten, die in die Netzwerkschnittstelle eingegeben werden,
bezeichnet das Quellenfeld an der weitergeleiteten Anforderung die
Zieladresse der dritten Partei (in 6 dargestellt)
bei der Kohärenztransaktion.
- – Es
bezeichnet bei allen anderen Nachrichten einen Kohärenzanforderungsinitiator
(also eine Quelle).
-
Es gibt zwei Typen von Ungültigmachern
innerhalb des Bedrocks:
- – ein Ungültigmacher-Plus-Bitvektor,
der nur zum LB gesendet wird, wird als ein lokaler Ungültigmacher (LINVAL)
bezeichnet,
- – der
normale Ungültigmacher,
der zu einer PI (lokal oder fern) gesendet wird, wird als ein Ungültigmacher (INVAL)
bezeichnet.
-
Die in den 7I–7N dargestellte Tabelle
beschreibt detailliert Quellen- und Zusatzfeldinhalte für alle Bedrock-Transaktionen.
Einige der in dieser Tabelle verwendeten Abkürzungen werden folgendermaßen beschrieben:
- – Init – Initiator
der ursprünglichen
Transaktion. 3-Bit-Feldpunkte
für eine
Vorrichtungskennungscodierung, wie in Tabelle 2 detailliert angegeben
ist.
- – Abs – Absender,
8-Bit-Node-Kennung des die aktuelle Nachricht sendenden Nodes. 1
Eigentümer – der Eigentümer der
Cache-Leitung, auf die sich die Adresse in diesem Kopfteil bezieht.
Wird zum Wiederherstellen von Revisionsnachrichten verwendet. Der
Eigentümer
ist entweder der Initiator oder der Absender.
- – Priorität – die Prioritätsebene
der Kohärenzanforderung.
- – AckCnt – Bestätigungszählwert,
der als das Ergebnis gesendeter Ungültigmacher erwartet wird. Diese Zahl
ist die Gesamtzahl der gesendeten Ungültigmacher minus 1. 1 WRB – Schreibanforderungs-Pufferressourcen-Tag-Nummer
der aktuellen Schreibtransaktion.
- – Ziel – Bezeichner
des Interventionsziels.
- – T-Rex/BCast – Zweibitfeld,
das spezifiziert, zu welchem TRex ein Ungültigmacher zu senden ist. Kann auch
eine Übertragung
zu beiden TRexs spezifizieren.
-
Überblick über XB 279
-
8 ist
ein Blockdiagramm einer Ausführungsform
von XB 279. Die Crossbar-Einheit (XB) 279 des Node-Controllers 75 bietet
eine Verbindbarkeit zwischen den zwei PI-Einheiten 270,
der MD-Einheit 275, der II-Einheit 273, der LB-Einheit 278 und
der NI-Einheit 274 in einer guten und wirksamen Weise.
Die XB-Einheit 279 unterstützt den Nachrichtenfluß im internen
Bedrock-Format entlang zwei virtuellen Kanälen, die über die physikalischen Kanäle multiplexiert
sind, welche jede Einheit mit der XB-Einheit 279 verbinden.
Die XB-Einheit 279 ist durch Puffer/Warteschlangen-Bypasswege
und Zuteilungshinweise für
eine minimale Latenz unter leichten Belastungen ausgelegt und durch
Zuteilungsanforderungen für
jeden virtuellen Kanal und einen Wellenfrontzuteiler für starke
Belastungen ausgelegt. Die Nachrichtenzuordnung zwischen jedem Einheitspaar wird
innerhalb jedes virtuellen Kanals aufrechterhalten. Nachrichten,
die von einem einzigen virtuellen Quellenkanal auf verschiedene
Zieleinheiten abzielen, können
in jeder beliebigen Reihenfolge übertragen
werden. Nachrichten entlang verschiedenen virtuellen Kanälen können über eine
Schnittstelle oder entlang eines physikalischen Kanals auf der Flit-Ebene verschachtelt
werden.
-
Dieser Abschnitt verwendet die folgenden
einheitszentrierten (nicht XB-zentrierten) Akronyme:
- • xIQ
= Eingangswarteschlange der x-Einheit, die Nachrichten von der XB-Einheit 279 empfängt (beispielsweise
PIQ = Eingangswarteschlange der Prozessorschnittstelle)
- • xOQ
= Ausgangswarteschlange der x-Einheit, die Nachrichten enthält, die
auf die Übertragung
zur XB-Einheit 279 warten (beispielsweise NOQ = Ausgangswarteschlange
der Netzwerkschnittstelle).
-
Gemäß einer Ausführungsform
befindet sich die XB-Einheit 279 physikalisch in etwa in
der Mitte des Node-Controllers 75, weil sie direkt mit
jeder der Funktionseinheiten (MD 275, II 273,
LB 278, NI 274 und zwei PIs 271 und 272)
kommunizieren muß.
Die XB-Einheit 279 ist in einen Satz von Modulen, die jeweils
direkt mit einer Funktionseinheit gekoppelt sind, und einen Satz,
der eine zentrale Verbindbarkeit und Zuteilung bereitstellt, unterteilt.
-
7O ist
ein Blockdiagramm der XB-Architektur. In der in der Figur dargestellten
Notation bezeichnet ein Doppel-FIFO zwei Virtualkanal-FIFOs innerhalb
einer Einzelpuffer-Speicherstruktur, wobei ein Vierfach-FIFO vier
virtuelle Kanäle
in einer analogen Struktur bezeichnet. Eine Doppelbank bezeichnet
die Breite des FIFO-Schreibports. Die Speicher-Ausgangswarteschlange
(MOQ) benötigt
zwei doppelbänkige
FIFOs zum Unterstützen
einer Bandbreite von 3,2 GB/s.
-
Datenweg-Crossbar
-
Dieses lokal angeordnete Modul enthält einen
Crossbar mit 8 Eingängen
und 6 Ausgängen.
Der Crossbar-Datenweg ist für
alle Eingänge
und Ausgänge
67 Bits breit, wodurch 1,6 GB/s an Datenbandbreite je Port bei einem
5-ns-Takt bereitgestellt wird. Ein einziger Zyklus wird für das Durchlaufen
des Crossbar-Datenwegs aufgewandt, wobei Daten registriert werden,
bevor sie auf den Crossbar-Datenweg gegeben werden, und hinter dem
Ausgangsmultiplexer in ein Register fließen.
-
Datenübertragungen werden durch die
Einheits-Ausgangswarteschlangen und den Zuteiler, die zusammenarbeiten, gesteuert.
Daten-, Gültigkeits-
und Flit-Tag-Informationen werden durch die Ausgangswarteschlange
der Quelle bereitgestellt. Crossbar-Auswahlleitungen werden durch
den Zuteiler gesteuert und als Heißbusse registriert, um die
Durchfallslatenz zu minimieren.
-
Einheits-Ausgangswarteschlangen
-
Die Einheits-Ausgangswarteschlangen
(die "OQs") stellen das Puffern
für Ausgangseinheitsnachrichten
(für die
XB-Einheit 279 bestimmt)
bereit, während
sie Datenwegressourcen zuteilen. (Bemerkung: Die XB-Nomenklatur
ist Einheitszentriert, nicht XB-zentriert.) In bestimmten Fällen werden
sie auch verwendet, um eine Ratenanpassung zwischen abweichenden
XB- und Einheitsbandbreiten (MOQ, NOQ
, IOQ) bereitzustellen,
sowie als ein Synchronisationspunkt für mit dem Kern (POQ, IOQ) asynchrone
Einheiten verwendet.
-
Die OQs weisen zwei Hauptschnittstellen
auf, nämlich
eine Einheitsschnittstelle und eine Zuteiler/Datenweg-Schnittstelle. Die
Einheitsschnittstellen sind für
die einzigartigen Anforderungen jeder Einheit eigens ausgelegt und
werden in den folgenden Abschnitten detailliert angegeben. Die Zuteiler/Datenweg-Schnittstelle ist über die
OQs gleichmäßig.
-
Über
alle OQ-Schnittstellen werden Nachrichtenziele unter Verwendung
des Xsel, das der Zieleinheit zugeordnet ist, spezifiziert. Diese
Codierung, die in Tabelle 4 beschrieben ist (in 8 dargestellt), ist mit dem Router-Netzwerkkopfformat
konsistent (gemäß einer
Ausführungsform
verwendet die vorliegende Erfindung ein Router-Netzwerk, wie in
WO-A-99/26148, WO-A-99/26429, WO-A-99/26163, WO-A-99/26144 und WO-A-99/2616
beschrieben ist), wodurch der Umfang der an der Netzwerkschnittstelle
erforderlichen Formatübersetzung
minimiert wird. Es sei bemerkt, daß die XB-279-Einheit einen Übersatz
der Router-Netzwerkcodierungen zum Adressieren Bedrock-interner
nur für
Nachrichten vorgesehener Ziele unterstützt.
-
Es sei bemerkt, daß die Gültig-Nachricht
(von der Einheit zur Ausgangswarteschlange) außer bei NI 274, wo
sie entweder einem Kopfteil oder zwei aufeinanderfolgenden Daten-Flits entspricht,
einem Einzelzyklus-Flit entspricht. Der Endteil kommt, außer bei
NI, wo er mit der Gültig-Nachricht
kommt, mit dem letzten Flit der Nachricht. Es sei auf 7O verwiesen, worin Tabelle
4 dargestellt ist. Es sei bemerkt, daß das Setzen von Xsel[2] auf
0 zu vier SN0-kompatiblen
Codierungen führt
(wobei der lokale Block NI 274 als das Ziel für Vektoren
und NI-Register-PIOs ersetzt). Xsel[2] kann als ein "Unter-Node"-Auswahlbit angesehen
werden.
-
Zum Verringern der Latenz durch eine
leere OQ können
die Nachrichtenpuffer vollständig
umgangen werden, oder die Daten können im selben Zyklus in die
Puffer geschrieben und aus diesen ausgelesen werden. Die Einzelheiten
der Crossbar-Zuteilung
sind vor der Einheit verborgen, die sich nur um die richtige Datenübertragung
und die Flußsteuerung
auf der OQ-Schnittstelle
kümmern
muß.
-
Einheits-Eingangswarteschlangen
-
Die Einheits-Eingangswarteschlangen
(die "IQs") ermöglichen
ein Puffern für
Daten, die durch die XB-Einheit 279 gelaufen sind, jedoch
noch nicht von ihrer Zieleinheit verarbeitet worden sind. Die primäre Rolle besteht
darin, eine Ratenanpassung und Synchronisation zwischen der XB-Einheit 279 und
der Empfangseinheit bereitzustellen. Falls sie eine geeignete Größe aufweisen,
isolieren sie den XB-Nachrichtenfluß von den Wirkungen
von Einheiten geringerer Bandbreite und ermöglichen es, daß Einheiten
höherer
Bandbreite ankommende Pakete akkumulieren, bis eine Übertragung
bei der höheren
Rate möglich
ist.
-
Weil die NI-Einheit 274 mit
der XB-Einheit 279 synchron ist und in der Bandbreite mit
dieser übereinstimmt,
weist die NI-Einheit 274 keine IQ auf. Füllniveauinformationen
von den IQs werden vom Zuteiler für Flußsteuerinformationen von den
OQs verwendet. Im Fall der NI-Einheit 274 werden SN1Net-Flußsteuerinformationen
verwendet, um einen Staudruck über
die XB-Einheit 279 bereitzustellen.
-
Die MD-Einheit 275 benötigt Eingabepuffer
zum Bereitstellen einer Ratenanpassung zwischen der XB-Einheit 279 und
der Speicherschnittstelle mit einer höheren Bandbreite. Zum Ermöglichen
einer engeren Kopplung zwischen der MD-Einheit 275 und
den Eingabepuffern werden die Puffer in der MD-Einheit 279 statt in einer
XB-IQ angeordnet. Die MD-Einheit 275 führt dem Zuteiler auch Flußsteuersignale
zu.
-
Es sei bemerkt, daß die Gültig-Nachricht
(von der XB-Einheit 279 zur
IQ oder zur Einheit) über
alle Warteschlangen konsistent ist, in denen sie einem Einzelzyklus-Flit
entspricht. Der Endteil entspricht, abgesehen von NI 274,
wo er im ersten Zyklus der Zweizyklenübertragung aktiviert ist, dem
letzten Flit der Nachricht.
-
Zuteiler
-
Der Zuteiler liefert eine Zuteilung
geringer Latenz für
konkurrenzfreie Ports über
eine Bypass-Zuteilung und eine wirksame hohe Auslastung über eine
Wellenfrontzuteilung, wenn die Ressourcen gesättigt werden. Der Zuteiler
muß auch
die Gerechtigkeit für
alle Einheiten und die Richtigkeit gewährleisten, indem er eine Nachrichtenfragmentierung
innerhalb eines virtuellen Kanals verbietet.
-
Die Grundeinheit für die vom
Zuteiler unterstützte
Datenübertragung
ist eine Zweitakteinheit, die entweder aus einem Einzeltaktkopf,
dem ein unbenutzter Zyklus folgt, einem Einzeltakt von Daten, dem
ein unbenutzter Zyklus folgt, oder zwei Datentakten besteht. Es
sei bemerkt, daß Einzeltakt-Datenübertragungen
nur für
die letzte Übertragung
einer Datenlast ungerader Länge
verwendet wird. Der Zuteiler empfängt in jedem zweiten Zyklus
Anforderungen für
zwei Zyklen der XB-Bandbreite von den Einheiten und gewährt im selben Zyklus
Bandbreite für
ein bestimmtes Ziel.
-
Fehlerbehandlung
-
Die XB-Einheit 279 findet
bei manchen Ausführungsformen
Fehler mit einigen der folgenden Grundursachen:
- • Entwurfsfehler
im Bedrock (in den Einheiten oder in der XB-Einheit 279 selbst).
- • Fehler
externer Komponenten, deren Wirkungen nicht von den Einheiten gefiltert
werden, bevor sie die XB-Einheit 279 erreichen.
- • Systemkonfigurationsfehler.
-
Wenngleich sich diese Fehler in vielen
Weisen zeigen können,
erkennt die Crossbar-Einheit nur Fehler der folgenden Typen:
- • Ungültige Xsel-Zielcodierungen
von einer Einheit zur OQ (BAD_XSEL).
- • Einen
Warteschlangenüberlauf
von der Einheit zur OQ oder von der OQ zur IQ.
- • Einen
Warteschlangenunterlauf infolge einer OQ-Gewährung oder eines IQ-Lesens
einer leeren Warteschlange.
- • Das
Fehlen einer Weiterleitung von einer IQ zu einer Leitung (DEADLOCK_TIMEOUT).
- • Das
Fehlen eines Endteils von einer Einheit zu einer OQ (TAIL_TIMEOUT).
-
Rückwurf-Modus
-
Der Crossbar stellt einen Fehlersuchmodus
bereit, in dem alle eine bestimmte OQ verlassenden Daten oder alle
in eine bestimmte IQ eintretenden Daten zur NI-Einheit 274 zurückgeführt ("zurückgeworfen") werden können. Sobald
die NI-Einheit 274 erreicht
wird, werden die Daten in das Netzwerkformat umgewandelt und vom
SN1Net-Port (wie normal) ausgesendet, um über einen geeigneten Testchip
(einen, der eine Untersuchung der Signale auf der Verbindungsstrecke
ermöglicht),
der in die Verbindungsstrecke eingebettet ist, eingefangen zu werden.
Es sei bemerkt, daß dieser
Modus nur für
eine Einzel-Node-System-Fehlersuche verwendbar ist, weil der Port
der NI-Einheit 274 nicht von zurückgeworfenem Verkehr und normalem
Verkehr geteilt verwendet werden kann.
-
POQ
-
Gemäß einer Ausführungsform
gibt es zwei Ausprägungen,
nämlich
POQ0 812 und POQ1 816 der Prozessorschnittstellen-Ausgangswarteschlange,
wobei eine für
jede PI-Einheit 270 vorgesehen ist. Gemäß anderen Ausführungsformen
werden sogar noch mehr Ausprägungen
des PI-Ports oder eine Anzahl von Ausprägungen von einem oder mehreren
der anderen Ports verwendet.
-
Jede POQ akzeptiert Anforderungs-
und Antwortnachrichten für
eine PI-Einheit 271 oder 272 bei der PI-Taktfrequenz.
Die POQ weist intern einen Synchronisierer auf, um die PI-Daten
in den Kerntaktbereich zu bringen. Im Kerntaktbereich bietet die
PI-Einheit dem Zuteiler und dem Datenweg der XB-Einheit PI-Anforderungen
und Antworten dar. Es gibt einen Synchronmodus (Stift), der gesetzt
werden kann, wenn die PI-Einheit 270 und
der Kern synchron arbeiten. Hierdurch wird bewirkt, daß die POQ
den Synchronisierer umgeht und 1,5 Zyklen spart.
-
Die PI-Einheit 271 oder 272 wird
von der POQ 812 bzw. 816 flußgesteuert. Die POQ gibt die
Anzahl der für
neue Daten in den Anforderungs- und Antwortwarteschlangen verfügbaren freien
Einträge
an. Wenn die Anzahl der freien Einträge 0 erreicht, ist
es nicht mehr zulässig,
daß die
PI-Einheit 270 Daten zur POQ sendet.
-
Die PI-Einheit 270 muß die Anzahl
der Einträge
kennen, so daß sie
die Steuerung in geeigneter Weise an den T-Rex+-Prozessor übergeben kann (ein einfaches
Voll-Hinweiszeichen ist hierfür
nicht ausreichend).
-
Weil mit jeder PI-Einheit 270 zwei
Prozessoren verbunden sind, ist die verwendete Namenskonvention beispielsweise
PI_POQ_RgValid_P0, PI_POQ_RgValid_P1.
-
Der kernseitige Taktbereich der POQ
hat eine spezielle Logik zum Erzeugen von Revisionsnachrichten im
Antwortkanal. Einige Interventionsantworten von T-Rex+ machen es
erforderlich, daß Revisionsnachrichten mit
oder ohne Daten, abhängig
vom Befehlstyp und von zusätzlichen
Feldern zum Speicher des Heim-Nodes gesendet werden. In der folgenden
Gleichung sind Revisionsnachrichtentypen detailliert angegeben:
Wenn
das Revisionsbit (Bit 55) gesetzt ist, ist der Revisionsnachrichtenbefehl
einer von
('BR_CMD_UACK
| 'BR_CMD_SACK | 'BR_CMD_BACK | 'BR_CMD_RACK | 'BR_CMD_URESP | 'BR_CMD_SRESP | 'BR_CMD_ERESP)
Die
Revision ist vom Typ LongLong, falls (RevCmd == 'BR_CMD_SXWB) | (RevCmd == 'BR_CMD_SHWB);
Die
Revisionskennung ist LongShort, falls (MsgCmd == 'BR_CMD_ERESP) & (RevCmd == 'BR_CMD_XFER).
RpFree
wird aktiviert, wenn ein Eintrag vom Antwortpuffer befreit wird,
RgWrFree wird jedoch nur aktiviert, wenn die Pakete länger sind
als zwei Flits.
Kein RgWrFree wird für das Lesen aktiviert, weil
die Leseanforderung nicht länger
als zwei Flits ist, während 15
RgWrFree-Impulse für
ein Blockschreiben (Flits 3–17)
aktiviert werden, weil PI 270 die zwei Einträge reservieren
muß, um
im Fall eines Fehlers ein teilweises Schreiben auszuführen. Für eine Graphikanforderung
(ohne daß ein
Fehler erwartet wird) wird RgWrFree immer dann aktiviert, wenn ein
Eintrag freigelegt wird.
-
PIQ
-
Die Prozessorschnittstellen-Eingangswarteschlange
(PIQ) ist ein FIFO-Paar mit getrennten Anforderungs- und Antwortkanälen. Die
XB-Seite der PIQ arbeitet bei der Kerntaktgeschwindigkeit, während die PI-Seite
der PIQ bei der PI-Taktgeschwindigkeit
arbeitet. Auf diese Weise implementiert die PIQ eine asynchrone
Grenze. Wenn auf der PI-Seite der PIQ gültige Daten auftreten, werden
Gültig-Leitungen
aktiviert, bis die PI-Einheit 270 Daten von der PIQ liest.
-
MOQ
-
Zum Aufrechterhalten der vollen Speicherbandbreite
weist der Ausgangswarteschlangenblock der Speichereinheit (MOQ-Block) drei replizierte
Warteschlangenstrukturen (MP0, MP1, MMQ) auf, die an drei getrennte
Ports der XB-Einheit 279 angehängt sind. Die MD-Einheit 275 sendet
Nachrichten auf der Grundlage ihres Ziels in jede Warteschlange.
Jeder PI 270 ist eine einzige Warteschlange (MP0 und MP1)
zugewiesen, und es gibt eine dritte Warteschlange, innerhalb derer
LB-, NI- und II-Nachrichten gehalten werden (MMQ).
-
Jede MOQ-Struktur besteht aus getrennten
Kopfteil-(MOQH)-
und Daten-(MOQD)-FIFOs. MOQH und MOQD haben getrennte Schnittstellen,
um die Verbindung zum MD-275-Datenweg wirksam zu gestalten. Die MOQH-Einheit
ist ungleichmäßig in Anforderungs-
und Antwortkanäle
(hauptsächlich
Antwortkanäle)
eingeteilt, weil der größte Teil
des auswärts
gerichteten Verkehrs auf dem Antwortkanal auftritt. Die MOQH- und
die MOQD-Einheit haben auch Bypass-Wege. Der begrenzte Satz Daten
tragender Anforderungen vom MD 275 läuft vollständig über die MOQH-Einheit, wodurch
ein Anforderungskanal auf der MOQD-Einheit überflüssig wird. Zum Akzeptieren
der 3,2-GB/s-Datenrate
von der MD-Einheit 275 weist die MOQD-Einheit Dualpuffer auf,
in die gleichzeitig von der MD-Einheit 275 geschrieben
wird und die abwechselnd durch die XB-Einheit 279 gelesen
werden.
-
Wenn ein Doppel-Datenwort übertragen
wird, kann die MD-Einheit 275 die
Daten auf beiden Seiten der Vierwortschnittstelle darstellen. Das
DwOffset-Signal gibt an, ob DataEven oder DataOdd verwendet wird.
-
Zum Verringern der Fernleselatenz
präsentiert
die MD-Einheit 275 der
MOQ-Einheit gelegentlich einen Kopfteil, bevor alle Prüfungen abgeschlossen
sind. Es gibt zwei Szenarien, bei denen dies auftritt:
- 1. Hdr{Rq, Rp}dst ist aktiviert, und im nächsten Zyklus, während dessen
der Kopfteil selbst übertragen
wird, findet die MD-Einheit 275 einen ECC-Fehler und muß die Nachricht
aufheben. Die MD-Einheit 275 aktiviert das Abbrechsignal
in diesem zweiten Zyklus, wodurch angegeben wird, daß der Kopfteil
fallengelassen werden sollte und daß alle dieser Nachricht zugeordneten
Zustände
gelöscht
werden. Im selben (zweiten) Zyklus kann ein anderes Hdr{Rq, Rp}Valid
(auf demselben Kanal) aktiviert werden, und diese Nachricht muß auch aufgehoben
werden.
- 2. Für
Nachrichten, die zur NI-Einheit 274 gerichtet sind (auf
ihrem Weg zu einem fernen Node), kann in dem Zyklus ein Zugriffsfehler
erkannt werden, nachdem der Kopfteil zur MOQ-Einheit übertragen
worden ist. In diesen Fällen
aktiviert die MD-Einheit 275 das AE-Signal auf dem dritten Übertragungszyklus,
und die MOQ-Einheit und die NI-Einheit 274 wirken zusammen,
um zu gewährleisten,
daß der
Kopfteil fallengelassen wird. Infolge dieser aufgehobenen Übertragung
kann in der XB-Einheit 279 ein Restnachricht-in-Verlauf-Zustand
verblieben sein. Die MD-Einheit 275 garantiert, daß sie wieder
eine Nachricht entlang demselben Kanal zur NI-Einheit 274 sendet,
wodurch jeder ausstehende XB-Zustand gelöscht wird. Es sei bemerkt,
daß das
ursprüngliche
Hdr{Rq, Rp}Valid möglicherweise
im zweiten Zyklus nicht abgebrochen worden ist und im dritten Zyklus
ein Zugriffsfehler vorgefunden wurde. Es sei auch bemerkt, daß jeder
Kopfteil, der einem Kopfteil unmittelbar folgt (auf demselben Kanal),
der als letzter einen Zugriffsfehler vorgefunden hat, verworfen
werden muß.
Ein einziger Verzögerungszyklus
nach dem AE-Kopfteil ist ausreichend, um wieder eine gültige Übertragung
zu ermöglichen.
Falls AE im dritten Zyklus aktiviert ist, garantiert die MD- Einheit 275,
daß im
zweiten und im dritten Zyklus kein Hdr{Rq, Rp}Valid auftritt.
-
Die Ablaufsteuerung zwischen der
MD-Einheit 275 und jeder der MOQ-Einheiten ist guthabenbasiert. Beim
Rücksetzen
nimmt die MD-Einheit 275 an, daß der folgende Platz in jeder
MOQ-Einheit vorhanden ist:
- • 4 Anforderungsköpfe/DW-Dateneinträge in der
MOQH-Einheit
- • 12
Antwort/DW-Dateneinträge
in der MOQH-Einheit
- • 24
QW-Datenantworteinträge
in der MOQD-Einheit
-
Die MD-Einheit 275 muß für jede MOQ-Einheit
einen Zählwert
für den
verfügbaren
Pufferplatz aufrechterhalten. Beim Übertragen eines Kopfteils oder
Datenzyklus zu einer bestimmten MOQ-Einheit muß die MD-Einheit 275 den
entsprechenden Guthabenzählwert
dekrementieren. Die HdrRq/RpFree-Ausgaben von jeder MOQ-Einheit
geben an, daß in
der MOQH ein Einzelzyklus-Kopfteil/Doppelwort-Dateneintrag verfügbar geworden
ist. DataFree gibt an, daß ein
Vierworteintrag oder als Vierfachwort ausgerichteter Doppelworteintrag
in der MOQD-Einheit verfügbar
geworden ist.
-
10 und
Tabelle 20 (in 9A dargestellt)
liefern eine detaillierte Liste der MD/MOQ-Schnittstellensignale.
-
MIQ
-
Es gibt in der XB-Einheit 279 keine
MIQ-Einheit. Die XB-Einheit 279 fügt direkt
an den Eingangsdatenweg der MD-Einheit 275 an,
wodurch ermöglicht
wird, daß die
MD-Einheit 275 in einer Warteschlange angeordnete Nachrichten
besser verwalten kann. Der 1,6-GB/s-Port der XB-Einheit kann nur
die Hälfte
der Spitzenbandbreite des Speichers bereitstellen.
-
Die MD-Einheit 275 liefert
eine getrennte Ablaufsteuerung für
mehrere XB-Quellen, wodurch ermöglicht
wird, daß Anforderungen
von bestimmten Quellen Fortschritt machen, während andere aufgeschoben sind,
bis ihre Puffer befreit werden.
-
Zum Verbessern der Latenz ferner
Lesevorgänge
leitet die NI-Einheit 274 Fernleseanforderungen an die
MIQ-Einheit weiter, sobald sie empfangen werden, wodurch die XB-Einheit 279 vollkommen
umgangen wird. Lesevorgänge,
die vom schnellen NI-Weg empfangen werden, sind spekulativer Natur,
und sie werden nur dann über
die Schnittstelle der MD-Einheit 275 weitergeleitet, wenn
die MIQ-Einheit die Schnittstelle nicht auf andere Weise verwenden
kann. Die spekulativen Kopfteile werden nur für einen Einzelzyklus präsentiert, und
sie werden durch das HdrAvail zugeordnete HdrSpec-Signal identifiziert.
-
Es sei bemerkt, daß die von
der NI-Einheit 274 zur MD-Einheit 275 gesendeten spekulativen
Hinweise den Betrieb der NI->NOQ-Schnittstelle
in keiner Weise beeinflussen. Tabelle 21 (in 10A dargestellt) listet die Schnittstellensignale
zwischen der XB-Einheit 279 und der MD-Einheit 275 detailliert
auf.
-
NOQ
-
Die Ausgangswarteschlange (NOQ) der
Netzwerkeinheit weist vier Kanäle
auf, die direkt den vier virtuellen Kanälen des Router-Netzwerks (175)
entsprechen. Jeder einzelne Kanal wird als ein FIFO behandelt und
liefert Anforderungen an den Zuteiler. Durch Steuern der zur NOQ-Einheit
zurückgegebenen
Gewährungen
gewährleistet
der Zuteiler, daß die
vier virtuellen Kanäle
in geeigneter Weise in die zwei virtuellen Kanäle eingefügt werden, die vom Rest der
Bedrock-Einheit unterstützt
werden.
-
Daten werden in analoger Weise wie
diejenige, die zwischen OQs und IQs innerhalb der XB-Einheit 279 verwendet
wurde, in 2-Zyklus-Flits über
die NI-NOQ-Schnittstelle übertragen.
Der NOQ-Einheit kann nicht in nachfolgenden Zyklen eine Gültigkeit
zugewiesen werden. Jedes Setzen von Gültig bzw. Valid stellt entweder
einen Einzelzyklus-Bedrock-Kopfteil
gefolgt von einem unbenutzten Zyklus, einen einzelnen Datenzyklus gefolgt
von einem unbenutzten Zyklus oder zwei Datenzyklen dar. Nutzlasten
gleicher Länge
werden als eine Reihe von Zweizyklus-Datenflits gesendet, wobei
die letzte Übertragung
einer Nutzlast ungerader Länge
ein gültiger
einzelner Datenzyklus gefolgt von einem Blindzyklus ist.
-
Es gibt auf der NI-NOQ-Schnittstelle
keine explizite Unterscheidung zwischen einem Einzelzyklus- und einem
Doppelzyklus-Daten-Flit. Die NOQ-Einheit verwendet das mit dem Valid-Impuls
des Kopfteils bereitgestellte Größenfeld,
um die beiden zu unterscheiden. Die NOQ-Einheit decodiert die Befehlsgrößenbits
des Kopfteils und tastet nur das erste Daten-Doppelwort im letzten
Flit der Nachricht ab. Es sei auch bemerkt, daß, wenngleich das UCE-Bit für jedes
Daten-Doppelwort
im Crossbar-Format definiert ist, es nur im ersten Zyklus eines
Daten-Flits von der NI-Einheit 274 zur NOQ-Einheit gültig ist.
-
Die NI-Einheit 274 leitet
Flits zur NOQ-Einheit weiter, bevor die Verbindungsniveauprüfung abgeschlossen
wird. In Fällen,
in denen ein Flit infolge eines Verbindungsniveaufehlers fallengelassen
werden muß, aktiviert
die NI-Einheit 274 nach dem Setzen von Valid eine Squashoperation
eines Zyklus.
-
Die NOQ-NI-Schnittstellen-Ablaufsteuerung
fordert, daß die
NI-Einheit 274 die NOQ-Puffertiefe kennt. Die NI-Einheit 274 muß alle verbrauchten
Puffer (durch gültige Übertragungen)
und alle befreiten Puffer (durch einen Frei-Impuls bzw. Free-Impuls
von der NOQ-Einheit angegeben) verfolgen. Die Puffertiefe wird als
die Anzahl der 2-Zyklus-Flits gemessen, die gespeichert werden können, und
ein Frei- bzw. Free-Impuls gibt die Freigabe eines 2-Zyklus-Flit-Puffers
an. Ein Valid gefolgt von einem Squash wird von der NOQ-Einheit
fallengelassen und führt
daher nicht zu einem Free-Impuls.
-
Es sei auf 11 für
ein NOQ-Zeitablaufdiagramm verwiesen. Es sei bemerkt, daß die Figur
SN1Net LLP und interne Crossbar-Signale einschließt. Diese
helfen dabei, die erwartete Ausfallatenz von der SN1Net-Einheit
auf die Crossbar-Einheit darzustellen, sie beeinflussen die NI-NOQ- Schnittstelle jedoch
nicht direkt. Die Schnittstellensignale sind in Tabelle 22 aufgelistet
(in 11A dargestellt).
-
NIQ-Funktionalität
-
Die NI-Einheit 274 hat keine
Eingangswarteschlange für
einwärts
gerichteten XB-Verkehr. Die direkte Verbindung zwischen der NI-Einheit 274 und
der XB-Einheit 279 schreibt vor, daß Nachrichten im von der XB-Einheit 279 unterstützten 2-Zyklus-Flit-Format über die
Schnittstelle übertragen
werden. Jedes Aktivieren von DataValid signalisiert, daß der erste
Zyklus eines Flits übertragen
wird. Der unbenutzte Zyklus nach jedem Kopfteil ermöglicht,
daß die
NI-Einheit 274 Bedrock-Kopfteile in 2-Zyklus-Router-Netzwerk-Kopfteile
bei der vollen Rate erweitert. Um zu ermöglichen, daß die NI-Einheit 274 auswärts gerichtete
Nachrichten mit einer minimalen Latenz formatiert, ist am ersten
Zyklus des 2-Zyklus-Flits
das DataTail-Tag bereitgestellt. Es gibt keine Unterscheidung zwischen
Einzel- und Doppel-Datenzyklus-Flits auf der Schnittstelle.
-
Die zwei Kanäle des von der XB-Einheit unterstützten Verkehrs
(Anforderung/Antwort) sind durch die NI-Einheit 274 in
einer für
die Crossbar-Einheit unsichtbaren Weise auf die vier Router-Netzwerkkanäle demultiplexiert.
Die NI-Einheit 274 kombiniert Ablaufsteuerinformationen
von den vier virtuellen Netzwerkkanälen, um einen Staudruck auf
die von der Crossbar-Einheit gesehenen zwei Kanäle auszuüben.
-
Das XB->NI-Protokoll ist durch eine latenzverringernde
Optimierung vom Speichersystem kompliziert. Zum Unterstützen von
Antworten minimaler Latenz auf Fernspeicheranforderungen sendet
die MD-Einheit 275 Antwortkopfteile zur XB-Einheit (an
die NI-Einheit 274 gerichtet), bevor das Prüfen von
Zugriffsrechten abgeschlossen ist. Wenn die Zugriffsprüfung zu
einem Fehler führt,
aktiviert die MD-Einheit 275 das Zugriffsfehlersignal (AE-Signal)
für die
MOQ-Einheit und die NI-Einheit 274. Falls der Antwortkopfteil
einer minimalen Latenz durch die MOQ-Einheit und die Crossbar-Einheit
läuft, kommt
der Kopfteil DataValid gleichzeitig mit dem AE-Signal an. Das AEValid-Signal
von der MOQ-Einheit zur NI-Einheit 274 wird immer dann
aktiviert, wenn dieser Weg minimaler Latenz genommen wird. An der
NI-Einheit 274 wird das Zugriffsfehlerbit (AE-Bit) von
der MD-Einheit 275 mit dem AEValid-Bit von der MOQ-Einheit
kombiniert, um XB-DataValid zu schalten, wie in 12 dargestellt ist. Es sei auf Tabelle
23 (in 11B) für eine Beschreibung
des vollständigen
Satzes von XB/NI-Schnittstellensignalen verwiesen.
-
LOQ
-
Die Ausgangswarteschlange des lokalen
Blocks (LOQ) ist ein FIFO-Paar. Es braucht nur groß genug zu
sein, um zu gewährleisten,
daß auswärts gerichtete
Ungültigmacher
bei der vollen Netzwerkbandbreite gesendet werden können. Die
LOQ-Warteschlange
weist keinen Bypass-Weg auf.
-
Die LOQ-Schnittstellensignale sind
in Tabelle 24 (in 12A dargestellt)
detailliert angegeben. Ein Kopfteil oder ein einzelner Datenzyklus
wird als übertragen
angesehen, falls
(RgAvail && RgReady) || (RpAvail && RpReady)
Rq
und RpReady können
gemeinsam aktiviert werden. Rq, RpAvail schließen einander aus.
-
LIQ
-
Die Eingangswarteschlange des lokalen
Blocks (LIQ) stellt unabhängige
Anforderungs- und Antwortschnittstellen für den lokalen Block dar. Der
Anforderungs-FIFO puffert Ungültigmachungsanforderungen
(sowie andere Anforderungen an den lokalen Block) und sollte groß genug
sein, um alle Grob-Ungültigmacher aufzunehmen,
die von den vier Prozessoren am lokalen Node
ausgegeben werden können.
-
Wenn die LIQ-Einheit an die LB-Einheit
zu übergebende
Anforderungs-Flits aufweist, aktiviert sie das RgAvail-Signal. Die LB-Einheit
aktiviert RgReady unabhängig,
wenn sie ein Anforderungs-Flit akzeptieren kann. Wenn sowohl RgAvail
als auch RgReady im selben Zyklus aktiviert werden, wird festgelegt,
daß eine Datenübertragung
aufgetreten ist. Die LB-Einheit kann mehrere Flits im selben Zyklus
durch Aktivieren mehrerer Ready-Signale bzw. Bereit-Signale bei
Vorhandensein mehrerer Avail-Signale in Anspruch nehmen.
-
Die einzigen Antwortnachrichten,
die durch die LIQ-Einheit fließen,
sind Vektorantworten. Die LB-Einheit garantiert, daß Vektorantworten
immer bei der vollen Rate verbraucht werden können. Die LB-Einheit garantiert
auch, daß alle
Antwortnachrichten, die fälschlicherweise
an der LB-Einheit
ankommen, bei der vollen Rate verbraucht werden. Daher wird ein
Valid-Signal an Stelle eines Ready/Avail-Protokolls von der LIQ-Einheit verwendet,
um eine Antwortübertragung
anzugeben, und es wird der LIQ-Einheit kein Antwortspeicher zugewiesen.
-
Die LIQ/LB-Schnittstellensignale
sind in Tabelle 25 detailliert angegeben (in 12B dargestellt).
-
IOQ
-
Die Ausgangswarteschlange der IO-Schnittstelle
(IOQ) ist ein FIFO-Paar mit getrennten Anforderungs- und Antwortkanälen. Daten
von der II-Einheit 273 werden bei der Geschwindigkeit der
II-Einheit 273 in die IOQ-Einheit geschrieben, die in bezug
auf den Bedrock-Kerntakt asynchron ist. Daten werden von der XB-Einheit 279 bei
der Bedrock-Kerngeschwindigkeit
gelesen.
-
Zur einfachen Implementation werden
die IOQ-Einheit und die POQ-Einheit von derselben Quellenlogik instantiiert.
Das heißt,
daß sie
logisch identisch sind. Bei verschiedenen Ausführungsformen werden spezielle
Merkmale, abhängig
davon, ob die Logik der II-Einheit 273 oder der PI-Einheit 270 dient,
aktiviert oder deaktiviert.
-
Die Ausnahme ist der Zuteilungsauslöser in der
IOQ-Einheit. Der
Zuteilungsauslöser
in der IOQ-Einheit ermöglicht
es der IOQ-Einheit, eine programmierbare Anzahl von Zyklen nach
dem Sehen eines Kopfteils zu warten, bevor sie mit dem Zuteilen
beginnt. Hierdurch wird der IOQ-Einheit eine Chance gegeben, daß sie ausreichend
Einträge
aufweist, damit sie den Zuteiler und den Bus ohne einen unbenutzten
Zyklus optimal verwenden kann. Das Zuteilungsauslöseregister
kann auf II-Frequenz/Kernfrequenz × Anzahl
der Zyklen zur Übertragung
einer Cache-Leitung gesetzt werden.
-
IIQ
-
Die Eingangswarteschlange der IO-Schnittstelle
(IIQ) ist ein FIFO-Paar mit getrennten Anforderungs- und Antwortkanälen. Daten
von der XB-Einheit 279 werden bei der Geschwindigkeit des
Bedrock-Kerns in die IOQ-Einheit geschrieben, die in bezug auf den
II-Takt asynchron ist. Sie werden durch getrennte Anforderungs- und
Antwortregister zur II-Einheit 273 übertragen.
-
Zur einfachen Implementation werden
die IIQ- und die PIQ-Einheit von derselben Quellenlogik instantiiert.
Das heißt,
daß sie
mit Ausnahme des Zuteilungsauslösers
in der IOQ-Einheit logisch identisch sind. Der Zuteilungsauslöser in der
IOQ-Einheit ermöglicht
es, daß die
IOQ eine programmierbare Anzahl von Zyklen nach dem Sehen eines
Kopfteils wartet, bevor sie mit dem Zuteilen beginnt. Hierdurch
wird der IOQ-Einheit eine
Möglichkeit
gegeben, damit sie ausreichend Einträge aufweist, so daß sie die
XB-Bandbreite (den Zuteiler und den Bus) optimal ohne einen unbenutzten
Zyklus verwenden kann. Das Zuteilungsauslöseregister kann auf II-Frequenz/Kernfrequenz × Anzahl
der Zyklen zum Übertragen
einer Cache-Leitung gesetzt werden. Falls der Endteil einer Nachricht
gesehen wird, kann sofort eine Zuteilung vorgenommen werden, ohne
daß auf
die programmierte Anzahl von Zyklen gewartet wird.
-
Zuteiler-
und Datenwegschnittstelle
-
Der Zuteiler kombiniert virtuelle
Kanalanforderungen und Nachrichtenrahmeninformationen von den OQ-Einheiten
mit Ablaufsteuerinformationen von den Ziel-IQs/Einheiten zum gerechten
und wirksamen Zuteilen von Crossbar-Bandbreite. Zum Bereitstellen
einer geringen Latenz unter leichten Lasten und eine hohe Ausnutzung
unter hohen Lasten unterstützt
der Zuteiler zwei Bandbreiteanforderungsschnittstellen, nämlich die
Bypass-Zuteilerschnittstelle und die Wellenfront-Zuteilerschnittstelle, die jeweils nach
der Zuteilerimplementation benannt sind, die sie behandeln.
-
Der Schalter überträgt die Daten zusammen mit einem
virtuellen Kanal-Tag-Endbit von der OQ-Quelle zum IQ- oder Einheitsziel.
-
Bypass-Zuteilung
-
Der Zuteiler unterstützt eine
Bypass-Zuteilung als Mittel einer Zuteilung mit einer geringen Latenz
und einer festen Priorität.
Wenn eine OQ-Einheit leer und unbenutzt ist, kann sie eine Bypass-Zuteilung
für neue Anforderungen
verwenden, um die Latenz zu minimieren. Zum Einleiten einer Bypass-Zuteilung
aktiviert die OQ-Einheit ihre geeignete Anforderungsleitung zu Beginn
eines Taktzyklus (für
eine Zusammenfassung aller Anforderungsleitungen sei auf den nachstehenden
Abschnitt XB-Schnittstelle verwiesen). Falls die angeforderte IQ-Einheit
frei ist und keine in Konflikt stehende virtuellen Nachrichten ablaufen
("MIPs"), gewährt der Bypass-Zuteiler
die IQ-Einheit der anfordernden OQ-Einheit. Beim nächsten Takt muß die OQ-Einheit,
ausgehend vom Anfang des Zyklus, Daten auf den XB-Datenweg geben.
Weil dieser Prozeß der
OQ-Einheit nicht genügend
Zeit bietet, einen FIFO-Lesevorgang abzuschließen, muß die OQ-Einheit die FIFO-Lesestufe
umgehen und die Daten zur sofortigen Übertragung zur XB-Einheit 279 anordnen.
-
Zum Vereinfachen der Implementation
gibt es in der Hinsicht Einschränkungen,
wann eine OQ-Einheit Bandbreite vom Bypass-Zuteiler anfordern kann.
Bypass-Anforderungen können
von einer leeren Warteschlange ausgeführt werden, solange auf anderen
Kanälen
keine MIPs ausstehen.
-
Um n Zyklen früh anfordern zu können, müssen die
Einheiten möglicherweise
spekulieren, daß sie
die XB-Bandbreite benötigen,
sie sind jedoch möglicherweise
schließlich
nicht in der Lage, sie zu verwenden. Zum Lösen dieses Problems unterstützt der
Zuteiler spekulative Bypass-Anforderungen. Sobald eine Bypass-Gewährung empfangen
wird, werden Daten mit dem virtuellen Kanal und dem Xsel der Daten
auf den XB-Datenweg
gegeben. Falls diese mit den registrierten gewährten Werten übereinstimmen,
werden die Daten an der Ziel-IQ-Einheit
als gültig
angesehen, und die Anforderung wird andernfalls als spekulativ angesehen
und ignoriert.
-
Der Bypass-Zuteiler kann über ein
XB_BYPASS_EN-Register deaktiviert werden. Wenn er deaktiviert ist,
wird bypGnt nie aktiviert, und alle Nachrichtenübertragungen werden durch den
Wellenfrontzuteiler 1500 gesteuert.
-
Wellenfrontzuteilen
-
Der Zuteiler unterstützt auch
eine Wellenfrontzuteilung, welche die XB-Bandbreite wirksamer verwendet,
indem die Anzahl der Gewährungen
je Zuteilung maximiert wird, und bietet OQ-Anforderern Gerechtigkeit durch
den Altersmechanismus. Eine OQ-Einheit kann immer eine Wellenfrontzuteilung
anfordern und sollte Wellenfrontzuteilungs-Anforderungen für alle Ziele
aktivieren, für
die sie am Kopf eines FIFOs ein gültiges Paket hat. Der Wellenfrontzuteiler
kann Gewährungen
wirksamer zuweisen, wenn ihm mehrere Anforderungen übergeben
werden.
-
Die OQ-Einheit muß ihre Wellenfrontzuteilungs-Anforderung(en)
zu Beginn eines Zyklus festlegen. Gegen Ende desselben Zyklus gibt
der Zuteiler der OQ-Einheit eine Gewährung. Die OQ-Einheit hat dann
einen vollen Zyklus zum Fertigstellen ihres FIFO-Lesens, und sie
muß dann
auf dem nächsten
Zyklus Daten für die
XB-Einheit 279 bereitstellen.
-
14 ist
ein Blockdiagramm einer Ausführungsform
eines XB-Zuteilungsfilters 1400 (das MOQ-Filter ist dargestellt).
Bevor Zuteilungsanforderungen den Wellenfrontzuteiler erreichen,
werden sie durch den Filterblock 1400 gesendet. Der Filterblock
verhindert das Mischen von zwei Nachrichtenströmen auf einem virtuellen Kanal.
Falls es keine anderen virtuellen Kanal-MIPs gibt, die auf dasselbe
Ziel einer OQ-Anforderung abzielen, wird diese Anforderung vom Filterblock
zum Wellenfrontzuteiler 1500 gesendet (siehe 15).
-
Der Wellenfrontzuteiler ist in Matrixform
eingerichtet, wenngleich er zur Seite geneigt ist, um im schlimmsten
Fall auftretende Zeitwege zu minimieren. Zeilen in der Wellenfrontmatrix
stellen OQ-Quellen dar, während
Spalten IQ-Ziele
darstellen. Jeder Abschnitt des Wellenfrontzuteilers ist das Ende
einer gefilterten Zuteilungsanforderungsleitung und stellt eine
bestimmte OQ-Einheit dar, die eine bestimmte IQ-Einheit anfordert. OQ-Einheiten
können
mehrere IQs in einem Zuteilungsdurchgang anfordern. OQ-Einheiten
wird maximal eine IQ-Einheit je Durchgang gewährt. Es sei bemerkt, daß der Wellenfrontzuteiler
die MOQ-Einheit als 3 OQ-Einheiten behandelt, weil die MOQ-Einheit 3 Datenströme gleichzeitig
bereitstellen kann. Demgemäß kann die MOQ-Einheit
bis zu 3 Gewährungen
in einem Zuteilungsdurchgang empfangen.
-
Wellenfrontzuteilungsabschnitte,
die der oberen linken Ecke in 15 am
nächsten
liegen, werden zuerst beurteilt, und sie haben daher die höchste Priorität. Falls
eine Anforderung an einem bestimmten Abschnitt gewährt wird,
werden diese Informationen nach rechts weitergeleitet, weil der
zuteilende Abschnitt seine Row-Free-Leitungen (RFree-Leitungen)
bzw. Zeile-Frei-Leitungen und Column-Free-Leitungen (CFree-Leitungen)
bzw. Spalte-Frei-Leitungen deaktiviert. Innerhalb eines individuellen
Abschnitts kann eine Anforderung nur gewährt werden, falls die RFree-
und die CFree-Leitungen
beide aktiviert sind.
-
Es gibt insgesamt 6 Wellenfrontzuteiler
in der XB-Einheit 279,
wobei jede einen anderen Prioritätssatz aufweist.
Es sei bemerkt, daß die
in 15 dargestellte
Wellenfrontzuteilerstruktur eine feste Priorität aufweist, wobei POQ0 die
höchste
Priorität
für PIQ0
aufweist, POQ1 die höchste
Priorität
für LIQ
aufweist usw. Jeder der 6 Wellenfrontzuteiler in der XB-Einheit 279 stellt
eine andere Prioritätsreihenfolge
dar, und abhängig
davon, welche OQ-Einheit
das älteste
Paket aufweist, das für
eine bestimmte IQ-Einheit bestimmt ist, wählt der Zuteiler einen der
Wellenfrontzuteiler für
die Verwendung aus.
-
Die arb/gnt-Schnittstelle
zwischen dem Zuteiler und den OQ-Einheiten
-
XB-Anforderungen und Gewährungen
werden zwei Takte vor den Daten in die Pipeline gegeben, um zu ermöglichen,
daß ein
voller Zyklus des OQ-Pufferspeichers gelesen wird, bevor die Daten
dem Datenweg präsentiert
werden. 15A zeigt eine
Tabelle (Tabelle 29) von Wellenfrontzuteilersignalen als ein Beispiel.
-
Crossbar-Zuteilungsgerechtigkeit
-
Zum Gewährleisten einer Gerechtigkeit
und des Weiterleitungsfortschritts versucht der Zuteiler, wenn immer
möglich,
die "älteste" Zuteilung auf dem
Chip zu gewähren. "Älteste" ist durch ein Alterungsprotokoll definiert,
das an den OQ-Einheiten implementiert ist und zum Zuteiler weitergeleitet
wird. Ein neuer Kopfteil, der am Kopf einer virtuellen Kanalwarteschlange
ankommt, empfängt
ein Alter von 0. Bis die Nachricht vollständig ist, wird das Alter bei
einer Rate inkrementiert, die durch den Zuteiler bestimmt ist. Die
vom Zuteiler erzwungene Alterungsrate ist über das XB_AGE_WRAP-Register
programmierbar. Es sei bemerkt, daß die Bypass-Zuteilung nicht
gerecht ist, daß jedoch
jede Nachricht, die keine Bypass-Gewährung empfängt, sofort zu einer Wellenfrontzuteilung
geht, die gerecht ist.
-
Wellenfrontanforderungen haben eine
höhere
Priorität
als Bypass-Anforderungen.
-
Das Zuteiler-Prioritätsmodul
vergleicht ständig
die Alter von jeder OQ-Einheit. Das größte Alter wird stets ausgewählt, und
ihm wird entsprechend seinem bevorzugten ageXsel-Feld Priorität gegeben.
Im Fall eines Gleichstands wählt
der Prioritätsblock
den Gewinner entsprechend einem Umlaufzeiger. Der Zeiger läuft in jedem
Gewährungszyklus,
unabhängig
von den Gewährungsergebnissen,
weiter. Um zu verhindern, daß virtuelle
Nachrichten abgeschnitten werden, bevor Alter auf hohe Niveaus fortgeschritten
sind, läuft
der Umlaufzähler
nicht weiter, bevor wenigstens eine der OQ-Einheiten ein Alter von Acht oder mehr
aufweist (die Hälfte
seines Maximalwerts).
-
Das Prioritätsmodul benötigt einen wollen Taktzyklus
zum Abschließen
des Altersvergleichs zwischen allen OQs. Wegen dieser Verzögerung eilen
Prioritätsinformationen
Gewährungsentscheidungen
immer um 1 Zyklus nach. Um zu verhindern, daß neue Nachrichten das Alter
der vorhergehenden Nachricht infolge dieser Verzögerung erben, wird der nächste Anfordernde
von dieser OQ-Einheit so behandelt, als ob er ein Alter von 0 für einen
Anforderungszyklus hätte,
falls der Endteil-Flit einer Nachricht eine Gewährung empfängt.
-
Im Fall von Altersgleichheiten verwendet
der Zuteiler eine pseudozufällige
Auflösungsfunktion
zum Wählen
eines Gewinners. Dies ist wichtig, wenn Alter beim Maximalwert von
0 × f
sättigen
oder wenn die Zuteileraltersfunktion deaktiviert ist. Wenn ein Gleichstand
auftritt, wird ein Gewinner zufällig
aus dem Pool oder aus zuteilenden OQ-Einheiten ausgewählt. Die Pseudozufallszahl
wird unter Verwendung eines linearen 15-Bit-Rückkopplungsschieberegisters
(LFSR) erzeugt. Das LFSR wird durch das Polynom X15 +
X + 1 getrieben, das in sich nicht wiederholender Weise alle 215 Takte ein Gleichgewicht von Nullen und
Einsen bereitstellt.
-
Crossbar-Ablaufsteuerung
-
Es werden von jeder IQ-Einheit (oder
der Einheit, an der keine IQ-Einheit vorhanden ist) mehrere Ablaufsteuersignale
bereitgestellt, um die Pipelinetiefe des Zuteilers zu behandeln.
Die Full- und FullIn1-Signale müssen
auf der Grundlage des Warteschlangen-Füllniveaus aktiviert werden.
Das Warteschlangen-Füllniveau muß in dem
Zyklus nach einer gültigen Übertragung
von der Crossbar-Einheit aktualisiert werden.
-
FullIn1 muß immer dann aktiviert werden,
wenn für
ein oder weniger Crossbar-Flits, die aus einem Kopfteil oder bis
zu zwei Datenzyklen bestehen, Platz vorhanden ist. Full muß immer
dann aktiviert werden, wenn nicht genug Platz vorhanden ist, um
einen einzigen Crossbar-Flit zu behandeln. In Warteschlangen, in denen
Kopfteile und Daten getrennt gespeichert sind, muß der Platzmangel
für beide
bewirken, daß Full/FullIn1
aktiviert wird.
-
Es sei auf 16 für
ein Zeitablaufdiagramm verwiesen, in dem die Beziehung zwischen
Crossbar-DataV(alid)-Signalen
und den Full-, FullIn1-Signalen dargestellt ist.
-
Zuteiler-Verbindbarkeit
-
Signale innerhalb des Zuteilers werden
mit zwei Großbuchstaben,
welche die Quelleneinheit (P0, P1, M0, M1, NO, IO oder LO) spezifizieren,
gefolgt von einer Tätigkeit
(arb, gnt, mip), gefolgt von zwei Großbuchstaben, welche die Zieleingabeeinheit
(PI, MI, NI, II, LI) spezifizieren, benannt. Tabelle 30 (siehe 16A) faßt die virtuellen Kanäle zusammen,
die jede Warteschlange zum Anfordern von Eingangswarteschlangen
verwenden kann. Tabelle 31 (siehe 17)
faßt die
virtuellen Kanäle
zusammen, die jede Warteschlange verwenden kann, um Eingangswarteschlangen
anzufordern.
-
Datenweg-Crossbar-Schnittstelle
-
Datenübertragungen entlang dem Crossbar-Datenweg
werden mit einem DataValid-(DataV)-Steuersignal qualifiziert und
sie werden mit Virtualkanal-(DataVch)- und Nachrichtenende-(DataT)-Informationen
versehen. Es wird ein einziger Zyklus aufgewandt, um sie zu durchlaufen.
Dabei werden Daten registriert, bevor sie auf den Crossbar-Datenweg
gegeben werden, und sie fließen
nach dem Ausgangsmultiplexer in ein Register. Crossbar-Auswahlleitungen
werden durch den Zuteiler gesteuert und als One-Hot-Busse registriert,
um die Ausfalllatenz zu minimieren.
-
XB-Strukturen
-
Die folgenden Abschnitte beschreiben
jede XB-Warteschlangenstruktur
getrennt.
-
POQ-Struktur
-
Die POQ-Struktur ähnelt der nachstehend beschriebenen
IOQ-Struktur.
-
MOQ-Struktur
-
Die MOQ-Struktur ist in getrennte
Kopfteil-(MOQH)- und Daten-(MOQD)-Warteschlangen aufgeteilt. Die
MOQH-Einheit enthält
zwei unabhängige
FIFOs (Durchlaufregister), wobei einer für jeden virtuellen Kanal vorgesehen
ist. Die Daten-MOQD-Einheit
ist ein Nur-Antwort-Daten-FIFO. Es wurde für die MOQ-Einheit ein FIFO-Entwurf
einem DAMQ-Entwurf (Entwurf mit einem dynamisch zugeordneten Mehrfachwarteschlangenspeicher)
vorgezogen, weil leistungsempfindlicher Verkehr von der MD-Einheit 275 vorhersehbar
ist und nicht erheblich von einer DAMQ-Steuerstruktur profitieren
würde.
Der FIFO verringert den Steuerlogik-Zusatzaufwand, und getrennte
unabhängige
FIFOs ermöglichen
das beliebige Verschachteln von Anforderungs- und Antwortverkehr.
-
MOQ-Datenpuffer
-
17 zeigt
ein Blockdiagramm von MOQ-Datenpuffern 1700.
-
Anforderungsnachrichtendaten laufen
vollständig über die
MOQH-Einheit. Kurze Datenantworten können auf der Grundlage davon,
welcher Abschnitt der MD-Einheit 275 (Kopfteil/Verzeichnis
gegenüber
Daten/Speicher) sie erzeugt hat, über beide Warteschlangen laufen.
Lange (Cache-Leitungs-) Datenantworten laufen immer über MOQD.
-
Die MOQ-Anforderungs- und Antwort-FIFOs
sind mit geeigneten FIFO-Speichern versehen. Die MOQD-Einheit verwendet
Doppelbank-FIFOs zum Akzeptieren von Vollbandbreiteverkehr von der
MD-Einheit 275, während
die Bänke
abwechselnd gelesen werden, um eine Übereinstimmung mit der Bandbreite
der XB-Einheit 279 bereitzustellen.
Der MOQH-FIFO wird zwischen Anforderungs- und Antwort-FIFOs geteilt,
um Multiplexniveaus im Datenweg zu reduzieren und an FIFO-Zusatzaufwand
zu sparen.
-
Die Doppelbank-MOQD-Einheit wird
als ein Satz von Viertel-Cache-Leitungs-(QCL)-Antwortpuffern verwaltet
(ein QCL = zwei Takte in jeder Bank). Cache-Leitungs-Antworten von
der MD-Einheit 275 bestehen aus vier QCL-Schreibvorgängen, und
alle Teilantworten (einschließlich
F&OP) nehmen
einen vollständigen QCL
in Anspruch. Die MOQH-Einheit enthält Einzeltakt-Kopfteile sowie
Kopfteile zuzüglich
einzelner Datenpakete. Die MOQH-Antwortkopfteile werden decodiert,
wenn sie die MOQ-Einheit verlassen, um zu bestimmen, wie viele MOQD-Einträge dem Kopfteil
zugeordnet sind.
-
Weil die MD-Einheit 275 MOQ-Platz
reservieren muß,
bevor sie eine Anforderung an den Speicher ausgibt, behält die MD-Einheit 275 eine
Schattenkopie der Füllniveaus
von den MOQD- und
MOQH-Einheiten bei. Eine Ablaufsteuerung wird durch ein Signal je
Warteschlange erreicht, das angibt, daß ein Eintrag (einzelner Kopfteil
oder QCL von Daten) abgezogen worden ist.
-
NOQ-Struktur
-
Die NOQ-Einheit enthält die virtuellen
SN1Net-Netzwerkkanal-Empfangspuffer. Jeder der vier virtuellen Kanalpuffer
ist 16 Einträge
tief, wobei jeder Eintrag einem Router-Netzwerk-Flit – einem Kopfteil oder 128 Datenbits – entspricht.
Jeder Kanal kann eine beliebige Mischung von Kopfteilen und Daten
enthalten. Die NOQ-Puffer sind als vier unabhängige FIFOs strukturiert.
-
NOQ-Puffer
-
FIFOs wurden DAMQs für die NOQ-Einheit
vorgezogen, um den Steuerstruktur-Zusatzaufwand zu verringern. Leistungskritische
Nachrichten sind gewöhnlich
Leseanforderungen für
die MD-Einheit 275 und Leseantworten für die PI-Einheit 270,
und weil diese Nachrichtentypen auf getrennten virtuellen Kanälen laufen, stören sie
einander nicht. Wiedereinschreibnachrichten in die MD-Einheit 275 teilen
sich den Anforderungskanal mit Lesenachrichten für die MD-Einheit 275,
diesem Effekt wird jedoch in gewissem Maße dadurch entgegengewirkt,
daß die
Anforderungsverarbeitung der MD-Einheit 275 Lesevorgänge bevorzugt,
und ihm wird auch dadurch entgegengewirkt, daß die virtuelle Kanalanpassung
im Netzwerk nahelegt, daß Lesevorgänge leerere
Kanäle
verwenden. Weil jeder der vier virtuellen Kanäle ein unabhängiges FIFO-Kabel
zur XB-Zuteilung aufweist, werden die Wirkungen der virtuellen Kanalanpassung
des Netzwerks zur Bedrock-XB-Einheit 279 weitergeleitet.
-
Die vier logischen FIFOs in der NOQ-Einheit
sind über
eine Doppelbank-FIFO-Struktur implementiert. Diese Struktur ermöglicht es,
daß jeder
FIFO 65 Bits breit ist, und sie erfordert, daß Kopfteile über beide
Bänke geschrieben
und ausgelesen werden.
-
IOQ-Struktur
-
Die IOQ-Struktur muß Verkehr
synchronisieren, der von der II-Einheit 273 zum Hub-Kern-Taktbereich fließt. Dies erfolgt
dadurch, daß ein
Standard-Doppelsynchronisierer auf einen Gray-Code-Zähler angewendet wird.
Wenn die POQ-Einheit eine Nachricht auf der Hub-Kernseite empfängt, führt sie
eine Zuteilung für
die XB-Einheit 279 aus, sobald die ganze Nachricht empfangen
worden ist. Dies wird für
Blocklängennachrichten ausgeführt, um
zu verhindern, daß die
XB-Einheit 279 höherer
Bandbreite den IOQ-FIFO unterläuft.
Die IOQ-Einheit
ist in unabhängige
Anforderungs- und Antwort-FIFOs unterteilt, wenngleich sie sich
nicht denselben Pufferspeicher-FIFO teilen.
-
PIQ-Struktur
-
Die PIQ-Einheit empfängt Daten
von der XB-Einheit 279 und schreibt sie in einen FIFO,
der von der PI-Einheit 270 auszulesen ist. Es gibt für jeden
der Anforderungs- und Antwortkanäle
64 Einträge.
Im synchronen Modus können
die Daten von der XB-Einheit 279 zur PI-Einheit 270 umgeleitet
werden.
-
MIQ-Struktur
-
Die MIQ-Einheit ist in vier logische
FIFOs unterteilt, die in 3 FIFOs implementiert sind. Kopfteile werden in
einer einzigen Bank, nämlich
der Anforderungs/Antwort-MIQH, gepuffert, und eine Doppelbank-Anforderungs/Antwort-MIQD-Einheit
enthält
zugeordnete Daten. Die MIQD-Puffer werden in 3 Blockanforderungseinträge und 1
Blockantworteintrag unterteilt, weil Anforderungsdaten für die MD-Einheit 275 üblicher
sind als Antwortdaten.
-
Die MIQ-Einheit präsentiert
der MD-Einheit 275 stets einen einzigen Kopfteil. Falls
nur ein virtueller Kanal einen gültigen
Kopfteil enthält,
präsentiert
die MIQ-Einheit den gültigen
Kopfteil und gibt eine Anforderung oder eine Antwort an. Falls die
MIQ-Einheit in beiden Kanälen
einen gültigen
Kopfteil aufweist, präsentiert sie
der MD-Einheit 275 stets den Antwortkanal, solange die
MD-Einheit 275 nicht ihr Antwortkanal-Voll-Signal aktiviert.
Wenn die MD-Einheit 275 bereit ist, einen Kopfteil zu verbrauchen,
aktiviert sie das HeaderRead-Signal, das diesen Eintrag aus der
Warteschlange entfernt.
-
IIQ-Struktur
-
Die IIQ-Einheit empfängt Daten
bei der Kerndatenrate von 1,6 GB/s von der XB-Einheit 279 und schreibt
sie entweder in den Anforderungs- oder den Antwort-FIFO in der GRA-Einheit.
Nachdem der Schreibzeiger mit dem IO-Taktbereich synchronisiert
wurde, kann er bei 0,8 GB/s von der II-Einheit 273 ausgelesen werden.
Es gibt in den II-Warteschlangen keinen Bypass-Datenweg.
-
LIQ-Struktur
-
Die LIQ-Einheit bietet eine zweckgebundene
Warteschlange für
eine PIO-Anforderung von der NI-Einheit 274. Die PIO-Anforderung tritt
selten auf, weist jedoch eine höhere
Priorität
auf, um einen Anforderungs-Anforderungs-PIO-Stau zu vermeiden. Wenngleich
sie LINVAL dient, muß die
LB-Einheit in der Lage sein, eine einwärts gerichtete Fern-PIO-Anforderung
von der NI-Einheit 274 zu bedienen. Die einzige Anforderung,
die die NI-Einheit 274 an die LB-Einheit stellen kann,
ist eine PIO-Anforderung. Anforderungen können den FIFO umgehen, und
Antworten werden in das Ausgaberegister geschrieben und treten nie
in den FIFO ein. Das Antwortregister ist freilaufend, weil die LB-Einheit
eine Antwort in jedem Zyklus verzögerungsfrei verarbeiten kann.
-
Warteschlangengrößen und
-typen
-
Gemäß einer Ausführungsform
ist die XB-Warteschlangenstruktur mit IBM-CMOS-6s-Niederleistungs-Registerfeldern
(FIFOs) (von IBM Corp. aus Burlington, VT erhältlich) oder mit Standardregistern,
bei denen die Warteschlangengröße den Zusatzaufwand
von FIFO-Gates nicht rechtfertigt, implementiert. Tabelle 32 (in 21A dargestellt) faßt die Größen und
den Typ jeder Warteschlange in der XB-Einheit 279 zusammen.
-
8 zeigt
detailliert die Aufteilung der XB-Funktionseinheiten in logische Module
für den
physikalischen Entwurf.
-
Speicher-/Verzeichnisschnittstelle
-
Die Bedrock-(eine Ausführungsform
des Node-Controllers 75)-Speicher-/Verzeichnisschnittstelle (MD) 275 steuert
den Zugriff auf alle Speicher im Bedrock-System. Zusätzlich zum
Ausführen
der Standard-Speichersteuerungsvorgänge, wie das Lesen aus dem
Speicher und das Schreiben in diesen, verfolgt die Bedrock-MD-Einheit 275 genau,
welche Prozessoren und welche IO-Schnittstellen gegenwärtig jede
Cache-Leitung in dem System verwenden. Bei jedem Zugriff prüft die Bedrock-MD-Einheit 275 diese
Tabelle (als das Verzeichnis bezeichnet) und erzeugt die erforderlichen
Nachrichten, um die Cache-Kohärenz aufrechtzuerhalten.
-
Die Bedrock-Einheit MD 275 stellt
genug Bandbreite bereit, um jede einzelne Anforderungsklasse zufriedenzustellen.
Mit anderen Worten können
alle vier Prozessoren oder beide Richtungen des SN1-Netzes oder
beide Richtungen auf der IO-Schnittstelle bei der vollen Bandbreite
auf den Speicher zugreifen. Die Bedrock-MD-Einheit 275 liefert
auch die Zuteilungsstrukturen, die erforderlich sind, um Bandbreite
gerecht und wirksam zuzuweisen, wenn mehrere Anfordernde auf den
Speicher zugreifen. Der "Architekturabschnitt" enthält einen
Architekturebenen-Überblick über die
MD-Einheit 275, der die folgenden Themen abdeckt:
- • Speicheradressierung
- • Seitenbehandlung
- • Schnittstellen
- • Nachrichtentypen
- • Schutzmodell
- • Seitenzähler
- • Abrufen
und Operationen
- • Backdoor-ECC
- • Backdoor-Verzeichnis
- • Junk-Bus
- • SDRAM-Initialisierung
- • DDR-SDRAM-Initialisierung
- • Refresh
bzw. Auffrischung
- • Eingebauter
Selbsttest
- • SN0-Kompatibilität
-
Nachfolgend werden die wesentlichen
Architekturblöcke
beschrieben, von denen es drei gibt (in 31 dargestellt):
- • Ausgabe-Block
(IB) 3110: Nimmt alle neuen Nachrichten auf und gibt sie
in wirksamer und gerechter Ordnung an den Rest des Speichersystems
aus. Gibt Adressen- und Steuersignale an den DRAM aus.
- • Speicherblock
(MB) 3118: Überträgt Daten
vom DRAM in die XBAR-Einheit oder aus der XBAR-Einheit in den DRAM.
- • Verzeichnisblock
(DB) 3116: Liest die Verzeichnisdaten, erzeugt erforderliche
Nachrichtenköpfe,
berechnet die neuen Verzeichnisdaten und schreibt sie zurück.
-
Anschließend werden Implementationsinformationen
erörtert,
die mehrere Architekturblöcke
kreuzen:
- • DDR-Synchronisation
- • Zeitablaufdiagramme
-
Architektur
-
Dieser Abschnitt gibt zuerst eine
detaillierte Beschreibung des Gesamt-Speichersystementwurfs. Die folgenden
Unterabschnitte erklären
dann die Architekturmerkmale höherer
Ebene, die auf das Speichersystem aufbauen.
-
Speichersystem
-
Das Bedrock-Speichersystem weist
einen Bedrock-Chip, einige Taktpuffer, einen Flash-PROM, eine UART-Einheit,
vier LED-Bänke
und zwei, vier, sechs oder acht DIMMs (Doppelreihen-Speichermodule – "Dual Inline Memory
Modules") auf. Jeder
Bedrock-DIMM besteht aus einer oder zwei 72-Bit-DRAM- Speicherunterbänken und
einer oder zwei 16-Bit-Verzeichnis-DRAM-Unterbänken. 42 zeigt ein Diagramm des Vorderteils
eines Bedrock-DIMMs. In einem Zweibank-DIMM würde die Rückseite des DIMMs seiner Vorderseite
gleichen.
-
DIMMs können in Zweiergruppen belegt
(oder nicht belegt) sein, woraus sich ein 128-Bit-breites Speichersystem
(plus 16 ECC-Bits und 32 Verzeichnis-Bits) ergibt. Um verschiedenen
Systemanwendungen Rechnung zu tragen, unterstützt die Bedrock-MD-Einheit 275 viele
verschiedene DIMM-Größen. Jeder
Satz von zwei DIMMs muß die
gleiche Größe aufweisen.
-
Die Bedrock-MD-Einheit 275 unterstützt die
folgenden DIMM-Größen: 32
MBs, 64 MBs, 128 MBs, 256 MBs, 512 MBs und 1 GB. Tabelle 58 (siehe 32A) zeigt Informationen
zu jeder potentiellen DIMM-Konfiguration (schraffierte Zeilen sind
die wahrscheinlichsten DIMMs, die das SN1-System tatsächlich verwendet).
-
Die Bedrock-MD-Einheit 275 unterstützt zwei
verschiedene DIMM-Typen, nämlich
DDR-SDRAM-std und DDR-SDRAM-prm. DDR-SDRAMs sind spezielle Versionen von
SDRAM, welche Daten zweimal so schnell ausgeben wie sie Adressen
empfangen. Alle Produktions-Bedrock-Systeme verwenden DDR-SDRAM.
-
Standard-(std)-DIMMs enthalten eine
Verzeichnis-DRAM-Bank
für jeweils
zwei Speicher-DRAM-Bänke.
Premium-(prm)-DIMMs
enthalten eine Verzeichnis-DRAM-Bank für jede Speicher-DRAM-Bank. Systeme mit
bis zu 128 Prozessoren können
Standard-DIMMs verwenden. Premium-DIMMs arbeiten in jedem System (bis
zu maximal 1024 Prozessoren).
-
Der Adreßbus vom Bedrock-Chip zu den
DIMMs läuft
immer bei 100 MHz. Der Datenbus zwischen dem Bedrock-Chip und den
DIMMs läuft
bei 200 MHz. Die maximalen Bandbreiten betragen daher 3,2 GB/s.
-
Verzeichnisorganisation
-
Die Bedrock-MD-Einheit 275 unterhält die System-Cache-Kohärenz durch
Prüfen
eines Verzeichnisspeichers bei jedem kohärenten Zugriff des Speichersystems.
Weil jeder Zugriff den Zustand ändert,
muß die Bedrock-MD-Einheit 275 ein
Lesen-Modifizieren-Schreiben
des Verzeichnisspeichers parallel mit jedem Lesen oder Schreiben
des Datenspeichers ausführen.
-
In einem mit DDR-SDRAM-std-DIMMs
belegten System gibt es eine Verzeichnis-DRAM-Bank für jeweils
zwei DRAM-Speicherbänke.
Weil DIMMs in Zweiergruppen angeordnet sind, kann die Bedrock-MD-Einheit 275 die
zwei Verzeichnis-DRAM-Bänke
(eine auf jedem DIMM) zwischen den zwei Speicher-DRAM-Bänken (über die
beiden DIMMs verteilt) teilen. Dies führt zu einem im wesentlichen
16 Bit breiten Datenweg, der auf beiden Seiten des 32-Bit-Verzeichnis-Datenwegs
in die Bedrock-MD-Einheit 275 eintreten könnte. Weil
der Standard-Verzeichniseintrag 32 Bits aufweist, wird er über zwei
Zyklen gelesen und geschrieben. 43 zeigt eine
schematische Darstellung eines Standard-Verzeichnissystems (mit
zwei DRAM-Speicherbänken
und einer Verzeichnis-DRAM-Bank je DIMM).
-
In einem mit DDR-SDRAM-prm-DIMMs
belegten System gibt es eine Verzeichnis-DRAM-Bank für jede Speicher-DRAM-Bank.
In diesem Fall sind die Verzeichnisbänke so wie die Daten über die
beiden DIMMs ausgebreitet, wodurch ermöglicht wird, daß der volle
32-Bit-Verzeichnisdatenweg verwendet wird. Weil der Premium-Verzeichniseintrag
64 Bits aufweist, wird er über
zwei Zyklen gelesen und geschrieben. 44 zeigt eine
schematische Darstellung eines einzigen Premium-DIMMs in einem Premium-Verzeichnissystem
(mit zwei Speicher-DRAM-Bänken und
zwei Verzeichnis-DRAM-Bänken).
-
Speicheradressierung
-
Eine maximale Speicherkonfiguration
im M-Modus von acht 1-GB-DIMMs führt
zu einem Adreßraum von
8 GB. Eine maximale Konfiguration im N-Modus von vier 1-GB-DIMMs
führt zu
einem Adreßraum
von 4 GB. Die Bedrock-MD-Einheit 275 ordnet jedem Satz
von zwei DIMMs zwei 1-GB-Blöcke
zu. Die DIMMs mit zwei physikalischen Bänken verwenden beide Blöcke, während DIMMs
mit einer Bank nur einen einzigen Block verwenden. Falls ein Satz
von DIMMs den 2-GB-Raum nicht vollständig ausfüllt, wird erwartet, daß das Betriebssystem
um die verbleibenden Lücken
im Speicher herum anordnet. Die minimale Speicherkonfiguration würde aus
zwei 32-MB-DIMMs oder 64 MBs bestehen.
-
Alle DDR-SDRAMs, die von der Bedrock-MD-Einheit 275 unterstützt werden,
enthalten vier interne (logische) Bänke. Die Bedrock-MD-Einheit 275 verschachtelt
diese vier logischen Bänke
unter Verwendung der niedrigstmöglichen
Adreßbits
(direkt über
der Cache-Leitungsgröße von 128
Bytes). Tabelle 59 (siehe 34A)
zeigt, wie jedes Adreßbit
verwendet wird. Die Bedrock-MD-Einheit 275 steuert alle
dargestellten Anschlußstifte,
selbst wenn die kleineren DIMMs möglicherweise nicht jedes Bit
empfangen oder interpretieren.
-
Speicher- und Verzeichnisadressierung
-
Bei jeder kohärenten Transaktion führt die
Bedrock-MD-Einheit 275 ein
Lesen-Modifizieren-Schreiben des Verzeichniseintrags aus. Zusätzlich könnte sie
ein Lesen des Schutzeintrags und/oder ein Lesen-Modifizieren-Schreiben
des Seitenzählereintrags
ausführen.
Der Verzeichniseintrag, der Schutzeintrag und der Seitenzählereintrag
werden alle im Verzeichnis gespeichert. Die DIMM-, physikalischen,
logischen und RAS-Adressen, die in Tabelle 59 dargestellt sind,
sind für
Speicher- und Verzeichnisadressen gleich. Die Verzeichnis-CAS-Adressen
sind jedoch für
jeden Eintragstyp verschieden. In den CASDir-, CASProt- und CASCount-Feldern
sind die Konstanten folgendermaßen
definiert: D = 0, P = 1, C = 0, x = 0 und Rgn beziehen sich auf
die Bits 4:0 des Schutzbereichs.
-
Seitenbehandlung
-
Die SDRAMs und die DDR-SDRAMs, die
im Bedrock verwendet werden, werden wie alle DRAMs unter Verwendung
einer Zeilenadresse und einer Spaltenadresse angesteuert. Mehrere
Spaltenadressen können
ohne eine zusätzliche
Verzögerung
sequentiell gelesen werden. Um Zeilen (auch als Seiten bezeichnet) zu ändern, muß der DRAM
die alte Zeile schließen
und darf erst dann die neue Zeile öffnen. Aus diesem Grund ist
ein Zugriff auf eine neue Zeile viel kostspieliger als ein Zugriff
auf eine neue Spalte.
-
Trotz dieser Tatsache schließt die Bedrock-MD-Einheit 275 immer
die Zeile (Seite) unmittelbar nach Abschluß einer Transaktion (unabhängig von
der Adresse der nachfolgenden Transaktionen). Diese Entscheidung
wurde aus einer Reihe von Gründen
getroffen:
- • Durch
Ausführen
einer 4-Wege-Verschachtelung an der Cache-Leitungsadresse und durch
Unterstützen eines
vollständigen
Pipeline-Betriebs von vier Anforderungen kann die Bedrock-MD-Einheit 275 noch
die volle Bandbreite erreichen.
- • Wenn
mehrere Schnittstellen (und daher mehrere Ströme) auf den Speicher zugreifen
(die einzige Zeit, zu der die Speicherschnittstelle die volle Bandbreite
erreichen kann), geht viel von der Wirksamkeit verloren, wenn Seiten
offengelassen werden.
- • Wenn
ein einziger Strom auf den Speicher zugreift, können die zusätzliche
Bandbreite und die Umordnungsfähigkeit
der Zuteilungslogik den größten Teil
der Leistungsfähigkeitsdifferenz
in bezug auf das Offenhalten der Seite abmildern oder diese möglicherweise
sogar vollständig
aufheben.
-
Transaktionsgruppierung
-
Ein vollständiger Cache-Leitungs-Lesevorgang
kann sich in acht 5-ns-Zyklen über
die 128 Bit breite Speicherschnittstelle bewegen. Leider sind zwölf 5-ns-Zyklen
erforderlich, um das Lesen-Modifizieren-Schreiben des Verzeichnisses
auszuführen,
das zum Aufrechterhalten der Cache-Kohärenz
notwendig ist. Aus diesem Grund gruppiert die Bedrock-MD-Einheit 275 alle
Transaktionen (wenn möglich)
zu Paaren. Auf diese Weise können
zwei Lesevorgänge,
zwei Modifiziervorgänge
und zwei Schreibvorgänge
unter zwei Daten lese- oder -schreibvorgängen auftreten, ohne daß Bandbreite
verlorengeht. Die Bedrock-MD-Einheit 275 kann beliebige
zwei kohärente
oder vollständige
Cache-Leitungs-Transaktionen gruppieren. Alle Teiltransaktionen müssen selbständig ausgeführt werden.
-
Schnittstellen
-
Die Bedrock-MD-Einheit 275 ist über die
Bedrock-Crossbar-Einheit
mit dem Rest des Bedrock-Systems verbunden. Eine einzige 1,6-GB/s-Verbindung
behandelt Daten und Kopfteile, die von der Crossbar-Einheit in die
MD-Einheit 275 eintreten. Drei 1,6-GB/s-Verbindungen behandeln
Daten und Kopfteile, die von der MD-Einheit 275 in die
Crossbar-Einheit eintreten.
-
Um das Speichersystem besser verwenden
zu können,
behandelt die Bedrock-MD-Einheit 275 Anforderungen von
PI0, von PI1, von NI oder II und Antworten als getrennte virtuelle
Kanäle.
Hierdurch verhindert die MD-Einheit 275 Engpässe, die
auftreten würden,
wenn ein Strom auf das Leerwerden eines konkurrierenden Stroms warten
müßte, bevor
fortgesetzt wird. Wenn Nachrichten in der MD-Einheit 275 (im
IB-Block) ankommen, werden sie auf der Grundlage ihres virtuellen
Kanals in getrennte Eingangswarteschlangen geschrieben. Wenn Nachrichten
die MD-Einheit 275 verlassen (in die MOQ-Einheit 3113,
siehe 31), werden sie auf
der Grundlage ihres virtuellen Kanals (Antworten auf PI0, PI1, NI
oder II und Anforderungen) in getrennte Ausgangswarteschlangen geschrieben.
Die Zuteilungsmaschine im IB-Block gewährleistet, daß die MD-Einheit 275 Bandbreite
zwischen den Kanälen
gerecht zuordnet.
-
Nachrichtentypen
-
Auf der hohen Ebene empfängt die
Bedrock-MD-Einheit 275 lediglich Nachrichten von der Crossbar-Einheit
und erzeugt Antworten, die in die Crossbar-Einheit zurückübertragen
werden. Zur Referenz zeigen die Tabelle 60 (siehe 34B) und die Tabelle 61 (siehe 34C) alle von der Bedrock-MD-Einheit 275 empfangenen
und erzeugten Nachrichten. Die Verzeichnistabelle (in der SN1-Cache-Kohärenz-Protokollspezifikation
beschrieben) bestimmt genau, welcher Satz auswärts gerichteter Nachrichten
ansprechend auf eine bestimmte einwärts gerichtete Nachricht empfangen
wird.
-
Schutzmodell
-
Ein Bedrock-System kann bis zu 1024
Prozessoren skaliert werden. Es wäre fast unmöglich, ein einziges Betriebsystem
mit einem geteilt verwendeten Speicher auf einem so großen System
zu verwenden. Um solche Systeme verwendbar zu machen, muß das Bedrock-System
eine Unterstützung
für mehrere
Betriebssysteme aufweisen, die auf derselben Basis eines geteilt
verwendeten Speichers arbeiten. Im allgemeinen steuert jedes Betriebssystem
seine eigene Umgebung und kann unabhängig zum Rest des Systems zurückgesetzt
oder neu gebootet werden. Um zu verhindern, daß ein einziges solches Betriebssystem
das ganze System herunterfährt,
verhindert die Bedrock-MD-Einheit 275, das bestimmte Prozessoren
oder IO-Einheiten auf
bestimmte Speicherbereiche zugreifen. Die Informationen, die verwendet
werden, um einen Zugriff zu verhindern, werden in einem speziellen
Schutzbereich des Speicherverzeichnisses gespeichert und zusammen mit
dem Verzeichnis bei jedem Zugriff ausgelesen.
-
Um die Menge der erforderlichen Informationen
zu begrenzen, speichert das Bedrock-System Schutzinformationen auf
der Grundlage des Bereichs des anfordernden Prozessors oder der
IO-Einrichtung. Es gibt in einem System nie mehr als 64 Bereiche.
Für kleinere
Systeme (weniger oder gleich 64 Bedrock-Chips) gleicht ein Bedrock-Chip
einem Bereich. Für
Systeme zwischen 65 und 128 Bedrock-Chips gleichen zwei Bedrock-Chips
einem Bereich. Für
große
Systeme (bis zu 256 Bedrock-Chips oder 1024 Prozessoren) gleichen vier
Bedrock-Chips einem
Bereich.
-
Zum größten Teil weisen alle Prozessoren
und IO-Einrichtungen
innerhalb desselben Betriebssystems (auch als Zelle bezeichnet)
denselben Schutz auf. Aus diesem Grund verwendet die Bedrock-MD-Einheit 275 ein
als CurrentCell bezeichnetes lokales 64-Bit-Register, um zu spezifizieren,
welche Bereiche sich innerhalb desselben Betriebssystems wie der
Bedrock-Chip befinden. Für
Anforderungen von diesen "lokalen" Bereichen prüft die Bedrock-MD-Einheit 275 ein
einziges Bit innerhalb des Verzeichniseintrags. Für alle anderen
Anforderungen liest die Bedrock-MD-Einheit 275 einen getrennten
Teil des Verzeichnisspeichers, der vier Bits für jeden Bereich in dem System
enthält
(eines für
Prozessor-Lesevorgänge, Aktualisierungen
und Schreib-Ungültigmachungen,
eines für
Prozessor-Wiedereinschreibvorgänge
und Antworten, eines für
IO-Lesevorgänge und
Schreib-Ungültigmachungen
und eines für
IO-Wiedereinschreibvorgänge
und Antworten). Der Prozessor- und der IO-Schutz sind getrennt,
um eine DMA über
Zellen hinweg zu ermöglichen,
ohne die Firewalls abzusenken. Lesevorgänge, Aktualisierungen und Schreib-Ungültigmachungen
sind von Wiedereinschreibvorgängen
und Antworten getrennt, um einen zweistufigen Zellenentfernungsprozeß zu ermöglichen
(zuerst werden Lesevorgänge
verboten, dann werden die Cache-Leitungen
zum Heim-Node gezogen und es werden schließlich Schreibvorgänge und
Antworten verboten). Für
Einzelheiten dazu, wie auf die Schutzeinträge zuzugreifen ist, sei auf
das SN1-Programmierhandbuch verwiesen.
-
Falls eine READ-, RDSH-, RDEX-, REXU-
oder UPGRD-Anforderung
auf eine Leitung trifft, für
die sie keinen Zugriff hat, gibt die Bedrock-MD-Einheit 275 einen
AERR (Zugriffsfehler) an Stelle einer normalen Antwort zurück. Falls
eine WINV-Anforderung auf eine Leitung trifft, für die sie keinen Zugriff hat,
schreibt sie nicht in den Speicher und gibt einen WERR (Schreibfehler)
zurück.
Falls eine WB-Anforderung
oder eine SHWB-, SXWB- oder PGWB-Antwort auf eine Leitung trifft,
für die
sie keinen Zugriff hat, wirkt die Bedrock-MD-Einheit 275 anders,
falls sich der Anfordernde innerhalb oder außerhalb der aktuellen Zelle
befindet. Für
Anforderungen oder Antworten von innerhalb der Zelle werden die
Daten unabhängig
vom Schutzwert in den Speicher geschrieben. Falls die Firewall durchbrochen
worden ist, gibt die MD-Einheit 275 eine WERR-Nachricht
(im Fall einer WB-Anforderung)
zurück,
speichert Fehlerinformationen im MISC_ERROR-Register und sendet
eine Unterbrechung zu beiden lokalen PIs. Für Anforderungen und Antworten
von außerhalb
der Zelle behandelt die Bedrock-MD-Einheit 275 WB, SHWB,
SXWB oder PGWB ebenso wie eine WINV-Anforderung und schreibt nicht
in den Speicher, es sei denn, daß der Schutz gültig ist.
-
Nichtkohärente Leseanforderungen (RSHU
und PRDU) prüfen
den Schutz nicht und können
daher zum Erzeugen einer sicheren Kommunikation zwischen Zellen
verwendet werden. PWRU-Anforderungen
prüfen
den Schutz und werden ebenso behandelt wie eine WINV-Anforderung.
PRDM- und PWRM-Anforderungen prüfen
beide den Schutz, wenn sie im Abruf-und-Operations-Cache fehlschlagen.
Sie verwenden beide ein getrenntes 64-Bit-Schutzfeld, das zusammen mit der
Abruf-und-Operations-Variable
für Cache-Treffer
gespeichert wird. PRDH-Anforderungen prüfen den Schutz nicht. PWRH-Anforderungen
verwenden das CurrentCell-Register als ihr Schutzregister (wodurch
verhindert wird, daß ein
Prozessor außerhalb
der Zelle in den HSPEC-Raum schreibt). Der UAlias-Abschnitt des
HSPEC-Raums (ein nichtkohärenter
Leseabschnitt, der sich aus internen R10000-Gründen im HSPEC-Raum befindet)
wird hier als Teil einer USPEC-Spezifikation behandelt. Für weitere
Informationen zum USPEC-, MSPEC- und HSPEC-Raum sei auf das SN1-Programmierhandbuch
verwiesen.
-
Seitenzähler
-
Bei einer NUMA-Maschine (Maschine
mit einer ungleichmäßigen Speicherarchitektur – "Non-Uniform Memory
Architecture Machine")
in der Art von Bedrock ändert
sich die Programmleistungsfähigkeit
auf der Grundlage der Anordnung wichtiger Datenstrukturen. Im allgemeinen
sollten sich Daten dicht bei den Prozessoren befinden, die auf sie
zugreifen. Es ist jedoch ein nichttriviales Problem zu gewährleisten,
daß die
Daten immer richtig angeordnet sind, und dies kann nicht immer garantiert
werden. Der Bedrock-Chip unterstützt
eine Seitenmigration, um die Situation zu verbessern, in der das
Betriebssystem und die Anwendung Daten nicht richtig anordnen.
-
Jede Betriebssystemseite (16 kBits)
enthält
vier Sätze
von zwei Zählern.
Jeder Zählersatz
bezieht sich auf eine Verschachtelung des Speichers. Daher bezieht
sich der Satz 0 auf die Cache-Leitungen 0, 4, 8, 12 usw., der Satz
1 auf die Cache-Leitungen 1, 5, 9, 13 usw., der Satz 2 auf die Cache-Leitungen 2, 6, 10,
14 usw. und der Satz 3 auf die Cache-Leitungen 3, 7, 11, 15 usw. Wenngleich
dies keine intuitive Zuordnung von Zählern zu Adressen ist, wird
sie durch die Entscheidung, an Cache-Leitungsgrenzen eine Verschachtelung
vorzunehmen, notwendig.
-
Die zwei Zähler, die jeden Satz bilden,
sind ein lokaler Zähler
und ein ferner Zähler.
Lokal und fern sind durch ein lokales Register innerhalb der Bedrock-MD-Einheit 275 bestimmt.
Dieses Register (als die MigNodeMask bezeichnet) enthält eine
9-Bit-Chipkennungsmaske (die bis zu 512 Bedrock-Chips unterstützt). Falls für jeden
gegebenen Zugriff die mit der Maske durch eine UND-Verknüpfung verbundene
Quellen-Chipkennung
der mit der Maske durch eine UND-Verknüpfung verbundenen MD-275-Chipkennung
gleicht, wird der Zugriff als lokal angesehen. Andernfalls wird
der Zugriff als fern angesehen.
-
Die Zähler selbst werden zusammen
mit den Verzeichniseinträgen
und den Schutzinformationen im Verzeichnisspeicher gespeichert (für eine vollständige Zuordnung
des Verzeichnisspeichers sei auf das SN1-Programmierhandbuch verwiesen).
Um zu verhindern, daß der
Verzeichniszugriff die Speicherbandbreite beeinflußt, inkrementiert
die Bedrock-MD-Einheit 275 diese Seitenzähler nur
bei jedem n-ten Zugriff und prüft diese
dabei. Der Wert von n kann im lokalen MigIntervalCount-Register gesetzt
werden.
-
Bei einem Zugriff, der zu einer Zählerprüfung führt, werden
beide Zähler
in die Bedrock-MD-Einheit 275 gelesen. Falls der Zugriff
lokal war (durch die Maske bestimmt), wird der lokale Zähler inkrementiert.
Falls der Zugriff fern war, wird der ferne Zähler inkrementiert. Nach dem
Inkrementieren wird der inkrementierte Zähler mit einem Schwellenwert
(im MigValueThresh-Register festgelegt) verglichen, und die Differenz
zwischen den beiden Zählern
wird mit einem Schwellenwert (im MigDiffThresh-Register festgelegt)
verglichen. Zwei Steuerbits (ValueInterrupt und DiffInterrupt) werden
zusammen mit dem Zähler
aus dem Verzeichnis ausgelesen. Falls das ValueInterrupt-Bit gesetzt
ist, sendet die MD-Einheit 275 eine Unterbrechung aus,
falls die MigValueThresh überschritten
wurde. Falls das DiffInterrupt-Bit
gesetzt ist, sendet die MD-Einheit 275 eine Unterbrechung
aus, falls das MigDiffThresh-Register gesetzt ist. Für eine vollständige Beschreibung
von MD-Unterbrechungen sei auf das SN1-Programmierhandbuch verwiesen.
Selbst dann, wenn das entsprechende Unterbrechungsbit nicht gesetzt
ist, wird durch das Überschreiten
eines Zählers
bewirkt, daß die
Adresse und die Quelle des Zugriffs im MigCandidate-Register gespeichert
werden. Falls einer der Zähler
bei der Inkrementierung sättigt,
werden beide Zähler
um eins nach rechts verschoben.
-
Abrufen und Oprationen
-
Bei einem geteilten Speichersystem
verbringen sowohl das Betriebssystem als auch Benutzerprogramme
viel Zeit damit, Sperren zu erwerben und aufzuheben. Leider skalieren
die meisten einfachen Synchronisationsalgorithmen nicht gut über einige
Prozessoren hinaus. Um dieses Problem zu umgehen, bietet die Bedrock-MD-Einheit 275 einen
speziellen nichtkohärenten
Synchronisationsmechanismus, der sehr gut bis zu großen Prozessoranzahlen
skaliert.
-
Die Bedrock-MD-Einheit 275 enthält einen
Cache-Speicher (zwei 64-Bit-Einträge oder vier 32-Bit-Einträge) der
Synchronisationsvariablen, auf die vor kurzem zugegriffen wurde.
Jeder nicht gespeicherte Lese- oder Schreibvorgang, der auf den
MSPEC-Platz (PRDM oder PWRM) gerichtet ist, prüft zuerst, ob er den Cache
trifft. Falls dies der Fall ist, wird die Operation (nachstehend
erörtert)
sofort ausgeführt,
und die Daten oder eine Bestätigung
werden zurückgegeben.
Falls der Lese- oder Schreibvorgang den Cache nicht trifft, wird
der älteste
Cache-Eintrag zurückgeschrieben,
werden die neuen Daten eingelesen, wird die Operation ausgeführt und
werden die Daten oder eine Bestätigung
zurückgegeben.
-
Operationen werden am Cache ausgeführt, indem
die Bits fünf
bis drei der Adresse auf spezifische Werte gelegt werden. Weil diese
Adreßbits
nicht mehr zum Adressieren von Speicher verwendet werden, können sie
höchstens
zwei 64-Bit-(oder
vier 32-Bit-) Abruf-und-Operationsvariablen je Cache-Leitung sein. Bei
einer PRDM-Anforderung können
die folgenden Operationen ausgeführt
werden: ein direktes Abrufen des Cache-Werts, ein Abrufen gefolgt
von einem Inkrementieren, ein Abrufen gefolgt von einem Dekrementieren,
ein Abrufen gefolgt von einem Löschen
und ein Cache-Räumen.
Bei einer PWRM-Anforderung können
die folgenden Operationen ausgeführt
werden: ein direktes Schreiben des Cache-Werts, ein einfaches Inkrementieren (wobei
der mit der PWRM-Anforderung gesendete Wert ignoriert wird), ein
einfaches Dekrementieren (wobei der mit der PWRM-Anforderung gesendete
Wert ignoriert wird), eine UND-Verknüpfung des Cache-Werts mit dem
PWRM-Wert, eine ODER-Verknüpfung des
Cache-Werts mit dem PWRM-Wert und ein Cache-Räumen. Für die genaue
Codierung sei auf das SN1-Programmierhandbuch verwiesen.
-
Wie vorstehend erwähnt wurde,
kann der Cache-Speicher von zwei 64-Bit-Einträgen oder vier 32-Bit-Einträgen (oder
von einem 64-Bit-Eintrag und zwei 32-Bit-Einträgen) verwendet werden. Jedes
Paar von 32-Bit-Einträgen
muß sich
jedoch im selben 64-Bit-Doppelwort befinden. Ein 64-Bit-Schutzwort
wird auch zusammen mit jedem 64-Bit-Eintrag (oder jedem Paar von
32-Bit-Einträgen)
gespeichert.
-
Backdoor-ECC
-
Die Bedrock-MD-Einheit 275 unterstützt einen
Backdoor-Weg zum
Lesen und Schreiben des ECC-Speichers. Zwei Adreßräume innerhalb des HSPEC-Raums
unterstützen
einen Backdoor-ECC-Zugriff. Für den Schreibzugriff
(PWRH) führen
beide Räume
ein Lesen-Modifizieren-Schreiben der Daten aus, um in den ECC-Speicher
zu schreiben. Für
den Lesezugriff (PRDH) gibt der BDECC-NORMAL-Raum einfach den ECC-Wert
zurück,
während
der BDECC-SCRUB-Raum die Daten und ECC liest, den ECC-Wert zurückgibt, die
Daten und ECC korrigiert und die korrigierten Daten und die ECC
wiederbeschreibt. Für
eine vollständige Beschreibung
der Schnittstelle sei auf das SN1-Programmierhandbuch verwiesen.
-
Backdoor-Verzeichnis
-
Während
der Verzeichnisspeicher bei jeder kohärenten Transaktion gelesen
und geschrieben wird, werden die Daten nur innerhalb der Bedrock-MD-Einheit 275 verwendet.
Damit das Betriebssystem auf die im Verzeichnis gespeicherten Daten
zugreift (und das Verzeichnis während
des Hochfahrens initialisiert), bietet ein getrennter Backdoor-Weg
einen transparenten Zugriff auf den Verzeichnisspeicher. Es werden
zwei Adreßräume innerhalb
des HSPEC-Raums für
einen Backdoor-Verzeichnisvorgang
verwendet. Ein Lesen (PRDH) in jeden der Räume gibt das ganze 32-Bit-(Standard)-
oder 64-Bit-(Premium)-Verzeichniswort
zurück.
Ein Schreiben (PWRH) in den BDDIR-ACCESS-Raum bewirkt, daß das einzige
Schutzbit innerhalb des Verzeichniseintrags geschrieben wird. Ein
Schreiben (PWRH) in den BDDIR-FULL-Raum bewirkt, daß das ganze
Verzeichniswort geschrieben wird.
-
Das 32-Bit- oder das 64-Bit-Verzeichniswort
enthält
ein 6-Bit- oder ein 7-Bit-ECC-Feld. Ohne spezielle Unterstützung müßte das
Betriebssystem den ECC-Wert immer dann voraus berechnen, wenn es
einen Backdoor-ECC-Schreibvorgang ausführen muß. Um die zusätzliche
Komplexität
zu vermeiden, füllt
die Bedrock-MD-Einheit 275 die ECC-Felder standardmäßig mit
dem richtigen Wert aus (unabhängig
von dem mit dem Schreibbefehl gesendeten Wert). Falls das IgnoreECC-Bit
im DirectoryConfig-Register gesetzt ist, leitet die Bedrock-MD-Einheit 275 die
ECC-Bits ohne Modifikation weiter.
-
Für
eine vollständige
Information zum BDDIR-Adreßraum
und zu den Adreßabbildungen,
die zum Zugreifen auf einen spezifischen Verzeichnis-, Schutz- oder
Seitenzählereintrag
erforderlich sind, sei auf das SN1-Programmierhandbuch verwiesen.
-
Flash-PROM
-
Die Bedrock-MD-Einheit 275 unterstützt ein
16-MB-Flash-PROM
(zwei 8-MB-Teile) für
Bootcode- und Systemkonfigurations-/Fehlerinformationen. Auf den
PROM wird über
die LBOOT- und RBOOT-Räume
innerhalb der HSPEC-Spezifikation zugegriffen. Weil die Prozessoren
auf den PROM zugreifen müssen,
bevor der Bedrock-Chip eine Chipkennung aufweist, greift die Prozessorschnittstelle
auf Zugriffe auf dem LBOOT-Raum am
Node 0 zu und leitet sie zur lokalen MD-Einheit 275. Der
RBOOT-Raum kann von einem beliebigen Prozessor verwendet werden,
um auf den PROM eines beliebigen Nodes zuzugreifen, sobald die Chipkennungen initialisiert
worden sind.
-
Für
PROM-Lesevorgänge
gibt es eine Eins-zu-Eins-Abbildung von HSPEC-Adressen auf PROM-Adressen
(innerhalb eines gegebenen Raums). Die Bedrock-MD-Einheit 275 unterstützt alle
Lesegrößen (Doppelwort,
Wort, Halbwort und Byte). Von PROM-Schreibvorgängen gibt es eine Acht-zu-Eins-Abbildung
von HSPEC-Adressen auf PROM-Adressen (innerhalb des gegebenen Raums).
Mit anderen Worten entspricht die HSPEC-Adresse 0 der PROM-Adresse
0, während
die HSPEC-Adresse 8 der PROM-Adresse 1 entspricht. Die Bedrock-MD-Einheit 275 unterstützt nur
Byte-Schreibvorgänge
des Flash-PROMs.
-
Junk-Bus
-
Die Bedrock-MD-Einheit 275 unterstützt eine
getrennte Schnittstelle zu Komponenten, die keine Beziehung zur
Kernfunktionalität
der MD-Einheit 275 haben. Dies sind der Flash-PROM, vier
LED-Bänder
und zwei Synergien (diese Schnittstelle wird zum Lesen ferner Synergie-Register
verwendet). Der Zugriff auf den Junk-Bus erfolgt über die
LREG- und RREG-Adreßräume innerhalb
des HSPEC-Raums. Die Bedrock-MD-Einheit 275 unterstützt nur
16-Bit-Lese- und Schreibvorgänge
für alle
Junk-Busvorrichtungen mit Ausnahme des Flash-PROMs und der Synergien,
welche 64-Bit-Lesevorgänge
und 16-Bit-Schreibvorgänge
unterstützen.
-
SDRAM- und DDR-SDRAM-Initialisierung
-
Alle SDRAMs und DDR-SDRAMs enthalten
Modusregister, die während
des Hochfahrens des Systems initialisiert werden müssen. Diese
Modusregister werden über
dieselben LREG- und RREG-Adreßräume angesprochen,
die zum Zugreifen auf den Junk-Bus
verwendet werden.
-
Auffrischen
-
Der SDRAM und der DDR-SDRAM, die
von der Bedrock-MD-Einheit 275 unterstützt werden,
benötigen
in etwa einmal alle 16 Mikrosekunden einen Auffrischungsbefehl.
Um den Auffrischungs-Leistungsimpulsstoß zu verringern, frischt die
Bedrock-MD-Einheit 275 eine Bank des SDRAMs oder DDR-SDRAMs
an jedem DIMM in etwa alle acht Mikrosekunden auf. Die Bedrock-MD-Einheit 275 verwendet
das Autoauffrischungsmerkmal des SDRAMs und des DDR-SDRAMs, um alle
vier internen Bänke
gleichzeitig aufzufrischen. Das Auffrischen geschieht während des
ersten Leerzyklus innerhalb des Vier-Mikrosekunden-Fensters. Falls es keine
Leerzyklen gibt, wird das Auffrischen beendet und bahnt sich seinen
Weg. Das genaue Auffrischungsintervall ist durch das RefreshControl-Register
konfigurierbar. Falls alle DIMMs in dem System nur eine oder zwei
Bänke aufweisen,
führt die
MD-Einheit 275 das Auffrischen nur alle acht oder 16 Mikrosekunden
aus.
-
Speichertests
-
Die Bedrock-MD-Einheit 275 unterstützt ein
eingebautes Selbsttestmerkmal ("Build-In-Self-Test (BIST)
feature"), das den
gesamten Speicher (Daten, ECC und Verzeichnis) viel schneller testen
kann als er auf andere Weise angesteuert werden könnte. Der
Zweck dieses Merkmals besteht darin, so viel Kontrolle wie möglich der
Software zu überlassen,
während
die Geschwindigkeitsvorteile des Hardwaretestens beibehalten werden.
Zuerst muß die
Software in das Modusregister schreiben, um die Speicherkonfiguration
zu initialisieren, das Wiederauffrischen einschalten und die Größe jedes
DIMMs bestimmen (d.h. aus vier Teilen oder aus acht Teilen – dies wird
aus der Systemsteuereinrichtung ausgelesen). Diese Speicherdimensionierungsoperation
ist mit einem Adressendecodiertest des Speichers äquivalent.
Aus diesem Grunde enthält
die BIST-Funktion keine Unterstützung
für ein
Testen von Adressen.
-
Nachdem die Speicherdimensionierung
stattgefunden hat und die Software das MemoryConfig-Register mit
den richtigen DIMM-Größen konfiguriert
hat, kann der eigentliche BIST-Vorgang
beginnen. Die Software richtet zuerst eine Anzahl von Konfigurationsregistern
ein. Das 4-Bit-Datenmuster geht in das BISTDataPattern-Register
ein. Dieses Muster wird über
alle 144 Bits des Datenspeichers und alle 32 Bits der Verzeichnisdaten
wiederholt. Musterfolgeinformationen (immer dasselbe Muster oder
invertierte alternierende Zyklen) gehen auch in das BISTDataPattern-Register
ein. Die getestete Bank geht in das BISTControl-Register ein. Schließlich leitet
ein Schreiben des Startbits in das BISTControl-Register den BIST-Vorgang ein.
-
Während
des BIST-Vorgangs initialisiert die Bedrock-MD-Einheit 275 alle getesteten
Bänke auf
das gewünschte
Muster und testet dann alle zu testenden Bänke. Beim ersten Fehler wird
das Datenmuster in den BISTDataError-Registern (eines für Verzeichnisdaten,
eines für
Speicherdaten und eines für
die Adresse) gespeichert, und der BIST-Vorgang wird angehalten.
Statusberichte können
aus dem BISTStatus-Register ausgelesen werden. Sobald der BIST-Vorgang
abgeschlossen worden ist, aktualisiert die Bedrock-MD-Einheit 275 ein
Bit im, BISTStatus-Register. Falls der BIST-Vorgang nach einem Fehler
wiedereingeleitet wird, wird er dort fortgesetzt, wo er stehengeblieben
war.
-
Auf die Flash-PROMs und den Junk-Bus
kann während
des BIST-Vorgangs nicht zugegriffen werden. Weil auf die lokalen
Register nicht über
die MD-Einheit 275 zugegriffen wird (sie werden über einen
speziellen Datenweg vom LB-Block gelesen), können sie während des BIST-Vorgangs normal
fortgesetzt werden.
-
Weiches Rücksetzen
-
Um den Zustand des Node-Speichers
während
des weichen Rücksetzens
beizubehalten, schaltet die MD-Einheit 275 das interne
Rücksetzen
eines Teils ihrer Funktionalität
auf der Grundlage davon, ob sie ein weiches oder ein hartes Rücksetzen
durchläuft.
Während
eines weichen Rücksetzens
wird die Einheit wie bei einem Einschalt-Rücksetzen initialisiert, wobei
jedoch die folgenden Ausnahmen auftreten:
- • Die Inhalte
der MEMORY_CONFIG- und DIR_CONFIG-Register werden beibehalten. Dies
gewährleistet, daß Einstellungen,
die zur Größe und zur
Breite der SDRAMs gehören,
Synchronisierer-Einstellungen und die Verzeichnisansicht bewahrt
bleiben.
- • Bald
nach dem das Rücksetzsignal
fortgeht, gibt die MD-Einheit 275 ein
Voraufladen an alle Bänke
der SDRAMs aus, um sie in einen bekannten Zustand zu versetzen (falls
das Rücksetzsignal
in der Mitte eines SDRAM-Zugriffs
aufgetreten ist).
- • Die
Inhalte des REFRESH-CONTROL-Registers werden beibehalten. Der Wiederauffrischungszähler setzt
seinen Zählwert
nach dem weichen Rücksetzen
auf Null zurück,
und falls das Wiederauffrischen vor dem weichen Rücksetzen
aktiviert wurde, nimmt die MD-Einheit 275 das Ausgeben
von Wiederauffrischungen entsprechend dem programmierten Schwellenwert
wieder auf.
-
Ausgabeblock
-
Alle Nachrichten von der XBAR-Einheit
treten über
den IB (Ausgabeblock) in die MD-Einheit 275 ein. Die IB-Einheit
decodiert die Nachrichten, ordnet sie in Hinblick auf Gerechtigkeit
und Wirksamkeit um, gibt die erforderlichen Adressen und Befehle
an den DRAM aus und synchronisiert die DB- und MB-Blöcke mit
den einwärts
gerichteten oder auswärts
gerichteten Daten.
-
Dieser Abschnitt läßt sich
in drei Unterabschnitte aufteilen, nämlich Architektur, Zuteilung
und Entwurf. Die Gesamtstruktur des Ausgabeblocks wird im Architekturabschnitt
erörtert,
während
der Zuteilungsalgorithmus (für
alle Nachrichtentypen) im Zuteilungsabschnitt erörtert wird.
-
Architektur
-
Wenn eine Nachricht von der XB-Einheit
in der MD-Einheit 275 ankommt, wird der Kopfteil in die
Kopfteil-Warteschlange mit 12 Einträgen (die sich im IB-Block befindet)
geschrieben, und die entsprechenden Daten, falls überhaupt,
werden in die Datenwarteschlange mit acht Cache-Leitungen geschrieben
(die sich im MB-Block befindet). Parallel mit dem Schreiben in die
Kopfteil- und die Datenwarteschlange wird die einwärts gerichtete
Nachricht decodiert und in der Anhängig-Warteschlange und der
Schreibtabelle gespeichert. Die Anhängig-Warteschlange enthält einen Eintrag für jeden
Eintrag in der Kopfteil-Warteschlange, und die Schreibtabelle enthält einen
Eintrag für
jede der Cache-Leitungen in der Datenwarteschlange (die Datenwarteschlange
enthält
tatsächlich
eine neunte Cache-Leitung zur internen Verwendung von der MB-Einheit, die keinen
Eintrag in der Schreibtabelle aufweist).
-
Die XBAR-Einheit unterteilt einwärts gerichtete
Nachrichten auf der Grundlage der Quelle und des Typs in einen von
vier virtuellen Kanälen.
Anforderungen von der PI0-Einheit
kommen an einem Kanal an, während
Anforderungen von PI1, Anforderungen von NI oder II und Antworten
auf den anderen drei Kanälen
ankommen. Jede der vier unabhängigen
Warteschlangen (Kopfteil, Daten, Anhängig und Schreiben) ordnet
ein Viertel seines Platzes jedem virtuellen Kanal zu. Die XB-Einheit
und die IB-Einheit behandeln beide die vier virtuellen Kanäle als vollkommen
unabhängig
und unterstützen
eine beliebige Verschachtelung.
-
Parallel zum Schreiben in die Kopfteil-Warteschlange
vergleicht die IB-Einheit die einwärts gerichtete Nachricht mit
allen offenen Bänken
(bis zu 4) und decodiert den Befehl (Lesen/Schreiben, Vollständig/Teilweise).
Die Ausgabe dieser Operationen wird in der Anhängig-Warteschlange gespeichert
und während
der Zuteilung verwendet. Für
einwärts
gerichtete Nachrichten mit Daten schreibt die IB-Einheit in die
Schreibtabelle, sobald das Endteilbit empfangen worden ist.
-
Sobald die decodierten Informationen
für eine
Nachricht in der Anhängig-Warteschlange
und in der Schreibtabelle sind, kann die Zuteilungslogik sie auswählen und
an den Rest der MD-Einheit 275 ausgeben. Eine Nachricht
wird ausgegeben, indem ihr Kopfteil aus der Kopfteil-Warteschlange
ausgelesen wird und die relevanten Informationen in die drei Warteschlangen
am Kopf jedes Datenwegs (Adresse, Verzeichnis und Speicher) geschrieben
werden. Sobald sich die Nachricht in diesen drei Warteschlangen
befindet, kann sie an den DRAM ausgegeben und vervollständigt werden.
-
Zuteilung
-
Der Zuteilungsabschnitt des Ausgabeblocks
nimmt die 12 Einträge
in der Anhängig-Warteschlange und
wählt den "besten" zur Ausgabe aus.
Hierbei ist der "beste" so definiert, daß es eine
gerechte Verteilung zwischen den drei Eingangsanforderungs-Warteschlangen
gibt, daß Schreibvorgänge und Antworten
genug Bandbreite bekommen, daß alle
Nachrichten in einer vernünftigen
Zeit ausgegeben werden und daß alle DRAM-Randbedingungen berücksichtigt
werden.
-
Um die Dinge zu vereinfachen, wird
der Zuteilungsprozeß in
zwei Stufen aufgeteilt, nämlich
eine lokale Zuteilungsstufe, die auf der einzelnen Nachricht beruht,
und eine globale Zuteilungsstufe, die auf der Warteschlange beruht.
Zwischen den zwei Stufen existieren sehr wenig Abhängigkeiten,
wodurch ermöglicht
wird, daß sie
im selben Zyklus parallel laufen.
-
Lokale Anforderungszuteilung
-
Jeder der vier virtuellen Kanäle (Anforderungen
von PI0, Anforderungen von PI1, Anforderungen von NI oder II, alle
Antworten) führt
seine eigene unabhängige
lokale Zuteilung aus. Die globale Zuteilung wählt parallel aus, welche der
vier Kanäle
tatsächlich
die volle Zuteilung gewinnen.
-
Für
die drei Anforderungswarteschlangen muß die Zuteilungslogik zuerst
herausfinden, welche der (bis zu drei) Anforderungen in der Warteschlange
ausführungsbereit
sind. Damit ein Cache-Lesen, ein teilweises Lesen oder ein teilweises
Schreiben als bereit angesehen werden, müssen sie die folgenden Anforderungen
erfüllen:
- • Falls
die Nachricht das älteste
Cache-Lesen, teilweise Lesen oder teilweise Schreiben in dem Kanal
ist und kein Schreib-Zeitablauf (nachstehend beschrieben) anhängig ist,
muß es
Platz für
wenigstens drei Kopfteile in der richtigen Kopfteil-Ausgangswarteschlange
und Platz für
eine Cache-Leitung von Daten in der richtigen Daten-Ausgangswarteschlange
geben. Falls die Nachricht ein Cache-Lesen, ein teilweises Lesen
oder ein teilweises Schreiben ist oder ein Schreib-Zeitablauf bevorsteht,
muß es
in der richtigen Kopfteil-Ausgangswarteschlange Platz für wenigstens
sechs Kopfteile und in der richtigen Daten-Ausgangswarteschlange
Spezifikationen für
zwei Cache-Leitungen von Daten geben. Falls die Nachricht ein Cache-Leitungs-Schreiben
ist, muß es
in der richtigen Kopfteil-Ausgangswarteschlange Platz für wenigstens
sechs Kopfteile geben.
- • Die
Nachricht darf nicht in Konflikt mit irgendwelchen der offenen Bänke gelangen.
- • Für Teil-Lesevorgänge und
Teil-Schreibvorgänge
muß die
Adreßlogik
in der Lage sein, Teileinheiten anzunehmen. Für Cache-Lesevorgänge und
Cache-Schreibvorgänge
muß die
Adreßlogik
in der Lage sein, Nicht-Teileinheiten anzunehmen.
- • Für Cache-Schreibvorgänge und
Teil-Schreibvorgänge
muß das
gesamte Datenpaket in der Datenwarteschlange vorhanden sein.
- • Für Cache-Schreibvorgänge dürfen keine
ERESPs auf die Ausgabe warten. (ERESPs sind Nachrichten, die als
Schreibvorgänge
ausgegeben werden und dann als Lesevorgänge wiederausgegeben werden
sollen. Zwischen der Ausgabe und der Wiederausgabe dürfen keine
neuen Schreibvorgänge
eine Zuteilung gewinnen.)
- • Für Teil-Lesevorgänge und
Teil-Schreibvorgänge
muß die
Nachricht die älteste
Teileinheit in dem Kanal sein (Teileinheiten müssen in der Reihenfolge ausgegeben
werden).
- • Für Cache-Schreibvorgänge muß die Nachricht
der älteste
Cache-Schreibvorgang in dem Kanal sein (Cache-Schreibvorgänge werden
in der Reihenfolge ausgegeben).
-
Sobald die Bereitschaftsinformationen
für jede
der (bis zu) drei Nachrichten verfügbar sind, wählt die Zuteilungslogik
die Nachricht mit der höchsten
Priorität
aus. Prioritäten
werden folgendermaßen
festgelegt:
- 1. Jeder Cache-Schreibvorgang (falls
ein Schreib-Zeitablauf aktiviert ist).
- 2. Der älteste
Cache-Lesevorgang, Teil-Lesevorgang oder Teil-Schreibvorgang.
- 3. Jeder Cache-Lesevorgang, Teil-Lesevorgang oder Teil-Schreibvorgang.
- 4. Jeder Cache-Schreibvorgang.
-
Lokale Antwortzuteilung
-
Der Antwortkanal wird etwas anders
behandelt als die drei Anforderungskanäle. Eine Antwort wird als bereit
angesehen, wenn die folgenden Kriterien erfüllt sind:
- • Die Nachricht
darf nicht in Konflikt mit irgendwelchen der offenen Bänke geraten.
- • Die
Adreßlogik
muß in
der Lage sein, Nicht-Teileinheiten zu akzeptieren.
- • Die
Nachricht ist die älteste
Antwort in der Warteschlange (Antworten werden in der Reihenfolge
ausgegeben).
- • Für Schreibantworten
muß das
ganze Datenpaket in der Datenwarteschlange vorhanden sein.
-
Es gibt keine Prioritäten für den Antwortkanal,
weil die älteste
Nachricht immer ausgewählt
ist (falls sie bereit ist).
-
Globale Zuteilung
-
Um Bandbreite fair zwischen den drei
Anforderungswarteschlangen zuweisen zu können, enthält die globale Zuteilungslogik
drei LRU-Tabellen. Die erste LRU-Tabelle (die älteste) verfolgt die Reihenfolge,
in der die Warteschlangen als letztes eine Nachricht ausgegeben
haben, die als das älteste
anhängige
Cache-Lesen, teilweise Lesen oder teilweise Schreiben markiert ist.
Die zweite LRU-Tabelle (eine beliebige) verfolgt die Reihenfolge,
in der die Warteschlangen als letztes eine Cache-Lese-, Teil-Lese-
oder Teil-Schreibnachricht
ausgegeben haben. Die dritte LRU-Tabelle (Schreibtabelle) verfolgt
die Reihenfolge, in der die Warteschlangen als letztes eine Cache-Schreibnachricht
ausgegeben haben.
-
Die globale Zuteilung wählt die
Warteschlangen unter Verwendung des folgenden Prioritätsschemas aus:
- 1. Antwort mit Antwort-Zeitablauf bereit.
- 2. Cache-Schreiben mit Schreib-Zeitablauf bereit. Unter Verwendung
der Schreib-LRU-Einheit ausgewählt.
- 3. Cache-Lesen, teilweises Lesen oder teilweises Schreiben als älteste markiert
bereit. Unter Verwendung der ältesten
LRU-Einheit ausgewählt.
- 4. Cache-Lesen, teilweises Lesen oder teilweises Schreiben bereit.
Unter Verwendung der beliebigen LRU-Einheit ausgewählt.
- 5. Cache-Schreiben bereit. Unter Verwendung der Schreib-LRU-Einheit ausgewählt.
- 6. Antwort bereit.
-
Die Schreib-LRU-Einheit wird immer
dann aktualisiert, wenn ein Cache-Schreiben von Nachrichten auftritt.
Die älteste
LRU-Einheit wird immer dann aktualisiert, wenn eine als das älteste Cache-Lesen,
teilweise Lesen oder teilweise Schreiben markierte Nachricht ausgegeben
wird. Die beliebige LRU-Einheit wird immer dann aktualisiert, wenn
ein Cache-Lesen,
ein teilweises Lesen oder ein teilweises Schreiben ausgegeben wird.
-
Schreib-Zeitablauf
-
Die Schreib-Zeitablauflogik gewährleistet,
daß Schreibvorgänge nicht
ewig in der Datenwarteschlange bleiben. Zusätzlich zwingt die Schreib-Zeitablauflogik,
sobald die Datenwarteschlange für
einen Kanal voll ist, die Ausgabe von Schreibvorgängen, wodurch
Platz für
die nächste
Schreibnachricht freigesetzt wird.
-
Ein Schreib-Zeitablauf wird eingeleitet,
nachdem eine von zwei Bedingungen erfüllt ist:
- • Es gibt
in der Datenwarteschlange eines beliebigen Kanals zwei Cache-Datenleitungen.
- • Es
wurde eine vom Benutzer einstellbare Anzahl von Lesenachrichten
ausgegeben, seit die letzte Schreibnachricht ausgegeben wurde.
-
Falls eine der vorstehenden Bedingungen
wahr ist und ein Antwort-Zeitablauf abläuft, wird der Schreib-Zeitablauf
nur auf dem virtuellen Kanal aktiviert, der eine Schreibnachricht
enthält,
die die höchste
Priorität
in der Schreib-LRU-Einheit aufweist. Sobald von diesem Kanal ein
Schreiben ausgegeben wird, wobei der Zeitablauf aktiviert ist, wird
der Zeitablauf zu allen drei Anforderungskanälen übertragen. Der Zeitablauf wird
fortgesetzt, bis irgend etwas außer einem Cache-Schreiben ausgegeben
wird oder vier Cache-Schreibvorgänge
ausgegeben werden, je nach dem, was zuerst kommt. Nach Abschluß des Zeitablaufs
müssen
wenigstens vier Nachrichten eines beliebigen Typs ausgegeben werden,
bevor der Zeitablauf wieder aktiviert werden kann.
-
Antwort-Zeitablauf
-
Die Antwort-Zeitablauflogik stellt
sicher, daß Antworten
schließlich
ausgegeben werden. Ein Antwort-Zeitablauf wird aktiviert, falls
mehr als eine vom Benutzer einstellbare Anzahl von Anforderungen
ausgegeben wurde, seit die letzte Antwort ausgegeben wurde, und
kein Schreib-Zeitablauf ausgeführt
wird.
-
Junk-Bus und PROM
-
Die Bedrock-MD-Einheit 275 kommuniziert
unter Verwendung eines getrennten firmeneigenen Busses mit externen
Nicht-DRAM-Vorrichtungen.
Die MD-Einheit 275 erkennt vier verschiedene Vorrichtungstypen
auf diesem Bus, nämlich
einen EPROM, einen UART, LEDs und einen oder mehrere "Junk"-Busse. Jeder Vorrichtungstyp
hat seinen eigenen Adreßraum
innerhalb des LREG- oder RREG-Abschnitts des HSPEC-Raums (siehe
Tabelle 42).
-
Der Bus verbindet sich mit der Bedrock-MD-Einheit 275 unter
Verwendung von 16 Adreß-/Datenstiften,
vier Steuerstiften und einer Unterbrechungsleitung. 36 zeigt ein Diagramm der Schnittstelle.
-
Speicherblock
-
37 zeigt
ein Blockdiagramm des Speicherblock-Datenwegs. Dieser Datenweg überträgt Daten von
den Anschlußstiften
zur Daten-Ausgangswarteschlange (MOQD 3114) und von der
Daten-Eingangswarteschlange (MIQD) zu den Anschlußstiften.
Innerhalb des Datenwegs befindet sich eine Anzahl spezieller Unterblöcke, die
Lese-Modifizier-Schreibvorgänge
der Cache-Leitungen ermöglichen
und die Abruf- und Operations-Vorgänge implementieren.
-
Der Merge-Cache unterstützt Lese-Modifizier-Schreibvorgänge auf
Cache-Leitungen. Die Bedrock-MD-Einheit ermöglicht Schreibvorgänge ohne
Cache-Speicher an einer Bytegrenze. Um jedoch an SDRAM-Kosten zu
sparen, sind Schutzinformationen (ECC) nur in 64-Bit-Größen gespeichert.
Um ein Schreiben ohne Cache-Speicher auszuführen, muß die MD-Einheit daher einen
Lese-Modifizier-Schreibvorgang ausführen. Zuerst liest der Speicherblock
eine gesamte Cache-Leitung, wobei er die erforderlichen 128 Bits
im Merge-Cache speichert. Der Speicherblock liest dann die Speicherinformationen
aus der MIQD-Einheit und überschreibt
die ausgewählten
Bytes mit neuen Daten. Nun, da die richtigen Daten verfügbar sind,
werden sie durch ECC-Erzeugung gesendet und in den Speicher zurückgeschrieben.
-
Der Abruf-und-Operations-Block implementiert
einen Cache-Speicher mit zwei Einträgen, um Synchronisationsoperationen
zu verbessern.
-
Grundoperation
-
Normales Lesen
-
Ein normales Lesen wird ausgeführt, indem
Daten von den Anschlußstiften
aufgenommen werden, ECC-Fehler erfaßt und korrigiert werden (falls
ECC-Fehler nicht ignoriert werden) und diese Daten dann an die MOQ-Einheit übergeben
werden. ValidData- und DataTail-Signale werden zur MOQ-Einheit 3113 gesendet, um
anzugeben, daß gültige Daten
vorhanden sind.
-
Normales Schreiben
-
Die gerade und die ungerade MIQD-Warteschlange
enthalten jeweils 65-Bit-Einträge,
wobei jeder Eintrag ein 64-Bit-Wort ist, und ein diesem Wort zugeordnetes
UCE-Bit. Die zweiundsiebzig Einträge sind für zwei vollständige Cache-Leitungen
von Daten von jeder der Eingangswarteschlangen (P0, P1 und Misc)
und eine zusätzliche
Cache-Leitung, die nur von der MB-Einheit verwendet wird, um ein Lesen-Modifizieren-Schreiben einzelner
Cache-Leitungen auszuführen,
ausreichend. In die MIQD-Einheit wird ein 64-Bit-Wort zur Zeit von der
XB-Einheit geschrieben. Wenn ihr vorgeschrieben wird, ein normales
Schreiben auszuführen,
liest die MB-Einheit MIQD-Ungerade und MIQD-Gerade parallel, speichert
diese Daten zwischen und erzeugt im nächsten Zyklus die ECC-Bits
und sendet die Daten zu den Anschlußstiften. Es sei bemerkt, daß während eines
normalen Schreibvorgangs ECC-Bits unabhängig davon erzeugt werden,
ob das IgnoreECC-Bit gesetzt ist oder nicht.
-
37 zeigt
eine Ausführungsform
eines Speicherblock-Datenwegs.
-
Teilweises
Lesen
-
Ein teilweises Lesen erfolgt durch
Lesen einer ganzen Cache-Leitung aus dem Speicher, wobei jedoch nur
die 128 Bits zur MOQ-Einheit gesendet werden, die die angeforderten
Daten enthalten. DataValid und DataTail werden festgelegt, wenn
die geeignete 128-Bit-Menge verfügbar
ist.
-
Teilweises
Schreiben
-
Ein teilweises Schreiben ist ein
zweiphasiger Vorgang. In der ersten Phase wird die geeignete Cache-Leitung
in die MIQD-Einheit gelesen, und die zu modifizierende 128-Bit-Menge
in den Merge-Cache gelesen. Während
der zweiten Phase des teilweisen Schreibens wird die Cache-Leitung
in den Speicher zurückgeschrieben.
Die Teil-Schreibdaten werden vom Lesevorgang in den Speicher-Cache
entnommen. Während der
zweiten Phase des teilweisen Schreibens wird die Cache-Leitung in
den Speicher zurückgeschrieben.
Die Teil-Schreibdaten werden aus der MIQD-Einheit entnommen und
auf der Grundlage von ByteEnable-Signalen mit den Daten im Merge-Cache
zusammengeführt.
Alle anderen 128-Bit-Teile der Cache-Leitung werden ungeändert von
der MIQD-Einheit in den Speicher zurückgeschrieben. Normalerweise
wird ECC beim Wiedereinschreiben regeneriert. In dem Fall, in dem
wir ECC ignorieren, wird die alte ECC, die die Leitung zuvor aufwies,
stattdessen zurückgeschrieben.
-
Abruf-und-Operations-Schreibfehltreffer
-
Ein Räumvorgang wird ausgeführt, um
die Daten herauszuschreiben, die sich gegenwärtig im Cache-Speicher befinden,
worauf ein Füllvorgang
folgt, worauf ein Schreibvorgang folgt.
-
Abruf-und-Operations-Schutz
-
Der Abruf-und-Operations-Schutz hat
zwei Teile. Der erste Teil ist die normale Verzeichnisschutzprüfung, die
im Verzeichnisblock während
eines Füllvorgangs
auftritt. Falls die DB-Einheit einen Zugriffsfehler feststellt,
wird das Schutzwort im Abruf-und-Operations-Cache gelöscht, und
es sind keine Abruf-und-Operations-Vorgänge zulässig. Die DB-Einheit teilt der
IB-Einheit auch mit, daß bei
einer Abruf-und-Operations-Füllung ein
Zugriffsfehler aufgetreten ist.
-
Der zweite Teil der Schutzprüfung geschieht
während
eines Lesetreffervorgangs oder eines Schreibtreffervorgangs. Die
IB-Einheit hat die Schutzbereichsbits gesendet, die eines der 64
Bits im Abruf-und-Operations-Schutzregister adressieren. Falls diese
gesetzt sind, darf die Operation fortgesetzt werden, und der Abruf-und-Operations-Cache-Speicher
bleibt andernfalls unverändert.
-
Abruf-und-Operations-Vorgang
-
Die Bedrock-MD-Einheit implementiert
dieselben Abruf-und-Operations-Befehle
wie die SN0-MD-Einheit. Ein kleiner Abruf-und-Operations-Cache-Speicher
(2 Einträge)
ermöglicht
eine Transaktion mit einer geringen Belegung (~ 20 ns), wodurch
die Programmsynchronisation erheblich beschleunigt wird.
-
38 zeigt
ein Blockdiagramm des Abruf-und-Operations-Cache-Datenwegs.
Es gibt zwei Einträge in
dem Cache-Speicher. Jeder Eintrag besteht aus einem 64-Bit-Schutzwort und einem
64-Bit-Datenwort, das als ein einziges 64-Bit-Wort oder als 2 32-Bit-Wörter angesehen
werden kann, welche in dem Diagramm als F&Op-Hi und F&Op-Lo dargestellt sind. Vier Schlüsseloperationen,
die vom Abruf-und-Operations-Cache-Speicher
ausgeführt
werden, sind Füllen,
Lesen, Schreiben und Räumen.
Nachstehend wird eine kurze Zusammenfassung jeder Operation beschrieben:
-
Füllen
-
Bei einem Füllvorgang werden Daten aus
dem Speicher direkt in den Abruf-und-Operations-Cache-Speicher geladen.
Es werden keine Rechen- oder Logikoperationen ausgeführt.
-
Lesen
-
Bei einem Lesevorgang werden Daten
aus dem Cache-Speicher entnommen, zur MOQD-Einheit gesendet, und
der Cache-Eintrag wird gelöscht,
inkrementiert, dekrementiert oder unmodifiziert gelassen. Es werden
keine Logikoperationen ausgeführt.
-
Schreiben
-
Bei einem Speichervorgang werden
Daten aus der MIQD-Einheit entnommen, wahlweise mit dem Wert im
Cache-Speicher durch
ein UND oder ein ODER verknüpft
und dann im Cache-Speicher gespeichert. Dabei können auch die ankommenden Daten
von der MIQD-Einheit ignoriert werden und einfach der Wert im Cache-Speicher
inkrementiert oder dekrementiert werden.
-
Räumen
-
Bei einem Räumungsvorgang werden Daten
aus dem Cache-Speicher entnommen und in den Speicher zurückgegeben.
Dies ist ein zweiphasiger Vorgang, der einem Teil-Schreibvorgang ähnelt: Die
ganze Cache-Leitung wird aus dem Speicher ausgelesen und in der
MIQD-Einheit gespeichert, und es wird dann die Cache-Leitung zurückgeschrieben,
wobei die ersten zwei Wörter
statt aus der MIQD-Einheit aus dem Abruf-und-Operations-Cache-Speicher entnommen
werden.
-
Wir können nun aus dem Abruf-und-Operations-Cache-Speicher lesen oder
in diesen schreiben, und es gibt für jeden Fall drei Möglichkeiten,
nämlich
einen Treffer im Cache-Speicher (Trefferfall), einen Fehltreffer im
Cache-Speicher,
wobei der Cache-Eintrag unbenutzt ist (Ladefall) und einen Fehltreffer
im Cache-Speicher, wobei der Cache-Eintrag gegenwärtig verwendet wird (Fehltrefferfall).
Jeder dieser Fälle
wird durch eine Kombination von Füll-, Lese-, Schreib- und Räumungsvorgängen behandelt.
-
Abruf-und-Operations-Lesetreffer:
-
Es wird ein Lesevorgang ausgeführt.
-
Abruf-und-Operations-Schreibtreffer:
-
Es wird ein Schreibvorgang ausgeführt.
-
Abruf-und-Operations-Lesen-Laden:
-
Es wird ein Füllvorgang ausgeführt, um
die richtigen Daten in den Cache-Speicher
zu laden, worauf ein Lesevorgang folgt.
-
Abruf-und-Operations-Schreiben-Laden:
-
Es wird ein Füllvorgang ausgeführt, um
die richtigen Daten in den Cache-Speicher
zu laden, worauf ein Schreibvorgang folgt.
-
Abruf-und-Operations-Lesefehltreffer:
-
Es wird ein Räumungsvorgang ausgeführt, um
die Daten herauszuschreiben, die sich gegenwärtig im Cache-Speicher befinden,
worauf ein Füllvorgang
folgt, worauf ein Lesevorgang folgt.
-
Backdoor-Daten-ECC-Vorgang
-
Backdoor-ECC-Lesen
-
Ein Backdoor-ECC-Lesen erfolgt durch
Sammeln der ECC-Bits
von den oberen 8 Doppelwörtern
in einer Cache-Leitung oder den unteren 8 Doppelwörtern in
einer Cache-Leitung. Die IB-Einheit bringt immer den kritischen
Teil der Cache-Leitung zuerst ein, so daß die MB-Einheit die ECC-Bits
von den ersten 4 Zyklen, 16 ECC-Bits je Zyklus, sammelt. Diese ECC-Bits
werden dann als, ein einziges 64-Bit-Wort der MOQ-Einheit gesendet.
-
Falls IgnoreECC nicht gesetzt ist,
werden ECC-Fehler in der Cache-Leitung während Backdoor-ECC-Lesevorgängen erkannt
und korrigiert (Einzelbitfehler-Fall).
-
Backdoor-ECC-Schreiben
-
Ein Backdoor-ECC-Schreiben erfolgt
in ähnlicher
Weise wie ein teilweises Schreiben. Bei einem Backdoor-ECC-Schreiben werden
die ECC-Bits von 2 ausgerichteten 64-Bit-Wörtern
auf einmal geschrieben. Zuerst wird eine vollständige Cache-Leitung vom Speicher
gelesen und in die MIQD-Einheit geschrieben. Es sei bemerkt, daß die IB-Einheit
in diesem Fall eine kritische Halb-Cache-Leitungs-Umordnung ausführt, so
daß sich
die Wörter,
für die
wir die ECC-Bits schreiben möchten,
immer in den ersten 4 Zyklen befinden. Die MB-Einheit betrachtet die Bytefreigaben,
um zu bestimmen, bei welchen 2 Wörtern
die ECC-Bits geschrieben werden (es sollten nur zwei der Bytefreigabebits
gesetzt werden). In den Merge-Cache-Speicher
werden die 128 Bits geschrieben, für die ein Backdoor-ECC-Schreiben
ausgeführt
werden soll. Die Cache-Leitung
wird dann in den Speicher zurückgeschrieben,
und die Backdoor-ECC-Bits werden im geeigneten Zyklus gleichzeitig
mit den Merge-Cache-Daten aus der MIQD-Einheit ausgelesen, und die
vollständigen
144 Bits werden in den Speicher geschrieben. Es sei bemerkt, daß die ECC-Bits
die 16 unteren Bits des aus der MIQD-Einheit gelesenen Worts sind.
-
Backdoor-ECC-Schreibvorgänge sind
in erster Linie zur Verwendung mit dem IgnoreECC-Satz vorgesehen.
Falls IgnoreECC nicht gesetzt ist, werden ECC-Fehler beim Lesen
der Cache-Leitung
erkannt und korrigiert. Weiterhin werden ECC-Bits für alle Wörter regeneriert,
in die wir nicht direkt mit einem Backdoor-ECC-Schreibvorgang schreiben.
-
ECC-Scrub-Vorgang
-
Der ECC-Scrub-Vorgang wird verwendet,
um Einzelbit-ECC-Fehler
im Speicher zu korrigieren. Es handelt sich um einen zweiphasigen
Vorgang, der das Lesen in eine Cache-Leitung und das Schreiben der korrigierten
Cache-Leitung in die MIQD-Einheit
einschließt.
Daraufhin werden die Daten in den Speicher zurückgeschrieben, während die
richtigen ECC-Bits wiederhergestellt werden. Es sei bemerkt, daß Einzelbit-ECC-Fehler beim Lesen
keine Unterbrechung erzeugen und die Fehlerregister nicht beeinflussen,
selbst wenn IgnoreECC nicht gesetzt ist, weil der Zweck des Scrub-Vorgangs
darin besteht, bekannte Fehler zu korrigieren. Doppelbitfehler werden
jedoch selbst dann noch erkannt, wenn IgnoreECC nicht gesetzt ist.
-
Verzeichnisblock
-
Der Verzeichnisblock (DB) ist für das Implementieren
des SN1-Cache-Kohärenzprotokolls
verantwortlich. Während
der Block eingehender Nachrichten (IB) entscheidet, welche einwärts gerichteten
Transaktionen zu behandeln sind und alle Adressen an die SDRAMs
ausgibt und der Speicherblock (MB) die Daten in den Speicher und
aus dem Speicher behandelt, enthält
die DB-Einheit Kohärenzinformationen
im Verzeichnis und erzeugt alle Kopfteile für auswärts gerichtete Nachrichten.
-
Die Hauptfunktionen der DB-Einheit
bestehen im:
- • Speichern von bis zu 6 anhängigen Anforderungen
für die
DB-Pipeline.
- • Bestimmen
von Ausgangsnachrichten-Kopfteilen und manchmal von Ausgangsnachrichtendaten
auf der Grundlage der einwärts
gerichteten Nachricht, der Schutzgenehmigung für die Quelle der einwärts gerichteten
Nachricht und des aktuellen Verzeichniszustands.
- • Aufrechterhalten
des Verzeichniszustands. Das ECC-Bit wird erzeugt und geprüft. Es werden
zwei verschiedene Verzeichniseintragsgrößen unterstützt (32/64 Bits).
- • Aktualisieren
von Seitenmigrationszählern.
Erzeugen von Unterbrechungen, falls der Zählwert (oder die Differenz
zwischen den Zählwerten)
eine vom Benutzer definierte Schwelle übersteigt.
- • Protokollfehler
(Verzeichniszustandsspeicher-Fehler und Fehler im Protokoll einwärts gerichteter
Nachrichten).
- • Ermöglichen
direkter Lese-/Schreibvorgänge
in bezug auf den Verzeichnisspeicher. Diese werden durch HSPEC-Raum
ohne Cache-Speicher sowie einen speziellen Modus, in dem im Cache-Speicher
abgelegte Lesevorgänge
ein Daten-Doppelwort
zurückgeben,
unterstützt.
- • Zulassen,
daß aus
den lokalen Registern gelesen und in diese geschrieben wird (die
IB-Einheit behandelt die Schnittstelle zum lokalen Block).
-
Netzwerkschnittstelleneinheit 274
-
Die Netzwerkschnittstelleneinheit
(NI) 274 wirkt als eine Brücke zwischen der Bedrock-Crossbar-Einheit 279 und
dem Bedrock-SN1Net-Port 73. Die NI-Einheit 274 behandelt
alle Aspekte der SN1Net-Verbindung und kann an einen SN1-Router 76 oder
direkt an die NI-Einheit 274 des Peer-Node-Controllers 75 angeschlossen
werden.
-
Weil sich das SN1Net-Nachrichtenformat
vom Bedrock-Crossbar-Nachrichtenformat
unterscheidet, übersetzt
die NI-Einheit alle
Nachrichten, die zwischen den zwei Schnittstellen fließen. Die
NI-Einheit führt
diese Übersetzungen
bei der vollen Bandbreite aus, wobei in jeder Richtung ein einziger
Latenzzyklus auftritt. Die gesamte Bedrock-seitige Nachrichtenpufferung
tritt innerhalb der Crossbar-Einheit auf, wobei die NI-Einheit die
Ablaufsteuerinformationen zwischen der Crossbar-Einheit und dem
fernen SN1Net-Agenten vermittelt.
-
In diesem Dokument beziehen sich
die Begriffe "senden" und "auswärts gerichtet" auf Nachrichten,
die von der Bedrock-Einheit zur SN1Net-Einheit gesendet werden,
während
sich "empfangen" und "einwärts gerichtet" auf Nachrichten
bezieht, die an der Bedrock-Einheit von der SN1Net-Einheit empfangen
werden. 39 ist ein
Blockdiagramm der Haupt-Adressen-
und Datenwege der NI-Einheit 274.
-
SN1Net-Schnittstelle
-
41 zeigt
ein Blockdiagramm der Verbindungen zwischen dem Node-Controller 75 und
dem Router 76 gemäß einer
Ausführungsform.
-
Auf der physikalischen Schicht ist
die NI-Einheit über
zwei unidirektionale, quellensynchrone 20-Bit-Datenports, die mit
der STI-Signaltechnologie (siehe 41)
arbeiten, mit der SN1Net-Einheit verbunden. Alle Signale sind differentiell,
was zu 44 Signalstiften je Port führt. Die Schaltungsanordnung
der physikalischen Schicht besteht aus einem quellensynchronen Treiber
(SSD) und einem quellensynchronen Empfänger (SSR), welche die Umwandlung
zwischen seriellen 800-MHz-Daten an den Anschlußstiften und parallelen 200-MHz-Daten, die vom Chipkern
verwendet werden, implementieren.
-
Das Verbindungsebenenprotokoll (LLP-Version
3.0) liegt oberhalb der physikalischen Schicht, um eine zuverlässige in
der Reihenfolge erfolgende Übertragung
von als Mikropakete bekannten 128-Bit-Datenatomen bereitzustellen.
Für Einzelheiten
zur Arbeitsweise dieser Protokollschicht sei auf die Spezifikation
des Verbindungsebenenprotokolls ("Link Level Protocol") verwiesen. Die Sende- und Empfangsmodule
von SSD, SSR und LLP implementieren dasselbe Protokoll, das auf
dem SN1-Router 76 verwendet wird. Die meisten Aspekte der
SSD/SSR-Schnittstelle werden innerhalb des LLPs behandelt. Eine
Ausnahme ist die Steuerung des SSR-Datenabtastfensters, die über den
d-avail-select-Port erfolgt. Die Abtasteinstellung ist im NI_PORT_PARMS-Register
mit den D_AVAIL_SEL-Bits festgelegt.
-
Das Versehen virtueller SN1Net-Kanäle mit Tags,
das Rahmen von Nachrichten und die guthabenbasierte Ablaufsteuerung
befinden sich in Schichten oberhalb des LLPs, wodurch ermöglicht wird,
daß SN1-Kohärenzprotokollnachrichten
aus Mikropaketfolgen zusammengesetzt werden. Diese Informationen
werden vom LLP als Seitenbanddaten weitergeleitet (siehe 40, worin eine Nachrichtenseitenbandcodierung
dargestellt ist).
-
Crossbar-Schnittstelle
-
Beide Richtungen der Crossbar-Schnittstelle
der NI-Einheit sind
durch die genaue Bandbreitenübereinstimmung
zwischen internen Bedrock- und SN1Net-Übertragungen vereinfacht. Allen
Einzelzyklus-Bedrock-Kopfteilen folgt ein Totzyklus auf der Crossbar-Einheit,
wodurch die gleiche Bandbreite von den Zweizyklus-SN1Net-Kopfteilen
verbraucht wird. Alle Vierwort-Datenmikropakete verbrauchen zwei
Datenzyklen auf der Crossbar-Einheit, und Doppelwort-Datenmikropaketen
folgt ein Totzyklus auf der Crossbar-Einheit, der wiederum mit der
SN1Net-Bandbreite übereinstimmt.
-
Alle von SN1Net empfangenen Nachrichten
werden bei der vollen Bandbreite übersetzt und zum NOQ-Abschnitt
der Crossbar-Einheit weitergeleitet, wo sie gepuffert oder direkt
zum Crossbar-Schalter gesendet werden können. Das NOQ-Füllniveau
wird unter Verwendung des virtuellen Seitenband-Kanal-Ablaufsteuerprotokolls über die
NI-Einheit zum fernen SN1Net-Peer übertragen.
-
Interne SN1Net-zu-Bedrock-Nachrichtenumwandlung
Dieser Abschnitt beschreibt, wie am NI-Port ankommende SN1Net-Nachrichten
in das interne Bedrock-Nachrichtenformat umgewandelt werden.
-
BEMERKUNG:
-
Wenn Router-Netzwerk-Mikropakete
empfangen werden, sieht die Bedrock-Einheit jedes Mikropaket, das
einem Mikropaket folgt, dessen Endbit gesetzt ist, als einen Router-Netzwerk-Kopfteil
an. Nach dem Zurücksetzen
wird angenommen, daß das
erste empfangene Mikropaket ein Kopfteil ist.
-
Die Bedrock-zu-SN1Net-Kopfteilumwandlung
ist vom Nachrichtentyp unabhängig.
-
Kurz gesagt gilt:
- • Bedrock-Quelle[10:0]
= SN1Net-Quelle
- • Bedrock-Ergänzung[10:0]
= SN1Net-Ergänzung
- • Bedrock-Befehl[6:0]
= SN1Net-Befehl[30:24]
- • SN1Net-Adresse[2:0]
= 0, weil alle Adressen byteweise ausgerichtet sind
- • SN1Net-Adresse[34:33]
= 0, wobei diese für
die künftige
Node-Speichererweiterung reserviert ist
- • SN1Net-Adresse[42:35]
ist die Node-Nummer von der Bedrock-Adresse[40:33]
-
Interne Bedrock-zu-SN1Net-Nachrichtenumwandlung
-
Dieser Abschnitt beschreibt, wie
interne Bedrock-Nachrichten,
die über
den NI-Port ausgegeben werden, in das SN1Net-Nachrichtenformat umgewandelt
werden.
-
Bemerkung:
-
Der Inhalt des Zielfelds des SN1Net-Kopfteils
entspricht, abhängig
vom Befehl (wie in der nachstehenden Tabelle 120 zusammengefaßt ist)
den Inhalten des internen Bedrock-Kopfteil-Adreßfelds, des Quellenfelds oder
des Ergänzungsfelds.
-
Tabelle
120 Physikalische Prozessoradresse für die SN1Net-Adresse
-
Tabelle
121 Umwandeln des internen Bedrock-Kopfteils in den SN1Net-Kopfteil
-
Tabelle
122 Vorrichtungskennungscodierung (DeviceID-Encoding
-
Registerzugriff
-
Der Zugriff auf Register im NI-Raum
wird durch den lokalen Block (LB) vermittelt. Register-Lese- und Schreibanforderungen
werden vom LB empfangen, der einen zweckgebundenen Register-Daten-
und Adreßbus
zum Übertragen
von Registerdaten zur NI-Einheit oder von dieser verwendet. Der
Zugriffsschutz wird auch durch den LB gesteuert. Die NI-Einheit erkennt jedoch
Lesezugriffsfehler auf den Registeradreßraum, der nicht existiert.
Dieser Fehler wird zum LB weitergeleitet.
-
Die IO-Schnittstelleneinheit (II)
des Bedrock-Chips implementiert die Schnittstelle zur Crosstalk-Schnittstelle,
welche die I/O-Vorrichtungen in der Art der Platten-Controller und der
Netzwerkplatinen (beispielsweise Ethernet) verbindet.
-
42 zeigt
ein Diagramm hoher Ebene der IO-Einheit und ihre Position in bezug
auf den Rest des Node-Controllers 75 und des Ein-/Ausgabeports 79.
Die Schnittstelle zwischen der Bedrock-Crossbar-(XB)-Einheit und
II besteht aus vier XB-Warteschlangen.
Die Namen der vier Warteschlangen sind mit den Vorspännen "RQ" oder "RP" versehen, wodurch
angegeben wird, daß sie
Anforderungsnachrichten bzw. Antwortnachrichten übertragen. Der Rest des Namens
gibt an, ob der II-Abschnitt der Empfänger der Nachricht (die Eingangswarteschlange "IIQ") oder der Absender
der Nachricht (die Ausgangswarteschlange "IOQ")
ist. 60 listet die Nachrichtentypen
auf, die von jeder Schnittstelle erzeugt oder verbraucht werden
können.
-
Der II-Abschnitt führt zwei
grundlegende Funktionen aus, nämlich
(1) er liefert ein Verfahren, wodurch IO-Vorrichtungen Host-Speicher
lesen und in diesen schreiben können
("DMA-Operationen"), und (2) er liefert ein
Verfahren, wodurch die Prozessoren in dem System IO-Vorrichtungen
steuern können
("PIO-Operationen"). Demgemäß bezieht
sich der Begriff "DMA" auf den Fall, in
dem eine IO-Vorrichtung der Initiator einer Anforderung ist, und
der Begriff "PIO" bezieht sich auf
den Fall, in dem ein Prozessor irgendwo in dem System die Quelle
der Anforderung ist. Um II selbst zu steuern, ist auch eine als "lokale PIO" bezeichnete Grundfunktion
implementiert. Dieser Begriff reflektiert die Tatsache, daß ein Prozessor
der Initiator der Anforderung ist, und das Objekt der Anforderung
ist ein Register, das sich innerhalb der II-Einheit (oder lokal
zu dieser) befindet.
-
Für
DMA-Operationen leitet eine IO-Vorrichtung eine Anforderung durch
Senden einer Crosstalk-Anforderungsnachricht in die Crosstalk-Empfangsschnittstelle
ein. Die Anforderung wird innerhalb von II in einem Zustandsvektor
aufgezeichnet, der als ein Guthabenantwortpuffer ("Credit Response Buffer" (CRB)) bezeichnet
wird. Die Anforderung wird in das interne Bedrock-Nachrichtenformat
umformatiert und dann zum Absenden zum Heim-Node des Speichers,
der das Ziel der Anforderung ist, durch die Anforderungs-IOQ-Einheit
zur XB-Einheit gesendet. Der II-Abschnitt nimmt am SN1-Kohärenzprotokoll
teil und muß möglicherweise
mehrere Aktionen ausführen
(später
beschrieben), um Zugriff auf den Zielspeicher zu erhalten. Wenn
diese Aktionen ausgeführt
werden, wird der Zustand der Anforderung in der CRB-Einheit aktualisiert.
Sobald durch die Antwort-IIQ-Einheit eine Antwort von der XB-Einheit empfangen
wurde, wird sie zur Crosstalk-Übertragungs schnittstelle
weitergeleitet, und die CRB-Einheit wird in den Ruhezustand versetzt.
-
Für
PIO-Operationen leitet ein Prozessor eine Anforderung durch Senden
einer Router-Netzwerkanforderungsnachricht in die Anforderungs-IIQ-Einheit
ein. Falls die Anforderung eine Leseanforderung ist, werden die
Node-Nummer und die Prozessornummer der Anforderung in einer als
ein PIO-Antwortpuffer
(PRB) bezeichneten Struktur aufgezeichnet. Falls die Anforderung
eine Schreibanforderung ist, wird dem Anfordernden sofort eine Schreibantwort
gegeben, indem sie über
die Antwort-IOQ-Einheit ausgesendet wird. Die Anforderung wird dann
in das Crosstalk-Format umformatiert und durch die Crosstalk-Übertragungsschnittstelle zur
Ziel-IO-Vorrichtung
gesendet. Der II-Abschnitt braucht in bezug auf die Cache-Kohärenz für PIOs keine
Arbeit auszuführen,
weil Zugriffe auf den IO-Platz so definiert sind, daß sie den
Kohärenzbereich
verlassen haben. Wenn eine Leseantwort auf der Crosstalk-Empfangsschnittstelle
empfangen wird, werden die in der PRB-Einheit gespeicherten Informationen
zum Umformatieren der Antwort in eine interne Bedrock-Nachricht verwendet,
und diese wird über
die Antwort-IOQ-Einheit ausgesendet. Wenn eine Schreibantwort auf
der Crosstalk-Empfangsschnittstelle
empfangen wird, wird sie nach dem Prüfen auf Fehler und andere Statusinformationen
verworfen.
-
PIO-Operationen, die sich auf lokale
II-Register beziehen, funktionieren in hohem Maße wie PIO-Operationen, die
sich auf IO-Vorrichtungen beziehen. Der einzige Unterschied ist
der offensichtliche Unterschied, der darin besteht, daß sich das
Ziel der Anforderung innerhalb der II-Einheit befindet, so daß die Anforderung die
Crosstalk-Schnittstelle
nicht betrifft.
-
Nachrichtenfluß
-
Um Pufferüberläufe und Staubedingungen zu
verhindern, müssen
Hardware-Ablaufsteuermechanismen verwendet werden. Diese Ablaufsteuermechanismen
bilden eine Hierarchie, wobei unten in der Hierarchie ein Signalaustausch
niederer Ebene erfolgt und oben in der Hierarchie eine nachrichtensynchronisierte Ablaufsteuerung
erfolgt. Dieser Abschnitt gibt einen Überblick über die Ablaufsteueraspekte
von II.
-
Um einen Stau innerhalb eines Nodes
oder zwischen Nodes zu verhindern, gewährleistet II, daß Anforderungen
und Antworten in einem begrenzten Zeitraum über die IIQ-Einheit ausgegeben
werden. Diese Gewährleistung
bleibt selbst angesichts bestimmter Fehler bestehen, insbesondere
solcher, die die Crosstalk-Schnittstelle betreffen. Die II-Einheit
versucht weiterhin, die Zeit zu minimieren, die eine Nachricht auf
der IIQ-Einheit verbringt.
-
Weil die II-Einheit die Crosstalk-Schnittstelle
implementiert, implementiert sie den Crosstalk-Guthabenmechanismus.
Dieser Guthabenmechanismus verhindert, daß Nachrichteneingabepuffer überlaufen
(sowohl bei IO-Vorrichtungen als auch bei der II-Einheit).
-
Die in den vorhergehenden zwei Absätzen beschriebenen
Mechanismen sind nicht unabhängig.
Tatsächlich
könnte
der Crosstalk-Guthabenmechanismus die Gewährleistung des IIQ-Weiterleitungsfortschritts untergraben,
wenn eine langsame IO-Vorrichtung vorhanden ist. (Die II-Einheit
kann keine weiteren PIO-Anforderungen akzeptieren, wenn sie keine
Crosstalk-Guthaben aufweist, wodurch die IIQ-Einheit möglicherweise
blockiert wird.) Um dieses Problem abzumildern, ist durch die II-Einheit
ein als "PIO-Förderband – PIO conveyor
belt" bezeichneter
Mechanismus implementiert. Dieser Mechanismus verwaltet einen zweiten
Guthabensatz, der als "PIO-Guthaben" bezeichnet wird.
Diese PIO-Guthaben verwalten den Zugriff auf bestimmte IO-Vorrichtungen
(im Gegensatz zu Crosstalk-Guthaben, welche den Zugriff auf alle
IO-Vorrichtungen steuern), und wenn eine bestimmte IO-Vorrichtung eine
andere Anforderung nicht akzeptieren kann, wird eine neue Anforderung
für diese
IO-Vorrichtung von der IIQ-Einheit ausgegeben und ihr wird eine
negative Bestätigung gegeben.
Diese Aktion veranlaßt
den Anfordernden, die An forderung wieder in die Warteschlange einzugeben und
sie wieder zu senden, wodurch ein "Förderband" impliziert wird,
das dem Mechanismus seinen Namen gibt.
-
Die CRB-Einheit
als ein Teil-Merge-Puffer
-
Das SN1-Netzwerkprotokoll und das
Cache-Kohärenzprotokoll
bearbeiten Speicherdaten Cache-Leitung nach Cache-Leitung. IO-Vorrichtungen
müssen
jedoch in der Lage sein, Speicherdatenblöcke in Byte-Größe zu bearbeiten,
so daß die
II-Einheit die Mechanismen bereitstellen muß, um dies auszuführen. Für Lesevorgänge bedeutet
dies einfach, daß immer
dann, wenn eine IO-Vorrichtung Speicherlesedaten anfordert, eine
gesamte Cache-Leitung zur II-Einheit gesendet wird, welche die interessierenden
Bytes dann zur Vorrichtung weiterleitet. Für Schreibvorgänge ist
dies komplizierter.
-
Wenn eine IO-Vorrichtung in Blöcken, die
kleiner sind als Cache-Leitungen, in den Hauptspeicher schreibt,
führt die
II-Einheit folgendes aus: (1) Sie fordert die Cache-Leitung vom
System an, (2) sie empfängt die
Cache-Leitung in einem Puffer, wenn das System sie zurückgibt,
(3) sie fügt
die Bytedaten in die Cache-Leitung ein, und (4) sie schreibt die
ganze Cache-Leitung in den Hauptspeicher zurück. Wie alle anderen Anforderungen
von der Crosstalk-Einheit wird eine CRB-Einheit zugewiesen, um die
Kohärenzinformationen
für die Cache-Leitung
aufrechtzuerhalten, und der der CRB-Einheit zugeordnete Cache-Leitungs-Puffer
wird zum Ausführen
des Einfügens
verwendet.
-
Das Einfügen von Teil-Cache-Leitungs-Schreibvorgängen (auch
als "Teil-Schreibvorgänge" bezeichnet) stellt
den einzigen Fall dar, in dem die II-Einheit eine exklusive Kopie
einer Cache-Leitung anfordert. Nach Abschluß des Einfügens wird die Leitung sofort
zurückgeschrieben,
so daß sie
nicht im unsauberen Exklusivzustand gehalten wird.
-
Guthaben-Antwortpuffer
(CRB)
-
Die kohärenten Ressource-Puffer (oder
CRBs) sind den internen II-Zustand beschreibende Cache-Leitungen,
die von der II-Einheit manipuliert werden. Weil die II-Einheit am
SN1-Cache-Kohärenzprotokoll teilnehmen
muß, muß sie bestimmte
Zustandsinformationen in bezug auf jede Cache-Leitung aufrechterhalten,
für die
sie aktuelle Anforderungen hat.
-
Im allgemeinen verwendet jede Anforderung,
die von der Crosstalk-Einheit empfangen wird, eine CRB-Einheit für jede Cache-Leitung,
die betroffen wird. Wenn die Anforderung zum Router-Netzwerk 575 weitergeleitet
wird, bleiben einige Informationen in einer CRB-Einheit zurück, so daß, wenn
eine Antwort vom Router-Netzwerk 575 empfangen wird, die
II-Einheit weiß, was damit
geschehen soll. Angesichts der Komplexität des SN1-Cache-Kohärenzprotokolls
kann die II-Einheit
an mehreren Austäuschen
mit dem Verzeichnis oder dem Besitzer der Cache-Leitung teilnehmen,
bevor eine Antwort empfangen wird, die schließlich zum Anfordernden auf
der Crosstalk-Einheit weitergeleitet werden kann. Demgemäß stellt
jede CRB-Einheit den "aktuellen
Zustand" in der
Zustandsmaschine dar, der die Teilnahme der II-Einheit am Cache-Kohärenzprotokoll
verwaltet.
-
Der Rest der Zustandsmaschine, der
die Teilnahme der II-Einheit
am Cache-Kohärenzprotokoll
verwaltet, ist die sogenannte "CRB-Tabelle". Die CRB-Tabelle
ist einfach ein großer
Block einer kombinatorischen Logik, der die einwärts gerichtete Nachricht, die
CRB-Einheit, die von der einwärts
gerichteten Nachricht impliziert wird (durch eine CAM-Betrachtung der Adresse
in der Nachricht bestimmt) und andere interne Faktoren der II-Einheit
betrachtet. Wenn all diese Eingaben gegeben sind, erzeugt die CRB-Tabelle
den nächsten CRB-Zustand,
der verwendet wird, um die CRB-Einheit und die Antworten auf die
Nachrichten, wobei es sich um Anforderungen oder Antworten handelt,
die an das Router-Netzwerk 575 oder die Crosstalk-Einheit 82 gerichtet
sind, zu aktualisieren. Manchmal aktualisiert eine einwärts gerichtete
Nachricht nur die CRB-Einheit und erzeugt keine auswärts gerichtete
Nachricht.
-
Es gibt nur eine CRB-Tabelle, die
mit allen fünfzehn
CRB-Einheiten Pipeline-artig geteilt wird.
-
PIO-Antwortpuffer (PRB)
-
CRB-Einheiten unterhalten Informationen über ausstehende
DMA-Anforderungen (Anforderungen, die von der Crosstalk-Einheit eingeleitet
werden). In ähnlicher
Weise werden Informationen über
ausstehende PIO-Anforderungen (Anforderungen, die auf dem Router-Netzwerk 575 eingeleitet
werden) in PIO-Antwortpuffern (PRBs) unterhalten. Wenn ein Prozessor
im SN1-System eine Anforderung an eine I/O-Vorrichtung richtet, muß ein bestimmter
Zustand beibehalten werden, so daß, wenn die Antwort von dieser
Vorrichtung zurückkommt,
die II-Einheit weiß,
wohin sie zu senden ist. Aus später
beschriebenen Gründen
werden diese Informationen nur für
PIO-Leseanforderungen
aufrechterhalten.
-
Die Informationen über ausstehende
Lesevorgänge
werden in als PIO-Lesetabelleneinträge ("PIO Read Table Entries (PRTEs)") bezeichneten Registern
unterhalten. Es gibt acht PRTEs, eines für jeden möglichen ausstehenden Lesevorgang.
Es gibt eine PRB-Tabelle, die ähnlich
der CRB-Tabelle funktioniert, wobei sie den Zustand der auswärts gerichteten
Anforderung (von der PRB-Einheit und der PRTE-Einheit, die dieser Anforderung
zugeordnet sind) und der einwärts
gerichteten Nachricht nimmt und die nächsten Zustands- und Antwortnachrichten
ableitet. Weil dies auf der I/O-Seite der Kohärenzgrenze geschieht (PIO-Anforderungen verlassen
nach Definition den Kohärenzbereich),
ist der von den PRB- und PRTE-Einheiten verkörperte aktuelle Zustand in
der CRB-Tabelle
viel einfacher als in der PRB-Tabelle.
-
Interne Register der II-Einheit
-
Die II-Einheit wird durch viele interne
(lokale) Register konfiguriert und gesteuert. Sie werden hier erwähnt, weil
sie den Rest des internen II-Zustands darstellen, der erforderlich
ist, um den II-Schnittstellen Bedeutung zu geben, wie in den nachfolgenden
Abschnitten dieses Dokuments beschrieben wird.
-
IIQ-Schnittstellenanforderungen
-
Die einzigen Anforderungen vom Router-Netzwerk 575,
die von der II-Einheit empfangen werden, sind Interventionen (Nachrichten
in bezug auf Cache-Leitungen, die die II-Einheit besitzt) und PIO-Lesevorgänge und
Schreibvorgänge
(entweder zum Crosstalk-Register oder zu den II-Lokalregistern).
-
Lokaler Block
-
Der lokale Block (LB) des Bedrock-Chips
enthält
die PIO-Zugriffsmaschine,
einige Register, die Ungültigmachungsmaschine,
die Vektor-PIO-Maschine und einen Echtzeittakt-Generator.
-
Die Eingangssignale, die in die LB-Einheit
eingegeben werden, und die Ausgangssignale, die von der LB-Einheit
getrieben werden, können
in mehrere verschiedene Gruppen unterteilt werden. Jede dieser Gruppen
bildet eine bestimmte Schnittstelle. Zusammen bilden diese Schnittstellen
die gesamte Schnittstelle der LB-Einheit. Jeder der folgenden Unterabschnitte
beschreibt eine bestimmte Gruppe.
-
Takt,
Rücksetzen
und JTAG
-
-
Das Aktivieren der RESET_LB_Eingabe
bewirkt, daß die
LB-Einheit alle
ihre Zustandsmaschinen zurücksetzt
und ihre Register auf die spezifizierten Rücksetzwerte initialisiert.
Die LB-Einheit bricht jeden ablaufenden Vorgang ab (beispielsweise
eine PIO-Lese- oder Schreibanforderung oder eine LINVAL-Anforderung). Das
Aktivieren der RESET_LB_SOFT-Eingabe
bewirkt, daß die
LB-Einheit alle ihre Zustandsmaschinen zurücksetzt und jeden ablaufenden
Vorgang abbricht, die Register jedoch ihre aktuellen Inhalte beibehalten
(d.h. sie werden nicht neu initialisiert). Die RESET_LB_SOFT-Eingabe ist für diagnostische
Zwecke vorgesehen, während
der Bedrock-Chip im Labor getestet wird, nachdem Prototypen-Chips
verfügbar
sind. Falls ein Node "steckenbleibt", so daß kein weiterer
Fortschritt möglich
ist, kann, die RESET_LB_SOFT-Eingabe
verwendet werden, um den Chip in einen Zustand zurückzuversetzen,
in dem Software die Inhalte von Registern untersuchen kann, um die
Ursache des Fehlers zu bestimmen.
-
Rq-Flits
von der LIQ-Einheit zur LB-Einheit
-
-
Rq-
und Rp-Flits von der LB-Einheit zur LOQ-Einheit
-
Systemkonfigurationen
und Topologien
-
SN1-Vorrichtungen gemäß der vorliegenden
Erfindung sind modulare Computersysteme, die den Bereich von zwei
bis 512 CPUs umspannen. Sie bestehen aus getrennten an Einschubschränken angebrachten Modulen,
welche einen Node mit zwei oder vier CPUs (C-Bricks), 8-Port-Routern
(R-Bricks), verschiedenen IO-Bricks (I-Bricks, P-Bricks und/oder
X-Bricks), Energieversorgungseinschüben und/oder Plattenlaufwerkseinschüben (D-Bricks)
aufweisen. Alle diese Module (oder "Bricks") sind in einem Einschubschrank oder in
Einschubschränken
angebracht und mit Kabeln verbunden. Gemäß einer Ausführungsform
werden ein System und ein Verfahren verwendet, die in weiteren Einzelheiten
in WO-A-01/24017 beschrieben sind.
-
Diese Systeme weisen eine sehr flexible
Konfiguration auf, weil der Umfang an CPU-, Speicher-, IO- und Platten-Ressourcen unabhängig ausgewählt werden
kann. Systeme hoher Verfügbarkeit,
bei denen der gesamte Funktionsumfang vollständig redundant ist, können leicht
konfiguriert werden.
-
Alle SN1-Systeme (mit Ausnahme von
Systemen, die acht oder weniger CPUs aufweisen, wobei es sich um
einen Spezialfall handelt, der ohne Verwendung eines Router-R-Bricks implementiert
wird) weisen Gruppierungen eines Energieversorgungseinschubs, eines
Routers (R-Brick) und von 4-Prozessor-Nodes (C-Bricks) zuzüglich von
einem oder mehreren I/O-Bricks auf. Die anderen Nodes sind mit den
Routern verkabelt, und die Router sind bei großen Systemen miteinander verkabelt.
Diese Konfiguration führt
zu einem ausgezeichneten Wert, woraus sich eine Kombination geringer
Kosten, einer hohen Bandbreite und einer niedrigen Latenz ergibt,
und sie unterstützt
leicht die Konfiguration von Systemen hoher Verfügbarkeit. Es können bis
zu 24 CPUs mit einem recht erheblichen I/O-System in einem einzigen
Einschubschrank konfiguriert werden. Es können bis zu 32 CPUs in einem
einzigen Einschubschrank mit einem getrennten Einschubschrank für die IO
aufgebaut werden. Größere Systeme
werden unter Verwendung mehrerer Einschubschränke implementiert.
-
Systeme, die über einhundertachtundzwanzig
(128) CPUs aufweisen, werden mit zusätzlichen Routern 76 konfiguriert,
die in einigen der Einschubschränke
installiert sind, welche als Metarouter bekannt sind und welche
die Verbindung großer
Anzahlen von Nodes ermöglichen.
Module innerhalb der Einschubschränke werden für alle Konfigurationen
identisch organisiert und installiert, und es ist innerhalb eines
Einschubschranks nur eine Neuverkabelung erforderlich, um die Konfiguration
zu erweitern.
-
Bei Systemen mit 16 oder weniger
CPUs ist innerhalb des Einschubschranks zur Installation von I/O- und
Platten-Bricks Platz verfügbar.
Für größere Systeme
werden I/O- und Plattenmodule in getrennten Einschubschränken montiert,
welche keine Nodes 370 oder Router 76 enthalten.
-
Node: Prozessor/Speicher
-
Ein SN1-System weist einen oder mehrere
Nodes 370 auf. Jeder Node 370 weist zwei oder
vier Prozessoren 74 und ihre zugeordneten Cache-Speicher,
einen Hauptspeicher 77 und einen I/O-Port 273 sowie einen
Port 274 in das Router-Netzwerk auf. Ein zentraler ASIC-(anwendungsspezifischer
integrierter Schaltkreis)-Node-Controller 75 verbindet
diese vier Untersysteme.
-
CPU-Typen
-
Gemäß manchen Ausführungsformen
der vorliegenden Erfindung werden in SN1-Systemen zwei Familien
von CPUs unterstützt,
nämlich
MIPS-"T-Rex"-Prozessoren (beispielsweise
der R12000S-Prozessor und seine von SGI, dem Erwerber der vorliegenden
Erfindung erhältlichen
Folgeprozessoren) und Intel-"Merced"-Prozessoren (ein
Prozessortyp, der voraussichtlich von Intel Corporation erhältlich sein
wird). Jeder CPU-Typ wird auf einem anderen Platinenentwurf implementiert,
der zum Implementieren der verschiedenen Ausführungsformen jedes Nodes 370 verwendet
wird. Aktualisierungen können
durch Ersetzen des C-Bricks (Node 370) erreicht werden.
Gemäß einer
Ausführungsform
dürfen
MIPS- und Merced-Nodes nicht innerhalb eines einzigen Systems gemischt
werden, wenngleich Systeme, bei denen beide Prozessortypen verwendet werden,
unter Verwendung von anderen Verbindungen als CrayLink2 als ein
Cluster miteinander verbunden werden können.
-
MIPS-CPUs
-
Gemäß einer Ausführungsform
unterstützt
SN1 MIPS-T-Rex-CPUs
beginnend mit der T-Rex-Shrink-(R12000S)-CPU, die in einem Flip-Chip-Gehäuse gekapselt
ist und eine 200-MHz-SYSAD-Geschwindigkeit
unterstützt
(SYSAD ist die Prozessorschnittstelle 71). Bei verschiedenen
Ausführungsformen
ist die Entwicklung zusätzlicher
MIPS-Prozessoren für
SN1-Erweiterungen
geplant.
-
Gemäß einer Ausführungsform
sind Cache-Größen für MIPS-SN1-Nodes vier und
acht MB. Gemäß einer
Ausführungsform
besteht der Cache-Speicher aus neun 256k × 18 oder 512k × 18 SSRAMs
(synchronen statischen Direktzugriffs-Speicherchips – "Synchronous Static
Random Access Memory Chips").
Der Sekundär-Cache
für den
T-Rex-Shrink-Prozessor arbeitet bei der Hälfte des CPU-Kerntakts.
-
Merced-CPUs
-
Gemäß einer Ausführungsform
unterstützt
die SN1-Einheit Merced-CPUs. Gemäß einer
Ausführungsform
werden Merced-CPUs durch Einführen
eines zusätzlichen
Prozessorschnittstellen-ASICs
unterstützt,
der zwei Merced-CPUs anpaßt,
um auf einem der SYSRD-Busse (ein Prozessorschnittstellenbus 71 des
Node-Controllers 75)
zu kommunizieren. Zwei Prozessorschnittstellen-ASICs sind je Node
bereitgestellt, um eine Unterstützung
für vier
Merced-CPUs zu implementieren. Der Prozessorschnittstellen-ASIC
unterstützt
auch einen Ebene-3-Cache,
der unter Verwendung von DDR-SDRAM-Chips (synchroner dynamischer
Direktzugriffsspeicher mit doppelter Datenrate – "Double-Data Rate Synchronous Dynamic
Random Access Memory",
erhältlich
von Hitachi und NEC aus Japan und von IBM Corp. als Muster bereitgestellt)
implementiert ist. Dieser Cache-Speicher
verbessert die wirksame Speicherzugriffszeit für die CPUs, und er wird auch
zum Ausführen der
Protokollübersetzungen
verwendet, die erforderlich sind, um zu ermöglichen, daß die Merced-CPUs im SN1-System
arbeiten, das auf den in MIPS-CPUs verwendeten Protokollen beruht.
-
Hauptspeicherkonfiguration
-
Gemäß einer Ausführungsform
verwenden SN1-Systeme kundenspezifische DIMMs (Doppelreihen-Speichermodule – "Dual In-Line Memory
Modules"), die DDR-SDRAM
für den
Hauptspeicher enthalten. Die DIMMs, die in größeren SN1-Systemen verwendet
werden (solchen Systemen, die in der Lage sind, über 128 Prozessoren hinaus
zu skalieren), sind physikalisch ähnlich, enthalten jedoch einen
zusätzlichen
Speicherchip, um ausreichend Verzeichnisspeicher bereitzustellen,
um das Aufbauen von Konfigurationen von bis zu 512 CPUs zu ermöglichen.
Diese DIMMs werden in diesem Dokument als "Premium-DIMMs" bezeichnet, und jene ohne den zusätzlichen
Verzeichnisspeicher werden als "Standard-DIMMs" bezeichnet. Abgesehen von
dem Unterschied hinsichtlich des Verzeichnisspeichers sind Premium-
und Standard-DIMMs identisch und teilen sich einen gemeinsamen PCB-Entwurf
(Entwurf einer gedruckten Leiterplatte). Es ist bei Systemen mit weniger
als 128 CPUs akzeptierbar, die zwei Typen austauschend zu verwenden
und sie innerhalb eines Nodes zu mischen. Bei diesen Ausführungsformen
ist das Verhältnis
zwischen (Speicherdatenplatz) und (Verzeichnisdatenplatz) auf jeder
der mehreren Speicher-/Verzeichniskarten
auf einen Wert gelegt, der auf einer Größe des Multiprozessor-Computersystems
beruht. Gemäß manchen
Ausführungsformen
wird die Größe als die
Anzahl der CPUs in dem System gemessen und insbesondere in Hinblick
darauf, ob es (128) oder mehr Prozessoren gibt. Wenn (128) oder
mehr Prozessoren vorhanden sind, werden die Premium-DIMMs mit einem zusätzlichen
Speicherchip (d.h. einem kleineren Verhältnis zwischen (Speicherdatenplatz)
und (Verzeichnisdatenplatz)) verwendet.
-
Gemäß einer Ausführungsform
weist die Platine jedes Nodes 370 acht DIMM-Sockel auf,
die als vier Bänke
mit jeweils zwei DIMMs angeordnet sind. Es sei bemerkt, daß dies die
Hälfte
der Anzahl der in früheren Systemen
implementierten DIMM-Slots ist. Diese Entscheidung wurde wegen der
größeren Speicherdichten, die
im SN1-Zeitrahmen verfügbar sind,
getroffen. Der Hauptspeicher ist unter Verwendung von DDR-SDRAM-Teilen
implementiert, die bei einer Geschwindigkeit von 100 MHz für Adressen
und 200 MHz für Daten
laufen und eine Spitzenbandbreite von 3200 MBytes/s bereitstellen.
Die DIMMs verwenden 128- und 256-MBit-DRAM-Technologie, um eine
große
Vielzahl von DIMM-Größen zum
Erfüllen
verschiedener Anforderungen von Kunden anzubieten. Bei der 256-MBit-Technologie kann
jeder SN1-Node bis zu acht Gbytes (Gigabytes) an Speicher unterstützen.
-
Alle SN1-DIMMs sind aus zwei gedruckten
Basis-Schaltungstypen
aufgebaut, wobei einer x4-Speicherchips (mit einem vier Bit breiten
Datenweg) für
Daten/ECC unterstützt
und der andere x8-Speicherchips (mit einem acht Bit breiten Datenweg)
unterstützt.
Die folgende Tabelle zählt
die verschiedenen Typen auf, die in verschiedenen Ausführungsformen
implementiert sind. Alle Typen können
entweder als Standard- oder
Premiumtypen implementiert werden. Die geplante Implementation dient
dazu, die kleinste gewählte
Größe nur in Standardtypen
und alle anderen Größen nur
in Premiumtypen verfügbar
zu machen. Die Typen, welche für eine
Ausführungsform
verwendet werden, sind fett dargestellt. Jene, die mit einem * markiert
sind, sind Premium-DIMMs.
-
-
Die vorstehende Tabelle identifiziert
die Datenspeicher-Inkrement-DIMM-Sätze. Ein
Inkrement benötigt
zwei Speicher-/Verzeichnisdaten-DIMMs.
-
Gemäß einer Ausführungsform
enthalten alle DIMMs einen seriellen PROM, der vom System-Controller
lesbar ist. Der PROM enthält
die Teilezahl, den Datencode, den Speicherchiphersteller und andere
Informationen, die in der JEDEC-Norm für SPID-PROMs spezifiziert sind.
Der DIMM weist einen Schreibfreigabestift auf, um das Programmieren
des PROMs in der Fabrik zu ermöglichen.
Dieser Stift ist nicht mit der Node-Platine verbunden, wodurch es
unmöglich
gemacht ist, den PROM in das System 100 zu schreiben.
-
Der C-Brick
-
Der C-Brick für eine Ausführungsform nimmt einen einzigen
Node von bis zu vier CPUs zusammen mit acht DIMM- Schlitzen, dem Node-Controller 75 und
dem L1-System-Controller
auf. Der Entwurf der C-Box umfaßt
gemäß einer
Ausführungsform
entweder eine MIPS-T-Rex-CPU-Implementation oder eine Intel-Merced-CPU-Implementation.
Der C-Brick-Entwurf
beruht auf einem entfernbaren Logikträger, der zur Wartung in die
Vorderseite des C-Bricks hineingeschoben und aus dieser herausgezogen
wird. Diese Logikträgereinheit enthält die Node-Elektronik,
die Frontplatte, Einstecklüfter,
die L1-Anzeige und verzierende Kunststoffe.
-
Von der Frontplatte des C-Bricks
sind die L1-Anzeige und 3 an der Vorderseite angebrachte Lüfter sichtbar.
Die Lüfter
sind von der Vorderseite entfernbar, redundant und während des
Betriebs austauschbar.
-
Die Rückseite des C-Bricks enthält Anschlüsse für die 48-V-Eingangs-Gleichspannung,
D-NET, XTalk2-I/O und USB. Der USB-Port wird zur Verbindung mit
einem optionalen L2-System-Controller
in kleinen Systemen ohne einen R-Brick verwendet. Derselbe USB-Port
könnte,
falls erwünscht,
auch mit einem L3-System-Controller
verbunden werden.
-
Das Austauschen von Lüftern ist
der einzige Wartungstyp, der ausgeführt werden kann, während der C-Brick
arbeitet. Für
alle anderen Wartungsaktivitäten
(wie das Ersetzen von DIMMs) ist es erforderlich, daß der Brick
heruntergefahren wird und die Logik-Trägereinheit vom Brick entfernt
wird.
-
"C"-Node-Brick-MIPS-T-Rex-CPU-Implementation
-
Der T-Rex-Node-Platinensatz weist
eine Hauptplatine und bis zu zwei Prozessorplatinen (PIMMs) auf. Die
Hauptplatine gemäß einer
Ausführungsform
ist eine Halbplatten-Platine (11 × 17 Zoll) mit 16 Schichten, welche
den Node-Controller 75, acht DIMM-Sockel für den Speicher 77,
drei 48-V-Gleichspannung-zu-Niederspannung-Gleichspannungs-Gleichspannungs-Wandler,
den L1-System-Controller und Verbindungen zu den PIMM-(Prozessor-Reihenmodul – "Processor In-Line
Module")-Platinen
aufweist.
-
Jede Prozessorplatine weist zwei
MIPS-CPUs 74 auf, die zusammen mit ihrem L2-Cache-Speicher
direkt auf die Platine gelötet
sind. Jede PIMM stellt durch die Verwendung von zwei Gleichspannungs-Gleichspannungs-Wandlern
auf jedem PIMM seine eigene 48-V-Gleichspannung-zu-Niederspannung-Wandlung
bereit. Eine elektrische Verbindung zwischen der Hauptplatine und
jedem PIMM ist durch zwei Flächenfeldverbinder
mit 240 Positionen bereitgestellt.
-
SCHLUSSFOLGERUNG
-
Ein erster Aspekt der vorliegenden
Erfindung sieht ein Multiprozessor-Computersystem (beispielsweise
ein kleines Multiprozessorsystem 400 mit nur zwei Node-Controllern 75,
die unter Verwendung eines Interprozessorkanals 73 miteinander
verbunden sind, oder ein Multiprozessorsystem 100 oder 500 mit
bis zu Hunderten oder Tausenden von Node-Controllern 75, die über ein
Router-Netzwerk 575 oder ein anderes Interprozessor-Kommunikationsnetz 575 miteinander
verbunden sind) vor. Eine solche Ausführungsform des Systems umfaßt einen
ersten Node-Controller 75, einen zweiten Node-Controller 75,
eine erste Anzahl von Prozessoren 141, die wirkungsmäßig mit
dem ersten Node-Controller 75 gekoppelt sind, eine zweite
Anzahl von Prozessoren 141, die wirkungsmäßig mit
dem zweiten Node-Controller 75 gekoppelt sind, einen ersten
Speicher 77, der wirkungsmäßig mit dem ersten Node-Controller 75 gekoppelt
ist, ein erstes Ein-/Ausgabesystem 79, das wirkungsmäßig mit
dem ersten Node-Controller 75 gekoppelt ist, und ein Interprozessor-Kommunikationsnetzwerk 575,
das wirkungsmäßig zwischen
den ersten Node-Controller 75 und
den zweiten Node-Controller 75 geschaltet ist. Gemäß dieser
Ausführungsform
umfaßt
der erste Node-Controller 75 eine
Crossbar-Einheit 279, einen Speicherport 275,
der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und den ersten Speicher 77 geschaltet
ist, einen Ein-/Ausgabeport 273, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und das erste Ein-/Ausgabesystem 79 geschaltet
ist, einen Netzwerkport 274, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und
das Interprozessor-Kommunikationsnetzwerk 575 geschaltet
ist, und eine Anzahl unabhängiger
Prozessorports 270 unter Einschluß eines ersten Prozessorports 271,
der wirkungsmäßig zwischen die
Crossbar-Einheit 279 und einen ersten Teilsatz 241 der
ersten Anzahl von Prozessoren 74 geschaltet ist, und eines
zweiten Prozessorports 272, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und einen zweiten Teilsatz 242 der
ersten Anzahl von Prozessoren 74 geschaltet ist.
-
Gemäß manchen Ausführungsformen
des Systems ist der erste Node-Controller 75 auf einem
einzigen integrierten Schaltungschip 475 hergestellt.
-
Gemäß manchen Ausführungsformen
des Systems ist der erste Speicher 77 auf einer Anzahl
einsteckbarer Speicher-/Verzeichniskarten
untergebracht, wobei jede Karte 600 eine Anzahl von Speicherchips 610 unter
Einschluß eines
ersten Teilsatzes von Speicherchips 620, die dafür vorgesehen
sind, Speicherdaten zu halten, und eines zweiten Teilsatzes von
Speicherchips, die dafür
vorgesehen sind, Verzeichnisdaten zu halten, aufweist. Weiterhin
umfaßt
der Speicherport 275 einen Speicherdatenport 613 unter
Einschluß eines Speicherdatenbusses 611 und
eines Speicheradreßbusses 612,
die mit dem ersten Teilsatz von Speicherchips 610 gekoppelt
sind, und einen Verzeichnisdatenport 623 unter Einschluß eines
Verzeichnisdatenbusses 621 und eines Verzeichnisadreßbusses 622,
die mit dem zweiten Teilsatz von Speicherchips 620 gekoppelt
sind. Bei manchen dieser Ausführungsformen
ist das Verhältnis
zwischen (Datenplatz im ersten Teilsatz von Speicherchips 610)
und (Datenplatz im zweiten Teilsatz von Speicherchips 620)
auf jeder der Speicher-/Verzeichniskarten auf einen Wert gelegt,
der auf der Größe des Multiprozessor-Computersystems beruht.
-
Gemäß manchen Ausführungsformen
des Systems kombiniert die Crossbar-Einheit 279 selektiv
zwei seriell empfangene Daten-Doppelwörter zu einem einzigen Vierwort-Mikropaket
zur Übertragung über die Crossbar-Einheit 279,
wobei jedes Doppelwort wenigstens 64 Datenbits enthält und das
einzige Vierfachwort wenigstens 128 Datenbits enthält.
-
Gemäß manchen Ausführungsformen
des Systems 400 sind der erste Node-Controller 75 und
der zweite Node-Controller 75 durch das Interprozessor-Kommunikationsnetzwerk 73 direkt
miteinander verbunden. Gemäß anderen
Ausführungsformen
des Systems 100, 300 sind der erste Node-Controller 75 und
der zweite Node-Controller 75 über einen Router-Chip 76,
der auch mit einem oder mehreren anderen Node-Controllern 75 verbunden
ist, indirekt miteinander verbunden.
-
Ein anderer Aspekt der vorliegenden
Erfindung sieht einen ersten Node-Controller 75 zur Verwendung in
einem Multiprozessor-Computersystem 100, 300, 500 mit
einem oder mehreren anderen Node-Controllern 75 vor. Dieser
erste Node-Controller 75 enthält eine
Crossbar-Einheit 279, einen Speicherport 275,
der zur Kommunikation mit einem Speicher 77 wirkungsmäßig mit
der Crossbar-Einheit 279 gekoppelt ist, einen Ein-/Ausgabeport 273,
der zur Kommunikation mit einem ersten Ein-/Ausgabesystem 79 mit
der Crossbar-Einheit 279 gekoppelt ist, einen Netzwerk-Port 274,
der zur Kommunikation mit einem zweiten Node-Controller 75 über ein
Interprozessor-Kommunikationsnetzwerk 575 mit
einem zweiten Node-Controller 75 gekoppelt ist, und eine
Anzahl unabhängiger
Prozessorports 270. Diese Prozessorports 270 umfassen
einen ersten Prozessorport 271, der zur Kommunikation mit
einem ersten Teilsatz 241 einer ersten Anzahl von Prozessoren 74 wirkungsmäßig mit
der Crossbar-Einheit 279 gekoppelt ist, und einen zweiten
Prozessorport 272, der wirkungsmäßig mit der Crossbar-Einheit 279 gekoppelt
ist oder mit einem zweiten Teilsatz 242 der ersten Anzahl von
Prozessoren 74 kommuniziert.
-
Gemäß verschiedenen Ausführungsformen
des Node-Controllers
sind wahlweise verschiedene Einzelheiten aufgenommen, wie vorstehend
für Ausführungsformen
des ersten Systemaspekts der Erfindung beschrieben wurde.
-
Ein anderer Aspekt der vorliegenden
Erfindung sieht ein Multiprozessorsystem 100, 300 oder 500 (das "zweite System") vor, das einen
oder mehrere Node-Controller 75 einschließlich eines
ersten Node-Controllers 75, eine erste Anzahl von Prozessoren 74,
die wirkungsmäßig mit
dem ersten Node-Controller 75 gekoppelt sind,
und einen ersten Speicher 77, der wirkungsmäßig mit
dem ersten Node-Controller 75 verbunden ist, aufweist.
Dieser erste Node-Controller 75 ist als ein einziger integrierter
Schaltungschip 475 gekapselt, der eine Crossbar-Einheit 279,
einen Speicherport 275, der wirkungsmäßig zwischen die Crossbar-Einheit 279 und
den ersten Speicher 77 geschaltet ist, und mehrere unabhängige Prozessorports
einschließlich
eines ersten Prozessorports, der wirkungsmäßig zwischen die Crossbar-Einheit 279 und
einen ersten Teilsatz 241 der ersten Anzahl von Prozessoren 74 geschaltet
ist, und eines zweiten Prozessorports 272, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und einen zweiten Teilsatz 242 der
ersten Anzahl von Prozessoren 74 geschaltet ist, aufweist,
wobei der erste Teilsatz 241 eine Anzahl von Prozessoren 74 aufweist
und der zweite Teilsatz 242 eine Anzahl von Prozessoren 74 aufweist.
-
Gemäß manchen Ausführungsformen
des zweiten Systems umfaßt
das System weiterhin einen Interprozessor-Kommunikationskanal 73, der
wirkungsmäßig zwischen
den ersten Node-Controller 75 und einen zweiten Node-Controller 75 geschaltet
ist, wobei der erste Node-Controller 75 weiterhin einen
Netzwerkport 274 aufweist, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und den Interprozessor-Kommunikationskanal 73 geschaltet
ist.
-
Gemäß manchen Ausführungsformen
des zweiten Systems umfaßt
das System weiterhin ein erstes Ein-/Ausgabesystem 79,
das wirkungsmäßig mit
dem ersten Node-Controller 75 gekoppelt ist, und ein Interprozessor-Kommunikationsnetzwerk 575,
das wirkungsmäßig zwischen
den ersten Node-Controller 75 und einen zweiten Node-Controller 75 geschaltet
ist. Der erste Node-Controller 75 gemäß diesen Ausführungsformen
umfaßt weiterhin
einen Ein-/Ausgabeport 273, der wirkungsmäßig zwischen
die Crossbar-Einheit 279 und das erste Ein-/Ausgabesystem 79 geschaltet
ist, und einen Netzwerkport 274, der wirkungsmäßig zwischen die
Crossbar-Einheit 279 und das Interprozessor-Kommunikationsnetzwerk 575 geschaltet
ist.
-
Gemäß manchen Ausführungsformen
des zweiten Systems ist der erste Speicher 77 auf einer
Anzahl einsteckbarer Speicher-/Verzeichniskarten 600 gekapselt,
wobei jede Karte eine Anzahl von Speicherchips einschließlich eines
ersten Teilsatzes von Speicherchips 610, die dafür vorgesehen
sind, Speicherdaten zu halten, und eines zweiten Teilsatzes von
Speicherchips 620, die dafür vorgesehen sind, Verzeichnisdaten
zu halten, wobei der Speicherport 275 weiterhin einen Speicherdatenport 613 einschließlich eines
Speicherdatenbusses 611 und eines Speicheradreßbusses 612,
die mit dem ersten Teilsatz von Speicherchips 610 gekoppelt
sind, aufweist, und einen Verzeichnisdatenport 623 einschließlich eines
Verzeichnisdatenbusses 621 und eines Verzeichnisadreßbusses 622,
die mit dem zweiten Teilsatz von Speicherchips 620 gekoppelt
sind, aufweist. Bei manchen dieser Ausführungsformen ist das Verhältnis zwischen
(Datenplatz im ersten Teilsatz der Speicherchips 610) und
(Datenplatz im zweiten Teilsatz der Speicherchips 620)
auf jeder der Anzahl von Speicher-/Verzeichniskarten 600 auf
einen Wert gelegt, der auf der Größe des Multiprozessor-Computersystems
beruht.
-
Ein anderer Aspekt der vorliegenden
Erfindung sieht ein Verfahren vor, das mit einem oder mehreren der
vorstehend beschriebenen Systeme verwendbar ist. Das Verfahren umfaßt das Übertragen
von Daten zwischen dem Speicherport 275 und dem ersten
Prozessorport 271, zwischen dem Speicherport 275 und
dem zweiten Prozessorport 272, zwischen dem Speicherport 275 und
dem Ein-/Ausgabeport 273 und zwischen dem Speicherport 275 und
dem Netzwerkport 274.
-
Einige Ausführungsformen des Verfahrens
umfassen weiterhin das direkte Übertragen
von Daten zwischen dem ersten Node-Controller 75 und dem
zweiten Node-Controller 75, die über den Interprozessor-Kommunikationskanal 73 direkt
miteinander verbunden sind.
-
Einige Ausführungsformen des Verfahrens
umfassen weiterhin das indirekte Übertragen von Daten zwischen
dem ersten Node-Controller 75 und dem zweiten Node-Controller 75 über ein
Interprozessornetz 575, das auch mit einem oder mehreren
anderen Node-Controllern 75 verbunden ist.
-
Einige Ausführungsformen des Verfahrens
umfassen weiterhin das Übertragen
von Daten zwischen beliebigen zwei der Speicherports, dem ersten
Prozessorport, dem zweiten Prozessorport, dem Ein-/Ausgabeport und
dem Netzwerkport.
-
Bei manchen Ausführungsformen des Verfahrens
geschieht das Übertragen
von Daten zwischen jeweils zwei von dem Speicherport, dem ersten
Prozessorport, dem zweiten Prozessorport, dem Ein-/Ausgabeport und
dem Netzwerkport in nicht blockierender Weise, so daß eine Anzahl
dieser Übertragungen
gleichzeitig auftritt.
-
Ein anderer Aspekt der vorliegenden
Erfindung sieht ein System vor, das die relative Größe des Verzeichnisses
auf der Grundlage der Größe des Systems
in der Art der Anzahl der Prozessoren, der Speichermenge und/oder
der Anzahl der Nodes ändert.
Einige dieser Ausführungsformen
sehen ein Multiprozessorsystem 100, 300 oder 500 vor,
das eine Anzahl von Node-Controllern 75 unter Einschluß eines
ersten Node-Controllers 75,
wobei jeder der Anzahl von Node-Controllern 75 einen Speicherport 275 und
einen getrennten Netzwerkport 274 und einen getrennten
ersten Prozessorport 277 und wahlweise einen zweiten Prozessorport 272 aufweist,
ein Interprozessor-Kommunikationsnetzwerk, das wirkungsmäßig mit
dem Netzwerkport 274 jedes jeweiligen der Anzahl von Node-Controllern 75 gekoppelt
ist, eine Anzahl von Prozessoren 74, die wirkungsmäßig mit
dem ersten Prozessorport jedes jeweiligen der Anzahl von Node-Controllern 75 gekoppelt sind,
einschließlich
einer ersten Anzahl von Prozessoren 74, die wirkungsmäßig mit
dem ersten Prozessorport 271 des ersten Node-Controllers 75 gekoppelt
sind, und eine Anzahl ge trennter Speicher 77, wobei einer
oder mehrere der Anzahl getrennter Speicher 77 wirkungsmäßig lokal
mit dem Speicherport 275 jedes jeweiligen der Anzahl von
Node-Controllern 75 gekoppelt ist, einschließlich eines
ersten Speichers 77, der wirkungsmäßig lokal mit dem Speicherport 275 des
ersten Node-Controllers 75 gekoppelt
ist, wobei der ersten Speicher auf einer Anzahl einsteckbarer Speicher-/Verzeichniskarten 600 gekapselt
ist, aufweist. Jede dieser Karten 600 weist eine Anzahl
von Speicherchips 610 einschließlich eines ersten Teilsatzes
von Speicherchips 610, die dafür vorgesehen sind, Speicherdaten
zu halten, und eines zweiten Teilsatzes von Speicherchips 620,
die dafür
vorgesehen sind, Verzeichnisdaten zu halten, auf. Der Speicherport 275 des
ersten Node-Controllers 75 umfaßt weiterhin
einen Speicherdatenport 613 einschließlich eines Speicherdatenbusses 611 und
eines Speicheradreßbusses 612,
die mit dem ersten Teilsatz von Speicherchips 610 auf jeder
einer Anzahl von Speicher-/Verzeichniskarten 600 gekoppelt
sind, so daß auf
die Speicherdaten gleichzeitig von der Anzahl von Speicherkarten 600 zugegriffen
wird, und einen Verzeichnisdatenport 613 einschließlich eines
Verzeichnisdatenbusses 621 und eines Verzeichnisadreßbusses 622,
die mit dem zweiten Teilsatz von Speicherchips 620 auf
jeder der Anzahl von Speicher-/Verzeichniskarten 600 gekoppelt
sind, so daß auf
Verzeichnisdaten gleichzeitig von einer Anzahl von Speicherkarten 600 unabhängig von
Speicherdatenzugriffen zugegriffen wird. Gemäß manchen dieser Ausführungsformen
ist das Verhältnis
zwischen (Datenplatz im ersten Teilsatz von Speicherchips 610)
und (Datenplatz im zweiten Teilsatz von Speicherchips 620)
auf jeder der Anzahl von Speicher/-Verzeichniskarten 600 auf einen
Wert gelegt, der auf der Größe des Multiprozessor-Computersystems beruht.
Gemäß verschiedenen
Ausführungsformen
beruht die Größe, die
das Verhältnis
bestimmt, auf einer Anzahl von Prozessoren 74, einer Speichermenge 77,
einer Anzahl von Routern 76 und/oder einer Anzahl von Node-Controllern 75.
-
Es ist zu verstehen, daß die vorstehende
Beschreibung als erläuternd
und nicht als einschränkend
anzusehen ist. Viele andere Ausführungsformen
werden Fachleuten beim Lesen der vorstehenden Beschreibung verständlich werden.
Der Schutzumfang der Erfindung soll daher durch die anliegenden
Ansprüche
bestimmt sein.