DE112021000196T5 - Paketverarbeitung durch eine programmierbare Netzwerkschnittstelle - Google Patents

Paketverarbeitung durch eine programmierbare Netzwerkschnittstelle Download PDF

Info

Publication number
DE112021000196T5
DE112021000196T5 DE112021000196.5T DE112021000196T DE112021000196T5 DE 112021000196 T5 DE112021000196 T5 DE 112021000196T5 DE 112021000196 T DE112021000196 T DE 112021000196T DE 112021000196 T5 DE112021000196 T5 DE 112021000196T5
Authority
DE
Germany
Prior art keywords
nvme
node
nvmeof
connection
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112021000196.5T
Other languages
English (en)
Inventor
Marjan Radi
Dejan Vucinic
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE112021000196T5 publication Critical patent/DE112021000196T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/163In-band adaptation of TCP data exchange; In-band control procedures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0613Improving I/O performance in relation to throughput
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0634Configuration or reconfiguration of storage systems by changing the state or mode of one or more devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/18Automatic repetition systems, e.g. Van Duuren systems
    • H04L1/1867Arrangements specially adapted for the transmitter end
    • H04L1/188Time-out mechanisms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/36Flow control; Congestion control by determining packet size, e.g. maximum transfer unit [MTU]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/60Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/22Parsing or analysis of headers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/28Timers or timing mechanisms used in protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • G06F3/0635Configuration or reconfiguration of storage systems by changing the path, e.g. traffic rerouting, path reconfiguration
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/12Arrangements for detecting or preventing errors in the information received by using return channel
    • H04L1/16Arrangements for detecting or preventing errors in the information received by using return channel in which the return channel carries supervisory signals, e.g. repetition request signals
    • H04L1/18Automatic repetition systems, e.g. Van Duuren systems
    • H04L1/1829Arrangements specially adapted for the receiver end
    • H04L1/1848Time-out mechanisms

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

Eine programmierbare Netzwerkschnittstelle für einen Server schließt mindestens einen Speicher ein, in dem Verbindungsparameter für zuvor aktive NVMe-Verbindungen (Non-Volatile Memory Express over Fabric) mit verschiedenen NVMe-Knoten gespeichert sind. Eine NVMeoF-Verbindungsanforderung wird von einem NVMe-Knoten empfangen, und es wird bestimmt, ob der NVMe-Knoten mit Verbindungsparametern verbunden ist, die in dem mindestens einen Speicher gespeichert sind. Als Reaktion auf die Bestimmung, dass der NVMe-Knoten mit den in dem mindestens einen Speicher gespeicherten Verbindungsparametern verbunden ist, wird eine neue NVMeoF-Verbindung für die Kommunikation mit dem NVMe-Knoten unter Verwendung der gespeicherten Verbindungsparameter hergestellt. In einem Gesichtspunkt wird ein Adressraum des Servers partitioniert, und jeder Partition des Adressraums wird eine NVMe Anforderungswarteschlange zugewiesen. Mindestens eine Adresse wird in einer empfangenen NVMeoF-Nachricht identifiziert und eine Anforderungswarteschlange für die Durchführung einer in der NVMeoF-Nachricht eingeschlossenen NVMe-Anforderung bestimmt.

