DE69721640T2 - Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses - Google Patents

Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses Download PDF

Info

Publication number
DE69721640T2
DE69721640T2 DE69721640T DE69721640T DE69721640T2 DE 69721640 T2 DE69721640 T2 DE 69721640T2 DE 69721640 T DE69721640 T DE 69721640T DE 69721640 T DE69721640 T DE 69721640T DE 69721640 T2 DE69721640 T2 DE 69721640T2
Authority
DE
Germany
Prior art keywords
node
requests
agent
cache
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE69721640T
Other languages
English (en)
Other versions
DE69721640D1 (de
Inventor
Paul Palo Alto Loewenstein
Erik Palo Alto Hagersten
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sun Microsystems Inc filed Critical Sun Microsystems Inc
Application granted granted Critical
Publication of DE69721640D1 publication Critical patent/DE69721640D1/de
Publication of DE69721640T2 publication Critical patent/DE69721640T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0817Cache consistency protocols using directory methods
    • G06F12/0828Cache consistency protocols using directory methods with concurrent directory accessing, i.e. handling multiple concurrent coherency transactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/27Using a specific cache architecture
    • G06F2212/272Cache only memory architecture [COMA]

Description

  • Die vorliegende Erfindung bezieht sich auf ein Multiprozessor-Computersystem und auf ein Verfahren zum Vorsehen eines ordnungsgemäßen Verkehrsflusses in einem solchen System.
  • Diese Erfindung findet Anwendung auf verzeichnisbasierten, skalierbaren Multi- bzw. Mehrprozessor-Computersysteme mit gemeinsam genutztem Speicher, um Transaktionsverklemmung bzw. -deadlock auf irgendeinem Knoten zu vermeiden, auch wenn Transaktionsflußkontrolle bzw. -steuerung zwischen den Knoten nicht implementiert ist.
  • Computer haben interne Taktschaltkreise, welche die Computerzyklen steuern. Je schneller der Takt ist, desto schneller kann der Computer zugewiesene Aufgaben erledigen. In den frühen achtziger Jahren betrug die durchschnittliche Taktrate eines allgemein verfügbaren Mikroprozessors etwa 4 Megahertz. 1996 sind Mikroprozessoren mit Taktraten über 200 Megahertz üblich. Taktratenzuwächse folgen im allgemeinen Zuwächsen der Transistordichte. In der Vergangenheit hat sich die Anzahl von Transistoren pro Flächeneinheit alle 18 Monate verdoppelt. Jedoch wird erwartet, daß Zuwächse der Prozessortaktraten, die auf Zuwächse der Transistordichte zurückzuführen sind, langsamer werden. Die erhöhte Transistordichte erfordert effektivere Kühlung, um der Hitze, die durch gestiegene Verlustleistung erzeugt wird, entgegenzuwirken. Zusätzlich erschwert die Notwendigkeit, Komponenten dicht zu packen, um große Leitungslängen und damit verbundene Übertragungsverzögerungen zu vermeiden, das Hitzeproblem.
  • Angesichts des fundamentalen Problems mit der Verlustleistung, das durch sehr bzw. extrem hohe Taktraten aufgeworfen wird, werden skalierbare, parallele Computerarchitekturen, die mehrere Prozessoren verwenden, zunehmend attraktiv. Unter dem Begriff "skalierbar" wird verstanden, daß Mehrprozessorsysteme anfänglich mit einigen wenigen Prozessoren aufgebaut werden können und dann zu einem späteren Zeitpunkt zu leistungsfähigen Systemen, die Dutzende, Hunderte oder sogar Tausende von Prozessoren enthalten, erweitert werden können. Es werden massiv-parallele Computer, die mit relativ billigen, großvolumigen Mikroprozessoren aufgebaut sind, hergestellt, die in der Lage sind, die Leistung eines Supercomputers bereitzustellen. Tatsächlich sind Mehrfachcomputersysteme für gewisse Anwendungen wie zum Beispiel Datenbank-Management in der Lage, Leistung bereitzustellen, die der von Systemen, die mit einem einzelnen, leistungsstarken Prozessor aufgebaut sind, bei weitem überlegen ist trotz des gestiegenen Overheads, der mit parallelen Systemen verbunden ist.
  • Im gleichen Maße, in dem effizientere Systemsoftware geschrieben wird und parallele Systemarchitekturen reifen, wird die Leistungsfähigkeit und Nützlichkeit von massiv-parallelen Computern dramatisch zunehmen. Um die Engpässe, die mit dem Zugriff auf den Hauptspeicher verbunden sind, zu verkleinern, werden massiv-parallele Systeme hergestellt und entworfen, die Hauptspeicher auf die individuellen Prozessoren oder auf die Systemknoten, die mehrere Prozessoren haben, ver teilen. Um den Speicherzugriff zu beschleunigen, ist jeder Prozessor innerhalb eines parallelen Systems typischerweise mit einem Cache ausgerüstet. Es wird allgemein zugestanden, daß je größer der mit jedem Prozessor verbundene Cache, desto größer die Systemleistung ist.
  • Mehrprozessor-Computersysteme mit mehrfachen Caches und cachekohärentem Arbeitsspeicher können auf einige Cachearchitekturen wie zum Beispiel Non-Uniform Memory Architecture (NUMA) (nicht gleichförmige Speicherarchitektur) oder Cache-Only Memory Architecture (COMA) (Nur-Cache-Speicherarchitektur) basieren. Für beide Arten von Architekturen werden cachekohärente Protokolle benötigt zur Erhaltung der Kohärenz zwischen den Inhalten der verschiedenen Caches. Zur Klarstellung soll der Begriff "Cache" nur einen Cache zweiter Stufe, der direkt einem Prozessor zugeordnet ist, bezeichnen. Der Begriff "Cachearbeitsspeicher" soll andererseits nur auf den Hauptspeicher innerhalb eines Knotens eines COMA-artigen Systems, der als ein Cachearbeitsspeicher fungiert, auf den alle Prozessoren in diesem Knoten gleichermaßen Zugriff haben und der direkt mit der lokalen Verbindung bzw. Zusammenschaltung verbunden ist, angewandt werden.
  • 1 ist ein Architektur-Blockdiagramm eines parallelen Computersystems mit NUMA-Architektur. Das Computersystem 100 enthält eine Mehrzahl von Subsystemen (auch bekannt als Knoten) 110, 120, ... 180, die untereinander über eine globale Verbindung oder Zusammenschaltung 190 verbunden sind. Jedem Knoten ist eine eindeutige Netzknotenadresse zugewiesen. Jedes Subsystem enthält mindestens einen Prozessor, eine entsprechende Anzahl von Speicherverwaltungseinheiten (memory management units, MMUs) und Caches, einen Hauptspeicher, eine globale Schnittstelle (global interface, GI) und eine Zusammenschaltung der lokalen Knoten (local-node interconnect, LI). Zum Beispiel enthält der Knoten 110 Prozessoren 111a, 111b, ... 111i, MMUs 112a, 112b, ... 112i, Caches 113a, 113b, ... 113i, den Hauptspeicher 114, die globale Schnittstelle 115 und die Zusammenschaltung der lokalen Knoten 119.
  • Bei NUMA-Architekturen ist der gesamte physikalische Adreßraum des Systems auf die Hauptspeicher der verschiedenen Knoten verteilt. Daher ist die Partitionierung des globalen Adreßraumes (GA-Raumes) statisch und beim Systemhochfahren vorab festgelegt (d. h. vor der Ausführung von Anwendungssoftware). Dementsprechend müssen beim ersten Mal, wenn der Knoten 110 eine Adreßposition außerhalb seines vorab zugewiesenen Teils des globalen Adreßraumes lesen oder beschreiben muß, die Daten von einer globalen Adresse in einem der anderen Subsysteme geholt werden. Die globale Schnittstelle 115 ist zuständig für das Verfolgen des Zustandes von Daten, die mit dem Adreßraum des Hauptspeichers 114 verbunden bzw. assoziiert sind. Die Zustandsinformation jeder Speicherstelle wird als ein Speichertag (M-TAG) gespeichert. Die M-TAGs können in irgendeinem Speicher, der für diesen Zweck bestimmt ist, gespeichert werden. Zum Beispiel können die M-TAGs als ein Zweibit-Datenanteil jeder adressierbaren Speicherstelle im Hauptspeicher 114, innerhalb eines separaten S-RAM-Speichers (nicht dargestellt) oder innerhalb des Verzeichnisses 116 gespeichert werden. Daten von den Hauptspeichern 114, 124,... 184 können in einem oder mehreren Caches 113a, ... 113i, 123a, ... 123i und 183a, ... 183i gespeichert werden. Um ein herkömmliches, verzeichnisbasiertes cachekohärentes Schema zu unterstützen, enthalten die Knoten 110, 120, ... 180 auch die Verzeichnisse 116, 126, ... 186 verbunden mit den globalen Schnittstellen 115, 125, ... bzw. 185.
  • Da die globale Schnittstelle 115 auch dafür zuständig ist, die globale Cachekohärenz zu bewahren bzw. zu erhalten, enthält die globale Schnittstelle 115 einen in Hardware und/oder Software implementierten Cachekohärenzmechanismus zum Bewahren bzw. Erhalten der Kohärenz zwischen den entsprechenden Caches und Hauptspeichern der Knoten 110, 120, ... 180. Cachekohärenz ist wesentlich, damit das System 100 ordnungsgemäß Programme, die gemeinsam genutzten Speicher verwenden, korrekt ausführen kann.
  • Die Beschreibung eines COMA-artigen Computersystems erfolgt unter Bezug auf 2. Die Architektur eines parallelen Computersystems mit Cache-Only Memory Architecture (COMA) ist in vielerlei Hinsicht ähnlich der eines NUMA-Systems. Jedoch was als Hauptspeicher 114, 124, ... 184 bei der NUMA-Architektur bezeichnet wurde, wird bei COMA-Architektur als Cachearbeitsspeicher 214, 224, ... 284 bezeichnet. Bei einem COMA-System ist die Verantwortung für das Verfolgen des Zustands des gesamten adressierbaren Raumes verteilt unter die entsprechenden M-TAGS und Verzeichnisse der verschiedenen Knoten (z. B. 210, 220 ... 280). Die Partitionierung der Cachearbeitsspeicher (z. B. 214, 224,... 284) des COMA-artigen Computersystems 100 ist dynamisch. Das heißt, daß diese Cachearbeitsspeicher als Attraction Memory funktionieren, wobei während der Ausführung von Software je nach Bedarf Platz im Cachearbeitsspeicher in seitengroßen Abschnitten zugeordnet bzw. belegt wird. Nichtsdestoweniger kann auf Cacheblöcke bzw. "-Zeilen" innerhalb jeder zugeordneten bzw. belegten Seite individuell zugegriffen werden.
  • Folglich vermeidet ein COMA-Computersystem durch Zuordnen von Speicherplatz in ganzen Seiten in den Cachearbeitsspeichern 214, 224, ... 284 Kapazitäts- und Zuordnungsprobleme, die mit dem Im-Cache-Halten von großen Datenstrukturen in NUMA-Systemen verbunden sind. Mit anderen Worten können einfach durch Ersetzen des Hauptspeichers des NUMA-Systems durch gleich- bzw. ähnlichgroße, seitenorientierte Cachearbeitsspeicher große Datenstrukturen nun in Gänze im Cache gehalten werden.
  • Bei COMA-Systemen hat die globale Schnittstelle 215 eine zweifache Verantwortung bzw. Zuständigkeit. Wie beim NUMA-System ist sie dafür zuständig, sich an der Bewahrung bzw. Erhaltung der globalen Kohärenz zwischen Caches zweiter Stufe (z. B. 213a, ... 213i, 223a, ... 223i und 283a, ... 283i) zu beteiligen. Darüber hinaus ist sie zuständig für das Verfolgen des Zustandes der Daten, die im Cachearbeitsspeicher 214 des Knotens 210 gespeichert sind, wobei die Zustandsinformation als Speichertags (M-TAGs) gespeichert wird. Der Adreßübersetzer 217 ist zuständig für das Übersetzen lokaler physikalischer Adressen (LPAs) in globale Adressen (GAs) für ausgehende Datenzugriffe und GAs in LPAs für ankommende Datenzugriffe.
  • In dieser Implementierung ist der Adreßübersetzer 217 beim erstenmal, wenn ein Knoten (z. B. Knoten 210) auf eine bestimmte Seite zugreift, nicht in der Lage, eine gültige Übersetzung von einer virtuellen Adresse (VA) in eine LPA für Knoten 210 vorzusehen, was zu einer Softwarefangstelle (Softwaretrap) führt. Ein Trapbehandlungsroutine (nicht abgebildet) von Knoten 210 wählt eine nicht vennrendete Seite im Cachearbeitsspeicher 214 aus, um Datenblöcke der Seite zu halten bzw. abzulegen. M-TAGs des Verzeichnisses 216, die mit der Seite verbunden sind, abzulegen. M-TAGs des Verzeichnisses 216, die mit der Seite verbunden sind, werden mit einem Zustand "ungültig" initialisiert und der Adreßübersetzer 217 wird auch initialisiert, um Übersetzungen in/von einer lokalen LPA dieser Seite von/zu der eindeutigen GA zu liefern, die verwendet wird, um auf diese Seite innerhalb des gesamten Systems 200 zu verweisen.
  • Obwohl ein COMA-System beim Im-Cache-Halten größerer Datenstrukturen effizienter ist als ein cachekohärentes NUMA-System, ist das Zuordnen bzw. Reservieren ganzer Seiten von Cachearbeitsspeicher auf einmal, um größere Datenstrukturen aufnehmen zu können, keine kosteneffektive Lösung für alle Zugriffsmuster. Das liegt daran, daß es ineffizient ist, ganze Seiten im Cache zu halten, wenn die Datenstrukturen dünn besetzt bzw. verstreut sind oder wenn nur auf wenige Elemente der Struktur tatsächlich zugegriffen wird.
  • Um ein besseres Verständnis der Betriebsweise und der Architektur der globalen Schnittstelle sowohl des NUMA-artigen als auch des COMA-artigen Systems zu gewährleisten, wird mit Bezug auf 3 eine Beschreibung einer herkömmlichen, globalen Schnittstelle gegeben. Wenn auf Strukturen von 1 Bezug genommen wird, findet der Bezug auch Anwendung auf die entsprechenden Strukturen von 2. Jede globale Schnittstelle (z. B. GI 115 von 1 oder GI 215 von 2) enthält einen abhängigen Agenten (Slave Agent, SA), einen Anforderungsagenten (Request Agent, RA) und einen Verzeichnisagenten (Directory Agent, DA). Beispiele solcher Agenten sind SA 315a, RA 315b und DA 315c. Jeder DA ist für die Instandhaltung bzw. das Aktuell-Halten der ihm zugeordneten Verzeichnisse zuständig.
  • Der Zustand von Cachekopien von Knoten 110, 120, ... und 180 wird in den Verzeichnissen 116, 126, ... bzw. 186 aufgezeichnet bzw. bereitgehalten. Wie zuvor erläutert ist jede Kopie dadurch gekennzeichnet, daß sie eine von vier Zustandsbedingungen hat: gemeinsam genutzt (shared, S), in Besitz (owned, O), geändert (modified, M) oder ungültig (invalid, I). Ein Zustand "gemeinsam benutzt" zeigt an, daß es andere Kopien in anderen Knoten gibt, daß kein Zurückschreiben beim Ersetzen bzw. Neubesetzen erforderlich ist und daß nur Leseoperationen auf der Speicherstelle ausgeführt werden können. Ein Zustand "in Besitz" zeigt an, daß es andere Kopien in anderen Knoten geben kann, daß ein Zurückschreiben beim Ersetzen bzw. Neubesetzen erforderlich ist und daß nur Leseoperationen auf der Speicherstelle ausgeführt werden können. Ein Zustand "geändert" zeigt an, daß es keine gemeinsam genutzten Kopien in anderen Knoten gibt und daß ohne Konsequenzen an anderer Stelle von dieser Speicherstelle gelesen und in sie geschrieben werden kann. Ein Zustand "ungültig" zeigt an, daß die Kopie in der Speicherstelle jetzt ungültig ist und daß die benötigten Daten von einem Knoten, der eine gültige Kopie hat, beschafft werden müssen.
  • Ein RA versieht einen Knoten mit einem Mechanismus zum Senden von Lese- und Schreibanforderungen an die anderen Subsysteme. Ein SA ist zuständig für das Antworten bzw. Reagieren auf Anforderungen vom DA eines anderen Knotens.
  • Anforderungen von Daten und Antworten bzw. Reaktionen auf solche Anforderungen werden von den entsprechenden Agenten zwischen den Knoten 110, 120, ... und 180 in der Form von Daten-/Steuerungs-Paketen ausgetauscht, wodurch jeder Knoten in die Lage versetzt wird, den Überblick über den Zustand aller Daten, die darin im Cache gehalten werden, zu behalten. Die Zustands information bezüglich der Cacheblöcke in den Caches 113a ... 113i, 123a ... 123i und 183a ... 183i wird in Verzeichnissen 116, 126, ... bzw. 186 gespeichert. Die Daten-/Steuerungs-Pakete werden zwischen den Knoten über die globale Zusammenschaltung 190 übertragen. Übertragungen von Daten-/Steuerungs-Paketen werden durch ein herkömmliches Netzprotokoll gesteuert bzw. geregelt wie zum Beispiel das Kollisionsentdeckungs-Mehrfachzugangs-Protokoll (Collision Sense Multiple Access, CSMA), unter dem bzw. mittels dessen die Knoten 110, 120, ... und 180 auf der Netzwerkbzw. Vermittlungsschicht des Protokolls lose untereinander gekoppelt sind. Daher kann die Ankunft der Pakete in der richtigen Reihenfolge nicht garantiert werden, während das Ankommen der Pakete am jeweils anderen Ende sichergestellt ist. Fälle von Paketankunft in falscher Reihenfolge bei den Knoten 110, 120, ... und 180 kann zu etwas führen, was als "Eckfälle" bzw. "Corner Cases" bezeichnet wird. Ein Eckfall bzw. Corner Case tritt auf, wenn eine früher ausgesendete, aber später eingetroffene Anforderung aufgelöst werden muß, bevor eine später ausgesendete, aber früher eingetroffene Anforderung aufgelöst wird. Wenn ein solcher Fall nicht erkannt und in richtiger Reihenfolge aufgelöst wird, kann die Cachekohärenz gestört bzw. unterbrochen werden.
  • Ein weiteres Problem, das mit der Übertragung von Lese- und Schreibanforderungen verbunden ist, ist es, Systemblockierung bzw. -deadlock zu verhindern, die bzw. der dadurch verursacht wird, daß mehr Anforderungen bei einem Knoten eintreffen, als der Knoten gleichzeitig verarbeiten kann. Es sei angenommen, daß irgendein Knoten, der in seiner Kapazitätsgrenze als ein Heimatknoten arbeitet, eine Anzahl y von an den Heimatagenten gerichteten Anforderungen gleichzeitig verarbeiten kann, und daß irgendein Knoten, der in seiner Eigenschaft als abhängiger Knoten arbeitet, eine Anzahl z von an den abhängigen Agenten gerichteten Anforderungen gleichzeitig verarbeiten kann. Wenn eine Anzahl y von Anforderungen an den Heimatagenten von einem Knoten verarbeitet werden, hat dieser Knoten seine Kapazitätsgrenze zur Behandlung von an den Heimatagenten gerichteten Anforderungen erreicht. In gleicher Weise hat, wenn eine Anzahl z von an den abhängigen Agenten gerichteten Anforderungen von einem Knoten verarbeitet werden, dieser Knoten seine Kapazitätsgrenze zur Behandlung von an den abhängigen Agenten gerichteten Anforderungen erreicht. Mit anderen Worten kann dieser Knoten nicht damit beginnen, andere gleichartige Anforderungen zu verarbeiten, bis mindestens eine von diesen laufenden Verarbeitungen abgeschlossen ist. Wenn ein Protokoll mit Flußkontrolle implementiert wäre, das dem System signalisierte, das Aussenden von Transaktionsanforderungen zu stoppen, weil eine Zielknoten seine Kapazitätsgrenze zur Anforderungsverarbeitung erreicht hat, dann kann die globale Zusammenschaltung so mit Protokollübertragungen überlastet werden, daß das System einen Zustand erreichen kann, in dem es nicht mehr fähig ist, irgendwelche weiteren Fortschritte zu machen. Solch ein Zustand ist als Systemverklemmung bzw. -deadlock bekannt. Wenn keine Flußkontrolle implementiert wäre, würden Protokollfehler höchstwahrscheinlich dazu führen, daß Anforderungen einfach fallen gelassen bzw. verworfen würden.
  • Um den laufenden Verkehr von ausgesendeten Anforderungen und Antworten auf diese Anforderungen in einem parallelen Computersystem in solch einer Art zu regeln bzw. zu steuern, daß keine Bedingung eines Systemdeadlocks, verursacht durch Versenden zu vieler Anforderung an einen einzelnen Knoten, herbeigeführt wird, waren Systemkonstrukteure bisher auf komplexe Flußkontrollprotokolle zur Regelung des Transaktionsflusses angewiesen. Eine solche Lösung hat einige Nachteile. Der erste ist die schiere Komplexität des Entwerfens eines fehlerlosen Systems zur Transaktionssteuerung bzw. -kontrolle. Der zweite ist, daß ein System zur Transaktionssteuerung bzw. -kontrolle Overhead bzw. zusätzlichen Aufwand erfordert. Ein solcher Overhead könnte in zusätzlichen Kommunikationskanälen, zusätzlichem Speicher, der dazu bestimmt ist, die Systemsoftware zur Steuerung bzw. Kontrolle zu speichern, und zusätzlicher Prozessornutzung, um die Systemsoftware zur Steuerung bzw. Kontrolle auszuführen, bestehen. Zusätzlich dazu, den Systemoverhead zu erhöhen, führt die Implementierung eines softwaregesteuerten Systems zur Verkehrssteuerung bzw. -kontrolle ausnahmslos zu langsameren Verarbeitungsgeschwindigkeiten, während das System die Verkehrssteuerungs- bzw. -kontrollparameter verarbeitet und das Verkehrssteuerungs- bzw. -kontrollprotokoll implementiert.
  • Ein Artikel von Kumar et al. mit dem Titel "Efficient and Scalable Cache Coherence Schemes for Shared Memory Hypercube Microprocessors", veröffentlicht in Proceedings Supercomputing 1994, 14.–18. November 1994, Washington, USA auf Seiten 498–507, beschreibt ein Mehrprozessorsystem mit gemeinsam genutztem Speicher, das ein verzeichnisbasiertes, cachekohärentes Schema verwendet. Der Artikel schlägt ein begrenztes Verzeichnisschema vor, das sowohl zu einen geringeren Speicheroverhead als auch zu kleineren Latenzzeiten beim Speicherzugriff im Vergleich zu früheren Schemata führt. Der Artikel beschreibt ein Schema, das Ringeinbettung in einem Hyperkubus in Verbindung mit Wormhole-Routing (Wurmloch-Routing) verwendet, um Entwertungsverzögerungen zu reduzieren.
  • In diesem Mehrprozessor mit gemeinsam genutztem Speicher hat jeder Knoten einen Prozessor, einen Cache, einen Anteil des globalen Speichers und des daran angeschlossenen Verzeichnisses, eine lokale und globale Zusammenschaltung und einen Eingabepuffer an einer globalen Schnittstelle, um geblockte bzw. in Blöcken angeordnete Nachrichten, die von der globalen Zusammenschaltung empfangen wurden, zu speichern, wobei der Eingabepuffer ein Puffer ist, der einen Deadlock auf dem Ring vermeidet und eine einstellbare bzw. regelbare Größe hat, da die Anzahl von empfangenen Nachrichten durch die Anzahl der Prozessoren (oder Knoten, ein Prozessor pro Knoten) beschränkt ist.
  • Ein Artikel von Kuskin et al. mit dem Titel "The Stanford FLASH Multiprocessor", veröffentlicht in Computer Architecture News, Vol. 22, No. 2, 1. April 1994 auf Seiten 302–313, beschreibt ein Basisprotokoll, das verzeichnisbasiert ist und zwei Komponenten hat: eine skalierbare Verzeichnisdatenstruktur und einen Satz von Behandlungsroutinen.
  • Das Stanford Flash System offenbart ein CC-NUMA/COMA-ähnliches Mehrknoten-System, bei dem eine Empfangsbehandlungsroutine und eine Übertragungsbehandlungsroutine an der globalen MAGIC-Schnittstelle jedes Knotens Nachrichten innerhalb des Knotens und zwischen den Knoten ähnlich wie die Anwendung steuern bzw. verwalten, indem sie Anforderungen, I/O- oder cachekohärente, senden und empfangen, wobei sie entsprechend die Zustände der lokalen Daten im Cache und die Zustände des Verzeichnisses bzw. im Verzeichnis modifizieren. Eingabe /Ausgabe-Warteschlangen und -Puffer, die mit diesen Behandlungsroutinen verbunden sind, vermeiden zusammen mit einem Planungsmechanismus eine Blockierung bzw. ein Deadlock, ermöglichen Zurückspeichern bzw. stufenweise Bearbeitung bzw. Staging in einem Knoten und reduzieren Latenz bzw. die Latenzzeit.
  • Was benötigt wird, ist eine effizientere Art und Weise, den Verkehrsfluß von Lese- und Schreibanforderungen in einem parallelen Computersystem zu regeln, die keinen zusätzlichen Overhead beim Systembetrieb erfordert und die den Informationsfluß auf der globalen Zusammenschaltung nicht behindert.
  • Ein Aspekt der Erfindung sieht ein Mehrprozessor-Computersystem gemäß Anspruch 1 vor.
  • Ein anderer Aspekt der Erfindung sieht ein Verfahren zur Bereitstellung des geordneten Verkehrsflusses von Speicheranforderung und Erfüllung der Anforderung zwischen den Knoten eines Mehrprozessor-Computersystems vor, das aus einer Mehrzahl von n Knoten besteht, ohne Rückgriff auf ein komplexes Flußkontrollprotokoll, wie in Anspruch 11 dargelegt.
  • Eine Ausführungsform der Erfindung kann ein verzeichnisbasiertes, skalierbares Mehrprozessor-Computersystem mit gemeinsam genutzten Speicher zur Verfügung stellen, das über einen blockierungs- bzw. deadlock-freien Transaktionsfluß ohne Flußkontrollprotokoll verfügt.
  • Diese Erfindung wird im Kontext eines cachekohärenten, parallelen Mehrprozessor-Computersystems mit mehreren Knoten und gemeinsam genutztem Speicher beschrieben, das sowohl im NUMA- als auch im COMA-Modus arbeiten kann. Jeder Knoten des Systems hat einen einzelnen Block von Hauptspeicher, auf den jeder Mikroprozessor innerhalb des Knotens gleichermaßen Zugriff hat. Beim NUMA-Modus repräsentiert der Hauptspeicherblock jedes Knotens einen Anteil des gesamten physikalischen Adreßraums des Systems. Beim COMA-Modus können Speicherstellen als eine globale Adresse, die eine Heimat-Position für eine globale Adresse identifiziert, oder als Cache für Daten, die ihre Heimat in einem anderen Knoten haben, verwendet werden. Jeder Mikroprozessor hat sowohl einen Cache erster Stufe (level-1, L1) als auch einen Cache zweiter Stufe (level-2, L2), die jenen zugeordnet sind, von denen jeder eine Mehrzahl von Cacheblöcken hat, und die jeweils groß genug sind, um Daten von einer einzelnen Hauptspeicheradresse zu speichern. Nur die Caches zweiter Stufe sind abgebildet.
  • Ein Teil des Hauptspeicherblocks jedes Knotens ist für ein Verzeichnis der Zustände der Cacheblöcke bestimmt. Alternativ dazu kann das Verzeichnis der Zustände der Cacheblöcke in einem vom Hauptspeicherblock separaten Speicher gespeichert werden. Für jede Adresse eines Cacheblocks innerhalb jedes prozeßzugeordneten Cache innerhalb dieses Knotens speichert das Verzeichnis Daten, die Information bezüglich der Cachekohärenz liefern.
  • Jeder Prozessor ist über seinen L2-Cache sowohl mit dem Hauptspeicherblock als auch mit einer Systemschnittstelle über eine lokale Zusammenschaltung oder einen Bus verbunden. Die Systemschnittstelle jedes Knotens ist mit der Systemschnittstelle jedes anderen Knotens über eine im hohen Grade parallele, globale Zusammenschaltung verbunden.
  • Jede Systemschnittstelle enthält einen Verzeichnisagenten, der dafür zuständig ist, das ihm zugeordnete Verzeichnis der Zustände der Cacheblöcke durch Aktualisieren des Zustandes der Daten von jeder Hauptspeicheradresse, die in einem Cacheblock in seinem eigenen Knoten (dem Heimat-Knoten) oder in irgendeinem anderen Knoten kopiert ist, auf dem Laufenden zu halten. Jede Systemschnittstelle enthält auch sowohl einen abhängigen Agenten, der für die Beantwortung von Anforderungen vom DA eines anderen Knotens zuständig ist, als auch einen Anforderungsagenten, der dem Knoten einen Mechanismus zum Senden von Lese- und Schreibanforderungen an andere Subsysteme zur Verfügung stellt. Die Systemschnittstelle ist auch für das Beibehalten der Kohärenz von Daten zuständig, die im Hauptspeicher, ob im NUMA- oder im COMA-Modus betrieben, gespeichert sind oder als im Cache abgelegt gehalten werden. Daher speichert jede Adresse auch ein Zwei-Bit Datentag, das angibt, ob Daten an der Stelle einen S-Zustand, einen O-Zustand, einen M-Zustand oder einen I-Zustand haben.
  • Datenanforderungen und Antworten auf diese Anforderungen werden von den entsprechenden Agenten zwischen den Knoten in der Form von Daten-/Steuerungs-Paketen ausgetauscht, womit jeder Knoten in die Lage versetzt wird, einen Überblick über den Zustand aller Daten zu behalten, die darin im Cache gehalten werden. Diese Daten-/Steuerungs-Pakete werden zwischen den Knoten über die globale Zusammenschaltung unter der Regie bzw. dem Management eines Übertragungsprotokolls übertragen.
  • Eine Ausführungsform der Erfindung stellt ein Verfahren und eine Vorrichtung bereit, welche die Notwendigkeit eines aktiven Verkehrskontroll- bzw. -steuerungssystems beseitigt, während weiterhin ein geordneter, anforderungsbezogener Transaktionsfluß erhalten bleibt. Dies wird durch Ermitteln der maximalen Anzahl von Anforderungen, die irgendein Agent auf jedem Knoten zu einem gegebenen Zeitpunkt empfangen kann, erreicht, indem ein Eingabepuffer vor jedem solchen Agenten vorgesehen wird, der eine entsprechende Größe hat, um vorübergehend mindestens die maximale Anzahl von Anforderungen zu speichern, die der Agent zu jedem gegebenen Zeitpunkt empfangen kann, und indem dann gespeicherte Anforderungen vom Puffer übertragen werden, sobald der Agent die in Verarbeitung befindlichen Anforderungen vollendet hat und in der Lage ist, zusätzliche ankommende Anforderungen zu verarbeiten. Da jeder Knoten nur eine bestimmte, endliche Anzahl von schwebenden bzw. anhängigen Anforderungen haben kann, ist dies die maximale Anzahl von Anforderungen, die von einem Knoten empfangen werden kann, der als Antwortender gegenüber einem anderen Knoten fungiert, der in seiner Eigenschaft als der Anforderer arbeitet. Darüber hinaus kann jeder Knoten auch Anforderungen ausgeben, die innerhalb dieses Knotens verarbeitet werden müssen. Daher muß der Eingabepuffer auf eine solche Größe ausgelegt sein, daß er nicht nur die externen Anforderungen aufnehmen kann, sondern auch die internen.
  • Nach einer weiteren Ausführungsform der Erfindung, die sich auf cachekohärente, parallele Computersysteme mit mehreren Knoten bezieht, die ein oder mehrere Eingabe/Ausgabe (Input/Output, I/O)-Caches in jedem Knoten haben können, werden Transaktionen, die für I/O-Einrichtungen bestimmt sind, separat von Transaktionen, die sich auf Cachekohärenz beziehen, in Warteschlangen eingereiht, und die Verarbeitung von Transaktionen zur Cachekohärenz ist niemals gezwungen, auf die Verarbeitung von I/O-bezogenen Transaktionen zu warten. Eine solche Technik erlaubt kohärenten, direkten Speicherzugriff von I/O-Einrichtungen.
  • Beispielhafte Ausführungsformen der Erfindung werden nachfolgend nur als Beispiel mit Bezug auf die beigefügten Zeichnungen beschrieben, worin:
  • 1 ein Architektur-Blockdiagramm eines herkömmlichen, parallelen NUMA-Computersystems ist;
  • 2 ein Architektur-Blockdiagramm eines herkömmlichen, parallelen COMA-Computersystems ist;
  • 3 ein Blockdiagramm einer herkömmlichen, globalen Schnittstelleneinheit ist;
  • 4 ein Architektur-Blockdiagramm eines verzeichnisbasierten Mehrprozessor-Computersystems mit mehreren Knoten und gemeinsam genutztem Speicher ist, das die Endung beinhaltet;
  • 5 ein Blockdiagramm der neuen, globalen Schnittstelleneinheit ist, das die Erfindung beinhaltet; und
  • 6 eine Auflistung der Schritte darstellt, die mit dem Verfahren zum Verhindern von Systemblockierung in Abwesenheit eines aktiven Verkehrssteuerungs- bzw. -kontrollsystems einhergehen.
  • Eine Ausführungsform der Erfindung wird im Kontext eines skalierbaren, mehrere Knoten umfassenden, verzeichnisbasierten, cachekohärenten, parallelen Computersystem mit gemeinsam genutztem Speicher beschrieben, das mehrere Sparc® Mikroprozessoren einbezieht. In diesem System können individuelle Knoten sowohl im Non-Uniform Memory Architecture (NUMA) Modus als auch im Cache-Only Memory Architecture (COMA) Modus gleichzeitig arbeiten bzw. betrieben werden. Beim Betrieb im NUMA-Modus repräsentiert der Hauptspeicher einen Teil des gesamten physikalischen Adreßraums des Systems. Beim COMA-Modus können Speicherstellen als eine globale Adresse verwendet werden, die eine Heimatspeicherstelle für eine globale Adresse angibt, oder als Cache für Daten, die ihre Heimat in einem anderen Knoten haben. Obwohl jedem Mikroprozessor innerhalb eines Knotens ein Cache sowohl erster Stufe (L1) als auch zweiter Stufe (L2) zugeordnet ist, sind nur die Caches zweiter Stufe in den Zeichnungen abgebildet.
  • In 4 wird die Architektur des parallelen Computersystems 40, das die Erfindung beinhaltet, durch mehrere Subsysteme (auch bekannt als Knoten) 410, 420, 430 und 440 dargestellt. Die verschiedenen Knoten 410, 420, 430 und 440 sind über die globale Zusammenschaltung 450 miteinander verbunden. Obwohl ein System mit nur vier Knoten abgebildet ist, ist die Erfindung auf Systeme mit einer beliebigen Anzahl von miteinander verbundenen Knoten anwendbar. Jedem Knoten ist eine eindeutige Netzwerkknotenadresse zugewiesen. Jeder Knoten enthält mindestens einen Prozessor, eine entsprechende Anzahl von Speicherverwaltungseinheiten (MMUs) und Caches, einen Hauptspeicher, dem ein Teil des globalen Speicheradreßraumes zugewiesen ist, eine globale Schnittstelle (GI) und eine lokale Zusammenschaltung (LI). Zum Beispiel enthält der Knoten 410 die Prozessoren 411a, 411b ... 411i, die MMUs 412a, 412b, ... 412i, die Cachespeicher 413a, 413b,...
  • 413i, den Hauptspeicher 414, die globale Schnittstelle 415 und die lokale Zusammenschaltung 419 des Knotens.
  • Daten von den Hauptspeichern 414, 424, 434 ... 484 können in einem oder mehreren der Caches 413a, ... 413i, 423a, ... 423i und 483a, ... 483i gespeichert sein. Daher muß die Kohärenz zwischen den Caches 413a, ... 413i, 423a, ... 423i und 483a, ... 483i aufrechterhalten werden, damit das System 40 Programme mit gemeinsamer Speichernutzung richtig ausführen kann.
  • Um ein verzeichnisorientiertes Kohärenzschema für Caches zu unterstützen, enthalten die Knoten 410, 420, 430 und 440 auch die Verzeichnisse 416, 426, 436 und 446, die mit den globalen Schnittstellen 415, 425, 435 bzw. 445 verbunden sind.
  • Bezugnehmend auf das Blockdiagramm in 5 enthält jede globale Schnittstelle (d. h. die Elemente 415, 425, 435 und 445 von 4) einen Heimatagenten (HA) 502, einen abhängigen Agenten (slave agent, SA) 504 und einen Anforderungsagenten (request agent, RA) 506. Der HA 502 ist für das Aktuell-Halten des ihm zugeordneten Verzeichnisses 503 (Verzeichnis 503 entspricht entweder Element 416, 426, 436 oder 446 von 4) durch Aktualisieren des Zustands von Daten von jeder Hauptspeicheradresse zuständig, die in einem Cacheblock in seinem eigenen Knoten (dem Heimatknoten) oder in irgendeinem anderen Knoten kopiert ist.
  • Der Zustand aller exportierbaren Speicherstellen von einem Heimatknoten (d. h. jener, die in anderen Knoten im Cache gehalten werden können) wird in einem Verzeichnis auf dem Laufenden gehalten. Bei dem in 4 abgebildeten System kann dieses Verzeichnis einem der Verzeichnisse 416, 426, 436 oder 446 entsprechen. Jede Kopie ist durch eine von vier Zustandsbedingungen gekennzeichnet: Ein Zustand "gemeinsam benutzt", zeigt an, daß es andere Kopien in anderen Knoten gibt, daß kein Zurückschreiben beim Ersetzen bzw. Neubesetzen erforderlich ist und daß nur Leseoperationen auf der Speicherstelle ausgeführt werden können; ein Zustand "in Besitz" zeigt an, daß es andere Kopien in anderen Knoten geben kann, daß ein Zurückschreiben beim Ersetzen bzw. Neubesetzen erforderlich ist und daß nur Leseoperationen auf der Speicherstelle ausgeführt werden können; ein Zustand "geändert" zeigt an, daß es keine gemeinsam genutzten Kopien in anderen Knoten gibt und daß ohne Konsequenzen an anderer Stelle von dieser Speicherstelle gelesen und in sie geschrieben werden kann; und ein Zustand "ungültig" zeigt an, daß die Kopie in der Speicherstelle jetzt ungültig ist und daß die benötigten Daten von einem Knoten, der eine gültige Kopie hat, beschafft werden müssen (d. h. von einem Knoten, in dem die Kopie als S, O oder M gekennzeichnet ist).
  • Der SA 504 ist dafür zuständig, auf Anforderungen vom DA eines anderen Knoten zu antworten, während der RA 506 einem Knoten einen Mechanismus zum Senden von Lese- und Schreibanforderungen an andere Subsysteme zur Verfügung stellt.
  • Gemäß 5 enthält die globale Schnittstelle auch eine Ausgabe-Header-Warteschlange (output header queue, OHQ) 508 und eine Eingabe-Header-Warteschlange (input header queue, IHQ) 510. Header enthalten andere Information als Daten, die sich auf eine Lese- oder Schreibanforderung bezieht (z. B. eine Adresse für eine Leseanforderung). Die globale Schnittstelle enthält auch die Ausgabe-Daten-Warteschlange (output data queue, ODQ) 512 und eine Eingabe-Daten-Warteschlange (input data queue, IDQ) 514.
  • Der HA 502 ist mit der globalen Zusammenschaltung 450 über OHQ 508 verbunden. Die globale Zusammenschaltung 450 ist mit dem HA 502 über IHQ 510 und durch einen ersten Pfad 513 für I/O-Anforderungen, einen zweiten Pfad 515 für Cachekohärenz-Anforderungen bzw. einen dritten Pfad 516 für Besitzanforderungs- (request-to-own) (d. h. Schreibanforderungs-) Transaktionen verbunden. Pfad 513 schließt einen I/O-Anforderungspuffer 518 ein, Pfad 515 schließt einen Cachekohärenz-Anforderungspuffer 520 ein, und Pfad 516 schließt einen R-T-O-Puffer 522 ein. Der HA 502 sendet auch Adressen an einen Adreßbusteil (nicht abgebildet) der lokalen Zusammenschaltung (z. B. Element 219 von Knoten 210) über die Ausgabewarteschlange (OQ) 524.
  • Der SA 504 ist mit der globalen Zusammenschaltung 450 über OHQ 508 verbunden. Die globale Zusammenschaltung 450 andererseits ist mit dem SA 504 über IHQ 510, den abhängigen Anforderungspuffer 526 bzw. den Übersetzer von globalen Adressen in lokale, physikalische Adressen 528 verbunden. Der SA 504 sendet Adressen zum Adreßbusteil der lokalen Zusammenschaltung (z. B. Element 419 von Knoten 410) über OQ 524.
  • Der RA 506 ist mit der globalen Zusammenschaltung 450 über OHO 508 verbunden. Die globale Zusammenschaltung 450 ist mit RA 506 über IHQ 510 über Pfad 529 verbunden, durch den RA 506 Antworten von Zustimmung zu bzw. Erfüllung von Anforderungen von allen anderen Knoten empfängt. RA 506 sendet Adressen zum Adreßbusteil der lokalen Zusammenschaltung (z. B. Element 419 von Knoten 410) über OQ 524. Der RA 506 empfängt Adressen vom Adreßbusteil der lokalen Zusammenschaltung über einen von zwei Pfaden, die beide durch den Transaktionsfilter 530 verlaufen. Cachekohärenz-Transaktionen werden über einen ersten Pfad 532 durch die C-C-Eingabe-Warteschlange der lokalen Zusammenschaltung 534 und den Übersetzer von lokalen, physikalischen Adressen in globale Adressen 535 geleitet, während Eingabe/Ausgabe-Transaktionen über einen zweiten Pfad 536 durch die I/O-Eingabe-Warteschlange 538 geleitet werden. Das Transaktionsfilter 530 unterscheidet zwischen allen anderen Transaktionen auf der lokalen Zusammenschaltung und jenen, die zum RA 506 geleitet werden sollen. Ein M-TAG-SRAM-Speicher 540 speichert einen aus mehreren Bits bestehenden Eintrag für jede Cacheblock-Adresse innerhalb des Knoten, die einer bestimmten globalen Schnittstelle zugeordnet ist. Jeder Eintrag zeigt an, ob Erlaubnis zum Lesen oder Schreiben auf einen entsprechenden Cacheblock erteilt ist.
  • Weiterhin ist gemäß 5 ein Datenbusteil (nicht abgebildet) der lokalen Zusammenschaltung mit der globalen Zusammenschaltung 450 über ODQ 512, IDQ 514 verbunden.
  • Anforderungen von Daten und Antworten auf diese Anforderungen werden zwischen Knoten vom entsprechenden HA, SA und RA jeder globalen Schnittstelle (d. h. 415, 425, 435 und 445) in der Form von Daten-/Steuerungspaketen ausgetauscht, wodurch jeder Knoten in die Lage versetzt wird, den Überblick über den Zustand aller Daten, die darin im Cache gehalten werden, zu behalten.
  • Die Zustandsinformation bezüglich Cacheblöcken in den Cachespeichem 413a ... 413i, 423a ... 423i, 433a ... 433i und 443a ... 443i werden in Verzeichnissen gespeichert, die der globalen Schnittstelle zugeordnet sind. Alternativ können die Verzeichnisse ein in Abschnitte unterteilter Anteil des Hauptspeichers sein (z. B. 414, 424, 434 und 444) oder das Verzeichnis kann außerhalb der Knotens liegen. Die Daten-/Steuerungspakete werden zwischen den Knoten über die globale Zusammenschaltung 450 übertragen. Übertragungen von Daten-/Steuerungspaketen werden durch ein Netzwerkprotokoll verwaltet. In einer Implementierung des offenbarten Systems ist ein Blockierer dem Heimatagenten jeder globalen Schnittstelle zugeordnet. Jeder Blockierer hat die Aufgabe, neue Anforderungen eines Cacheblocks zu blockieren, bis eine ausstehende bzw. offenstehende Anforderung für diesen Cacheblock bedient bzw. abgehandelt wurde.
  • Wenn das System im NUMA-Modus arbeitet, erfolgt eine typische Leseanforderung (z. B. eine Read_To_Share-Anforderung) von Prozessor 411a von Knoten 410 in der folgenden Art. Um die Anforderung zu initiieren, überreicht der Prozessor 411a eine virtuelle Adresse (VA) an MMU 412a, welche die VA in eine GA konvertiert und die GA an den Cache 413a überreicht. Wenn es eine gültige Kopie des Datenblocks, der von Interesse ist, im Cache 413a gibt (z. B. eine gemeinsam genutzte oder in Besitz befindliche Kopie), dann liefert der Cache 413a die Daten über MMU 412a an den Prozessor 411a, wodurch die Leseanforderung abgeschlossen ist.
  • Wenn jedoch der Cache 413a über keine gültige Kopie verfügt, dann überreicht der Cache 413a die GA der lokalen Zusammenschaltung 419 seines zugeordneten Knotens. Wenn die GA nicht Teil des lokalen Adreßraumes von Knoten 410 ist (d .h. Knoten 410 ist nicht der Heimatknoten für die angeforderte Adresse), dann wird die Anforderung zum entsprechenden Heimatknoten (d. h. Knoten 420) weitergeleitet. In diesem Fall, in dem die angeforderten Daten nicht im Cache des anfordernden Knotens 410 gefunden werden können, wird das Heimatverzeichnis entweder von Knoten 410 oder 420 (416 bzw. 426) aktualisiert, um die Transaktion widerzuspiegeln. Dies geschieht zum Beispiel dadurch, daß das Verzeichnis 416 aktualisiert wird, um anzuzeigen, daß Knoten 410 ein gemeinsamer Nutzer des von Knoten 420 erhaltenen Datenblocks ist.
  • Wenn der anfordernde Knoten 410 der Heimatknoten für den angeforderten Datenblock ist, wird das entsprechende M-TAG in Verzeichnis 416 auf einen passenden M-TAG-Zustand für einen Leseschritt hin überprüft (z. B. modifiziert, in Besitz oder gemeinsam benutzt). Wenn der M-TAG-Zustand ungültig ist oder wenn der anfordernde Knoten 410 nicht der Heimatknoten ist, wird das Verzeichnis 426 auf einen passenden M-TAG-Zustand hin überprüft. Das Verzeichnis des Heimatknotens hat Information darüber, welche Knoten gültige Kopien des Datenblocks haben und welcher Knoten der Besitzer des Datenblocks ist. Es sollte beachtet werden, daß der Heimatknoten der Besitzer sein kann oder auch nicht. Dies würde passieren, wenn der Datenblock innerhalb eines anderen Knotens aktualisiert würde, was ein Zurückschreiben in den Heimatknoten erforderlich machen würde, bevor der aktualisierte Block überschrieben wird. Darüber hinaus tiefem die M-TAG-Zustände in dem Fall, daß der anfordernde Knoten auch der Heimatknoten ist, einen Hinweis darüber, ob die Transaktion zulässig ist (d. h. das Heimatverzeichnis braucht in die betreffende Transaktion nicht involviert zu werden).
  • Wenn festgestellt wird, daß der Heimatknoten eine gültige Kopie des angeforderten Datenblocks hat, dann liefert der Heimatknoten die Daten an den anfordernden Knoten. Im Fall, daß der anfordernde Knoten auch der Heimatknoten ist, ist nur eine interne Datenübertragung erforderlich. Alternativ reagiert dann, wenn der Heimatknoten nicht der anfordernde Knoten ist, die globale Schnittstelle des Heimatknotens (die globale Schnittstelle 425 im obigen Beispiel) durch Zurückholen des angeforderten Datenblocks vom Hauptspeicher 424 oder von einem Cacheblock, die im Besitz eines Prozessors innerhalb von Knoten 420 ist, und sendet den Datenblock über die globale Zusammenschaltung 450 an die globale Schnittstelle 415 des anfordernden Knotens 410.
  • Umgekehrt wird in dem Fall, daß der Heimatknoten keine gültige Kopie des Datenblocks hat (d. h. der Heimatknoten ist nicht der Besitzerknoten), die Leseanforderung mit der GA weitergeleitet zu der globalen Schnittstelle des Knotens, welcher der Besitzer des angeforderten Datenblocks ist (z. B. globale Schnittstelle 445 des Besitzerknotens 440). Die globale Schnittstelle 445 reagiert durch Zurückholen des Datenblocks von einem der Caches innerhalb von Knoten 440 (z. B. Besitzer-Cache 443a) und Senden des Datenblocks an die globale Schnittstelle 415 des anfordernde Knotens 410 über die globale Zusammenschaltung 450.
  • Beim Empfang des Datenblocks leitet die globale Schnittstelle 415 den Datenblock an den Cache 413a weiter, der die Daten an den anfordernden Prozessor 441a übergibt. Der Datenblock kann im Cache abseits des kritischen Pfades für nachfolgendes Zurückholen durch Prozessor 441a gehalten werden.
  • Wenn eine Speicherstelle in einem Cache (z. B. Cache 413a) für das Speichern eines anderen Datenwertes benötigt wird, muß der alte Cacheblock ersetzt werden. Im allgemeinen werden Cacheblöcke, die einen Zustand "gemeinsam benutzt" haben, "stillschweigend" ersetzt (d. h. das Ersetzen erzeugt keine neue Transaktionen im Computersystem 400). Mit anderen Worten bleibt bei dem obigen Beispiel der Knoten 410 als ein gemeinsamer Nutzer des ersetzten Cacheblocks im Heimatverzeichnis des Knotens gekennzeichnet, in dem der Cache liegt, der den zurückgeholten Datenblock enthält. Umgekehrt erzeugt das Ersetzen von Cacheblöcken, die entweder einen Zustand "in Besitz" oder "modifiziert" haben, eine Zurückschreibtransaktion zur GA des Hauptspeichers des Heimatknotens für die Daten, die ersetzt werden. In einem solchen Fall muß das Heimatverzeichnis, in dem die Zurückschreiboperation durchgeführt wird, aktualisiert werden, um diese Transaktion widerzuspiegeln.
  • Über das Auf-dem-Laufenden-Halten eines separaten Verzeichnisses bei jedem Knoten, das zum Bereitstellen von Cachekohärenz notwendig ist, hinaus, ist jeder Speicherstellen-GA im Hauptspeicher, die zufällig bzw. im Übrigen der Länge eines Cacheblocks entspricht, ein Zweibit-Datentag, das dieselben Zustandsbezeichner wie das Cacheverzeichnis verwendet, zugeordnet. Das heißt, daß jede Speicherstelle zwei Bits speichert, welche die Speicherstelle als S, O, M oder I kennzeichnen. Dies ist notwendig, weil der Hauptspeicher in einem bestimmten Knoten auch eine Kopie von Daten speichern kann, die an Hauptspeicherstellen in anderen Knoten vorkommen.
  • Wenn das System im COMA-Modus arbeitet, erfolgt eine typische Leseanforderung (z. B. eine Read_To_Share-Anforderung) von Prozessor 411a von Knoten 410 in der folgenden Art. Um die Verarbeitung zu initiieren, überreicht der Prozessor 411a eine VA an MMU 412a, welche die VA in eine LPA konvertiert und die LPA an den Cache 413a überreicht. Wenn es eine gültige Kopie des angeforderten Datenblocks im Cache 413a gibt (d. h. eine gemeinsam genutzte oder in Besitz be findliche oder modifizierte Kopie), dann liefert der Cache 413a die Daten an den Prozessor 411a und die Leseanforderung ist abgeschlossen.
  • Wenn andererseits der Cache 413a über keine gültige Kopie des angeforderten Datenblocks verfügt, dann überreicht der Cache 413a die LPA an die globale Schnittstelle 415. Die globale Schnittstelle 415 greift auf die M-TAGs von Verzeichnis 416 zu, um herauszufinden, ob eine gültige Kopie des Datenblocks im Cachearbeitsspeicher 414 vorkommt.
  • Wenn eine solche gültige Kopie im Cachearbeitsspeicher 414 vorkommt, wird der Datenblock von dort zurückgeholt. Der Datenblock wird dann an Cache 413a übergeben, der die Daten an den Prozessor 411a über MMU 412a liefert, wodurch die Leseanforderung abgeschlossen ist.
  • Wenn jedoch eine gültige Kopie des angeforderten Datenblocks weder im Cache 413a noch im Cachearbeitsspeicher 414 aufgefunden werden kann, konvertiert der Übersetzer für lokale, physikalische Adressen in globale Adressen (Details siehe Element 535 von 5) innerhalb der globalen Schnittstelle des anfordernden Knotens 410 die LPA in eine GA, bevor die Datenanforderung über die globale Zusammenschaltung 450 an das Heimat-Subsystem, dessen Adreßraum die GA des angeforderten Datenblocks enthält, gesendet wird. Als nächstes konvertiert der Übersetzer für globale Adressen in lokale, physikalische Adressen (Details siehe Element 528 von 5) innerhalb der globalen Schnittstelle 425 des Heimatknotens 420 die GA in eine LPA und sieht im entsprechenden Verzeichniseintrag nach, um festzustellen, ob es eine gültige Kopie des Datenblocks im Heimat-Cachearbeitsspeicher 424 gibt. Diese GA-zu-LPA-Übersetzung im Heimatknoten 420 kann eine triviale Operation sein, wie zum Beispiel das Entfernen einer geeigneten Anzahl von führenden bzw. höherwertigen Bits von der GA.
  • In jedem der obigen Fälle, in denen der Datenblock im anfordernden Knoten 410 nicht gefunden wird, aktualisiert der Heimatknoten 420 sein Heimatverzeichnis 426, um einen neuen gemeinsamen Nutzer des Datenblocks widerzuspiegeln.
  • Wenn eine gültige Kopie im Heimatknoten 420 existiert, reagiert die globale Schnittstelle 425 durch Zurückholen des Datenblocks aus dem Cachearbeitsspeicher 424 oder Cache 423a, bevor der angeforderte Datenblock an die globale Schnittstelle 415 des anfordernden Knotens 410 über die globale Zusammenschaltung 450 gesendet wird.
  • Umgekehrt wird im Fall, daß der Heimatknoten 420 keine gültige Kopie des Datenblocks hat, die Leseanforderung mit der GA an den Adreßübersetzer des Besitzerknotens weitergeleitet (z. B. den Adreßübersetzer innerhalb der globalen Schnittstelle 445 von Knoten 440). Beim Empfang des GA vom Heimatknoten 420 konvertiert der Adreßübersetzer in Knoten 440 die GA in eine LPA für die globale Schnittstelle 445. Diese GA-zu-LPA-Übersetzung im Besitzerknoten 450 ist keine triviale Operation. Als nächstes reagiert die globale Schnittstelle 445 des Besitzerknotens 440, indem sie den Datenblock entweder aus dem Cachearbeitsspeicher 444 oder einem der Caches 443a, 443b ... 443i zurückholt und den angeforderten Datenblock an die globale Schnittstelle 415 des anfordernden Knotens 410 über die globale Zusammenschaltung 450 sendet.
  • Wenn der Datenblock bei der globalen Schnittstelle 415 ankommt, leitet die globale Schnittstelle 415 den Datenblock an den Cache 413a weiter, der dann die Daten für den anfordernden Prozessor 411a bereitstellt. Der Datenblock kann im Cache abseits des kritischen Pfades für nachfolgendes Zurückholen durch diesen Prozessor gehalten werden, wodurch die Lesetransaktion abgeschlossen ist. Es wird darauf hingewiesen, daß eine GA-zu-LPA-Übersetzung für das Zurückgeben der Daten nicht benötigt wird.
  • Gelegentlich kann das Ersetzen von ganzen Seiten, die im Cachearbeitsspeicher 414 gespeichert sind, notwendig sein, wenn der Cachearbeitsspeicher 414 voll oder nahezu voll wird, um Platz für das Zuordnen einer neuen Seite bzw. neuer Seiten auf eine Leseanforderung hin zu schaffen. Im Idealfall ist es eine Hintergrundaufgabe, daß der Knoten 410 eine optimale Anzahl von freien Seiten im Cachearbeitsspeicher 414 behält, wodurch sichergestellt wird, daß dem Attractinn Memory (d. h. Cachearbeitsspeicher 414) nicht der Speicherplatz ausgeht. Bei Ersetzung wird durch Zugriff auf die M-TAGs, die im Verzeichnis 416 gespeichert sind, eine Ermittlung vorgenommen, welche der Datenblöcke der zu ersetzenden Seite gültige Daten enthalten (entweder M-, O- oder S-Zustand). Es wird dann eine Nachricht an das Heimatverzeichnis, das für jeden solchen Block zuständig ist, gesendet, die darüber informiert, daß der Cacheblock ersetzt werden soll.
  • Wenn der Cacheblock einen M- oder O-Zustand hat, wird diese Transaktion ähnlich einer Zurückschreibe-Transaktion im NUMA-Modus behandelt: der Datenwert wird in den Heimat-Cachearbeitsspeicher oder das Heimatsystem geschrieben. Wenn der Cacheblock einen S-Zustand hat, überträgt die Ersetzungstransaktion keine Daten, sondern aktualisiert das lokale Verzeichnis, um die Tatsache, daß sein Knoten nicht länger eine gemeinsam genutzte Kopie des Datenblocks enthält, widerzuspiegeln. Folglich erfolgt beim Betrieb im COMA-Modus das Ersetzen nicht "stillschweigend", da das entsprechende Verzeichnis kontinuierlich aktualisiert wird, um jede Ersetzung von Datenblöcken widerzuspiegeln.
  • Eine Ausführungsform der Erfindung stellt ein Verfahren und eine Vorrichtung bereit, die die Notwendigkeit eines aktiven Verkehrssteuerungs- bzw. -kontrollsystems eliminieren, während immer noch ein geordneter, anforderungsbezogener Transaktionsfluß beibehalten wird. Dies wird durch Ermitteln der maximalen Anzahl von Anforderungen erreicht, die irgendein Knoten zu irgendeinem beliebigen Zeitpunkt empfangen kann, und durch Bereitstellen von Eingabepuffern innerhalb der globalen Schnittstelle jedes Knotens, welche die maximale Anzahl von Anforderungen speichern können, die irgendein Agent innerhalb dieser globalen Schnittstelle zu irgendeinem beliebigen Zeitpunkt empfangen kann, und Übertragen der gespeicherten Anforderungen vom Puffer, sobald der Knoten die in Verarbeitung begriffenen Anforderungen abschließt und in der Lage ist, zusätzliche eintreffende Anforderungen zu bearbeiten. Bei einigen Architekturen könnte man sich vorstellen, daß die maximale Größe des Puffers etwas kleiner ist als die Gesamtanzahl von Transaktionsanforderungen, die gleichzeitig zu irgendeinem Agenten innerhalb des Knotens gesendet werden kann, da der Knoten mit der Bearbeitung einer bestimmten Anzahl von eintreffenden Transaktionen beginnen könnte. Jedoch müßten bei bestimmten Architekturen die Transaktionen sequentiell, nacheinander, bearbeitet, wenn alle eintreffenden Anforderungen den Zustand desselben Cacheblocks beeinflussen. Auch wenn es unwahrscheinlich ist, daß sich alle Transaktionen auf einen einzelnen Cacheblock beziehen, ist die sicherste Lösung für diese Architekturen, die Größe der Puffer so zu bestimmen, daß jeder mindestens die maximale Anzahl von eintreffenden Anforderungen behandeln kann, die möglicherweise gleichzeitig an den ihm zugeordneten Agenten gesendet werden könnte. Mit anderen Worten ist der Schlüssel zu der Erfindung, die Größe der Eingabepuffer so zu bestimmen, daß sie unmöglich überlaufen können.
  • Wiederum gemäß 5 sind die Puffer, deren Größe richtig festgelegt werden muß, um Überlauf zu verhindern, der I/O-Anforderungspuffer 518, der Cachekohärenz-Anforderungspuffer 520 und der R-T-O-Puffer 522, von denen alle Header-Information in HA 502 einspeisen, und der abhängige Anforderungspuffer 526, der Header-Information in SA 504 einspeist. Für Anforderungstransaktionen, die auf dem Knoten lokal sind bzw. den lokalen Knoten betreffen, sollten die Cachekohärenz-Eingabe-Warteschlange 534 und die I/O-Eingabe-Warteschlange 538 auch in ihrer Größe so festgelegt werden, daß Überlauf verhindert wird.
  • Da der Anforderungsagent (request agent, RA) jedes Knotens zu jedem beliebigen Zeitpunkt nur eine bestimmte, endliche Anzahl von Anforderungen ausstehend bzw. offen haben kann, ist dies die maximale Anzahl von Anforderungen, die von einem Heimat- oder abhängigen Agenten vom Anforderungsagenten eines anderen Knotens empfangen werden kann. Darüber hinaus kann der RA jedes Knotens auch Anforderungen senden bzw. herausgeben, die innerhalb des ihm zugeordneten Knotens bearbeitet werden müssen. Daher muß der Eingabepuffer, der sowohl den Heimatagenten als auch den abhängigen Agenten speist, in seiner Größe so ausgelegt werden, daß er nicht nur externe Anforderungen aufnehmen kann, sondern auch die internen.
  • Bei der vorliegenden Implementierung des offenbarten Systems kann jeder Knoten zu jedem Zeitpunkt bis zu 16 Anforderungen anhängig bzw. offen haben. Jede anhängige bzw. offene Anforderung wird von einem Array von Anforderungszustandsmaschinen 542 auf dem anfordernden Knoten überwacht. In ähnlicher Weise kann jeder Heimatagent und jeder abhängige Agent ein Maximum von 16 Anforderungen gleichzeitig bearbeiten. Auch alle eintreffenden Anforderungen werden von einem Array von Zustandsmaschinen überwacht, die dem empfangenden Agenten zugeordnet sind. Daher hat der Heimatagent 502 ein Array von Heimatzustandsmaschinen 544, die bzw. das ihm zugeordnet ist, und der abhängige Agent 504 kann auch eine Reihe bzw. ein Array von Neben- bzw. Folgezustandsmaschinen bzw. auf den abhängigen Agenten bezogenen Zustandsmaschinen 546 haben, das ihm zugeordnet ist. Wenn 16 Anforderungen gerade durch einen bestimmten Heimatoder abhängigen Agenten erfüllt werden, hat dieser Agent seine volle Verarbeitungskapazität erreicht und kann nicht mit der Verarbeitung weiterer Anforderungen beginnen, bis mindestens eine der sechzehn bereits entgegengenommenen Anforderungen vollständig bearbeitet ist.
  • Nach einer weiteren Ausführungsform der Erfindung, die sich auf cachekohärente, parallele Computersysteme mit mehreren Knoten bezieht, die einen Eingabe/Ausgabe- (Input/Output, I/O) Cache in jedem Knoten haben, werden Transaktionen, die für I/O-Einrichtungen bestimmt sind, separat von Transaktionen, die sich auf Cachekohärenz beziehen, in Warteschlangen eingereiht, und die Verarbeitung von Cachekohärenz-Transaktionen braucht niemals auf die Verarbeitung von I/O-bezogenen Transaktionen zu warten.
  • Wie man erkennen kann, stellt eine Ausführungsform der Erfindung ein effektives Verfahren und eine Vorrichtung bereit, um einen geordneten Fluß von Speicheranforderungstransaktionen ohne Rückgriff auf die Implementierung eines komplexen Transaktionsflußprotokolls vorzusehen. Es sollte klar sein, daß die Erfindung auf jedes cachekohärente Computersystem anwendbar ist, das mehrere Knoten hat, wobei jeder Knoten über einen Teil des globalen Speichers und mindestens einen Prozessor mit vorgelagertem Cache verfügt.

Claims (16)

  1. Mehrprozessor-Computersystem mit: einer globalen Verbindung (450), einer Mehrzahl von n Knoten (410, 420, 430, 440), wobei jeder Knoten aufweist: einer lokalen Verbindung (419, 429, 439, 449), zumindest einem Prozessor (411, 421, 431, 441), wobei der Prozessor an die lokale Verbindung angeschlossen ist, einem Cache (413, 423, 433, 443), der jedem Prozessor zugeordnet ist, einem Hauptspeicher (414, 424, 434, 444), der an die lokale Verbindung angeschlossen ist, wobei der Hauptspeicher für alle Prozessoren innerhalb seines entsprechenden Knotens in gleicher Weise zugänglich ist, einer globalen Schnittstelle (415, 425, 435, 445), die die globale Verbindung mit der lokalen Verbindung ihres jeweiligen Knotens verbindet, wobei die globale Schnittstelle einen Heimatagenten (502), einen abhängigen Agenten (504), einen Anforderungsagenten (508), einen Transaktionsfilter (530) und einen Anzeigenspeicher (540) aufweist, wobei der Heimatagent für die Aufrechterhaltung seines zugeordneten Verzeichnisses verantwortlich ist, indem er den Status von Daten von einer Hauptspeicheradresse, die in eine Cacheleitung kopiert werden, auf den neuesten Stand bringt, der abhängige Agent für die Reaktion auf Anforderungen von einem anderen Knoten verantwortlich ist, der Anforderungsagent einen Knoten mit einem Mechanismus bereitstellt, um Lese- und Schreibeanforderungen an die anderen Knoten bereitzustellen, wobei der Transaktionsfilter die Cachekohärenztransaktionen von der lokalen Verbindung durch einen Übersetzer für lokale physikalische Adressen in globale Adressen an den Anforderungsagenten sendet und Eingabe/Ausgabetransaktionen von der lokalen Verbindung durch eine I/O-Eingabeschlange an den Anforderungsagenten leitet, und wobei der Anzeigenspeicher einen Statuseintrag der Zulässigkeit für jede der geleiteten Cachekohärenztransaktionen und die geleiteten Eingabe-/Ausgabetransaktionen speichert, und zumindest einem Eingangspuffer (510, 518, 520, 522, 526), der jedem Heimatagenten und jedem abhängigen Agenten jeder globalen Schnittstelle jeder der Mehrzahl von n Knoten zugeordnet ist, wobei jeder Eingangspuffer so bemessen ist, daß er eine zeitweise Speicherung für zumindest ny Anforderungen bereitstellt, welche externe Anforderungen von dem Anforderungsagenten eines anderen Knotens oder interne Anforderungen von dem Anforderungsagenten des lokalen Knotens sind, wobei die Anforderungen von dem Heimatagenten und dem abhängigen Agenten empfangen werden, wobei y die maximale Anzahl von Anforderungen wiedergibt, die bei einem Anforderungsagenten eines einzelnen Knotens zu irgendeinem beliebigen Zeitpunkt anhängig sein können.
  2. Mehrprozessor-Computersystem nach Anspruch 1, wobei jeder Cache eine Mehrzahl von Speicherstellen aufweist und jede Stelle so bemessen ist, daß sie Daten von einem adressierbaren Bereich des zu irgendeinem Knoten gehörigen Hauptspeichers speichert.
  3. Mehrprozessor-Computersystem nach Anspruch 2, wobei ein Teil des jedem Knoten zugeordneten Hauptspeichers als ein Verzeichnis für innerhalb des Knotens gespeicherte Cacheleitungen zurückbehalten bzw. reserviert wird, wobei das Verzeichnis außerdem Statusinformation für jede Cacheleitung bereitstellt.
  4. Mehrprozessor-Computersystem nach Anspruch 3, wobei die Statusinformation einen von vier Datenzuständen kennzeichnet, nämlich geteilt (bzw. gemeinsam verwendet), Besitz, modifiziert oder ungültig.
  5. Multiprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jede exportierbare Adreßstelle innerhalb des Hauptspeichers einer Datenanzeige zugeordnet ist, welche einen von vier Datenzuständen kennzeichnet: geteilt (gemeinsam verwendet), Besitz, modifiziert oder ungültig.
  6. Mehrprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jede globale Schnittstelle weiterhin einen Hauptspeicheradreßplan für das gesamte System aufweist.
  7. Mehrprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jede globale Schnittstelle weiterhin einen Schnittstellenschaltkreis aufweist, der einen Verzeichnis-Cachespeicher aufweist, in welchen ein Teilsatz des Verzeichnisses des Knotens geladen wird.
  8. Mehrprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jeder Anforderungsagent ein Maschinenzustandsarray hat, welches demselben zugeordnet ist, um den Zustand jeder Anforderungstransaktion zu überwachen, die er ausgibt.
  9. Mehrprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jeder Heimatagent ein ihm zugeordnetes Maschinenzustandsarray hat, um den Zustand aller Anforderungen zu überwachen, deren Verarbeitung er übernommen hat.
  10. Mehrprozessor-Computersystem nach einem der vorstehenden Ansprüche, wobei jeder Heimatagent einen ersten Eingangspuffer zum Speichern von Cachekohärenz-Transaktionsanforderungen hat, bis sie verarbeitet werden können, einen zweiten Eingangspuffer für das Speichern von I/O-Anforderungen hat, bis sie verarbeitet werden können, und einen dritten Eingangspuffer für das Speichern von Besitzanforderungen hat, bis sie verarbeitet werden können.
  11. Verfahren zum Bereitstellen des üblichen Stromes von Speicheranforderungen und von Anforderungen aufnehmendem Verkehr zwischen Knoten (410, 420, 430, 440) eines Mehrprozessor-Computersystems, welches eine Mehrzahl von n Knoten hat, ohne Rückgriff auf ein kompliziertes Flußsteuerungsprotokoll, wobei jeder Knoten aufweist: eine lokale Verbindung (410, 429, 439, 449), zumindest einen Prozessor (411, 421, 431, 441), wobei der Prozessor an die lokale Verbindung angeschlossen ist, einen Cache (413, 423, 433, 443), der jedem Prozessor zugeordnet ist, einen Hauptspeicher (414, 424, 434, 444), der an die lokale Verbindung angeschlossen ist, wobei der Hauptspeicher für alle Prozessoren innerhalb seines entsprechenden Knotens in gleicher Weise zugänglich ist, eine globale Schnittstelle (415, 425, 435, 445), die die globale Verbindung mit der lokalen Verbindung ihres jeweiligen Knotens verbindet, wobei die globale Schnittstelle einen Heimatagenten (502), einen abhängigen (504), einen Anforderungsagenten (508), einen Transaktionsfilter (530) und einen Anzeigenspeicher (540) aufweist, wobei der Heimatagent für das Aufrechterhalten des ihm zugeordneten Verzeichnisses verantwortlich ist, indem er den Status von Daten von einer Hauptspeicheradresse, die auf eine Cacheleitung kopiert wird, auf den neuesten Stand bringt, wobei der abhängige Agent für die Reaktion auf Anforderungen von einem anderen Knoten verantwortlich ist und der Anforderungsagent einen Knoten mit einem Mechanismus bereitstellt, um Lese- und Schreibeanforderungen zu senden, der Transaktionsfilter Cachekohärenztransaktionen von der lokalen Verbindung durch einen Übersetzer für lokale physikalische Adressen in globale Adressen an den Anforderungsagenten leitet und Eingangs-/Ausgangstransaktionen von der lokalen Verbindung durch eine I/O-Eingangsschlange an den Anforderungsagenten leitet, und der Anzeigenspeicher einen Statuseintrag der Zulässigkeit für jede der geleiteten Cachekohärenztransaktionen und der geleiteten Eingangs-/Ausgangstransaktionen speichert, wobei das Verfahren die Schritte aufweist: Bestimmen einer Zahl y, welche der maximalen Anzahl von Anforderungen entspricht, die bei einem Anforderungsagenten irgendeines einzelnen Knotens zu einem beliebigen Zeitpunkt anhängig sein können, Multiplizieren der Zahl y mit der Zahl n, welche die Anzahl von Knoten innerhalb des Computersystems wiedergibt, und Bereitstellen eines temporären Speichers in zumindest einem Eingangspuffer (510), der jedem Heimatagenten und jedem abhängigen Agenten jeder globalen Schnittstelle jeder der Mehrzahl von n Knoten zugeordnet ist, wobei jeder Eingangspuffer so bemessen ist, daß er einen zeitweiligen Speicher für zumindest ny Anforderungen bereitstellt, bis sie verarbeitet werden können, wobei die ny Anforderungen externe Anforderungen von dem Anforderungsagenten eines anderen Knotens oder interne Anforderungen von dem Anforderungsagenten des lokalen Knotens sind, und die Anforderungen von dem Heimatagenten und dem abhängigen Agenten empfangen werden.
  12. Verfahren nach Anspruch 11, welches weiterhin aufweist: Verarbeiten der in dem zumindest einen Eingangspuffer gespeicherten Anforderungen, und Übertragen der gespeicherten Anforderungen von dem zumindest einen Eingangspuffer, wenn die Verarbeitung derselben abgeschlossen ist.
  13. Verfahren nach einem der Ansprüche 11 oder 12, welches den Schritt aufweist, daß eine Statusanzeige an jedem Knoten für jede empfangene Anforderung aufrechterhalten wird, sobald das Verarbeiten derselben beginnt, wobei die Anzeige anzeigt, ob die Verarbeitung der Anforderung vollendet oder noch immer anhängig ist.
  14. Verfahren nach einem der Ansprüche 11 bis 13, welches den Schritt aufweist, daß eine Zustandsanzeige jedes Knotens für jede ausgegebene Anforderung aufrechterhalten wird, wobei die Anzeige anzeigt, ob eine ausgegebene Anforderung erfüllt oder noch immer anhängig ist.
  15. Verfahren nach einem der Ansprüche 11 bis 14, welches den Schritt aufweist, daß ein zeitweiliger Speicher für eine Anzahl y von Anforderungen bei dem Anforderungsagenten jedes Knotens ausgegeben wird, so daß anhängige Anforderungen, die von Prozessoren innerhalb des Knotens empfangen wurden, gespeichert werden können, bis der Anforderungsagent in der Lage ist, sie zu verarbeiten und sie an den Heimatagenten dieses Knotens zu senden.
  16. Verfahren nach einem der Ansprüche 11 bis 15, wobei ein getrennter zeitweiliger Speicherraum bereitgestellt wird für eingehende Cachekohärenzanforderungen, I/O-Anforderungen und Besitzanforderungen.
DE69721640T 1996-07-01 1997-06-23 Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses Expired - Fee Related DE69721640T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/674,358 US6141692A (en) 1996-07-01 1996-07-01 Directory-based, shared-memory, scaleable multiprocessor computer system having deadlock-free transaction flow sans flow control protocol
US674358 1996-07-01

Publications (2)

Publication Number Publication Date
DE69721640D1 DE69721640D1 (de) 2003-06-12
DE69721640T2 true DE69721640T2 (de) 2004-03-11

Family

ID=24706282

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69721640T Expired - Fee Related DE69721640T2 (de) 1996-07-01 1997-06-23 Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses

Country Status (3)

Country Link
US (1) US6141692A (de)
EP (1) EP0817062B1 (de)
DE (1) DE69721640T2 (de)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2728559B1 (fr) * 1994-12-23 1997-01-31 Saint Gobain Vitrage Substrats en verre revetus d'un empilement de couches minces a proprietes de reflexion dans l'infrarouge et/ou dans le domaine du rayonnement solaire
US6092155A (en) * 1997-07-10 2000-07-18 International Business Machines Corporation Cache coherent network adapter for scalable shared memory processing systems
US6826651B2 (en) * 1998-05-29 2004-11-30 International Business Machines Corporation State-based allocation and replacement for improved hit ratio in directory caches
US6081874A (en) * 1998-09-29 2000-06-27 International Business Machines Corporation Non-uniform memory access (NUMA) data processing system that speculatively issues requests on a node interconnect
US6978312B2 (en) * 1998-12-18 2005-12-20 Microsoft Corporation Adaptive flow control protocol
US6658469B1 (en) * 1998-12-18 2003-12-02 Microsoft Corporation Method and system for switching between network transport providers
US6393590B1 (en) * 1998-12-22 2002-05-21 Nortel Networks Limited Method and apparatus for ensuring proper functionality of a shared memory, multiprocessor system
US6341338B1 (en) * 1999-02-04 2002-01-22 Sun Microsystems, Inc. Protocol for coordinating the distribution of shared memory
US6345241B1 (en) * 1999-02-19 2002-02-05 International Business Machines Corporation Method and apparatus for simulation of data in a virtual environment using a queued direct input-output device
US6976083B1 (en) 1999-02-19 2005-12-13 International Business Machines Corporation Apparatus for providing direct data processing access using a queued direct input-output device
US6678773B2 (en) 2000-01-13 2004-01-13 Motorola, Inc. Bus protocol independent method and structure for managing transaction priority, ordering and deadlocks in a multi-processing system
US7454457B1 (en) * 2000-02-07 2008-11-18 Parallel Networks, Llc Method and apparatus for dynamic data flow control using prioritization of data requests
US7058723B2 (en) * 2000-03-14 2006-06-06 Adaptec, Inc. Congestion control for internet protocol storage
US6802057B1 (en) 2000-05-03 2004-10-05 Sun Microsystems, Inc. Automatic generation of fortran 90 interfaces to fortran 77 code
US6647546B1 (en) 2000-05-03 2003-11-11 Sun Microsystems, Inc. Avoiding gather and scatter when calling Fortran 77 code from Fortran 90 code
US7330904B1 (en) * 2000-06-07 2008-02-12 Network Appliance, Inc. Communication of control information and data in client/server systems
US6910107B1 (en) * 2000-08-23 2005-06-21 Sun Microsystems, Inc. Method and apparatus for invalidation of data in computer systems
JP2002077251A (ja) * 2000-08-28 2002-03-15 Nec Corp データ伝送システム、データ中継装置、およびデータ中継方法
US6654858B1 (en) * 2000-08-31 2003-11-25 Hewlett-Packard Development Company, L.P. Method for reducing directory writes and latency in a high performance, directory-based, coherency protocol
US6633960B1 (en) * 2000-08-31 2003-10-14 Hewlett-Packard Development Company, L.P. Scalable directory based cache coherence protocol
US7406681B1 (en) 2000-10-12 2008-07-29 Sun Microsystems, Inc. Automatic conversion of source code from 32-bit to 64-bit
US7269663B2 (en) * 2001-09-28 2007-09-11 Intel Corporation Tagging packets with a lookup key to facilitate usage of a unified packet forwarding cache
US7107409B2 (en) * 2002-03-22 2006-09-12 Newisys, Inc. Methods and apparatus for speculative probing at a request cluster
US20030195939A1 (en) * 2002-04-16 2003-10-16 Edirisooriya Samatha J. Conditional read and invalidate for use in coherent multiprocessor systems
US7653790B2 (en) * 2002-05-13 2010-01-26 Glasco David B Methods and apparatus for responding to a request cluster
US7395379B2 (en) * 2002-05-13 2008-07-01 Newisys, Inc. Methods and apparatus for responding to a request cluster
US8185602B2 (en) 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
US20050144397A1 (en) * 2003-12-29 2005-06-30 Rudd Kevin W. Method and apparatus for enabling volatile shared data across caches in a coherent memory multiprocessor system to reduce coherency traffic
US7788452B2 (en) * 2004-01-20 2010-08-31 International Business Machines Corporation Method and apparatus for tracking cached addresses for maintaining cache coherency in a computer system having multiple caches
US7418582B1 (en) 2004-05-13 2008-08-26 Sun Microsystems, Inc. Versatile register file design for a multi-threaded processor utilizing different modes and register windows
US7941799B2 (en) * 2004-05-27 2011-05-10 International Business Machines Corporation Interpreting I/O operation requests from pageable guests without host intervention
US7543132B1 (en) 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7509484B1 (en) 2004-06-30 2009-03-24 Sun Microsystems, Inc. Handling cache misses by selectively flushing the pipeline
US7366829B1 (en) 2004-06-30 2008-04-29 Sun Microsystems, Inc. TLB tag parity checking without CAM read
US7519796B1 (en) 2004-06-30 2009-04-14 Sun Microsystems, Inc. Efficient utilization of a store buffer using counters
US20060009265A1 (en) * 2004-06-30 2006-01-12 Clapper Edward O Communication blackout feature
US7290116B1 (en) 2004-06-30 2007-10-30 Sun Microsystems, Inc. Level 2 cache index hashing to avoid hot spots
US7571284B1 (en) 2004-06-30 2009-08-04 Sun Microsystems, Inc. Out-of-order memory transactions in a fine-grain multithreaded/multi-core processor
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7430643B2 (en) * 2004-12-30 2008-09-30 Sun Microsystems, Inc. Multiple contexts for efficient use of translation lookaside buffer
US7716388B2 (en) * 2005-05-13 2010-05-11 Texas Instruments Incorporated Command re-ordering in hub interface unit based on priority
US7975109B2 (en) 2007-05-30 2011-07-05 Schooner Information Technology, Inc. System including a fine-grained memory and a less-fine-grained memory
US8037252B2 (en) * 2007-08-28 2011-10-11 International Business Machines Corporation Method for reducing coherence enforcement by selective directory update on replacement of unmodified cache blocks in a directory-based coherent multiprocessor
CN101452400B (zh) * 2007-11-29 2011-12-28 国际商业机器公司 处理多处理器系统中事务缓冲器溢出的方法和系统
US8229945B2 (en) 2008-03-20 2012-07-24 Schooner Information Technology, Inc. Scalable database management software on a cluster of nodes using a shared-distributed flash memory
US8732386B2 (en) * 2008-03-20 2014-05-20 Sandisk Enterprise IP LLC. Sharing data fabric for coherent-distributed caching of multi-node shared-distributed flash memory
US8095502B2 (en) * 2008-09-12 2012-01-10 International Business Machines Corporation Lightweight directory access protocol (LDAP) administrator task notification control
US8856593B2 (en) 2010-04-12 2014-10-07 Sandisk Enterprise Ip Llc Failure recovery using consensus replication in a distributed flash memory system
US8868487B2 (en) 2010-04-12 2014-10-21 Sandisk Enterprise Ip Llc Event processing in a flash memory-based object store
US8725951B2 (en) 2010-04-12 2014-05-13 Sandisk Enterprise Ip Llc Efficient flash memory-based object store
US9164554B2 (en) 2010-04-12 2015-10-20 Sandisk Enterprise Ip Llc Non-volatile solid-state storage system supporting high bandwidth and random access
US9047351B2 (en) 2010-04-12 2015-06-02 Sandisk Enterprise Ip Llc Cluster of processing nodes with distributed global flash memory using commodity server technology
US8954385B2 (en) 2010-06-28 2015-02-10 Sandisk Enterprise Ip Llc Efficient recovery of transactional data stores
US8694733B2 (en) 2011-01-03 2014-04-08 Sandisk Enterprise Ip Llc Slave consistency in a synchronous replication environment
US8874515B2 (en) 2011-04-11 2014-10-28 Sandisk Enterprise Ip Llc Low level object version tracking using non-volatile memory write generations
US8914650B2 (en) * 2011-09-28 2014-12-16 Intel Corporation Dynamically adjusting power of non-core processor circuitry including buffer circuitry
US9135064B2 (en) 2012-03-07 2015-09-15 Sandisk Enterprise Ip Llc Fine grained adaptive throttling of background processes
FR2989489B1 (fr) * 2012-04-16 2015-11-27 Commissariat Energie Atomique Systeme et procede de gestion d'une coherence de caches dans un reseau de processeurs munis de memoires caches.
US20140040561A1 (en) * 2012-07-31 2014-02-06 Futurewei Technologies, Inc. Handling cache write-back and cache eviction for cache coherence
US11768769B2 (en) * 2016-04-25 2023-09-26 Netlist, Inc. Uniform memory access in a system having a plurality of nodes

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4794521A (en) * 1985-07-22 1988-12-27 Alliant Computer Systems Corporation Digital computer with cache capable of concurrently handling multiple accesses from parallel processors
CA2045756C (en) * 1990-06-29 1996-08-20 Gregg Bouchard Combined queue for invalidates and return data in multiprocessor system
US5274782A (en) * 1990-08-27 1993-12-28 International Business Machines Corporation Method and apparatus for dynamic detection and routing of non-uniform traffic in parallel buffered multistage interconnection networks
US5394555A (en) * 1992-12-23 1995-02-28 Bull Hn Information Systems Inc. Multi-node cluster computer system incorporating an external coherency unit at each node to insure integrity of information stored in a shared, distributed memory
US5617537A (en) * 1993-10-05 1997-04-01 Nippon Telegraph And Telephone Corporation Message passing system for distributed shared memory multiprocessor system and message passing method using the same
US5675796A (en) * 1994-04-08 1997-10-07 Microsoft Corporation Concurrency management component for use by a computer program during the transfer of a message
US5680482A (en) * 1995-05-17 1997-10-21 Advanced Micro Devices, Inc. Method and apparatus for improved video decompression by adaptive selection of video input buffer parameters
US5852718A (en) * 1995-07-06 1998-12-22 Sun Microsystems, Inc. Method and apparatus for hybrid packet-switched and circuit-switched flow control in a computer system
EP0752666A3 (de) * 1995-07-06 2004-04-28 Sun Microsystems, Inc. Verfahren und Vorrichtung zur Beschleunigung von Sklave-Anforderungen in einem paketvermittelten Computersystem
US5613071A (en) * 1995-07-14 1997-03-18 Intel Corporation Method and apparatus for providing remote memory access in a distributed memory multiprocessor system
US5740353A (en) * 1995-12-14 1998-04-14 International Business Machines Corporation Method and apparatus for creating a multiprocessor verification environment
US5710907A (en) * 1995-12-22 1998-01-20 Sun Microsystems, Inc. Hybrid NUMA COMA caching system and methods for selecting between the caching modes

Also Published As

Publication number Publication date
DE69721640D1 (de) 2003-06-12
EP0817062A2 (de) 1998-01-07
US6141692A (en) 2000-10-31
EP0817062B1 (de) 2003-05-07
EP0817062A3 (de) 1998-05-13

Similar Documents

Publication Publication Date Title
DE69721640T2 (de) Multiprozessor-Rechnersystem und Verfahren zur Steuerung des Verkehrsflusses
DE69724354T2 (de) Ein Mehrprozessorrechnersystem mit lokalen und globalen Adressräumen und mehreren Zugriffsmoden
DE69722512T2 (de) Mehrrechnersystem mit einem die Anzahl der Antworten enthaltenden Kohärenzprotokoll
DE69721643T2 (de) Multiprozessorsystem ausgestaltet zur effizienten Ausführung von Schreiboperationen
DE69722079T2 (de) Ein Mehrrechnersystem mit Anordnung zum Durchführen von Blockkopieroperationen
DE69724355T2 (de) Erweiterte symmetrische Multiprozessorarchitektur
DE69724353T2 (de) Mehrrechnersystem mit einem Drei-Sprung-Kommunikationsprotokoll
DE69721891T2 (de) Deterministisches Kohärenzprotokoll für verteilten Multicache-Speicher
DE102009023898B4 (de) Optimierung von gleichzeitigen Zugriffen in einem verzeichnisbasierten Kohärenzprotokoll
DE69832943T2 (de) Sequenzsteuerungsmechanismus für ein switch-basiertes Mehrprozessorsystem
DE112015004336B4 (de) Konfigurationsbasierte Auswahl eines Cachekohärenz-Protokolls
DE69729243T2 (de) Multiprozessorsystem mit Vorrichtung zur Optimierung von Spin-Lock-Operationen
DE69133257T2 (de) Vorrichtung und verfahren zur schnellen paketvermittlung
DE69734129T2 (de) Hierarchisches Datenverarbeitungssystem mit symetrischen Multiprozessoren
DE10262164B4 (de) Computersystem mit einer hierarchischen Cacheanordnung
DE69233655T2 (de) Mikroprozessorarchitektur mit der Möglichkeit zur Unterstützung mehrerer verschiedenartiger Prozessoren
DE69822534T2 (de) Gemeinsame Speicherbenutzung mit variablen Blockgrössen für symmetrische Multiporzessor-Gruppen
DE60211076T2 (de) Datenübertragung zwischen virtuellen Adressen
DE102007030116B4 (de) Snoop-Filter mit ausschließlicher Inhaberschaft
DE69727856T2 (de) Multiprozessorsystem mit Konsistenzfehler-Registrierung mit entsprechendem Verfahren
DE102009022151B4 (de) Verringern von Invalidierungstransaktionen aus einem Snoop-Filter
DE102006030879B4 (de) System zum Reduzieren der Latenzzeit von exklusiven Leseanforderungen in einem symmetrischen Multiprozessorsystem
DE10219623A1 (de) System und Verfahren zur Speicherentscheidung unter Verwendung von mehreren Warteschlangen
DE112008002019T5 (de) Auslagern von Eingabe/Ausgabe (I/O)-Virtualisierungsarbeitsgängen an einem Prozessor
DE102013201079A1 (de) Mechanismus des Weiterleitungsfortschritts für Speichervorgänge beim Vorhandensein einer Überlastung in einem System, das Belastungen durch Zustandsänderungen begünstigt

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee