-
Die
meisten der heutigen verteilten Systeme benutzen eine Technologie
mit geteiltem Bus z. B. Peripheriekomponenten-Verbindungskarten (PCI, Peripheral Component
Interconnect), um Computer mit Eingabe-/Ausgabemodulen (I/O-Module)
zu verbinden, zum Beispiel Video, Grafik, Ethernet, Kleincomputersystem-Schnittstellen
(Small Computer System Interface, SCSI). Für diese verteilten Systeme
gibt es eine praktische Grenze für
die Anzahl der I/O-Module, die mit dem Computer über den geteilten Bus verbunden
werden können.
Es gibt auch eine Grenze, wie weit die I/O-Module von dem Computer
entfernt sein können.
Darüber hinaus
müssen
alle Verbindungen zwischen dem Prozessor-/Speicherkomplex des Computers
und den I/O-Modulen im Konkurrenzbetrieb durch einen einzigen Punkt
laufen, dem geteilten Bus. Unter anderen setzen alle diese Faktoren
Grenzen für
die Skalierbarkeit, Zuverlässigkeit,
Flexibilität
und Leistung des Systems. Um sich diesem Problem anzunehmen, hat
eine Gruppe von Führern
in der Computerindustrie kürzlich
eine Eingabe-/Ausgabe-Architektur
vorgeschlagen, die als InfinibandSM bezeichnet
wird, was ein SystemBereichsnetzwerk definiert, um unterschiedliche
Komponenten von einem oder mehreren Computersystem(en) zu verbinden.
Beispiele für
Systembereichsnetzwerke sind in der Computerwelt bekannt einschließlich des „High Performance
Parallel Interface" (HIPPI)
und „Fiber
Channel" Technologien,
die dazu benutzt werden, um massiv parallele Prozessoren zu skalierbaren
Speicherservern und Datentresoren zu verbinden. Das US Patent 6,044,415,
erteilt an Futral et al. offenbart eine virtuelle Verbindung zwischen
einem Anwendungsprogramm und einem Eingabe-/Ausgabegerät, das als
Systembereichsnetzwerk implementiert ist.
-
Das
InfinibandSM-Systembereichsnetzwerk besteht
aus Knotenpunkten, die über
eine kanalbasierte geschaltete Struktur kommunizieren. Jeder der
Knotenpunkte könnte
ein Prozessorknotenpunkt, ein Eingabe-/Ausgabe-Untersystem, ein
Speicher-Untersystem oder ein Router sein, der zu einem anderen
Netzwerk verbindet. Die geschaltete Struktur ist aus einer Ansammlung
von Schaltern (Switchern), Routern und Verbindungen hergestellt,
die einen Satz von Kanaladaptern verbinden. Die Kanaladapter bilden
eine Schnittstelle zwischen der geschalteten Struktur und den Knotenpunkten.
Das InfinibandSM-Systembereichsnetzwerk
kann in Unternetze aufgeteilt werden, die untereinander durch Router
verbunden sind. Auf dieser Ebene ist jedes InfinibandSM-Unternetz
im Wesentlichen ein geschaltetes Netzwerk. Im Allgemeinen werden
geschaltete Netzwerke wegen ihrer Fähigkeit, zahlreiche Hosts mit
voller Geschwindigkeit zu unterstützen, als besser skalierbar
angesehen, das heißt
besser dazu fähig,
zu einer großen
Anzahl von Knotenpunkten zu wachsen, als Netzwerke mit geteilten
Medien. Von InfinibandSM wird erwartet eine
skalierbare Leistung von 500 Mbytes pro Sekunde (4 Gbits pro Sekunde)
bis 6 Gbytes pro Sekunde (48 Gbits pro Sekunde) pro Verbindung zur
Verfügung
zu stellen.
-
Bei
InfinibandSM hat ein Client-Prozess die
Fähigkeit,
einen Satz von Anweisungen, den die Hardware ausführt, in
einer Arbeitsfolge zu platzieren. Ein Client ist das anfordernde
Programm in einer Client/Server-Beziehung und ein Prozess ist eine
Anwendung von einem Programm, die auf einem Computer läuft. Jeder
Prozess auf einem Computer läuft
weitgehend unabhängig
von anderen Prozessen, und das Betriebssystem ist dafür verantwortlich,
sicherzustellen, dass Ressourcen, wie zum Beispiel der Adressenraum
und CPU-Zyklen, allen laufenden Prozessen zugewiesen werden. Die
Arbeitsfolge enthält
Instruktionen, die veranlassen, dass Daten zwischen dem Clientspeicher
und anderen Prozessen in einer Folge übertragen werden, die als Sendearbeitsfolge
bezeichnet wird, sowie Instruktionen darüber, wo Daten platziert werden
sollen, die von einem anderen Prozess in einer anderen Folge empfangen
werden, die als Empfangsarbeitsfolge bezeichnet wird. Dieser andere
Prozess wird typischerweise als Remoteprozess bezeichnet, selbst
wenn er auf demselben Computer wie der Client-Prozess abläuft. Die
Hardware führt
die Instruktionen in derjenigen Reihenfolge aus, in der sie in die
Arbeitsfolge gestellt wurden. Für
eine Sendeoperation werden Nachrichten von dem Clientprozess zu
dem Remoteprozess in Gestalt von einer Reihe von Dateneinheiten
gesendet, die als Pakete bezeichnet werden. Die sendende Hardware
(Sender) überträgt die Pakete
zu einer empfangenden Hardware (Empfänger), wo sie für den Remoteprozess
zugänglich
sind. Für
Operationen, wie zum Beispiel eine RDMA-Leseoperation (Remote Direct
Memory Access) sendet der Remoteprozess eine Antwortnachricht an
den Client-Prozess, welche die angeforderten Informationen enthält.
-
Schalter
oder Switcher werden dazu verwendet, um Pakete zwischen dem Sender
und dem Empfänger
zu leiten. Die Schalter leiten Pakete typischerweise unter Verwendung
von entweder einem Datagramm- (oder verbindungslosen) Netzwerk oder
von einem virtuellen Schaltungs- (oder verbindungsorientierten)
Netzwerk. In einem Datagramm-Netzwerk enthält jedes Paket genug Informationen,
das heißt
eine Bestimmungsadresse, um jeden Schalter in die Lage zu versetzen,
zu entscheiden, wie dieses Paket an seinen Bestimmungsort zu bringen
ist. In einem virtuellen Schaltungsnetzwerk wird zunächst eine
virtuelle Verbindung zwischen dem Quell-Host und dem Empfänger-Host
hergestellt. Diese virtuelle Verbindung kann durch einen Netzwerkadministrator
hergestellt werden. Alternativ kann ein Host Nachrichten in das
Netzwerk senden, um zu bewirken, dass der Zustand hergestellt wird.
In einem Datagramm basierten Netzwerk kann eine Folge von Paketen,
die von einem Quell-Host an einen Empfänger-Host gesendet wird, unterschiedliche
Wege nehmen. InfinibandSM unterstützt auch
eine Form von Datagramm basierten Netzwerken, die auf einer expliziten
Aufstellung von Schaltleittabellen durch den Unternetzmanager basieren.
In einem virtuellen Schaltungsnetzwerk nimmt eine Folge von Paketen,
die von einem Quell-Host zu einem Empfänger-Host gesendet wird den
Weg, der von der virtuellen Schaltung hergestellt wird.
-
InfinibandSM stellt zuverlässige Transportdienste zwischen
Client- und Remoteprozessen unter Verwendung von einer Kombination
von Paketfolgenummern (Packet Sequence Number, PSN) und Bestätigungsnachrichten
(Acknowlegement, ACK) zur Verfügung.
Das heißt,
jedem zu dem Empfänger
gesendeten Paket wird eine PSN zugeordnet, und der Empfänger schickt
eine ACK-Nachricht
an den Sender, die den Empfang des Paketes bestätigt. Eine negative ACK-Nachricht
(NAK) wird für
ausgefallene oder verlorene Pakete geschickt. Die ACK-Nachrichten sagen
dem Sender, welche Pakete an dem entfernten Ende empfangen wurden, indem
sie die PSN des empfangenen Paketes zur Verfügung stellen. Eine Nachricht
ist vervollständigt,
wenn alle ausstehenden Pakete für
die Nachricht bestätigt
worden sind. Aber nur mit den zurückgeschickten PSNs steht dem
Sender kein effektiver Weg zur Verfügung, um zu wissen, wann eine
Nachricht vervollständigt
worden ist. Um festzustellen, wann eine Nachricht vervollständigt worden
ist, liest der Sender einen Descriptor in dem Speicher des Clients
für jede
zurückgeschickte
PSN, um die Größe der ursprünglichen
Nachricht, das heißt
die Anzahl der Pakete in der ursprünglichen Nachricht, festzustellen.
Dann benutzt der Sender diese Information gemeinsam mit der PSN,
um festzustellen, ob die Nachricht vervollständigt worden ist. Diese zusätzlichen
Auslesevorgänge
von Descriptoren führen
zu einer zusätzlichen
Systembusbelastung über
die Datenbewegung zwischen dem Prozessor und Speicher hinaus. Schemata,
um diese Zusatzbelastung zu minimieren, können die Systemleistung erheblich
verbessern.
-
Die
europäische
Patentanmeldung EP-A-0969622 (MICROSOFT CORP) vom 5. Januar 2000
betrifft eine Technik zum Versenden von kleinen Datennachrichten
von einen sendenden System zu einer großen Anzahl von empfangenden
Systemen, ohne Pakete zu verlieren. Um dies zu erreichen, wird ein
statistisches Modell verwendet, bei dem Nachrichten in eine garantierte
Minimalanzahl von Paketen geteilt werden, um eine auf statistischen
Daten basierende zuverlässige Übertragung
sicherzustellen. Bei einer alternativen Technik wird in den für eine Nachricht übertragenen
Paketen periodisch ein Bestätigungs-Flag
gesetzt. Empfangende Systeme senden als Antwort auf den Empfang
von solchen Paketen mit einem Flag eine Bestätigung. Auf diese Weise kann
das sendende System Pakete, die von dem empfangenden System nicht
bestätigt
wurden, nochmals übertragen.
Folglich offenbart die EP-A-0969622
die Übertragung
eines vollständigen
Bestätigungssignals
beim Empfang von jedem Paket.
-
Zusammenfassung
der Erfindung
-
Nach
einem Aspekt betrifft die Erfindung ein System zur Übertragung
von Nachrichten zwischen einem Clientprozess und einem Remoteprozess,
das ein Systemnetzwerk aufweist, das einen Kommunikationskanal zwischen
dem Clientprozess und dem Remoteprozess bereitstellt. Das System
umfasst weiterhin einen ersten Kanaladapter, der eine Schnittstelle
zwischen dem Clientprozess und dem Kommunikationskanal bildet. Der erste
Kanaladapter ist so konfiguriert, dass er eine Nachricht von dem
Clientprozess erhält,
die Nachricht in eine Folge von Paketen segmentiert, jedem Paket
eine Sequenznummer zuweist und die Pakete in der richtigen Reihenfolge
auf den Kommunikationskanal bringt. Das System umfasst weiterhin
einen zweiten Kanaladapter, der eine Schnittstelle zwischen dem
Remoteprozess und dem Kommunikationskanal bildet. Der zweite Kanaladapter
ist so konfiguriert, dass er Pakete von dem Kommunikationskanal
erhält
und als Reaktion auf die empfangenen Pakete wenigstens eine Bestätigungsnachricht
an den ersten Kanaladapter sendet. Die Bestätigungsnachricht hat ein Feld
für die
Paketsequenznummer, die eine Paketsequenznummer enthält, sowie
einen Nutzbereich, der eine Nachrichtensequenznummer enthält. Die
Nachrichtensequenznummer bezeichnet eine vollständige Nachricht, die an dem
zweiten Kanaladapter zuletzt empfangen wurde, und die Paketsequenznummer
bezeichnet ein Paket, das zuletzt an dem zweiten Kanaladapter empfangen
wurde.
-
Bei
einigen Ausführungsbeispielen
weist der Clientprozess eine Arbeitsfolge auf, in welcher durch
eine Kommunikationsschnittstelle auszuführende Anweisungen angeordnet
sind. Bei einigen Ausführungsbeipielen umfasst
die Arbeitsfolge eine Sendearbeitsfolge, in welcher an den Remoteprozess
zu sendende Nachrichten angeordnet sind, und der erste Kanaladapter
liest eine Nachricht von der Sendearbeitsfolge. Bei einigen Ausführungsbeipielen
umfasst die Arbeitsfolge außerdem
eine Empfangsarbeitsfolge, in welcher Anweisungen darüber angeordnet
sind, wo eine Antwortnachricht zu platzieren ist, die von dem zweiten
Kanaladapter empfangen wurde.
-
Nach
einem anderen Aspekt betrifft die Erfindung ein Verfahren zur Übertragung
von Nachrichten zwischen zwei Prozessen, welches das Schaffen eines
Kommunikationskanals zwischen einem ersten Kanaladapter, der mit
einem Clientprozess gekoppelt ist, und einem zweiten Kanaladapter,
der mit einem Remoteprozess gekoppelt ist, umfasst. Bei dem ersten
Kanaladapter umfasst das Verfahren weiterhin das Lesen einer Anforderungsnachricht
von dem Clientprozess, das Segmentieren der Anforderungsnachricht
in eine Reihe von Paketen, das Zuweisen einer Sequenznummer an jedes
Paket, und das geordnete Übertragen
von jedem Paket durch den Kommunikationskanal an den zweiten Kanaladapter.
Bei dem zweiten Kanaladapter umfasst das Verfahren weiterhin das
Empfangen der Pakete von dem ersten Kanaladapter und das Senden
wenigstens einer Bestätigungsnachricht
an den ersten Kanaladapter als Reaktion auf die empfangenen Pakete,
wobei die Bestätigungsnachricht
ein Feld für
die Paketsequenznummer aufweist, die eine Paketsequenznummer enthält, sowie
einen Nutzbereich aufweist, der eine Nachrichtensequenznummer enthält, wobei
die Nachrichtensequenznummer eine vollständige Nachricht bezeichnet,
die an dem zweiten Kanaladapter zuletzt empfangen wurde, und die
Paketsequenznummer ein Paket bezeichnet, das zuletzt an dem zweiten
Kanaladapter empfangen wurde.
-
Andere
Aspekte und Vorteile der Erfindung werden durch das Lesen der folgenden
Beschreibung und der angefügten
Patentansprüche
offensichtlich.
-
Kurze Beschreibung
der Zeichnungen
-
1 zeigt
schematisch einen Client-Knotenpunkt und einen Remote-Knotenpunkt,
die mit einem Systembereichsnetzwerk verbunden sind.
-
2 veranschaulicht
schematisch einen Clientprozess, der mit einem Remoteprozess über einen Kommunikationskanal
verbunden ist, der von dem Systembereichsnetzwerk aus 1 geschaffen
wird.
-
3 ist
eine grafische Veranschaulichung einer Paketstruktur gemäß einem
Ausführungsbeispiel
der Erfindung.
-
4 zeigt
Pakete, die zwischen Kanaladaptern gemäß einem Ausführungsbeispiel
der Erfindung übertragen
werden.
-
5 illustriert
einen Kommunikationsprozess zwischen den in 4 gezeigten
Kanaladaptern einschließlich
eines verlorenen Pakets und einem Prozess zum Widerversenden eines
verlorenen Paketes.
-
6 illustriert
einen Kommunikationsprozess zwischen den in 4 gezeigten
Kanaladaptern einschließlich
einer verlorenen Bestätigungsnachricht.
-
Detaillierte
Beschreibung der Erfindung
-
Unterschiedliche
Ausführungsbeispiele
der Erfindung werden nun mit Bezug auf die begleitende Zeichnungen
beschrieben. 1 veranschaulicht schematisch
einen Client-Knotenpunkt 1 und einen Remote-Knotenpunkt 2,
die mit einem Systembereichsnetzwerk 3 verbunden sind.
Die Client- und
Remote-Knotenpunkte 1, 2 können irgendein Untersystem
sein, das mit dem Systembereichsnetzwerk 3 verbunden ist,
zum Beispiel ein paralleler Computer, ein Untersystem aus einer
redundanten Anordnung von unabhängigen
Platten (RAID, Redundant Array of Independent Disks), ein Eingabe/Ausgabe-Untersystem, ein
skalierbarer Speicherserver usw. Das Systembereichsnetzwerk 3 umfasst
untereinander verbundene Unternetze 4. Jedes Unternetz 4 ist
aus einem Satz von untereinander verbundenen Schaltern (nicht gezeigt),
einem Router (nicht gezeigt) und einem Unternetzmanager (nicht gezeigt)
gebildet. Das Systembereichsnetzwerk 3 schafft einen Kommunikationskanal
(5 in 2) zwischen einem Clientprozess 6 auf
dem Client-Knotenpunkt 1 sowie einem Remoteprozess 7 auf
dem Remote-Knotenpunkt 2. Der Clientprozess 6 ist
in einem Speicherbereich 8 auf dem Client-Knotenpunkt 1 lokalisiert
und der Remoteprozess 7 ist in einem Speicherbereich 9 auf
den Remote-Knotenpunkt 2 lokalisiert. Der Client-Knotenpunkt 1 umfasst
einen Prozessor 10, der mit dem Speicherbereich 8 zusammenwirkt,
und einer Logik, die als Kanaladapter 11 bezeichnet wird,
die eine Schnittstelle zwischen dem Clientprozess 6 und
dem Systembereichsnetzwerk 3 bildet. Der Remoteprozess 7 umfasst
einen Prozessor 12, der mit dem Speicherbereich 9 und
einer Logik zusammenwirkt, die als Kanaladapter 13 bezeichnet
wird, die eine Schnittstelle zwischen dem Remoteprozess 7 und
dem Systembereichsnetzwerk 3 bildet. Die Kanaladaptoren 11, 13 können in
einem anwendungsspezifischen integrierten Schaltkreis implementiert
sein. Der Client-Knotenpunkt 1 und der Remote-Knotenpunkt 2 können jeweils
mehr als einen Prozessor und Kanaladapter umfassen.
-
2 zeigt
den Clientprozess 6 und den Remoteprozess 7, die
durch einen Kommunikationskanal 5 miteinander verbunden
sind. In dem Speicherbereich 8 des Client-Knotenpunkts 1 ist
eine Arbeitsfolge 14 geschaffen. Obwohl nur eine Arbeitsfolge 14 gezeigt
ist sollte es klar sein, dass es in dem Speicherbereich 8 zahlreiche
Arbeitsfolgen geben kann. Wenn der Clientprozess 6 eine
Arbeitsanforderung sendet, wird eine Anweisung, die als Arbeitsfolgenelement
bezeichnet wird, in der Arbeitsfolge 14 platziert. Die
Arbeitsfolge 14 umfasst eine Sendearbeitsfolge 14a und
eine Empfangsarbeitsfolge 14b. Die Arbeitsfolgenelemente,
die bewirken, dass Daten zwischen den Speicherbereichen 8, 9 ausgetauscht
werden, sind in der Sendearbeitsfolge 14a platziert, und
die Arbeitsfolgenelemente, die Anweisungen darüber enthalten, wo Daten, die
von dem Speicherbereich 9 empfangen werden, zu platzieren
sind, sind in der Empfangsarbeitsfolge 14b platziert. Eine Kommunikationsschnittstelle,
die der Prozessor 10 (in 1 gezeigt)
oder der Kanaladapter 11 oder ein anderer Prozessor in
dem Client-Knotenpunkt 1 (in 1 gezeigt)
sein kann, zum Beispiel ein Eingabe/Ausgabe-Prozessor (nicht gezeigt) führt die
Arbeitsfolgenelemente in der Reihenfolge aus wie sie in der Arbeitsfolge 14 platziert
wurden.
-
Die
Grundeinheit der Kommunikation zwischen dem Clientprozess 6 und
dem Remoteprozess 7 ist eine Nachricht. Eine Nachricht
kann eine Sende- oder Empfangsoperation, eine Lese- oder Schreiboperation mit
Remote Direct Memory Access (RDMA), eine atomare Operation oder
eine Multicast-Operation sein. Für eine
Sendeoperation spezifiziert das Arbeitsfolgenelement einen Block
von Daten in dem Speicherraum 8, der zu dem Remote-Knotenpunkt 2 gesendet
werden soll, wobei es dem Remote-Knotenpunkt 2 überlassen
bleibt, festzustellen, wo die empfangenen Daten zu platzieren sind.
Für eine
Empfangsoperation legt das Arbeitsfolgenelement fest, wo Daten in
dem Speicherbereich 8 zu platzieren sind. Eine RDMA-Operation
ist ein direkter Austausch von Daten zwischen den Speicherbereichen 8 und 9.
Für eine
RDMA-Operation legt das Arbeitsfolgenelement eine Adresse in dem
Speicherbereich 9 fest, wo die Daten zu platzieren sind.
Für eine
RDMA-Leseoperation bezeichnet ein Arbeitsfolgenelement in der Sendearbeitsfolge 14a,
dass Daten von dem Speicherbereich 9 zu dem Speicherbereich 8 übertragen
werden sollen. Für
eine RDMA-Schreiboperation zeigt ein Arbeitsfolgenelement in der
Sendearbeitsfolge 14a an, dass Daten von dem Speicherbereich 9 zu dem
Speicherbereich 8 übertragen
werden sollen. Es wird darauf hingewiesen, dass für RDMA-Operationen keine
Arbeitsfolgenelemente in dem Speicherbereich 9 gebraucht
werden. Eine atomare Operation legt fest, dass die Hardware einen
Ort in dem Speicherbereich 9 ausliest und den Inhalt dieses
Ortes aktualisiert. Eine atomare Operation ist übertragungsbasiert und kann
erforderlichenfalls rückgängig gemacht
werden. Eine Multicast-Operation beinhaltet das Senden einer Nachricht
an den Remote-Knotenpunkt 2, die an zahlreiche Ausgänge oder
Knotenpunkte geliefert werden kann.
-
Nachrichten
von dem Clientprozess 6 werden zu dem Remoteprozess 7 gesendet,
wenn die Anweisungen in der Sendearbeitsfolge 14a von der
Kommunikationsschnittstelle ausgeführt werden, zum Beispiel dem
Prozessor 10 (in 1 gezeigt)
oder dem Kanaladapter 11 oder einem anderen Prozessor in
dem Client-Knotenpunkt 1 (in 1 gezeigt).
Nachrichten von dem Remoteprozess 7 werden von dem Clientprozess 6 empfangen,
wenn die Anweisungen in der Empfangsarbeitsfolge 14b von
der Kommunikationsschnittstelle ausgeführt werden. Der Mechanismus
zur Übertragung
von Nachrichten zwischen dem Clientprozess 6 und dem Remoteprozess 7 umfasst
den Kommunikationskanal 5 und die Kanaladapter 11, 13.
Die Nachrichten, die zu dem Remoteprozess 7 gesendet werden
sollen, werden von dem Speicherraum 8 zu dem Kanaladapter 11 übertragen,
und die Nachrichten, die von dem Remoteprozess 7 empfangen
werden sollen, werden von dem Kanaladapter 11 zu dem Speicherraum 8 übertragen.
Der Kanaladapter 11 kann so ausgebildet sein, dass er ohne
Einbeziehung von einem Arbeitselement in der Empfangsarbeitsfolge 14b Nachrichten
direkt aus dem Speicherraum 8 lesen und direkt in den Speicherraum 8 schreiben
kann. In diesem Fall gibt die Empfangsarbeitsfolge 14b dem
Kanaladapter 11 ein Paar von Buffer-Descriptor-Listen. Eines von
dem Paar von Buffer-Descriptor-Listen legt die Adresse/Länge von
Buffern fest, welche die aus dem Speicherraum 8 zu übertragenden Daten
enthalten. Die andere Buffer-Ddescriptor-Liste spezifiziert die
Adresse/Länge
von Buffern in dem Speicherraum 8, in welche Daten platziert
werden sollen. Der Prozessor 10 (in 1 gezeigt)
oder ein anderer Prozessor in dem Client-Knotenpunkt 1 (in 1 gezeigt)
kann alternativ Daten zwischen dem Speicherraum 8 und dem
Kanaladapter 11 übertragen.
In diesem Fall würde
der Kanaladapter 11 einen Speicher umfassen, um die zu übertragenden
Daten zwischen dem Kanaladapter 11 und dem Speicherraum 8 zeitweilig
zu speichern.
-
Ohne
Ansehen des Mechanismus, der für
die Datenübertragung
zwischen dem Kanaladapter 11 und dem Speicherraum 8 verwendet
wird, segmentiert der Kanaladapter 11 im Allgemeinen jede über den
Kommunikationskanal 5 zu übertragende Nachricht in eine
Reihe von Dateneinheiten 20, die als Pakete bezeichnet werden.
Die Nachrichten können
in dem Speicherraum 8 segmentiert werden oder, wenn der
Kanaladapter 11 einen Speicher umfasst, in dem Speicher
des Kanaladapters 11. Wie in 3 grafisch
veranschaulicht ist, weist jedes Paket einen Leitkopf 22,
einen Transportkopf 24, eine Paketnutzlast 24 und
einen Fehlerdetektionscode 28, zum Beispiel Prüfsumme oder
zyklische Redundanzüberprüfung (CRC,
Cyclic Redundancy Check). Der Leitkopf 22 umfasst eine
Quelladresse und eine Zieladresse des Pakets 20. Der Transportkopf weist
unter anderen Dingen ein Paketsequenznummernummerfeld (PSN) sowie
Flag-Felder auf. Die Flag-Felder werden dazu benutzt, um Informationen
zwischen den Kanaladaptern 11 und 13 zu übertragen.
Die Paketnutzlast 24 enthält die aktuellen Daten, die
von dem Remoteprozess 7 benutzt werden. Der Fehlerdetektionscode 28 wird
dazu verwendet, um die Integrität
des Paketes 20 auf der Empfangsseite zu überprüfen. Der
Kanaladapter 11 (in den 1, 2 gezeigt)
gibt jedem Paket 20 in einer Nachricht eine PSN. Die PSN
wird in einem PSN-Feld des Paketes gespeichert.
-
Zurück zu 2;
der Kommunikationskanal 5 kann ein virtuelles Schaltungs-
(oder ein verbindungsorientiertes) Netzwerk sein, das die Kanaladapter 11 und 13 verbindet.
Alternativ dazu kann der Kommunikationskanal 5 ein Datagramm
basiertes Netzwerk sein. Alle InfinibandSM-Dienstetypen
erfordern von dem Unternetzmanager das explizite Aufstellen von
Schaltleittabellen. Der Verbindungsaufbau zwischen den Kanaladaptern 11 und 13 kann
asymmetrisch oder symmetrisch sein. Wenn der Verbindungsaufbau asymmetrisch
ist, ist eine Seite, zum Beispiel der Kanaladapter 11 aktiv
und die andere Seite, zum Beispiel der Kanaladapter 13 passiv
oder umgekehrt. Die aktive Seite macht einen Eröffnungsanruf an die passive
Seite und beide Seiten treten in einen Austausch von Nachrichten
ein, um die Verbindung herzustellen. Wenn eine Verbindung symmetrisch
ist, sind beide Seiten aktiv und versuchen, die Verbindung gleichzeitig
zu eröffnen.
Ein Verbindungsmanager (nicht gezeigt) verwaltet den Verbindungsaufbau
zwischen den Kanaladaptern 11 und 13. Sobald die Verbindung
zwischen den Kanaladaptern 11 und 13 hergestellt
ist, können über den
Kommunikationskanal 16 Nachrichten zwischen den Kanaladaptern 11 und 13 übertragen
werden. Ein Programm, das auf der Kommunikationsschnittstelle läuft, zum
Beispiel dem Prozessor 10 (in 1 gezeigt)
oder dem Kanaladapter 11 oder einem anderen Prozessor auf
dem Client-Knotenpunkt 1, zum Beispiel einem Eingabe/Ausgabe-Prozessor, liest
Arbeitsfolgenelemente in der Reihenfolge, in der sie in der Arbeitsfolge 14 platziert
worden sind. Das Programm verarbeitet die Arbeitsfolgenelemente
in der Sendearbeitsfolge 14a, indem der Kanaladapter 11 angewiesen
wird, Nachrichten an den Remoteprozess zu senden, und die Arbeitsfolgenelemente
in der Empfangsarbeitsfolge 14b, indem der Kanaladapter 11 angewiesen
wird, Nachrichten von dem Remoteprozess 7 zu empfangen.
-
Der
Kanaladapter 11 liest eine Nachricht, die an den Remoteprozess 7 gesendet
werden soll, segmentiert die Nachricht in Pakete, zum Beispiel Pakete 20,
weist jedem Paket eine PSN zu und sendet die Pakete 20 geordnet
an den Kanaladapter 13. Der Kanaladapter 13 empfängt die
Pakete 20 und platziert sie in den Speicherraum 9,
wo sie für
den Remoteprozess 7 zugänglich
sind. Der Kanaladapter 13 bestätigt den Empfang der Pakete 20,
indem er Bestätigungsnachrichten
(ACK) sendet, zum Beispiel ein ACK-Paket 21 an den Kanaladapter 11.
Die ACKs werden über
denselben Kommunikationskanal 5 an den Kanaladapter 11 übermittelt. Für RDMA-Leseoperationen
sendet der Kanaladapter 13 Antwortnachrichten, zum Beispiel
Antwortnachrichten 23 an den Clientprozess 6.
Der Kanaladapter 13 sendet die Antwortnachrichten an den
Kanaladapter 11 über
den Kommunikationskanal 5. Wenn der Kanaladapter 11 eine
Antwortnachricht von dem Remoteprozess 7 erhält, speichert
der Kanaladapter 11 die Antwortnachricht an der Speicheradresse,
die durch eine Information in dem ursprünglichen Sende-Descriptor angegeben
ist.
-
4 veranschaulicht,
wie der Kanaladapter 11 Nachrichten an den Kanaladapter 13 sendet.
Es wird angenommen, dass es drei Nachrichten gibt, die an den Remoteprozess 7 gesendet
werden sollen. Weiterhin wird angenommen, dass der Kanaladapter 11 die
erste Nachricht in drei Pakete 28 bis 32, die
zweite Nachricht in sechs Pakete 34 bis 44 und
die dritte Nachricht in zwei Pakete 46 bis 48 segmentiert.
Der Kanaladapter 11 ordnet jedem der Pakete 28 bis 32 eine
PSN zu. Zum Beispiel können
die PSNs für
die Pakete 28 bis 32 1 bis 3 sein, die PSNs für die Pakete 34 bis 44 können 1 bis
9 sein und die PSNs für
die Pakete 46 bis 48 können 10 bzw. 11 sein.
Die PSNs werden in den PSN-Feldern der Pakete gespeichert. Die Pakete 28 bis 48 werden dann
geordnet an den Kanaladapter 13 übertragen. Der Kanaladapter 13 kann
für jedes
empfangene Paket eine ACK erzeugen. Der Kanaladapter 13 kann
nach dem Empfang von jedem Paket eine ACK an den Kanaladapter 11 senden.
Alternativ dazu kann der Kanaladapter 13 mehrere ACKs zu
einem einzigen ACK-Paket verbinden, welches dann an den Kanaladapter 13 übertragen
wird. Dieses alternative Verfahren minimiert die Bandbreitennutzung.
Die Struktur des ACK-Pakets ist ähnlich zu
dem in 3 veranschaulichten. Das PSN-Feld von jeder zu
dem Kanaladapter 11 gesandten ACK enthält die PSN von dem letzten
erfolgreich empfangenen Paket.
-
In
der in 4 gezeigten Darstellung wird eine ACK 50 zu
dem Kanaladapter 11 gesandt nachdem alle Pakete 28 bis 32 in
der ersten Nachricht empfangen wurden, eine ACK 52 wird
an den Kanaladapter 11 gesandt, nachdem alle Pakete 34 bis 44 in
der zweiten Nachricht empfangen wurden, und eine ACK 54 wird an
den Kanaladapter 11 gesandt, nachdem alle Pakete 46 bis 48 in
der dritten Nachricht empfangen wurden. Das PSN-Feld der ACK 50 enthält die PSN
des Paketes 32, das PSN-Feld der ACK 52 enthält die PSN
des Paketes 44, und das PSN-Feld der ACK 54 enthält die PSN
des Paketes 48. Zusätzlich
zu der PSN-Information enthält der Nutzbereich
von jeder ACK 50 bis 54 eine Nachrichtensequenznummer
(MSN, Message Sequence Number). Der Kanaladapter 13 benutzt
die MSN, um den Kanaladapter 11 über das Ende einer Nachricht
zu benachrichtigen. Der Kanaladapter 13 weiß, wann
eine Nachricht vervollständig
ist, weil ein Flag in dem Kopf des Paketes gesetzt wird, wenn das
Paket das letzte in der Nachricht ist. Zum Beispiel werden Flags
in den Köpfen
der Pakete 32, 44 und 48 gesetzt, die
anzeigen, dass diese Pakete die letzten in ihrer jeweiligen Nachricht
sind. Wenn der Kanaladapter 11 ACKs empfängt, untersucht
der Kanaladapter 11 den Nutzbereich der ACK, um festzustellen,
ob eine Nachricht vervollständig
worden ist.
-
Zum
Beispiel in 4, wenn der Kanaladapter 13 zuerst
ein Paket von dem Kanaladapter 11 empfängt, zum Beispiel das Paket 28,
dann kann der Kanaladapter 13 eine ACK (nicht gezeigt)
erzeugen und initialisiert den Nutzbereich der ACK auf irgendeinen
Ausgangswert. Wenn der Kanaladapter 13 das zweite Paket 30 empfängt, kann
der Kanaladapter 13 eine ACK (nicht gezeigt) erzeugen und
den Nutzbereich der ACK wieder auf denselben Ausgangswert initialisieren,
der für
das erste Paket 28 verwendet wurde. Wenn der Kanaladapter 13 das
dritte Paket 32 empfängt,
sieht der Kanaladapter 13 ein gesetztes Flag in dem Kopf
des Paketes 32, das anzeigt, dass dieses das letzte Paket
in der ersten Nachricht ist. Der Kanaladapter 13 erzeugt
eine ACK für
das Paket 32, aber dieses Mal schreibt der Kanaladapter 13 eine
Anfangs-MSN in den Nutzbereich der ACK. Diese ACK, die als ACK 50 in 4 bezeichnet
ist, wird dann an den Kanaladapter 11 übertragen. Wenn der Kanaladapter 11 die
ACK 50 empfängt,
untersucht der Kanaladapter 11 den Nutzbereich der ACK und
folgert von der MSN in dem ACK-Nutzbereich, dass die erste Nachricht
vervollständig
worden ist. Es wird bemerkt, dass das PSN-Feld der ACK 50 die
PSN des Paketes 32 enthält.
Auf diese Weise nimmt der Kanaladapter 11 an, dass die
vorhergehenden Pakete 28 und 30 von dem Kanaladapter 13 erfolgreich
empfangen worden sind. Diese Art von Annahme ist in einem verbindungsorientierten
Netzwerk gültig,
wo Pakete bei den Kanaladapter 13 in der Reihenfolge ankommen,
wie sie der Kanaladapter 11 gesendet hat.
-
Damit
der Kanaladapter 11 weiß, welche Nachricht vervollständigt worden
ist, müssen
die Kanaladapter 11, 13 über die Anfangs-MSN übereinkommen,
die der Kanaladapter 13 benutzen wird. Diese Anfangs-MSN
wird zu dem Zeitpunkt erzeugt, an dem die Verbindung zwischen den
Kanaladaptern 11, 13 hergestellt wird. Zum Beispiel
gibt der Verbindungsmanager (nicht gezeigt) den Kanaladaptern 11, 13 die
zu verwendende Anfangs-MSN vor. Alternativ können die Kanaladapter 11, 13 Nachrichten
austauschen, um eine anfängliche
MSN zu erzeugen. Die Kanaladapter 11, 13 können auch
dahingehend übereinkommen,
dass sie immer mit einer bestimmten MSN beginnen, zum Beispiel 0.
Die MSN kann durch Verwendung irgendeines geeigneten Verfahrens
erzeugt werden, solange beide Kanaladapter 11, 13 wissen,
wie die MSN erzeugt wird. Bei einem Ausführungsbeispiel ist die MSN
eine monoton ansteigende Sequenznummer, die durch Modulo-Arithmetik
erzeugt wird. Die MSN könnte
zum Beispiel durch einen Modulo 224 Zähler erzeugt
werden, der sequentiell von 0 aufwärts zählt und bei 224 auf
Null zurückspringt.
Es sollte bemerkt werden, dass der ACK Nutzbereich in diesem Fall
mindestens 24 Bits haben muss, um die MSN aufzunehmen.
-
Für Diskussionszwecke
wird angenommen, dass der ACK-Nutzbereich
auf 224 (FFFFFF16)
initialisiert wird und dass die Anfangs-MSN 0 ist. Dann wird der
Kanaladapter 13 für
das erste Paket 28 eine ACK erzeugen, die PSN = 1 und einen
Nutzbereich = FFFFFF16 hat. Für das zweie
Paket 30 wird der Kanaladapter 13 eine ACK mit
PSN = 2 und eine Nutzlast = FFFFFF16 erzeugen.
Für das
dritte Paket 32, welches das letzte Paket in der ersten
Nachricht ist, wird der Kanaladapter 13 eine ACK, das heißt die ACK 50 erzeugen,
mit einer PSN = 3 und einem Nutzbereich = 1. Es sollte bemerkt werden,
dass der Kanaladapter 13 die ACK 50 nur dann erzeugt,
wenn die Pakete 28 und 30 erfolgreich empfangen
wurden. Tabelle 1 unten fasst den Inhalt des PSN-Felds und des Nutzbereiches
von den ACKs zusammen, die für
jedes von dem Kanaladapter 13 empfangenen Paket erzeugt
werden unter der Annahme, dass die anfängliche MSN 0 ist und der Kanaladapter 13 eine
ACK für
jedes empfangene Paket erzeugt.
-
-
-
Wenn
der Kanaladapter 13 eine ACK nur dann erzeugt, wenn eine
Nachricht vervollständig
worden ist, dann werden die von dem Kanaladapter 11 empfangene
ACKs so sein, wie sie in Tabelle 2 gezeigt sind.
-
-
Der
Kanaladapter 11 untersucht den Nutzbereich der ACKs die
er empfängt,
wie es vorstehend beschrieben worden ist. Wenn sich der ACK Nutzbereich
verändert,
weiß der
Kanaladapter 11, dass eine Nachricht vervollständigt worden
ist. Über
jede vollständige
Nachricht benachrichtigt der Kanaladapter 11 den Prozessor 10 (in
Figur gezeigt) oder einen anderen Prozessor in dem Client-Knotenpunkt 1 (in 1 nicht
gezeigt) über
die Vervollständigung
der Nachricht. Für
jede vollständige
Nachricht wird ein vollständiges
Arbeitsfolgenelement in einer Erledigungsschleife 16 (in 2 gezeigt)
in dem Speicherraum 8 platziert.
-
Bis
jetzt wurde nur ein Fall betrachtet, der sich gutartig verhält, bei
dem alle an den Kanaladapter 13 übertragenen Pakete beim ersten
Mal erfolgreich empfangen worden sind. In einigen Fällen können eines
oder mehrere an den Kanaladapter 13 gesendeten Pakete fehlerhaft
sein. Ein fehlerhaftes Paket wird typischerweise als ein verlorenes
Paket bezeichnet. In einigen Fällen
muss der Kanaladapter 11 das verlorene Paket erneut an
den Kanaladapter 13 senden. Der Kanaladapter 13 benachrichtigt
den Kanaladapter 11 über
ein verlorenes Paket, indem er ein negatives Bestätigungspaket
(NAK) an den Kanaladapter 11 sendet. In der NAK wird ein Flag
gesetzt, um anzuzeigen, dass die in dem NAK enthaltene Information
sich auf ein verlorenes Paket bezieht. Der Kanaladapter 11 benutzt
die PSN in dem PSN-Feld von der NAK und die MSN in dem Nutzbereich der
NAK, um die erneut an den Kanaladapter 13 zu übertragenden
Pakete festzustellen.
-
Mit
Bezug auf 5 wird angenommen, dass das
zweite Paket 30 der ersten Nachricht von dem Kanaladapter 13 nicht
erfolgreich empfangen worden ist. Der Kanaladapter 13 erzeugt
eine NAK 56 für
das zweite Paket 30, das nicht erfolgreich empfangen wurde,
sobald er das dritte Paket 32 empfängt. Das PSN-Feld der NAK 56 enthält die PSN
des letzten erfolgreich empfangenen Paketes vor dem verlorenen Paket.
Das letzte erfolgreich empfangene Paket vor dem verlorenen Paket
ist in diesem Fall das Paket 28. Daher würde das PSN-Feld
der NAK 56 1 enthalten. Der Nutzbereich der NAK 56 würde auch
auf den Nutzbereich des Paketes 28 gesetzt werden, das
heißt
FFFFFF16. Wenn der Kanaladapter 11 die
NAK 56 empfängt,
weiß der
Kanaladapter 11, dass das Paket, das nach einem Paket,
das eine PSN = 1 und eine MSN = 0 hat, nicht erfolgreich empfangen
worden ist. Es sollte bemerkt werden, dass der Kanaladapter 11 weiß, dass
das verlorene Paket zu der ersten Nachricht gehört, das heißt MSN = 0, weil die NAK Nutzlast
auf FFFFFF16 gesetzt ist. Der Kanaladapter 11 überträgt alle
Pakete, die nach dem Paket mit einer PSN = 1 und einer MSN = 0 gesendet
wurden, erneut.
-
In
einem anderen Szenario kann auch eine von dem Kanaladapter 11 an
den Kanaladapter 13 gesendete ACK verloren gehen. In diesem
Fall ist es jedoch nicht notwendig, die ACK erneut zu übertragen,
weil aus nachfolgend erfolgreich übertragenen ACKs auf den Empfang
von Paketen geschlossen werden kann. Auf diese Weise kann zum Beispiel,
wenn die ACK 50 verloren geht und die ACK 52 durch
den Kanaladapter 11 erfolgreich empfangen wird, wie es
in 6 gezeigt ist, der Kanaladapter schließen, dass,
weil die zweite Nachricht von dem Kanaladapter 13 erfolgreich
empfangen wurde, auch die erste Nachricht erfolgreich von dem Kanaladapter 13 empfangen
worden sein muss. Der Kanaladapter 11 benachrichtigt dann
einen Prozessor, zum Beispiel den Prozessor 10 (in 1 gezeigt),
dass die erste und zweite Nachricht erfolgreich vervollständigt worden
sind. Alternativ kann der Kanaladapter 11 den Prozessor
nur darüber
informieren, dass die zweite Nachricht vollständig ist und der Prozessor
kann dann Descriptoren in einem Speicher überprüfen müssen, um festzustellen, ob
die erste Nachricht vervollständig
worden ist.
-
4 stellt
ein Verfahren zum Übertragen
von Paketen von dem Kanaladapter 11 an den Kanaladapter 13 dar.
Es gibt jedoch auch andere Verfahren, die dazu verwendet werden
können,
um Pakete zwischen den Kanaladapter 11, 13 zu übertragen.
Ein Verfahren, welches als „Halt
und Warten" („Stop and
Wait") bezeichnet
wird, beinhaltet das Senden eines Paketes an den Kanaladapter 13 und
das darauf Warten, dass der Kanaladapter 13 den Empfang
des Paketes bestätigt,
bevor ein weiteres Paket gesendet wird. Dieser Übertragungsmechanismus ist
in Datagramm basierten Netzwerken nützlich. Es wird eine Antwortzeit
festgelegt, innerhalb der der Kanaladapter 13 den Empfang
des Paketes bestätigen
muss. Wenn der Kanaladapter 13 den Empfang des Paketes
innerhalb der Antwortzeit nicht bestätigt, sendet der Kanaladapter 11 das
Paket erneut an den Kanaladapter 13. Ein anderes Verfahren,
welches als Schiebefenster bezeichnet wird, erlaubt dem Kanaladapter 11 mehrere
Pakete bis zur Größe eines
gewählten
Fensters zu übertragen,
bevor er eine ACK empfängt.
Da ACKs für
diejenigen Pakete in dem Fenster, die zuerst gesendet wurden, zurückgesendet
wurden, verschiebt sich das Fenster und ermöglicht es, dass weitere Pakete
gesendet werden. Der Kanaladapter 11 untersucht den ACK-Nutzbereich, wie
zuvor beschrieben worden ist, um festzustellen, wann eine Nachricht vollständig ist.
-
Ausführungsbeispiele
der Erfindung schaffen Mechanismen zum Vervollständigen von Nachrichten in einem
Speicher für
einen Clientprozess und einem Remoteprozess, die durch eine verlässliche
Verbindung verbunden sind. Der Mechanismus nutzt die Tatsche aus,
dass der Empfänger
der Nachricht, zum Beispiel der Kanaladapter 13, weiß, wann
eine Nachricht vollständig
ist, weil ein Flag in dem Paketkopf gesetzt ist. Durch Verwenden
einer MSN kann der Empfänger
dann den Nachrichtensender, zum Beispiel den Kanaladapter 11, die
Erledigung der Nachricht anzeigen. Auf diese Weise muss der Sender
nicht in den Speicher gehen, um einen Descriptor für jede ACK
zu lesen, die er erhält.
Weil Erledigungsprüfungen
von Nachrichten an Nachrichtenrändern
ausgeführt
werden anstatt an Paketrändern
ist die Leistung des Systems optimiert.
-
Während die
Erfindung mit Bezug auf eine begrenzte Anzahl von Ausführungsbeispielen
beschrieben worden ist, werden Fachleute, die aus dieser Offenbarung
nutzen ziehen, erkennen, dass andere Ausführungsbeispiele abgeleitet
werden können,
die nicht von dem Schutzumfang der hierin beschriebenen Erfindung
abweichen. Demgemäß soll der
Schutzumfang der Erfindung nur durch die beigefügten Patentansprüche begrenzt
werden.