Description

  • QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
  • Diese Anmeldung beansprucht die Priorität der vorläufigen US-Anmeldung Nr. 63/124.597 mit dem Titel „PACKET PROCESSING BY PROGRAMMABLE NETWORK INTERFACE“ (Anw. Aktenzeichen-Nr. WDA-5230P-US), die am 11. Dezember 2020 eingereicht wurde und hiermit durch Bezugnahme in vollem Umfang einbezogen wird. Diese Anmeldung beansprucht auch die Priorität der US-Anmeldung Nr. 17/172.513 mit dem Titel „PACKET PROCESSING BY PROGRAMMABLE NETWORK INTERFACE“ (Anw. Aktenzeichen-Nr. WDA-5230-US), die am 10. Februar 2021 eingereicht wurde und hiermit durch Bezugnahme in vollem Umfang einbezogen wird.
  • HINTERGRUND
  • Die aktuellen Trends in den Bereichen Cloud Computing, Big Data und E/A-intensive Anwendungen haben den Bedarf an leistungsstarken verteilten gemeinsamen Speichersystemen in Rechenzentren in Bezug auf geringe Latenzzeiten, hohen Durchsatz und Bandbreite erhöht. Aufstrebende hochleistungsfähige Speichervorrichtungen mit nichtflüchtigem Speicher (Non-Volatile Memory Express, NVMe), wie beispielsweise Festkörperlaufwerke (Solid State Drives, SSDs), werden aufgrund ihrer höheren Leistung in Bezug auf Eingabe-/Ausgabevorgänge pro Sekunde (IOPS) immer häufiger eingesetzt. Obwohl NVMe ursprünglich für die Verwendung mit einer PCIe-Schnittstelle (Peripheral Component Interconnect Express) innerhalb eines Computersystems entwickelt wurde, können neuere NVMe-Erweiterungen wie NVMe over Fabric (NVMeoF) den entfernten Zugriff auf NVMe-Vorrichtungen unterstützen, wie beispielsweise mit Ferndirektspeicherzugriff (RDMA) (z. B. RDMA over Converged Ethernet (RoCE) und iWarp) und Transport-Fabrics von Fibre Channel (FC).
  • Obwohl sowohl RoCe als auch iWARP eine hohe Leistung unterstützen, benötigen sie RDMA-fähige Vorrichtungen und teure DCB-fähige Schalter (Data Center Bridging), die möglicherweise nicht ohne weiteres verfügbar sind und die Skalierbarkeit einschränken können. NVMeoF, das das Übertragungskontrollprotokoll (TCP) verwendet, ermöglicht es dagegen, NVMe über bestehende Ethernet-Netzwerke in Rechenzentren zu betreiben und dabei das am weitesten verbreitete Transportprotokoll zu verwenden. Die Effizienz solcher NVMeoF-Systeme, die TCP verwenden, hängt jedoch von der Leistung des TCP-Stapels ab. In dieser Hinsicht kann die Verarbeitung von TCP-Paketen sehr prozessorintensiv sein, was zu einem großen Leistungsnachteil führt, der sich in größeren Latenzzeiten und geringerem Durchsatz niederschlägt. Während die Netzwerkbandbreite weiter zunimmt, schränkt die Ineffizienz von Standard-Netzwerkschnittstellen (z. B. Netzwerkschnittstellenkarten (NICs)) zur Netzwerkverarbeitung die Speicher- und Rechenleistung von Rechenzentren ein.
  • In der Tat verbraucht der TCP-Stapel im Kernelraum den größten Teil der CPU-Zyklen für zustandsabhängige TCP-Vorgänge und Verbindungsanordnungen. Dies kann zu einem erheblichen Aufwand bei der Verarbeitung und zu Leistungseinbußen führen, insbesondere bei relativ kurzlebigen Verbindungen und latenzempfindlichen Flüssen von nur wenigen Paketen (z. B. „Bursty-Mice-Flows“), wie sie in Rechenzentren üblich sind.
  • In einigen Fällen kann der Kernel-Bypass dazu verwendet werden, die Verarbeitung von Paketen aus dem Kernelraum des Servers an eine Anwendung zu übertragen, die im Benutzerraum des Servers ausgeführt wird. Der Kernel-Bypass kann jedoch im Allgemeinen nicht mit modernen Ethernet-Geschwindigkeiten wie 100 oder 200 Gbit/s mithalten oder die Anforderungen der heutigen Rechenzentren an die Ressourcenzuweisung pro Fluss unterstützen. Der Hauptgrund für diese begrenzte TCP-Leistungsverbesserung trotz der Verwendung von Kernel-Bypass ist der Aufwand für komplexe Protokollvorgänge zur Aufrechterhaltung der Protokollspezifikationen. Es gibt auch einige Bemühungen, einige grundlegende Vorgänge von einem Prozessor des Servers auszulagern, wie beispielsweise die Verarbeitung von Prüfsummen und die Segmentierung von Paketen. Doch üblicherweise ist die Verarbeitung des TCP-Stapels im Kernel immer noch ein Leistungsengpass. Außerdem stellen diese Ansätze kein flexibles Verschieben leistungsbezogener Vorgänge der Paketverarbeitung bereit. Insbesondere unterstützen diese Ansätze keine schnelle Anpassung an die Entwicklung der verschiedenen Protokolle und an die sich ändernden Anforderungen der Anwendungen, die von den Knoten in den heutigen Rechenzentren ausgeführt werden.
  • Figurenliste
  • Die Merkmale und Vorteile der Ausführungsformen der vorliegenden Offenbarung werden aus der nachstehenden detaillierten Beschreibung in Verbindung mit den Zeichnungen deutlicher hervorgehen. Die Zeichnungen und die damit verbundenen Beschreibungen sind bereitgestellt, um Ausführungsformen der Offenbarung zu veranschaulichen, und nicht um den Schutzumfang der Patentansprüche einzuschränken.
    • 1 veranschaulicht eine beispielhafte Netzwerkumgebung zur Implementierung von Paketverarbeitungs-Abladungen gemäß einer oder mehrerer Ausführungsformen.
    • 2 ist ein Blockdiagramm von beispielhaften Komponenten, die in einer programmierbaren Netzwerkschnittstelle gemäß einer oder mehrerer Ausführungsformen eingeschlossen sind.
    • 3 ist ein Beispiel einer programmierbaren Pipeline einer programmierbaren Netzwerkschnittstelle gemäß einer oder mehrerer Ausführungsformen.
    • 4 ist ein Beispiel für den Aufbau einer Verbindung zwischen nichtflüchtigem Express-Speicher über Fabric (NVMeoF) und Übertragungskontrollprotokoll (TCP) gemäß einer oder mehreren Ausführungsformen.
    • 5 ist ein Beispiel für eine NVMeoF-Schreibtransaktion gemäß einer oder mehrerer Ausführungsformen.
    • 6 ist ein Flussdiagramm eines NVMeoF/TCP-Verbindungsaufbau-Prozesses gemäß einer oder mehrerer Ausführungsformen.
    • 7 ist ein Flussdiagramm eines Prozesses zur Verwaltung von NVMe-Anforderungen gemäß einer oder mehrerer Ausführungsformen.
    • 8 ist ein Flussdiagramm eines Prozesses zur erneuten Übertragung von NVMeoF-Nachrichten gemäß einer oder mehrerer Ausführungsformen.
  • DETAILLIERTE BESCHREIBUNG
  • In der folgenden detaillierten Beschreibung werden zahlreiche spezifische Details dargelegt, um ein umfassendes Verständnis der vorliegenden Offenbarung bereitzustellen. Jedoch wird für den Durchschnittsfachmann offensichtlich sein, dass die verschiedenen offenbarten Ausführungsformen ohne einige dieser spezifischen Details umgesetzt werden können. In anderen Fällen wurden gut bekannte Strukturen und Techniken nicht im Detail gezeigt, um zu vermeiden, dass die verschiedenen Ausführungsformen unnötig verkompliziert werden.
  • Beispielhafte Netzwerkumgebungen
  • 1 veranschaulicht eine beispielhafte Netzwerkumgebung 100 zur Implementierung von Paketverarbeitungs-Abladungen gemäß einer oder mehrerer Ausführungsformen. Wie in 1 dargestellt, kommunizieren die Knoten 104A, 104B und 104C über das Netzwerk 102 miteinander. Die Knoten 104 können zum Beispiel Server einschließen, die als Verarbeitungsknoten fungieren, die einen oder mehrere Prozessoren, wie beispielsweise reduzierte Befehlssatzcomputer (RISC)-V-Kerne, und/oder als Speicherknoten, die ein oder mehrere Festkörperlaufwerke (SSDs) oder Festplattenlaufwerke (HDDs) einschließen. In einigen Implementierungen kann die Netzwerkumgebung 100 in 1 mindestens als Teil eines Rechenzentrums und/oder für die verteilte Verarbeitung verwendet werden, wie beispielsweise für verteiltes maschinelles Lernen oder Big Data-Analysen. Wie dem Fachmann klar sein wird, sind die Knoten 104 nur zur Veranschaulichung dargestellt, und Netzwerkumgebung 100 kann viel mehr Knoten einschließen als die in 1 dargestellten. Darüber hinaus wissen Fachleute, dass Netzwerkumgebung 100 mehr Komponenten einschließen kann als in 1 dargestellt, wie beispielsweise aggregierte Schalter, Top of Rack-Schalter ToR-Schalter) und Netzwerksteuerungen.
  • Die Knoten 104 kommunizieren über Netzwerk 102 miteinander. Netzwerk 102 kann beispielsweise ein Speichernetzwerk (Storage Area Network, SAN), ein lokales Netzwerk (Local Area Network, LAN) und/oder ein Weitverkehrsnetzwerk (Wide Area Network, WAN), wie das Internet, einschließen. In diesem Zusammenhang müssen sich die Knoten 104A, 104B und 104C nicht am selben geografischen Ort befinden. Die Knoten 104 können über einen oder mehrere Standards wie zum Beispiel Ethernet kommunizieren. In diesem Zusammenhang verbinden die Verbindungen 114A, 114B und 114C die programmierbaren Netzwerkschnittstellen 112A, 112B bzw. 112C mit dem Netzwerk 102. Programmierbare Netzwerkschnittstellen 112 können einen oder mehrere Ethernetanschlüsse für eine Verbindung 114 einschließen.
  • Jeder der Knoten 104 schließt einen oder mehrere Prozessoren 106, einen Speicher 108 und eine programmierbare Netzwerkschnittstelle 112 ein. Diese Komponenten der Knoten 104 können über einen Bus 110 miteinander kommunizieren, der beispielsweise einen PCIe-Bus (Peripheral Component Interconnect Express) einschließen kann. Die Knoten 104 können hierin als NVMeoF-Knoten (Non-Volatile Memory Express over Fabric) bezeichnet werden, da die Knoten 104 so eingerichtet sind, dass sie mit anderen Knoten 104 unter Verwendung von NVMe-Nachrichten (z. B. NVMe-Befehle und -Antworten) kommunizieren, die unter Verwendung des Übertragungskontrollprotokolls (TCP) in Ethernet-Pakete eingekapselt werden können.
  • Die Prozessoren 106 können Befehle ausführen, wie beispielsweise Befehle von einer Anwendung, die in einem Benutzerraum eines Knotens 104 ausgeführt wird, oder als Teil eines Betriebssystems (OS), das vom Knoten 104 verwendet wird. Die Prozessoren 106 können eine Schaltlogik einschließen, wie zum Beispiel eine Zentraleinheit (Central Processing Unit, CPU), eine Grafikeinheit (Graphics Processing Unit, GPU), einen Mikrocontroller, einen digitalen Signalprozessor (Digital Signal Processor, DSP), eine anwendungsspezifische integrierte Schaltung (Application-Specific Integrated Circuit, ASIC), ein feldprogrammierbares Gate-Array (Field Programmable Gate Array, FPGA), einen oder mehrere RISC-V-Kerne, festverdrahtete Logik, analoge Schaltlogik und/oder eine Kombination davon. In einigen Implementierungen können die Prozessoren 106 ein System on a Chip (SoC) einschließen, das mit einem Speicher 108 kombiniert werden kann.
  • Die Speicher 108 können zum Beispiel einen flüchtigen Direktzugriffsspeicher (RAM) wie statisches RAM (SRAM), dynamisches RAM (DRAM), ein nichtflüchtiges RAM oder einen anderen Festkörperspeicher einschließen, der von dem oder den Prozessoren 106 verwendet wird. Die in Speicher 108 gespeicherten Daten können Daten einschließen, die von einem anderen Knoten 104 gelesen wurden, Daten, die in einem anderen Knoten 104 gespeichert werden sollen, Anweisungen, die von einer Anwendung zur Ausführung durch einen Prozessor 106 geladen wurden, und/oder Daten, die bei der Ausführung solcher Anwendungen verwendet werden.
  • In einigen Implementierungen kann Speicher 108 zum Beispiel eine oder mehrere rotierende Magnetplatten oder einen nichtflüchtigen Festkörperspeicher wie einen Flash-Speicher einschließen. In solchen Implementierungen kann Speicher 108 eine oder mehrere Speichervorrichtung(en) wie eine oder mehrere SSDs und/oder HDDs einschließen. Obwohl sich die Beschreibung hierin auf Festkörperspeicher im Allgemeinen bezieht, versteht es sich, dass Festkörperspeicher eine oder mehrere der verschiedenen Arten von Speichervorrichtungen, wie integrierte Flash-Schaltungen, NAND-Speicher (z. B. SLC-Speicher (Single-Level Cell), MLC-Speicher (Multi-Level Cell) (d. h. zwei oder mehr Stufen) oder eine beliebige Kombination davon), NOR-Speicher, EEPROM, andere diskrete NVM-Chips (Non-Volatile Memory) oder eine beliebige Kombination davon aufweisen können. In anderen Implementierungen kann Speicher 108 einen Speicher der Speicherklasse (SCM) einschließen, wie beispielsweise Chalkogenid-RAM (C-RAM), Phasenänderungsspeicher (PCM), programmierbarer Metallisierungszellen-RAM (PMC-RAM oder PMCm), ovonischer Einheitsspeicher (OUM), resistiver RAM (RRAM), ferroelektrischer Speicher (FeRAM), magnetoresistiver RAM (MRAM), 3D-XPoint-Speicher und/oder andere Arten von Festkörperspeichern.
  • Programmierbare Netzwerkschnittstellen 112 können Vorrichtungen wie intelligente Netzwerkschnittstellenkarten (NICs), Netzwerkschnittstellensteuerungen oder Netzwerkadapter einschließen, die mit einer Programmiersprache wie P4 programmiert werden können. Die programmierbaren Netzwerkschnittstellen 112 können zum Beispiel intelligente NICs einschließen, wie eine Netronome Agilio NIC, eine Mellanox Bluefield NIC oder eine Broadcom Stingray NIC. Wie in 1 dargestellt, speichert jede programmierbare Netzwerkschnittstelle 112 das Verbindungsverwaltungsmodul 10, das Transportmodul 12, das Flusskontrollmodul 14, die Anforderungswarteschlangen 16 und die Verbindungsparameter 18.
  • Wie weiter nachstehend näher erläutert, können das Verbindungsverwaltungsmodul 10, das Transportmodul 12 und das Flusskontrollmodul 14 die NVMe- und TCP-Verarbeitung von den Prozessoren 106 auf die Hardware der programmierbaren Netzwerkschnittstelle 112 verlagern. Eine solche Verschiebung kann die Leistung der Knoten 104 erhöhen, indem sie die Latenzzeit beim Speicherzugriff reduziert und den Durchsatz erhöht. Anforderungswarteschlangen 16 können es ermöglichen, dass NVMe-Anforderungen oder -Befehle in verschiedenen Partitionen eines zugänglichen Adressraums von Knoten 104 in eine Warteschlange gestellt werden. Der Adressraum kann eine Menge an Speicherplatz oder Speicher auf Knoten 104 darstellen, wie beispielsweise in Speicher 108, der für den Zugriff durch andere Knoten 104 zur Verfügung steht.
  • Darüber hinaus speichern die programmierbaren Netzwerkschnittstellen 112 die Verbindungsparameter 18, die die Verbindungsparameter für zuvor aktive Verbindungen mit verschiedenen Knoten 104 einschließen. Solche Verbindungsparameter können zum Beispiel Angaben zu einem Verbindungsstatus, ausgehandelte Parameter zwischen den Knoten 104 während einer zuvor aktiven Verbindung, Paketfolgenummern und/oder Zeitüberschreitungswerte für die erneute Übertragung einer Nachricht für den Fall, dass eine Bestätigung vom anderen Knoten 104 nicht empfangen wird, einschließen. Die ausgehandelten Parameter können zum Beispiel eine Protokollversion einschließen, die für die zuvor aktive Verbindung verwendet wurde, einen Ausgleich von Datenoffsets zu Beginn einer Protokolldateneinheit (PDU), die bei NVMe verwendet wird, eine Bitmaske, die für die Kopfzeile oder den Datenauszug verwendet wird, um die Datenintegrität zu gewährleisten, eine maximale Datenlänge, eine Berechtigungsstufe (z. B. nur Lesen, Lese-/Schreibberechtigung) und/oder eine maximale Anzahl von Credits, die für die Flusskontrolle erlaubt sind. Wie weiter nachstehend näher erläutert, kann die Speicherung von Verbindungsparametern 18 an programmierbaren Netzwerkschnittstellen 112 die für den Aufbau einer neuen Verbindung zwischen Knoten benötigte Zeit verkürzen, indem die gespeicherten Verbindungsparameter von zuvor aktiven Verbindungen zwischen denselben Knoten 104 wiederverwendet werden. In einigen Implementierungen können Verbindungsparameter für weniger aktuelle und/oder weniger häufige Verbindungen entfernt werden, um Platz in den Verbindungsparametern 18 für Verbindungsparameter für aktuellere und/oder häufigere Verbindungen freizugeben.
  • Fachleute werden anhand der vorliegenden Offenbarung erkennen, dass andere Implementierungen eine andere Anzahl oder Anordnung von Knoten 104 einschließen können als im Beispiel in 1 dargestellt. In dieser Hinsicht dient die in 1 dargestellte Netzwerkumgebung 100 nur der Veranschaulichung. Fachleute wissen, dass Netzwerkumgebung 100 viel mehr Knoten 104 und zusätzliche Komponenten wie Router und Schalter einschließen kann, als in dem Beispiel in 1 dargestellt.
  • 2 ist ein Blockdiagramm beispielhafter Komponenten, die in die programmierbare Netzwerkschnittstelle 112A gemäß einer oder mehrerer Ausführungsformen eingeschlossen sind. Wie in 2 dargestellt, schließt die programmierbare Netzwerkschnittstelle 112A die Anschlüsse 1161A und 1162A, die Schaltlogik 118A, den Speicher 120A und die Schnittstelle 122A ein.
  • Die Anschlüsse 1161A und 1162A ermöglichen der programmierbaren Netzwerkschnittstelle 112A die Kommunikation mit anderen Knoten 104 über die Anschlüsse 1141A bzw. 1142A. In anderen Implementierungen kann die programmierbare Netzwerkschnittstelle 112A eine andere Anzahl von Anschlüssen 116 einschließen, wie beispielsweise einen einzigen Anschluss 116.
  • Schaltlogik 118A kann Befehle ausführen, wie beispielsweise Befehle vom Verbindungsverwaltungsmodul 10A, dem Transportmodul 12A und dem Flusskontrollmodul 14A. Verbindungsverwaltungsmodul 10A, Transportmodul 12A und Flusskontrollmodul 14A können eine Firmware der programmierbaren Netzwerkschnittstelle 112A und/oder feldprogrammierbare Anweisungen einschließen. Wie bereits erwähnt, kann die programmierbare Netzwerkschnittstelle 112A vor Ort mit einer Programmiersprache wie beispielsweise P4 programmiert werden. Dadurch kann sich die programmierbare Netzwerkschnittstelle 112A an neue Versionen der in Netzwerkumgebung 100 verwendeten Protokolle und/oder sich ändernde Anforderungen, wie beispielsweise eine minimale Dienstqualität (Quality of Service, QoS), für die von den Knoten 104 ausgeführten Anwendungen anpassen. Schaltlogik 118A kann Schaltlogiken einschließen, wie beispielsweise einen Mikrocontroller, einen DSP, einen ASIC, einen FPGA, einen Multi-Core-Prozessor, festverdrahtete Logik, analoge Schaltlogik und/oder eine Kombination davon. In einigen Implementierungen kann Schaltlogik 118A einer SoC einschließen, der mit dem Speicher 120A oder einem anderen Speicher, wie beispielsweise einem DRAM, kombiniert werden kann.
  • Speicher 120A kann zum Beispiel CAM-Tabellen (Content Addressable Memory) oder TCAM-Tabellen (Ternary CAM) oder andere Arten von Abgleichstabellen einschließen, die in der Regel eine schnellere Verarbeitung von Nachrichten bereitstellen als herkömmliche Netzwerkschnittstellen (z. B. NICs), wie beispielsweise bei einer Leitungsrate oder nahezu Leitungsrate. In einigen Implementierungen können die CAM- oder TCAM-Tabellen in Registern, wie beispielsweise SRAM-Register-Arrays, gespeichert werden. In anderen Implementierungen kann Speicher 120A einen Festkörperspeicher einschließen, wie beispielsweise einen Flash-Speicher oder SCM. Wie in 2 dargestellt, speichert Speicher 120A das Verbindungsverwaltungsmodul 10A, das Transportmodul 12A, das Flusskontrollmodul 14A, die Anforderungswarteschlangen 16A und die Verbindungsparameter 18A.
  • Verbindungsverwaltungsmodul 10A ist für den Aufbau der NVMeoF/TCP-Verbindung, die Aufrechterhaltung der Verbindung und den Abbau der Verbindung zuständig. Wie weiter nachstehend unter Bezugnahme auf 4 näher erläutert, kann die programmierbare Netzwerkschnittstelle 112A Nachrichten zur Verbindungsverwaltung mit der programmierbaren Netzwerkschnittstelle 112 eines anderen Knotens 104 (z. B. der programmierbaren Netzwerkschnittstelle 112B in 1) austauschen, um eine NVMeoF/TCP-Verbindung herzustellen, und dann einen oder mehrere Prozessoren 106A von Knoten 104A darüber informieren, dass die Verbindung hergestellt wurde. Nach dem Empfangen einer Trennungsanforderung durch den Knoten oder von einem oder mehreren Prozessoren 106A, die eine Anwendung ausführen, führt Verbindungsverwaltungsmodul 10A einen NVMeoF/TCP-Verbindungsabbau durch.
  • Darüber hinaus kann Verbindungsverwaltungsmodul 10A der programmierbaren Netzwerkschnittstelle 112A auch zur Erkennung und Identifizierung von NVMe-Subsystemen oder NVMe-Knoten 104 zuständig sein, auf die Knoten 104 zugreifen kann. Die NVMe-Erkennung kann das Identifizieren von Pfaden zur Kommunikation mit jedem erkannten NVMe-Subsystem und NVMe-Knoten 104 einschließen. In einigen Implementierungen kann die programmierbare Netzwerkschnittstelle 112A während der Initialisierung von Knoten mit Verbindungsverwaltungsmodul 10A 104A Erkennungsmeldungen senden. Jeder NVMe-Knoten 104, der die Erkennungsnachricht empfängt, kann mit seinen verfügbaren NVMe-Subsysteminformationen antworten (z. B. Namen und Adressen der NVMe-Subsysteme). Verbindungsverwaltungsmodul 10A erstellt dann in einem Speicher der programmierbaren Netzwerkschnittstelle 112A (z. B. Speicher 120A) eine Datenstruktur, die Informationen für Knoten 104A einschließt, um auf Grundlage der von den anderen NVMe-Knoten 104 gesammelten Informationen eine Verbindung zu verschiedenen NVMe-Subsystemen herzustellen.
  • Transportmodul 12A ist für die Daten- und Befehlsübertragung zwischen den Knoten 104 bei NVMe-Lese- und Schreibvorgängen zuständig. Dies kann einschließen, dass ein in einem eingehenden NVMeoF/TCP-Paket eingekapselter NVMe-Befehl identifiziert wird, Ethernet-, TCP- und/oder NVMe-Kopfzeilen verworfen werden und nur ein Vorgangscode und erforderliche Parameter an eine Anforderungswarteschlange von Anforderungswarteschlangen 18A gesendet werden, die auf mindestens einer vom Transportmodul 12A für den Befehl identifizierten Adresse basiert. Mit anderen Worten, das Transportmodul 12A kann NVMeoF/TCP-Pakete in tatsächliche Lese- und Schreibbefehle übersetzen, die von einem oder mehreren Prozessoren 106A von Knoten 104A ausgeführt werden.
  • Darüber hinaus kann Transportmodul 12A im Speicher 120A eine Datenstruktur unterhalten, die den Status einzelner laufender Transaktionen anzeigt (d. h. jeden ausstehenden NVMe-Befehl, der an einen Zielknoten gesendet oder von einem Startknoten empfangen wurde). In einigen Implementierungen und wie weiter nachstehend unter Bezugnahme auf das Beispiel einer fragmentierten NVMeoF-Schreibtransaktion in 5 näher erläutert, kann Transportmodul 12A große NVMeoF/TCP-Datenübertragungen segmentieren oder fragmentieren, bei denen die NVMe-PDU größer ist als eine maximale Übertragungseinheit (MTU) des Netzwerks, beispielsweise 1.500 Byte.
  • Flusskontrollmodul 16A ist für den Lastausgleich, die Staukontrolle, die Kontrolle der NVMe-Zeitüberschreitungswerte für die erneute Übertragung und die erneute Übertragung der NVMe-Kapsel zuständig. In einigen Implementierungen unterteilt Flusskontrollmodul 16A den Adressraum des Speichers von Knoten 104A, auf den andere Knoten 104 zugreifen können (z. B. einen Teil oder den gesamten Adressraum von Speicher 108A in 1), und weist jeder Partition des Adressraums eine NVMe-Anforderungswarteschlange zu, um Anforderungswarteschlangen 18A zu bilden. NVMe-Anforderungen oder Befehle werden dann anhand mindestens einer Adresse, die in einer NVMeoF-Nachricht für die NVMe-Anforderung oder den NVMe-Befehl eingeschlossen ist, an die entsprechende Warteschlange weitergeleitet. Flusskontrollmodul 16A kann die Warteschlangen auch ausbalancieren, indem es unterschiedliche Gewichtungen oder eine Anzahl von Anforderungen festlegt, die pro Warteschlange in einem bestimmten Zyklus ausgeführt werden sollen, wie beispielsweise bei einem Round-Robin-Algorithmus. Die Gewichtung oder Anzahl der Anforderungen kann auch von den Leistungsanforderungen der Anwendung (z. B. einer Mindest-QoS) und/oder einer für eine NVMe-Anforderung angegebenen Priorität abhängen, wie beispielsweise durch die Verwendung eines in das Paket eingeschlossenen 802.1 Qbb Prioritäts-Tags.
  • Darüber hinaus kann Flusskontrollmodul 14A ein kreditbasiertes System verwenden, um genügend Raum für den Empfang von NVMe-Befehlen und Datenkapseln zu gewährleisten. Zum Beispiel kann die programmierbare Netzwerkschnittstelle 112A, die Flusskontrollmodul 14A verwendet, an einen Startknoten 104 eine Angabe über die Anzahl der Credits für das Senden von Nachrichten an Knoten 104A senden, basierend auf der verfügbaren Kapazität einer NVMe-Anforderungswarteschlange, die vom Initiator verwendet wird. Startknoten 104 verringert dann die Anzahl seiner Credits, wie beispielsweise um eins, jedes Mal, wenn der Knoten eine NVMeoF-Nachricht an Knoten 104A sendet. Die Credits können erhöht werden, wenn Knoten 104A eine neue Angabe zu den Credits an den anderen Knoten 104 zurücksendet.
  • Flusskontrollmodul 14A kann eine Überlastung des Netzwerks auch anhand eines ECN-Bits (Explicit Congestion Notification) in einem oder mehreren Paketen erkennen. Als Reaktion auf das Setzen des ECN-Bits kann die programmierbare Netzwerkschnittstelle 112A dem Sender im nächsten Bestätigungspaket mitteilen, dass er seine Übertragungsrate anpassen soll.
  • Zur Unterstützung einer zuverlässigen NVMe-Kapselzustellung kann Flusskontrollmodul 14A eine selektive Quittierung und Timeout-Wiederholung der Übertragung verwenden. Beim Empfang eines Pakets kann Flusskontrollmodul 14A die Anzahl der empfangenen Pakete mit der erwarteten Anzahl der Pakete für diesen Datenfluss oder diese aktive Verbindung vergleichen. Wenn die Anzahl der empfangenen Pakete mit der erwarteten Anzahl übereinstimmt, wird das Paket von der programmierbaren Netzwerkschnittstelle 112A weiterverarbeitet und eine Bestätigung (d. h. ACK) an den Absender zurückgesendet. Andernfalls sendet die programmierbare Netzwerkschnittstelle 112A eine negative Bestätigung (d. h. NACK) oder eine andere Fehlermeldung, die die Anzahl der zuletzt von Knoten 104A empfangenen Pakete einschließt.
  • Flusskontrollmodul 14A kann ein Paket auch dann erneut übertragen, wenn die programmierbare Netzwerkschnittstelle 112A eine negative Quittung erhält oder wenn eine Quittung nicht innerhalb einer bestimmten Zeitspanne empfangen wird, wie beispielsweise einer durch eine Zeitüberschreitungswert dargestellten Wiederübertragungszeitspanne (RTO). In einigen Implementierungen kann Flusskontrollmodul 14A als Reaktion auf das Senden einer Nachricht, wie beispielsweise durch eine Egress-Pipeline der programmierbaren Netzwerkschnittstelle 112A, ein Zeitüberschreitungsregister setzen, um eine entsprechende Bestätigung zu erhalten. Der Zeitüberschreitungswert kann zum Beispiel auf einer durchschnittlichen Dauer der Paketübertragung basieren. In einigen Implementierungen kann der Zeitüberschreitungswert im Feld angepasst werden, zum Beispiel auf der Grundlage eines exponentiellen gleitenden Durchschnitts der abgetasteten Umlaufzeiten.
  • Schnittstelle 122A stellt eine Schnittstelle zum internen Bus 110A von Knoten 104A bereit, wie in 1 gezeigt. In einigen Implementierungen kann Schnittstelle 122A eine PCIe-Schnittstelle oder einen PCIe-Schalter für die Kommunikation mit anderen Komponenten von Knoten 104A bereitstellen, wie beispielsweise mit einem oder mehreren Prozessoren 106A und Speicher 108A in 1.
  • Wie dem Fachmann mit Bezug auf die vorliegende Offenbarung klar sein wird, kann die Anordnung oder Anzahl der Komponenten der programmierbaren Netzwerkschnittstelle 112A in 2 abweichen. Andere Implementierungen der programmierbaren Netzwerkschnittstelle 112A können zum Beispiel eine andere Anzahl von Speichern 120A, Schnittstellen 122A oder eine andere Anzahl von Anschlüssen 116 einschließen.
  • 3 ist ein Beispiel für eine programmierbare Pipeline 20A einer programmierbaren Netzwerkschnittstelle 112A gemäß einer oder mehrerer Ausführungsformen. Die Verwendung einer programmierbaren Pipeline in einer programmierbaren Netzwerkschnittstelle eines Knotens kann eine effiziente Auslagerung von Aufgaben ermöglichen, die normalerweise durch Virtualisierung oder durch einen Treiber, wie beispielsweise einen NVMe-Treiber, der von einem Prozessor von Knoten ausgeführt wird, durchgeführt werden würden. Eine solche hardwarebasierte Auslagerung der NVMeoF/TCP-Verarbeitung von einem oder mehreren Prozessoren von Knoten auf eine programmierbare Netzwerkschnittstelle kann in der Regel den Durchsatz verbessern und die Latenz verringern, um die Vorteile von NVMeoF und modernen Ethernet-Geschwindigkeiten besser zu nutzen. In einigen Implementierungen kann jeder Anschluss der programmierbaren Netzwerkschnittstelle, wie beispielsweise jeder der Anschlüsse 1161A und 1162A, über eine eigene programmierbare Pipeline 20A zur Verarbeitung von Paketen verfügen, die von dem Anschluss mit einer Leitungsrate oder nahezu einer Leitungsrate empfangen werden.
  • Wie im Beispiel in 3 gezeigt, schließt die programmierbare Pipeline 20A den Parser 22A, eine oder mehrere Abgleichstabellen 24A und den Deparser 26A ein. Im Beispiel in 3 werden eingehende Pakete von einem Parser 22A empfangen, der Kopfzeilen aus den Paketen extrahiert, um Abgleichsvorgänge oder -phasen unter Verwendung einer oder mehrerer Abgleichstabellen 24A durchzuführen. Jede Abgleichstabelle 24A kann so angepasst werden, dass sie einen Abgleichsvorgang für einen oder mehrere extrahierte Werte aus einem Paket nach vordefinierten Regeln durchführt und dann Aktionen ausführt, wie beispielsweise das Hinzufügen, Entfernen oder Modifizieren von Feldern in den Kopfzeilen, das Weiterleiten einer NVMe-Anforderungen an eine entsprechende Warteschlange 18 auf der Grundlage einer extrahierten Adresse und/oder eines Prioritätsindikators oder das Senden einer Antwort für die Verbindungsverwaltung, wie beispielsweise eine Nachricht zur Anpassung einer Übertragungsrate aufgrund eines extrahierten ECN-Bits, eine Nachricht zum Aufbau einer Verbindung oder eine Nachricht zum Beenden einer aktiven Verbindung. Deparser 26A kann als Reaktion auf das empfangene Paket ein Paket zusammenstellen, wie beispielsweise eine Bestätigung (ACK-Nachricht), eine Fehlermeldung (z. B. eine NACK-Nachricht) oder eine andere Benachrichtigung, wie eine Benachrichtigung zur Anpassung einer Übertragungsrate oder einer Anzahl verfügbarer Guthaben für eine Flusssteuerung, ohne dass andere Komponenten von Knoten 104A außerhalb der programmierbaren Netzwerkschnittstelle 112A (z. B. ein oder mehrere Prozessoren 106A in 1) beteiligt sind.
  • Beispielprozesse
  • 4 ist ein Beispiel für den Aufbau einer NVMeoF/TCP-Verbindung zwischen den Knoten 104A und 104B gemäß einer oder mehrerer Ausführungsformen. Wie in 4 dargestellt, kann der Verbindungsaufbau über die programmierbaren Netzwerkschnittstellen 112A und 112B der Knoten 104A und 104B erfolgen, die die Verbindungsverwaltungsmodule 10A bzw. 10B ausführen. In einigen Implementierungen kann fast die gesamte zwischen den programmierbaren Netzwerkschnittstellen 112A und 112B ausgetauschte Kommunikation von den jeweiligen programmierbaren Pipelines, wie beispielsweise der oben besprochenen programmierbaren Pipeline 20A, mit minimaler Beteiligung anderer Komponenten der Knoten 104A und 104B durchgeführt werden, was die Geschwindigkeit verbessert, mit der die NVMeoF/TCP-Verbindung aufgebaut werden kann.
  • Wie in 4 dargestellt, kann der Verbindungsaufbau mit einem TCP-Drei-Wege-Handshake beginnen, bei dem die programmierbare Netzwerkschnittstelle 112A ein TCP-Synchronisierungspaket (d. h. TCP Syn) an die programmierbare Netzwerkschnittstelle 112B sendet, das eine Anzahl einschließen kann. Als Antwort sendet die programmierbare Netzwerkschnittstelle 112B ein TCP-Synchronisationspaket mit ihrer Bestätigung des von der programmierbaren Netzwerkschnittstelle 112A empfangenen TCP-Synchronisationspakets (d. h. TCP Syn ACK) zurück, beispielsweise durch Inkrementieren der empfangenen Anzahl und Bereitstellen ihrer eigenen Anzahl an die programmierbare Netzwerkschnittstelle 112A. Die Bestätigung des Verbindungsaufbaus (d. h. ACK) kann zum Beispiel die Anzahl der von der programmierbaren Netzwerkschnittstelle 112B bereitgestellten Sequenzen erhöhen.
  • Die programmierbare Netzwerkschnittstelle 112A führt dann einen NVMe/TCP-Verbindungsaufbau durch, indem sie eine NVMe/TCP-Verbindungsinitialisierungsanforderung an die programmierbare Netzwerkschnittstelle 112B sendet. Dies kann eine PDU einschließen, die von der programmierbaren Netzwerkschnittstelle 112A gesendet wird, um NVMe/TCP-Verbindungsparameter bereitzustellen, wie beispielsweise von Knoten 104A unterstützte Funktionen und/oder Parameter, die zwischen den programmierbaren Netzwerkschnittstellen 112A und 112B ausgehandelt werden sollen.
  • Solche ausgehandelten Parameter können zum Beispiel eine zu verwendende Protokollversion, einen in PDUs zu verwendenden Offset, eine für Kopfzeilen verwendete Bitmaske oder einen Datenauszug zur Gewährleistung der Integrität der PDUs sowie eine für jede PDU zu verwendende maximale Datenlänge einschließen. Als Antwort sendet die programmierbare Netzwerkschnittstelle 112B eine NVMe/TCP-Verbindungsinitialisierungsantwort zurück, die die von der programmierbaren Netzwerkschnittstelle 112A vorgeschlagenen Merkmale und/oder Parameter bestätigen und zusätzliche Informationen einschließen kann, wie beispielsweise eine maximale Anzahl von Credits, die von der programmierbaren Netzwerkschnittstelle 112A zum Senden von Nachrichten verwendet werden können. Wie vorstehend erwähnt, kann ein Flusskontrollmodul der programmierbaren Netzwerkschnittstelle 112B die maximale Anzahl von Credits auf der Grundlage einer Puffer- oder Warteschlangengröße der programmierbaren Netzwerkschnittstelle 112B festlegen.
  • Nach dem Aufbau einer NVMe/TCP-Verbindung stellt die programmierbare Netzwerkschnittstelle 112A eine NVMeoF-Verbindung her, indem sie eine NVMeoF-Verbindungsanforderung sendet. Die NVMeoF-Verbindungsanforderung kann zum Beispiel Informationen für eine NVMeoF-Verbindung einschließen, wie beispielsweise Einschränkungen für bestimmte Fähigkeiten (z. B. Scatter Gather List (SGL) Deskriptoren für große Datenübertragungen, Einschränkungen für die Datenplatzierung, Datentransportfähigkeiten und Authentifizierungsfähigkeiten). Die NVMeoF-Verbindungsanforderung kann beispielsweise auch Informationen über die von der programmierbaren Netzwerksteuerung 112A verwendeten Warteschlangen einschließen, wie beispielsweise die Größe und Anzahl der Warteschlangen. Ein Prozessor 106A von Knoten 104A, der die Verbindung angefordert hat, kann von der programmierbaren Netzwerkschnittstelle 112A benachrichtigt werden, dass die Verbindung zustande gekommen ist, so dass der Befehl an den Knoten 104B übertragen werden kann, nachdem die NVMeoF/TCP-Verbindung von der programmierbaren Netzwerkschnittstelle 112A hergestellt worden ist. Prozessor 106A kann die Verbindung anfordern, indem er beispielsweise eine Anwendung ausführt, die in einem NVMe-Namensraum von Knoten 104B gespeicherte Daten anfordert oder die anfordert, Daten in einen NVMe-Namensraum von Knoten 104B zu schreiben.
  • Wie bereits erwähnt, kann die Verwendung programmierbarer Netzwerkschnittstellen für den Aufbau einer NVMeoF/TCP-Verbindung die Zeit, die für den Aufbau der NVMeoF/TCP-Verbindung zwischen den Knoten 104A und 104B benötigt wird, erheblich reduzieren und gleichzeitig die Prozessoren 106 entlasten, um die Leistung der Knoten 104 weiterhin zu verbessern. In ähnlicher Art und Weise kann Verbindungsverwaltungsmodul 10 auch für einen NVMeoF/TCP-Verbindungsabbau verwendet werden. In solchen Fällen kann die programmierbare Netzwerkschnittstelle 112 eine Trennungsanforderung von dem anderen NVMe-Knoten oder von einer Anwendung, die auf Knoten 104 ausgeführt wird, empfangen und eine Beendigungsnachricht an den anderen NVMe-Knoten senden, ohne dass andere Komponenten von Knoten 104 beteiligt sind. Einem Prozessor 106 von Knoten 104 kann dann eine Benachrichtigung bereitgestellt werden, die anzeigt, dass die Verbindung nicht mehr aktiv ist.
  • Darüber hinaus können die programmierbaren Netzwerkschnittstellen 112A und 112B die Verbindungsparameter nach Beendigung der Verbindung beibehalten. Solche Parameter können als Teil der Verbindungsparameter 18 gespeichert werden, um einen schnelleren Verbindungsaufbau für zukünftige NVMeoF/TCP-Verbindungen zwischen den programmierbaren Netzwerkschnittstellen 112A und 112B zu ermöglichen. In diesem Zusammenhang kann der Aufbau der NVMe/TCP-Verbindung und der Aufbau der NVMeoF-Verbindung in 4 ganz oder teilweise übersprungen werden, wenn die in den Verbindungsparametern 18 gespeicherten Verbindungsparameter für den anderen NVMe-Knoten einschließlich der anderen programmierbaren Netzwerkschnittstelle identifiziert werden können.
  • Unter Bezugnahme auf die Sequenz in 4 kann die programmierbare Netzwerkschnittstelle 112B die Verbindungsparameter 18A verwenden, um vorab eine NVMe/TCP-Verbindungsinitialisierungsantwort zu senden, die die bei der letzten aktiven Verbindung mit der programmierbaren Netzwerkschnittstelle 112A verwendeten Verbindungsparameter bestätigt, und kann außerdem vorab eine NVMeoF-Verbindungsantwort senden, die andere bei der letzten aktiven Verbindung mit der programmierbaren Netzwerkschnittstelle 112A verwendete Verbindungsparameter bestätigt. Wie weiter nachstehend unter Bezugnahme auf den Prozess des Verbindungsaufbaus in 6 näher erläutert, kann die Wiederverwendung gespeicherter Verbindungsparameter aus einer früheren Verbindung mit demselben Knoten normalerweise die Zeit und den Verarbeitungsaufwand für den Aufbau einer NVMeoF/TCP-Verbindung reduzieren.
  • 5 ist ein Beispiel für eine NVMeoF-Schreibtransaktion, die gemäß einer oder mehrerer Ausführungsformen fragmentiert ist. Wie in 5 gezeigt, kann die programmierbare Netzwerkschnittstelle 112A die von einem Prozessor von Knoten 104A (d. h. Prozessor 106A) empfangenen Daten fragmentieren, damit sie in eine Netzwerk-MTU passen. Die fragmentierte Schreibsequenz in 5 kann hauptsächlich von den programmierbaren Netzwerkschnittstellen 112A und 112B der Knoten 104A und 104B ausgeführt werden, die die Transportmodule 12A bzw. 12B ausführen. In einigen Implementierungen kann fast die gesamte Kommunikation, die zwischen den programmierbaren Netzwerkschnittstellen 112A und 112B in 5 ausgetauscht wird, von den jeweiligen programmierbaren Pipelines, wie der vorstehend beschriebenen programmierbaren Pipeline 20A, mit geringer Beteiligung anderer Komponenten der Knoten 104A und 104B durchgeführt werden, was die Geschwindigkeit verbessert, mit der große Datenübertragungen (d. h. größer als eine MTU) stattfinden können.
  • Die programmierbare Netzwerkschnittstelle 112A beginnt mit dem Senden einer NVMe-Schreibbefehlskapsel in einer PDU, nachdem eine NVMeoF/TCP-Verbindung hergestellt wurde, wie in der vorstehend beschriebenen Sequenz in 4 oder unter Verwendung von Verbindungsparametern 18, wie weiter nachstehend unter Bezugnahme auf den NVMeoF/TCP-Verbindungsaufbauprozess in 6 näher erläutert. Die von der programmierbaren Netzwerkschnittstelle 112A in 5 gesendete NVMe-Schreibbefehlskapsel schließt einen NVMe-Schreibbefehl ein.
  • Als Antwort auf den Empfang der NVMe-Schreibbefehlskapsel sendet die programmierbare Netzwerkschnittstelle 112B eine übertragungsbereite PDU zurück. Wie vorstehend erwähnt, kann die programmierbare Steuerung 112B über das Verbindungsverwaltungsmodul 10A der programmierbaren Netzwerkschnittstelle 112A eine maximale Anzahl von Credits für eine Anzahl von Nachrichten oder PDUs bereitgestellt haben, die gesendet werden können, bevor eine Bestätigung von der programmierbaren Netzwerkschnittstelle 112B empfangen wird. In anderen Implementierungen kann die übertragungsbereite PDU eine Anzahl von Credits enthalten, die auf eine bestimmte Warteschlange zugeschnitten sind, die dem Abschnitt des Adressraums zugewiesen ist, in dem der Schreibbefehl ausgeführt wird. Dies kann durch eine oder mehrere Adressen angegeben werden, die in der anfänglichen NVMe-Schreibbefehlskapsel eingeschlossen sind.
  • Die programmierbare Netzwerkschnittstelle 112A fragmentiert dann die Daten, die sie von einem Prozessor von Knoten (z. B. einem Prozessor 106A in 1) erhalten hat, und verpackt die zu schreibenden Daten in eine Reihe von Daten-PDUs. In diesem Zusammenhang kann das Transportmodul 12A jede PDU mit einer Anzahl bereitstellen, um sicherzustellen, dass die Daten in der richtigen Reihenfolge empfangen werden. Das Transportmodul 12A kann in der letzten Daten-PDU einen Indikator oder ein Flag einschließen, um anzuzeigen, dass die Übertragung abgeschlossen ist.
  • Nach dem Empfang der letzten Daten-PDU sendet die programmierbare Netzwerkschnittstelle 112B eine Antwortkapsel-PDU an die programmierbare Netzwerkschnittstelle 112A, die anzeigt, dass alle Daten-PDUs empfangen wurden. In diesem Zusammenhang kann das Transportmodul 12B, das von der programmierbaren Schnittstelle 112B ausgeführt wird, einen Hinweis oder ein Flag in die Antwortkapsel-PDU einschließen, um den Empfang aller Daten-PDUs in der richtigen Reihenfolge anzuzeigen. In anderen Implementierungen kann die Antwortkapsel-PDU weggelassen werden, so dass die programmierbare Netzwerkschnittstelle 112A davon ausgeht, dass alle Daten-PDUs erfolgreich und in der richtigen Reihenfolge empfangen wurden, sofern keine Fehlermeldung oder NACK von der programmierbaren Netzwerkschnittstelle 112B empfangen wird.
  • In einigen Implementierungen kann das Transportmodul 12B eine Fehlermeldung oder NACK als Reaktion darauf senden, dass die Daten-PDUs nicht in der richtigen Reihenfolge empfangen wurden. In solchen Fällen und wie weiter nachstehend unter Bezugnahme auf den beispielhaften Prozess der erneuten Übertragung von Nachrichten in 8 näher erläutert, kann das Transportmodul 12A der programmierbaren Netzwerkschnittstelle 112A die nicht ordnungsgemäße oder fehlende Daten-PDU mit minimaler Beteiligung anderer Komponenten von Knoten 104A erneut senden, beispielsweise durch einen Prozessor 106A von Knoten 104A.
  • Während der aktiven Verbindung zwischen den Knoten oder der aktiven Kommunikationssitzung kann jede programmierbare Netzwerkschnittstelle 112 in einigen Implementierungen einen aktuellen Status für jede Transaktion verfolgen, bei der ein Befehl an einen anderen NVMe-Knoten gesendet oder von diesem empfangen wurde. Diese Informationen können in einer anderen Datenstruktur als die Verbindungsparameter 18 oder in einigen Implementierungen in der gleichen Datenstruktur gespeichert werden.
  • Wie bereits erwähnt, kann die Verwendung programmierbarer Netzwerkschnittstellen, wie beispielsweise der programmierbaren Netzwerkschnittstellen 112A und 112B, die Zeit, die für die Datenübertragung mittels NVMeoF/TCP zwischen den Knoten 104A und 104B benötigt wird, erheblich reduzieren und gleichzeitig die Verarbeitung von den Prozessoren 106 entlasten, um die Leistung der Knoten 104 weiterhin zu verbessern.
  • 6 ist ein Flussdiagramm eines NVMeoF/TCP-Verbindungsaufbau-Prozesses gemäß einer oder mehrerer Ausführungsformen. Der Prozess in 6 kann zum Beispiel von Schaltlogik 118 einer programmierbaren Netzwerkschnittstelle 112 ausgeführt werden, die das Verbindungsmanagementmodul 10 ausführt.
  • In Block 602 empfängt die programmierbare Netzwerkschnittstelle eine NVMeoF-Verbindungsanforderung von einem NVMe-Knoten, wie beispielsweise von einem anderen Knoten 104 in 1. In einigen Implementierungen kann die Verbindungsanforderung zum Beispiel auf einen TCP-Verbindungsaufbau und/oder einen NVMe/TCP-Verbindungsaufbau folgen, wie in dem in 4 gezeigten Beispiel einer Verbindungssequenz.
  • In Block 604 bestimmt die programmierbare Netzwerkschnittstelle, ob der NVMe-Knoten mit den in den Verbindungsparametern 18 gespeicherten Verbindungsparametern verbunden ist. In einigen Implementierungen kann eine NVMe-Namensraum-ID oder eine andere Kennung verwendet werden, um zu bestimmen, ob es einen Eintrag oder Verbindungsparameter gibt, die mit dem NVMe-Knoten verbunden sind. Wie bereits erwähnt, kann die programmierbare Netzwerkschnittstelle lokal Parameter für frühere NVMeoF/TCP-Verbindungen speichern, wie beispielsweise Angaben zu einem Verbindungsstatus, ausgehandelte Parameter zwischen den programmierbaren Netzwerkschnittstellen 112 während einer zuvor aktiven Verbindung, Paketfolgenummern und/oder Zeitüberschreitungswerte für die erneute Übertragung einer Nachricht für den Fall, dass eine Bestätigung vom anderen Knoten 104 nicht empfangen wird. Die ausgehandelten Parameter können zum Beispiel eine Protokollversion einschließen, die für die zuvor aktive Verbindung verwendet wurde, einen Ausgleich des Datenoffsets zu Beginn der PDU, eine Bitmaske, die für die Kopfzeile verwendet wird, eine maximale Datenlänge, eine Stufe der Berechtigung (z. B. nur Lesen, Lese-/Schreibberechtigung) und/oder eine maximale Anzahl von Credits, die für die Flusskontrolle erlaubt sind.
  • Als Reaktion auf die Bestimmung in Block 604, dass der NVMe-Knoten mit den in den Verbindungsparametern 18 gespeicherten Verbindungsparametern verbunden ist, wird in Block 606 eine neue NVMeoF-Verbindung für die Kommunikation mit dem NVMe-Knoten unter Verwendung der gespeicherten Verbindungsparameter hergestellt. Wie vorstehend unter Bezugnahme auf die Sequenz des Verbindungsaufbaus in 4 erwähnt, kann der größte Teil des NVMe/TCP-Verbindungsaufbaus und des NVMeoF-Verbindungsaufbaus durch die mit dem NVMe-Knoten verbundenen gespeicherten Verbindungsparameter ersetzt werden. In einigen Implementierungen kann die programmierbare Netzwerkschnittstelle 112 eine Bestätigung der gespeicherten Parameter senden, aber selbst in solchen Fällen muss der andere NVMe-Knoten seine NVMe/TCP-Verbindungsinitialisierungsanforderung und/oder NVMeoF-Verbindungsanforderung nicht senden, was den für den Aufbau einer NVMeoF/TCP-Verbindung erforderlichen Prozess reduzieren kann.
  • Andererseits erstellt die programmierbare Netzwerkschnittstelle als Reaktion auf die Bestimmung in Block 604, dass der NVMe-Knoten nicht mit den in den Verbindungsparametern 18 gespeicherten Verbindungsparametern verbunden ist, in Block 608 einen neuen Eintrag oder neue Einträge in den Verbindungsparametern 18, um die Verbindungsparameter für den anderen NVMe-Knoten zu speichern. Die Verbindungsparameter für den anderen NVMe-Knoten können nach dem Aufbau einer NVMeoF/TCP-Verbindung gespeichert werden, wie beispielsweise nach der oben beschriebenen Verbindungsaufbausequenz in 4. Wie bereits erwähnt, kann die Speicherung von Verbindungsparametern in einigen Implementierungen vom verfügbaren Raum abhängen, so dass nur die Verbindungsparameter für die jüngsten und/oder am häufigsten verwendeten Verbindungen in den Verbindungsparametern 18 gespeichert oder aufbewahrt werden. In diesem Zusammenhang können die Verbindungsparameter 18 auch eine letzte aktive Zeit und/oder einen Nutzungsindikator für die hergestellte Verbindung einschließen, die für die Bestimmung verwendet werden können, ob Verbindungsparameter für weniger kürzlich und/oder weniger häufig genutzte Verbindungen entfernt werden sollen.
  • Wie bereits erwähnt, kann die Speicherung von Verbindungsparametern 18 an programmierbaren Netzwerkschnittstellen 112 die Zeit für den Aufbau einer neuen NVMeoF/TCP-Verbindung zwischen Knoten verkürzen, indem die gespeicherten Verbindungsparameter von zuvor aktiven Verbindungen zwischen denselben Knoten 104 wiederverwendet werden.
  • 7 ist ein Flussdiagramm eines Prozesses zur Verwaltung von NVMe-Anforderungen gemäß einer oder mehrerer Ausführungsformen. Der Prozess in 7 kann zum Beispiel von Schaltlogik 118 einer programmierbaren Netzwerkschnittstelle 112 durchgeführt werden, die das Transportmodul 12 ausführt.
  • In Block 702 partitioniert die programmierbare Netzwerkschnittstelle 112 einen Adressraum ihres Knotens 104. Wie vorstehend beschrieben, kann Knoten 104 ein Server sein, der mindestens einen Speicher oder eine oder mehrere Speichervorrichtungen (z. B. HDDs und/oder SSDs) einschließt, wie beispielsweise den Speicher 108 in 1. Die programmierbare Netzwerkschnittstelle kann einen Adressraum partitionieren, der den Arbeitsspeicher oder den Speicher repräsentiert, auf den andere NVMe-Knoten als NVMe-Namensraum zugreifen können, beispielsweise durch Partitionierung des Adressraums in eine vorher festgelegte Anzahl von gleich großen Adressbereichen.
  • In Block 704 weist die programmierbare Netzwerkschnittstelle 112 jeder Partition aus Block 702 eine NVMe-Anforderungswarteschlange zu. Die Partitionierung und Zuweisung von NVMe-Anforderungswarteschlangen kann während einer Einrichtung oder Initialisierung von Knoten oder während einer Offline-Phase erfolgen, wie durch die gestrichelte Linie nach Block 704 angezeigt.
  • Während des Vorgangs empfängt die programmierbare Netzwerkschnittstelle in Block 706 eine NVMeoF-Nachricht von einem anderen NVMe-Knoten. Die NVMeoF-Nachricht kann NVMeoF- und TCP-Paket-Kopfzeilen einschließen, die von der programmierbaren Netzwerkschnittstelle geparst werden, um Abgleichaktionen durchzuführen. Die programmierbare Netzwerkschnittstelle kann eine in die NVMeoF-Nachricht eingebettete NVMe-Anforderung identifizieren, beispielsweise durch die Identifizierung eines Vorgangscodes in einer NVMe-Kapsel, die in der NVMeoF-Nachricht enthalten ist. Der Vorgangscode kann zum Beispiel einen Lesebefehl zum Lesen von Daten von einer Adresse in einem NVMe-Namensraum von Knoten 104 (z. B. des Servers) oder einen Schreibbefehl zum Schreiben von Daten in einen NVMe-Namensraum von Knoten 104 angeben.
  • In Block 708 identifiziert die programmierbare Netzwerkschnittstelle mindestens eine Adresse in der empfangenen NVMeoF-Nachricht für den Zugriff auf Daten in einem NVMe-Namensraum von Knoten 104. Nach dem Parsen der NVMeoF-Nachricht kann die programmierbare Netzwerkschnittstelle einige oder alle Ethernet-, TCP- und NVMe-Kopfzeilen, die in der NVMeoF-Nachricht eingeschlossen sind, verwerfen. Die programmierbare Netzwerkschnittstelle 112 kann dann nur einen Lese- oder Schreibbefehl an einen Prozessor 106 oder eine andere Komponente von Knoten 104 mit anderen NVMe-Parametern bereitstellen, um die empfangene NVMeoF-Nachricht effektiv in einen NVMe-Lese- oder Schreibbefehl zu übersetzen, der vom Knoten 104 auszuführen ist. Eine solche Übersetzung durch die programmierbare Netzwerkschnittstelle 112 verringert den Aufwand für die Verarbeitung, der sonst von einem Prozessor von Knoten 104 verlangt würde, wodurch Ressourcen des Prozessors frei werden und die Gesamtleistung von Knoten 104 verbessert wird.
  • In Block 710 bestimmt die programmierbare Netzwerkschnittstelle 112 eine NVMe-Anforderungswarteschlange aus den in Block 704 zugewiesenen NVMe-Anforderungswarteschlangen zur Ausführung der in der NVMeoF-Nachricht eingeschlossenen NVMe-Anforderung auf Grundlage der in Block 708 identifizierten Adresse. Die programmierbare Netzwerkschnittstelle 112 kann die NVMe-Anforderungswarteschlange zum Beispiel anhand einer Abgleichstabelle identifizieren, die die identifizierte Adresse innerhalb eines Adressbereichs abgleicht, der einer Partition des NVMe-Namensraums entspricht. Die Warteschlangen können NVMe-Anforderungen (z. B. Schreib- und Lesebefehle) in einem On-Chip-Speicher der programmierbaren Netzwerkschnittstelle 112 puffern oder vorübergehend speichern, wie in den Anforderungswarteschlangen 16 in 2. Die programmierbare Netzwerkschnittstelle 112 über Flusskontrollmodul 14 kann dann die NVMe-Anforderungen in einer bestimmten Reihenfolge oder Sequenz, wie beispielsweise unter Verwendung eines Round-Robin-Algorithmus, von den NVMe-Anforderungswarteschlangen 18 an Bus 110 von Knoten 104 senden, um die Leistung der NVMe-Nachrichten aus den NVMe-Anforderungswarteschlangen 18 auszugleichen. Ein solcher Lastausgleich durch die programmierbare Netzwerkschnittstelle 112 kann normalerweise verhindern, dass große Datenströme kleinere Datenströme blockieren, die zeitkritisch sind oder anderweitig eine Mindest-QoS für den Datenzugriff erfordern.
  • In einigen Implementierungen können die Abgleichaktionstabellen der programmierbaren Netzwerkschnittstelle 112 so programmiert werden, dass sie einen in der NVMeoF-Nachricht eingeschlossenen Prioritätswert (z. B. einen 802.1Qbb-Wert) bei der Bestimmung einer NVMe-Anforderungswarteschlange für die NVMe-Anforderungen identifizieren und berücksichtigen. Solche Prioritätswerte können von den NVMe-Knoten, die die NVMeoF-Nachrichten senden, verwendet werden, um bestimmte NVMeoF-Nachrichten verschiedenen Anwendungen zuzuordnen, die die zugrundeliegende NVMe-Anforderung generieren und möglicherweise unterschiedliche QoS-Anforderungen haben, wie beispielsweise eine maximale Latenzzeit für den Zugriff auf Daten. In solchen Implementierungen kann die programmierbare Netzwerkschnittstelle 112 über eine separate Warteschlange verfügen, die NVMe-Nachrichten häufiger oder in einer größeren Anzahl pro Zyklus versenden kann als andere Warteschlangen mit niedrigerer Priorität für NVMe-Nachrichten, die nicht von einer NVMeoF-Nachricht mit einem hohen Prioritätswert stammen.
  • 8 ist ein Flussdiagramm eines Prozesses zur erneuten Übertragung von Nachrichten gemäß einer oder mehrerer Ausführungsformen. Der Prozess in 8 kann zum Beispiel von Schaltlogik 118 einer programmierbaren Netzwerkschnittstelle 112 durchgeführt werden, die das Flusskontrollmodul 14 ausführt.
  • In Block 802 sendet die programmierbare Netzwerkschnittstelle 112 eine NVMeoF-Nachricht an einen NVMe-Knoten. Die NVMeoF-Nachricht kann von einer Anwendung stammen, die von einem Prozessor 106 von Knoten 104 ausgeführt wird, der die programmierbare Netzwerkschnittstelle 112 einschließt. Die programmierbare Netzwerkschnittstelle kann Kopfzeilen wie TCP-, Ethernet- und NVMeoF-Kopfzeilen zu einer von Prozessor 106 über den Bus 110 von Knoten 104 empfangenen NVMe-Nachricht hinzufügen.
  • In Block 804 speichert die programmierbare Netzwerkschnittstelle 112 vorübergehend Daten, wie beispielsweise eine Nutzlast, aus der NVMeoF-Nachricht, die an den anderen NVMe-Knoten gesendet wurde. Die Daten der Nachricht können lokal an der programmierbaren Schnittstelle 112 gespeichert werden, wie beispielsweise in Speicher 120A in 2. Durch die Speicherung einer Nutzlast oder von Daten aus der NVMeoF-Nachricht, die von der programmierbaren Netzwerkschnittstelle 112 gesendet wird, ist es normalerweise möglich, die NVMeoF-Nachricht bei Bedarf schneller erneut zu senden, wie beispielsweise nach dem Empfang einer Fehlermeldung oder NACK oder nach Ablauf eines Zeitüberschreitungswerts für den Empfang einer Bestätigung, wie unten beschrieben. Die programmierbare Netzwerkschnittstelle 112 kann solche Fehler und die erneute Übertragung handhaben, ohne andere Komponenten von Knoten 104, wie beispielsweise einen Prozessor 104, einzubeziehen, um die Gesamtleistung von Knoten 104 weiterhin zu verbessern.
  • In Block 806 bestimmt die programmierbare Netzwerkschnittstelle 112, ob ein Zeitüberschreitungswert für den Empfang einer Bestätigung der NVMeoF-Nachricht, die an den anderen NVMe-Knoten gesendet wurde, erreicht wurde. In einigen Implementierungen kann die programmierbare Netzwerkschnittstelle 112 als Reaktion auf das Senden der NVMeoF-Nachricht ein Zeitüberschreitungsregister setzen, beispielsweise durch Verwendung einer Egress-Pipeline der programmierbaren Netzwerkschnittstelle, um eine entsprechende Bestätigung zu erhalten. Der Zeitüberschreitungswert kann zum Beispiel auf einer durchschnittlichen Dauer der Paketübertragung basieren. In einigen Implementierungen kann der Zeitüberschreitungswert im Feld angepasst werden, zum Beispiel auf der Grundlage eines exponentiellen gleitenden Durchschnitts der abgetasteten Umlaufzeiten.
  • Wenn der Zeitüberschreitungswert in Block 806 erreicht wird, ohne dass eine Bestätigung eingeht, sendet die programmierbare Netzwerkschnittstelle 112 die NVMeoF-Nachricht unter Verwendung der in Block 804 zwischengespeicherten Daten oder Nutzdaten erneut an den anderen NVMe-Knoten. Wie bereits erwähnt, kann die programmierbare Netzwerkschnittstelle 112 die NVMeoF-Nachricht auch erneut senden, wenn sie eine Fehlermeldung oder NACK von der anderen NVMeoF erhält. Das erneute Senden der NVMeoF-Nachricht kann vollständig über die programmierbare Netzwerkschnittstelle 112 abgewickelt werden, ohne dass andere Komponenten von Knoten 104 beteiligt sind.
  • Als Reaktion auf eine Bestätigung, die in Block 806 vor Erreichen des Zeitüberschreitungswertes empfangen wird, kann in Block 808 eine nächste NVMeoF-Nachricht von der programmierbaren Netzwerkschnittstelle 112 gesendet werden. Die nächste NVMeoF-Nachricht kann eine NVMe-Anforderung von einer Anwendung einschließen, die auf Knoten 104 ausgeführt wird, oder sie kann zum Beispiel eine „Lebenserhaltungsnachricht“ einschließen, um zu bestimmen, ob die Verbindung mit dem anderen NVMe-Knoten noch aktiv ist. In diesem Zusammenhang kann die programmierbare Netzwerkschnittstelle 112 in regelmäßigen Abständen solche Lebenserhaltungsnachrichten senden, um die Verbindung mit dem anderen NVMe-Knoten aufrechtzuerhalten oder zu testen, ohne dass andere Komponenten von Knoten 104, wie beispielsweise ein Prozessor 106 von Knoten, beteiligt sind.
  • Wenn die Lebenserhaltungsnachricht nicht bestätigt wird oder wenn der andere NVMe-Knoten eine Trennungsanforderung sendet, führt die programmierbare Netzwerkschnittstelle 112 einen Verbindungsabbau durch, zum Beispiel durch Freigabe von Ressourcen, die zur Aufrechterhaltung der NVMeoF/TCP-Verbindung verwendet werden. In einigen Implementierungen können ein oder mehrere Werte für Metadaten, die über die Verbindung aufbewahrt werden, wie beispielsweise eine letzte für die Verbindung verwendete Anzahl von Sequenzen, als Teil der Verbindungsparameter 18 zur zukünftigen Verwendung gespeichert werden, wenn die Verbindung mit dem anderen NVMe-Knoten wieder aktiviert wird. Wie bereits erwähnt, kann die Verwendung von Verbindungsparametern 18 durch die programmierbare Netzwerkschnittstelle den Zeit- und Verarbeitungsaufwand für die Wiederherstellung einer NVMeoF/TCP-Verbindung reduzieren.
  • Wie bereits erwähnt, kann die Auslagerung der NVMeoF/TCP-Verarbeitung auf eine programmierbare Netzwerkschnittstelle normalerweise die Leistung eines Knotens, wie beispielsweise eines Servers, verbessern, da eine solche Paketverarbeitung ebenso wie die TCP-Paketverarbeitung prozessorintensiv sein kann. In dieser Hinsicht können viele der Vorgänge für eine solche NVMeoF/TCP-Verarbeitung mit einer Leitungsrate oder nahezu einer Leitungsrate durch entsprechende Aktionsstufen einer solchen programmierbaren Netzwerkschnittstelle abgewickelt werden. Darüber hinaus kann die Programmierbarkeit programmierbarer Netzwerkschnittstellen mit Programmiersprachen wie beispielsweise P4 normalerweise eine bessere Anpassung an neuere Versionen der verschiedenen verwendeten Protokolle und an sich ändernde Anforderungen für Anwendungen ermöglichen, die von Knoten in den heutigen Rechenzentren ausgeführt werden.
  • Weitere Ausführungsformen
  • Für den Durchschnittsfachmann ist ersichtlich, dass die verschiedenen veranschaulichenden Logikblöcke, Module und Prozesse, die in Verbindung mit den hierin offenbarten Beispielen beschrieben werden, als elektronische Hardware, Computersoftware oder Kombinationen von beiden implementiert werden können. Darüber hinaus können die vorgenannten Prozesse auf einem computerlesbaren Medium verkörpert werden, das die Schaltlogik des Prozessors oder der Steuerung veranlasst, bestimmte Funktionen durchzuführen oder auszuführen.
  • Um diese Austauschbarkeit von Hardware und Software klar zu veranschaulichen, wurden oben verschiedene veranschaulichende Komponenten, Blöcke und Module im Allgemeinen hinsichtlich ihrer Funktionalität beschrieben. Ob eine derartige Funktionalität als Hardware oder Software implementiert ist, hängt von der spezifischen Anwendung und Designeinschränkungen ab, denen das Gesamtsystem unterliegt. Der Durchschnittsfachmann kann die beschriebene Funktionalität für jede spezielle Anwendung auf unterschiedliche Weise implementieren, aber solche Implementierungsentscheidungen sollten nicht so interpretiert werden, dass sie eine Abweichung vom Schutzumfang der vorliegenden Offenbarung bewirken.
  • Die verschiedenen veranschaulichenden logischen Blöcke, Einheiten, Module, Prozessorschaltlogiken und Steuerschaltlogiken, die im Zusammenhang mit den hierin offenbarten Beispielen beschrieben werden, können mit einem Allzweckprozessor, einem Grafikprozessor, einem DSP, einem ASIC, einem FPGA oder einer anderen programmierbaren Logikvorrichtung, diskreter Gatter- oder Transistorlogik, diskreten Hardwarekomponenten oder einer beliebigen Kombination davon implementiert oder ausgeführt werden, um die hierin beschriebenen Funktionen auszuführen. Ein Allzweckprozessor kann ein Mikroprozessor sein, aber alternativ kann der Prozessor auch ein herkömmlicher Prozessor, eine Steuerung, ein Mikrocontroller oder eine Zustandsmaschine sein. Die Schaltlogik des Prozessors oder der Steuerung kann auch als Kombination von Rechnervorrichtungen implementiert werden, z. B. als Kombination aus einem DSP und einem Mikroprozessor, einer Vielzahl von Mikroprozessoren, einem SoC, einem oder mehreren Mikroprozessoren in Verbindung mit einem DSP-Kern oder einer anderen derartigen Konfiguration.
  • Die Aktivitäten eines Verfahrens oder eines Prozesses, die in Verbindung mit den hierin offenbarten Beispielen beschrieben werden, können direkt in Hardware, in einem Softwaremodul, das von einem Prozessor oder einer Steuerschaltlogik ausgeführt wird, oder in einer Kombination aus den beiden ausgeführt sein. Die Schritte des Verfahrens oder Algorithmus können auch in einer von den in den Beispielen bereitgestellten Schritten abweichenden Reihenfolge durchgeführt werden. Ein Softwaremodul kann sich in einem RAM-Speicher, Flash-Speicher, ROM-Speicher, EPROM-Speicher, EEPROM-Speicher, Registern, auf einer Festplatte, einem Wechselmedium, einem optischen Medium oder jeder anderen Form von Speichermedium befinden, die in der Technik bekannt sind. Ein beispielhaftes Speichermedium ist mit einer Prozessor- oder Schaltlogik gekoppelt, so dass die Prozessor- oder Schaltlogik Informationen von dem Speichermedium lesen und auf das Speichermedium schreiben kann. Alternativ kann das Speichermedium auch in die Prozessor- oder Steuerungsschaltlogik integriert sein. Die Prozessor- oder Steuerungschaltlogik und das Speichermedium können sich in einem ASIC oder einem SoC befinden.
  • Die vorstehende Beschreibung der offenbarten Ausführungsbeispiele wird bereitgestellt, um es einem Durchschnittsfachmann zu ermöglichen, die Ausführungsformen in der vorliegenden Offenbarung herzustellen oder zu verwenden. Verschiedene Modifikationen an diesen Beispielen werden dem Durchschnittsfachmann ohne Weiteres ersichtlich sein, und die hierin offenbarten Prinzipien können auf andere Beispiele angewandt werden, ohne von dem Geist oder Schutzumfang der vorliegenden Offenbarung abzuweichen. Die beschriebenen Ausführungsformen sind in jeder Hinsicht nur als veranschaulichend und nicht als einschränkend zu betrachten. Außerdem sollte die Verwendung von Formulierungen in der Form von „mindestens eines von A und B“ in den folgenden Ansprüchen als „nur A, nur B oder sowohl A als auch B“ verstanden werden.
  • 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 63124597 [0001]
    • US 17172513 [0001]

