-
GEBIET DER ERFINDUNG
-
Diese Erfindung bezieht sich im Allgemeinen auf Hardware-Speichergeräte und im Besonderen auf vernetzte Hardware-Speichergeräte.
-
HINTERGRUND DER ERFINDUNG
-
Es sind Null-Kopien innerhalb eines einzelnen Betriebssystems bekannt, z. B. durch Verwendung des Linux-TCP-Stapels.
-
PCIe (Peripheral Component Interconnect Express), auch abgekürzt als PCI-e, ist ein Beispiel für einen seriellen Hochgeschwindigkeits-Computererweiterungsbus-Standard, der unter anderem im Wikipedia-Eintrag zu PCI_Express beschrieben wird.
-
Der folgende Artikel: lwn.net/Articles/752188, der online verfügbar ist, beschreibt eine MSG ZEROCOPY-Funktion, die in (Linux Systemkern) 4.14 hinzugefügt wurde und die „Null-Kopie-Übertragung von Daten ermöglicht“, und fügt hinzu, dass „die Implementierung des Null-Kopie-Empfangs ... Paketpuffer in den Benutzerraum-Speicher mappen (bzw. zuordnen) muss“.
-
BlueField® -2 und ConnectX® -6 sind bekannte NVIDIA® Produkte.
-
BlueField® -2 - das sind Cloud-SmartNICs und I/O Processing Unit (IPU)-Lösungen der nächsten Generation, die beispiellose Sicherheit, Leistung und Effizienz für Rechenzentren in großem Maßstab und für jede Arbeitslast bieten. ConnectX® -6 Dx und BlueField® -2 setzen die Innovation von Mellanox im Bereich hochleistungsfähiger Cloud Fabrics fort und machen das Unmögliche möglich, indem sie modernste Hardware-Beschleunigungs-Engines und erstklassige Software-Programmierbarkeit für unternehmenskritische Anwendungen einführen. Sie bieten ein neues Maß an Sicherheit und Effizienz mit dem höchsten Return on Investment (ROI) für Hyperscale-, Unternehmens- und Telekommunikationsumgebungen.
-
ConnectX® -6 Dx SmartNICs bieten bis zu zwei Ports mit 25, 50 oder 100Gb/s oder einen einzelnen Port mit 200Gb/s, Ethernet-Konnektivität mit 50Gb/s PAM4 SerDes-Technologie und PCIe 4.0-Host-Konnektivität. Die ConnectX® -6 Dx Hardware-Offload-Engines umfassen Ipsec und Inline-TLS Data-in-Motion-Kryptografie, erweiterte Netzwerkvirtualisierung, RDMA over Converged Ethernet (RoCE) und NVMe over Fabrics (NVMe-oF) Speicherbeschleunigungen.
-
Die BlueField® -2 IPU integriert alle fortschrittlichen Funktionen von ConnectX® -6 Dx mit einer Reihe von leistungsstarken ARM-Prozessorkernen, Hochleistungsspeicherschnittstellen und flexiblen Verarbeitungsfunktionen in einem einzigen System-on-Chip (SoC).
-
RDMA für Rechenzentren, die auf einer Ethernet- oder Mixed-Protocol-Fabric basieren, wird hier online beschrieben: Mellanox.com/sites/default/files/relateddocs/whitepapers/roce_in_the_data_center.pdf.
-
In Wikipedia heißt es: „In der Informatik ist der direkte Fernzugriff auf den Speicher (Remote Direct Memory Access, RDMA) ein direkter Speicherzugriff vom Speicher eines Computers auf den eines anderen, ohne dass das Betriebssystem des einen oder anderen Computers beteiligt ist. Dies ermöglicht eine Vernetzung mit hohem Durchsatz und geringer Latenz, was besonders in massiv parallelen Computerclustern nützlich ist. RDMA unterstützt die Zero-Copy-Vernetzung, indem es dem Netzwerkadapter ermöglicht, Daten von der Leitung direkt in den Anwendungsspeicher oder vom Anwendungsspeicher direkt auf die Leitung zu übertragen, wodurch das Kopieren von Daten zwischen dem Anwendungsspeicher und den Datenpuffern im Betriebssystem entfällt. Solche Übertragungen erfordern keine Arbeit durch CPUs, Caches oder Kontextwechsel, und die Übertragungen laufen parallel zu anderen Systemoperationen. Dadurch wird die Latenzzeit bei der Nachrichtenübertragung reduziert.“
-
Wikipedia fügt jedoch hinzu, dass „diese Strategie mehrere Probleme mit sich bringt, die damit zusammenhängen, dass der Zielknoten nicht über die Beendigung der Anfrage benachrichtigt wird (einseitige Kommunikation)“.
-
Die Verwendung von Netzwerk-Offloads in Rechenzentren wird u.a. hier beschrieben: Mellanox.com/flles/doc-2020/sb-mellanox-nvme-snap.pdf.
-
Ein „Socket“ umfasst in der Regel einen Endpunkt (in der Regel IP-Adresse und Portnummer) einer zweiseitigen Kommunikationsverbindung zwischen einem ersten und einem zweiten Programm, die im Netz laufen. Der Socket kann an eine Portnummer gebunden sein, die es der TCP-Schicht ermöglicht, die Anwendung zu identifizieren, an die Daten gesendet werden sollen.
-
NVMe/TCP ist ein Beispiel für ein Blockspeicherprotokoll. NVMe ist ein Beispielprotokoll, die Verweise darauf sind jedoch nicht als einschränkend zu verstehen; stattdessen kann generell jedes geeignete lokale oder PCI-Speicherprotokoll verwendet werden.
-
Das Transmission Control Protocol/Internet Protocol (TCP/IP) ist ein Beispiel für ein Netzwerkprotokoll, das von mehreren Computern zur Kommunikation untereinander verwendet werden kann.
-
KURZFASSUNG DER ERFINDUNG
-
Die Erfindung wird durch die Ansprüche definiert. Zur Veranschaulichung der Erfindung werden hier Aspekte und Ausführungsformen beschrieben, die in den Anwendungsbereich der Ansprüche fallen können oder auch nicht.
-
Bestimmte Ausführungsformen zielen darauf ab, die Anzahl der Pufferkopien für die Speicheraufbereitung zu verringern.
-
Bestimmte Ausführungsformen zielen darauf ab, ein einzelnes Gerät (z. B. die ConnectX® -Karte) mit mehreren PCIe-Bussen auszustatten, wobei die Software so konfiguriert ist, dass sie den Speicher von einem PCIe-Bus so abbildet, dass ein anderer PCIe-Bus darauf zugreifen kann, z. B. durch Cross-PCIe-Mapping und/oder Transaktionen. Ein Speicherschlüssel kann zur Beschreibung eines Puffers (Speichers) verwendet werden; der Schlüssel kann so definiert werden, dass er ein PCIe-übergreifendes (GVMI) Mapping darstellt, z. B. wie hier beschrieben. In einer PCIe-NTB-Ausführung (Non-Transparent Bridge) muss jedoch kein Speicherschlüssel bereitgestellt werden. Im Gegensatz dazu überbrückt Legacy-RDMA die PCIe-Grenzen durch ein Paar von HW-Geräten (ConnectX® -Karten oder andere), die eine „RDMA-Verbindung“ definieren. Jedes Gerät kann nur lokale PCIe-Puffer verarbeiten, aber die RDMA-Verbindung kann Puffer zwischen den Geräten übertragen.
-
Bestimmte Ausführungsformen zielen darauf ab, eine busübergreifende Speicherabbildung zu ermöglichen.
-
Ganz allgemein zielen bestimmte Ausführungsformen darauf ab, die IOPS (IO-Operationen pro Sekunde) zu verbessern und/oder die Latenzzeit zu verringern.
-
Ein computergestütztes System für eine effiziente Interaktion zwischen einem Host ist vorgesehen, wobei der Host ein erstes Betriebssystem und ein zweites Betriebssystem hat, wobei das System ein Subsystem auf dem zweiten Betriebssystem umfasst, das Daten direkt aus einem Puffer extrahiert, der lokal auf dem Host ist, wobei das System betriebsfähig ist, um einen Speicher von einem Bus, der dem ersten Betriebssystem zugeordnet ist, auf einem anderen Bus abzubilden, der dem zweiten Betriebssystem zugeordnet ist, und von welchem anderen Bus auf den Speicher zugegriffen wird, um dadurch eine Verbindung zwischen dem ersten und dem zweiten Betriebssystem durch eine busübergreifende Speicherabbildung zu emulieren.Der Anwendungsbereich der Erfindung umfasst unter anderem die folgenden Ausführungsformen:
- Ausführungsform 1. Ein computergestütztes System für eine effiziente Interaktion zwischen einem Host, wobei der Host ein erstes Betriebssystem und ein zweites Betriebssystem hat, wobei das System umfasst:
- ein Subsystem, z.B. auf dem zweiten Betriebssystem, das Daten extrahiert, typischerweise direkt aus einem Puffer, der sich auf dem Host befindet, wobei das System betriebsfähig ist, um einen Speicher von einem Bus, der dem ersten Betriebssystem zugeordnet sein kann, auf einen anderen Bus abzubilden, der dem zweiten Betriebssystem zugeordnet sein kann und von dem aus typischerweise auf den Speicher zugegriffen wird, um dadurch eine Verbindung zwischen dem ersten und dem zweiten Betriebssystem zu emulieren, z.B. durch busübergreifende Speicherabbildung.
- Ausführungsform 2. System gemäß einer der vorangehenden Ausführungsformen, bei dem das erste Betriebssystem eine PCI-artige Konnektivität, einschließlich mehrerer Schichten, mit dem zweiten Betriebssystem aufweist.
- Ausführungsform 3. System gemäß einer der vorhergehenden Ausführungsformen, wobei das Teilsystem einen Netzwerk-Stapel umfasst.
- Ausführungsform 4. System gemäß einer der vorhergehenden Ausführungsformen, wobei der Netzwerk-Stapel so konfiguriert ist, dass er einen Puffer außerhalb des eigenen Speichers des zweiten Betriebssystems identifiziert, der es der Software des zweiten Betriebssystems ermöglicht, auf den Puffer des ersten Betriebssystems zuzugreifen.
- Ausführungsform 5. System gemäß einer der vorangehenden Ausführungsformen, bei dem sich der Puffer, der sich auf dem Host befindet, auf dem Host bleibt.
- Ausführungsform 6. Ein System nach einer der vorhergehenden Ausführungsformen, wobei das System auch eine Anwendung auf dem Host enthält, die:
- ein Speichervolumen auf einem emulierten NVMe öffnet, um so eine geöffnete Datei bereitzustellen;
- einen Speicherblock im lokalen Speicher zuweist und Daten als Puffer B in den Speicherblock schreibt;
- in die geöffnete Datei schreibt, um dadurch einen Schreibaufruf zu definieren; und einen Systemkern-Treiber, der den Schreibaufruf verarbeitet und eine NVMe-Kapsel
mit dem Puffer B vorbereitet, bereitstellt.
- Ausführungsform 7. System gemäß einer der vorangehenden Ausführungsformen, wobei das System NVMe-Emulationssoftware und einen TCP-Software-Stapel enthält, die zusammenarbeiten, um eine busübergreifende Zuordnung zu ermöglichen, indem sie es einem geräteübergreifenden Speicherschlüssel erlauben, mehrere Softwareschichten zu durchlaufen, damit Software auf dem zweiten Betriebssystem auf den lokalen Host-Puffer des ersten Betriebssystems zugreifen kann.
- Ausführungsform 8. System gemäß einer der vorhergehenden Ausführungsformen, wobei das erste Betriebssystem auch so konfiguriert ist, dass es Operationen steuert, um dadurch zu ermöglichen, dass der geräteübergreifende Speicherschlüssel die mehreren Softwareschichten durchläuft, wobei die Operationen Folgendes umfassen:
- Operation 25. der NVMe-Treiber C des Hosts sendet eine Anforderung, die auf den Puffer B zeigt, an ein über die DPU verwaltetes emuliertes NVMe-Gerät D, und das emulierte NVMe-Gerät D stellt dem Host ein NVMe-Gerät (das D emuliert) zur Verfügung;
- Operation 30. das emulierte NVMe-Gerät D teilt einem Manager E des emulierten NVMe-Geräts D auf einer DPU mit, dass eine NVMe-Anforderung bereit ist, und der Manager E erhält eine Kopie der NVMe-Anforderung im lokalen Speicher des Managers E;
- Operation 35. Manager E versteht, z. B. durch Zugriff auf die Kopie der NVMe-Anfrage im lokalen Speicher von Manager E, dass die NVMe-Anfrage auf Puffer B verweist, der als Teil des Hostspeichers des Clients einen anderen PCIe-Bus oder eine andere Funktion hat;
- Operation 40. Manager E startet eine neue Anforderung an einen NVMe-TCP-Initiatortreiber F, der auf dem DPU läuft, mit Attributen zur Ausführung dieser neuen Anforderung, und die neue Anforderung oder deren Attribute umfassen lokale Anforderungsinformationen und den Inhalt des Puffers (B), der entfernt ist;
- Operation 50. der NVMe-TCP-Initiatortreiber F hält über einen TCP-Benutzerraum-Stapel G auf der DPU einen TCP-Socket mit einem Ziel verbunden;
- Operation 53. der NVMe-TCP-Initiatortreiber F übergibt die NVMe-TCPformatierten Header der Anforderung im lokalen Speicher der DPU an den VMA-TCP-Benutzerraum-Stapel G, und die Header werden von F über eine BSD-Sende-API an G weitergeleitet;
- Operation 57. der NVMe-TCP-Initiatortreiber F übergibt den Inhalt des Puffers B an den VMA-TCP-Benutzerraum-Stapel G, und der Inhalt von Puffer B wird über die erweiterte Sende-API von G an G weitergegeben;
- Operation 60. der TCP-Benutzerraum-Stapel G verwaltet den TCP-Stapel und die HW-Sendewarteschlange, um den DPU-Speicherstromanteil und den Host-Speicherstromanteil ohne Kopieren des Puffers B oder der Speicherstromanteile an den lokalen PCIe-Funktionsbus zu senden;
- Operation 70. der NVMe-TCP-Initiatortreiber F erhält vom Ziel eine NVMe-TCP-Antwort auf die gesendete NVMe-TCP-Anfrage;
- Operation 75. als Reaktion darauf gibt der NVMe-TCP-Initiatortreiber F den Puffer B als den entsprechenden TCP-Stream-Teil im TCP-Benutzerraum-Stapel G frei, der mit einem ACK versehen wurde.
- Ausführungsform 9. System nach einer der vorhergehenden Ausführungsformen, wobei der Speicherschlüssel einen RDMA-Schlüssel umfasst.
- Ausführungsform 10. System nach einer der vorhergehenden Ausführungsformen, wobei der Speicherschlüssel einen DMA-Schlüssel umfasst.
- Ausführungsform 11. Verfahren zur effizienten Interaktion zwischen einem Host und einem entfernten Ziel, wobei das Verfahren umfasst:
- Bereitstellen eines Hosts mit einem ersten Betriebssystem und eines entfernten Ziels mit einem zweiten Betriebssystem, das eine PCI-Typ-Verbindung mit dem ersten Betriebssystem hat; und
- gemeinsames Nutzen mindestens eines Puffers, der sich auf dem Host befindet, mit dem entfernten Ziel, einschließlich der Bereitstellung eines Null-Kopie-Zugriffs für das Ziel auf den mindestens einen Puffer, um dadurch eine doppelte Null-Kopie über mehrere Betriebssysteme hinweg bereitzustellen.
- Ausführungsform 12: Verfahren gemäß einer der vorhergehenden Ausführungsformen, bei dem mindestens einer der Hosts und das Ziel eine nichttransparente Brücke (NTB) für die Inter-Domain-Kommunikation über PCIe-Schnittstellen verwenden.
- Ausführungsform 13: Verfahren gemäß einer der vorhergehenden Ausführungsformen, bei dem eine E/A-(bzw. I/O)-Verarbeitungseinheit (IPU) mit einem Array von ARM-Prozessorkernen zwischen dem Host und dem Netzwerk eingesetzt wird, und bei dem SNAP TCP Storage auf den ARM-Prozessorkernen den PCIe-Zugriff vom Host unter Verwendung mindestens eines XGVMI-Speicherschlüssels auf Null kopiert.
- Ausführungsform 14. Verfahren nach einer der vorangehenden Ausführungsformen, bei dem ein erster Kopiervorgang vom Host zur IPU und ein zweiter Kopiervorgang vom CPU-Speicher zu einem TCP-Stapel erfolgt.
- Ausführungsform 15. Verfahren gemäß einer der vorhergehenden Ausführungsformen, wobei das Verfahren die folgenden Operationen umfasst, um dadurch IPOS zu erhöhen und/oder die Latenzzeit zu verringern und/oder die CPU-Auslastung zu verringern, indem die Kopien des Speicherbereitstellungspuffers reduziert werden:
- Operation 10. eine Anwendung auf einem Client-Host bereitet einen entfernten Datenpuffer B im lokalen Speicher des Hosts vor;
- Operation 15. die Host-Anwendung fordert einen NVMe-Treiber C auf dem Client-Host auf, einen entfernten Puffer B in ein Speichervolumen zu schreiben;
- Operation 20. der NVMe-Treiber C auf dem Client-Host bereitet eine NVMe-Anforderung vor, die auf den Puffer B verweist;
- Operation 25. der NVMe-Treiber C des Hosts sendet die Anforderung, die auf den Puffer B zeigt, an ein über die DPU verwaltetes emuliertes NVMe-Gerät D, und das emulierte NVMe-Gerät D stellt dem Client-Host ein NVMe-Gerät zur Verfügung, das das emulierte NVMe-Gerät D emuliert;
- Operation 30. das emulierte NVMe-Gerät D teilt einem Manager E des emulierten NVMe-Geräts D auf einer DPU mit, dass eine NVMe-Anfrage bereit ist, und Manager E erhält eine Kopie der NVMe-Anfrage im lokalen Speicher von Manager E;
- Operation 35. Manager E versteht, dass die NVMe-Anfrage auf Puffer B verweist, der Teil des Client-Host-Speichers ist und daher einen anderen PCIe-Bus oder eine andere Funktion hat;
- Operation 40. Manager E startet eine neue Anforderung auf einem NVMe-TCP-Initiatortreiber F, der auf der DPU läuft, mit Attributen zur Ausführung dieser neuen Anforderung, und die neue Anforderung oder ihre Attribute umfassen lokale Anforderungsinformationen und den Inhalt des entfernten Datenpuffers B;
- Operation 50. NVMe-TCP-Initiatortreiber F hält über einen VMA-TCP-Benutzerraum-Stapel G auf der DPU einen TCP-Socket mit einem Ziel verbunden;
- Operation 53. der NVMe-TCP-Initiatortreiber F übergibt die NVMe-TCPformatierten Header der Anforderung im lokalen Speicher der DPU an den VMA-TCP-Benutzerraum-Stapel G, und die Header können vom NVMe-TCP-Initiatortreiber F über eine BSD send()-API an den VMA-TCP-Benutzerraum-Stapel G übergeben werden;
- Operation 57. der NVMe-TCP-Initiatortreiber F übergibt den Inhalt von Puffer B an den VMA-TCP-Benutzerraum-Stapel G, und der Inhalt von Puffer B wird über die erweiterte Sende-API vom NVMe-TCP-Initiatortreiber F an den VMA-TCP-Benutzerraum-Stapel G übergeben;
- Operation 60. der TCP-Benutzerraum-Stapel G verwaltet den TCP-Stapel und die HW-Sendewarteschlange, um den DPU-Speicherstromanteil und den Host-Speicherstromanteil ohne Kopieren des Puffers B oder der Speicherstromanteile an einen lokalen PCIe-Funktionsbus zu senden;
- Operation 70. der NVMe-TCP-Initiatortreiber F erhält eine NVMe-TCP-Antwort vom Ziel über die gesendete NVMe-TCP-Anfrage; und
- Operation 75. als Reaktion darauf gibt der NVMe-TCP-Initiatortreiber F den Puffer B frei, da der betreffende TCP-Stream-Teil im VMA-TCP-Benutzerraum-Stapel G mit ACK bestätigt wurde.
- Ausführungsform 16: Verfahren gemäß einer der vorhergehenden Ausführungsformen, bei dem die IPU einen VMA umfasst und bei dem der Netzwerk-Stapel einen Puffer, der Daten speichert, die über das Netzwerk zu senden sind, unter Verwendung eines Speicherschlüssels zusätzlich zu einem Zeiger identifiziert.
- Ausführungsform 17. Verfahren nach einer der vorhergehenden Ausführungsformen, bei dem der Netzwerk-Stapel die über das Netzwerk zu sendenden Daten direkt aus dem Puffer auf dem Host extrahiert, der sich in einer anderen PCIe-Domäne befindet.
- Ausführungsform 18: Verfahren gemäß einer der vorangehenden Ausführungsformen, bei dem das entfernte Ziel über ein Netzwerk mit dem Host verbunden ist, von dem der Host nichts weiß.
- Ausführungsform 19. System gemäß einer der vorangehenden Ausführungsformen, bei dem eine NTB (Non-Transparent Bridge) verwendet wird, um Software auf dem zweiten Betriebssystem den Zugriff auf den lokalen Host-Puffer des ersten Betriebssystems zu ermöglichen.
- Ausführungsform 20. System nach einer der vorhergehenden Ausführungsformen, wobei die NTB (Non-Transparent Bridge) von einem VMA auf dem zweiten Betriebssystem verwendet wird.
- Ausführungsform 21. System gemäß einer der vorhergehenden Ausführungsformen, bei dem der Netzwerk-Stapel so konfiguriert ist, dass er den Puffer unter Verwendung eines Speicherschlüssels und nicht eines Zeigers identifiziert.
- Ausführungsform 22. System gemäß einer der vorhergehenden Ausführungsformen, bei dem ein NVMe-TCP-Initiatortreiber den Inhalt des Puffers an einen TCP-Benutzerraum-Stapel im Netzwerk-Stapel weitergibt.
- Ausführungsform 23. System gemäß einer der vorhergehenden Ausführungsformen, wobei das zweite Betriebssystem mehrere ARM-CPUs enthält.
- Ausführungsform 24. System gemäß einer der vorangegangenen Ausführungsformen, bei dem ARM-basierte NVMe-TCP-Emulationssoftware den Puffer an einen TCP-Socket im VMA weiterleitet.
- Ausführungsform 25. System gemäß einer der vorhergehenden Ausführungsformen, wobei das zweite Betriebssystem die über das Netz zu sendenden Daten direkt aus einem Puffer auf dem Host extrahiert, der sich in einer anderen PCIe-Domäne befindet.
- Ausführungsform 26. System nach einer der vorhergehenden Ausführungsformen, wobei der Netzwerk-Stapel einen VMA umfasst.
-
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.
-
Aspekte und Ausführungsformen der Offenbarung werden nun rein beispielhaft unter Bezugnahme auf die beigefügten Zeichnungen beschrieben.
-
Figurenliste
-
- 1 ist eine vereinfachte Blockdiagrammdarstellung eines Systems zur busübergreifenden Speicherabbildung gemäß einer Ausführungsform der Erfindung.
- Die 2 - 5 sind Tabellen, die zur Erstellung von Speicherschlüsseln verwendet werden können.
-
DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
-
Der hier verwendete Begriff „Speicherschlüssel“ (Mkey) soll einen Kontext mit einem Zeiger und zusätzlichen Attributen, z. B. des Zeigers, umfassen, die mindestens eines der folgenden Merkmale beschreiben: wie auf den Speicherzeiger zugegriffen werden kann (z. B. Lesen, Schreiben, atomar, alle), welche Entität oder Entitäten auf den Zeiger zugreifen können (z. B. Schutzschlüssel), welche Übersetzungen vorgenommen werden müssen, um eine virtuelle auf eine physische Figur zu ermöglichen, und GVMI-übergreifende Informationen, z. B. wie hier beschrieben.
-
Es ist bekannt, dass Zeiger in der Computerprogrammierung bekannt sind, wie z. B. im Wikipedia-Eintrag über „Pointer_(computer_programming)“ beschrieben, und CPUs (und andere Peripheriegeräte) können Daten verarbeiten, wenn sie sich in Registern befinden oder durch einen Zeiger im Speicherbereich darauf hingewiesen wird. Speicherschlüssel werden z.B. in Mellanox.com/related-docs/prod_software/Mellanox_OFED_Linux_User_Manual_ v4_3.pdf beschrieben.
-
Mkeys und deren Erstellung sind z.B. in Mellanox.com/relateddocs/user_manuals/Ethernet_Adapters_Programming_Manual.pdf beschrieben. Der dort beschriebene Befehl CREATE_MKEY erzeugt z.B. neue Mkeys. Der Kontext des neuen Mkey-Objekts kann aus einer Eingabe-Mailbox entnommen werden. Normalerweise liefert die Hardware einen Mkey-Index als Ausgabeparameter. Dieser Index kann von der Software als Öffner beim Zugriff auf dieses Objekt verwendet werden.
-
VHCA ist ein Virtual Host Channel Adapter. VHCAs und VHCA-IDs werden unter anderem im US-Patent
US9397960B2 beschrieben, dessen Offenlegung hiermit durch Verweis einbezogen wird. Virtuelle Host-Kanal-Adapter mit mehreren Kontexten und einer einzigen Logik werden in diesem Cisco-Patent beschrieben: https://patents.google.com/patent/
US20080123672 , dessen Offenlegung hiermit durch Bezugnahme aufgenommen wird. Es ist bekannt, dass mehrere virtuelle Funktionen (VFs) vorhanden sind, von denen sich jede einem Host als unabhängige VHCA präsentiert, während nur ein einziger HCA vom Netzwerk beobachtet werden kann, das die VHCAs nicht kennt. Methoden zur gemeinsamen Nutzung desselben physischen Ports durch mehrere VHCAs sind bekannt und werden zum Beispiel in download.lenovo.com/servers/mig/2020/05/28/21936/ mlnx-lnvgy_dd_nic_cx.ib-5.0-2.1.8.0-0_rhel7_x86-64.pdf auf Seite 284 beschrieben.
-
Der Begriff „GVMI“ alias Guest Virtual Machine Identifier (GVMI) bezeichnet in der Regel eine Hardwarestruktur; der GVMI ist in der Regel der Name eines Gastbetriebssystems für eine virtuelle Maschine. Ein Beispiel für einen GVMI ist eine vhca_id alias „VHCA ID“ oder VHCA-Kennung.
-
Der Begriff „Cross-GVMI-Mkey“ bezieht sich auf eine Hardwarestruktur, die z. B. in Connect® X6Dx existiert und unter folgendem www-Link beschrieben wird: nvidia.com/enus/networking/ethernetlMellano-6-dx. Die Begriffe XGVMI, Cross-GVMI und Cross-Domain-GVMI werden hier allgemein austauschbar verwendet. Es ist bekannt, dass Netzwerkadapter, wie der Connect® X6Dx, über HW-Teile verfügen, die einen Cross-GVMI-Mkey unterstützen und in Verbindung mit der auf den internen Kernen laufenden Firmware arbeiten. Diese Firmware verfügt in der Regel über eine geschützte Befehlsschnittstelle, die im Programmer's Reference Manual (PRM) dokumentiert ist, das hier verfügbar ist: Mellanox.com/related-docs/user_manuals/Ethernet_Adapters_Programming_Manual.pdf.
-
Es wird jedoch geschätzt, dass jeder geeignete Ethernet-Netzwerkadapter-Treiber verwendet werden kann, der einen Cross-GVMI-Mkey wie beschrieben unterstützt. Der Code dieser Firmware kann einen Befehl nehmen und diesen Befehl in HW-Konfigurationen abbilden. Dies ist nur eine Beispielimplementierung, die Flexibilität in Bezug auf die Beibehaltung des Befehls bietet, auch wenn eine neue Hardwareversion herauskommt. In Geräte-APIs, die von der oben genannten Firmware implementiert werden, kann dies wie folgt dargestellt werden: „CREATE_MKEY mit access_mode = 0x6: CROSSING_VHCA_MKEY“
-
1 zeigt ein System zur busübergreifenden Speicherabbildung, das typischerweise die NVMe-Speicheremulation über NVMe-TCP-Beschleunigung gemäß einer Ausführungsform der Erfindung erleichtert. Das System von 1 umfasst typischerweise alle oder eine geeignete Teilmenge der folgenden Komponenten:
- eine Client-Anwendung, auch bekannt als „Performance-Anwendung“ oder Perf, auf einem Host, auch bekannt als Client-Host. Es versteht sich von selbst, dass Software, die sich auf dem Host-Betriebssystem in 1 befindet, typischerweise die im Folgenden beschriebenen Vorgänge 10-75 steuert;
- eine DPU (z. B. BlueField® )
- einen NVMe-Treiber auf dem Client-Host (auch bekannt als der NVMe-Treiber C des Hosts);
- NVMe-TCP-Initiatortreiber F, der auf dem DPU läuft;
- VMA TCP Benutzerraum-Stapel, G, auf der DPU;
- eine VHCA;
- GVMIs A und B, die in der Regel in Hardware implementiert sind, von denen eine oder beide durch VHCAs ersetzt werden können; GVMI A ist in der Regel als Netzwerkgerät definiert. GVMI B umfasst in der Regel ein emuliertes NVMe-Gerät (z. B. PCIe), das dem Client-Host ein NVMe-Gerät zur Verfügung stellt und über die DPU verwaltet wird;
- Software auf dem zweiten Betriebssystem (z. B. BlueField® ), um auf den lokalen Puffer des Hosts vom ersten Betriebssystem zuzugreifen;
- TCP-Socket im VMA; und
- NVMe-TCP-Emulationssoftware, die einen Puffer B an den VMA-TCP-Socket übergibt, der auf oder als SNAP® implementiert werden kann.
-
Ein Cross-GVMI-Speicherschlüssel, auch Cross-GVMI-Mkey genannt, ist so konfiguriert, dass er einen Puffer von einem GVMI, z.B. GVMI A, nimmt und denselben Puffer auf der anderen Seite mit dem zweiten GVMI, z.B. GVMI B, verwendet.
-
Eine DPU ist ein mögliches Beispiel für einen Datenprozessor, typischerweise ein System auf einem Chip, auch SoC genannt, das in der Regel Folgendes umfasst:
- eine softwareprogrammierbare Mehrkern-CPU, die eine ARM-Architektur aufweisen kann und in der Regel mit anderen SoC-Komponenten gekoppelt ist, und/oder
- eine Hochleistungsnetzschnittstelle zum Parsen, Verarbeiten und Übertragen von Daten, z. B. an GPUs und/oder CPUs, mit der Geschwindigkeit des übrigen Netzes (auch Leitungsrate genannt); und/oder
- programmierbare Beschleunigungs-Engines, die Anwendungen beispielsweise für KI und/oder maschinelles Lernen und/oder Sicherheit und/oder Telekommunikation und/oder Speicherung entlasten und dadurch deren Leistung verbessern.
-
Es wird geschätzt, dass bestimmte Ausführungsformen hierin vorteilhaft sind in der Verringerung der Latenz und der CPU-Nutzung, die durch den Kopier-Overhead der NVMe-Nutzlast vom Host-Speicher (z. B. X86) zu einer TCP-Paket-Nutzlast entstehen, die von der NVMe-Emulationssoftware der DPU-CPU-Kerne verwaltet wird (z. B. SNAP® ).
-
In der Regel konfiguriert die NVMe-Emulationssoftware (z. B. SNAP®) die Hardware der Netzwerkschnittstellenkarte (NIC) so, dass sie mindestens ein NVMe-TCP-Paket sendet, so dass der TCP-Header aus dem lokalen DPU-Speicher abgerufen wird, während die TCP-Nutzlast direkt aus dem Host-Speicher (X86) auf einem entfernten PCIe-Bus abgerufen wird. Auf diese Weise werden bis zu zwei Kopier- und Bereitstellungspuffer vermieden oder übersprungen.
-
Ein besonderer Vorteil bestimmter Ausführungsformen besteht darin, dass die Hardware der Netzwerkschnittstellenkarte (NIC) in der Regel ein einzelnes Paket aus mehreren Speicheradressen sammelt, die über mehrere PCIe-Busse verteilt sind. Software wird verwendet, um diese Speicheradressen von ihren jeweiligen PCIe-Bussen zu übersetzen und/oder abzubilden und/oder zu verwalten, und die Hardware wird entsprechend konfiguriert, um solche Pakete zu senden.
-
Die BlueField® -2 I/O Processing Unit (IPU) ist ein System-on-Chip (SoC), das eine SmartNIC, z. B. ConnectX® -6 Dx, eine Reihe von ARM-Prozessorkernen, Hochleistungsspeicherschnittstellen und flexible Verarbeitungsfunktionen umfasst. Der SmartNIC kann Hardware-Offload-Engines mit IPsec- und Inline-TLS-Data-in-Motion-Kryptografie und/oder Netzwerkvirtualisierung und/oder RDMA over Converged Ethernet (RoCE) und/oder NVMe over Fabrics (NVMe-oF)-Speicherbeschleunigungen enthalten, wie z. B. online beschrieben in: mellanox.com/news/press_release/mellanox-introducesrevolutionary-connectx-6-dx-and-bluefield-2-secure-cloud-smartnics-and-io. Ein ARM-Prozessor ist eine CPU, die auf der RISC-Architektur (RISC = Reduced Instruction Set Computer) von Advanced RISC Machines (ARM) basiert, z. B. wie online beschrieben in: whatis.techtarget.com/definition/ARMprocessor#:~:text=An%20ARM%20processor%20is%20one,bit%20RISC%20multi%2Dcore %20processors.
-
Das System aus 1 kann in Verbindung mit bekannten Technologien wie SNAP® und/oder VMA und/oder TCP-Sockets und/oder libibverbs und/oder BlueField® verwendet werden, wobei diese nicht als Einschränkung zu verstehen sind. Das zweite Betriebssystem in 1 kann beispielsweise mehrere ARM-CPUs, wie hier beschrieben, oder eine Reihe von ARM-Prozessorkernen (wie eine NVIDIA® BlueField® IPU alias BlueField® (ARM)) enthalten, oder es kann alternativ überhaupt nicht ARM-basiert sein und stattdessen beispielsweise X86 oder eine andere geeignete CPU-Architektur verwenden. Mellanox NVMe SNAP® (Software-defined Network Accelerated Processing) ist ein Beispiel für ein Framework oder eine Technologie, die eine hardwarebeschleunigte Virtualisierung von NVMe-Speicher ermöglicht, z. B. durch Emulation eines Blockspeichergeräts auf einem Host. So kann beispielsweise ein NVMe-Laufwerk auf einem PCIe-Bus emuliert werden, wodurch der Netzwerkspeicher wie eine lokale NVMe-SSD aussieht. Ein Host-Betriebssystem/Hypervisor kann seinen Standard-NVMe-Treiber verwenden, der nicht weiß, dass die Kommunikation durch den NVMe SNAP® und nicht durch ein physisches Laufwerk beendet wird. Die Logik kann dann über den NVMe SNAP® auf die Daten angewendet und über das Netzwerk an ein Speicherziel übertragen werden, z. B. über ein Ethernet- oder InfiniBand-Protokoll. Alternativ kann jede andere geeignete Technologie eingesetzt werden, die eine Hardware-Speicher-Virtualisierung implementiert und/oder eine Optimierung der Speicherressourcen im Hinblick auf CAPEX- und OPEX-Einsparungen ermöglicht und/oder so konfiguriert ist, dass CPU-Ressourcen des Computerknotens durch Auslagerung sowohl der Netzwerk- als auch der Speicherdatenpfade freigesetzt werden, und vorzugsweise die Integration in eine beliebige, auf einem beliebigen Netzwerkprotokoll basierende Speicherlösung ermöglicht.
-
In Bezug auf [copy #2] wird geschätzt, dass dieser Online-Link: Systemkern.org/doc/html/v4.15/networking/msg _zerocopy.html eine Linux-Socket-Definition der Zerocopy-Flags bietet. Die TCP-Stapel-Implementierung (VMA) kann Unterstützung für Sendungen mit MSG_ ZEROCOPY-Flag hinzufügen. Die Implementierung des send()-Aufrufs mit dem MSG_ZEROCOPY-Flag kann den Anwendungspufferzeiger als Referenz verwenden, ohne ihn in einen Zwischenpuffer zu kopieren. Der TCP-Stapel kann den Referenzpufferzeiger für das Senden des TCP-Pakets verwalten und darf den Verweis auf den Puffer erst freigeben, wenn ein TCP ACK empfangen wurde, das die gesamte Sendepuffergröße abdeckt. Der Eigentümer des TCP-Sockets (SPDK-Initiator) kann send() bzw. ein Senden mit MSG_ZEROCOPY aufrufen, wenn dies von der Implementierung des TCP-Stapels (VMA) unterstützt wird. Die Implementierung des Aufrufers von send() mit MSG_ZEROCOPY kann den gesendeten Puffer beiseite legen, bis ein Hinweis darauf eingeht, dass der TCP-Stapel den Sendevorgang abgeschlossen und eine Bestätigung erhalten hat.
-
Zu [Kopie #1], die eine Null-Kopie bzw. Zerocopy SNAP® (z. B. Host -> BlueField®) umfassen kann, kann eine API zum TCP-Stapel (z. B. VMA) hinzugefügt werden, um den Cross-GVMI-Mkey bereitzustellen, so dass VMA später eine markierte physikalische Adresse (auch bekannt als „PA“) als Host-Speicher erkennen und diesen domänenübergreifenden GMVI-Speicherschlüssel für die in HW gesammelte PCIe verwenden kann. SNAP® , das den Cross-GVMI-Mkey vorbereitet, kann den Cross-GVMI-Mkey bei der TCP-Socket-Initialisierung an VMA weitergeben. Die Signalisierung des TCP-Puffers als „externer Host-Speicher“, für die der Cross-GVMI-Mkey zwischen SNAP® und (z. B.) VMA benötigt wird, kann durch geeignete Markierung des externen Host-Puffer-Zeigers erfolgen. Zum Beispiel kann das MSB der physikalischen Adresse entsprechend gesetzt werden. Es kann eine Logik in (beispielsweise) VMA hinzugefügt werden, um den markierten PA als externen Host-Speicherpuffer zu erkennen, und kann den Kreuz-GVMI-VMA verwenden, um den Mkey) an die Hardware mit Datenpuffer SGE auf Roh-QP (SQ/TIS) mit dem Kreuz-GVMI-Mkey zu setzen.
-
Der Einfachheit halber bezieht sich diese Spezifikation beispielhaft auf SNAP™ . Solche Verweise sollen jedoch nicht einschränkend sein, und generell kann jeder Speichergeräteemulator (z. B. ein smartNIC-Dienst) verwendet werden, der ein NVMe- (oder virtio-blk-) Speicher-PCIe-Gerät für den Host emuliert, indem er eine Speicher-PCIe-Geräteschnittstelle für einen Host freigibt (oder den Zugriff des Hosts auf das Speicher-PCIe-Gerät ermöglicht).
-
Das folgende Verfahren ist entweder allein oder in Verbindung mit dem System von 1 oder allgemeiner mit allen oder einer beliebigen Teilmenge der folgenden Verfahren vorgesehen:
- A. eine Anwendung auf einem Client-Host (auch bekannt als Host-Anwendung A)
- B. einen Datenpuffer im Speicher des Client-Hosts (auch Puffer B genannt)
- C. einen NVMe-Treiber auf dem Client-Host (auch bekannt als NVMe-Treiber C des Hosts)
- D. ein emuliertes NVMe-Gerät (stellt das NVMe-Gerät dem Client-Host zur Verfügung und wird über die DPU verwaltet)
- E. NVMe-emulierter Gerätemanager auf DPU, z. B. SNAP®
- F. NVMe-TCP-Initiatortreiber F, der z. B. auf der DPU läuft
- G. einen VMA (beispielsweise) TCP Benutzerraum-Stapel, G, der sich auf der DPU befinden kann.
-
Das Verfahren umfasst in der Regel alle oder eine beliebige Teilmenge der folgenden Vorgänge in geeigneter Reihenfolge, z. B. wie folgt:
- Operation 10. eine Anwendung auf einem Client-Host bereitet einen entfernten Datenpuffer B im lokalen Speicher des Hosts vor;
- Operation 15. die Host-Anwendung fordert einen NVMe-Treiber C auf dem Client-Host auf, einen entfernten Puffer B in ein Speichervolumen zu schreiben;
- Operation 20. der NVMe-Treiber C des Hosts bereitet eine NVMe-Anforderung vor, die auf den Puffer B verweist;
- Operation 25. der NVMe-Treiber C des Hosts sendet die auf den Puffer B zeigende Anforderung an ein über die DPU verwaltetes emuliertes NVMe-Gerät D, und das emulierte NVMe-Gerät D stellt dem Client-Host ein NVMe-Gerät zur Verfügung, das das emulierte NVMe-Gerät D emuliert;
- Operation 30. das emulierte NVMe-Gerät D teilt einem Manager E des emulierten NVMe-Geräts D auf einer DPU mit, dass eine NVMe-Anforderung bereit ist, und Manager E erhält eine Kopie der NVMe-Anforderung im lokalen Speicher von Manager E;
- Operation 35. Manager E versteht, z. B. durch Zugriff auf die Kopie der NVMe-Anfrage im lokalen Speicher von Manager E, dass die NVMe-Anfrage auf Puffer B verweist, der Teil des Hostspeichers des Clients ist und daher einen anderen PCIe-Bus oder eine andere Funktion hat;
- Operation 40. Manager E startet eine neue Anforderung an einen NVMe-TCP-Initiatortreiber F, der auf der DPU läuft, mit Attributen zur Ausführung dieser neuen Anforderung, und die neue Anforderung oder ihre Attribute umfassen lokale Anforderungsinformationen und den Inhalt des Ferndatenpuffers B;
- Operation 50. der NVMe-TCP-Initiatortreiber F hält über einen VMA-TCP-Benutzerraum-Stapel G auf der DPU einen TCP-Socket mit einem Ziel verbunden;
- Operation 53. der NVMe-TCP-Initiatortreiber F übergibt die NVMe-TCPformatierten Header der Anforderung im lokalen Speicher der DPU an den VMA-TCP-Benutzerspace-Stapel G, und die Header können vom NVMe-TCP-Initiatortreiber F über eine BSD send()-API an den VMA-TCP-Benutzerspace-Stapel G übergeben werden;
- Operation 57. der NVMe-TCP-Initiatortreiber F übergibt den Inhalt des Puffers B an den VMA-TCP-Benutzerraum-Stapel G. Der Inhalt des Puffers B kann vom NVMe-TCP-Initiatortreiber F über die erweiterte Sende-API an den VMA-TCP-Benutzerraum-Stapel G übergeben werden; dadurch wird der VMA in die Lage versetzt, den Puffer zu identifizieren, indem er einen Speicherschlüssel anstelle eines Zeigers verwendet.
- Operation 60. der VMA-TCP-Benutzerraum-Stapel G verwaltet den TCP-Stapel und die HW-Sendewarteschlange, um den DPU-Speicherstromanteil und den Host-Speicherstromanteil ohne Kopieren des Puffers B oder der Speicherstromanteile an einen lokalen PCIe-Funktionsbus zu senden;
- Operation 70. der NVMe-TCP-Initiatortreiber F erhält eine NVMe-TCP-Antwort vom Ziel über die gesendete NVMe-TCP-Anfrage; und
- Operation 75. als Reaktion darauf, gibt der NVMe-TCP-Initiatortreiber F den Puffer B als den entsprechenden TCP-Stream-Teil im VMA-TCP-Benutzerraum-Stapel G frei, der mit einem ACK versehen wurde.
-
Im Vergleich zu den hier nur beispielhaft beschriebenen Ausführungsformen sind viele Varianten möglich. Um nur ein paar Beispiele zu nennen:
- Das hier beschriebene System und die Methoden können in jedes geeignete System wie z. B. SNAP, NVIDIA Mellanox Rivermax® oder VMA integriert werden. Es ist jedoch klar, dass die Verwendung von VMA nur eine mögliche Ausführungsform ist. VMA ist eine mögliche TCP/IP-Stapel-Lösung, aber alternativ kann bei einer Nicht-VMA-Lösung ein TCP/IP-Stapel bereitgestellt werden, der z. B. wie hier beschrieben modifiziert wird, um den Cross-GVMI-Mkey zu handhaben. Es wird davon ausgegangen, dass VMA (oder Mellanox Messaging Accelerator) ein Beispiel für einen Netzwerk-Stapel ist; andere Beispiele umfassen, sind aber nicht beschränkt auf Linux TCP Stapel, mTCP, Seastar und andere Netzwerk-Stapels, die online beschrieben sind, z. B. auf der DPDK-Ökosystemseite, die online unter dem folgenden Link verfügbar ist: dpdk.org/ecosystem/.
-
Außerdem ist diese Erfindung nicht spezifisch für PCI-Anschlüsse (z. B. speziell für PCI- oder PCIe-Anschlüsse) und kann auf andere Busse als PCI und PCIe erweitert werden.
-
Es kann auch jede andere geeignete Methode zur Erstellung von Speicherschlüsseln verwendet werden. Die 2, 3, 4 und 5 stellen beispielsweise die Tabellen 226 bis 229 in mellanox.com/related-docs/user_manuals/Ethernet_Adapters_Programming_Manual.pdf dar. Diese stellen jeweils ein Beispiel für das Layout der CREATE_MKEY-Eingangsstruktur (2), ein Beispiel für die Feldbeschreibungen der CREATE_MKEY-Eingangsstruktur (3), ein Beispiel für das Layout der CREATE_MKEY-Ausgangsstruktur (4) und ein Beispiel für die Feldbeschreibungen der CREATE_MKEY-Ausgangsstruktur (5) dar.
-
Eine auf NTB (Non-Transparent Bridge) basierende Methode kann auch die Verwendung eines domänenübergreifenden GVMI-Speicherschlüssels, auch bekannt als „cross GVMI Mkey“, wie hier beschrieben, ersetzen, z. B. durch Bereitstellung von Software, die so konfiguriert ist, dass VMA NTB verwenden kann (wie bei der cross GVMI Mkey-Lösung), so dass Software auf dem zweiten Betriebssystem (z. B. BlueField® ) auf den lokalen Host-Puffer des ersten Betriebssystems zugreifen kann.
-
Außerdem extrahiert der VMA, wie beschrieben, bei bestimmten Ausführungsformen die über das Netz zu sendenden Daten direkt aus dem Puffer auf dem Host, der sich in einer anderen PCI- oder PCIe-Domäne befindet. Jede geeignete Implementierung kann verwendet werden, um den VMA zu veranlassen, dies zu tun. Bei einer speicherbezogenen Lösung kann die Anwendung auf dem Host alle oder eine beliebige geeignete Teilmenge der folgenden Aufgaben ausführen:
- Schritt a. Öffne das Speichervolumen (z. B.: open(„path“)) auf dem emulierten NVMe; und/oder
- Schritt b. Zuweisung von lokalem Speicher (z. B.: malloc()) und Schreiben der Daten in den zugewiesenen Speicherblock [z. B. wie hier unter Bezugnahme auf Operation 10 beschrieben] und/oder
- Schritt c. Schreibe() in die geöffnete Datei [z. B. wie hier unter Bezugnahme auf Operation 15 beschrieben]; und/oder
- Stufe d. Ein Systemkern-Treiber kann den Schreibe()-Aufruf verarbeiten und eine NVMe-Kapsel mit Puffer B vorbereiten, typischerweise ab Stufe b, z. B. wie hier unter Bezugnahme auf Operation 20 beschrieben.
-
Der hier verwendete Begriff „nicht transparent“ steht im Gegensatz zur Konnektivität, die „transparent“ ist. So kann beispielsweise eine PCIe NTB (Non-Transparent Bridge) verwendet werden, um die Konnektivität zwischen mehreren CPUs, GPUs und FPGAs herzustellen. Bei Verwendung einer (transparenten) PCIe-Bridge sind alle PCIe-Busse bis hin zu allen Endpunkten für einen bestimmten Root-Komplex sichtbar. Im Gegensatz dazu leitet eine nichttransparente Bridge den PCIe-Verkehr zwischen separaten PCIe-Bussen weiter, und jeder Root Complex, RC, sieht die NTB (Non-Transparent Bridge) als Endpunktgerät, während der Root Complex und die Geräte auf der anderen Seite der Bridge für den RC nicht sichtbar sind, wie z. B. unter der folgenden Online-Adresse beschrieben: missinglinkelectronics.com/devzone/index.php/fpga-debug-ntb.
-
VMA (Voltaire Messaging Accelerator) ist ein Beispiel für eine Technologie zur Datenbeschleunigung. NVIDIAs VMA, der als Open Source veröffentlicht wurde, steigert die Leistung von nachrichtenbasierten und Streaming-Anwendungen in einer Vielzahl von Branchen, wie z. B. High-Frequency Trading (HFT)-Plattformen und Web 2.0-Clustern. VMA stellt Standard-Socket-APIs mit Systemkern-Bypass-Architektur zur Verfügung und ermöglicht so Benutzerraum-Networking für Multicast, UDP-Unicast und TCP-Streaming. VMA kann sofort eingesetzt werden, z. B. dank eingebauter vorkonfigurierter Profile für z. B. Latenz und Streaming. VMA wird an den folgenden Online-Standorten beschrieben: docs.mellanox.com/category/vma und docs.mellanox.com/display/VMAv911/Introduction+to +VMA; wird davon ausgegangen, dass andere Beschleunigungstechnologien nur eine Teilmenge der Merkmale, Eigenschaften und Funktionalitäten von VMA enthalten können.
-
Die Offenbarungen aller in der Beschreibung erwähnten Veröffentlichungen und Patentdokumente sowie der darin direkt oder indirekt zitierten Veröffentlichungen und Patentdokumente werden hiermit durch Verweis einbezogen, mit Ausnahme von Ausschlussklauseln oder Verzichtserklärungen zum Gegenstand.
-
Es versteht sich von selbst, dass die Softwarekomponenten der vorliegenden Erfindung, falls gewünscht, in ROM-Form (Festwertspeicher) implementiert werden können. Die Softwarekomponenten können im Allgemeinen in Firmware oder Hardware implementiert werden, falls gewünscht, unter Verwendung herkömmlicher Techniken. Außerdem können die Softwarekomponenten beispielsweise als Computerprogrammprodukt oder auf einem materiellen Medium instanziiert werden. In einigen Fällen kann es möglich sein, die Softwarekomponenten als ein von einem geeigneten Computer interpretierbares Signal zu instanziieren, obwohl eine solche Instanziierung in bestimmten Ausführungsformen der vorliegenden Erfindung ausgeschlossen sein kann.
-
Es versteht sich von selbst, dass verschiedene Merkmale der Erfindung, die aus Gründen der Übersichtlichkeit im Zusammenhang mit einzelnen Ausführungsformen beschrieben werden, auch in Kombination in einer einzigen Ausführungsform vorgesehen werden können. Umgekehrt können verschiedene Merkmale der Erfindung, die der Kürze halber im Zusammenhang mit einer einzigen Ausführungsform beschrieben werden, auch separat oder in jeder geeigneten Unterkombination bereitgestellt werden.
-
Dem Fachmann wird klar sein, dass die vorliegende Erfindung nicht auf das beschränkt ist, was vorstehend gezeigt und beschrieben wurde. Vielmehr wird der Umfang der Erfindung durch die beigefügten Ansprüche und deren Äquivalente definiert.
-
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 9397960 B2 [0027]
- US 20080123672 [0027]