DE102021207394A1 - Zusammenführen von paketen auf der grundlage von hinweisen, die vom netzwerkadapter erzeugt werden - Google Patents

Zusammenführen von paketen auf der grundlage von hinweisen, die vom netzwerkadapter erzeugt werden Download PDF

Info

Publication number
DE102021207394A1
DE102021207394A1 DE102021207394.8A DE102021207394A DE102021207394A1 DE 102021207394 A1 DE102021207394 A1 DE 102021207394A1 DE 102021207394 A DE102021207394 A DE 102021207394A DE 102021207394 A1 DE102021207394 A1 DE 102021207394A1
Authority
DE
Germany
Prior art keywords
segment
payload
payloads
given
network
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
DE102021207394.8A
Other languages
English (en)
Inventor
Gal Yefet
Avi Urman
Gil Kremer
Lior Narkis
Boris Pismenny
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.)
Mellanox Technologies Ltd
Original Assignee
Mellanox Technologies Ltd
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 Mellanox Technologies Ltd filed Critical Mellanox Technologies Ltd
Publication of DE102021207394A1 publication Critical patent/DE102021207394A1/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/22Parsing or analysis of headers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/545Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9042Separate storage for different parts of the packet, e.g. header and payload
    • 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/24Traffic characterised by specific attributes, e.g. priority or QoS
    • H04L47/2441Traffic characterised by specific attributes, e.g. priority or QoS relying on flow classification, e.g. using integrated services [IntServ]

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (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

Ein Netzwerkknoten enthält einen Netzwerkadapter und einen Host. Der Netzwerkadapter ist mit einem Kommunikationsnetzwerk verbunden. Der Host enthält einen Prozessor, auf dem ein Client-Prozess und ein Kommunikationsstapel ausgeführt werden, und ist so konfiguriert, dass er Pakete vom Kommunikationsnetz empfängt und die empfangenen Pakete in entsprechende Flüsse klassifiziert, die entsprechenden Segmenten in einem Empfangspuffer zugeordnet sind, um Nutzdaten der empfangenen Pakete auf die Segmente zu verteilen, so dass Nutzdaten von Paketen, die in einen gegebenen Fluss klassifiziert sind, in einem gegebenen Segment gespeichert werden, das dem gegebenen Fluss zugewiesen ist, und um den Kommunikationsstapel über die Nutzdaten in dem gegebenen Segment zu informieren, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übertragen.

Description

  • TECHNISCHES GEBIET
  • Die hier beschriebenen Ausführungsformen beziehen sich allgemein auf die Datenkommunikation und insbesondere auf Verfahren und Systeme zur Zusammenführung von Paketen auf der Grundlage von Hinweisen, die von Netzwerkadaptern erzeugt werden.
  • HINTERGRUND
  • Client-Prozesse, die auf einem Host-Computer laufen, können mit Hilfe eines geeigneten Kommunikationsprotokolls auf ein Kommunikationsnetz zugreifen. Ein Client-Prozess kann beispielsweise über eine als „Socket“ bezeichnete Softwareschnittstelle auf die Transportschicht eines Kommunikationsprotokolls, z. B. das Transmission Control Protocol (TCP), zugreifen. ''
  • Methoden zur Anbindung einer Transportschicht unter Verwendung von Sockets sind in der Technik bekannt. So beschreibt beispielsweise die US-Patentanmeldung 2014/0229946 Systeme und Verfahren zur Ermöglichung von Netzwerkkommunikations-E/A-Operationen für virtuelle Maschinen. Ein Beispielverfahren kann Folgendes umfassen: Identifizieren eines Netzwerkpakets, das für einen virtuellen Prozess bestimmt ist, der von einem Gastbetriebssystem gesteuert wird, Identifizieren eines Speicherplatzes, der einem virtuellen Speicherplatz entspricht, der von dem virtuellen Prozess verwendet wird, und Kopieren von Daten aus dem Netzwerkpaket in den Speicherplatz, der dem virtuellen Speicherplatz entspricht. Ein anderes Beispielverfahren kann folgendes umfassen: Abrufen von Daten, die in ein Netzwerkpaket aufgenommen werden sollen, von einem ersten Speicherplatz, wobei der erste Speicherplatz einem virtuellen Speicherplatz entspricht, der von einem virtuellen Prozess verwendet wird, der von einem Gastbetriebssystem gesteuert wird, Abrufen eines Headers, der in das Netzwerkpaket aufgenommen werden soll, von einem zweiten Speicherplatz, wobei der zweite Speicherplatz einem Kernpufferplatz des Gastbetriebssystems entspricht, und Kombinieren des Headers und der Daten, um das Netzwerkpaket zu bilden.
  • ZUSAMMENFASSUNG
  • 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 stellt einen Netzwerkknoten bereit, der einen Netzwerkadapter und einen Host enthält. Der Netzwerkadapter ist mit einem Kommunikationsnetzwerk verbunden. Der Host enthält einen Prozessor, auf dem ein Client-Prozess und ein Kommunikationsstapel ausgeführt werden, und ist so konfiguriert, dass er Pakete vom Kommunikationsnetzwerk empfängt und die empfangenen Pakete in entsprechende Flüsse klassifiziert, die mit entsprechenden Chunks bzw. Segmenten in einem Empfangspuffer verbunden sind, um Payloads bzw. Nutzdaten der empfangenen Pakete auf die Segmente zu verteilen, so dass Nutzdaten von Paketen, die in einen gegebenen Fluss klassifiziert sind, in einem gegebenen Segment gespeichert werden, der dem gegebenen Fluss zugewiesen ist, und um den Kommunikationsstapel über die Nutzdaten in dem gegebenen Segment zu informieren, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übertragen.
  • In einigen Ausführungsformen ist der Prozessor ferner so konfiguriert, dass er einen Treiber ausführt, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, und der Netzwerkadapter ist so konfiguriert, dass er den Kommunikationsstapel über den Treiber über die Payloads bzw. Nutzdaten in dem gegebenen Chunk bzw. Segment informiert. In anderen Ausführungsformen ist der Treiber so konfiguriert, dass er eine zusammengefasste Nutzdaten konstruiert, die zwei oder mehr aufeinanderfolgende Nutzdaten in dem gegebenen Segment enthält, und dass er den Kommunikationsstapel über die zusammengefasste Nutzdaten informiert. In wieder anderen Ausführungsformen enthalten die Nutzdaten in dem gegebenen Segment erste und zweite Nutzdaten, die ein Übereinstimmungskriterium für das Zusammenführen bzw. die Koaleszenz erfüllen, und der Treiber ist so konfiguriert, dass er die Zusammenführung der ersten und zweiten Nutzdaten auf der Grundlage eines anderen Kriteriums als des Übereinstimmungskriteriums unterlässt.
  • In einer Ausführungsform gehören die erste und die zweite Nutzdaten in dem gegebenen Segment zu Paketen unterschiedlicher jeweiliger Flüsse, und der Netzwerkadapter ist so konfiguriert, dass er den Treiber benachrichtigt, dass die erste und die zweite Nutzdaten zum Zusammenführen nicht übereinstimmen. In einer anderen Ausführungsform ist der Netzwerkadapter als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als eine in dem gegebenen Segment zu speichernde Nutzdaten, so konfiguriert, dass er dem gegebenen Fluss einen anderen Segment zuweist und die Nutzdaten in dem anderen Segment speichert. In einer weiteren Ausführungsform ist der Netzwerkadapter als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als eine in dem gegebenen Segment zu speichernde Nutzdaten, so konfiguriert, dass er dem gegebenen Fluss einen anderen Segment zuweist und die Speicherung der Nutzdaten zwischen dem Segment und dem anderen Segment aufteilt.
  • In einigen Ausführungsformen gehören die empfangenen Pakete zu mindestens einem ersten und einem zweiten Fluss, und der Netzwerkadapter ist so konfiguriert, dass er dem ersten und dem zweiten Fluss jeweils unterschiedliche Segmente im Empfangspuffer zuweist. In anderen Ausführungsformen ist der Kommunikationsstapel so konfiguriert, dass er eine direkte Datenübertragung von zwei oder mehr Nutzdaten, die zusammenhängend in dem Segment gespeichert sind, an einen Benutzerraum vornimmt. In wieder anderen Ausführungsformen befindet sich der Empfangspuffer in einem Speicher des Hosts, und der Kommunikationsstapel ist so konfiguriert, dass er die direkte Datenübertragung nur dann anwendet, wenn die zwei oder mehr Nutzdaten (i) in dem Empfangspuffer auf die Betriebssystemseiten ausgerichtet sind und (ii) eine Betriebssystem-Seiten-Granularität aufweisen.
  • In einer Ausführungsform ist der Kommunikationsstapel in einem Kern eines Betriebssystems enthalten, das in einem Kernraum läuft, und der Kommunikationsstapel ist so konfiguriert, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment an den Client-Prozess in einem Benutzerraum überträgt. In einer anderen Ausführungsform enthält der Kommunikationsstapel ein Kommunikationsprogramm, das in einem Benutzerraum läuft, und der Kommunikationsstapel ist so konfiguriert, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment direkt an den Client-Prozess im Benutzerraum überträgt. In einer weiteren Ausführungsform ist der Netzwerkadapter so konfiguriert, dass er Header der empfangenen Pakete in einem Header-Puffer speichert und den Kommunikations-Stapel über die gespeicherten Header informiert, die den Nutzdaten der empfangenen Pakete in dem gegebenen Segment entsprechen. In einigen Ausführungsformen ist der Kommunikationsstapel oder ein Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, so konfiguriert, dass er auf der Grundlage der im Header-Puffer gespeicherten Header und einer oder mehrerer im gegebenen Segment gespeicherten Nutzdaten ein zusammengeführtes Paket erzeugt, das an den Client-Prozess übertragen wird.
  • Zusätzlich wird gemäß einer hierin beschriebenen Ausführungsform ein Verfahren zur Kommunikation bereitgestellt, das in einem Netzwerkknoten, der einen mit einem Kommunikationsnetzwerk gekoppelten Netzwerkadapter enthält, wobei der Netzwerkknoten einen Host mit einem Prozessor enthält, auf dem ein Client-Prozess und ein Kommunikationsstapel laufen, das Empfangen von Paketen vom Kommunikationsnetzwerk durch den Netzwerkadapter und das Klassifizieren der empfangenen Pakete in jeweilige Flüsse, die jeweiligen Segmente in einem Empfangspuffer zugeordnet sind, umfasst. Die Nutzdaten der empfangenen Pakete werden auf die Segmente verteilt, so dass Pakete, die einem bestimmten Fluss zugeordnet sind, in einem bestimmten Segment gespeichert werden, der dem gegebenen Fluss zugeordnet ist. Der Kommunikationsstapel wird über die Nutzdaten in dem gegebenen Segment benachrichtigt, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übermitteln.
  • In einigen Ausführungsformen umfasst das Verfahren ferner das Ausführen eines Treibers durch den Prozessor, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, wobei das Benachrichtigen des Kommunikationsstapels das Benachrichtigen des Kommunikationsstapels über die Nutzdaten in dem gegebenen Segment über den Treiber umfasst. In anderen Ausführungsformen umfasst das Verfahren ferner das Konstruieren einer zusammengeführten bzw. zusammengeführten Nutzdaten durch den Treiber, die zwei oder mehr aufeinanderfolgende Nutzdaten in dem gegebenen Segment umfasst, und das Benachrichtigen des Kommunikationsstapels über die zusammengeführte Nutzdaten. In wieder anderen Ausführungsformen umfassen die Nutzdaten in dem gegebenen Segment erste und zweite Nutzdaten, die ein Übereinstimmungskriterium für das Zusammenführen erfüllen, und das Konstruieren der zusammengeführten Nutzdaten umfasst das Unterlassen des Zusammenführens der ersten und zweiten Nutzdaten auf der Grundlage eines anderen Kriteriums als des Übereinstimmungskriteriums.
  • In einer Ausführungsform gehören erste und zweite aufeinanderfolgende Nutzdaten in dem gegebenen Segment zu Paketen verschiedener jeweiliger Flüsse, und wobei das Benachrichtigen des Kommunikationsstapels das Benachrichtigen des Kommunikationsstapels über den Treiber umfasst, dass die ersten und zweiten Nutzdaten zum Zusammenführen nicht übereinstimmen. In einer anderen Ausführungsform umfasst das Verfahren ferner als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als eine in dem gegebenen Segment zu speichernde Nutzdaten, das Zuweisen eines anderen Segmentes an den gegebenen Fluss und das Speichern der Nutzdaten in dem anderen Segment. In einer weiteren Ausführungsform umfasst das Verfahren ferner als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als eine in dem Segment zu speichernde Nutzdaten, die Zuweisung eines anderen Segment an den gegebenen Fluss und die Aufteilung der Speicherung der Nutzdaten zwischen dem Segment und dem anderen Segment.
  • In einigen Ausführungsformen gehören die empfangenen Pakete zu mindestens einem ersten und einem zweiten Fluss, und das Verfahren umfasst ferner das Zuweisen von jeweils unterschiedlichen Segmenten im Empfangspuffer an den ersten und den zweiten Fluss. In anderen Ausführungsformen umfasst das Verfahren ferner die Anwendung einer direkten Datenübertragung von zwei oder mehr Nutzdaten, die zusammenhängend in dem Segment gespeichert sind, durch den Kommunikationsstapel an einen Benutzerraum. In wieder anderen Ausführungsformen befindet sich der Empfangspuffer in einem Speicher des Hosts, und das Anwenden des direkten Datentransfers umfasst das Anwenden des direkten Datentransfers auf einen Benutzerraum nur auf Daten, die (i) im Empfangspuffer auf die Betriebssystemseiten ausgerichtet sind und (ii) eine Betriebssystem-Seiten-Granularität aufweisen.
  • In einer Ausführungsform ist der Kommunikationsstapel in einem Kern eines Betriebssystems enthalten, das in einem Kernraum läuft, und das Verfahren umfasst ferner die Übertragung einer oder mehrerer Nutzdaten in dem gegebenen Segment an den Client-Prozess in einem Benutzerraum. In einer anderen Ausführungsform umfasst der Kommunikationsstapel ein Kommunikationsprogramm, das in einem Benutzerraum läuft, und das Verfahren umfasst ferner die Übertragung einer oder mehrerer Nutzdaten in dem gegebenen Segment direkt an den Client-Prozess in dem Benutzerraum. In einer weiteren Ausführungsform umfasst das Verfahren ferner das Speichern von Headerzeilen der empfangenen Pakete in einem Headerzeilenpuffer und das Benachrichtigen des Kommunikations-Stapels über die gespeicherten Headerzeilen, die den Nutzdaten der empfangenen Pakete in dem gegebenen Segment entsprechen. In einigen Ausführungsformen umfasst das Verfahren ferner das Erzeugen, durch den Kommunikationsstapel oder durch einen Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, eines zusammengeführten Pakets, das an den Client-Prozess zu übertragen ist, basierend auf den in dem Header-Puffer gespeicherten Headern und auf einer oder mehreren in dem gegebenen Segment gespeicherten Nutzdaten.
  • Gemäß einer hier beschriebenen Ausführungsform wird zusätzlich ein Netzwerkadapter bereitgestellt, der eine Netzwerkschnittstelle, eine Hostschnittstelle und eine Paketverarbeitungsschaltung umfasst. Die Netzwerkschnittstelle ist für den Anschluss an ein Kommunikationsnetzwerk konfiguriert. Die Hostschnittstelle ist mit einem Host gekoppelt, der einen Prozessor, der einen Client-Prozess ausführt, und einen Kommunikationsstapel enthält. Die Paketverarbeitungsschaltung ist so konfiguriert, dass sie Pakete vom Kommunikationsnetzwerk empfängt und die empfangenen Pakete in entsprechende Flüsse klassifiziert, die mit entsprechenden Segmenten in einem Empfangspuffer verbunden sind, um Nutzdaten der empfangenen Pakete auf die Segmente zu verteilen, so dass Pakete, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, der dem gegebenen Fluss zugewiesen ist, und um den Kommunikationsstapel über die Nutzdaten in dem gegebenen Segment zu informieren, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übertragen.
  • Gemäß einer hierin beschriebenen Ausführungsform wird zusätzlich ein Kommunikationsverfahren bereitgestellt, das in einem Netzwerkadapter, der mit einem Kommunikationsnetzwerk und einem Host verbunden ist, der einen Prozessor enthält, auf dem ein Client-Prozess und ein Kommunikationsstapel laufen, das Empfangen von Paketen aus dem Kommunikationsnetzwerk und das Klassifizieren der empfangenen Pakete in entsprechende Flüsse umfasst, die mit entsprechenden Segmenten im Empfangspuffer verbunden sind. Die Nutzdaten der empfangenen Pakete werden auf die Segmente verteilt, so dass Pakete, die einem bestimmten Fluss zugeordnet sind, in einem bestimmten Segment gespeichert werden, der dem gegebenen Fluss zugeordnet ist. Der Kommunikationsstapel wird über die Nutzdaten in dem gegebenen Segment benachrichtigt, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übermitteln.
  • 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 Geräteaspekt oder eine Ausführungsform angewandt werden und umgekehrt.
  • Diese und andere Ausführungsformen werden aus der folgenden detaillierten Beschreibung der Ausführungsformen in Verbindung mit den Zeichnungen, in denen sie dargestellt sind, besser verständlich:
  • Figurenliste
    • 1 ist ein Blockdiagramm, das schematisch ein Computersystem zeigt, in dem ein Netzwerkadapter einen Host mit Hinweisen zum Zusammenführen empfangener Pakete versorgt, in Übereinstimmung mit einer hier beschriebenen Ausführungsform;
    • 2 ist ein Diagramm, das schematisch Empfangspuffer zeigt, die in mehrere Segmente zum Speichern von Nutzdaten empfangener Pakete unterteilt sind, in Übereinstimmung mit einer hier beschriebenen Ausführungsform;
    • 3 ist ein Diagramm, das schematisch ein Schema für die Pufferung empfangener Pakete, die zu einem gemeinsamen Fluss gehören, in Übereinstimmung mit einer hier beschriebenen Ausführungsform darstellt;
    • 4 ist ein Diagramm, das schematisch ein Schema zum Puffern empfangener Pakete, die zu mehreren Flüssen gehören, gemäß einer hier beschriebenen Ausführungsform zeigt; und
    • 5 ist ein Flussdiagramm, das schematisch ein Verfahren zum Zusammenführen von Paketen in Blöcken gemäß einer hier beschriebenen Ausführungsform zeigt.
  • DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • ÜBERSICHT
  • Die hier beschriebenen Ausführungsformen bieten Systeme und Verfahren zum Zusammenführen von Paketen auf der Grundlage von Hinweisen, die von Netzwerkadaptern erzeugt werden.
  • Ein Netzknoten besteht in der Regel aus einem Host, der über einen Netzwerkadapter oder einen Network Interface Controller (NIC) an ein Kommunikationsnetz angeschlossen ist. Der Host verfügt über einen Prozessor, z. B. eine Zentraleinheit (Central Processing Unit, CPU), und einen Speicher. Der Netzwerkadapter empfängt Pakete aus dem Kommunikationsnetz und leitet die empfangenen Pakete an höhere Softwareschichten weiter. Auf der CPU laufen in der Regel ein Kommunikationsstapel, ein Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, und Client-Prozesse wie Benutzeranwendungsprogramme.
  • Der Kommunikationsstapel kann in einem Kernprogramm eines zugrundeliegenden Betriebssystems (OS), z. B. dem Linux OS, enthalten sein. In einer alternativen Ausführungsform kann auch ein Data Plane Development Kit (DPDK) verwendet werden. Das DPDK läuft im Nutzerraum bzw. Userspace und stellt Open-Source-Bibliotheken und Netzwerkadaptertreiber zur Verfügung, um die Paketverarbeitung aus dem Betriebssystemkern auszulagern. Das DPDK-Projekt wird von der Linux Foundation verwaltet. Alternativ kann auch jeder andere geeignete Kommunikationsstapel verwendet werden.
  • In der folgenden Beschreibung wird davon ausgegangen, dass Benutzeranwendungsprogramme, Client-Prozesse und das DPDK Zugriff auf einen Bereich im Speicher haben, der hier als „Benutzerbereich“ bezeichnet wird, und dass das Kernprogramm Zugriff auf einen anderen Bereich im Speicher hat, der hier als „Kernbereich“ bezeichnet wird. Bei der Kern-basierten Kommunikation werden die vom Kommunikationsnetz über den Netzwerkadapter empfangenen Pakete üblicherweise zunächst im Kernraum zwischengespeichert und dann vom Kernprogramm in den Nutzerraum übertragen. In der Konstruktion umgeht DPDK das Kernprogramm und überträgt die empfangenen Daten direkt in den Benutzerbereich.
  • Bei der Kern-basierten Kommunikation stellt ein Client-Prozess dem Kern einen Socket-Puffer und die zu konsumierende Datenmenge zur Verfügung, um Daten aus dem Kommunikationsnetz zu empfangen. Der Netzwerkadapter empfängt vom Kommunikationsnetz Pakete, die für den Client-Prozess bestimmt sind, und speichert sie im Socket-Puffer. Der Kern kopiert dann die Daten aus dem Socket-Puffer (oder aus einem Puffer, auf den der Socket-Puffer zeigt) in den Speicher des Anwenderbereichs, auf den der Client-Prozess zugreifen kann. Der Kopiervorgang in den Benutzerraum kann in Bezug auf CPU-Zyklen, Kommunikationsdurchsatz und Latenzzeit kostspielig sein.
  • Die vom Kommunikationsnetz empfangenen Pakete haben in der Regel eine begrenzte Größe. Die als MTU (Maximum Transfer Unit) bekannte Größenbeschränkung definiert die Größe des größten Pakets, das über die Leitung im zugrunde liegenden Netz gesendet werden kann, z. B. 1,5 KByte. Die Bearbeitung kleiner Pakete erfordert eine umfangreiche Verarbeitung, verursacht hohe Latenzzeiten und beeinträchtigt den Durchsatz, da die Headerzeilen der Pakete getrennt verarbeitet werden.
  • Grundsätzlich können zur Verbesserung der Leistung, z. B. bei der LRO-Methode (Large Receive Offload), mehrere Pakete eines gemeinsamen Datenflusses zusammengeführt werden, um ein größeres Paket zu erzeugen, das von höheren Schichten des Netzwerkstapels verarbeitet wird. Der Hauptnachteil der LRO-Methode und ähnlicher Verfahren besteht darin, dass der Kommunikationsstapel nur das große zusammengefasste Paket empfängt und keine Flexibilität bei der Steuerung des Paketzusammenfassungsprozesses hat.
  • In den offengelegten Ausführungsformen speichert der Netzwerkadapter den Header und die Nutzdaten jedes empfangenen Pakets separat. Der Netzwerkadapter meldet dem Kommunikationsstapel (z. B. über den Treiber) Nutzdaten mehrerer Pakete, die zu einem gemeinsamen Fluss gehören, und die entsprechenden Headerdaten. Der Kommunikationsstapel oder der Treiber kann einige oder alle der gemeldeten Nutzdaten kombinieren, um mindestens ein gemischtes Paket zu erstellen, das zwei oder mehr gemeldete Nutzdaten enthält, wobei der Header des gemischten Pakets auf den gemeldeten Headern basiert.
  • Mit der Linux-Version 4.18 vom August 2018 wurde eine Funktion zum Empfangen von Null-Kopien eingeführt. Die Linux-Funktion unterstützt Null- Kopien nur in einen zusammenhängenden Speicherbereich, der an den Betriebssystemseiten ausgerichtet ist und dessen Größe einem ganzzahligen Vielfachen der Betriebssystemseitengröße entspricht (z. B. 4 KByte). Die Linux-Null-Kopie-Funktion wendet Techniken zur Abbildung von Speicheradressen an. In einigen Ausführungsformen ist die Null-Kopierfunktion in das zugrunde liegende Kommunikationsprotokoll wie das Transmission Control Protocol (TCP) integriert.
  • Die Kern-Null-kopie-Übertragung kann z. B. durch die Übermittlung von Paketen mit einer Nutzdatengröße, die der Seitengröße des Betriebssystems entspricht, ausgelöst werden. Eine solche Konfiguration ist jedoch begrenzt und schließt wichtige Anwendungsfälle aus, wie z. B. die Verwendung einer Betriebssystem-Seitengröße von 4 KByte und einer maximalen Übertragungseinheit (MTU) von 1,5 KByte. Die MTU ist oft auf 1,5 KByte konfiguriert, was es unmöglich macht, Pakete mit der Größe der Betriebssystemseiten (z. B. 4 KByte) zu senden. Ein Nachteil der Verwendung einer relativ kleinen MTU ist, dass eine Quelle eine große Datenmenge in mehrere kleinere Einheiten aufteilen muss, die jeweils in einem separaten Paket gesendet werden, um die MTU-Beschränkung einzuhalten. Dies verbraucht Netzwerkbandbreite und Verarbeitungsressourcen aufgrund der vielen Paketheader.
  • Im Prinzip könnte der MTU-Wert erhöht werden. Dies ist jedoch in vielen praktischen Anwendungsfällen nicht möglich. Selbst wenn die MTU auf etwa 4 KByte konfiguriert werden könnte, ist es bei Verwendung der Kern-Null-Kopierfunktion erforderlich, nur die Nutzdaten der Pakete in den Socket-Puffer zu streuen (ohne die Headerzeilen), wobei eine Ausrichtung auf Betriebssystemseiten erforderlich ist.
  • In einigen offengelegten Ausführungsformen ist der Kommunikationsstapel in einem Kernprogramm enthalten, das die Null-kopie-Datenübertragung in den Benutzerbereich nur auf Daten anwendet, die im Speicher auf Betriebssystemseiten ausgerichtet sind und Seiten-Granularität aufweisen. Der Netzwerkadapter wendet neuartige Pufferungsschemata auf eingehende Pakete an, um den Aufruf der Kern-Null-kopie-Funktion zu erzwingen.
  • In einigen Ausführungsformen umfasst ein Netzknoten einen Netzadapter und einen Host. Der Netzwerkadapter ist mit einem Kommunikationsnetzwerk verbunden. Der Host umfasst einen Prozessor, auf dem ein Client-Prozess und ein Kommunikations-Stapel laufen. Der Netzwerkadapter klassifiziert empfangene Pakete in entsprechende Flüsse, die mit entsprechenden Segmenten in einem Empfangspuffer verbunden sind. Der Netzwerkadapter verteilt die Nutzdaten der empfangenen Pakete auf die Segmente, so dass Pakete, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, der dem gegebenen Fluss zugeordnet ist, und benachrichtigt den Kommunikationsstapel über die Nutzdaten in dem gegebenen Segment, um das zusammengeführte Paket an den Client-Prozess zu übertragen.
  • Im vorliegenden Zusammenhang umfasst ein „Fluss“ eine Folge von Paketen, die von einer gemeinsamen Quelle ausgehen und für ein gemeinsames Ziel bestimmt sind. Ein Fluss kann durch ein oder mehrere vordefinierte Felder im Paketheader identifiziert werden.
  • In einigen Ausführungsformen ist der Prozessor ferner so konfiguriert, dass er einen Treiber ausführt, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, und der Netzwerkadapter ist so konfiguriert, dass er den Kommunikationsstapel über den Treiber über die Nutzdaten in dem gegebenen Segment informiert. Der Treiber konstruiert eine zusammengefasste Nutzdaten, die zwei oder mehr aufeinanderfolgende Nutzdaten in dem gegebenen Segment enthält, und benachrichtigt den Kommunikationsstapel über die zusammengefasste Nutzdaten. In einer Ausführungsform enthalten die Nutzdaten in dem gegebenen Segment erste und zweite Nutzdaten, die ein Übereinstimmungskriterium für die Zusammenführung erfüllen, aber der Treiber sieht davon ab, die ersten und zweiten Nutzdaten auf der Grundlage eines anderen Kriteriums als des Übereinstimmungskriteriums zusammenzuführen.
  • In einer Ausführungsform gehören die ersten und die zweiten Nutzdaten in dem gegebenen Segment zu Paketen verschiedener Datenströme. Dies kann der Fall sein, wenn mehrere Flusskennungen zu einem gemeinsamen Hash-Ergebnis zusammengefasst werden. In solchen Fällen benachrichtigt der Netzwerkadapter den Treiber, dass die ersten und zweiten Nutzdaten nicht übereinstimmen, um sie zusammenzuführen. Der Netzwerkadapter speichert zusätzlich die Header der empfangenen Pakete im Header-Puffer und benachrichtigt den Kommunikationsstapel über die gespeicherten Header, die den Nutzdaten der empfangenen Pakete in dem gegebenen Segment entsprechen. Der Kommunikationsstapel oder der Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, erzeugt auf der Grundlage der im Header-Puffer gespeicherten Header und einer oder mehrerer im gegebenen Segment gespeicherten Nutzdaten ein zusammengeführtes Paket, das an den Client-Prozess übertragen wird.
  • Jedes Segment hat einen begrenzten Speicherplatz im Empfangspuffer. Als Reaktion auf die Feststellung, dass der im gegebenen Segment verfügbare Speicherplatz kleiner ist als eine im gegebenen Segment zu speichernde Nutzdaten, weist der Netzwerkadapter dem gegebenen Fluss ein anderes Segment zu und speichert die Nutzdaten in dem anderen Segment. Alternativ dazu teilt der Netzwerkadapter die Speicherung der Nutzdaten zwischen dem Segment und dem anderen Segment auf.
  • In einigen Ausführungsformen gehören die empfangenen Pakete zu mindestens einem ersten und einem zweiten Datenfluss, und der Netzwerkadapter weist dem ersten und dem zweiten Datenfluss jeweils unterschiedliche Segmente im Empfangspuffer zu.
  • In einer Ausführungsform wendet der Kommunikationsstapel eine direkte Datenübertragung von zwei oder mehr zusammenhängend im Segment gespeicherten Nutzdaten an einen Benutzerraum an. Wenn sich der Empfangspuffer in einem Speicher des Hosts befindet, kann der Kommunikationsstapel eine direkte Datenübertragung (z. B. Null-Kopie-Übertragung) nur dann anwenden, wenn die zwei oder mehr Nutzdaten (i) im Empfangspuffer auf die Betriebssystemseiten ausgerichtet sind und (ii) eine Betriebssystemseiten-Granularität aufweisen.
  • In einer Ausführungsform ist der Kommunikationsstapel in einem Kern eines Betriebssystems enthalten, das in einem Kernraum läuft, und der Kommunikationsstapel ist so konfiguriert, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment an den Client-Prozess in einem Benutzerraum überträgt. In einer anderen Ausführungsform umfasst der Kommunikationsstapel ein Kommunikationsprogramm, das in einem Benutzerraum läuft, und der Kommunikationsstapel ist so konfiguriert, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment direkt an den Client-Prozess im Benutzerraum überträgt.
  • Bei den vorgestellten Techniken speichert der Netzwerkadapter die Nutzdaten der empfangenen Pakete, die zu einem gemeinsamen Datenfluss gehören, in einem gemeinsamen Segment. Der Netzwerkadapter meldet die Nutzdaten im Segment und passende Hinweise zwischen aufeinanderfolgenden Nutzdaten an einen Kommunikationsstapel, z. B. über einen Treiber. Der Kommunikationsstapel oder der Treiber hat die Flexibilität, ein oder mehrere zusammengeführte Pakete aus den gemeldeten Nutzdaten zu konstruieren. Die Verarbeitung zusammengefasster Pakete, die jeweils zusammengefasste Nutzdaten enthalten, ist in der Regel effizienter als die Verarbeitung der einzelnen Pakete, so dass der Kommunikationsdurchsatz durch die offengelegten Ausführungsformen erhöht wird.
  • BESCHREIBUNG DES SYSTEMS
  • 1 ist ein Blockdiagramm, das schematisch ein Computersystem 20 zeigt, in dem ein Netzwerkadapter einen Host mit Hinweisen zum Zusammenführen empfangener Pakete versorgt, in Übereinstimmung mit einer hier beschriebenen Ausführungsform.
  • Im Rechnersystem 20 kommuniziert der Netzknoten 24 mit den Netzknoten 28 über ein Kommunikationsnetz 30. Das Kommunikationsnetz 30 kann ein beliebiges geeignetes Paketnetz wie z. B. ein Ethernet-Netz oder ein IP-Netz wie das Internet umfassen. Das Kommunikationsnetz 30 kann mit einem oder mehreren geeigneten Kommunikationsprotokollen wie dem Internet-Protokoll (IP), dem Übertragungssteuerungsprotokoll (TCP) oder beiden arbeiten. In einer anderen Ausführungsform umfasst das Kommunikationsnetz die InfiniBandTM (IB)-Struktur, in der die Pakete unter Verwendung der Protokolle TCP und IP over IB (IPoIB) übertragen werden.
  • Das Rechensystem 20 kann in jeder Anwendung eingesetzt werden, in der Netzwerkknoten große Datenmengen austauschen, wie z. B. im High-Performance Computing (HPC) und in verteilten Rechen- und Datenzentren.
  • Der Netzknoten 24 umfasst einen Prozessor in Form einer zentralen Verarbeitungseinheit (CPU) 32 und einen Speicher 34, die durch einen geeigneten Bus 36 miteinander verbunden sind. Im vorliegenden Beispiel umfasst der Bus 36 einen Peripheral Component Interconnect Express (PCIe)-Bus. Der Netzwerkknoten 24 umfasst außerdem einen Netzwerkadapter 38 für den Anschluss an das Kommunikationsnetzwerk 30, beispielsweise eine Netzwerkschnittstellenkarte (NIC). Die Kombination aus CPU 32, Speicher 34 und Bus 36 (mit oder ohne Netzwerkadapter) wird der Einfachheit halber auch als „Host-Computer“ oder einfach „Host“ bezeichnet. Der Speicher 34 wird auch als „Host-Speicher“ oder „Systemspeicher“ bezeichnet.
  • Der Netzwerkadapter 38 umfasst eine Netzwerkschnittstelle 42, die mit dem Kommunikationsnetz 30 verbunden ist, und eine Host-Schnittstelle 44, die über den Bus 36 mit der CPU 32 und dem Speicher 34 verbunden ist. Die Paketverarbeitungsschaltung 46, die zwischen der Netzwerkschnittstelle 42 und der Hostschnittstelle 44 angeschlossen ist, erzeugt ausgehende Pakete für die Übertragung über das Kommunikationsnetz 30 und verarbeitet eingehende, vom Kommunikationsnetz empfangene Pakete, wie im Folgenden beschrieben wird. In der Eingangsrichtung führt die Paketverarbeitungsschaltung 46 bei Paketen, die über die Netzwerkschnittstelle 42 im Netzelement empfangen werden, verschiedene Verarbeitungen durch, wie z. B. die Überprüfung der Korrektheit der Daten in den Nutzdaten des Pakets, die Klassifizierung und Priorisierung der Pakete und die Weiterleitung. Die Schaltung zur Paketverarbeitung prüft typischerweise bestimmte Felder in den Headerzeilen der Pakete zum Zweck der Paketklassifizierung und des Routings. Die Header-Felder enthalten Adressierungsinformationen, z. B. Quell- und Zieladressen und Portnummern, sowie das verwendete Netzwerkprotokoll.
  • Die Netzschnittstelle 42, die Host-Schnittstelle 44 und die Paketverarbeitungsschaltung 46 umfassen in der Regel eine spezielle Hardware-Logik. Alternativ oder zusätzlich können zumindest einige der Funktionen der Paketverarbeitungsschaltung 46 in Software auf einem geeigneten programmierbaren Prozessor implementiert werden.
  • Auf der CPU 32 läuft ein Kommunikationsprogramm 50, das die Host-Kommunikation über die Netzwerkkommunikation 30 über den Netzwerkadapter 38 abwickelt. Das Kommunikationsprogramm 50 wird hier auch als „Kommunikationsstapel“ bezeichnet. Der Kommunikationsstapel 50 kann beispielsweise in einem Kernprogramm enthalten sein, das Teil eines Betriebssystems (OS) (nicht dargestellt) wie „Linux“ ist. Alternativ umgeht der Kommunikationsstapel das Kernprogramm, wie z. B. das Data Plane Development Kit (DPDK). Das DPDK ist eine Open-Source-Software, die von der Linux Foundation verwaltet wird. Das DPDK ermöglicht einen höheren Paketdurchsatz als der Linux-Kern, der durch vom Netzwerkadapter erzeugte Interrupts gesteuert wird.
  • Der Kommunikationsstapel 50 umfasst ein Kommunikationsprotokoll einschließlich einer Transportschicht 52, z. B. TCP. Ein Treiber 54 läuft unterhalb der Transportschicht 52 und vermittelt zwischen dem Kommunikationsstapel 50 und dem Netzwerkadapter 38.
  • Client-Prozesse 60 (der Kürze halber auch einfach als „Clients“ bezeichnet), die auf der CPU 32 laufen, wie z.B. von Anwendungssoftware erzeugte Prozesse, kommunizieren mit Peer-Clients (nicht dargestellt), die auf entfernten Netzknoten 28 laufen.
  • Wie weiter unten im Detail beschrieben wird, verwaltet der Treiber 54 beim Empfang von Paketen aus dem Kommunikationsnetz 30 die Zuweisung von Ressourcen wie Puffern und Warteschlangen, die vom Netzwerkadapter 38 für den Paketempfang verwendet werden. In einigen Ausführungsformen speichert der Netzwerkadapter 38 die Nutzdaten mehrerer Pakete in Empfangspuffer(n) 64, die auf die Seiten des Betriebssystems ausgerichtet sind. Der Treiber 54 überwacht den Paketempfang in den Empfangspuffern 64 und leitet die Datenübertragung von einem Empfangspuffer, z. B. über den Kommunikationspuffer 68, zu einem Benutzerpuffer 72 im Benutzerraum ein, auf den der entsprechende Client-Prozess zugreifen kann. Der Kommunikationspuffer 68 kann z. B. ein TCP-Socket-Puffer (SKB) sein. In einigen Ausführungsformen, die im Folgenden näher beschrieben werden, unterstützt der Kommunikationsstapel die Null-Kopie-Übertragung von gepufferten Daten in den Benutzerraum, die in Ausrichtung auf Betriebssystemseiten und in Seiten-Granularität gespeichert werden.
  • Die in 1 gezeigten Konfigurationen des Rechnersystems, des Netzknotens und des Netzadapters sind Beispielkonfigurationen, die lediglich aus Gründen der konzeptionellen Klarheit gewählt wurden. In alternativen Ausführungsformen können auch andere geeignete Konfigurationen von Rechnersystem, Netzwerkknoten und Netzwerkadapter verwendet werden. Elemente, die für das Verständnis der Grundsätze der vorliegenden Erfindung nicht notwendig sind, wie verschiedene Schnittstellen, Adressierungsschaltungen, Zeitsteuerungs- und Sequenzierungsschaltungen und Fehlerbeseitigungsschaltungen, wurden aus Gründen der Übersichtlichkeit in der Figur weggelassen.
  • Einige Elemente des Netzwerkadapters 38, wie die Paketverarbeitung 46, können in Hardware implementiert werden, z. B. in einem oder mehreren anwendungsspezifischen integrierten Schaltkreisen (ASICs) oder FPGAs. Zusätzlich oder alternativ kann die Paketverarbeitungsschaltung 46 durch Software oder durch eine Kombination von Hardware- und Softwareelementen implementiert werden. Der Speicher 34 kann jeden geeigneten Speichertyp mit jeder geeigneten Speichertechnologie umfassen, z.B. einen Direktzugriffsspeicher (RAM), einen dynamischen RAM (DRAM), einen nichtflüchtigen Speicher wie einen Flash-Speicher oder eine Kombination mehrerer Speichertypen.
  • In einigen Ausführungsformen können einige der Funktionen des Netzadapters 38 von einem Mehrzweckprozessor, z. B. der Paketverarbeitungsschaltung 46, ausgeführt werden, der in Software programmiert ist, um die hier beschriebenen Funktionen auszuführen. Die Software kann in elektronischer Form, z. B. über ein Netzwerk, auf den Prozessor heruntergeladen werden, oder sie kann alternativ oder zusätzlich auf nicht-übertragbaren materiellen Medien, wie z. B. einem magnetischen, optischen oder elektronischen Speicher, bereitgestellt und/oder gespeichert werden.
  • VERWALTUNG VON EMPFANGSPUFFERN
  • 2 ist ein Diagramm, das schematisch Empfangspuffer zeigt, die in mehrere Segmente zum Speichern von Nutzdaten empfangener Pakete unterteilt sind, in Übereinstimmung mit einer hier beschriebenen Ausführungsform.
  • In 2 umfasst eine zyklische Shared Receive Queue (SRQ) 76 mehrere Work Queue Elements (WQEs) 78, wobei jede WQE einen Zeiger auf einen entsprechenden Empfangspuffer 64 enthält. In einigen Ausführungsformen speichert ein WQE Informationen über die Segment-Nutzung, z. B. die Belegung der Segmente, die gerade verwendet werden, und den nächsten verfügbaren Segment im Empfangspuffer.
  • In einigen Ausführungsformen erstellt der Treiber 54 die SRQ 76 bei der Initialisierung, z. B. nach dem Zurücksetzen, und sendet mehrere WQEs 78 an die SRQ, bevor er mit dem Paketempfang beginnt. Der Netzwerkadapter führt dann die geposteten WQEs sequentiell (und zyklisch) aus. Wenn der aktuell verwendete Empfangspuffer voll ist, schaltet der Netzwerkadapter auf eine nachfolgende WQE um, die auf einen freien Empfangspuffer verweist. In einigen Ausführungsformen sendet der Netzwerkadapter 38 verbrauchte WQEs automatisch an die SRQ 76 zurück, so dass die Clients nicht mehr mit dem Senden von WQEs beschäftigt sind. In einigen Ausführungsformen kann der Netzwerkadapter 38 je nach Bedarf WQEs zur SRQ 76 hinzufügen oder WEQs daraus entfernen.
  • In einigen Ausführungsformen umfasst der Empfangspuffer 64 mehrere Segmente 80 (oder ist in diese unterteilt), wobei jeder Segment einen zusammenhängenden Bereich von Adressen im Speicher 34 umfasst. In einigen Ausführungsformen sind die Segmente 80 auf die Betriebssystemseiten ausgerichtet, was bedeutet, dass die Anfangsadresse eines Segmentes 80 im Speicher 34 auf die Adresse einer entsprechenden Betriebssystemseite ausgerichtet ist. In der folgenden Beschreibung wird eine „Betriebssystemseite“ der Kürze halber einfach als „Seite“ bezeichnet.
  • Im vorliegenden Zusammenhang wird ein Bereich im Speicher 34, dessen Anfangsadresse an einer entsprechenden Seite des Betriebssystems ausgerichtet ist, als „seitenorientiert“ bezeichnet. Wenn die Größe eines seitenausgerichteten Bereichs ein ganzzahliges Vielfaches der Seitengröße des Betriebssystems ist, wird der Bereich auch als „Seiten-Granularität“ bezeichnet.
  • In einigen Ausführungsformen sind die Segmente 80 seitenorientiert und haben eine Seiten-Granularität. Im Beispiel von 2 hat der Empfangspuffer einen zusammenhängenden Bereich von Adressen, der in mehrere Segmente unterteilt ist. In einem Ausführungsbeispiel beträgt die Größe der Betriebssystemseiten 4 KByte, die Größe der Segmente 64 KByte (16 Seiten) und die Größe des Empfangspuffers 1 MByte (16 Segmente).
  • Wenn ein Segment 80 seitenorientiert ist, wird ein zusammenhängender Bereich von Adressen, der am Anfang dieses Segmente beginnt und eine Seiten-Granularität hat, vom Kommunikationsstapel 50 in den Benutzerraum null-kopiert (z. B. wenn Null-kopie unterstützt und aktiviert ist). Wenn andererseits die Größe des zusammenhängenden Bereichs kein ganzzahliges Vielfaches der Betriebssystem-Seitengröße ist, wird ein erster Teil des Bereichs, der eine Seiten-Granularität aufweist, null-kopiert, und der verbleibende Teil des Bereichs (der kleiner als die Seitengröße ist) wird auf herkömmliche Weise in den Benutzerbereich kopiert. Um die Menge der null-kopierten Daten zu erhöhen, sollten die Segmente 80 daher so konfiguriert werden, dass sie sowohl seitenorientiert sind als auch eine Seiten-Granularität aufweisen.
  • Wie weiter unten beschrieben wird, speichert der Netzwerkadapter 38 in den Segmente 80 nur die Nutzdaten der eingehenden Pakete (und speichert die Header der eingehenden Pakete separat). In den offengelegten Ausführungsformen kann jede geeignete Nutzdatengröße verwendet werden, und verschiedene Pakete können Nutzdaten gleicher oder unterschiedlicher Größe haben.
  • Obwohl in 2 alle Segmente 80 eine gemeinsame Größe haben, ist diese Konfiguration nicht zwingend. In alternativen Ausführungsformen können auch Segmente mit unterschiedlichen Größen verwendet werden. Beispielsweise kann die Größe der Segmente von den Datenraten und/oder Prioritäten der Datenströme abhängen.
  • VERFAHREN FÜR PAKETPUFFERUNG UND ZUSAMMENFÜHRUNG
  • 3 ist ein Diagramm, das schematisch ein Schema für die Pufferung empfangener Pakete, die zu einem gemeinsamen Fluss gehören, in Übereinstimmung mit einer hier beschriebenen Ausführungsform darstellt.
  • In 3 empfängt der Netzadapter 38 Pakete 82 vom Kommunikationsnetz 30, wobei jedes Paket einen Headerteil 83 und eine Nutzdaten 84 enthält. Der Netzwerkadapter 38 verarbeitet die Pakete 82 und teilt jedes Paket in seinen Header und seine Nutzdaten auf, um sie getrennt zu speichern. Konkret verteilt der Netzwerkadapter die Header 83 (z. B. sequentiell) in einem dedizierten Header-Puffer 86 und die Nutzdaten 84 desselben Flusses zusammenhängend in einem Segment 80 des Empfangspuffers 64. Der Netzwerkadapter speichert die erste Nutzdaten am Anfang des Segmentes, die zweite Nutzdaten unmittelbar nach den ersten Nutzdaten und so weiter. Die in demselben Segment verstreuten Nutzdaten bilden eine große zusammenhängende Nutzdatenmenge 92.
  • In einigen Ausführungsformen wählt der Netzwerkadapter einen der Header 83 im Header-Puffer 86 als Header eines großen Pakets mit zusammengeführter Nutzdaten 92 aus und modifiziert den ausgewählten Header entsprechend. Alternativ generiert der Netzwerkadapter einen Header für zusammengeführte Nutzdaten 92 unabhängig von Header 83. Durch die Zusammenführung mehrerer Nutzdaten in einem Paket kann eine große Datenmenge effizient vom Kommunikationsstapel in den Benutzerraum übertragen oder in einem einzigen Datenübertragungsvorgang auf Null kopiert werden. Darüber hinaus empfängt die zugrundeliegende Transportschicht 52 (z. B. TCP) ein großes Paket anstelle mehrerer kleinerer Pakete, wodurch der durch die Übertragung und Verarbeitung aller Paketheader entstehende Overhead reduziert wird.
  • Um eine große Nachricht über das Kommunikationsnetz zu senden, muss die Quelle der Pakete die Nachricht in mehrere Nutzdaten aufteilen, die in mehreren Paketen übertragen werden, um eine MTU-Beschränkung des Netzes einzuhalten. Unter Verwendung des oben beschriebenen Zusammenführungsmechanismus reproduziert der Netzwerkadapter auf der Empfängerseite die große Nachricht (oder einen Teil davon), indem er die relevanten Nutzdaten zusammenhängend in einem Segment speichert, wie oben beschrieben.
  • Für jedes empfangene Paket 82 identifiziert der Netzwerkadapter 38 den entsprechenden Empfangspuffer, auf den die aktuelle WQE 78 verweist. Wie weiter unten beschrieben wird, streut der Netzwerkadapter die Nutzdaten des Pakets in einen Teil des Empfangspuffers, der dem Fluss, zu dem das Paket gehört, zugewiesen wurde.
  • In einigen Ausführungsformen erzeugt der Netzwerkadapter 38 für jedes Paket 82, das in einen separaten Header und eine Nutzdaten aufgeteilt und wie oben beschrieben gepuffert wurde, ein Vervollständigngs-Queue-Element (CQE) 88 und schreibt das CQE in eine Vervollständigngs-Queue (CQ) 90. Für ein bestimmtes Paket 82 kann CQE 88 Informationen wie einen Segment-Identifikator, die Startadresse jeder Nutzdaten innerhalb des Segmentes, Größen der gespeicherten Nutzdaten und ähnliches speichern. Wie weiter unten näher beschrieben wird, kann die CQE auch eine Angabe darüber speichern, ob die Nutzdaten mit einer früheren Nutzdaten in dem Segment für die Zusammenführung übereinstimmt, wobei geeignete Übereinstimmungskriterien verwendet werden. Die Informationen in den CQEs liefern dem Treiber 54 Hinweise für die Entscheidung über die Zusammenführung von Nutzdaten in dem Segment zu einer oder mehreren zusammengeführten Nutzdaten (92).
  • In einigen Ausführungsformen überwacht der Treiber 54 die CQEs 88, um zu entscheiden, ob das aktuelle Segment geschlossen und die Übertragung des Segment-Inhalts an den Benutzerraum eingeleitet werden soll. In einigen Ausführungsformen weist der Treiber 54, wenn er feststellt, dass das aktuelle Segment voll oder fast voll ist, einen Socket-Puffer(SKB) 68 zu, der auf (i) die zusammengeführten Nutzdaten 92 und (ii) den geänderten Header 83 verweist. Der Kommunikationsstapel 50 überträgt dann die zusammengeführten Nutzdaten 92 in den Benutzerbereich.
  • Wenn der Kommunikations-Stapel die Null-Kopie-Datenübertragung unterstützt und die Null-Kopie aktiviert ist, überträgt der Kommunikations-Stapel die zusammengeführte Nutzdaten (oder einen Teil davon mit Seiten-Granularität) in den Benutzerraum. Falls die Größe der zusammengeführten Nutzdaten 92 kein ganzzahliges Vielfaches der Seitengröße ist, wird ein Teil der zusammengeführten Nutzdaten mit einer Seiten-Granularität in den Benutzerbereich null-kopiert, und der verbleibende Teil der zusammengeführten Nutzdaten wird auf herkömmliche Weise in den Benutzerbereich kopiert.
  • 4 ist ein Diagramm, das schematisch ein Schema zum Puffern empfangener Pakete, die zu mehreren Flüssen gehören, gemäß einer hier beschriebenen Ausführungsform darstellt.
  • Im Beispiel von 4 empfängt der Netzadapter 38 über die Netzschnittstelle 42 vom Kommunikationsnetz 30 Pakete, die zu mehreren (im vorliegenden Beispiel drei) Flüssen mit den Bezeichnungen FLUSS1, FLUSS2 und FLUSS3 gehören. In praktischen Anwendungen können die Pakete je nach der zugrundeliegenden Anwendung nur zu einigen gleichzeitigen Flüssen gehören, oder die Pakete können zu einer viel größeren Anzahl von gleichzeitigen Flüssen gehören, z. B. zu Hunderten oder sogar Tausenden von Flüssen.
  • In 4 werden die empfangenen Pakete als PAKET(i,j) bezeichnet, wobei „i“ eine Flusskennung und j=0,1,2,... die Sequenznummer der Pakete innerhalb des i-ten Flusses bezeichnet. Im vorliegenden Beispiel bestehen fünf vom Netzwerkadapter 38 empfangene Pakete aus PAKET(1,0) und PAKET(1,1), die zu FLUSS1 gehören, PAKET(2,0) und PAKET(2,1), die zu FLUSS2 gehören, und PAKET(3,0), das zu FLUSS3 gehört. In 4 werden die Pakete auch durch einen Index im Bereich 1...5 referenziert, der die Reihenfolge angibt, in der die Pakete empfangen wurden.
  • In einigen Ausführungsformen enthält eine derzeit verwendete WQE 78 einen Zeiger auf den Empfangspuffer 64 und einen weiteren Zeiger auf einen Headerpuffer 86. Diese Zeiger können dem Netzwerkadapter vom Treiber 54 zur Verfügung gestellt werden.
  • In einigen Ausführungsformen weist der Treiber 54 für jeden der empfangenen Datenströme eine entsprechende Empfangswarteschlange bzw. Receive Queue, RQ 94 zu. Die RQ ist mit einem entsprechenden Flusskontext verbunden, der eine Flusskennung des von der RQ bedienten Flusses enthält. Zu jedem Zeitpunkt weist der Netzwerkadapter jeder RQ (oder dem von dieser RQ bedienten Datenstrom) ein entsprechendes Datenpaket 80 im Empfangspuffer 64 zu. Der Flusskontext des RQ enthält einen Segment-Identifikator für das aktuelle Segment. Die dem Segment zugeordneten CQEs enthalten Informationen über die Adressen und Größen der Nutzdaten, die bereits im aktuellen Segment gespeichert sind, sowie Anpassungsinformationen für die Zusammenführung von Paaren aufeinanderfolgender Nutzdaten im Segment.
  • Der Netzwerkadapter 38 ordnet die empfangenen Pakete den jeweiligen Flüssen zu, zu denen sie gehören, und leitet die Pakete an die entsprechenden RQs weiter, die diese Flüsse bedienen. Der Netzwerkadapter speichert den Paketheader im Headerpuffer 86 und speichert die Nutzdaten des Pakets im aktuell verwendeten Segment. In einigen Ausführungsformen speichert der Netzwerkadapter die Nutzdaten von Paketen, die zu einem gemeinsamen Fluss gehören, zusammenhängend in demselben Segment. Wenn ein aktuelles Segment geschlossen und einem Fluss ein neues Segment zugewiesen wird, beginnt der Netzwerkadapter mit der Speicherung der Nutzdaten nachfolgender Pakete, sequentiell und zusammenhängend in dem neuen Segment. In 4 werden die Nutzdaten desselben Datenflusses zu einer großen Nutzdatenmenge zusammengefasst, wie oben unter Bezugnahme auf 3 beschrieben.
  • Obwohl in 4 aus Gründen der Übersichtlichkeit nicht dargestellt, schreibt der Netzwerkadapter CQEs, die auf gespeicherte Nutzdaten hinweisen, wie oben unter Bezugnahme auf 3 beschrieben.
  • In 4 speichert der Netzwerkadapter die Nutzdaten der Pakete, die zu FLUSS1, FLUSS2 und FLUSS3 gehören, in separaten jeweiligen Segmenten wie folgt. In dem Segment, das FLUSS1 entspricht, speichert das Netzwerk das erste und vierte empfangene Paket. In dem Segment, das FLUSS2 entspricht, speichert der Netzwerkadapter das zweite und das fünfte empfangene Paket. In dem Segment, das FLUSS3 entspricht, speichert der Netzwerkadapter das dritte empfangene Paket.
  • 5 ist ein Flussdiagramm, das schematisch ein Verfahren zum Zusammenführen von Paketen in Blöcken gemäß einer hier beschriebenen Ausführungsform zeigt.
  • Bei der Beschreibung des Verfahrens wird davon ausgegangen, dass der Netzwerkadapter Pakete empfängt, die zu einem oder mehreren Flüssen gehören, die von entsprechenden RQs bedient werden. Außerdem wird jedem RQ ein entsprechendes Segment in einem gemeinsamen Empfangspuffer 64 zugewiesen. Es wird davon ausgegangen, dass die Segmente seitenorientiert sind und eine Seiten-Granularität aufweisen.
  • Das Verfahren wird so beschrieben, wie es vom Netzwerkadapter 38 (oder genauer gesagt vom Paketverarbeitungsschaltkreis 46) ausgeführt wird.
  • Das Verfahren beginnt damit, dass der Netzwerkadapter 38 in einem Paketempfangsschritt 100 über die Netzwerkschnittstelle 42 ein Paket vom Kommunikationsnetz 30 empfängt. Das Paket kann z. B. ein TCP-Paket oder ein TCP/IP-Paket sein. In einer anderen Ausführungsform kann statt TCP auch das User Datagram Protocol (UDP) verwendet werden. In einem RQ-Bestimmungsschritt 104 lenkt der Netzwerkadapter das Paket zu einem RQ, der den Fluss bedient, zu dem das empfangene Paket gehört. In einigen Ausführungsformen bestimmt der Netzwerkadapter das RQ durch Anwendung einer Hash-Funktion auf ein oder mehrere Felder im Paketheader. Die Hash-Funktion kann z.B. eine Toeplitz-Hash-Funktion sein. Der Netzwerkadapter wendet die Hash-Funktion zum Beispiel auf ein Fünf-Tupel im Paketheader an, das aus (Protokoll, Quelladresse, Quellport, Zieladresse, Zielport) besteht.
  • In einem Segment-Identifizierungsschritt 108 extrahiert der Netzwerkadapter aus dem RQ-Flow-Kontext eine Kennung (z. B. einen Zeiger oder einen Segment-Index) des aktuellen Segmentes, das für den vom RQ bedienten Fluss verwendet wird. Ferner setzt der Netzadapter in Schritt 108 eine Lückenvariable auf einen Nullwert, was bedeutet, dass die Nutzdaten des empfangenen Pakets unmittelbar nach der zuvor gespeicherten Nutzdaten gespeichert wird. In einem Übereinstimmungsprüfungsschritt 112 prüft der Netzwerkadapter, ob das aktuelle Paket mit dem zuvor gespeicherten Paket für die Zusammenführung übereinstimmt. Der Zweck der Übereinstimmungsprüfung besteht darin, Sequenzen von Paketen zu identifizieren, deren Nutzdaten (durch den Treiber) zu einem großen Paket zusammengeführt werden können. Die Prüfung auf Übereinstimmung in Schritt 112 kann auf verschiedene Weise erfolgen. Eine Übereinstimmung liegt beispielsweise vor, wenn das Paket der zuletzt gespeicherten Nutzdaten und das aktuell empfangene Paket aufeinanderfolgende Sequenznummern haben.
  • Bei einem weiteren Übereinstimmungskriterium wird überprüft, ob der vom RQ bediente Fluss (ermittelt in Schritt 104) mit dem Fluss übereinstimmt, zu dem das empfangene Paket gehört (z. B. dieselbe Flusskennung, z. B. ein Fünf-Tupel-Wert). Dieses Übereinstimmungskriterium ist erforderlich, weil die Hash-Funktion unvollkommen sein und Hash-Kollisionen verursachen kann, d.h., dass das Hashing verschiedener Fünf-Tupel-Werte (oder anderer vordefinierter Felder im Paketheader) zum gleichen Hash-Ergebnis und damit auch zum gleichen RQ führen kann. Hash-Kollisionen können auch auftreten, wenn die Anzahl der RQs kleiner ist als die unterstützte Anzahl von Flüssen.
  • Wenn in Schritt 112 eine Übereinstimmung festgestellt wird, geht der Netzadapter zu einem Übereinstimmungsanzeige-Schritt 114 über, in dem der Netzadapter eine CQE-Anzeigevariable auf „Übereinstimmung“ setzt. In einem Segment-Belegungsprüfungsschritt 116 prüft der Netzwerkadapter, ob der verbleibende Speicherplatz im aktuellen Segment groß genug ist, um die Nutzdaten des empfangenen Pakets zu speichern (möglicherweise einschließlich einer Lücke ungleich Null). Wenn dies der Fall ist und der Lückenwert Null ist, verteilt der Netzwerkadapter 38 die gesamte Nutzdaten des empfangenen Pakets im aktuellen Segment zusammenhängend im Anschluss an bereits gespeicherte Nutzdaten, falls vorhanden, in einem Schritt 120 zur Speicherung der gesamten Nutzdaten.
  • In einem Header-Speicherschritt 124 verstreut der Netzwerkadapter den Header des empfangenen Pakets im Header-Puffer 86. In einem Abschlussschritt 128 schreibt der Netzwerkadapter eine CQE in CQ 90. In einer Ausführungsform speichert die CQE einen Zustands- oder Statuswert, der anzeigt, ob im obigen Schritt 112 eine Übereinstimmung stattgefunden hat. In Schritt 128 setzt der Netzwerkadapter den Statuswert in der CQE auf den aktuellen Wert der CQE-Anzeigevariablen. Nach Schritt 128 kehrt das Verfahren in einer Schleife zu Schritt 100 zurück, um ein nachfolgendes Paket zu empfangen.
  • Wenn in Schritt 116 der verbleibende Speicherplatz im Segment kleiner ist als die Größe der Nutzdaten, kann der Netzwerkadapter 38 in einer Ausführungsform die gesamten Nutzdaten auf ein neues Segment verteilen oder alternativ die Nutzdaten zwischen dem aktuellen Segment und einem neuen Segment aufteilen, wie hier in den Schritten 136, 140 und 144 beschrieben.
  • In einem Segment-Füllschritt 136 streut der Netzwerkadapter einen Teil der Nutzdaten zusammenhängend in das aktuelle Segment ein, bis das gesamte Segment gefüllt ist (möglicherweise nach einer Lücke ungleich Null). In einem Schritt 140 zur Zuweisung eines neuen Segmentes schließt der Netzwerkadapter das aktuelle Segment und weist dem RQ ein neues Segment zu, das im Empfangspuffer verfügbar ist.
  • In einem neuen Segment-Streuungsschritt 144 streut der Netzwerkadapter den verbleibenden Teil der Nutzdaten, der nicht in das geschlossene Segment gestreut wurde, in das neue Segment. Nach Schritt 144 fährt das Verfahren mit Schritt 124 fort, um den Header des empfangenen Pakets zu schreiben, gefolgt vom Schreiben einer CQE (mit dem aktuellen CQE-Anzeigewert) in Schritt 128 wie oben beschrieben.
  • Wenn in Schritt 112 keine Übereinstimmung auftritt, bereitet sich der Netzwerkadapter darauf vor, die Paketnutzdaten im aktuellen Segment zu speichern, zusammenhängend (Lückenwert ist Null) oder mit einer Lücke ungleich Null in Bezug auf die zuvor gespeicherte Nutzdaten, in einem Lückenbestimmungsschritt 152. Die Lückengröße kann beispielsweise auf ein oder mehrere Bytes oder auf die Systemseitengröße konfiguriert werden. In einigen Ausführungsformen wird die Lücke so gewählt, dass die Nutzdaten des aktuellen Pakets an den Betriebssystemseiten oder an der System-Cache-Zeile ausgerichtet gespeichert wird. Wenn im aktuellen Segment kein Platz für die aktuelle Nutzdaten vorhanden ist, schließt der Netzwerkadapter das aktuelle Segment und weist dem RQ ein neues Segment im Empfangspuffer zu. Wenn das aktuelle Segment Pakete von zwei verschiedenen Flüssen enthält, können nur Teile der beiden Flüsse, die an den Betriebssystemseiten ausgerichtet sind und Seiten-Granularität haben, vom Kommunikationsstapel in den Benutzerraum null-kopiert werden.
  • Die Verwendung einer Lücke ungleich Null ist nicht zwingend erforderlich. In alternativen Ausführungsformen kann die Nutzdaten des aktuellen Pakets zusammenhängend mit der vorherigen Nutzdaten eines anderen Datenflusses gespeichert werden. Mit oder ohne Lücke meldet die CQE die Anfangs- und Endadressen der Nutzdaten, die zu den verschiedenen Flüssen gehören, und die beiden Nutzdaten werden somit getrennt in den Benutzerraum kopiert. In diesen Ausführungsformen übernimmt der Kommunikationsstapel die Datenübertragung von einem Empfangspuffer in den Benutzerbereich. Die Hardwareschaltung im Netzwerkadapter speichert die Nutzdaten von Paketen, die einem bestimmten Fluss zugeordnet sind, zusammenhängend in einem Abschnitt des Empfangspuffers, der dem gegebenen Fluss zugewiesen ist, um den Kommunikationsstapel zu veranlassen, bis zu einem Ganzen Abschnitt der zusammenhängend gespeicherten Nutzdaten in den Benutzerraum zu übertragen.
  • In einem Schritt 156 zur Anzeige der Nichtübereinstimmung setzt der Netzadapter 38 eine CQE-Anzeigevariable auf „keine Übereinstimmung“. Die Anzeige „keine Übereinstimmung“ wird, wie oben beschrieben, im Statuswert der CQE in Schritt 128 gemeldet. Nach Schritt 160 fährt das Verfahren mit Schritt 116 und weiteren Schritten fort, um die Nutzdaten und den Header des empfangenen Pakets im aktuellen oder neuen Segment zu speichern.
  • ZUSAMMENFÜHREN VON PAKETEN DURCH DEN TREIBER
  • Bei der oben erwähnten LRO-Methode erhält die Transportschicht ein komplettes zusammengeführtes Paket. Im Gegensatz dazu erhält der Treiber 54 vom Netzadapter 38 paketweise Informationen über die Nutzdaten, Headerzeilen und übereinstimmende Hinweise der empfangenen Pakete. Mit Hilfe dieser detaillierten Informationen hat der Treiber 54 die Flexibilität, die Zusammenführung von Paketen zu bestimmen, die sonst nicht erreicht werden könnte. So kann der Treiber beispielsweise beschließen, aufeinanderfolgende Nutzdaten in einem Segment nicht zusammenzuführen, selbst wenn der Netzwerkadapter meldet, dass die Nutzdaten für eine Zusammenführung geeignet sind. Im Allgemeinen führt der Treiber nicht übereinstimmende Nutzdaten zusammen, aber es steht ihm frei, übereinstimmende Nutzdaten nicht zusammenführen, z. B. indem er ein anderes Kriterium als das vom Netzadapter verwendete verwendet.
  • In einer Ausführungsform bestimmt der Treiber die Anzahl der zusammenzuführenden Pakete (oder Nutzdaten) in Abhängigkeit von der CPU-Last. Beispielsweise erhöht der Treiber die Anzahl der zusammenzuführenden Pakete, wenn die CPU-Last steigt. Da der Netzwerkadapter bei den vorgestellten Techniken die Pakete nach dem „Best-Effort“-Prinzip zusammenführt, verringert sich die Wahrscheinlichkeit, dass sich noch nicht verarbeitete Pakete in den Empfangspuffern des Netzwerkadapters befinden, während die CPU frei ist, sie zu verarbeiten, erheblich. Es ist zu beachten, dass der Netzwerkadapter die verarbeiteten und zusammengefassten Pakete sofort an den Host sendet, und zwar zusammen mit den Fertigstellungsmeldungen, ohne weitere Speicherung im Netzwerkadapter.
  • In einigen Ausführungsformen ist der Kommunikationsstapel im Linux-Kern enthalten, der die neue API (NAPI) unterstützt. Ein Treiber, der die NAPI verwendet, stellt dem Kern ein Abstimmungsverfahren zur Verfügung, mit dem mehrere Pakete vom Netzwerkadapter abgeholt werden können. In einem NAPI-Abstimmungs-Zyklus empfängt der Kern also über den Treiber mehrere Pakete von der Netzwerkkarte.
  • Die oben beschriebenen Ausführungsformen sind beispielhaft, und andere geeignete Ausführungsformen können ebenfalls verwendet werden.
  • Obwohl sich die hier beschriebenen Ausführungsformen hauptsächlich mit der Speicherung von Nutzdaten von Paketen befassen, die von einem Netzwerk empfangen wurden, und auf Systemseiten ausgerichtet sind, um die Verwendung der Linux-Null-Kopie-Funktion zu erzwingen, können die hier beschriebenen Verfahren und Systeme auch in anderen Anwendungen verwendet werden, wie z. B. in anderen Anwendungen, die eine schnelle Datenübertragung in den Benutzerraum erfordern, wobei der zugrunde liegende Kommunikationsstapel die Null-Kopie-Datenübertragung unterstützt.
  • In den oben beschriebenen Ausführungsformen werden die Nutzdaten mehrerer Pakete hauptsächlich zusammengeführt, um eine große Nutzdatenmenge zu erzeugen, die, wenn sie die Ausrichtungs- und Seiten-Granularitäts-Bedingungen erfüllt, wie oben beschrieben, effizient in den Benutzerraum kopiert wird. Diesem großen Nutzdatenpaket wird ein Paketheader zugeordnet, der dem TCP als entsprechendes großes Paket zur Verfügung gestellt wird. In anderen Ausführungsformen ist die Zusammenführung mehrerer Nutzdaten von empfangenen Paketen zu einem großen Paket, das dem TCP effizient zur Verfügung gestellt wird, unabhängig von der Ausrichtung dieser großen Nutzdaten im Speicher oder davon, ob die großen Nutzdaten mittels Standardkopie oder mittels Null-kopie in den Benutzerraum übertragen werden.
  • In den oben beschriebenen Ausführungsformen befinden sich ein Empfangspuffer zur Speicherung der Nutzdaten eingehender Pakete und ein Headerzeilenpuffer zur Speicherung der Headerzeilen der eingehenden Pakete im Host. Dies ist jedoch nicht zwingend erforderlich. In alternativen Ausführungsformen können sich der Empfangspuffer und der Headerzeilenpuffer im Netzadapter, in einer Grafikverarbeitungseinheit (GPU) oder in einem Speicher eines beliebigen anderen Elements befinden, so dass der Empfangspuffer und der Headerzeilenpuffer für den Netzadapter und den Host zugänglich sind.
  • Es wird deutlich, dass die oben beschriebenen Ausführungsformen als Beispiele angeführt werden und dass die folgenden Ansprüche nicht auf das beschränkt sind, was hierin besonders gezeigt und beschrieben wurde. Vielmehr umfasst der Anwendungsbereich sowohl Kombinationen und Unterkombinationen der verschiedenen hierin beschriebenen Merkmale als auch Variationen und Modifikationen davon, die Fachleuten beim Lesen der vorstehenden Beschreibung einfallen würden und die im Stand der Technik nicht offenbart sind. Die durch Verweis in die vorliegende Patentanmeldung einbezogenen Dokumente sind als integraler Bestandteil der Anmeldung zu betrachten, mit der Ausnahme, dass in dem Maße, in dem Begriffe in diesen einbezogenen 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 berücksichtigt werden sollten.
  • 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.
  • Jedes Gerät, 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 Bezugszahlen 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 2014/0229946 [0003]

Claims (30)

  1. Netzwerkknoten, aufweisend: einen Netzwerkadapter, der mit einem Kommunikationsnetzwerk verbunden ist; und einen Host, der einen Prozessor, auf dem ein Client-Prozess läuft, und einen Kommunikationsstapel umfasst; wobei der Netzwerkadapter dazu konfiguriert ist Pakete vom Kommunikationsnetz zu empfangen und die empfangenen Pakete in entsprechende Flüsse zu klassifizieren, die entsprechenden Segmenten in einem Empfangspuffer zugeordnet sind; Nutzdaten der empfangenen Pakete auf die Segmente zu verteilen, so dass Nutzdaten von Paketen, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, das dem gegebenen Fluss zugeordnet ist; und den Kommunikationsstapel über die Nutzdaten in dem gegebenen Segment zu benachrichtigen, um die Nutzdaten in dem gegebenen Segment an den Client-Prozess zu übermitteln.
  2. Netzwerkknoten nach Anspruch 1, wobei der Prozessor ferner so konfiguriert ist, dass er einen Treiber ausführt, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, wobei der Netzwerkadapter so konfiguriert ist, dass er den Kommunikationsstapel mittels des Treibers über die Nutzdaten in dem gegebenen Segment informiert.
  3. Netzwerkknoten nach Anspruch 2, wobei der Treiber so konfiguriert ist, dass er zusammengeführte Nutzdaten konstruiert, die zwei oder mehr aufeinanderfolgende Nutzdaten in dem gegebenen Segment umfassen, und dass er den Kommunikationsstapel über die zusammengefassten Nutzdaten informiert.
  4. Netzwerkknoten nach Anspruch 2, wobei die Nutzdaten in dem gegebenen Segment erste und zweite Nutzdaten umfassen, die ein Übereinstimmungskriterium für die Zusammenführung erfüllen, und wobei der Treiber so konfiguriert ist, dass er die Zusammenführung der ersten und zweiten Nutzdaten auf der Grundlage eines anderen Kriteriums als des Übereinstimmungskriteriums unterlässt.
  5. Netzwerkknoten nach Anspruch 2, wobei die ersten und zweiten Nutzdaten in dem gegebenen Segment zu Paketen unterschiedlicher jeweiliger Flüsse gehören und wobei der Netzwerkadapter so konfiguriert ist, dass er den Treiber benachrichtigt, dass die ersten und zweiten Nutzdaten zum Zusammenführen nicht übereinstimmen.
  6. Netzwerkknoten nach einem der vorhergehenden Ansprüche, wobei als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als in dem gegebenen Segment zu speichernde Nutzdaten, der Netzadapter so konfiguriert ist, dass er dem gegebenen Fluss ein anderes Segment zuweist und die Nutzdaten in dem anderen Segment speichert.
  7. Netzwerkknoten nach einem der Ansprüche 1 bis 5, wobei als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner ist als in dem gegebenen Segment zu speichernde Nutzdaten, der Netzwerkadapter so konfiguriert ist, dass er dem gegebenen Fluss ein anderes Segment zuweist und die Speicherung der Nutzdaten zwischen dem Segment und dem anderen Segment aufteilt.
  8. Netzwerkknoten nach einem der vorhergehenden Ansprüche, wobei die empfangenen Pakete zumindest einem ersten und einem zweiten Fluss gehören und wobei der Netzadapter so konfiguriert ist, dass er dem ersten und dem zweiten Fluss jeweils unterschiedliche Segmente in dem Empfangspuffer zuweist.
  9. Netzwerkknoten nach einem der vorhergehenden Ansprüche, wobei der Kommunikationsstapel so konfiguriert ist, dass er eine direkte Datenübertragung von zwei oder mehr Nutzdaten, die zusammenhängend in dem Segment gespeichert sind, an einen Benutzerraum vornimmt.
  10. Netzwerkknoten nach Anspruch 9, wobei sich der Empfangspuffer in einem Speicher des Hosts befindet, wobei der Kommunikationsstapel so konfiguriert ist, dass er die direkte Datenübertragung nur dann anwendet, wenn die zwei oder mehr Nutzdaten (i) in dem Empfangspuffer auf die Betriebssystemseiten ausgerichtet sind und (ii) eine Betriebssystem-Seiten-Granularität aufweisen.
  11. Netzwerkknoten nach einem der vorhergehenden Ansprüche, wobei der Kommunikationsstapel in einem Kern eines Betriebssystems enthalten ist, das in einem Kernraum läuft, und wobei der Kommunikationsstapel so konfiguriert ist, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment an den Client-Prozess in einem Benutzerraum überträgt.
  12. Netzwerkknoten nach einem der Ansprüche 1 bis 10, wobei der Kommunikationsstapel ein Kommunikationsprogramm umfasst, das in einem Benutzerraum läuft, und wobei der Kommunikationsstapel so konfiguriert ist, dass er eine oder mehrere Nutzdaten in dem gegebenen Segment direkt an den Client-Prozess in dem Benutzerraum überträgt.
  13. Netzwerkknoten nach einem der vorhergehenden Ansprüche, wobei der Netzwerkadapter so konfiguriert ist, dass er Header der empfangenen Pakete in einem Header-Puffer speichert und den Kommunikationsstapel über die gespeicherten Header informiert, die den Nutzdaten der empfangenen Pakete in dem gegebenen Segment entsprechen.
  14. Netzwerkknoten nach Anspruch 13, wobei der Kommunikationsstapel oder ein Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, so konfiguriert ist, dass er auf der Grundlage der in dem Header-Puffer gespeicherten Header und einem oder mehreren in dem gegebenen Segment gespeicherten Nutzdaten ein zusammengeführtes Paket erzeugt, das an den Client-Prozess übertragen werden soll.
  15. Verfahren zur Kommunikation, aufweisend die Schritte: in einem Netzwerkknoten, der einen mit einem Kommunikationsnetz verbundenen Netzadapter umfasst, wobei der Netzknoten einen Host mit einem Prozessor, auf dem ein Client-Prozess läuft, und einen Kommunikationsstapel umfasst, Empfangen von Paketen aus dem Kommunikationsnetz durch den Netzwerkadapter und Klassifizieren der empfangenen Pakete in entsprechende Flüsse, die entsprechenden Segmenten in einem Empfangspuffer zugeordnet sind; Verteilen der Nutzdaten der empfangenen Pakete auf die Segmente, so dass die Nutzdaten von Paketen, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, das dem gegebenen Fluss zugeordnet ist; und Benachrichtigung des Kommunikationsstapels über die Nutzdaten in dem gegebenen Segment, um die Nutzdaten im in dem gegebenen Segment an den Client-Prozess zu übertragen.
  16. Verfahren nach Anspruch 15, ferner umfassend das Ausführen eines Treibers durch den Prozessor, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, wobei das Benachrichtigen des Kommunikationsstapels das Benachrichtigen des Kommunikationsstapels über die Nutzdaten in dem gegebenen Segment über den Treiber umfasst.
  17. Verfahren nach Anspruch 16, das ferner umfasst, dass der Treiber zusammengefasste Nutzdaten konstruiert, die zwei oder mehr aufeinanderfolgende Nutzdaten in dem gegebenen Segment umfassen, und den Kommunikationsstapel über die zusammengefasste Nutzdaten benachrichtigt.
  18. Verfahren nach Anspruch 16, wobei die Nutzdaten in dem gegebenen Segment erste und zweite Nutzdaten umfassen, die ein Übereinstimmungskriterium für das Zusammenführen erfüllen, und wobei das Konstruieren der zusammengeführten Nutzdaten basierend auf einem anderen Kriterium als dem Übereinstimmungskriterium ein Unterlassen des Zusammenführens der ersten und zweiten Nutzdaten umfasst.
  19. Verfahren nach Anspruch 16, wobei erste und zweite aufeinanderfolgende Nutzdaten in dem gegebenen Segment zu Paketen verschiedener jeweiliger Flüsse gehören, und wobei das Benachrichtigen des Kommunikationsstapels das Benachrichtigen des Kommunikationsstapels mittels des Treibers umfasst, dass die ersten und zweiten Nutzdaten zum Zusammenführen nicht übereinstimmen.
  20. Verfahren nach einem der Ansprüche 15 bis 19, wobei in Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner als in dem gegebenen Segment zu speichernde Nutzdaten ist, dem gegebenen Fluss ein anderes Segment zugewiesen wird und die Nutzdaten in dem anderen Segment gespeichert werden.
  21. Verfahren nach einem der Ansprüche 15 bis 19, wobei als Reaktion auf die Feststellung, dass ein in dem gegebenen Segment verfügbarer Speicherplatz kleiner als in dem Segment zu speichernde Nutzdaten ist, dem gegebenen Fluss ein anderes Segment zugewiesen wird und die Speicherung der Nutzdaten zwischen dem Segment und dem anderen Segment aufgeteilt werden.
  22. Verfahren nach einem der Ansprüche 15 bis 21, wobei die empfangenen Pakete zumindest einem ersten und einem zweiten Fluss gehören und das Verfahren ferner umfasst, dass dem ersten und dem zweiten Fluss jeweils unterschiedliche Segmente in dem Empfangspuffer zugewiesen werden.
  23. Verfahren nach einem der Ansprüche 15 bis 22, ferner umfassend das Anwenden einer direkten Datenübertragung von zwei oder mehr Nutzdaten, die zusammenhängend in dem Segment gespeichert sind, durch den Kommunikationsstapel an einen Benutzerraum.
  24. Verfahren nach Anspruch 23, wobei sich der Empfangspuffer in einem Speicher des Hosts befindet, wobei das Anwenden des direkten Datentransfers das Anwenden des direkten Datentransfers auf einen Benutzerraum nur auf Daten umfasst, die (i) in dem Empfangspuffer auf die Betriebssystemseiten ausgerichtet sind und (ii) eine Betriebssystem-Seiten-Granularität aufweisen.
  25. Verfahren nach einem der Ansprüche 15 bis 24, wobei der Kommunikationsstapel in einem Kern eines Betriebssystems enthalten ist, das in einem Kernraum läuft, und das Verfahren ferner das Übertragen einer oder mehrerer Nutzdaten in dem gegebenen Segment an den Client-Prozess in einem Benutzerraum umfasst.
  26. Verfahren nach einem der Ansprüche 15 bis 24, wobei der Kommunikationsstapel ein Kommunikationsprogramm umfasst, das in einem Benutzerraum läuft, und das Verfahren ferner das Übertragen einer oder mehrerer Nutzdaten in dem gegebenen Stück direkt an den Client-Prozess im Benutzerraum umfasst.
  27. Verfahren nach einem der Ansprüche 15 bis 26, ferner umfassend das Speichern von Headerzeilen der empfangenen Pakete in einem Headerzeilenpuffer und das Benachrichtigen des Kommunikationsstapels über die gespeicherten Headerzeilen, die den Nutzdaten der empfangenen Pakete in dem gegebenen Segment entsprechen.
  28. Verfahren nach Anspruch 27, ferner umfassend, durch den Kommunikationsstapel oder durch einen Treiber, der zwischen dem Netzwerkadapter und dem Kommunikationsstapel vermittelt, ein Erzeugen eines zusammengefassten Pakets, das an den Client-Prozess übertragen werden soll, basierend auf den im Header-Puffer gespeicherten Headern und auf einer oder mehreren in dem gegebenen Segment gespeicherten Nutzdaten.
  29. Netzwerkadapter, aufweisend: eine Netzwerkschnittstelle, die für den Anschluss an ein Kommunikationsnetz konfiguriert ist; eine Host-Schnittstelle, die so konfiguriert ist, dass sie mit einem Host verbunden werden kann, der einen Prozessor, auf dem ein Client-Prozess läuft, und einen Kommunikationsstapel umfasst; und Paketverarbeitungsschaltungen, die dazu konfiguriert sind: Pakete vom Kommunikationsnetz zu empfangen und die empfangenen Pakete in entsprechende Flüsse zu klassifizieren, die entsprechenden Segmenten in einem Empfangspuffer zugeordnet sind; Nutzdaten der empfangenen Pakete auf die Segmente zu verteilen, so dass Nutzdaten von Paketen, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, das dem gegebenen Fluss zugeordnet ist; und den Kommunikations-Stapel über die Nutzdaten im gegebenen Segment zu benachrichtigen, um die Nutzdaten im gegebenen Segment an den Client-Prozess zu übermitteln.
  30. Verfahren zur Kommunikation, aufweisend die Schritte: in einem Netzadapter, der mit einem Kommunikationsnetz und einem Host verbunden ist, der einen Prozessor, auf dem ein Client-Prozess läuft, und einen Kommunikationsstapel umfasst, Empfangen von Paketen aus dem Kommunikationsnetz und Klassifizieren der empfangenen Pakete in entsprechende Flüsse, die entsprechenden Segmenten im Empfangspuffer zugeordnet sind; Verteilen der Nutzdaten der empfangenen Pakete auf die Segmente, so dass Nutzdaten von Paketen, die einem gegebenen Fluss zugeordnet sind, in einem gegebenen Segment gespeichert werden, das dem gegebenen Fluss zugeordnet ist; und Benachrichtigen des Kommunikationsstapels über die Nutzdaten im gegebenen Segment, um die Nutzdaten im gegebenen Segment an den Client-Prozess zu übermitteln.
DE102021207394.8A 2020-07-19 2021-07-13 Zusammenführen von paketen auf der grundlage von hinweisen, die vom netzwerkadapter erzeugt werden Pending DE102021207394A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/932,765 US20220021629A1 (en) 2020-07-19 2020-07-19 Coalescing packets based on hints generated by network adapter
US16/932,765 2020-07-19

Publications (1)

Publication Number Publication Date
DE102021207394A1 true DE102021207394A1 (de) 2022-01-20

Family

ID=79021386

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102021207394.8A Pending DE102021207394A1 (de) 2020-07-19 2021-07-13 Zusammenführen von paketen auf der grundlage von hinweisen, die vom netzwerkadapter erzeugt werden

Country Status (3)

Country Link
US (1) US20220021629A1 (de)
CN (1) CN114024911A (de)
DE (1) DE102021207394A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11595472B2 (en) 2021-01-19 2023-02-28 Mellanox Technologies, Ltd. Controlling packet delivery based on application level information
US20230102614A1 (en) * 2021-09-27 2023-03-30 Qualcomm Incorporated Grouping data packets at a modem
US11757796B2 (en) * 2021-09-29 2023-09-12 Mellanox Technologies, Ltd. Zero-copy processing
US11792139B2 (en) 2022-01-24 2023-10-17 Mellanox Technologies, Ltd. Efficient packet reordering using hints
US20240244005A1 (en) * 2023-01-12 2024-07-18 Enfabrica Corporation System and method for adaptive generic receive offload

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140229946A1 (en) 2005-08-05 2014-08-14 Red Hat, Inc. Zero-copy network i/o for virtual hosts

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6728265B1 (en) * 1999-07-30 2004-04-27 Intel Corporation Controlling frame transmission
US6799200B1 (en) * 2000-07-18 2004-09-28 International Business Machines Corporaiton Mechanisms for efficient message passing with copy avoidance in a distributed system
US20060045109A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Early interrupt notification in RDMA and in DMA operations
JP4942375B2 (ja) * 2006-03-27 2012-05-30 株式会社ソニー・コンピュータエンタテインメント ネットワーク処理装置
US7826469B1 (en) * 2009-03-09 2010-11-02 Juniper Networks, Inc. Memory utilization in a priority queuing system of a network device
US8094556B2 (en) * 2009-04-27 2012-01-10 Avaya Inc. Dynamic buffering and synchronization of related media streams in packet networks
US9438527B2 (en) * 2012-05-24 2016-09-06 Marvell World Trade Ltd. Flexible queues in a network switch
WO2015074275A1 (zh) * 2013-11-25 2015-05-28 华为技术有限公司 光线路终端、分配点单元、系统及数据流调度方法
US10110518B2 (en) * 2013-12-18 2018-10-23 Mellanox Technologies, Ltd. Handling transport layer operations received out of order
US9521679B2 (en) * 2014-03-06 2016-12-13 Cisco Technology, Inc. Systems and methods for implementing reflective EPS bearers to ensure uplink quality of service
US10210125B2 (en) * 2017-03-16 2019-02-19 Mellanox Technologies, Ltd. Receive queue with stride-based data scattering

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140229946A1 (en) 2005-08-05 2014-08-14 Red Hat, Inc. Zero-copy network i/o for virtual hosts

Also Published As

Publication number Publication date
CN114024911A (zh) 2022-02-08
US20220021629A1 (en) 2022-01-20

Similar Documents

Publication Publication Date Title
DE102021207394A1 (de) Zusammenführen von paketen auf der grundlage von hinweisen, die vom netzwerkadapter erzeugt werden
DE102015108145B4 (de) Lokale Dienstverkettung mit virtuellen Maschinen und virtualisierten Behältern in software-definierter Vernetzung
DE112020002501T5 (de) System und verfahren zur erleichterung eines effizienten lastausgleichs in einer netzwerkschnittstellensteuerung (nic)
DE112014000415B4 (de) Quantisierte Überlastbenachrichtigung in einem virtuellen Netzwerksystem
DE112016000258B4 (de) Gruppieren von nichtflüchtigem speicher auf grundlage von hosts mithilfe von zugeordnetem netzwerkspeicher
DE69836778T2 (de) Vorrichtung und Verfahren zur Fernpufferspeicherzuordnung und Verwaltung für Nachrichtenübertragung zwischen Netzknoten
DE60212626T2 (de) Endknotenunterteilung mittels lokaler identifikatoren
DE112014000322B4 (de) Skalierbare Fluss- und Überlastungssteuerung in einem Netzwerk
DE69433293T2 (de) Netzwerkübertragungsverfahren für Systeme mit virtuellem Speicher
DE112006001167T5 (de) Simulieren mehrerer virtueller Kanäle in Switching-Fabric-Netzwerken
DE102020133262A1 (de) Arbeitslastscheduler für Speicherzuweisung
DE102020201834A1 (de) Technologien für netzvorrichtungslastausgleichseinrichtungen für beschleunigte funktionen-als-dienst
DE102015102871A1 (de) Technologien für verteilten Leitweglenkungstabellennachschlag
DE102020207426A1 (de) Auflistung einer CNP-Erzeugung durch eine Vermittlungsstelle
DE3853162T2 (de) Gemeinsamer intelligenter Speicher für die gegenseitige Verbindung von verteilten Mikroprozessoren.
DE112017003294T5 (de) Technologien für ein skalierbares Senden und Empfangen von Paketen
DE112007001135T5 (de) Gemeinschaftliche Nutzung von Daten durch Partitionen in einem partitionierbaren System
DE112017003494T5 (de) Mehrfach-core-software-forwarding
DE102022205478A1 (de) Busübergreifende speicherabbildung
DE112022002284T5 (de) Auslagerung der vermittlungsschicht 7 an eine infrastrukturverarbeitungseinheit für ein vermaschtes dienstnetz
DE202017105777U1 (de) System für hardwareunabhängigen RDMA
DE3853337T2 (de) Mechanismus und Verfahren zur Fernverwaltung von Speichern.
DE112010004809B4 (de) Mehrfachgranulare Datenstromverarbeitung
DE112021003094T5 (de) System und verfahren zum planen von gemeinsam nutzbaren pcie-endpunktvorrichtungen
DE60303444T2 (de) Ablaufsteuerung unter verwendung von quantumwerten und defizitwerten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: H04L0012861000

Ipc: H04L0049900000