Claims (20)

  1. Programmierbare Netzwerkschnittstelle für einen Server, wobei die programmierbare Netzwerkschnittstelle Folgendes aufweist: mindestens einen Speicher, der eingerichtet ist, um Verbindungsparameter für eine Vielzahl von zuvor aktiven NVMeoF-Verbindungen (Non-Volatile Memory Express over Fabric) mit verschiedenen NVMe-Knoten (Non-Volatile Memory Express) zu speichern; und Schaltlogik, die eingerichtet ist, um: eine NVMeoF-Verbindungsanforderung von einem NVMe-Knoten zu empfangen; zu bestimmen, ob der NVMe-Knoten mit Verbindungsparametern verbunden ist, die in dem mindestens einen Speicher gespeichert sind; und als Reaktion auf die Bestimmung, dass der NVMe-Knoten mit in dem mindestens einen Speicher gespeicherten Verbindungsparametern assoziiert ist, eine neue NVMeoF-Verbindung zur Kommunikation mit dem NVMe-Knoten unter Verwendung der gespeicherten Verbindungsparameter herzustellen.
  2. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die gespeicherten Verbindungsparameter mindestens einen Hinweis auf einen Verbindungszustand, einen zwischen dem Server und dem NVMe-Knoten während einer zuvor aktiven Verbindung ausgehandelten Parameter, eine Paketfolgenummer und einen Zeitüberschreitungswert für die erneute Übertragung einschließen.
  3. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um die an den NVMe-Knoten gesendeten Daten vorübergehend zu speichern, nachdem die Daten in einer Nachricht gesendet wurden.
  4. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um: eine Nachricht über das Netzwerk-Fabric an den NVMe-Knoten zu senden; zu bestimmen, ob ein in den Verbindungsparametern gespeicherter Zeitüberschreitungswert für den Empfang einer Bestätigung der gesendeten Nachricht von dem NVMe-Knoten erreicht wurde; und als Reaktion auf das Erreichen des Zeitüberschreitungswerts, ohne die Bestätigung vom NVMe-Knoten zu erhalten, die Nachricht erneut über das Netzwerk-Fabric an den NVMe-Knoten zu senden.
  5. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um: eine NVMeoF-Trennungsanforderung vom NVMe-Knoten oder von einer vom Server ausgeführten Anwendung zu empfangen; und als Antwort auf die empfangene NVMeoF-Verbindungstrennungsanforderung einen NVMeoF/TCP-Verbindungsabbau für die neue Verbindung durchzuführen.
  6. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um einen Verbindungsaufbau für eine NVMeoF/Übertragungskontrollprotokoll (TCP)-Verbindung mit dem NVMe-Knoten durchzuführen, einschließlich: Senden einer NVMe/Übertragungskontrollprotokoll (TCP)-Initialisierungsanforderung an den NVMe-Knoten basierend auf einem von einem Prozessor des Servers empfangenen Befehl; Empfangen einer NVMe/TCP-Initialisierungsantwort von dem NVMe-Knoten; Senden einer NVMeoF-Verbindungsanforderung an den NVMe-Knoten; und Empfangen einer NVMeoF-Verbindungsantwort von dem NVMe-Knoten.
  7. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um: eine Ethernet-Kopfzeile einer vom NVMe-Knoten über die Netzwerkstruktur empfangenen Nachricht zu parsen; eine NVMe-Kapsel der vom NVMe-Knoten empfangenen Nachricht zu parsen; und einem Prozessor des Servers einen Abschnitt der NVMe-Kapsel bereitzustellen, ohne die geparste Ethernet-Kopfzeile und einen restlichen Abschnitt der NVMe-Kapsel bereitzustellen.
  8. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um: die von einem Prozessor des Servers empfangenen Daten zu fragmentieren, damit sie in eine maximale Übertragungseinheit (MTU) des Netzwerks passen; und eine Vielzahl von Nachrichten an den NVMe-Knoten für die fragmentierten Daten zu senden.
  9. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um: einen Adressraum des Servers zu partitionieren; jeder Partition des Adressraums eine NVMe-Anforderungswarteschlange zuzuweisen; eine NVMeoF-Nachricht von dem NVMe-Knoten zu empfangen; mindestens eine Adresse in der empfangenen NVMeoF-Nachricht zu identifizieren; und auf der Grundlage der identifizierten mindestens einen Adresse eine NVMe-Anforderungswarteschlange zur Durchführung einer in der NVMeoF-Nachricht eingeschlossenen NVMe-Anforderung zu bestimmen, wobei die NVMe-Anforderung von einem oder mehreren Prozessoren des Servers durchgeführt wird.
  10. Programmierbare Netzwerkschnittstelle gemäß Anspruch 1, wobei die Schaltlogik weiterhin eingerichtet ist, um an den NVMe-Knoten eine Anzeige einer vorbestimmten Anzahl von Credits für das Senden von Nachrichten an den Server auf der Grundlage einer verfügbaren Kapazität der bestimmten NVMe-Anforderungswarteschlange zu senden, die von dem NVMe-Knoten mit jeder an den Server gesendeten NVMeoF-Nachricht verringert werden.
  11. Verfahren, das von einer programmierbaren Netzwerkschnittstelle durchgeführt wird, wobei das Verfahren Folgendes aufweist: Partitionieren eines Adressraums eines Servers; Zuweisen einer NVMe (Non-Volatile Memory Express)-Anforderungswarteschlange zu jeder Partition des Adressraums; Empfangen einer NVMe over Fabric (NVMeoF) Nachricht von einem NVMe-Knoten; Identifizieren von mindestens einer Adresse in der empfangenen NVMeoF-Nachricht; und auf der Grundlage der identifizierten mindestens einen Adresse Bestimmen einer NVMe-Anforderungswarteschlange zur Durchführung einer in der NVMeoF-Nachricht eingeschlossenen NVMe-Anforderung, wobei die NVMe-Anforderung von einem oder mehreren Prozessoren des Servers durchgeführt wird.
  12. Verfahren gemäß Anspruch 11, weiterhin aufweisend das Senden an den NVMe-Knoten einer Anzeige einer vorbestimmten Anzahl von Credits für das Senden von Nachrichten an den Server basierend auf einer verfügbaren Kapazität der bestimmten NVMe-Anforderungswarteschlange, die durch den NVMe-Knoten mit jeder an den Server gesendeten NVMeoF-Nachricht verringert werden.
  13. Verfahren gemäß Anspruch 11, weiterhin aufweisend: Bestimmen, ob der NVMe-Knoten mit Verbindungsparametern für eine zuvor aktive Verbindung verbunden ist, die in mindestens einem Speicher der programmierbaren Netzwerkschnittstelle gespeichert sind; und als Reaktion auf das Bestimmen, dass der NVMe-Knoten mit den in dem mindestens einen Speicher gespeicherten Verbindungsparametern assoziiert ist, Herstellen einer neuen NVMeoF-Verbindung zum Kommunizieren mit dem NVMe-Knoten unter Verwendung der gespeicherten Verbindungsparameter.
  14. Verfahren gemäß Anspruch 11, das weiterhin das vorübergehende Speichern von an den NVMe-Knoten gesendeten Daten nach dem Senden der Daten in einer Nachricht zur erneuten Übertragung der Nachricht aufweist.
  15. Verfahren gemäß Anspruch 11, weiterhin aufweisend: Senden einer Nachricht an den NVMe-Knoten über die Netzwerkstruktur; Bestimmen, ob ein in den Verbindungsparametern gespeicherter Zeitüberschreitungswert für den Empfang einer Bestätigung der gesendeten Nachricht von dem NVMe-Knoten erreicht wurde; und als Reaktion auf das Erreichen des Zeitüberschreitungswertes, ohne die Bestätigung vom NVMe-Knoten zu erhalten, die Nachricht über das Netzwerk-Fabric erneut an den NVMe-Knoten zu senden.
  16. Verfahren gemäß Anspruch 11, weiterhin aufweisend: Empfangen einer NVMeoF-Trennungsanforderung vom NVMe-Knoten oder von einer Anwendung, die auf dem Server ausgeführt wird; und als Reaktion auf die empfangene NVMeoF-Trennungsanforderung Durchführen eines NVMeoF/TCP-Verbindungsabbaus für eine aktive Verbindung mit dem NVMe-Knoten.
  17. Verfahren gemäß Anspruch 11, das weiterhin die Durchführung eines Verbindungsaufbaus für eine NVMeoF/Übertragungskontrollprotokoll (TCP)-Verbindung einschließt: Senden einer NVMe/TCP-lnitialisierungsanforderung an einen anderen NVMe-Knoten basierend auf einem von einem Prozessor des Servers empfangenen Befehl; Empfangen einer NVMe/TCP-Initialisierungsantwort von dem anderen NVMe-Knoten; Senden einer NVMeoF-Verbindungsanforderung an den anderen NVMe-Knoten; und Empfangen einer NVMeoF-Verbindungsantwort von dem anderen NVMe-Knoten.
  18. Verfahren gemäß Anspruch 11, weiterhin aufweisend: Fragmentieren der von einem Prozessor des Servers empfangenen Daten, damit sie in eine maximale Übertragungseinheit (MTU) des Netzwerks passen; und Senden einer Vielzahl von Nachrichten an einen anderen NVMe-Knoten für die fragmentierten Daten.
  19. Programmierbare Netzwerkschnittstelle, aufweisend: mindestens einen Speicher, der eingerichtet ist, um Verbindungsparameter für eine Vielzahl von zuvor aktiven NVMeoF-Verbindungen (Non-Volatile Memory Express over Fabric) mit verschiedenen NVMe-Knoten (Non-Volatile Memory Express) zu speichern; und Mittel für: Senden einer NVMeoF-Nachricht an einen NVMe-Knoten; Bestimmen, ob ein in den Verbindungsparametern gespeicherter Zeitüberschreitungswert für den Empfang einer Bestätigung der gesendeten Nachricht von dem NVMe-Knoten erreicht wurde; und als Reaktion auf das Erreichen des Zeitüberschreitungswertes, ohne die Bestätigung vom NVMe-Knoten zu erhalten, die Nachricht über das Netzwerk-Fabric erneut an den NVMe-Knoten zu senden.
  20. Programmierbare Netzwerkschnittstelle gemäß Anspruch 19, weiterhin aufweisend Mittel zum: vorübergehendes Speichern von an den NVMe-Knoten gesendeten Daten in dem mindestens einen Speicher nach dem Senden der Daten in einer Nachricht; und als Reaktion auf das Erreichen des Zeitüberschreitungswerts, ohne die Bestätigung vom NVMe-Knoten zu erhalten, das erneute Senden der Nachricht an den NVMe-Knoten über die Netzwerkstruktur unter Verwendung der temporär gespeicherten Daten.
