-
Technisches Gebiet
-
Das Gebiet der Erfindung betrifft im Allgemeinen Computersysteme und insbesondere, aber nicht ausschließlich, das Ausführen von eingehenden Schreiboperationen von PCIe-Einrichtungen in Speicher- und Partnereinrichtungen per Dualcast.
-
Stand der Technik
-
Computersysteme setzen typischerweise eine oder mehrere Zwischenverbindungen ein, um Kommunikation zwischen Systemkomponenten, wie beispielsweise zwischen Prozessoren und einem Speicher, zu ermöglichen. Zwischenverbindungen und/oder Erweiterungsschnittstellen können auch verwendet werden, um fest eingebaute und Add-on-Einrichtungen, wie beispielsweise E-/A(Eingabe-/Ausgabe)-Einrichtungen und Erweiterungskarten und dergleichen zu unterstützen. Für viele Jahre nach der Einführung des Personalcomputers war die Hauptform einer Zwischenverbindung ein paralleler Bus. Parallelbusstrukturen wurden sowohl für interne Datenübertragungen als auch Erweiterungsbusse, wie beispielsweise ISA (Industry Standard Architecture), MCA (Micro Channel Architecture), EISA (Extended Industry Standard Architecture) und VESA Local Bus, verwendet. In den frühen 1990iger Jahren führte die Intel Corporation den PCI(Peripheral Component Interconnect)-Computerbus ein. PCI verbesserte frühere Bustechnologien nicht nur durch Erhöhen der Busgeschwindigkeit, sondern auch durch Einführen von automatischer Konfiguration und transaktionsbasierten Datenübertragungen unter Verwendung von gemeinsam genutzten Adress- und Datenleitungen.
-
Im Laufe der Zeit nahmen die Taktraten von Computerprozessoren schneller zu als die Taktraten von parallelen Bussen. Als Ergebnis wurden Arbeitsauslastungen von Computern häufiger durch Zwischenverbindungsengpässe als durch die Prozessorgeschwindigkeit beschränkt. Obwohl parallele Busse die Übertragung einer großen Menge von Daten (z. B. 32 oder sogar 64 Bits gemäß PCI-X) bei jedem Zyklus unterstützen, werden ihre Taktraten durch Zeitverschiebungsüberlegungen beschränkt, die zu einer praktischen Grenze für die maximale Busgeschwindigkeit führen. Um dieses Problem zu überwinden, wurden serielle Hochgeschwindigkeits-Zwischenverbindungen entwickelt. Beispiele für frühe serielle Zwischenverbindungen umfassen Serial ATA, USB (Universal Serial Bus), FireWire und RapidIO.
-
Eine andere serielle Standardzwischenverbindung, die weit verbreitet ist, ist PCI Express, auch PCIe genannt, die im Jahre 2004 gemäß dem Standard PCIe 1.0 eingeführt wurde. PCIe wurde entwickelt, um ältere PCI- oder PCI-X-Standards zu ersetzen und gleichzeitig Legacy-Unterstützung bereitzustellen. PCIe setzt serielle Punkt-zu-Punkt-Links anstelle einer gemeinsam genutzten Parallelbusarchitektur ein. Jeder Link unterstützt einen Punkt-zu-Punkt-Kommunikationskanal zwischen zwei PCIe-Ports unter Verwendung einer oder mehrerer Lanes, wobei jede Lane einen bidirektionalen seriellen Link umfasst. Die Lanes werden physisch unter Verwendung einer Kreuzschienen-Switch-Architektur geleitet, welche Kommunikation zwischen mehreren Einrichtungen gleichzeitig unterstützt. Infolge der ihr innewohnenden Vorteile hat PCIe PCI als die vorherrschende Zwischenverbindung in den heutigen Personalcomputern abgelöst. PCIe ist ein Industriestandard, der von der PCI-SIG (Special Interest Group) verwaltet wird.
-
Vor kurzem hat die PCI-SIG eine Standardspezifikation für PCIe-Multicast hinzugefügt. Gemäß der PCIe-Multicast-Spezifikation, die in Abschnitt 6.14 der PCI Express® Basisspezifikation Revision 3.0 Version 1.0 definiert ist, kann eine PCIe-Initiatoreinrichtung unter Verwendung einer einzigen Schreibtransaktion in mehrere PCIe-Ziele schreiben. Die PCIe-Multicast-Spezifikation definiert jedoch nicht, wie Schreiboperationen unter Verwendung einer einzigen Schreibtransaktion von einer PCIe-Initiatoreinrichtung gleichzeitig in einen Systemspeicher und in eine PCIe-Partnereinrichtung implementiert werden sollen. Außerdem fügt die PCIe-Multicast-Spezifikation Komplexitäten zu verschiedenen PCIe-Einrichtungen hinzu, die konfiguriert werden müssen, um diese zusätzliche Funktionalität zu unterstützen. Im Gegensatz dazu wäre es vorteilhaft, Dualcast in einen Systemspeicher und eine PCI-Partnereinrichtung auf eine Weise durchführen zu können, die eine minimale Auswirkung auf die an solchen Transaktionen beteiligten Instanzen hat.
-
Kurze Beschreibung der Zeichnungen
-
Die vorstehenden Aspekte und viele der dazugehörigen Vorteile dieser Erfindung werden durch Bezugnahme auf die folgende ausführliche Beschreibung in Verbindung mit den beiliegenden Zeichnungen besser verständlich, wobei sich gleiche Bezugszeichen in allen Ansichten auf gleiche Teile beziehen, sofern nicht anders angegeben.
-
1 ist eine grafische Darstellung einer generischen PCIe-Architektur;
-
2 ist eine grafische Darstellung, welche die Schichten eines PCIe-Stapels und Einzelheiten von Paketierung/Depaketierung auf jeder Schicht veranschaulicht;
-
3 ist eine Kombination eines schematischen Blocks und eines Nachrichtenflussdiagramms, welche das Ausführen einer eingehenden Speicherschreibtransaktion in einen Systemspeicher und in eine PCIe-Partnereinrichtung per Dualcast gemäß einer Ausführungsform veranschaulicht;
-
4 veranschaulicht Dualcast eines beispielhaften Eingangsschreibtransaktionsstroms;
-
5 ist eine schematische Darstellung, welche Einzelheiten eines 3-DW- und 4-DW-Speicheranforderungsheaders veranschaulicht, der mit einem 3-DW- oder 4-DW-Speicheranforderungs-Transaktionsschichtpaket assoziiert ist; und
-
6 ist ein schematisches Blockdiagramm, welches ausgewählte Komponenten einer beispielhaften Prozessor- und Plattformkonfiguration veranschaulicht, über welche Aspekte der hierin offenbarten Ausführungsformen implementiert werden können.
-
Beschreibung der Ausführungsformen
-
Es werden hierin Ausführungsformen von Verfahren und Vorrichtungen zur Unterstützung des Ausführens von eingehenden Schreiboperationen von PCIe-Einrichtungen in Speicher- und PCIe-Partnereinrichtungen per Dualcast beschrieben. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um ein umfassendes Verständnis von Ausführungsformen der Erfindung zu vermitteln. Für einen Fachmann ist jedoch zu erkennen, dass die Erfindung auch ohne eine oder mehrere der spezifischen Einzelheiten oder mit anderen Verfahren, Komponenten, Materialien usw. realisiert werden kann. In anderen Fällen werden allgemein bekannte Strukturen, Materialien oder Operationen weder dargestellt noch ausführlich beschrieben, um eine Verkomplizierung von Aspekten der Erfindung zu vermeiden.
-
Die Bezugnahme auf „eine bestimmte Ausführungsform” oder „eine beliebige Ausführungsform” bedeutet die gesamte Spezifikation hindurch, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Charakteristik, die in Verbindung mit der Ausführungsform beschrieben wird, in mindestens einer Ausführungsform der vorliegenden Erfindung enthalten ist. Demnach bezieht sich das Vorkommen der Ausdrücke „in einer bestimmten Ausführungsform” oder „in einer beliebigen Ausführungsform” an verschiedenen Stellen in der gesamten Spezifikation nicht unbedingt immer auf die gleiche Ausführungsform. Außerdem können die jeweiligen Merkmale, Strukturen oder Charakteristiken in einer oder mehreren Ausführungsformen in geeigneter Weise kombiniert werden.
-
Die hierin offenbarten Ausführungsformen betreffen Verfahren und Vorrichtungen zur Unterstützung des Ausführens von eingehenden Schreiboperationen von PCIe-Einrichtungen in Speicher- und PCIe-Partnereinrichtungen per Dualcast. Zum besseren Verständnis von Aspekten der Ausführungsformen wird die folgende kurze Erörterung einer generischen PCIe-Architektur bereitgestellt, die in 1 veranschaulicht ist.
-
Kern der PCIe-Architektur ist ein PCIe-Stammkomplex (RC) 100, der mit einem Prozessor 102 und einem Speicher 104 gekoppelt ist. Der PCIe-RC 100 ist so dargestellt, dass er drei Stammports 106-1, 106-2 und 106-3 umfasst. Der Stammport 106-1 ist über einen PCIe-Link 110 und einen PCIe-Port 112 mit einem PCIe-Endpunkt 108 verbunden. Der Stammport 106-2 ist mit einer PCIe-zu-PCI/PCI-X-Brücke 114 verbunden, die als Schnittstelle zwischen PCIe und einer Mehrzahl von PCI/PCI-X-Einrichtungen 116 verwendet wird. Der Stammport 106-3 ist über einen PCIe-Link 118 und einen PCIe-Port 120 mit einem Switch 116 verbunden. Der Switch 116 ist so dargestellt, dass er mit einem Paar von Legacy-Endpunkten 122 und 124 und einem Paar von PCIe-Endpunkten 126 und 128 verbunden ist. Diese Verbindungen werden durch die PCIe-Links 130, 132, 134 und 136 sowie die Ports 138, 140, 142, 144, 146, 148, 150 und 152 ermöglicht.
-
Ein Stammkomplex bezeichnet den Stamm einer E-/A(Eingangs-/Ausgangs)-Hierarchie, der das CPU/Speicher-Subsystem mit E/A verbindet. Wie in 1 veranschaulicht, kann ein Stammkomplex einen oder mehrere PCIe-Ports unterstützen. Jede Schnittstelle definiert einen getrennten Hierarchiebereich. Jeder Hierarchiebereich kann aus einem einzigen Endpunkt oder einer Subhierarchie bestehen, die einen oder mehrere Switch-Komponenten und Endpunkte enthält. Ein Stammkomplex kann optional ein Leiten von Partner-zu-Partner-Transaktionen zwischen Hierarchiebereichen unterstützen.
-
Endpunkt bezieht sich auf einen Funktionstyp, welcher entweder in seinem eigenen Namen oder im Namen einer anderen Nicht-PCIe-Einrichtung (einer anderen als einer PCI-Einrichtung oder Host-CPU), z. B. eines an PCIe angeschlossenen Grafikcontrollers oder eines PCIe-USB-Hostcontrollers, der Requester oder Completer einer PCIe-Transaktion sein kann. Endpunkte werden entweder als Legacy-, PCIe- oder im Stammkomplex integrierte Endpunkte klassifiziert.
-
PCIe unterstützt Punkt-zu-Punkt-Zwischenverbindung unter Verwendung von seriellen Links, die aus einer oder mehreren Lanes für jedes Senden und Empfangen bestehen. Ein PCIe-Link weist mindestens eine Lane auf – eine Lane stellt einen Satz von differenziellen Signalpaaren dar (ein Paar zum Senden, ein Paar zum Empfangen). Zum Skalieren der Bandbreite kann ein Link mehrere Lanes aggregieren, die mit xN bezeichnet werden, wobei N eine beliebige der unterstützten Linkbreiten sein kann. Zum Beispiel umfassen PCIe-Links ab der PCIe 3.0 Spezifikation Operationen für x1, x2, x4, x8, x12, x16 und x32 Lane-Breiten. Während der Hardware-Initialisierung wird jeder PCIe-Link nach einer Aushandlung von Lane-Breiten und Betriebsfrequenzen durch die beiden Agenten auf jeder Seite des Links aufgebaut.
-
Die grafische Darstellung 200 von 2 stellt Einzelheiten des PCIe-Schichtprotokolls und der TLP(Transaktionsschichtpaket)-Paketierung/-Depaketierung dar. Gemäß PCIe werden Daten zwischen zwei PCIe-Endpunkten oder -Ports, wie durch eine Einrichtung A und eine Einrichtung B dargestellt, in Paketform übertragen. Wie bereits erwähnt, umfassen PCIe-Links Punkt-zu-Punkt-Zwischenverbindungen mit einer einzigen oder mehreren Lanes. Außerdem sind die Punkt-zu-Punkt-Zwischenverbindungen in unidirektionalen Punkt-zu-Punkt-Zwischenverbindungspaaren in entgegengesetzten Richtungen konfiguriert, derart dass jedes Linkpaar bidirektionale Kommunikation unterstützt. Übertragungen gehen von einem Sender oder Transmitter ab und werden von einem Empfänger empfangen. Daten, die gesendet werden, werden über einen Sende(Tx)-Pfad gesendet, und entsprechende Daten werden über einen Empfangs(Rx)-Pfad empfangen. Die zwei Hauptklassen von Paketen, die zwischen PCIe-Einrichtungen ausgetauscht werden, sind Transaktionsschichtpakete (TLPs für engl. Transaction Lager Packets) auf der höheren Ebene und Link-Aufrechterhaltungspakete auf der niedrigen Ebene, genannt Data-Link-Schicht-Pakete (DLLPs für engl. Data Link Layer Packets). Zusammen befähigen die verschiedenen TLPs und DLLPs zwei PCIe-Einrichtungen zum zuverlässigen Durchführen von Speicher-, E-/A- und Konfigurationsraumtransaktionen und Verwenden von Nachrichten zum Auslösen von Leistungsverwaltungsereignissen, Erzeugen von Unterbrechungen, Melden von Fehlern usw.
-
Die drei unteren Schichten des PCIe-Standards umfassen eine Transaktionsschicht, eine Data-Link-Schicht und eine physikalische (PHY) Schicht. Demgemäß ist jede der Einrichtungen A und B so dargestellt, dass sie eine Transaktionsschicht (Block) 204, eine Data-Link-Schicht (Block) 206 und eine physikalische Schicht (Block) 208 umfasst. Eine Initiatoreinrichtung (z. B. Einrichtung A in diesem Beispiel) erzeugt Daten 210, die an eine Empfängereinrichtung (z. B. Einrichtung B) gesendet werden sollen und dann von den PCIe-Schichten paketiert und über den Link gesendet werden. Im Kontext einer PCIe-Transaktion wird er Initiator Requester genannt, und der Empfänger wird Completer genannt.
-
Auf der Transaktionsschicht werden die Daten zu einem oder mehreren Paketen paketiert, die ein Paketformat 212 aufweisen, das einen Header (HDR), die Paketnutzdaten (Data) und einen Digest umfasst. Auf der Data-Link-Schicht wird eine Reihenfolgenummer (SeqNum) zum Anfang des Pakets hinzugefügt, während gleichzeitig ein CRC-Wert an das Ende angehängt wird, um ein Paketformat 214 zu bilden. Das Paketformat wird auf der physikalischen Schicht durch Hinzufügen von STP- und Endkontroll(K)-Zeichen weiter erweitert, um ein Paketformat 216 zu bilden. Dann wird das Paket über den Link gesendet, um vom Empfänger (Einrichtung B) unter Verwendung der umgekehrten Reihenfolge verarbeitet zu werden, um schließlich die Originaldaten 210 zu ergeben.
-
3 stellt eine beispielhafte Implementierung des Ausführens von eingehenden Speicherschreiboperationen per Dualcast gemäß einer Ausführungsform dar. Die Kernfunktionalität zum Unterstützen von Dualcast wird über einen PCIe-Dualcast-Logikblock 300 in einem PCIe-Stammkomplex 302 implementiert. Der PCIe-Stammkomplex ist so dargestellt, dass er zwei Stammports 304 und 306 umfasst, mit welchen jeweilige PCIe-Einrichtungen 308 und 310 (auch als PCIe-Einrichtungen 1 und 2 beschriftet und bezeichnet) über PCIe-Links 1 und 2 in Kommunikation verbunden sind. Die grafische Darstellung von 3 umfasst ferner einen Systemagenten 312 und einen Systemspeicher 314.
-
Die PCIe-Einrichtung 308 erzeugt ein Transaktionsschichtpaket (TLP) 316, das eine eingehende (System)speicherschreiboperation umfasst, die einen PCIe-Header 318 und Daten 320 umfasst, die zwei Cache-Zeilen umfassen. Das TLP 316 wird von der PCIe-Einrichtung 308 über den PCIe-Link 1 an den PCIe-Stammkomplex 302 weitergeleitet, wo es am Stammport 304 empfangen und zum PCIe-Dualcast-Logikblock 300 weitergeleitet wird. In Reaktion auf den Empfang des TLPs 316 überprüft der PCIe-Dualcast-Logikblock 300 den PCIe-Header 318 des Pakets und identifiziert es basierend auf einem entsprechenden Wert in einem Typ-Feld (siehe 5 für weitere Einzelheiten von TLP-Header-Feldern) als eine eingehende Schreiboperation in den Speicher.
-
Gemäß Aspekten der hierin offenbarten Ausführungsformen werden Operationen zum Durchführen von Dualcast von selektiven eingehenden PCIe-Speicherschreiboperationen, die an Systemspeicheradressen innerhalb entsprechender Adressfenster (z. B. Bereichen von Adressen) adressiert sind, durch den PCIe-Dualcast-Logikblock 300 ermöglicht. In einer Ausführungsform wird eine Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen eingesetzt, um zu bestimmen: a) ob Dualcast-Operationen anwendbar sind; b) wenn dies der Fall ist, welche PCIe-Einrichtung der Dualcast(Partner)-Zieleinrichtung entspricht; und c) wie Adressübersetzung implementiert werden soll. Wie veranschaulicht, umfasst die Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen mehrere Adressbereiche, die jeweilige Adressfenster 324 umfassen. Im Allgemeinen können die Adressbereiche unter Verwendung von Volladressen (worunter z. B. 32-Bit- oder 64-Bit-Volladressen zu verstehen sind, die den Bereich für jede Adresse definieren), unter Verwendung einer Basisadresse in Kombination mit Adress-Offsets oder unter Verwendung eines anderen Schemas explizit definiert werden, über welches Adressfenster spezifiziert und abgeleitet werden können. Zum Beispiel setzt die beispielhafte Zuordnung, die durch die Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen veranschaulicht ist, eine Basisadresse plus Adressbereiche ein, die von der Basisadresse versetzt (offset) sind. In einer Ausführungsform weist jeder Offset-Adressbereich eine feste Größe auf, und der Offset-Adressbereich ist einfach ein Vielfaches eines ganzzahligen Multiplikators der festen Größe. Zum Beispiel weisen die beiden oberen Adressbereiche in der Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen eine Größe von 1000 auf und sind numerisch benachbart. Wie durch den letzten Bereich n000–n999 veranschaulicht, könnten diese Bereiche einfach durch eine ganze Zahl n definiert werden. Um den Adressbereich abzuleiten, würde die ganze Zahl n mit der nominalen Adressfenstergröße multipliziert. Außerdem könnten die gleiche ganze Zahl n eine entsprechende PCIe-Partnereinrichtung definieren, für welche das Adressfenster gilt, obwohl dies nicht erforderlich ist, da Zuordnungen zwischen Adressfenstern und PCIe-Partnereinrichtungen explizit definiert werden können. Zusätzlich zu Adressfenstern fester Größe können auch Adressfenster veränderlicher Größe implementiert werden.
-
Im veranschaulichten Beispiel von 3 umfasst der PCIe-Header 316 Adressfelddaten (nicht dargestellt), welche anzeigen, dass die Startadresse für die Cache-Zeilen, welche die Daten 320 umfassen, im Bereich der Basisadresse + 2000–2999 ist. Dies führt zu einem Adress-„Treffer” für die Liste 322 von eingehenden Dualcast-Schreiboperationen, so dass Dualcast der eingehenden Speicherschreiboperation durchzuführen ist. In Fällen, in welchen die Adresse nicht innerhalb eines Dualcast-Adressfensters fällt, das für eine PCIe-Partnereinrichtung definiert ist, wird die Speicherschreibtransaktion in der herkömmlichen Weise als Unicast-Transaktion abgewickelt.
-
Gemäß einer Ausführungsform erzeugt das Ausführen einer eingehenden Speicherschreiboperation per Dualcast eine Replik eines Original-TLPs entsprechend der eingehenden Speicherschreiboperation mit einem Header, der eine E-/A-Schreibtransaktion spezifiziert, die an die PCIe-Partnereinrichtung adressiert ist, die mit der Treffer-Adresse assoziiert ist. Dies ist in 3 als TLP 316a veranschaulicht, wobei 'a' zu TLP 316 hinzugefügt ist, um auf die Ähnlichkeit zwischen den beiden Paketen hinzuweisen. Es ist zu erwähnen, dass TLP 316 und TLP 316a nicht vollkommen identisch sind, da identische Pakete identische Header haben und demnach ans gleiche Ziel (wie durch die Header-Adressinformationen definiert) weitergeleitet würden. Stattdessen sind Daten in anwendbaren Feldern des Paket-Headers 318a von TLP 316a so abgeändert, dass TLP 316a zur entsprechenden PCIe-Einrichtung geleitet wird, wie durch die Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen definiert.
-
Zurück zur Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen zeigt die Zuordnung für den PCIe-Paket-Header an, dass er einer eingehenden Speicherschreiboperation mit einer Startadresse im Bereich der Basisadresse + 2000–2999 entspricht, der die PCIe-Zieleinrichtung als Einrichtung 2 (d. h. PCIe-Einrichtung 310) identifiziert. Demgemäß werden Daten im PCIe-Header 318a erzeugt, um eine E-/A-Schreibanforderung zur PCIe-Einrichtung 310 zuzuordnen.
-
In einer Ausführungsform wird ein 32-Bit-Adressraum für PCIe-E-/A-Einrichtungen verwendet, während ein 64-Bit-Adressraum für den Systemspeicher verwendet wird. Demgemäß wird ein Mechanismus zum Übersetzen der 64-Bit-Speicheradresse (entsprechend der Cache-Zeilenstartadresse) in eine 32-Bit-Adresse eingesetzt, die dem Speicher in einer anwendbaren PCIe-Partnerzieleinrichtung zugeordnet wird. In einer Ausführungsform werden die Basisadressund Offset-Adressbereiche derart konfiguriert, dass die Adressfenster für die PCIe-Zieleinrichtungen den Offsets entsprechen, die von den entsprechenden Speicheradressen im Systemspeicher verwendet werden. Zum Beispiel weist das Betriebssystem einer Plattform typischerweise Abschnitte des Systemspeichers der Plattform für jede von mehreren PCIe-Einrichtungen zu, die während des Systemstarts aufgezählt werden. Die Größe der Speicherzuweisung für eine bestimmte PCIe-Einrichtung hängt im Allgemeinen vom jeweiligen Typ der PCIe-Einrichtung ab, wobei einigen Klassen von Einrichtungen größere Blöcke als anderen zugewiesen werden.
-
Ein Beispiel dieses Adressierschemas ist in 5 veranschaulicht. Der obere TLP-Header (4-DW-Header 500) in der grafischen Darstellung zeigt Einzelheiten von Feldern für einen 64-Bit-Speicheranforderungsheader, der vier Doppelwörter (4 DW) einsetzt. Der untere TLP-Header (3-DW-Header 502) in der grafischen Darstellung zeigt Einzelheiten von Feldern für einen 32-Bit-Speicheranforderungsheader, der drei Doppelwörter (3 DW) einsetzt. Ein ähnliches 3-DW-Adressierschema wird für PCIe-E-/A-Anforderungen verwendet, wobei der Unterschied zwischen einer Speicheranforderung und einer E-/A-Anforderung durch den Wert im Typ-Feld definiert wird. In einer Ausführungsform spezifiziert die Adresse, die im Adressfeld [63:32] beginnend bei Byte 8 des 4-DW-Headers 500 spezifiziert ist, die Basisadresse der eingehenden Speicherschreibanforderung. Indessen sind Adressen, die in den Adressfeldern [31:2] sowohl des 4-DW-Headers 500 als auch des 3-DW-Headers 502 spezifiziert sind, identisch und definieren jeweils die Offset-Adresse der Schreiboperation und die 32-Bit-Adresse der E-/A-Schreiboperation für die PCIe-Zieleinrichtung.
-
Zurück zu 3 werden vom PCIe-Dualcast-Logikblock 300 in Verbindung mit dem Bestimmen von anwendbaren Adressen und der PCIe-Zieleinrichtung Operationen zum Erzeugen von Dualcast-TLPs durchgeführt. Das Original-TLP 316 ist eine eingehende Speicherschreiboperation, und demgemäß wird dieses TLP auf die herkömmliche Weise (vom Standpunkt von Plattformkomponenten zum Ermöglichen solcher Transaktionen) verarbeitet. Demgemäß wird das Original-TLP 316 (oder eine Kopie von TLP 316) vom PCIe-Dualcast-Logikblock 300 an den Systemagenten 312 weitergeleitet. Der Systemagent 312 veranschaulicht einen Systemspeicheragenten und/oder andere Systeminstanzen, der/die (nach Bedarf) zum Übersetzen von eingehenden Speicherschreibanforderungen von PCIe-Einrichtungen, die über PCI-Zwischenverbindungen unter Verwendung des PCIe-Protokolls gesendet werden, in ein anwendbares Protokoll zum Unterstützen von entsprechenden Systemspeicherschreibtransaktionen verwendet wird/werden.
-
In Abhängigkeit von der jeweiligen Architektur der Plattform und/oder der CPU (d. h. des Prozessors) kann auf den Systemspeicher unter Verwendung der PCIe direkt zugegriffen werden oder nicht. Zum Beispiel unterstützen einige Architekturen das DMI(Direct Memory Interface)-Protokoll, welches PCIe einsetzt, aber ein Zwischentransportprotokoll zwischen dem PCIe-Stammkomplex und einem DMI-Agenten verwenden kann, der wiederum mit einer Speichersteuerung kommuniziert, welche die Interaktion mit dem Systemspeicher zum Unterstützen von Speichertransaktionen steuert. Üblicher ist es, dass ein anderer Typ von Zwischenverbindung und/oder Protokoll zum Abwickeln von Speichertransaktionen verwendet wird, wie beispielsweise die Architektur, die im Folgenden unter Bezugnahme auf 6 beschrieben wird. Ein wichtiger Grund für die Verwendung eines anderen Protokolls für Speichertransaktionen ist die Notwendigkeit zur Unterstützung von Kohärenz. Daher wird in modernen Prozessorarchitekturen ein kohärentes Protokoll, wie beispielsweise QuickPath Interconnect® (QPI) von der Intel® Corporation, verwendet. Es kann sogar Implementierungen geben, bei welchen ein kohärentes Protokoll, wie beispielsweise QPI, über PCIe-Zwischenverbindungsverdrahtung implementiert ist. In allen diesen Fällen müssen die TLPs an einem bestimmten Punkt neu formatiert werden, um ein anderes Protokoll als PCIe zu unterstützen, um die Durchführung der Speichertransaktion zu ermöglichen. Obwohl in 3 der Einfachheit und Klarheit halber als Einzelblock dargestellt, stellt der Systemagent 312 demgemäß eine einzelne oder eine Kombination von Schnittstellen und/oder Agenten zwischen dem PCIe-Stammkomplex 302 und dem Systemspeicher 314 zum Ausführen dieser Funktion dar.
-
Für Architekturen, die ein anderes Protokoll für Speichertransaktionen als PCIe einsetzen, werden der Header und die Nutzdaten des TLPs 316 gemäß dem Speichertransaktionsprotokoll neu formatiert, um ein Speichertransaktionspaket 326 zu bilden, das einen Speichertransaktionsheader 328 umfasst. Die Transaktionsnutzdaten (z. B. die Daten 320, die zwei Cache-Zeilen umfassen) bleiben indessen gleich. Das Endergebnis der ersten Hälfte der PCIe-Dualcast-Operation ist, dass die Nutzdaten (z. B. Cache-Zeilendaten) eines eingehenden Speicherschreib-TLPs (316), das von einer PCIe-Einrichtung (308) abgeht, an einer durch den PCIe-Header (318) des TLPs definierten Adresse in den Systemspeicher geschrieben werden.
-
Die zweite Hälfte der PCIe-Dualcast-Operation wird eingesetzt, um ein TLP mit replizierten Daten zu erzeugen, das an eine PCIe-Partnereinrichtung gerichtet wird, die in diesem Fall die PCIe-Einrichtung 310 ist. Demgemäß erzeugt der PCIe-Dualcast-Logikblock 300 ein TLP 316a mit einem PCIe-Header 318a, der eine neu zugeordnete Adresse enthält, die aus der Liste 322 von Adressen für eingehende Dualcast-Schreiboperationen abgeleitet ist, und die innerhalb des Adressfensters ist, das für die PCIe-Einrichtung 2 (d. h. PCIe-Einrichtung 310) definiert ist. Das TLP 316a wird dann über den Stammport 306 über den PCIe-Link 2 zur PCIe-Einrichtung 310 geleitet und an der PCIe-Einrichtung 310 in der herkömmlichen Weise behandelt, die zum Behandeln von E-/A-Schreib-TLPs verwendet wird. Wie dargestellt, ist das Ergebnis, dass die Daten 320, welche die Cache-Zeilen-Originaldaten umfassen, in einen entsprechenden Abschnitt des Einrichtungsspeichers 330 der PCIe-Einrichtung 310 geschrieben werden.
-
4 stellt ein Beispiel einer Eingangsschreibtransaktion dar, die zwei TLPs, 400 und 402, umfasst, die in einer ähnlichen Weise verarbeitet werden wie der, die zuvor für TLP 316 beschrieben wurde. TLP 400 umfasst einen PCIe-Header HDR1 und Daten, welche Cache-Zeilen CL1A und CL1B umfassen, während TLP 402 einen PCIe-Header HDR2 und Daten umfasst, welche Cache-Zeilen CL2A und CL2B umfassen. Wenn TLP 400 am PCIe-Dualcast-Logikblock 300 empfangen und verarbeitet wird, wird eine Kopie von TLP 400 (oder einfach die Instanz des Original-TLPs 400) mit Daten, welche die Cache-Zeilen CL1A und CL1B umfassen, an den Systemagenten 312 weitergeleitet, welcher jegliche anwendbare Neuformatierung ermöglicht, um eine Speicherschreibtransaktion zu erzeugen, um die Cache-Zeilen CL1A und CL1B an der in HDR1 spezifizierten Speicheradresse in den Systemspeicher 314 zu schreiben. Gleichzeitig (d. h. während des im Wesentlichen gleichen Zeitrahmens) wird ein zweites TLP mit einem modifizierten Header HDR1a, welcher der Adresse der PCIe-Einrichtung 310 zugeordnet ist, und mit Daten, welche die Cache-Zeilen CL1A und CL1B umfassen, aus TLP 400 erzeugt und über den Stammport 306 und den PCIe-Link 2 an die PCIe-Einrichtung 310 gesendet. Eine ähnliche Verarbeitung wird für TLP 402 durchgeführt, wie veranschaulicht, mit der Ausnahme, dass in diesem Fall die anwendbaren Header HDR2 und HDR2a sind, und die anwendbaren Cache-Zeilendaten CL2A und CL2B sind. Darüber hinaus würde eine ähnliche Verarbeitung für nachfolgende TPLs in einem typischen Eingangsschreibtransaktionsstrom implementiert, der zum Schreiben in mehrere Cache-Zeilen oder einen Block des Systemspeichers verwendet wird.
-
Im Allgemeinen kann der PCIe-Dualcast-Logikblock 322 in einem PCIe-Stammkomplex in verschiedenen Typen von Plattformarchitekturen und/oder Prozessoren implementiert werden. Historisch wurden PCIe-Stammkomplexe in einen E-/A-Chipsatz eingebaut, der außerhalb einer CPU war. Heutige Prozessorarchitekturen umfassen jedoch typischerweise Systemchip(SoC)-Architekturen, welche chipintegrierte Logik und Schaltungsanordnung zum Implementieren eines PCIe-Stammkomplexes und entsprechender Schnittstellen und Agenten umfassen. Ein Beispiel einer Plattformarchitektur, die einen SoC-Prozessor umfasst, der einen PCIe-Stammkomplex 302 implementiert, der einen PCIe-Dualcast-Logikblock 322 umfasst, ist in 6 dargestellt.
-
Die Plattformarchitektur 600 stellt einen 8-Kern-Prozessor 601 dar, welcher Prozessorkerne 602 (bezeichnet als Core0 bis Core7) umfasst, die über Knoten 608 und eine Ring-Zwischenverbindung 610 mit jeweiligen Zwischenspeicherkästchen 604 (bezeichnet als Cbo 0 bis 7, auch CBOXes (für engl. caching boxes) genannt) und Caches der letzten Ebene (LLCs für engl. last level caches) 606 (bezeichnet als LLC0 bis LLC7) gekoppelt sind. Über entsprechende Knoten sind an die Ring-Zwischenverbindung 610 auch ein QPI-Agent 612, ein integrierter E-/A(IIO für engl. Integrated Input/Output)-Block 614 und ein Home-Agent 616 angeschlossen. Der Home-Agent 616 ist mit einer Speichersteuerung 618 gekoppelt, die zum Zugreifen auf den Systemspeicher 314 über einen oder mehrere Speicherkanäle 620 verwendet wird. Der QPI-Agent 612 ist so dargestellt, dass er mit einem Paar von QPI-Links 622 und 624 gekoppelt ist, die es dem Prozessor 601 ermöglichen, über QPI mit anderen Plattformkomponenten (nicht dargestellt) zu kommunizieren.
-
Im Allgemeinen sind die Komponenten des Prozessors 801 über verschiedene Typen von Zwischenverbindungen miteinander verbunden, die der Einfachheit halber als zweispitzige Pfeile dargestellt sind. Wie bereits erwähnt, setzt der Prozessor 801 in einer Ausführungsform eine Ring-Zwischenverbindung 810 ein. Optional können die Prozessorkerne und zugehörigen Komponenten und Agenten über eine Zwischenverbindungs-Fabric (z. B. eine vermaschte 2D-Zwischenverbindung) verbunden sein. Die Zwischenverbindungen können Punkt-zu-Punkt-Zwischenverbindungen (z. B. QPI, PCIe, chipintegriertes Intel System Fabric (IOSF), Open Core Protocol (OCP) usw.) sowie Busse und andere Typen von Zwischenverbindungsstrukturen umfassen.
-
Der IIO-Block in SoC-Prozessoren ist so konfiguriert, dass er E-/A-Schnittstellenoperationen ähnlich jenen ausführt, die von einem E-/A-Chip oder -Chipsatz in einer herkömmlichen Northbridge/Southbridge-Plattformarchitektur ausgeführt werden. Statt dass diese Funktionen jedoch durch einen separaten Chip oder Chipsatz ausgeführt werden, der über eine externe Zwischenverbindung mit einem Prozessor gekoppelt ist, werden sie nun durch Schaltungsanordnung und Logik implementiert, die in die Prozessorpackung (d. h. den SoC) selbst eingebettet ist. Neben anderen Vorteilen unterstützt dies höhere Bandbreiten, als bei herkömmlichen externen Zwischenverbindungen verfügbar sind.
-
Ausgewählte Funktionsblöcke sind für den IIO-Block 614 in 6 dargestellt. Diese umfassen eine/n DMI-Agenten bzw. -Schnittstelle 626, der/die einen Port 628 umfasst, der mit einem DMI-x4-Link 630 gekoppelt ist. Der IIO-Block umfasst einen PCIe-Agenten 631, der mit einem PCIe-Stammkomplex 302 gekoppelt ist, der einen PCIe-Dualcast-Stammlogikblock 300 umfasst, und PCIe-Stammports 630, 632 und 634. Der PCIe-Stammport 630 stellt eine Schnittstelle zu einem PCIe-x8-Link 636 bereit. Die PCIe-Stammports 632 und 634 stellen PCIe-Schnittstellen zu PCIe-x16-Links 638 und 640 bereit, die jeweils mit PCIe-Ports 642 und 644 an PCIe-Einrichtungen 646 und 648 verbunden sind.
-
Gemäß der Plattformarchitektur 600 wird eine eingehende Speicherschreiboperation, die für eine Cache-Zeile im Systemspeicher 314 bestimmt ist, auf die folgende Art und Weise abgewickelt. Die eingehende Speicherschreiboperation wird als ein TLP an einem der PCIe-Stammports 630, 632 oder 634 empfangen und an den PCIe-Dualcast-Logikblock 300 weitergeleitet. In Reaktion auf ein Bestimmen, dass das TLP eine eingehende Speicherschreiboperation ist, die an eine Cache-Zeile mit einer Adresse innerhalb eines Adressraums des Systemspeichers 312 adressiert ist, wird eine kohärente QPI-Speicherschreibtransaktion zum Schreiben in eine Cache-Zeile im Systemspeicher 314 durch den PCI-Agenten 321 erzeugt und auf dem Ring 610 angeordnet, wo sie zum Home-Agenten 616 geleitet wird. Der Home-Agent 616 enthält Cache-Zuordnungsinformationen, die eine aktuelle Cache-Ebene und einen aktuellen Cache für jede Cache-Zeile mit einer Adresse identifizieren, welche dem Adressraum des Systemspeichers 314 zugeordnet ist, derart dass die eingehenden Speicherschreibdaten in den entsprechenden Speicherort geschrieben werden. Zum Beispiel kann eine gültige Kopie einer Cache-Zeile im Systemspeicher angeordnet oder könnte in einem LLC oder in einem L1- oder L2-Cache zwischengespeichert werden, der mit einem Kern assoziiert ist. Zusätzlich zum Home-Agenten 616 kann der Prozessor 601 auch andere Zwischenspeicher-Agenten (in 6 nicht dargestellt) einsetzen, um Cache-Kohärenzoperationen zu ermöglichen. Demgemäß werden der Speicherort einer gültigen Kopie und der Zustand der Cache-Zeile durch den Home-Agenten 616 und/oder andere Zwischenspeicheragenten unter Verwendung von anwendbaren Kohärenznachrichten entsprechend dem QPI-Protokoll, wie beispielsweise Speicherschnüffelnachrichten, bestimmt. Das Endergebnis ist, dass die gültige Kopie der Cache-Zeile aktualisiert wird und, wenn die Aktualisierung der Cache-Zeile zu einer modifizierten Cache-Zeile führt, eine Kopie der modifizierten Cache-Zeile in den Systemspeicher geschrieben wird.
-
Wie bereits erwähnt, wird viel von der Funktionalität zum Ermöglichen des Ausführens von eingehenden Schreiboperationen in einen Speicher per Dualcast durch den PCIe-Dualcast-Logikblock 300 implementiert. Typischerweise würde diese Funktionalität unter Verwendung von eingebetteter Logik implementiert, die einem Funktionsblock des PCIe-Stammkomplexes oder dergleichen in einer integrierten Schaltung oder einem SoC, wie beispielsweise dem Prozessor 601, entspricht. Techniken zum Einbetten von Logik in Funktionsblöcke auf Prozessoren und dergleichen sind auf dem Fachgebiet der Prozessoren allgemein bekannt, weshalb zusätzliche Einzelheiten dazu hierin nicht bereitgestellt werden.
-
Gemäß verschiedenen Ausführungsformen können die ersten und zweiten PCIe-Einrichtungen (das heißt, die Ursprungseinrichtung der eingehenden Systemspeicherschreiboperation und die Empfangseinrichtung der Dualcast-Schreibanforderung) Einrichtungen umfassen, für welche im Speicher zugeordneter E-/A-Raum verwendet wird. Zum Beispiel können die Einrichtungen ein Paar von Netzschnittstellensteuerungen (NICs für engl. Network Interface Controllers), Speichersteuerungen oder Infiniband-Host-Adapter umfassen.
-
Die hierin offenbarten Ausführungsformen von PCIe-Dualcast stellen bedeutende Vorteile gegenüber bestehenden Techniken bereit. Insbesondere reduziert die Technik PCIe-Eingangsbandbreite. Gemäß dem PCIe-Dualcast-Ansatz wird eine einzelne Speicherschreiboperation als eine eingehende Transaktion empfangen, und der Stammkomplex repliziert diese Schreibdaten in zwei Orte: in das Originalziel (den Speicher) und in eine Partnereinrichtung. Gemäß dem aktuellen Ansatz würde die PCIe-Einrichtung die Schreibdaten zweimal replizieren müssen, was die Bandbreite verdoppelt. Zum Beispiel würde eine Einrichtung unter Verwendung von Dualcast 5 GB/s PCIe-Bandbreite benötigen, während der herkömmliche Ansatz 10 GB/s benötigen würde.
-
Obwohl einige Ausführungsformen in Bezug auf bestimmte Implementierungen beschrieben wurden, sind gemäß einigen Ausführungsformen andere Implementierungen möglich. Außerdem muss die Anordnung und/oder die Reihenfolge von Elementen oder anderen Merkmalen, die in den Zeichnungen veranschaulicht sind und/oder hierin beschrieben werden, nicht in der konkret dargestellten und beschriebenen Art und Weise angeordnet sein. Gemäß einigen Ausführungsformen sind viele andere Anordnungen möglich. Die Dualcast-Technik ist außerdem transparent für die PCIe-Einrichtungen, was bedeutet, dass die Technik ohne Erweiterung von bestehenden PCIe-Einrichtungen oder ihre Einrichtungstreiber implementiert werden kann (es ist zu erwähnen, dass der PCIe-Stammkomplex selbst erweitert wird, um Dualcast zu unterstützen). Dies steht in krassem Gegensatz zur vorgeschlagenen PCIe-Multicast-Technik, die eine Modifikation einer oder mehrerer der PCIe-Einrichtungen und Treiber erfordert.
-
In den Figuren hierin können Elemente in einigen Fällen jeweils das gleiche Bezugszeichen oder ein verschiedenes Bezugszeichen aufweisen, um darauf hinzuweisen, dass die dargestellten Elemente ähnlich und/oder verschieden sein könnten. Ein Element kann jedoch flexibel genug sein, um verschiedene Implementierungen zu haben und mit einigen oder allen der hierin dargestellten oder beschriebenen Architekturen zusammenzuwirken. Die verschiedenen Elemente, die in den Figuren dargestellt sind, können gleich oder verschieden sein. Welches Element als ein erstes Element und welches als ein zweites Element bezeichnet wird, ist willkürlich.
-
In der Beschreibung und/oder den Ansprüchen können die Begriffe „gekoppelt” und „verbunden” zusammen mit ihren Ableitungen verwendet werden. Es versteht sich von selbst, dass diese Begriffe nicht als Synonyme zueinander gedacht sind. Vielmehr kann in bestimmten Ausführungsformen „verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt zueinander stehen. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt stehen. „Gekoppelt” kann jedoch auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt zueinander stehen, aber dennoch zusammenwirken und/oder miteinander interagieren.
-
Ein Algorithmus wird hierin und im Allgemeinen als eine selbständige Folge von Handlungen oder Operationen angesehen, die zu einem gewünschten Ergebnis führen. Diese umfassen physikalische Handhabung von physikalischen Größen. Üblicherweise, wenn auch nicht notwendigerweise, können die Größen die Form von elektrischen oder magnetischen Signalen annehmen, die gespeichert, übertragen, kombiniert, verglichen oder anderweitig gehandhabt werden können. Es hat sich manchmal als praktisch erwiesen, grundsätzlich aus Gründen des allgemeinen Gebrauchs, sich auf diese Signale als Bits, Werte, Elemente, Symbole, Zeichen, Terme, Zahlen oder dergleichen zu beziehen. Es versteht sich jedoch von selbst, dass alle diese und ähnliche Ausdrücke mit den entsprechenden physikalischen Größen zu assoziieren und lediglich praktische Bezeichnungen sind, die auf diese Größen angewendet werden.
-
Einige Ausführungsformen können in einer von Hardware, Firmware und Software oder einer Kombination davon implementiert sein. Einige Ausführungsformen können außerdem als Anweisungen implementiert sein, die auf einem maschinenlesbaren Medium gespeichert sind und die von einer Computerplattform ausgelesen und ausgeführt werden können, um die hierin beschriebenen Operationen auszuführen. Ein maschinenlesbares Medium kann jeden Mechanismus zum Speichern oder Senden von Informationen in einer Form umfassen, die von einer Maschine (z. B. einem Computer) gelesen werden kann. Zum Beispiel kann ein maschinenlesbares Medium Festwertspeicher (ROM für engl. read only memory); Direktzugriffsspeicher (RAM für engl. random access memory); Magnetplatten-Speichermedien; ein optisches Speichermedium; Flash-Speichereinrichtungen usw. umfassen.
-
Eine Ausführungsform ist eine Implementierung oder ein Beispiel der Erfindungen. Die Bezugnahme auf „eine bestimmte Ausführungsform”, „eine beliebige Ausführungsform”, „einige Ausführungsformen” oder „andere Ausführungsformen” in der Spezifikation bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder eine bestimmte Charakteristik, die in Verbindung mit den Ausführungsformen beschrieben wird, in mindestens einigen Ausführungsformen, aber nicht unbedingt in allen Ausführungsformen der Erfindungen enthalten ist. Die verschiedentlich auftretenden Begriffe „eine beliebige Ausführungsform”, „eine bestimmte Ausführung” oder „einige Ausführungsformen” beziehen sich nicht unbedingt alle auf die gleichen Ausführungsformen.
-
Es müssen nicht alle der hierin beschriebenen und dargestellten Komponenten, Merkmale, Strukturen, Charakteristiken usw. in einer bestimmten Ausführungsform oder bestimmten Ausführungsformen enthalten sein. Wenn die Spezifikation angibt, dass Komponenten, Merkmale, Strukturen oder Charakteristiken enthalten sein „mögen”, „könnten” oder „können”, müssen diese bestimmten Komponenten, Merkmale, Strukturen oder Charakteristiken nicht enthalten sein. Wenn die Spezifikation oder ein Anspruch sich auf „ein” Element bezieht, bedeutet dies nicht, dass nur eines des Elements vorhanden ist. Wenn die Spezifikation oder ein Anspruch sich auf „ein zusätzliches” Element bezieht, schließt dies nicht aus, dass mehr als eines des zusätzlichen Elements vorhanden ist.
-
Die vorstehende Beschreibung von beispielhaften Ausführungsformen der Erfindung, einschließlich der Beschreibung in der Zusammenfassung, will nicht erschöpfend sein oder die Erfindung auf die konkreten offenbarten Formen beschränken. Obwohl hierin spezifische Ausführungsformen der Erfindung und Beispiele dafür zu Veranschaulichungszwecken beschrieben werden, sind verschiedene gleichwertige Modifikationen innerhalb des Schutzbereichs der Erfindung möglich, wie für die Fachleute zu erkennen ist.
-
Diese Modifikationen können an der Erfindung angesichts der zuvor ausführlich dargelegten Beschreibung vorgenommen werden. Die in den folgenden Ansprüchen verwendeten Begriffe sollten nicht dahingehend ausgelegt werden, dass sie die Erfindung auf die spezifischen Ausführungsformen beschränken, die in der Spezifikation und den Zeichnungen offenbart werden. Vielmehr soll der Schutzbereich der Erfindung vollkommen durch die folgenden Ansprüche bestimmt werden, welche gemäß den festgelegten Anspruchsauslegungslehren auszulegen sind.