-
GEBIET DER ERFINDUNG
-
Die vorliegende Erfindung bezieht sich allgemein auf die Datenspeicherung und insbesondere auf Verfahren und Systeme zur Emulation von Fernspeichern.
-
HINTERGRUND DER ERFINDUNG
-
Verschiedene Techniken zur Datenspeicherung unter Verwendung von Netzwerkadaptern sind in der Technik bekannt. Zum Beispiel beschreiben die US-Patente
9,696,942 und
9,727,503 Techniken für den Zugriff auf entfernte Speichergeräte unter Verwendung eines lokalen Busprotokolls. Ein offenbartes Verfahren umfasst das Konfigurieren eines Treiberprogramms auf einem Host-Computer, um Befehle gemäß einem Protokoll zu empfangen, das für den Zugriff auf lokale Speichergeräte definiert ist, die mit einem Peripheriekomponenten-Schnittstellenbus des Host-Computers verbunden sind. Wenn das Treiberprogramm von einem Anwendungsprogramm, das auf dem Host-Computer läuft, einen Speicherzugriffsbefehl in Übereinstimmung mit dem Protokoll empfängt, der eine Speichertransaktion spezifiziert, wird ein direkter Fernspeicherzugriffsvorgang (RDMA, Engl. „remote direct memory access“) von einem Netzwerkschnittstellen-Controller (NIC, Engl. „network interface controller“) durchgeführt, der mit dem Host-Computer verbunden ist, um die Speichertransaktion über ein Netzwerk auf einem entfernten Speichergerät auszuführen.
-
Das U.S.-Patent 10,657,077 beschreibt eine HyperConverged NVMF Speicher-NIC-Karte. Eine Speicher- und Kommunikationsvorrichtung zum Einstecken in einen Server umfasst eine Leiterplatte, eine Busschnittstelle, einen MAC-Prozessor (Medium Access Control), ein oder mehrere Speichergeräte und mindestens eine CPU (Central Processing Unit). Die Busschnittstelle ist so konfiguriert, dass sie das Gerät zumindest mit einem Prozessor des Servers verbindet. Der MAC ist auf der Leiterplatte montiert und für den Anschluss an ein Kommunikationsnetz konfiguriert. Die Speichergeräte sind auf der Leiterplatte montiert und zum Speichern von Daten konfiguriert. Die CPU ist auf der Leiterplatte montiert und so konfiguriert, dass sie die Speichergeräte sowohl (i) dem Prozessor des Servers über die Bus-Schnittstelle als auch (ii) indirekt anderen Servern über das Kommunikationsnetz zur Verfügung stellt.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Die Erfindung wird durch die Ansprüche definiert. Zur Veranschaulichung der Erfindung werden hier Aspekte und Ausführungsformen beschrieben, die in den Anwendungsbereich der Ansprüche fallen können oder auch nicht.
-
Eine hier beschriebene Ausführungsform der vorliegenden Erfindung stellt einen Netzwerkadapter bereit, der einen Netzwerkschnittstellen-Controller und einen Prozessor enthält. Der Netzwerkschnittstellen-Controller soll über einen Peripheriebus mit einem Host und über ein Netzwerk mit einem entfernten Speichergerät kommunizieren. Der Prozessor soll auf dem Peripheriebus ein Peripherie-Bus-Gerät freilegen, das mit dem Host unter Verwendung eines Bus-Speicherprotokolls kommuniziert, um erste Eingabe/Ausgabe(E/A)-Transaktionen des Bus-Speicherprotokolls vom Host über das freigelegte Peripherie-Bus-Gerät zu empfangen und die ersten E/A-Transaktionen für den Host in dem entfernten Speichergerät abzuschließen, indem er (i) zwischen den ersten E/A-Transaktionen des Bus-Speicherprotokolls und zweiten E/A-Transaktionen eines Netzwerkspeicherprotokolls übersetzt und (ii) die zweiten E/A-Transaktionen in dem entfernten Speichergerät ausführt. Um die ersten E/A-Transaktionen zu empfangen und zu vervollständigen, soll der Prozessor den Netzwerkschnittstellen-Controller veranlassen, Daten der ersten und zweiten E/A-Transaktionen direkt zwischen dem entfernten Speichergerät und einem Speicher des Hosts unter Verwendung einer Null-Kopie-Übertragung (Engl. „zero-copy transfer“) zu übertragen.
-
In einer Ausführungsform ist das Bus-Speicherprotokoll Non Volatile Memory Express (NVMe), und das Netzwerkspeicherprotokoll ist NVMe over Transmission Control Protocol (NVMe-over-TCP). In einer offengelegten Ausführungsform soll der Prozessor Paketköpfe des Netzwerkspeicherprotokolls verarbeiten und mit dem entfernten Speichergerät austauschen, während der Netzwerkschnittstellen-Controller die Daten direkt zwischen dem entfernten Speichergerät und dem Speicher des Hosts austauscht. In einem Ausführungsbeispiel soll der Prozessor, um den Netzwerkschnittstellen-Controller zu veranlassen, die Daten direkt zu übertragen, einen Speicherpuffer im Speicher des Hosts auf DMA-Adressen (Direct Memory Access) im Netzwerkschnittstellen-Controller abbilden.
-
In einer anderen Ausführungsform soll der Prozessor bei einem Fehler bei der Übertragung eines Pakets des Netzwerkspeicherprotokolls an das entfernte Speichergerät die Daten des Pakets aus dem Speicher des Hosts abrufen und das Paket mit den abgerufenen Daten erneut übertragen. In einer weiteren Ausführungsform berechnet der Netzwerkschnittstellen-Controller bei der direkten Übertragung der Daten vom Speicher des Hosts zum entfernten Speichergerät eine zyklische Redundanzprüfung (CRC, Engl. „Cyclic Redundancy Check“) über die übertragenen Daten und überträgt die CRC mit den Daten.
-
In einigen Ausführungsformen muss der Netzwerkschnittstellen-Controller bei der direkten Übertragung der Daten vom entfernten Speichergerät zum Speicher des Hosts eine zyklische Redundanzprüfung (CRC) überprüfen, die mit den Daten empfangen wird. In einem Ausführungsbeispiel soll der Netzwerkschnittstellen-Controller, wenn die CRC-Prüfung fehlschlägt, den Prozessor veranlassen, die CRC-Prüfung vorzunehmen, und der Prozessor soll zumindest einige der Daten aus dem Speicher des Hosts abrufen und die CRC-Prüfung anhand der abgerufenen Daten vornehmen.
-
Zusätzlich wird gemäß einer Ausführungsform der vorliegenden Erfindung ein Verfahren in einem Netzwerkadapter bereitgestellt, der eine Netzwerkschnittstellen-Controller und einen Prozessor enthält. Das Verfahren umfasst unter Verwendung des Netzwerkschnittstellen-Controllers des Netzwerkadapters die Kommunikation über einen Peripheriebus mit einem Host und über ein Netzwerk mit einem entfernten Speichergerät. Unter Verwendung des Prozessors des Netzwerkadapters wird (i) ein Peripherie-Bus-Gerät, das mit dem Host unter Verwendung eines Bus-Speicherprotokolls kommuniziert, auf dem Peripherie-Bus freigelegt, (ii) werden erste Eingabe/Ausgabe (E/A)-Transaktionen des Bus-Speicherprotokolls von dem Host über das freigelegte Peripherie-Bus-Gerät empfangen, und (iii) werden die ersten E/A-Transaktionen für den Host in dem entfernten Speichergerät abgeschlossen, indem (a) zwischen den ersten E/A-Transaktionen des Bus-Speicherprotokolls und zweiten E/A-Transaktionen eines Netzwerk-Speicherprotokolls übersetzt wird, und (b) die zweiten E/A-Transaktionen in dem entfernten Speichergerät ausgeführt werden. Das Empfangen und Abschließen der ersten E/A-Transaktionen beinhaltet das Veranlassen des Netzwerk-Schnittstellen-Controllers, Daten der ersten und zweiten E/A-Transaktionen direkt zwischen dem entfernten Speichergerät und einem Speicher des Hosts unter Verwendung einer Null-Kopie-Übertragung zu übertragen.
-
In einer Ausführungsform ist das Bus-Speicherprotokoll Non Volatile Memory Express (NVMe), und das Netzwerkspeicherprotokoll ist NVMe over Transmission Control Protocol (NVMe-over-TCP). In einer offengelegten Ausführungsform umfasst die Ausführung der zweiten E/A-Transaktionen unter Verwendung des Prozessors die Verarbeitung und den Austausch von Paketköpfen des Netzwerkspeicherprotokolls mit dem entfernten Speichergerät, während der Netzwerkschnittstellen-Controller die Daten direkt zwischen dem entfernten Speichergerät und dem Speicher des Hosts austauscht. In einem Ausführungsbeispiel umfasst das Veranlassen des Netzwerkschnittstellen-Controllers, die Daten direkt zu übertragen, das Abbilden eines Speicherpuffers im Speicher des Hosts auf DMA-Adressen (Direct Memory Access) im Netzwerkschnittstellen-Controller.
-
In einer anderen Ausführungsform umfasst das Verfahren ferner, dass bei einem Fehler bei der Übertragung eines Pakets des Netzwerkspeicherprotokolls an das entfernte Speichergerät die Daten des Pakets aus dem Speicher des Hosts an den Prozessor abgerufen werden und das Paket mit den abgerufenen Daten erneut übertragen wird. In einer weiteren Ausführungsform umfasst die direkte Übertragung der Daten aus dem Speicher des Hosts an das entfernte Speichergerät die Berechnung einer zyklischen Redundanzprüfung (CRC) über die übertragenen Daten und die Übertragung der CRC mit den Daten.
-
In einigen Ausführungsformen umfasst die direkte Übertragung der Daten vom entfernten Speichergerät zum Speicher des Hosts die Überprüfung einer zyklischen Redundanzprüfung (CRC), die mit den Daten empfangen wird. In einem Ausführungsbeispiel umfasst das Verfahren ferner, wenn die CRC nicht verifiziert werden kann, das Auslösen des Prozessors zur Verifizierung der CRC und, unter Verwendung des Prozessors, das Abrufen mindestens einiger der Daten aus dem Speicher des Hosts und die Verifizierung der CRC unter Verwendung der abgerufenen Daten.
-
Ferner wird gemäß einer Ausführungsform der vorliegenden Erfindung ein Verfahren zum Ausführen von Eingabe/Ausgabe-Transaktionen (E/A) für einen Host in einem entfernten Speichergerät unter Verwendung eines Netzwerkadapters bereitgestellt. Das Verfahren umfasst die Verwendung eines Netzwerkschnittstellen-Controllers im Netzwerkadapter, die Kommunikation mit dem Host über einen Peripheriebus und die Kommunikation mit dem entfernten Speichergerät über ein Netzwerk. Unter Verwendung eines Prozessors im Netzwerkadapter werden E/A-Transaktionen eines Bus-Speicherprotokolls vom Host empfangen, und die E/A-Transaktionen werden für den Host im entfernten Speichergerät durch Übersetzung zwischen dem Bus-Speicherprotokoll und einem Netzwerkspeicherprotokoll abgeschlossen. Das Empfangen und Abschließen der E/A-Transaktionen beinhaltet, dass der Netzwerkschnittstellen-Controller veranlasst wird, Daten der E/A-Transaktionen direkt zwischen dem entfernten Speichergerät und einem Speicher des Hosts unter Verwendung einer Null-Kopie-Übertragung zu übertragen.
-
In einer Ausführungsform ist das Bus-Speicherprotokoll Non Volatile Memory Express (NVMe), und das Netzwerkspeicherprotokoll ist NVMe over Transmission Control Protocol (NVMe-over-TCP).
-
Gemäß einer Ausführungsform der vorliegenden Erfindung ist zusätzlich ein Netzwerkadapter mit einem Netzwerkschnittstellen-Controller und einem Prozessor vorgesehen. Der Netzwerkschnittstellen-Controller soll über einen Peripheriebus mit einem Host und über ein Netzwerk mit einem entfernten Speichergerät kommunizieren. Der Prozessor soll auf dem Peripheriebus ein Peripherie-Bus-Gerät freilegen, das mit dem Host unter Verwendung eines Bus-Speicherprotokolls kommuniziert, um erste E/A-Transaktionen des Bus-Speicherprotokolls vom Host über das freiliegende Peripherie-Bus-Gerät zu empfangen und die ersten E/A-Transaktionen in dem entfernten Speichergerät abzuschließen, indem (i) zwischen den ersten E/A-Transaktionen und zweiten E/A-Transaktionen eines Netzwerkspeicherprotokolls übersetzt wird und (ii) die zweiten E/A-Transaktionen in dem entfernten Speichergerät ausgeführt werden. Zum Empfangen und Abschließen der ersten E/A-Transaktionen soll der Prozessor die Netzwerkschnittstellen-Controller veranlassen, Daten direkt zwischen dem entfernten Speichergerät und einem Speicher des Hosts unter Verwendung von Null-Kopie zu übertragen.
-
Jedes Merkmal eines Aspekts oder einer Ausführungsform kann auf andere Aspekte oder Ausführungsformen angewandt werden, und zwar in jeder geeigneten Kombination. Insbesondere kann jedes Merkmal eines Verfahrensaspekts oder einer -ausführungsform auf einen Vorrichtungsaspekt oder eine -ausführungsform angewandt werden und umgekehrt.
-
Die vorliegende Erfindung wird aus der folgenden detaillierten Beschreibung der Ausführungsformen in Verbindung mit den Zeichnungen, in denen sie dargestellt ist, besser verständlich:
-
Figurenliste
-
- 1 ist ein Blockdiagramm, das schematisch ein Rechen- und Speichersystem gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
- 2 ist ein Diagramm, das schematisch die Emulation eines Lesebefehls in dem System von 1 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
- 3 ist ein Diagramm, das schematisch die Emulation eines Schreibbefehls in dem System von 1 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt; und
- 4 ist ein Flussdiagramm, das schematisch ein Verfahren zur Ausführung eines Lesebefehls in dem System von 1 gemäß einer Ausführungsform der vorliegenden Erfindung darstellt.
-
DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
-
ÜBERSICHT
-
Die hier beschriebenen Ausführungsformen der vorliegenden Erfindung bieten verbesserte Datenspeichertechniken, bei denen ein Netzwerkadapter Daten für einen Host in einem entfernten Speichergerät speichert und abruft. Der Netzwerkadapter kommuniziert mit dem Host über einen peripheren Bus, z. B. einen Peripheral Component Interconnect Express (PCIe)-Bus, und mit dem entfernten Speichergerät über ein Netzwerk.
-
In den offengelegten Ausführungsformen „emuliert“ das Netzwerkgerät ein Bus-Speicherprotokoll (z. B. Non Volatile Memory Express - NVMe) zum Host und speichert und ruft gleichzeitig Daten im entfernten Speichergerät unter Verwendung eines Netzwerkspeicherprotokolls (z. B. NVMe over Transmission Control Protocol - NVMe-over-TCP) ab. Die folgende Beschreibung bezieht sich hauptsächlich auf die NVMe- und NVMe-over-TCP-Protokolle.
-
Der Begriff „Emulation“ bedeutet, dass der Netzwerkadapter aus Sicht des Hosts wie ein lokales Speichergerät erscheint und sich auch so verhält, z. B. als NVMe-Platte, die an den PCIe-Bus des Hosts angeschlossen ist. In Wirklichkeit empfängt der Netzwerkadapter jedoch NVMe-Befehle vom Host, übersetzt die NVMe-Befehle in NVMe-over-TCP-Befehle und führt die NVMe-over-TCP-Befehle in dem entfernten Speichergerät aus. (Die Begriffe „Befehle“ und „E/A-Transaktionen“ oder einfach „Transaktionen“ werden hier austauschbar verwendet).
-
In einigen Ausführungsformen ist der Netzwerkadapter eine Datenverarbeitungseinheit (Data Processing Unit, DPU), die einen Netzwerkschnittstellen-Controller (Network Interface Controller, NIC) und einen leistungsstarken Prozessor umfasst (der Übersichtlichkeit halber hier auch als „DPU-Prozessor“ bezeichnet). In einem Ausführungsbeispiel besteht der Prozessor aus einer Reihe von ARM-Kernen.
-
In einigen Ausführungsformen stellt der DPU-Prozessor dem Host über den PCIe-Bus ein dediziertes PCIe-Gerät zur Verfügung, das das NVMe-Protokoll emuliert. Der Host gibt NVMe-Befehle aus, z. B. Lese- und/oder Schreibbefehle, und sendet sie an das dedizierte PCIe-Gerät, ähnlich wie der Host NVMe-Befehle an eine lokale Festplatte senden würde. Der DPU-Prozessor empfängt die NVMe-Befehle vom Host über das dedizierte PCIe-Gerät und führt die NVMe-Befehle für den Host aus, indem er (i) zwischen den NVMe-Befehlen und NVMe-over-TCP-Befehlen übersetzt und (ii) die NVMe-over-TCP-Befehle in dem entfernten Speichergerät ausführt.
-
Wie im Folgenden näher erläutert wird, überträgt der NIC in der DPU die Daten der NVMe- und NVMe-over-TCP-Transaktionen direkt zwischen dem entfernten Speichergerät und einem Speicher des Hosts unter Verwendung der Null-Kopie-Übertragung. Im vorliegenden Kontext bedeutet der Begriff „Null-Kopie“, dass die Daten direkt zwischen dem Speicher des Hosts und dem entfernten Speichergerät übertragen werden, ohne Zwischenspeicherung in der DPU. Durch die kopierfreie Datenübertragung wird die Gesamttransaktionslatenz erheblich verringert und der erreichbare Durchsatz erhöht. Beispielhafte Techniken dieser Art sind in der
US-Patentanmeldung 17/338,131 mit dem Titel „Cross Bus Memory Mapping“ beschrieben, die am 3. Juni 2021 eingereicht wurde und deren Offenbarung hier durch Bezugnahme aufgenommen wird.
-
In einigen Ausführungsformen ermöglicht der DPU-Prozessor dem NIC eine solche direkte Null-Kopie-Datenübertragung, indem er einen Speicherpuffer im Host-Speicher den entsprechenden DMA-Adressen (Direct Memory Access) des NIC zuordnet. Sobald die Zuordnung erfolgt ist, kann der NIC direkt auf den Speicher des Hosts zugreifen, wobei der eigene Adressraum des Hosts verwendet wird. Techniken dieser Art werden in der
US-Patentanmeldung 17/189,303 mit dem Titel „Cross Address-Space Bridging“ beschrieben, die am 2. März 2021 eingereicht wurde und deren Offenbarung hier durch Bezugnahme aufgenommen wird.
-
In einigen Ausführungsformen führt der DPU-Prozessor einen TCP-Protokollstapel aus und baut eine TCP-Verbindung mit dem entfernten Speichergerät auf. Die DPU führt dann die NVMe-over-TCP-Transaktionen durch den Austausch von TCP-Paketen mit dem entfernten Speichergerät über die TCP-Verbindung aus. Intern in der DPU überträgt der NIC Paketdaten und Paketheader über verschiedene Pfade. Die Daten werden direkt von dem NIC zum/vom Host-Speicher übertragen, wobei wie oben erwähnt eine Null-Kopie-Übertragung verwendet wird. Die Paketköpfe werden von dem NIC zum/vom DPU-Prozessor übertragen, um die TCP-Verbindung zu beenden und anderweitig zu bearbeiten. Durch diese Technik entfällt das Kopieren von Paketdaten zwischen dem NIC und dem DPU-Prozessor, wodurch die Latenzzeit verringert und der Durchsatz verbessert wird.
-
Bei der hier beschriebenen Konfiguration durchlaufen die Daten der E/A-Transaktionen normalerweise nicht den DPU-Prozessor. Daher ist in einigen Ausführungsformen der NIC für die Berechnung und Überprüfung der datenabhängigen zyklischen Redundanzprüfcodes („CRCs“) zuständig. Bei der Übertragung berechnet der NIC normalerweise CRCs über die Daten und sendet die Daten und die entsprechenden CRCs an das entfernte Speichergerät. Beim Empfang empfängt der NIC in der Regel Daten und entsprechende CRCs vom entfernten Speichergerät, berechnet CRCs über die empfangenen Daten und prüft, ob die berechneten CRCs mit den empfangenen CRCs übereinstimmen.
-
Es werden mehrere Beispielimplementierungen der hier beschriebenen Techniken beschrieben. Ergänzende Techniken, wie z. B. Fallback-Schemata, bei denen der DPU-Prozessor Zugriff auf die Daten der E/A-Transaktionen erhält, werden ebenfalls beschrieben. Solche Fallback-Schemata werden z. B. für die Implementierung der TCP-Wiederholung und für die Wiederherstellung von CRC-Fehlern aufgrund der Ankunft von Paketen außerhalb der Reihenfolge verwendet.
-
BESCHREIBUNG DES SYSTEMS
-
1 ist ein Blockdiagramm, das schematisch ein Rechen- und Speichersystem 20 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Das System 20 umfasst einen Hochleistungsnetzwerkadapter 24, der auch als Datenverarbeitungseinheit (DPU) bezeichnet wird und einen Host 28 bedient. Die DPU 24 kommuniziert mit dem Host 28 über einen Peripheriebus, im vorliegenden Beispiel einen Peripheral Component Interconnect express (PCIe)-Bus 36.
-
Die DPU 24 versorgt den Host 28 mit Datenspeicherdiensten, möglicherweise neben anderen Aufgaben, z. B. zusätzlich zu den herkömmlichen Netzwerkdiensten. Im Beispiel von 1 verbindet die DPU 24 den Host 28 mit einem Netzwerk 32 und speichert und ruft Daten für den Host 28 über das Netzwerk 32 in einem entfernten Speichergerät 40 ab.
-
Im vorliegenden Beispiel umfasst der Host 28 eine Host-CPU 44 und einen Speicher 48. Auf der Host-CPU 44 können je nach Anwendungsfall verschiedene Softwareanwendungen („Apps“) 52 laufen. Neben anderen Aufgaben führen die Anwendungen 52 Eingabe-/Ausgabe-Transaktionen (E/A-Transaktionen) durch, z. B. Transaktionen, die Daten in Dateien oder Objekte schreiben, Daten aus Dateien oder Objekten lesen oder Dateien, Verzeichnisse, Objekte und Ähnliches erstellen, ändern oder löschen. Im Allgemeinen können E/A-Transaktionen von jeder Software ausgeführt werden, die auf der Host-CPU 44 läuft, z. B. von virtuellen Maschinen (VMs), Prozessen, Containern, vom Betriebssystem des Hosts oder von jeder anderen Software.
-
In der Ausführungsform von 1 führt die Host-CPU 44 einen NVMe-Treiber 56 aus, der Datenspeicherdienste für die verschiedenen Arten von Software bereitstellt, die auf der Host-CPU laufen, z. B. für Anwendungen 52. Der Treiber 56 speichert und ruft Daten für Anwendungen 52 ab, indem er NVMe-Befehle an ein oder mehrere NVMe-Geräte ausgibt, die an den PCIe-Bus 36 angeschlossen sein können.
-
Insbesondere gibt der Treiber 56 NVMe-Befehle an ein dediziertes NVMe-PCIe-Gerät 60 aus, das von der DPU 24 freigelegt wird, wie im Folgenden erläutert wird.
-
Aus Gründen der Übersichtlichkeit ist das PCIe-Gerät 60 in der Abbildung innerhalb des Hosts 28 dargestellt, um die Interaktion zwischen dem Gerät 60 und der Host-CPU 44 zu verdeutlichen. In Wirklichkeit handelt es sich bei dem PCIe-Gerät 60 jedoch um eine logische Schnittstelle, die dem Host 28 von der DPU 24 über den Bus 36 bereitgestellt wird. Die Begriffe „PCIe-Gerät“ und „PCIe-Schnittstelle“ können daher austauschbar verwendet werden. Das PCIe-Gerät 60 kann eine physische PCIe-Funktion oder eine virtuelle Funktion umfassen. Die Interaktion zwischen der Host-CPU 44 und dem PCIe-Gerät 60 kann mit Standard-Betriebssystemtreibern oder als herstellerspezifischer Treiber implementiert werden.
-
Wie in zu sehen ist, umfasst die DPU 24 einen Netzwerkschnittstellen-Controller (NIC) 64 und einen DPU-Prozessor 68. In einem Ausführungsbeispiel wird der NIC 64 mit einer anwendungsspezifischen integrierten Schaltung (ASIC) implementiert, und der DPU-Prozessor 68 umfasst mehrere miteinander verbundene ARM-Prozessorkerne, auf denen geeignete Software läuft. Alternativ kann aber auch jede andere geeignete Implementierung verwendet werden.
-
In einigen Ausführungsformen emuliert die DPU 24 das NVMe-Speicherprotokoll gegenüber dem Host 28. Für die tatsächliche Ausführung der E/A-Transaktionen kommuniziert die DPU 24 jedoch mit dem entfernten Speichergerät 40 über das Netzwerk 32 unter Verwendung von NVMe-over-TCP. Die Funktionsweise der DPU 24 wird im Folgenden ausführlich erläutert. Im Allgemeinen überträgt der NIC 64 die Daten der NVMe- und NVMe-over-TCP-Transaktionen direkt zwischen dem entfernten Speichergerät 40 und dem Host-Speicher 48, wobei eine Null-Kopie-Übertragung verwendet wird. Der DPU-Prozessor 68 ermöglicht (oder veranlasst) der NIC 64, diese Null-Kopie-Datenübertragung durchzuführen, indem er einen Speicherpuffer im Host-Speicher 48 den entsprechenden DMA-Adressen der NIC 64 zuordnet. Durch diese Zuordnung kann der NIC 64 Paketdaten direkt im Host-Speicher lesen und schreiben, wobei der Adressraum des Hosts verwendet wird.
-
Die in 1 gezeigten Konfigurationen des Systems 20 und seiner Komponenten, z. B. DPU 24 und Host 28, sind Beispielkonfigurationen, die lediglich der konzeptionellen Klarheit halber dargestellt sind. In alternativen Ausführungsformen können beliebige andere geeignete Konfigurationen verwendet werden. Die verschiedenen Elemente des Systems 20 und seiner Komponenten, z. B. DPU 24 und Host 28, können mit Hilfe von Software, geeigneter Hardware, wie z. B. einem oder mehreren anwendungsspezifischen integrierten Schaltkreisen (ASIC, Engl. „Application-Specific Integrated Circuit“) oder feldprogrammierbaren Gate-Arrays (FPGA, Engl. „Field-Programmable Gate Arrays"), oder mit einer Kombination aus Software- und Hardwareelementen implementiert werden.
-
Typischerweise bestehen die Host-CPU 44 und der DPU-Prozessor 68 aus programmierbaren Prozessoren, die in Software programmiert sind, um die hier beschriebenen Funktionen auszuführen. Die Software kann auf jeden der Prozessoren in elektronischer Form heruntergeladen werden, z. B. über ein Netzwerk, oder sie kann alternativ oder zusätzlich auf nicht-übertragbaren, greifbaren Medien, wie z. B. einem magnetischen, optischen oder elektronischen Speicher, bereitgestellt und/oder gespeichert werden.
-
SPEICHEREMULATION OHNE KOPIEREN VON DATEN ZWISCHEN NIC UND DPU-PROZESSOR
-
Wie bereits erwähnt, empfängt die DPU 24 NVMe-Befehle vom Host 28 über das PCIe-Gerät 60, übersetzt die NVMe-Befehle in NVMe-over-TCP-Befehle und führt die NVMe-over-TCP-Befehle im entfernten Speichergerät 40 aus. In einigen Ausführungsformen überträgt der NIC 64 Paketdaten (im Gegensatz zu Headern und/oder anderen Metadaten) direkt zwischen dem Host 28 und dem entfernten Speichergerät 40. Während des normalen Betriebs durchlaufen die Paketdaten nicht den DPU-Prozessor 68, so dass es nicht notwendig ist, die Daten zwischen NIC 64 und DPU-Prozessor 68 zu kopieren oder anderweitig zu übertragen. Diese Lösung führt zu einer erheblichen Verringerung der Latenzzeit, sowohl bei der Übertragung (z. B. beim Schreiben von Daten vom Host zum entfernten Speichergerät) als auch beim Empfang (z. B. beim Lesen von Daten vom entfernten Speichergerät zum Host).
-
2 ist ein Diagramm, das schematisch die Emulation eines Lesebefehls im System 20 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Die Abbildung konzentriert sich auf eine bestimmte Phase der Ausführung des Lesebefehls - die Übertragung der angeforderten Daten vom entfernten Speichergerät 40 über die DPU 24 zum Host 28. Eine vollständige Beschreibung des Lesevorgangs, einschließlich der vorangehenden Phasen, ist in 4 unten dargestellt.
-
In Übereinstimmung mit NVMe-over-TCP sendet das entfernte Speichergerät 40 die angeforderten Daten in einer oder mehreren TCP-Protokolldateneinheiten (PDUs, Engl. „TCP Protocol Data Units“) an die DPU 24. (Die Begriffe PDU und Paket werden hier manchmal austauschbar verwendet.) Jede PDU umfasst einen Paketkopf und Paketdaten. Darüber hinaus erzeugt und sendet das entfernte Speichergerät 40 CRC-Pakete, wobei jedes CRC-Paket einen CRC-Code enthält, der über eine oder mehrere PDUs berechnet wird.
-
Die Pfade, die von den PDU-Daten, den PDU-Kopfzeilen und den CRC-Paketen durchlaufen werden, sind in durch fette Pfeile dargestellt. Wie zu sehen ist, werden die PDU-Daten vom NIC 64 empfangen und direkt in den Host-Speicher 48 übertragen, ohne den DPU-Prozessor 68 zu passieren. Die PDU-Kopfzeilen und CRC-Pakete werden von NIC 64 empfangen und an den DPU-Prozessor 68 übertragen.
-
Der DPU-Prozessor 68 führt normalerweise einen TCP-Protokollstapel aus und dient als TCP-Endpunkt der TCP-Verbindung zwischen der DPU 24 und dem entfernten Speichergerät 40. Im Rahmen der Ausführung des Protokollstapels beendet der DPU-Prozessor 68 die TCP-Verbindung, hält den Zustand der TCP-Verbindung aufrecht, indem er eine geeignete Zustandsmaschine ausführt, usw. Für die Durchführung dieser Aufgaben reicht es aus, wenn der DPU-Prozessor 68 die PDU-Kopfzeilen und die CRC empfängt, nicht aber die PDU-Daten.
-
3 ist ein Diagramm, das schematisch die Emulation eines Schreibbefehls im System 20 gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Auch hier konzentriert sich die Abbildung auf eine bestimmte Phase der Ausführung des Schreibbefehls - die Übertragung der zu speichernden Daten vom Host 28 über die DPU 24 zum entfernten Speichergerät 40.
-
In dem Beispiel von sendet die DPU 24 die Daten in einer oder mehreren TCP-PDUs an das entfernte Speichergerät 40. Jede PDU umfasst einen Paketkopf und Paketdaten. Darüber hinaus erzeugt und sendet die DPU 24 CRC-Pakete, wobei jedes CRC-Paket einen CRC-Code enthält, der über eine oder mehrere PDUs berechnet wird.
-
Die fettgedruckten Pfeile in zeigen die verschiedenen Wege, die die PDU-Daten, die PDU-Kopfzeilen und die CRC-Pakete durchlaufen. Wie zu sehen ist, werden die PDU-Daten von dem NIC 64 direkt vom Host-Speicher 48 zum entfernten Speichergerät 40 übertragen. Die PDU-Kopfzeilen werden von NIC 64 vom DPU-Prozessor 68 an das entfernte Speichergerät 40 übertragen. Die CRC-Pakete werden in NIC 64 erzeugt und an das entfernte Speichergerät 40 gesendet.
-
Die Beispiele in den und zeigen, dass bei der Ausführung von Lese- und Schreibbefehlen unter Verwendung der offengelegten Techniken die PDU-Daten nicht durch den DPU-Prozessor 68 laufen. Somit entfallen Datenkopiervorgänge zwischen NIC 64 und DPU-Prozessor 68.
-
ist ein Flussdiagramm, das schematisch ein Verfahren zur Ausführung eines Lesebefehls in dem System von gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Das Verfahren beginnt mit der Ausgabe eines NVMe-Lesebefehls durch die Host-CPU 44 in einer Befehlsausgabestufe 80. Typischerweise wird der NVMe-Befehl vom NVMe-Treiber 56 an das NVMe-PCIe-Gerät 60 ( ) gesendet. Der Befehl spezifiziert typischerweise (i) Adressen (in einem Adressraum eines NVMe-Geräts, das von der DPU 24 emuliert wird), von denen die angeforderten Daten gelesen werden sollen, und (ii) Adressen eines Speicherpuffers im Host-Speicher 48, in den die Daten geholt werden sollen.
-
In einer Zuordnungsstufe 84 ordnet der DPU-Prozessor 68 die Adressen des Host-Speicherpuffers, die im NVMe-Lesebefehl angegeben wurden, den entsprechenden DMA-Adressen (Direct Memory Access) der DPU-NIC 64 zu. Diese Zuordnung ermöglicht es DPU NIC 64, Daten direkt in den entsprechenden Puffer im Host-Speicher 48 zu schreiben und dabei den Adressraum der Host-CPU 44 selbst zu nutzen. In einigen Ausführungsformen ordnet der DPU-Prozessor 68 die physischen Adressen des Speicherpuffers im Host-Speicher 48 den DMA-Adressen der DPU-NIC 64 zu. Die Zuordnung kann vordefiniert sein oder bei Bedarf über einen Mechanismus wie NIC On-Demand-Paging erfolgen. Auf diese Weise kann der DPU-Prozessor 68 den DPU-NIC 64 anweisen, die abgerufenen Daten an die entsprechenden physischen Adressen im Host-Speicher 44 zu schreiben.
-
In einer Protkollübersetzungsstufe 88 übersetzt der DPU-Prozessor 68 den NVMe-Lesebefehl in eine NVMe-over-TCP-Leseanforderung. Die Übersetzung ist typischerweise eine Eins-zu-Eins-Übersetzung, d. h. ein gegebener NVMe-Lesebefehl wird in eine entsprechende NVMe-over-TCP-Leseanforderung übersetzt, aber die offengelegten Techniken sind in keiner Weise auf eine Eins-zu-Eins-Übersetzung beschränkt. In einer Anfragesendestufe 92 sendet die DPU NIC 64 die NVMe-over-TCP-Leseanforderung über das Netzwerk 32 an das entfernte Speichergerät 40.
-
In einer Antwortverarbeitungsstufe 96 empfängt die DPU NIC 64 ein Antwortpaket vom entfernten Speichergerät 40 als Antwort auf die NVME-over-TCP-Leseanforderung. Das Antwortpaket enthält u. a. die angeforderten Daten. DPU NIC 64 schreibt die Daten direkt an die entsprechenden Adressen im Host-Speicher 48 (an die in Stufe 84 zugeordneten Adressen). Weder die Host-CPU 44 noch der DPU-Prozessor 44 sind an dieser direkten Übertragung von Daten beteiligt.
-
Der in gezeigte Verfahrensablauf ist ein Beispiel, das nur aus Gründen der konzeptionellen Klarheit dargestellt ist. In alternativen Ausführungsformen können die offengelegten Techniken mit jedem anderen geeigneten Ablauf durchgeführt werden.
-
So kann beispielsweise ein NVMe-Schreibbefehl von der DPU 24 auf ähnliche Weise verarbeitet werden. Bei einem Schreibbefehl spezifiziert der Befehl (i) einen Host-Speicherpuffer, der die zu schreibenden Daten enthält, und (ii) Adressen (in einem Adressraum eines NVMe-Geräts, das von DPU 24 emuliert wird), in die die Daten geschrieben werden sollen. Der DPU-Prozessor 68 ordnet den Host-Speicherpuffer den jeweiligen DMA-Adressen der DPU-NIC 64 zu. Mithilfe dieser Zuordnung kann die DPU NIC 64 die Daten direkt aus dem Host-Speicherpuffer in das entfernte Speichergerät 40 schreiben. Bei der Verarbeitung des NVMe-Schreibbefehls setzt der DPU-Prozessor 68 den NVMe-Schreibbefehl in eine NVMe-over-TCP-Schreibanforderung um. Die NVMe-over-TCP-Schreibanforderung überträgt die zu schreibenden Daten. DPU NIC 64 schreibt die Daten aus dem Host-Speicherpuffer in das entfernte Speichergerät, indem es diese Schreibanforderung über das Netzwerk 32 sendet.
-
Typischerweise verwendet die DPU 24 bei der Ausführung des Flusses von oder des oben beschriebenen NVME-Schreibbefehlsflusses verschiedene Pfade für Paketdaten und Paketheader, wie in und beschrieben.
-
AUSLAGERUNG VON CRC-VORGÄNGEN
-
Wie hier ausführlich erläutert, werden die Daten bei der Übertragung von DPU 24 zwischen dem Host 28 und dem entfernten Speichergerät 40 über die DPU-NIC 64 übertragen und erreichen normalerweise nicht den DPU-Prozessor 68. Daher werden in einigen Ausführungsformen die Berechnung und Überprüfung der zyklischen Redundanzprüfung (CRC) (die per Definition von den Daten abhängt) von NIC 64 durchgeführt. Diese Lösung vermeidet die Übertragung von Daten vom NIC 64 zum DPU-Prozessor 68 für CRC-Operationen und die daraus resultierende Verschlechterung der Latenz und des Durchsatzes.
-
In einer Ausführungsform berechnet der NIC 64 CRCs, wenn er Schreibbefehle für den Host 28 im entfernten Speichergerät 40 ausführt. Typischerweise (siehe ) empfängt NIC 64 die Daten des Schreibbefehls vom Host 28 und PDU-Header vom DPU-Prozessor 68. NIC 64 setzt NVMe-over-TCP-Pakete aus den Daten und den Headern zusammen, berechnet CRC über die Daten einer Gruppe von Paketen und sendet die NVMe-over-TCP-Pakete an das entfernte Speichergerät.
-
Zusätzlich oder alternativ prüft NIC 64 die Korrektheit von CRCs, die vom entfernten Speichergerät empfangen werden, als Teil der Ausführung von Lesebefehlen. Typischerweise (siehe ) empfängt NIC 64 NVMe-over-TCP-Pakete vom entfernten Speichergerät 40. Die NVMe-over-TCP-Pakete umfassen PDU-Daten, PDU-Header und CRCs, die vom entfernten Speichergerät über die PDU-Daten berechnet wurden. NIC 64 berechnet CRCs über die empfangenen Daten und prüft, ob die berechneten CRCs mit den empfangenen CRCs übereinstimmen.
-
Eine Abweichung zwischen einem empfangenen CRC und einem entsprechenden berechneten CRC (einem vom NIC über die empfangenen Daten berechneten CRC) ist ein Hinweis auf einen Empfangsfehler oder in einigen Fällen auf Pakete, die nicht in der richtigen Reihenfolge ankommen. Wenn eine CRC-Fehlanpassung („CRC-Fehler“) festgestellt wird, gibt der NIC 64 in der Regel eine Fehlermeldung an den DPU-Prozessor 68 aus.
-
FALLBACK-SZENARIEN MIT DATENZUGRIFF DURCH DPU-PROZESSOR
-
In den hier beschriebenen Ausführungsformen erreichen die PDU-Daten den Prozessor 68 der DPU während der normalen Verarbeitung von Lese- und Schreibbefehlen nicht. Dieses Merkmal führt zu einer erheblichen Verbesserung des Durchsatzes und der Latenzzeit, da innerhalb der DPU 24 keine großen Datenmengen zwischen der Netzwerkkarte 64 und dem Prozessor 68 kopiert werden müssen. In einigen abnormalen Szenarien erhält der DPU-Prozessor 68 jedoch zumindest vorübergehend Zugriff auf einen Teil der Daten. Dieser Zugriff wird z. B. für die Durchführung von Aktionen auf TCP-Ebene benötigt, die von den Daten abhängen. Solche Aktionen sind relativ selten, so dass die entstehende Latenzzeit akzeptabel ist.
-
Entschärfung von CRC-Fehlern, die durch die Ankunft von Paketen in falscher Reihenfolge verursacht werden
-
Ein Beispielszenario dieser Art bezieht sich auf CRC-Fehler aufgrund von Paketen, die nicht in der richtigen Reihenfolge ankommen. Betrachten wir ein Szenario, in dem die DPU 24 eine Folge von NVMe-over-TCP-Paketen empfängt und darüber hinaus einen CRC-Wert erhält, der über die Folge berechnet wurde. Aus irgendeinem Grund kommen jedoch einige der Pakete in der Sequenz in einer anderen Reihenfolge an als die, in der sie vom entfernten Speichergerät gesendet wurden. Ein solches Ereignis führt zu einer CRC-Fehlanpassung an der NIC 64 (da der NIC die CRC gemäß der Reihenfolge des Eintreffens der Pakete berechnet, während das entfernte Speichergerät die CRC gemäß der Reihenfolge der Übertragung der Pakete berechnet).
-
Grundsätzlich ist es möglich, dass DPU 24 einfach die gesamte Folge von Paketen als fehlgeschlagen betrachtet. Diese Lösung ist jedoch äußerst verschwenderisch und erfordert eine umfangreiche Neuübertragung von Daten. Außerdem erfordert ein CRC-Fehler in der Regel eine vollständige NVME-over-TCP-Neuverbindung und nicht nur eine erneute Übertragung. In einigen Ausführungsformen entschärft die DPU 24 dieses Szenario ohne erneute Übertragung, indem der DPU-Prozessor 68 auf die Daten im Host-Speicher 48 zugreift. Bei dieser Lösung wird die Tatsache ausgenutzt, dass die Paketdaten im Host-Speicher entsprechend den Paketfolgenummern geordnet sind, unabhängig davon, ob die Pakete in der richtigen Reihenfolge angekommen sind oder nicht. Der NIC 64, der paketweise arbeitet und keine Kenntnis von den Paketfolgenummern hat, verfügt nicht über diese Ordnungsinformationen.
-
In einigen Ausführungsformen löst der NIC 64 bei Feststellung eines CRC-Fehlers den DPU-Prozessor 68 aus, um zu versuchen, den Fehler zu beheben. Der DPU-Prozessor 68 greift auf die Daten der Paketfolge im Host-Speicher 48 zu und berechnet den CRC über die Daten neu, aber diesmal mit dem Wissen, dass die Daten in der richtigen Reihenfolge organisiert sind. Wenn der vom DPU-Prozessor neu berechnete CRC-Wert mit dem CRC-Wert übereinstimmt, der vom entfernten Speichergerät empfangen wurde, erklärt der DPU-Prozessor 68 die CRC-Prüfung für erfolgreich, und die PDU-Daten können sicher an die anfordernde Anwendung 52 übermittelt werden. Wenn der vom DPU-Prozessor neu berechnete CRC-Wert immer noch nicht mit dem vom entfernten Speichergerät empfangenen CRC-Wert übereinstimmt, erklärt der DPU-Prozessor die Auflösung der CRC-Fehlanpassung für fehlgeschlagen und kehrt zur NVME-over-TCP-Wiederverbindung und -Übertragung zurück.
-
Erneute Übertragung von TCP-Paketen
-
Ein weiteres Beispielszenario bezieht sich auf die erneute Übertragung von TCP-Paketen. Man stelle sich ein Szenario vor, in dem die DPU 24 eine Folge von NVMe-over-TCP-Paketen an das entfernte Speichergerät 40 übertragen hat, aber ein bestimmtes Paket von dem entfernten Speichergerät nicht korrekt empfangen wurde und erneut übertragen werden muss. Die DPU kann z. B. eine NACK-Nachricht empfangen, die das Paket anzeigt, das erneut übertragen werden muss. In der Regel kann der NIC 64 ein Paket nicht selbstständig erneut übertragen, da er (i) nicht im Besitz der Daten des fehlgeschlagenen Pakets ist und (ii) die erneute Übertragung nicht nur die erneute Übertragung der Daten, sondern auch die Rekonstruktion des Zustands der TCP-Verbindung zum Zeitpunkt der Übertragung des ursprünglichen Pakets erfordert.
-
In einigen Ausführungsformen wird daher die erneute Übertragung von Paketen vom DPU-Prozessor 68 durchgeführt, der, wie oben erläutert, den TCP-Protokollstapel ausführt. In einer Ausführungsform ruft der DPU-Prozessor die PDU-Daten des Pakets aus dem Host-Speicher 48 ab, rekonstruiert den TCP-Verbindungsstatus aus seinem intern ausgeführten Protokollstapel und sendet dann das Paket mit dem korrekten Status erneut.
-
Obwohl die hier beschriebenen Ausführungsformen hauptsächlich die NVMe- und NVMe-over-TCP-Protokolle betreffen, können die hier beschriebenen Verfahren und Systeme auch mit anderen Bus-Speicherprotokollen und Netzwerkvarianten verwendet werden, z. B. iSCSI und iSCSIover-TCP.
-
Es wird daher deutlich, dass die oben beschriebenen Ausführungsformen als Beispiele angeführt sind und dass die vorliegende Erfindung nicht auf das beschränkt ist, was hierin besonders gezeigt und beschrieben wurde. Vielmehr umfasst der Umfang der vorliegenden Erfindung sowohl Kombinationen und Unterkombinationen der verschiedenen hierin beschriebenen Merkmale als auch Variationen und Modifikationen davon, die dem Fachmann beim Lesen der vorstehenden Beschreibung einfallen würden und die im Stand der Technik nicht offenbart sind. Dokumente, die durch Verweis in die vorliegende Patentanmeldung aufgenommen wurden, sind als integraler Bestandteil der Anmeldung zu betrachten, mit der Ausnahme, dass in dem Maße, in dem Begriffe in diesen aufgenommenen Dokumenten in einer Weise definiert werden, die im Widerspruch zu den in der vorliegenden Beschreibung explizit oder implizit gemachten Definitionen steht, nur die Definitionen in der vorliegenden Beschreibung zu berücksichtigen sind.
-
Es versteht sich, dass die oben beschriebenen Aspekte und Ausführungsformen nur beispielhaft sind und dass im Rahmen der Ansprüche Änderungen im Detail vorgenommen werden können.
-
Jede Vorrichtung, jedes Verfahren und Merkmal, das in der Beschreibung und (gegebenenfalls) in den Ansprüchen und Zeichnungen offenbart wird, kann unabhängig oder in jeder geeigneten Kombination bereitgestellt werden.
-
Die in den Ansprüchen enthaltenen Bezugszeichen dienen nur der Veranschaulichung und haben keine einschränkende Wirkung auf den Umfang der Ansprüche.
-
ZITATE ENTHALTEN IN DER BESCHREIBUNG
-
Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
-
Zitierte Patentliteratur
-
- US 9696942 [0002]
- US 9727503 [0002]
- US 17338131 [0023]
- US 17189303 [0024]