DE112021000196.5T 2020-12-11 2021-06-25 Paketverarbeitung durch eine programmierbare Netzwerkschnittstelle Pending DE112021000196T5 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US202063124597P 2020-12-11 2020-12-11
US63/124,597 2020-12-11
US17/172,513 US11503140B2 (en) 2020-12-11 2021-02-10 Packet processing by programmable network interface
US17/172,513 2021-02-10
PCT/US2021/039087 WO2022125146A1 (en) 2020-12-11 2021-06-25 Packet processing by programmable network interface

Publications (1)

Publication Number Publication Date
DE112021000196T5 true DE112021000196T5 (de) 2022-10-13

Family

ID=81942050

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112021000196.5T Pending DE112021000196T5 (de) 2020-12-11 2021-06-25 Paketverarbeitung durch eine programmierbare Netzwerkschnittstelle

Country Status (4)

Country Link
US (1) US11503140B2 (de)
CN (1) CN114930283A (de)
DE (1) DE112021000196T5 (de)
WO (1) WO2022125146A1 (de)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11934672B2 (en) * 2021-08-26 2024-03-19 International Business Machines Corporation Cached workload management for a multi-tenant host
CN115550377B (zh) * 2022-11-25 2023-03-07 苏州浪潮智能科技有限公司 一种nvmf存储集群节点互联方法、装置、设备及介质

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7313623B2 (en) 2002-08-30 2007-12-25 Broadcom Corporation System and method for TCP/IP offload independent of bandwidth delay product
US9658782B2 (en) 2014-07-30 2017-05-23 Excelero Storage Ltd. Scalable data using RDMA and MMIO
US9934177B2 (en) 2014-11-04 2018-04-03 Cavium, Inc. Methods and systems for accessing storage using a network interface card
US9674090B2 (en) 2015-06-26 2017-06-06 Microsoft Technology Licensing, Llc In-line network accelerator
US11327475B2 (en) * 2016-05-09 2022-05-10 Strong Force Iot Portfolio 2016, Llc Methods and systems for intelligent collection and analysis of vehicle data
US10346041B2 (en) 2016-09-14 2019-07-09 Samsung Electronics Co., Ltd. Method for using BMC as proxy NVMeoF discovery controller to provide NVM subsystems to host
US10728172B2 (en) * 2018-03-28 2020-07-28 Quanta Computer Inc. Method and system for allocating system resources
US11509606B2 (en) 2018-06-29 2022-11-22 Intel Corporation Offload of storage node scale-out management to a smart network interface controller
US10592162B2 (en) * 2018-08-22 2020-03-17 Intel Corporation Distributed storage location hinting for non-volatile memories
CN109684029A (zh) 2018-11-02 2019-04-26 新华三云计算技术有限公司 存储内容访问方法、装置、电子设备及计算机存储介质
US11379254B1 (en) * 2018-11-18 2022-07-05 Pure Storage, Inc. Dynamic configuration of a cloud-based storage system
US11038852B2 (en) * 2019-02-08 2021-06-15 Alibaba Group Holding Limited Method and system for preventing data leakage from trusted network to untrusted network
US11301398B2 (en) * 2020-03-16 2022-04-12 Dell Products L.P. Symbolic names for non-volatile memory express (NVMe™) elements in an NVMe™-over-fabrics (NVMe-oF™) system
US20200319812A1 (en) * 2020-06-03 2020-10-08 Intel Corporation Intermediary for storage command transfers
US20220100432A1 (en) * 2020-09-28 2022-03-31 Vmware, Inc. Distributed storage services supported by a nic
US11782634B2 (en) * 2020-09-28 2023-10-10 EMC IP Holding Company LLC Dynamic use of non-volatile ram as memory and storage on a storage system

Also Published As

Publication number Publication date
US11503140B2 (en) 2022-11-15
WO2022125146A1 (en) 2022-06-16
CN114930283A (zh) 2022-08-19
US20220191306A1 (en) 2022-06-16

Similar Documents

Publication Publication Date Title
DE112020002498T5 (de) System und verfahren zur erleichterung einer effizienten paketweiterleitung in einer netzwerkschnittstellensteuerung (nic)
DE60027404T2 (de) Kreditbasiertes flusskontrollverfahren
DE602005003142T2 (de) Vorrichtung und verfahren zur unterstützung von verbindungsherstellung in einem offload der netzwerkprotokollverarbeitung
US7508837B2 (en) System and method for receive queue provisioning
Wang et al. {SRNIC}: A scalable architecture for {RDMA}{NICs}
DE102020113544A1 (de) Bedarfsgesteuerte paketwarteschlangen in einer netzwerkvorrichtung
US20030167346A1 (en) Port aggregation for network connections that are offloaded to network interface devices
US20040190557A1 (en) Signaling packet
DE112021000196T5 (de) Paketverarbeitung durch eine programmierbare Netzwerkschnittstelle
DE112020004673T5 (de) Mehrpfad-Paketdeskriptor-Zustellschema
DE112021000155T5 (de) Vorrichtungen und verfahren für netzwerknachrichtensequenzierung
US11620227B2 (en) Data processing method, network interface card, and server
DE112019007502T5 (de) Zuordnen von nvme-over-fabric-paketen mithilfe von virtuellen ausgangswarteschlangen
US20050169309A1 (en) System and method for vertical perimeter protection
DE102022121268A1 (de) Überlastungssteuerung auf basis von netzwerktelemetrie
DE60318252T2 (de) Verfahren und vorrichtungen zur datenübertragung zwischen speichernetzwerken
DE102022103981A1 (de) Flusssteuerungstechnologien
US20060227799A1 (en) Systems and methods for dynamically allocating memory for RDMA data transfers
CN114726929A (zh) 网络适配器中的连接管理
US20220407824A1 (en) Connection management in a network adapter
DE112022002238T5 (de) Netzwerkschnittstellenvorrichtungs-basierte berechnungen
DE112016004290T5 (de) Technologien zur aggregationsbasierten nachrichtensynchronisation
DE112012006160B4 (de) Netzwerkknotenelement, Subnetzmanager, System und Verfahren zur effizienten Verteilung von Subnetzverwaltungsdaten über ein RDMA-Netzwerk
CN107659511B (zh) 一种过载控制方法、主机和存储介质以及程序产品
US8150996B2 (en) Method and apparatus for handling flow control for a data transfer

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE

Representative=s name: MEWBURN ELLIS LLP, DE

R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE