-
VERWANDTER FALL
-
Diese Anmeldung beansprucht die Priorität vor der vorläufigen US-Patentanmeldung Nummer 61/587 541, eingereicht am 17. Januar 2012.
-
STAND DER TECHNIK
-
Bei einer beispielhaften herkömmlichen Rechenanordnung, weisen ein Client und ein Server jeweils Netzwerk-Schnittstellencontroller (NICs) oder Netzwerk-(NW)-Eingangs-/Ausgangsgeräte auf, die in der Lage sind, miteinander unter Verwendung eines Remote Direct Memory Access-(RDMA)-Protokolls zu kommunizieren. Der Server weist einen Hostprozessor auf, der das Betriebssystem des Servers und dazugehörende Treiber ausführt. Der Server kann auch einen Speichercontroller aufweisen, der Zugriff auf Speicher, der an oder von dem Server verwaltet wird, verwaltet. Das NW-E/A-Gerät des Client gibt Anfragen an das NW-E/A-Gerät des Servers aus, um Daten zu schreiben und Daten aus dem Speicher, der von dem Server verwaltet wird, zu lesen. Das Betriebssystem des Servers, die dazugehörenden Treiber und der Hostprozessor verarbeiten Anfragen, die von dem NW-E/A-Gerät empfangen werden, und geben entsprechende Anfragen zu dem Speichercontroller aus. Der Speichercontroller empfängt die entsprechenden Anfragen und führt sie aus. Nach dem Ausführen der entsprechenden Anfragen, gibt der Speichercontroller Anfrageabschlussinformationen (und dazugehörende Daten, wenn Daten aus dem Speicher gelesen wurden) zu dem Betriebssystem des Servers und den dazugehörenden Treibern aus. Daraus erzeugen das Betriebssystem des Servers, die dazugehörenden Treiber und der Hostprozessor entsprechende Anfrageabschlussinformationen und dazugehörende Daten, und geben die entsprechenden Anfrageabschlussinformationen und dazugehörenden Daten zu dem NW-E/A-Gerät aus. Das NW-E/A-Gerät gibt dann die entsprechenden Anfrageabschlussinformationen und dazugehörenden Daten zu dem NW-E/A-Gerät des Client aus.
-
Bei der oben stehenden herkömmlichen Anordnung, verarbeiten das Betriebssystem des Servers, die dazugehörenden Treiber und der Hostprozessor verarbeiten Anfragen, die von dem NW-E/A-Gerät empfangen werden, und die Abschlussinformationen von dem Speicher. Das kann beträchtliche Mengen an Betriebssystem- und Hostprozessor-Verarbeitungsbandbreite verbrauchen. Es kann auch die Energiemenge, die verbraucht wird, und die Hitze, die von dem Hostprozessor abgegeben wird, erhöhen. Ferner kann es die Latenz erhöhen, die bei der Verarbeitung der Anfragen, die von dem NW-E/A-Gerät ausgegeben werden, anfällt.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
1 veranschaulicht ein erstes beispielhaftes System.
-
2 veranschaulicht ein beispielhaftes Abschlusswarteschlangenelement.
-
3 veranschaulicht ein zweites beispielhaftes System.
-
4 veranschaulicht ein beispielhaftes Zuordnungssystem für NVMe-Namensräume.
-
5 veranschaulicht eine erste beispielhafte Prellpufferzuordnung.
-
6 veranschaulicht eine zweite beispielhafte Prellpufferzuordnung.
-
7 veranschaulicht einen beispielhaften Namensraum-Kontextindex.
-
8 veranschaulicht einen beispielhaften Kommunikationsstrom.
-
9 veranschaulicht ein beispielhaftes Lesebefehlformat.
-
10 veranschaulicht ein beispielhaftes Schreib- und Vergleichsbefehlformat.
-
11 veranschaulicht ein beispielhaftes Flush- und nicht korrigierbares Schreibbefehlformat.
-
12 veranschaulicht ein beispielhaftes NVMe-Befehlsabschlussformat.
-
13 veranschaulicht eine beispielhafte NVMe-Befehlsbestätigungstabelle.
-
14 veranschaulicht ein beispielhaftes Blockschaltbild für ein Gerät.
-
15 veranschaulicht einen beispielhaften Logikablauf.
-
16 veranschaulicht einen beispielhaften Speicherträger.
-
17 veranschaulicht ein beispielhaftes Netzwerk-Eingangs-/Ausgangsgerät.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Wie in der vorliegenden Offenbarung in Erwägung gezogen, können beträchtliche Mengen an Betriebssystem- und Hostprozessor-Verarbeitungsbandbreite bei einer herkömmlichen Anordnung zwischen einem Client und einem Server verbraucht werden, wenn der Client versucht, auf Speicher, der von dem Server verwaltet wird, zuzugreifen. In letzter Zeit weisen Server sowohl NW-E/A-Geräte als auch Speichercontroller auf, die verbesserte Fähigkeiten haben, die versuchen, Beteiligung des Betriebssystems und des Hostprozessors zu minimieren. Hardwareelemente, wie zum Beispiel Befehlsunterbreitungs- und Befehlsabschlusswarteschlangen können zum Beispiel von dem Netzwerkgerät und Speichercontrollern des Servers verwendet werden, um es einem entfernten Client zu ermöglichen, auf Speicher über einen Vorgang zuzugreifen, der als entfernter Direktspeicherzugriff (Remote Direct Memory Access – RDMA) bekannt ist.
-
Speichercontroller werden auch ausgelegt, um in Übereinstimmung mit relativ neuen Vernetzungs-Kommunikationsprotokollen, die gut mit RDMA funktionieren können, zu arbeiten. Diese Speichercontroller können ferner den Zugriff auf Festplattenlaufwerke (HDDs), Festkörperlaufwerke (SSDs) steuern. Die SSDs können, ohne auf sie beschränkt zu sein, unterschiedliche Typen nicht flüchtigen Speichers umfassen, wie zum Beispiel dreidimensionalen Kreuzpunktspeicher, Flashspeicher, ferroelektrischen Speicher, Silikonoxid-Nitridoxid-Silikon(SONOS)-Speicher, Polymerspeicher, Nanodraht, ferroelektrischen Transistor-Lesespeicher (FeTRAM oder FeRAM), Nanodraht oder elektrisch löschbaren programmierbaren Nurlesespeicher (EEPROM). Bei einigen Beispielen, kann der Zugriff auf HDDs oder SSDs die Verwendung von Vernetzungs-Kommunikationsprotokollen aufweisen, die in Industriestandards oder Spezifikationen beschrieben sind (darunter Nachkommen oder Varianten), wie zum Beispiel die Peripheral Component Interconnect (PCI) Express Base Specification, Revision 3.0, veröffentlicht im November 2010 („PCI Express” oder „PCIe”) und/oder die Non-Volatile Memory Express (NVMe) Specification, Revision 1.1, veröffentlicht im Oktober 2012).
-
Speichercontroller, die in Übereinstimmung mit der NVMe-Spezifikation („NVMe-Controller”) arbeiten, können in der Lage sein, Betriebssystem- und Hostprozessorbeteiligung zu minimieren, wenn es einem entfernten Client erlaubt wird, auf Speicher, wie zum Beispiel auf ein SSD oder ein HDD, zuzugreifen. Diese Typen von NVMe-Controllern haben eventuell keine integrierten Sicherheitsprüfungen, um den Zugriff auf das SSD oder das HDD durch den Client zu überwachen. Typischerweise werden Zugriffsprüfungen von dem Betriebssystem gehandhabt, und das kann die möglichen Effizienzen, die durch einen RDMA-Vorgang gewonnen werden, zunichtemachen oder verringern. NW-E/A-Geräte können jedoch integrierte Sicherheitsprüfungen haben und können über eine Fähigkeit verfügen, einen Client zu bestätigen, um sicherzustellen, dass Anfragen auf Zugriff auf das SDD durch den Client erlaubt oder gültig sind. In Bezug auf diese oder andere Herausforderungen sind die hier beschriebenen Beispiele erforderlich.
-
Bei einigen Beispielen können Techniken, die mit der Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client verbunden sind, umgesetzt werden. Für diese Beispiele können Schaltungen für ein NW-E/A-Gerät an einem Server in der Lage sein, ein oder mehrere Module zu unterstützen, die mit dem Empfangen, dem Bestätigen und dem Anzeigen eines Zustands für einen empfangenen Befehl verbunden sind, so dass der Client auf ein Speichergerät, das von einem NVMe-Controller an dem Server verwaltet wird, zugreifen kann. Ein Befehl für den Client zum Zugreifen auf das Speichergerät kann zum Beispiel an dem NW-E/A-Gerät empfangen werden. Merkmale und/oder Logik, die von den Schaltungen für das NW-E/A-Gerät ausgeführt werden, können den Befehl basierend darauf bestätigen, ob ein Operationscode (Opcode), der in den Befehl angegeben ist, von dem NW-E/A-Gerät unterstützt wird. Der Befehl kann auch basierend darauf bestätigt werden, ob ein Indexidentifikator, der in den Befehl angezeigt ist, den Client mit einem NVMe-Namensraum-Identifikator, der dem Client zugeordnet ist, verbindet. Die Merkmale und/oder Logik, die von den Schaltungen ausgeführt werden, können dann einen Zustand des empfangenen Befehls zu dem Client als einen ungültigen Befehl (zum Beispiel nicht zugelassenen) und/oder einen abgeschlossenen Befehl (zum Beispiel Zugriff wurde gewährt und Befehl wurde von dem NVMe-Controller ausgeführt) anzeigen.
-
1 veranschaulicht ein erstes beispielhaftes System. Wie in 1 gezeigt, weist das erste beispielhafte System ein System 100 auf, das einen Client 10 hat, der über das Netzwerk 50 mit dem Server 20 kommunikativ gekoppelt ist. Gemäß einigen Beispielen, können die Begriffe „Hostcomputer”, „Host”, „Server”, „Client”, „Netzwerkknoten” und „Knoten” gegenseitig austauschbar verwendet werden und können zum Beispiel und uneingeschränkt eine oder mehrere Endstationen, mobile Internetgeräte, Smartphones, Mediengeräte, Eingangs-/Ausgangs-(E/A)-Geräte, Tablet-Computer, Anwendungen, Zwischenstationen, Netzwerkschnittstellen, Clients, Server und/oder Teile davon bedeuten. Obwohl der Client 10, das Server 20 und das Netzwerk 50 im Singular erwähnt werden, muss man verstehen, dass jedes solche Bauteil eine Mehrzahl solcher jeweiliger Bauteile aufweisen kann, ohne von diesen Beispielen abzuweichen. Gemäß einigen Beispielen kann ein „Netzwerk” irgendein Mechanismus, ein Instrument, eine Modalität und/oder ein Teil davon sein oder sie aufweisen, der es zwei oder mehreren Einheiten erlaubt, erleichtert und/oder gestattet, mindestens teilweise miteinander kommunikativ gekoppelt zu sein. Bei einigen Beispielen kann eine erste Einheit „kommunikativ” mit einer zweiten Einheit „gekoppelt sein”, falls die erste Einheit fähig ist, einen oder mehrere Befehle und/oder Daten zu der zweiten Einheit zu übertragen und/oder von ihr zu empfangen. Daten und Informationen können auch gegenseitig austauschbar verwendet werden, und können einen oder mehrere Befehle (zum Beispiel eine oder mehrere Programmanweisungen) sein oder aufweisen, und/oder ein oder mehrere solche Befehle können Daten und/oder Informationen aufweisen. Für diese Beispiele kann eine „Anweisung” auch Daten und/oder einen oder mehrere Befehle enthalten.
-
Der Client 10 kann einen Netzwerk-Schnittstellencontroller (RNIC), der hier das Netzwerk-(NW)-Gerät 106 genannt wird, der Remote Direct Memory Access-(RDMA)-fähig ist und/oder einen oder mehrere Pufferspeicher 13 (und in dem in 1 gezeigten Beispiel eine Mehrzahl dieser) aufweist.
-
Wie in 1 gezeigt, kann der Server 20 einen oder mehrere integrierte Schaltungs-(IC)-Chips 180, Arbeitsspeicher 21 und/oder Speicher 150 aufweisen. Ein oder mehrere Chips 180 können Schaltungen 118 aufweisen, die ein NW-E/A-Gerät, wie zum Beispiel ein NW-E/A-Gerät 108 und/oder einen NVMe-Controller 112 aufweisen. Obwohl dies in 1 nicht gezeigt ist, können bei einigen Beispielen NW-E/A-Geräte 108 ein getrennt anbringbares Gerät sein, das mit dem Server 20 gekoppelt wird und seine eigenen Schaltungen, wie weiter unter beschrieben, enthält.
-
Wie auch in 1 gezeigt, können der eine oder die mehreren Chips 180 innerhalb eines oder mehrerer Multi-Core-Hostprozessoren (HP) und/oder Zentraleinheiten (CPU) 12 eingebaut sein. Obwohl es in den FIG. nicht gezeigt ist, kann der Server auch einen oder mehrere Chipsätze oder Geräte aufweisen, die, ohne darauf beschränkt zu sein, Speicher- oder Eingangs-/Ausgangs-Controllerschaltungen enthalten). Das NW-E/A-Gerät 108, der NVMe-Controller 112 und/oder der HP/die CPU 12 können fähig sein, miteinander auszutauschen. Zusätzlich können das NW-E/A-Gerät 108, der in NVMe-Controller 112 und/oder der HP/die CDU 12 fähig sein, auf ein oder mehrere Bauteile des Servers 20 (wie zum Beispiel Arbeitsspeicher 21 und/oder Speicher 150) über einen oder mehrere solche Chipsätze zuzugreifen und/oder mit ihnen auszutauschen. Bei einigen Beispielen können der Client und/oder das NW-E/A-Gerät 106 mindestens zum Teil von dem Server 20 und/oder dem NW-E/A-Gerät 108 entfernt sein (zum Beispiel geographisch entfernt).
-
Gemäß einigen Beispielen, können die „Schaltungen” zum Beispiel einzeln oder in irgendeiner Kombination analoge Schaltungen, digitale Schaltungen, fest verdrahtete Schaltungen, programmierbare Schaltungen, Coprozessor-Schaltungen, Zustandsmaschinenschaltungen und/oder Arbeitsspeicher aufweisen, die Programmanweisungen, die von den programmierbaren Schaltungen ausgeführt werden können, aufweisen können. Bei einigen Beispielen können auch ein Prozessor, HP, eine CPU, ein Prozessorkern (PC), Kern und Controller jeweils Schaltungen aufweisen, die fähig sind, mindestens zum Teil eine oder mehrere arithmetische und/oder logische Operationen auszuführen, und/oder mindestens zum Teil eine oder mehrere Anweisungen auszuführen. Ein integrierter Schaltungschip kann eine oder mehrere mikroelektronische Vorrichtungen, Substrate und/oder Chips aufweisen. Obwohl das in 1 nicht gezeigt ist, kann der Server 20 ein grafisches Benutzeroberflächensystem aufweisen, das zum Beispiel eine Tastatur, ein Zeigegerät und ein Displaysystem aufweisen kann, die es einem menschlichen Benutzer erlauben, Befehle in den Server 20 und/oder das System 100 einzugeben und deren Betrieb zu überwachen. Der Speicher kann auch einen oder mehrere der folgenden Speichertypen aufweisen: Halbleiter-Firmware-Speicher, programmierbarer Speicher, nicht flüchtiger Speicher Nurlesespeicher, elektrisch programmierbarer Speicher, Direktzugriffsspeicher, Flashspeicher, Magnetplattenspeicher, optischer Plattenspeicher und/oder andere oder später entwickelte computerlesbare und/oder beschreibbare Speicher.
-
Bei einigen Beispielen, kann der Speicher 150 den Massenspeicher 156 aufweisen. Für diese Beispiele kann der Speicher 150 ein oder mehrere Geräte aufweisen, in die jeweils Daten gespeichert und/oder aus welchen Daten geholt werden können. Bei diesen Beispielen kann der Massenspeicher auch einen Speicher aufweisen, der fähig ist, Daten nicht flüchtig zu speichern. Der Massenspeicher 156 kann zum Beispiel uneingeschränkt einen oder mehrere nicht flüchtige, elektromechanische, magnetische, optische und/oder Halbleiter-Speichergeräte aufweisen. Diese Geräte können Festplattenlaufwerke (HDDs) oder Festkörper-Laufwerke (SSDs) aufweisen. Die SSDs können nicht flüchtige Speichertypen aufweisen, wie zum Beispiel dreidimensionalen Kreuzpunktspeicher, Flashspeicher, ferroelektrischen Speicher, Silikonoxid-Nitridoxid-Silikon-(SONOS)-Speicher, Polymerspeicher, Nanodraht, ferroelektrischen Transistor-Direktzugriffspeicher (FeTRAM oder FeRAM), Nanodraht oder elektrisch löschbaren programmierbaren Nurlesespeicher (EEPROM).
-
Gemäß einigen Beispielen, können der NVMe-Controller 112, der Speicher 150 oder der Massenspeicher 156 fähig sein, in Übereinstimmung mit der PCIe-Spezifikation und/oder der NVMe-Spezifikation zu arbeiten.
-
Eine oder mehrere maschinenlesbare Programmanweisungen können mindestens zum Teil in dem Arbeitsspeicher 21 gespeichert sein. Beim Betrieb des Servers 20 kann auf diese maschinenlesbaren Anweisungen zugegriffen werden und sie können von einem oder mehreren Hostprozessoren 12, NW-E/A-Geräten 108 und/oder NVMe-Controllern 112 ausgeführt werden. Wenn sie von einem oder mehreren Hostprozessoren 12 ausgeführt werden, können die einen oder die mehreren maschinenlesbaren Anweisungen darin resultieren, dass eine oder mehrere Betriebssystemumgebungen (OSE) 32 mindestens zum Teil von dem einen oder den mehreren Hostprozessoren 12 ausgeführt werden und mindestens zum Teil in dem Arbeitsspeicher 21 resident werden. Wenn diese maschinenlesbaren Anweisungen von dem NW-E/A-Gerät 108 und/oder dem NVMe-Controller 112 ausgeführt werden, können die eine oder die mehreren Anweisungen darin resultieren, dass eine oder mehrere Befehlsschnittstellen 110 des NVMe-Controllers 112, eine oder mehrere Türklingeln 192, ein oder mehrere Zeiger 202, ein oder mehrere Agenten 194, ein oder mehrere Abschlusswarteschlangen 124 und/oder ein oder mehrere Unterbreitungswarteschlangen 126 eingerichtet und/oder von dem NW-E/A-Gerät 108 und/oder von dem NVMe-Controller 112 ausgeführt und/oder in dem Arbeitsspeicher 21 resident werden.
-
Gemäß einigen Beispielen können eine oder mehrere OSE 32 ein oder mehrere Betriebssysteme (OS) 31 und/oder ein oder mehrere NW-E/A-Geräte und/oder NVMe-Controllertreiber 33 aufweisen. Dieser eine oder die mehreren Treiber 33 können mindestens zum Teil von dem einen oder mehreren OS 31 voneinander getrennt sein. Alternativ oder zusätzlich, ohne von diesen Beispielen abzuweichen, können ein oder mehrere jeweilige Teile des einen oder der mehreren OS 32 und/oder Treiber 33 mindestens zum Teil nicht voneinander getrennt und/oder können mindestens zum Teil ineinander enthalten sein. Ebenso und ohne von diesen Beispielen abzuweichen, können die Schaltungen 118, das NW-E/A-Gerät 108 und/oder der NVMe-Controller 112 voneinander getrennt oder alternativ in dem einen oder den mehreren nicht gezeigten Chipsätzen und/oder Hostprozessoren 12 enthalten sein. Ebenfalls ohne Abweichen von diesen Beispielen, können ein oder mehrere Teile des Arbeitsspeichers 21 in dem NW-E/A-Gerät 108, NVMe-Controller 112, den Schaltungen 118, dem HP 12 und/oder der IC 180 enthalten sein oder an ihnen verwaltet werden.
-
Bei einigen Beispielen kann ein Teil oder ein Subsatz irgendeiner Einheit die gesamte oder weniger als die gesamte Einheit enthalten. Für diese Beispiele, können ein Vorgang, Thread, Daemon, Programm, Treiber, Betriebssystem, eine Anwendung, ein Kernel und/oder virtueller Maschinenmonitor mindestens zum Teil Ausführung einer oder mehrerer Operationen und/oder Programmanweisungen aufweisen (1) und/oder mindestens zum Teil in ihnen resultieren (2).
-
Gemäß einigen Beispielen kann eine Befehlsschnittstelle mindestens zum Teil den Austausch, die Übertragung und/oder den Empfang von Daten und/oder eines oder mehrerer Befehle erleichtern, erlauben und/oder umsetzen. Für diese Beispiele können eine Warteschlange, in Pufferspeicher und/oder eine Türklingel eine oder mehrere Stellen (zum Beispiel mindestens zum Teil durch eine oder mehrere Adressen spezifiziert und/oder angezeigt) in dem Arbeitsspeicher sein, in welchem Daten und/oder ein oder mehrere Befehle mindestens vorübergehend gespeichert werden können. Ein Warteschlangenelement kann auch Daten und/oder einen oder mehrere Befehle enthalten, der/die zu speichern sind und/oder in einer oder mehreren Warteschlangen gespeichert werden, wie zum Beispiel ein oder mehrere Deskriptoren und/oder ein oder mehrere Befehle. Zusätzlich kann für diese Beispiele ein Zeiger mindestens zum Teil eine oder mehrere Stellen und/oder ein oder mehrere Elemente in dem Arbeitsspeicher anzeigen, adressieren und/oder spezifizieren.
-
Bei einigen Beispielen können das NW-E/A-Gerät 106 und das NW-E/A-Gerät 108 Daten und/oder Befehle über das Netzwerk 50 in Übereinstimmung mit einem oder mehreren Protokollen austauschen, die mit einem RMDA-Protokoll übereinstimmen können und/oder kompatibel sind, wie zum Beispiel das Internet Wide Area RDMA-Protokoll (iWARP), Infiniband-(IB)-Protokoll, Ethernet-Protokoll, Transmission Control Protocol/Internet Protocol-(TCP/IP)-Protokoll und/oder RDMA over Converged Ethernet-(RoCE)-Protokoll. Das iWARP-Protokoll kann zum Beispiel Recio et al., „An RDMA Protocol Specification”, Internet Draft Specification, Internet Engineering Task Force (IETF), 21. Okt. 2002, entsprechen oder damit kompatibel sein. Das Ethernet-Protokoll kann ebenfalls dem Standard Institute of Electrical and Electronics Engineers, Inc. (IEEE), Std. 802.3-2008, 26. Dezember 2008 entsprechen oder mit ihm kompatibel sein. Zusätzlich kann zum Beispiel das TCP/IP-Protokoll den Protokollen entsprechen, die Internet Engineering Task Force (IETF) Request For Comments (RFC) 791 and 793, veröffentlicht im September 1981, und/oder mit ihnen kompatibel sein. Das IB-Protokoll kann InfinibandTM Architecture Specification, Bd. 2, Rel. 1.3, veröffentlicht im November 2012, entsprechen und/oder damit kompatibel sein. Zusätzlich kann zum Beispiel das RoCE-Protokoll mit Supplement to Infiniband Architecture Specification, Bd. 1, Rel. 1.2.1., Anhang A16: „RDMA over Converged Ethernet (RoCE)”, veröffentlicht im April 2010, übereinstimmen und oder damit kompatibel sein. Viele unterschiedliche, zusätzliche und/oder andere Protokolle können für einen derartigen Daten- und/oder Befehlsaustausch verwendet werden, ohne von diesen Beispielen abzuweichen (zum Beispiel früher und/oder später entwickelte Versionen der oben genannten Protokolle, verwandte und/oder andere Protokolle). Gemäß einigen Beispielen, kann die Schaltung 118 mindestens zum Teil den Zugriff des NW-E/A-Geräts 106 über das NW-E/A-Gerät 108 auf eine oder mehrere Befehlsschnittstellen 110 erlauben und/oder erleichtern. Die Schaltungen 118 können zum Beispiel dem NW-E/A-Gerät 106 mindestens zum Teil erlauben und/oder erleichtern, auf eine oder mehrere Befehlsschnittstellen 110 auf eine Art zuzugreifen, die von der OSE 32 in dem Server unabhängig ist. Dieses Zugreifen kann zum Beispiel das Schreiben mindestens eines Warteschlangenelements (zum Beispiel ein oder mehrere Warteschlangenelemente (QE) 116) zu einer oder mehreren Unterbreitungswarteschlangen 114 in einer oder mehreren Befehlsschnittstellen 110 aufweisen. Das kann dem Befehl-NVMe-Controller 112 befehlen, mindestens zum Teil eine oder mehrere Operationen, die den Speicher 150 und/oder den Massenspeicher 156, der zu dem NVMe-Controller 112 gehört, zu involvieren. Der NVMe-Controller 112 kann diese einen oder mehreren Operationen mindestens zum Teil als Reaktion auf das eine oder die mehreren Warteschlangenelemente 116 ausführen (zum Beispiel nach und als Reaktion mindestens zum Teil darauf, dass das eine oder die mehreren Warteschlangenelemente 116 in eine oder mehrere Unterbreitungswarteschlangen 114 geschrieben werden). Diese eine oder mehreren Operationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, können eine oder mehrere Schreiboperationen und/oder eine oder mehrere Leseoperationen aufweisen, die mindestens zum Teil den Speicher 150 und/oder den Massenspeicher 156 involvieren. Für diese Beispiele kann der Client 10 zum Beispiel in der Lage sein, auf den Speicher 150 und/oder den Massenspeicher 156 über eine oder mehrere Leseoperationen und/oder eine oder mehrere Schreiboperationen, die von dem NVMe-Controller 112 ausgeführt werden, zuzugreifen.
-
Beispielhaft können der Client 10 und/oder das NW-E/A-Gerät 106 beim Betrieb des Systems 100 den Client 10 und/oder das NW-E/A-Gerät 106 zu dem Server 20 und/oder der Logik und/oder Features an dem NW-E/A-Gerät authentifizieren. Das kann darin resultieren, dass dem Client und/oder dem NW-E/A-Gerät 106 die Erlaubnis gewährt wird, mindestens zum Teil auf Geräte zuzugreifen, die von Elementen des Servers 20 (zum Beispiel über das NW-E/A-Gerät 108) verwaltet oder gesteuert werden. Gleichzeitig, danach oder davor, können mindestens zum Teil das NW-E/A-Gerät 108, der NVMe-Controller 112, ein oder mehrere Agenten 194 und/oder die OSE 32 in dem Arbeitsspeicher 21 eine oder mehrere Schnittstellen 110 und/oder eine oder mehrere Indikatoren 181 erzeugen, einrichten und/oder verwalten, die mindestens zum Teil anzeigen können, wo (zum Beispiel eine oder mehrere Stellen) in dem Arbeitsspeicher 21 eine oder mehrere Schnittstellen 110 und/oder Bestandteile dieser liegen können. Ein oder mehrere Indikatoren 181 können zum Beispiel mindestens zum Teil eine oder mehrere Stellen in dem Arbeitsspeicher 21 anzeigen, wo eine oder mehrere Unterbreitungswarteschlangen 114, eine oder mehrere Abschlusswarteschlangen 120, eine oder mehrere Türklingeln 170 und/oder ein oder mehrere Pufferspeicher 130A...130N liegen können. Das NW-E/A-Gerät 108 kann über das Netzwerk 50 einen oder mehrere Indikatoren 181 zu dem NW-E/A-Gerät 106 bereitstellen. Danach kann das NW-E/A-Gerät 106 einen oder mehrere des einen oder der mehreren Indikatoren 181 verwenden, um auf eine oder mehrere Befehlsschnittstellen 110 und/oder einen oder mehrere Bestandteile der einen oder der mehreren Befehlsschnittstellen 110 zuzugreifen. Ein oder mehrere Indikatoren 181 können mindestens zum Teil ein oder mehrere Handles (die zum Beispiel Transaktionskontexten zugewiesen sind) für einen oder mehrere Bereiche in dem Arbeitsspeicher 21 sein oder diese aufweisen, wie zum Beispiel bei dieser Ausführungsform einen oder mehrere Servicetags (STags) oder Transaktionstags (TTags), die einem RDMA-Protokoll (wie zum Beispiel iWARP, IB, RoCE) entsprechen und/oder damit kompatibel sein können. Bei einigen Beispielen, können der eine oder die mehreren Bereiche in dem Arbeitsspeicher 21 in einem oder mehreren Prellpuffern enthalten sein, die verwaltet werden, um den entfernten Zugriff auf den Speicher 150 oder den Massenspeicher 156 durch den Client 10 zu erleichtern.
-
Nachdem Empfangen eines oder mehrerer Indikatoren 181, können der Client 10 und/oder das NW-E/A-Gerät 106 einen oder mehrere Befehle 105 zu dem Server 20 über das Netzwerk 50 und über das NW-E/A-Gerät 108 zu dem NVMe-Controller 112 in einer Art ausgeben, die die Beteiligung der OSE 32 umgeht und/oder von ihr unabhängig ist. Der eine oder die mehreren Befehle 105 können dem NVMe-Controller 112 befehlen, eine oder mehrere Operationen, an welchen der Speicher 150 und/oder der Massenspeicher 156 beteiligt sind, auszuführen.
-
Gemäß einigen Beispielen können ein oder mehrere Befehle 105 einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) entsprechen und/oder damit kompatibel sein. Ein oder mehrere Befehle 105 können mindestens zum Teil ein oder mehrere Warteschlangenelemente 116 aufweisen und/oder spezifizieren, die mindestens zum Teil die eine oder die mehreren Operationen verkörpern und/oder anzeigen, an welchen das Speicher 150 und/oder der Massenspeicher 156, die aufgefordert werden, beteiligt sind. Obwohl das in 1 nicht gezeigt ist, können ein oder mehrere Befehle 105 mindestens zum Teil einen oder mehrere der Indikatoren 181 aufweisen, spezifizieren und/oder anzeigen, die eine oder mehrere Stellen in einer oder mehreren der Unterbreitungswarteschlangen 114, als ein oder mehrere beabsichtigte Ziele einer oder mehrerer Warteelemente 116 anzeigen können.
-
Bei einigen Beispielen können der eine oder die mehreren Befehle 116 dem NVMe-Controller 112 befehlen, eine oder mehrere Schreiboperationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, auszuführen. Daher können ein oder mehrere Befehle 105 auch mindestens zum Teil Daten 199 aufweisen und/oder spezifizieren, die als ein Resultat des Ausführens eines oder mehrerer der Warteschlangenelemente 116 durch den NVMe-Controller 112 zu dem Speicher 150 und/oder dem Massenspeicher 156 zu schreiben sind. Ein oder mehrere Befehle 105 können mindestens zum Teil einen oder mehrere der Indikatoren 181 aufweisen, spezifizieren und/oder anzeigen, die dem Client 10 eine oder mehrere Stellen eines oder mehrerer Pufferspeicher (zum Beispiel der/die Pufferspeicher 13), zu welchen Daten 199 (mindestens vorübergehend) zu schreiben sind, anzeigen.
-
Als Reaktion mindestens zum Teil auf den Empfang eines oder mehrerer Befehle 105, kann das NW-E/A-Gerät 108 (zum Beispiel in Übereinstimmung mit dem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) und/oder auf eine Art, die die OSE 32 umgeht und/oder von ihr unabhängig ist) in der Art, die von dem einen oder den mehreren Befehlen 105 befohlen werden, ein oder mehrere Warteschlangenelemente 116 und Daten 199 jeweils zu einer oder mehreren Unterbreitungswarteschlangen 114 und einem oder mehreren Pufferspeichern 130A direkt schreiben. Durch Ausgeben eines oder mehrere Befehle 105 zu dem NW-E/A-Gerät 108, kann das NW-E/A-Gerät 106 daher in der Tat ein oder mehrere Warteschlangenelemente 116 und Daten 119 jeweils zu einer oder mehreren Unterbreitungswarteschlangen 114 und einem oder mehreren Pufferspeichern 130A schreiben.
-
Ein oder mehrere Befehle 105 können auch einen oder mehrere Werte 201 und einen oder mehrere Indikatoren 181, die eine oder mehrere Stellen der einen oder mehreren Türklingeln 170, zu welchen ein oder mehrere Werte 201 geschrieben werden können, aufweisen und/oder spezifizieren. Als Reaktion mindestens zum Teil auf diesen einen oder die mehreren Werte 201 und diesen einen oder die mehreren Indikatoren 181 in einem oder mehreren Befehlen 105, kann das NW-E/A-Gerät 108 (zum Beispiel in Übereinstimmung mit dem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) und/oder auf eine Art, die die OSE 32 umgeht und/oder von ihr unabhängig ist, auf die Art, die von dem einen oder den mehreren Befehlen 105 befohlen wird, einen oder mehrere Werte 201 in die Türklingel 170 direkt schreiben. Das Schreiben eines oder mehrerer Werte 201 in die Türklingel 170 kann die Türklingel 170 auslösen. Durch Ausgeben eines oder mehrerer Befehle 105 zu dem NW-E/A-Gerät 108, kann das NW-E/A-Gerät 106 daher in der Tat die Türklingel 170 betätigen.
-
Gemäß einigen Beispielen, kann das Betätigen einer Türklingel, die mit einer Einheit verbunden ist, mindestens zum Teil das Schreiben eines oder mehrerer Werte zu einer oder mehreren Speicherstellen (die zum Beispiel mit der Türklingel verbunden sind, diese aufweisen und/oder verkörpern) aufweisen und/oder involvieren, was darin resultieren kann, dass die Einheit mindestens zum Teil eine oder mehrere Operationen und/oder Aktionen ausführt und/oder auslöst. Bei einigen Beispielen können die Türklingeln 170 und/oder 192 für die CPU 12 und/oder den Server 20 als eine oder mehrere jeweilige Arbeitsspeicherstellen (nicht gezeigt) jeweils in dem jeweiligen Arbeitsspeicher (nicht gezeigt) in dem NVMe-Controller 112 und/oder dem NW-E/A-Gerät 108 erscheinen.
-
Als Reaktion mindestens zum Teil auf das Betätigen der Türklingel 170, kann der NVMe-Controller 112 zu einem vollständig operationellen Zustand zurückkehren (zum Beispiel, falls der NVMe-Controller 112 zuvor im Vergleich zu seinem vollständigen operationellen Zustand auf einen reduzierten Leistungszustand übergegangen war) und kann ein oder mehrere Warteschlangenelemente 116 lesen, die in eine oder mehrere Unterbreitungswarteschlangen 114 geschrieben wurden. Der NVMe-Controller 112 kann dann mindestens zum Teil den einen oder die mehreren Befehle ausführen, die von dem einen oder den mehreren Warteschlangenelementen 116 spezifiziert und/oder verkörpert werden. Das kann darin resultieren, dass der NVMe-Controller 112 mindestens zum Teil die eine oder die mehreren Operationen (zum Beispiel einen oder mehrere Schreibvorgänge zu dem Speicher 150 und/oder Massenspeicher 156 von Daten 199, die in einem oder mehreren Pufferspeichern 130A gespeichert sind), die Speicher 150 und/oder Massenspeicher 156 involvieren, ausführen.
-
Nach dem Abschluss mindestens zum Teil dieser einen oder mehreren Operationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, kann der NVMe-Controller 112 mindestens zum Teil ein oder mehrere Abschlusswarteschlangenelemente (CQE) 129 erzeugen und zu einer oder mehreren Abschlusswarteschlangen 124 schreiben. Nach dem Abschluss mindestens zum Teil dieser einen oder mehreren Operationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, kann der NVMe-Controller 112 auch mindestens zum Teil einen oder mehrere Werte zu der einen oder den mehreren Türklingeln 192, die mit dem NW-E/A-Gerät 108 verbunden sind, schreiben. Das kann eine oder mehrere Türklingeln 192 betätigen. Als Reaktion mindestens zum Teil auf das Betätigen einer oder mehrerer Türklingeln 192, kann das NW-E/A-Gerät 108 (zum Beispiel über eine oder mehrere RDMA-Schreiboperationen) ein oder mehrere Abschlusswarteschlangenelemente 190 zu einer oder mehreren Abschlusswarteschlangen 120 schreiben und dann das eine oder die mehreren Abschlusswarteschlangenelemente 190 zu einem oder mehreren Pufferspeichern 13 in dem Client 10 (zum Beispiel über eine oder mehrere Antworten 197) weiterleiten.
-
Nachdem eine oder mehrere (zum Beispiel einige) solche Schreib- und/oder Leseoperationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, ausgeführt wurden, können mindestens zum Teil ein oder mehrere Agenten 194 bestimmte Verwaltungsfunktionen ausführen. Ein oder mehrere Agenten 194 können zum Beispiel mindestens zum Teil einen oder mehrere Unterbreitungswarteschlangeneinträge/-elemente (3) 196A...196N in einer oder mehreren Unterbreitungswarteschlangen 126, die zu dem NW-E/A-Gerät 108 gehören, und/oder einen oder mehrere Unterbrechungswarteschlangeneinträge/-elemente QE A...QE N in der Tabelle 250 erstellen (siehe 2). Wie unten besprochen, können diese Elemente 196A...196N und/oder QE A...QE N, wenn sie mindestens zum Teil von dem NW-E/A-Gerät 108 ausgeführt werden, das Kopieren oder Weiterleiten mindestens zum Teil eines oder mehrerer anderer Warteschlangeneinträge (zum Beispiel ein oder mehrere NVMe-Controller-112-Abschlusseinträge 190) zu dem Client 10 und/oder dem NW-E/A-Gerät 106 und/oder von dem NVMe-Controller 112 gelesene Daten erlauben und/oder erleichtern.
-
Diese Verwaltungsfunktionen können auch das Aktualisieren (zum Beispiel entsprechend fortschreitend) mindestens zum Teil durch einen oder mehrere Agenten 194 des einen oder der mehreren Zeiger (zum Beispiel Ringzeiger PNTR 202) aufweisen, die mit dem einen oder den mehreren Warteschlangenpaaren verbunden sind (zum Beispiel Unterbreitungs-/Abschlusswarteschlangenpaar 114, 120 und/oder Unterbreitungs-/Abschlusswarteschlangenpaar 126, 124), die mit dem NW-E/A-Gerät 108 und dem NVMe-Controller 112 verbunden sind. Das kann es erlauben, neue Einträge zu den Warteschlangenpaaren an Stellen zu speichern, die nicht in fälschlichem Überschreiben anderer Einträge in den Warteschlangenpaaren resultieren. Zusätzlich können als Teil dieser Verwaltungsfunktionen die einen oder mehreren Agenten 194 einen oder mehrere Pufferspeicher 130A...130N, die verfügbar sind, um wieder verwendet zu werden, anzeigen.
-
Als ein anderes Beispiel können ein oder mehrere Warteschlangenelemente 116 dem NMVe-Controller 112 befehlen, eine oder mehrere Leseoperationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, auszuführen. Daher können ein oder mehrere Befehle 105 auch mindestens zum Teil eine oder mehrere Stellen (zum Beispiel Namensräume) in dem Speicher 150 und/oder Massenspeicher 156 anzeigen und/oder spezifizieren, von dem der NVMe-Controller 112 Daten 199 als ein Resultat des Ausführens eines oder mehrerer Warteschlangenelemente 116 lesen soll.
-
Als Reaktion mindestens zum Teil auf den Empfang eines oder mehrerer Befehle 105, kann das NW-E/A-Gerät 108 direkt (zum Beispiel in Übereinstimmung mit einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) und/oder auf eine Art, die die OSE 32 umgeht und/oder von ihr unabhängig ist) auf die Art, die von einem oder von mehreren Befehlen 105 angeordnet werden, ein oder mehrere Warteschlangenelemente 116 zu einer oder zu mehreren Unterbreitungswarteschlangen 114 schreiben. Durch Ausgeben eines oder mehrere Befehle 105 zu dem NW-E/A-Gerät 108, kann das NW-E/A-Gerät 106 daher in der Tat ein oder mehrere Warteschlangenelemente 116 zu einer oder mehreren Unterbreitungswarteschlangen 114 und einem oder mehreren Pufferspeichern 130A schreiben.
-
Bei diesem Beispiel können ein oder mehrere Befehle 105 auch einen oder mehrere Werte 201 und einen oder mehrere der Indikatoren 181, die eine oder mehrere Stellen der einen oder mehreren Türklingeln 170, zu welchen ein oder mehrere Werte 201 geschrieben werden sollen, aufweisen und/oder spezifizieren, aufweisen. Als Reaktion mindestens zum Teil auf diesen einen oder diese mehreren Werte 201 und diesen einen oder diese mehreren Indikatoren 181 in einem oder mehreren Befehlen 105, kann das NW-E/A-Gerät 108 direkt (zum Beispiel in Übereinstimmung mit einem RDMA-Protokoll (e. g., iWARP, IB, RoCE) und/oder auf eine Art, die die OSE 32 umgeht und/oder von ihr unabhängig ist) auf die Art, die von einem oder mehreren Befehlen 105 angeordnet wird, einen oder mehrere Werte 201 in die Türklingel 170 schreiben. Das Schreiben eines oder mehrerer Werte 201 in die Türklingel 170, kann die Türklingel 170 betätigen. Durch Ausgeben eines oder mehrerer Befehle 105 zu dem NW-E/A-Gerät 108, kann das NW-E/A-Gerät 106 daher in der Tat die Türklingel 170 betätigen.
-
Als Reaktion mindestens zum Teil auf das Betätigen der Türklingel 170, kann der NVMe-Controller 112 zu einem vollständig operationellen Zustand zurückkehren (zum Beispiel falls der NVMe-Controller 112 zuvor im Vergleich zu seinem vollständigen operationellen Zustand auf einen reduzierten Leistungszustand übergegangen war) und kann ein oder mehrere Warteschlangenelemente 116 lesen, die in eine oder mehrere Unterbreitungswarteschlangen 114 geschrieben wurden. Der NVMe-Controller 112 kann dann mindestens zum Teil den einen oder die mehreren Befehle ausführen, die von dem einen oder den mehreren Warteschlangenelementen 116 spezifiziert und/oder verkörpert werden. Das kann darin resultieren, dass der NVMe-Controller 112 mindestens zum Teil die eine oder die mehreren Operationen (zum Beispiel eine oder mehrere Leseoperationen des Speichers 150 und/oder des Massenspeichers 156 zum Erzielen von Daten 199), die den Speicher 150 und/oder den Massenspeicher 156 involvieren, ausführen und Daten 199 in einen oder mehrere Pufferspeicher (zum Beispiel einen oder mehrere Pufferspeicher 130A) speichern.
-
Nach dem Abschluss mindestens zum Teil dieser einen oder mehreren Operationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, kann der NVMe-Controller 112 mindestens zum Teil ein oder mehrere Abschlusswarteschlangenelemente 129 erzeugen und zu einer oder mehreren Abschlusswarteschlangen 124 schreiben. Nach dem Abschluss mindestens zum Teil dieser einen oder mehreren Operationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, kann der NVMe-Controller 112 auch mindestens zum Teil einen oder mehrere Werte zu der einen oder den mehreren Türklingeln 192, die mit dem NW-E/A-Gerät 108 verbunden sind, schreiben. Das kann eine oder mehrere Türklingeln 192 betätigen. Als Reaktion mindestens zum Teil auf das Betätigen der einen oder mehreren Türklingeln 192, kann das NW-E/A-Gerät 108 Warteschlangenelemente 129 von der einen oder den mehreren Abschlusswarteschlangen 124 erzielen und ein oder mehrere Abschlusswarteschlangenelemente 190 zu einer oder mehreren Abschlusswarteschlangen 120 schreiben, um den Transfer der Daten 199 (zum Beispiel über eine oder mehrere RDMA-Schreiboperationen mit dem NW-E/A-Gerät 106) zu einem oder mehreren Pufferspeichern 13 in dem Client 10 (zum Beispiel über eine oder mehrere Antworten 197) erleichtern.
-
Gemäß einigen Beispielen kann die Befehlsschnittstelle 110 darin asynchron sein, dass Abschlusswarteschlangenelemente zum Beispiel nicht in einer Reihenfolge in einer oder mehreren Abschlusswarteschlangen 120 gespeichert werden, die (1) der Reihenfolge entspricht, in der die Befehlswarteschlangenelemente in der einen oder den mehreren Unterbreitungswarteschlangen 114 gespeichert sind, (2) die Reihenfolge, in welcher solche Befehlswarteschlangenelemente von dem NVMe-Controller 112 ausgeführt und/oder vervollständigt werden und/oder (3) die Reihenfolge, in der Abschlusswarteschlangenelemente 190 in einer oder mehreren Abschlusswarteschlangen 120 gespeichert werden und/oder zu dem NW-E/A-Gerät 106 und/oder dem Client 10 bereitgestellt werden. Beim Betrieb können das NW-E/A-Gerät 106 und/oder der Client 10 in dem Fall von Schreibbefehlen, die von dem Client 10 und/oder dem NW-E/A-Gerät 106 ausgegeben werden, Abschlusswarteschlangenelemente 190, die von dem NW-E/A-Gerät 108 empfangen werden, entsprechend neu ordnen. Um in dem Fall von Lesebefehlen bei dieser Ausführungsform zu erlauben, dass jeweilige Daten, die aus dem Speicher 150 und/oder dem Massenspeicher 156 gelesen wurden, entsprechend mit entsprechenden Abschlusswarteschlangenelementen zur Übertragung zu dem Client 10 und/oder dem NW-E/A-Gerät 106 verbunden werden, kann jedes Abschlusswarteschlangenelement (zum Beispiel das Abschlusswarteschlangenelement 190), das aus den Abschlussangaben, die von dem NW-E/A-Gerät 108 in Abschlusswarteschlangen 120 platziert werden, die in 2 veranschaulichten Elemente aufweisen.
-
Wie in 2 gezeigt, kann das Abschlusswarteschlangenelement (zum Beispiel das Abschlusswarteschlangenelement 190) einen oder mehrere Befehlsparameter 304, einen oder mehrere Befehlswarteschlangenidentifikatoren 306, einen oder mehrere Befehlswarteschlangen-Kopfpositionsindikatoren 308, Zustandsinformationen 310, ein oder mehrere Warteschlangenphasenbits (P) 312 und/oder einen oder mehrere Befehlsidentifikatoren 302 aufweisen. Ein oder mehrere Befehlsparameter 304 können ein oder mehrere befehlsspezifische Parameter des einen oder der mehreren Warteschlangenelemente 116 und/oder Befehle 105, die dem einen oder den mehreren Abschlusswarteschlangenelementen 109 entsprechen und/oder mit diesem verbunden sind, sein und/oder anzeigen. Ein oder mehrere Befehlswarteschlangenidentifikatoren 306 können die eine oder die mehreren Unterbreitungswarteschlangen 114, zu welchen das eine oder die mehreren Warteschlangenelemente 116 geschrieben wurden, anzeigen und/oder spezifizieren. Ein oder mehrere Befehlswarteschlangen-Kopfpositionsindikatoren 308 können die aktuelle Position (zum Beispiel in der einen oder den mehreren Unterbreitungswarteschlangen 114, die von einem oder mehreren Befehlswarteschlangenidentifikatoren 306 identifiziert werden), an welchen sich das eine oder die mehreren Warteschlangenelemente 116 befinden können, anzeigen. Zustandsinformationen 310 können anzeigen, ob der eine oder die mehreren Befehle 105 und/oder ein oder mehrere Warteschlangenelemente 116 von dem NVMe-Controller 112 erfolgreich ausgeführt wurden. Ein oder mehrere Phasenbits 312 können anzeigen, ob das eine oder die mehreren Abschlusswarteschlangenelemente 190 den zuletzt hinzugefügten gültigen Eintrag (zum Beispiel zum Servie) in einer oder mehreren Abschlusswarteschlangen 120 bilden. Ein oder mehrere Befehlsidentifikatoren 302 können mindestens zum Teil einen oder mehrere entsprechende Befehlsidentifikatoren in dem einen oder den mehreren entsprechenden Warteschlangenelementen 116 anzeigen und/oder mit diesem identisch sein. Befehlsidentifikatoren 302 können es einem oder mehreren Abschlusswarteschlangenelementen 190 erlauben, korrekt mit einem oder mehreren entsprechenden Warteschlangenelementen 116 und/oder mit den jeweiligen Daten 199, die aus dem Speicher 150 und/oder Massenspeicher 156 als ein Resultat der Ausführung dieses einen oder dieser mehreren anderen entsprechenden Warteschlangenelemente 116 gelesen wurden, verbunden zu werden.
-
Bei einigen Beispielen können ein oder mehrere Befehlsidentifikatoren 302 ausgewählt werden, um nicht mit irgendwelchen anderen Befehlsidentifikatoren zu kollidieren und/oder identisch zu sein, die aktuell von irgendwelchen Abschlusswarteschlangenelementen verwendet werden, die von dem NW-E/A-Gerät 108 noch nicht zu dem Client 10 und/oder dem NW-E/A-Gerät 106 bereitgestellt wurden. Die Befehlsidentifikatoren, die in dem System 100 verwendet werden können, können im Voraus berechnet und/oder im Voraus erzeugt werden und können als jeweilige Indices INDEX A...INDEX N für jeweilige Einträge ENTRY A...ENTRY N in eine Tabelle 250 verwendet werden, die mindestens zum Teil in dem Arbeitsspeicher gespeichert werden kann Jeder dieser Einträge ENTRY A...ENTRY N in die Tabelle 250 kann eine oder mehrere jeweilige im Voraus berechnete und/oder im Voraus erzeugte Befehlswarteschlangenelemente QE A...QE N speichern, die mit dem NW-E/A-Gerät 108 verbunden sein können. Jedes jeweilige Element QE A...QE N kann mit einem oder mehreren jeweiligen Pufferspeichern in einem oder mehreren Pufferspeichern 130A...130N verbunden sein.. Jeder dieser Pufferspeicher in einem oder mehreren Pufferspeichern 130A...130N, in welchen der NVMe-Controller 112 Daten speichern kann, die aus dem Speicher 150 und/oder Massenspeicher 156 gelesen wurden, können auch mit einem oder mehreren jeweiligen Unterbreitungsidentifikationen verbunden sein, die in dem System 100 und/oder jeweiligen Einträgen ENTRY A...ENTRY N verwendet werden.
-
Die Befehlswarteschlangenelemente QE A... können in der Tabelle 250 von dem Client 10 und/oder von einem oder mehreren Agenten 194 gespeichert und/oder verwaltet werden. Falls ein oder mehrere Pufferspeicher 130A...130N statisch zugeordnet werden, kann die Tabelle 250 statisch sein und kann hinsichtlich zum Beispiel von Zuordnungsmerkmalen einem oder mehreren Pufferspeichern 13, die in dem Client 10 zugeordnet werden können, entsprechen.
-
Beispielhaft, nachdem der NVMe-Controller 112 Daten 199 aus dem Speicher 150 und/oder dem Massenspeicher 156 gelesen hat, kann der NVMe-Controller 112 die Daten 199 in einem oder mehreren Pufferspeichern (zum Beispiel einem oder mehreren Pufferspeichern 130A), die mit einem oder mehreren Befehlsidentifikatoren 302 verbunden sein können, speichern, und kann ein oder mehrere Warteschlangenelemente 129 in einer oder mehreren Abschlusswarteschlangen 124 speichern. Als Reaktion mindestens zum Teil darauf, dass der NVMe-Controller 112 eine oder mehrere Türklingeln 192 aktiviert, kann das NW-E/A-Gerät 108 basierend mindestens zum Teil auf einem oder mehreren Warteschlangenphasenbits 312 die eine oder die mehreren zuletzt hinzugefügten gültigen Abschlusswarteschlangen in einer oder mehreren Abschlusswarteschlangen 120 oder 124 bestimmen. Das NW-E/A-Gerät 108 kann den einen oder die mehreren Befehlsidentifikatoren 302 in einem oder mehreren Abschlusswarteschlangenelementen 190 verwenden, um in der Tabelle 250 zu indexieren, um den einen oder die mehreren Einträge (zum Beispiel einen oder mehrere Einträge ENTRY A) und ein oder mehrere Warteschlangenelemente (zum Beispiel ein oder mehrere Warteschlangenelemente QE A) in der Tabelle 250 lokalisieren, die mit einem oder mehreren Befehlsidentifikatoren 302 mindestens zum Teil verbunden sind und/oder von ihnen identifiziert werden. Das NW-E/A-Gerät 108 kann mindestens zum Teil einen oder mehrere Befehle ausführen, die mit diesem einen oder diesen mehreren Warteschlangenelementen QE A verbunden sind und/oder von dieser verkörpert werden. Das kann mindestens zum Teil darin resultieren, dass das NW-E/A-Gerät 108 einen oder mehrere Pufferspeicher 130A liest, um Daten 199 zu erzielen, und Daten 199 und eines oder mehrere Abschlusswarteschlangenelemente 190 zu dem NW-E/A-Gerät 106 und/oder Client 10 (zum Beispiel über eine oder mehrere Antworten 197) zu übertragen. Daher können Daten 199 und/oder ein oder mehrere Abschlusswarteschlangenelemente 190 in einen oder mehrere Client-Pufferspeicher 13 kopiert werden.
-
Alternativ kann das NW-E/A-Gerät 108 bei einigen Beispielen mindestens zum Teil eine Zustandsmaschine (nicht gezeigt) aufweisen. Diese Zustandsmaschine kann mindestens zum Teil von einer oder mehreren Unterbreitungswarteschlangen 126, die mit dem NW-E/A-Gerät 108 verbunden sein können oder von ihm verwendet werden können, unabhängig und/oder getrennt sein. Dieses Zustandsmaschine kann eine oder mehrere Befehlswarteschlangenelemente QE A in der Tabelle 250 mindestens zum Teil basierend auf einem oder mehreren Befehlsidentifikatoren 302 lokalisieren und kann das eine oder die mehreren Warteschlangenelemente QE A in ein oder mehrere entsprechende Unterbreitungswarteschlangenelemente 196A in einer oder mehreren Unterbreitungswarteschlangen 126 kopieren. Die Zustandsmaschine kann dann dem NW-E/A-Gerät 108 melden, mindestens zum Teil auf ein oder mehrere Unterbreitungswarteschlangenelemente 196A in einer oder mehreren Unterbreitungswarteschlangen 126 zuzugreifen und sie auszuführen.
-
Ferner kann der NVMe-Controller 112 alternativ, ohne von diesen Beispielen abzuweichen, vor dem Abschließen einer oder mehrerer Leseoperationen, die den Speicher 150 und/oder den Massenspeicher 156 involvieren, mindestens zum Teil ein oder mehrere Warteschlangenelemente QE A in und/oder aus der Tabelle 250 mindestens zum Teil basierend auf einem oder mehreren Befehlsidentifikatoren 302 lokalisieren und/oder auswählen. Der NVMe-Controller 112 kann dann in ein oder mehrere Abschlusswarteschlangenelemente 190 in einer oder mehreren Abschlusswarteschlangen 120 schreiben und kann ein oder mehrere Warteschlangenelemente QE A in ein oder mehrere entsprechende Unterbreitungswarteschlangenelemente 196A in einer oder mehreren Unterbreitungswarteschlangen 126 schreiben. Der NVMe-Controller 112 kann dann eine oder mehrere Türklingeln 192 betätigen. Das kann darin resultieren, dass das NW-E/A-Gerät 108 mindestens zum Teil auf ein oder mehrere Unterbreitungswarteschlangenelemente 196A in einer oder mehreren Unterbreitungswarteschlangen 126 zugreift und sie ausführt. Das kann darin resultieren, dass das NW-E/A-Gerät 108 mindestens zum Teil einen oder mehrere Pufferspeicher 130A liest, um Daten 199 zu erzielen, und Daten 199 und ein oder mehrere Abschlusswarteschlangenelemente 190 zu dem NW-E/A-Gerät 106 und/oder Client 10 (zum Beispiel über eine oder mehrere Antworten 197) zu übertragen. Daher können Daten 199 und/oder ein oder mehrere Abschlusswarteschlangenelemente 190 in einen oder mehrere Client-Pufferspeicher 13 kopiert werden.
-
Bei dieser Alternative können Firmware und/oder ein oder mehrere Agenten 194, die mindestens zum Teil von dem NVMe-Controller 112 ausgeführt werden, pro Warteschlangenpaar-Kontextinformationen verwalten, um ein oder mehrere Warteschlangenpaare, die für RDMA-Transaktionen verwendet werden, anzuzeigen. Diese Kontextinformationen können auch verschiedene Zeiger (zum Beispiel eine oder mehrere Anordnungen von Unterbreitungswarteschlangenelementen 196A...196N aufweisen, um Daten von einem oder mehreren Pufferspeichern 130A...130N zu einem oder mehreren Pufferspeichern 13 und oder zu dem Kopf einer oder mehrerer Unterbreitungswarteschlangen 126), einer oder mehreren Stellen der einen oder mehreren Türklingeln 192 und einem oder mehreren Werten zu bewegen, um die eine oder die mehreren Türklingeln 192 zu betätigen, und/oder lokale Kopien des Kopfs und/oder Zeiger zu der einen oder den mehreren Unterbreitungswarteschlangen 126. Verschiedene dieser Zeiger (zum Beispiel Kopf- und Schwanzzeiger) können dynamisch von der Firmware, die von dem NVMe-Controller 112 ausgeführt wird, aktualisiert werden.
-
Zusätzlich oder alternativ, ohne von diesen Beispielen abzuweichen, können das NW-E/A-Gerät 108 und/oder der NVMe-Controller 112 mindestens zum Teil in dem nicht gezeigten Chipsatz oder in einer nicht gezeigten Leiterplatte oder einem nicht gezeigten Gerät enthalten sein. Ebenfalls können zusätzlich oder alternativ, ohne von dieser Ausführungsform abzuweichen, der Speicher 150 und/oder der Massenspeicher 156 mindestens zum Teil intern in dem Server 20 enthalten sein oder außerhalb des Servers 20 sein.
-
Obwohl die oben stehende Beschreibung unter Bezugnahme auf das NW-E/A-Gerät 108 als ein RNIC und auf den NVMe-Controller 112 als ein Speichercontroller gemäß NVMe erfolgte, können die Konzepte dieser Ausführungsform an Umstände angewandt werden, bei welchen andere Protokolle als RDMA oder NVMe oder zusätzliche Protokolle verwendet werden können, und/oder bei welchen der NVMe-Controller 112 beim Ausführen und/oder Erleichtern von Operationen beteiligt sein kann, die den Speicher 150 nicht involvieren (zum Beispiel andere und/oder zusätzliche Eingangs-/Ausgangs- und oder mit Kommunikation verbundene Operationen). Ohne daher von den oben erwähnten Beispielen abzuweichen, können das NW-E/A-Gerät 108 und/oder Kommunikationen zwischen dem Client 10 und dem Server 20 andere Protokolle und/oder zusätzlich zu RDMA verwenden. Ohne von dieser Ausführungsform abzuweichen, können das NW-E/A-Gerät 108 oder der NVMe-Controller 112 auch an der Ausführung solcher anderer und/oder zusätzlicher Operationen, die andere Protokolle als PCIe oder NVMe verwenden, beteiligt sein und/oder ihre Ausführung erleichtern. Bei diesen zusätzlichen und/oder alternativen Anordnungen können Hardware- und/oder Firmwareschaltungen (nicht gezeigt) in den Schaltungen 118 enthalten sein, die es mindestens zum Teil erlauben, zu Türklingeln 170 und/oder 192 zum Beispiel über einen oder mehrere Interruptmechanismen (zum Beispiel eine oder mehrere durch Meldung gemeldete Interrupts (MSI/MSI-X) zu schreiben. Diese Ausführungsform sollte umfassend als alle solchen Änderungen, Variationen oder Alternativen einschließend gesehen werden.
-
Bei einigen Beispielen können die Schaltungen daher mindestens zum Teil angeordnet sein, um es einem ersten NW-E/A-Gerät in einem Client zu erlauben, über ein zweites NW-E/A-Gerät in einem Server, der von dem Client entfernt ist, und in einer Art, die von der Betriebssystemumgebung in dem Server unabhängig ist, auf mindestens eine Befehlsschnittstelle eines anderen Controllers des Servers (zum Beispiel Speichergerät und/oder ein anderer/zusätzlicher Typ davon) zuzugreifen. Das NW-E/A-Gerät in dem Client und das NW-E/A-Gerät in dem Server können jeweilige entfernte Direktzugriffs-fähige Netzwerkschnittstellencontroller (zum Beispiel Controller, die mindestens zum Teil fähig sind, RDMA zu verwenden und/oder über RDMA zu kommunizieren) sein oder diese aufweisen. Die Befehlsschnittstelle kann mindestens eine Controllerbefehlswarteschlange (zum Beispiel Speichergerät und/oder anderer/zusätzlicher Typ davon) aufweisen. Solches Zugreifen kann das Schreiben mindestens einer Warteschlangenelement zu der mindestens einen Unterbreitungswarteschlangen aufweisen, um den anderen Controller anzuweisen, mindestens eine Operation (die zum Beispiel Speichergerät und/oder ein oder mehrere und/oder zusätzliche Typen von Operationen, wie zum Beispiel andere und/oder zusätzliche Eingangs-/Ausgangsoperationen involviert), die mit dem anderen Controller (zum Beispiel ein NVMe-Controller) verbunden ist, aufweisen. Der andere Controller kann dann die mindestens eine Operation mindestens zum Teil als Reaktion auf das mindestens eine Warteschlangenelement ausführen. Viele Alternativen, Variationen und Änderungen sind möglich.
-
Bei einigen Beispielen kann daher auf die eine oder die mehreren Befehlsschnittstellen 110 des NVMe-Controllers 112 in dem Server von dem NW-E/A-Gerät 106 des Client über eine oder mehrere RDMA-Transaktionen in einer Art zugegriffen werden, die die OSE 32 und/oder CPU 12 des Servers umgeht, von ihr unabhängig ist und/oder sie nicht involviert. Vorteilhafterweise kann es das erlauben, Speicherbefehle, Daten und Abschlussmeldungen zwischen dem Client und dem Server schneller und effizienter und mit verringerter Latenz auszutauschen. Ferner können bei dieser Ausführungsform Interaktionen zwischen dem NW-E/A-Gerät 108 und dem NVMe-Controller 112 vollständig oder fast vollständig durch Hardware ausgeführt werden (zum Beispiel unter Verwendung von Peer-to-Peer-Speicher und Türklingel-Schreibvorgänge), und auch auf eine Art, die die OSE 32 und/oder die CPU 12 umgeht, vor ihr unabhängig ist und/oder sie nicht involviert. Vorteilhafterweise kann das erlauben, solche Interaktionen viel schneller und effizienter und mit verringerter Latenz auszuführen. Zusätzlich können die obenstehenden Features dieser Ausführungsform den Leistungsverbrauch des Servers, die Wärmeabstrahlung und die Menge an Bandbreite, die von der OSE 32 und der CPU 12 verbraucht wird, verringern.
-
Viele andere Änderungen sind möglich. Wie oben erwähnt, kann der Client 10 bei dieser Ausführungsform eine Mehrzahl von Clients aufweisen. Falls RDMA für Kommunikationen zwischen dem Server 20 und den Clients 10 verwendet wird, können die Clients 10 bei dieser Ausführungsform vorteilhafterweise dynamisch Pufferspeicher 130A...130N als einen gemeinsamen Pufferspeicher-Pool zwischen oder unter dem Client 10 bei der Ausführung ihrer Kommunikationen mit dem Server 20, dem NW-E/A-Gerät 108 und/oder dem NVMe-Controller verwenden. Um eine solche gemeinsame Pufferspeicherverwendung zu erlauben, kann das NW-E/A-Gerät 108 fähig sein, mindestens zum Teil Pufferspeicher spezifizierende Informationen zu handhaben, anzupassen und/oder zu ändern, die mindestens zum Teil in Befehlen 105 angezeigt sind, die dem Server 20 von den Clients 10 angezeigt werden, um es den Pufferspeichern 130A...130N und/oder anderen Serverressourcen zu erlauben, unter den Clients 10 gemeinsam verwendet zu werden, ohne zum Beispiel in konkurrenzbehafteten Problemen zu resultieren.
-
Der eine oder die mehreren Indikatoren 181 und/oder STags/TTags, die von dem einen oder den mehreren Indikatoren 181 angezeigt werden, können zum Beispiel jeweilige Informationen aufweisen, dass das NW-E/A-Gerät 108 mit einem oder mehreren Pufferspeichern und/oder Pufferspeicherpools in den Pufferspeichern 130A...130N verbinden kann, an Stelle von und/oder zusätzlich zu einem oder mehreren Speicherbereich-Handles. Bei dieser Anordnung kann der Client 10 RDMA-Leseoperationen ausführen, die solche Indikatoren 181 verwenden, und das NW-E/A-Gerät 108 kann Schreiboperationen zu dem einen oder den mehreren Pufferspeichern und/oder Pufferspeicherpools, die von den jeweiligen Informationen und/oder Indikatoren 181 angezeigt werden, ausführen. Beim Ausführen diese Operationen kann das NW-E/A-Gerät 108 die tatsächlichen Befehle und/oder Befehlswarteschlangenelemente, die von dem NVMe-Controller 112 bereitgestellt werden, entsprechend anpassen, um in richtigen Pufferspeichern zu resultieren usw., die zu dem NVMe-Controller 112 geschrieben werden, wenn der NVMe-Controller 112 solche Befehle und/oder Befehlsschlangenelemente ausführt.
-
Alternativ oder zusätzlich, ohne von den oben stehenden Beispielen abzuweichen, kann das NW-E/A-Gerät 108 eine gemeinsam verwendete Empfangswarteschlange (nicht gezeigt) aufweisen und/oder mit ihr verbunden sein, um zum Beispiel Befehle 105 von mehreren Clients 10 zu empfangen. Das NW-E/A-Gerät 108 kann fähig sein, mindestens zum Teil eine oder mehrere geeignete Server-Pufferspeicheradressen, Werte und/oder andere Informationen in einem oder mehreren Teilen (zum Beispiel Warteschlangenelemente 116, Werte 201, Indikatoren 181 und/oder andere Informationen) der empfangenen Befehle 105 zu ersetzen, um das gemeinsame Verwenden der Strukturen in einer oder mehreren Befehlsschnittstellen 110 zwischen oder unter mehreren Clients 10 zu erlauben, ohne dass dies in Konkurrenz oder anderer Beeinträchtigung der Leistung resultiert. Bei dieser Anordnung können die Clients nicht mit einem oder mehreren STags zu der Befehlswarteschlange des Speichercontrollers und/oder der Türklingel versehen sein und/oder diese verwenden, und das Schreiben zu diesen Strukturen kann von dem NW-E/A-Gerät 108 des Servers ausgeführt werden. Vorteilhafterweise kann es das mehreren Clients 10 erlauben, mit der gemeinsam verwendeten Empfangswarteschlange verbunden zu sein und/oder sie zu verwenden, um mindestens zum Teil dieselbe Speichercontroller-Befehlswarteschlange, Türklingel und/oder andere Strukturen zu verwenden und/oder gemeinsam zu verwenden.
-
In dem Fall einer Schreiboperation, können ein oder mehrere Indikatoren 181, ein oder mehrere Werte 201 und/oder andere Informationen in einem oder mehreren Befehlen 105 mindestens zum Teil einen oder mehrere Speichercontroller-STags oder TTags für die Schreiboperationen (und verwandte Informationen) anzeigen, und/oder ein oder mehrere RDMA-STags oder TTags zu einem oder mehreren Pufferspeichern, zu welchen ein oder mehrere Abschlusswarteschlangenelemente geschrieben werden können. Mindestens zum Teil auf dem einen oder den mehreren empfangenen Befehlen 105 und/oder anderen Informationen, die in dem NW-E/A-Gerät 108 gespeichert sind basierend, kann das NW-E/A-Gerät 108 einen oder mehrere Pufferspeicher aus den Pufferspeichern 130A...130N und eine oder mehrere Stellen in der Unterbreitungswarteschlange 114 auswählen, zu der die Daten 199, die zu schreiben sind, zu melden sind und eine oder mehrere Befehlswarteschlangenelemente auswählen, um ihnen die Daten 199 zu melden, die jeweils in ein oder mehrere entsprechende Befehlswarteschlangenelemente zu dem NVMe-Controller 112 zu schreiben sind. Das NW-E/A-Gerät 108 kann die Daten 199 und das eine oder die mehreren entsprechenden Befehlswarteschlangenelemente in Übereinstimmung mit solchen Auswahlen melden und danach die Türklingel 170 betätigen. Wie von dem NW-E/A-Gerät 108 gemeldet, können das eine oder die mehreren Befehlswarteschlangenelemente den einen oder die mehreren Speichercontroller-STags oder TTags, die in dem einen oder den mehreren Befehlen 105 geliefert werden, Befehlsidentifikatoren 302, sicherheitsrelevante Kontextinformationen (zum Beispiel, um die Bestätigung des einen oder der mehreren Speichercontroller-STags oder TTags zu erlauben) und/oder einen oder mehrere STags/TTAgs zu dem einen oder mehreren Pufferspeichern, zu welchen Daten 199 gemeldet wurden, anzeigen. Nachdem der NVMe-Controller 112 mindestens zum Teil die verlangte eine oder mehreren Schreiboperationen abgeschlossen und ein oder mehrere Abschlussschlangenelemente gemeldet hat, kann der NVMe-Controller 112 die Türklingel 192 betätigen. Mindestens zum Teil auf Informationen in der Tabelle 250 basierend, kann das NW-E/A-Gerät 108 eine oder mehrere entsprechende Antworten 197 erzeugen und zu dem einen oder mehreren Clients, die den empfangenen Befehl 105 bereitgestellt haben, weiterleiten.
-
In dem Fall einer Leseoperation, können allgemein analoge Informationen in dem Befehl 105 bereitgestellt werden, und allgemein analoge Operationen können von dem NW-E/A-Gerät 108 und/oder dem NVMe-Controller 112 ausgeführt werden. In dem Fall einer Leseoperation, können die Daten 199, die von dem NVMe-Controller 112 gelesen werden, jedoch von dem NVMe-Controller 112 zu einem oder mehreren der Pufferspeicher 130A...130N, die von dem NW-E/A-Gerät 108 spezifiziert werden, gespeichert werden und können von dem NW-E/A-Gerät 108 gelesen werden statt umgekehrt (wie das zum Beispiel der Fall bei einem Schreibvorgang sein kann). Das NW-E/A-Gerät 108 kann die gelesenen Daten 199 zu dem einen oder den mehreren Clients, die den empfangenen Befehl 105 bereitgestellt haben, in einer oder mehreren Antworten 197 übertragen. Bei der oben stehenden Anordnung, kann der Befehl 105 ähnlich oder identisch sein wie ein Befehl, der von einem Client verwendet werden kann, um auf für den Client lokalen Speicher zuzugreifen, zumindest von dem Standpunkt der einen oder mehreren vom Client ausgeführten Anwendungen, die einen solchen Zugriff einleiten. Vorteilhafterweise kann dies erlauben, dass entfernte Operationen und/oder RDMA-Transaktionen der oben beschriebenen Typen im Wesentlichen für diese eine oder die mehreren vom Client ausgeführten Anwendungen transparent sind.
-
Bei einigen Beispielen kann es daher vorteilhafterweise möglich sein, dass mehrere Clients die Befehlswarteschlange des Speichercontrollers, Türklingeln und/oder andere Pufferspeicher des Servers gemeinsam verwenden und/oder zu diesen Strukturen (über das NW-E/A-Gerät des Servers) unter Verwendung eines RDMA-Protokolls schreiben, ohne mit Ressourcenkonkurrenzproblemen (und/oder anderen Nachteilen), die anderenfalls auftreten können, behaftet zu sein. Das NW-E/A-Gerät des Servers kann fähig sein, mindestens zum Teil Informationen, die mit den Befehlen 105 des Clients verbunden sind und/oder in diesen enthalten sind, zu ändern, um ein solches gemeinsames Verwenden und/oder gemeinsames Verwenden von RDMA-STag/TTag-Informationen zwischen oder unter diesen Clients zu erleichtern. Vorteilhafterweise kann es dem RDMA-Protokoll damit erlaubt werden, für Befehlskommunikation und/oder Abschlussinformationen zwischen dem Server und mehreren Clients mit verbesserter Skalierbarkeit verwendet zu werden, während Speicherverbrauch verringert wird, um solche Merkmale umzusetzen, und ohne Verschlechterung der Kommunikationsleitungsrate.
-
3 veranschaulicht ein zweites beispielhaftes System. Wie in 3 gezeigt, weist das zweite beispielhafte System ein System 300 auf. Gemäß einigen Beispielen, kann das System 300 mehrere Clientknoten 310-1 bis 310-n (wobei „n” eine beliebige positive Ganzzahl größer als 3 darstellt) und einen Server 305 aufweisen. Für diese Beispiele können sich ein NW-E/A-Gerät 330, ein NVMe-Controller 350 und ein oder mehrere Prellpuffer 360 an dem Ort des Servers 305 befinden oder dort verwaltet werden.
-
Bei einigen Beispielen können Logik und/oder Features, die von Schaltungen für jedes Netzwerk-E/A-Gerät 330 und/oder jeden Server 305 ausgeführt werden, den Clients 310-1 bis 310-n Ressourcen zuordnen, um den entfernten Zugriff auf ein Speichergerät (nicht gezeigt), das von dem NVMe-Controller 350 gesteuert wird, zu erleichtern. Für diese Beispiele können getrennte Warteschlangenpaare (QPs) 320-1 bis 320-n und getrennte NVMe QPs 340-1 bis 340-n den Clients 310-1 bis 310-n zugeordnet oder zugewiesen werden. Mindestens Teile des/der Prellpuffer 360 können auch Clients 310-1 bis 310-n zugeordnet oder zugewiesen werden. QPs 320-1 bis 320-n, NVME QPs 340-1 bis 340-n und Prellpuffer 360 können Teil des Speichersystems sein, das an dem Server 305 resident ist. Alternativ können E/A QPs 320-1 bis 320-n an oder mit dem NW E/A-Gerät 330 und NVMe QP 340-1 bis 340-n an oder mit dem NVMe-Controller 350 verwaltet werden.
-
Gemäß einigen Beispielen, können die QPs 320-1 bis 320-n getrennt sowohl Befehlsunterbreitungswarteschlangen als auch Befehlsabschlusswarteschlangen aufweisen, die von Logik und/oder Features an dem NW-E/A-Gerät 330 verwendet werden, um Informationen mit den Clients 310-1 bis 310-n in Zusammenhang mit Befehlen zum Zugreifen auf den Speicher, der von dem NVMe-Controller 350 gesteuert wird, auszutauschen. Die NVMe QPs 340-1 bis 340-n können auch getrennt Befehlsunterbreitungswarteschlangen und Befehlsabschlusswarteschlangen aufweisen, die von Logik und/oder Features an dem NW E/A-Gerät 330 und an dem NVMe-Controller 350 verwendet werden, um die Weitergabe von Befehlen von den Clients 310-1 bis 310-n zu dem NVMe-Controller 350 zu erleichtern. Für diese Beispiele können die Clients 310-1 bis 310-n nicht direkt auf die NVMe QPs 340-1 bis 340-n zugreifen. Da die NVMe QPs 340-1 bis 340-n für die Clients 310-1 bis 310-n nicht direkt zugänglich sind, können Logik und/oder Features an dem NW E/A-Gerät 330 fähig sein, Befehle zu bestätigen, die von diesen Clients empfangen werden, bevor sie zu den NVMe QPs 340-1 bis 340-1n weitergeleitet oder weitergegeben werden.
-
Bei einigen Beispielen, wie weiter unten beschrieben, können Logik und/oder Features, die von den Schaltungen an dem NW E/A-Gerät 330 ausgeführt werden, zuerst Befehle, die von einem oder mehreren Clients 310-1 bis 310-n empfangen werden, um auf Speicher, der von dem NVMe-Controller 350 gesteuert wird, zuzugreifen, bestätigen. Die Logik und/oder Features können dann in der Lage sein, einen Zustand des empfangenen Befehls entweder als ungültig oder als abgeschlossen anzuzeigen. Als Teil dieses beispielhaften Vorgangs, können die Logik und/oder Features E/A QPs 320-1 bis 320-n, NVMe QP 340-1 bis 340-n oder Prellpuffer 360 verwenden, um Zugriff auf eine ähnliche Art wie oben für die 1 und 2 beschrieben zu erleichtern.
-
4 veranschaulicht ein beispielhaftes Zuordnungssystem 400 für NVMe-Namensräume. Gemäß einigen Beispielen, können Logik und/oder Features, die an den Server 305 (zum Beispiel Serversoftware) verwaltet werden, fähig sein, gegebene NVMe-Namensraumidentifikatoren zuzuordnen. Diese gegebenen NVMe-Namensraumidentifikatoren können dann von Logik und/oder Merkmalen an dem NW-E/A-Gerät 330 als Teil eines Bestätigungsvorgangs verwendet werden, um RDMA-Zugriff auf mindestens Teile des Speichers, die von dem NVMe-Controller 350 gesteuert werden, zu erlauben. Für diese Beispiele können die NVMe-Namensraumidentifikatoren mit einer Menge nicht flüchtigen Speichers verbunden werden, die in dem Speicher enthalten ist, die in Logikblöcke formatiert werden kann, die Logikblockadressen haben. Wie in 4 gezeigt, sind diese NVMe-Namensraumidentifikatoren als NVMe-Namensraum 401, 402 und 403 gezeigt. Der NVMe-Namensraum 401 ist als ferner in 401-1, 401-2 und 401-3 unterteilt gezeigt, während der NVMe-Namensraum 403 als 403-1, 401-2 und 401-3 aufweisend gezeigt ist.
-
Gemäß einigen Beispielen, können die Logik und/oder Features, die an dem Server 305 verwaltet werden, den NVMe-Namensraumidentifikatoren einen oder mehrere Namensraumkontexte (NSCs) zuweisen. Wie zum Beispiel in 4, gezeigt, sind die NSCs 11, 12 und 13 getrennt jeweils den NVMe-Namensraumidentifikatoren 401-1, 401-2 und 401-3 zugewiesen. Indes kann der NSC 10 dem NVMe-Namensraumidentifikator 401 zugewiesen werden. Wie in 4 gezeigt, sind die NSCs 20, 21 und 22 jeweils auch demselben Namensraumidentifikator 402 zugewiesen. Wie unten erwähnt, können zugewiesene oder zugeordnete NSCs Clients 310-1 bis 310-n zugewiesen oder zugeordnet werden, und können dann als ein Indexidentifikator von Logik und/oder Features an dem NW-E/A-Gerät 330 verwendet werden, um zu bestimmen, ob ein gegebener NSC, der in einem Befehl enthalten ist, der von einem gegebenen Client empfangen wurde, den gegebenen Client mit einem NVMe-Namensraum verbindet, der diesem gegebenen Client zugeordnet wurde.
-
Bei einigen Beispielen können die Logik und/oder Features an dem NW-E/A-Gerät 330 Schutzdomänen (PDs) mit gegebenen E/A QPs verbinden. Diese PDs können einem Client einen geschützten Zugriff auf einen oder mehrere Namensräume, die gegebene Namensraumidentifikatoren haben, bereitstellen. PD = 11 weist zum Beispiel NSC 11, NSC 21 und NSC 32 auf, die jeweils geschützten Zugriff auf Namensraumidentifikatoren 401-1, 402 und 403-2 bereitstellen können. Gemäß einigen Beispielen, wie in 4 gezeigt, können die PDs 11, 22, 33 und 44 jeweils mit E/A QPs 320-1, 320-2, 320-3 und 320-4 verbunden sein. Ferner, wie oben für 3 erwähnt, wurde E/A QP 320-1 für den Gebrauch durch den Client 310-1 zugeordnet. Durch Verbinden von PD 11 mit E/A QP 320-1, kann der Client 310-1 daher geschützten Zugriff auf die Namensraumidentifikatoren 401-1, 402 und 403-2 haben. Die anderen Clients können dann geschützten Zugriff gemäß den PDs, die mit ihren jeweiligen zugewiesenen oder zugeordneten E/A QPs verbunden sind, haben.
-
5 veranschaulicht eine erste beispielhafte Prellpufferzuordnung. Bei einigen Beispielen, wie in 5 gezeigt, können Logikblockadressen (LBAs) eines Prellpuffers 360-1 Transaktionskontexte zugewiesen oder zugeordnet werden, die Transakationstags (TTags) 510-1 bis 510-3 haben. Für diese Beispiele können die LBAs für den Systemspeicher, der an dem Server 305 verwaltet wird, bestimmt sein, und können durch Logik und/oder Features, die an dem Server 305 verwaltet werden (zum Beispiel Serversoftware), zugewiesen werden. LBAs, die einem gegebenen Transaktionskontext zugewiesen sind, können für die zeitweilige Speicherung verwendet werden, um Datentransfers zwischen Clients und Speicher, der von dem NVMe-Controller 350 gesteuert wird, zu erleichtern. Wie auch in 5 gezeigt, können Metadatenbereiche innerhalb jeder der LBAs, die einem gegebenen Transaktionskontext für Metadaten zugeordnet sind, reserviert werden. Die Metadaten können zum Beispiel mit Befehlen für den Zugriff auf den Speicher, der von dem NVMe-Controller 350 gesteuert wird, verbunden sein, und können Informationen (zum Beispiel Verwaltungs- oder Steuerinformationen) aufweisen, die mit Datentransfers zwischen Clients und dem Speicher verbunden sind.
-
Gemäß einigen Beispielen können ein oder mehrere Transaktionskontexte Clients 310-1 bis 310-n zugeordnet sein, und diese Zuordnungen, die durch die Logik und/oder Features an dem Server 305 als die TTags 510-1, 510-2 und 510-3 habend kommuniziert werden, beiden Clients und der Logik und/oder Features an dem NW-E/A-Gerät 330 zugeordnet werden. Für diese Beispiele und wie weiter unten erwähnt, können zugewiesene oder zugeordnete TTags von Logik und/oder Features an dem NW-E/A-Gerät 330 verwendet werden, um eventuell einen Befehl, der von einem Client empfangen wird, der einen zugeordneten TTag aufweist oder referenziert ist, zu bestätigen. Die Menge an Speicherkapazität, die in den LBAs enthalten ist, die einem gegebenen Transaktionskontext zugewiesen ist, kann die Datenmenge, die für jeden Befehl, der von dem Client empfangen wird, übertragen wird, einschränken. Falls ein Befehl eine Anfrage oder einen Bedarf für mehr Prellspeicher-Speicherkapazität als einem TTag zugewiesen ist, aufweist, kann der Befehl als ungültig betrachtet und eventuell von Logik und/oder Features an dem NW-E/A-Gerät 330 zurückgewiesen werden.
-
6 veranschaulicht eine zweite beispielhafte Prellpufferzuordnung. Bei einigen Beispielen, wie in 6 gezeigt, können LBAs des Prellpuffers 360-2 Transaktionskontexte zugewiesen oder zugeordnet werden, die TTags 610-1 bis 610-3 haben. Für diese Beispiele können die Zuordnungen ähnlich denjenigen sein, die für den Prellpuffer 360-1 beschrieben wurden, mit der Ausnahme, dass ein getrennter Metadatenbereich reserviert ist, statt dass Metadaten in den gegebenen LBAs, die einem gegebenen Transaktionskontext zugewiesen sind, enthalten sind.
-
Bei einigen Beispielen kann ein anfänglicher Befehl, der Metadaten enthält, von einem Client empfangen werden. Dieser anfängliche Befehl kann einen RDMA-Datentransfer zwischen dem Client und einem Speicher, der von dem NVMe-Controller 350 gesteuert wird, einrichten. Darauf folgende Befehle können dann von den Clients, die keine Metadaten enthalten, empfangen werden. Da die darauf folgenden Befehle keine Metadaten aufweisen, kann der Teil eines Prellpuffers, der einem Transaktionskontext zugeordnet ist, vollständig für den Datentransfer verwendet werden, statt einen Teil für Metadaten zu reservieren, wie oben für 5 beschrieben. Indem folglich der vollständige Teil verwendet wird, kann der Prellpuffer 360-2 effizienter verwendet werden, wenn darauf folgende Befehle keine Metadaten enthalten.
-
7 veranschaulicht einen beispielhaften Namensraum-Kontextindex 700. Gemäß einigen Beispielen, kann der Namensraum-Kontextindex 700 Informationen enthalten, die verwendet werden, um einen Befehl zu bestätigen, der von einem Client empfangen wird, um dem Client Zugriff auf Speicher, der von dem NVMe-Controller 350 gesteuert wird, bereitzustellen. Wie in 7 gezeigt, bildet der Namensraum-Kontextindex 700 verschiedene Zuordnungen oder Zuweisungen von Ressourcen ab, die Clients 310-1 bis 310-n, die oben für die 3 bis 5 beschrieben sind, bereitgestellt werden. Zusätzlich weist der Namensraum-Kontextindex 700 Informationen auf, um anzuzeigen, welche Operationscodes (Opcodes) für die Clients zum Zugreifen auf den Speicher zugelassen sind. Diese Opcodes für jeden Client können ohne darauf beschränkt zu sein, einen oder mehrere Flush-(F), Schreib-(W), Lese-(R), nicht korrigierbare Schreib-(WU), Vergleichscodes (C) aufweisen.
-
Gemäß einigen Beispielen, können die zugelassenen Opcodes auch darauf basieren, welche Opcodes von der Logik und/oder den Features an dem NW-E/A-Gerät 330 unterstützt werden, um RDMA des Speichers, der von dem NVMe-Controller 350 gesteuert wird, zu erleichtern. Die NVMe-Spezifikation weist zum Beispiel mehrere Opcodes zusätzlich zu den fünf oben aufgelisteten Opcodes auf. Die zusätzlichen Opcodes können jedoch für Operationen bestimmt sein, die mit dem RDMA des Speichers, der von dem NVMe-Controller 350 gesteuert wird, nichts zu tun haben oder dafür unnötig sind. Befehle, die diese anderen Opcodes enthalten, können daher als nicht von der Logik und/oder den Features an dem NW-E/A-Gerät 330 unterstützt betrachtet werden.
-
Bei einigen Beispielen können bestimmte NVMe-Namensraumidentifikatoren auf die Opcodes, die für diese NVMe-Namensraumidentifikatoren zugelassen sind, beschränkt sein. Der NVMe-Namensraumidentifikator 402 kann zum Beispiel nur auf Opcodes für Lesezugriff beschränkt sein. Wie in 7 für den Namensraum-Kontextindex 700 gezeigt, haben die NSCs 21, 22 und 20, die den Clients 310-1, 310-2 und 310-n zugeordnet sind, jeweils nur einen „R” als Opcode(s). Falls Befehle, die diese NSCs aufweisen, andere Opcodes haben als Lese-Opcodes, können diese Befehle nicht von Logik und/oder Features an dem NW-E/A-Gerät 330 bestätigt werden.
-
8 veranschaulicht einen beispielhaften Kommunikationsstrom 800. Bei einigen Beispielen, wie in 8 gezeigt, bildet der Kommunikationsstrom 800 beispielhafte Kommunikationen zwischen dem Client 310-1 und dem Server 305 ab. Für diese Beispiele können die Kommunikationen mit einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) kompatibel sein.
-
Bei einigen Beispielen, kann ausgehend von der Oberseite der 8 die erste Zeile, „RDMA write (S-STag) (Data)”, eine RDMA-Schreibmeldung sein, die Transaktionsdaten trägt. Die zweite Zeile „RDMA Write (S-STag) (Out-of-Line Metadata)” kann eine RDMA-Schreibmeldung sein, der Out-of-Line-Metadaten trägt, die erscheinen können, wenn der Client 310-1 auf einen Namensraum abzielt, der mit Out-of-Line-Metadata formatiert ist. Die dritte Zeile, „RDMA Send (Command) (C-tag, S-STag)”, kann eine RDMA Sendemeldung von dem Client 310-1 sein, die den Befehl für Zugriff auf den Speicher, der von dem NVMe-Controller 350 gesteuert wird, enthalten kann. Die vierte Zeile, „RDMA Write (C-STag) (Data)”, kann eine RDMA-Schreibmeldung sein, um Daten von einem Lesen des Speichers zu tragen und auf einen Pufferspeicher (zum Beispiel durch C-STag identifiziert) abzielen, die an dem Client 310-1, der ursprünglich in einem Leseanfragebefehl angezeigt war, verwaltet wird. Die fünfte Zeile, „RDMA Send SE (Completion)”, kann eine RDMA-Sendemeldung sein, die anzeigt, dass ein angefragtes Ereignis (SE), wie zum Beispiel ein Lesebefehl, von dem NVMe-Controller 350 abgeschlossen wurde. Die letzte Zeile, „RDMA Read (Out-of-Line Metadata)”, kann eine RDMA-Lesemeldung sein, die verwendet wird, falls der Client 310-1 auf einen Namensraum abzielte, der mit einer Out-of-Line-Metadata formatiert war.
-
Gemäß einigen Beispielen, wie in 8 gezeigt, können sich durchgehende Linien auf alle Opcodes beziehen, gepunktete Linien können sich auf Nurschreib-Opcodes beziehen, und gestrichelte Linien können sich auf Nurlese-Opcodes beziehen, die Schreib- oder Vergleichsbefehle enthalten können.
-
9 veranschaulicht ein beispielhaftes Lesebefehlformat. Gemäß einigen Beispielen, können Meldungen in einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) von entfernten Clients zu einem Server unter Verwendung des beispielhaften Lesebefehlformats 900 gesendet werden. Für diese Beispiele können die Clients 310-1 bis 310-n das beispielhafte. Lesebefehlformat 900 verwenden, um einen Lesebefehl für Zugriff auf den Speicher, der von dem NVMe-Controller 350 an dem Server 305 verwaltet wird, weiterzugeben. Logik und/oder Features an dem NW-E/A-Gerät 330 können die Meldungen empfangen und in den Meldungen enthaltene Informationen mit dem Namensraum-Kontextindex 700 vergleichen, um den Lesebefehl zu bestätigen. Der Befehl kann zum Beispiel mindestens zum Teil darauf basierend bestätigt werden, ob der „Opcode”, der in den Bitbereich [7:0] angezeigt ist, von dem NW-E/A-Gerät 330 unterstützt wird, und ob der „NSC”, der in Bitbereich [63:32] angezeigt ist, den sendenden Client mit einem NVMe-Namensraumidentifikator, der diesem Client zugeordnet ist, verbindet. Der „Prellpuffer-TTag”, der in dem Bitbereich [31:0] angezeigt ist, kann mit Informationen in dem Namensraum-Kontextindex 700 verglichen werden, um zu bestätigen, ob dem sendenden Client der Transaktionskontext, der mit diesem TTag verbunden ist, zugeordnet wurde. Ferner können die „Start-LBA”, die in dem Bitbereich [63:0] angezeigt ist, und die „Anzahl von Logikblöcken”, die in dem Bitbereich [15:0] angezeigt ist, verwendet werden, um die Größe einer Zugriffstransaktionen für den Befehl zu bestimmen und diese Größe mit der Menge an Speicherkapazität von dem Prellpuffer 360-1 vergleichen, die für den Transaktionskontext, der mit dem „Prellpuffer-TTag” verbunden ist, zugeordnet wurde. Die Logik und/oder Features an dem NW-E/A-Gerät 330 können den Lesebefehl außer Kraft setzen, falls die bestimmte Größe die zugeordnete Menge an Speicherkapazität überschreitet.
-
Diese Offenbarung ist nicht auf die oben erwähnten Beispiele von Informationen, die in einem Lesebefehl enthalten sind, der in dem beispielhaften Format des Lesebefehlformats 900 empfangen wird, beschränkt. Andere Informationen, die in einem Lesebefehl enthalten sind, entweder in dem beispielhaften Format des Lesebefehlformats 900 oder in anderen Lesebefehlformaten, können verwendet werden, um einen Lesebefehl, der von einem Client empfangen wird, zu bestätigen.
-
10 veranschaulicht ein beispielhaftes Schreib- und Vergleichsbefehlformat. Gemäß einigen Beispielen, können Meldungen in einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) von entfernten Clients zu einem Server unter Verwendung des Schreib- und Vergleichsbefehlformats 1000 gesendet werden. Für diese Beispiele können die Clients 310-1 bis 310-n das beispielhafte Schreib- und Vergleichsbefehlformat 1000 verwenden, um einen Schreib- oder Vergleichsbefehl für Zugriff auf den Speicher, der von dem NVMe-Controller 350 an dem Server 305 verwaltet wird, weiterzugeben. Logik und/oder Features an dem NW-E/A-Gerät 330 können die Meldungen empfangen und in den Meldungen enthaltene Informationen mit dem Namensraum-Kontextindex 700 vergleichen, um den Schreib- oder Vergleichsbefehl zu bestätigen. Informationen, die in ähnlichen Bitbereichen angegeben sind, wie die, die oben für das beispielhafte Lesebefehlformat 900 erwähnt wurden, können in dem beispielhaften Schreib- und Vergleichsbefehlformat 1000 ebenfalls angezeigt sein. Schreib- und Vergleichsbefehle, die in dem beispielhaften Schreib- und Vergleichsbefehlformat 1000 empfangen werden, können auf ähnliche Art wie oben für 9 erwähnt bestätigt werden.
-
Diese Offenbarung ist nicht auf die oben erwähnten Beispiele von Informationen, die in einem Schreib- oder Vergleichsbefehl enthalten sind, der in dem beispielhaften Format des Schreib- und Vergleichsbefehlformats 1000 empfangen wird, beschränkt. Andere Informationen, die in einem Schreib- und Vergleichsbefehl enthalten sind, entweder in dem beispielhaften Format des Schreib- und Vergleichsbefehlformats 1000 oder in anderen Schreib- und Vergleichsbefehlformaten, können verwendet werden, um einen Schreib- und Vergleichsbefehl, der von einem Client empfangen wird, zu bestätigen.
-
11 veranschaulicht ein beispielhaftes Flush- und nicht korrigierbares Schreibbefehlformat. Gemäß einigen Beispielen, können Meldungen in einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) von entfernten Clients zu einem Server unter Verwendung des Flush- und nicht korrigierbaren Schreibbefehlformats 1100 gesendet werden. Für diese Beispiele können die Clients 310-1 bis 310-n das beispielhafte Flush- und nicht korrigierbare Schreibbefehlformat 1100 verwenden, um einen Flush- oder nicht korrigierbaren Schreibbefehl für Zugriff auf den Speicher, der von dem NVMe-Controller 350 an dem Server 305 verwaltet wird, weiterzugeben. Logik und/oder Features an dem NW-E/A-Gerät 330 können die Meldungen empfangen und in den Meldungen enthaltene Informationen mit dem Namensraum-Kontextindex 700 vergleichen, um den Flush- oder nicht korrigierbaren Schreibbefehl zu bestätigen. Informationen, die in ähnlichen Bitbereichen angegeben sind, wie die, die oben für das beispielhafte Lesebefehlformat 900 erwähnt wurden, können in dem beispielhaften Flush- und nicht korrigierbaren Schreibbefehlformat 1100 ebenfalls angezeigt sein. Flush- oder nicht korrigierbare Schreibbefehle, die in dem beispielhaften Flush- und nicht korrigierbaren Schreibbefehlformat 1100 empfangen werden, können auf ähnliche Art wie oben für 9 erwähnt bestätigt werden.
-
Diese Offenbarung ist nicht auf die oben erwähnten Beispiele von Informationen, die in einem Flush- oder nicht korrigierbaren Schreibbefehl enthalten sind, der in dem beispielhaften Format des Flush- und nicht korrigierbaren Flush- und nicht korrigierbaren Schreibbefehlformat 1100 empfangen wird, beschränkt. Andere Informationen, die in einem Flush- und nicht korrigierbaren Schreibbefehl enthalten sind, entweder in dem beispielhaften Format des Flush- und nicht korrigierbaren Schreibbefehlformat 1100 oder in anderen Flush- und nicht korrigierbaren Schreibbefehlformaten, können verwendet werden, um einen Flush- und nicht korrigierbaren Schreibbefehl, der von einem Client empfangen wird, zu bestätigen.
-
12 veranschaulicht ein beispielhaftes NVMe-Befehlsabschlussformat 1200. Gemäß einigen Beispielen, können Logik und/oder Features an dem NW-E/A-Gerät 330 fähig sein, eine Meldung in einem RDMA-Protokoll (zum Beispiel iWARP, IB, RoCE) zu einem Client zu senden, um einen Zustand eines von dem Client empfangenen Befehls anzuzeigen. Für diese Beispiele kann die Meldung unter Verwendung des beispielhaften NVMe-Befehlsabschlussformats 1200 gesendet werden. Das „Zustandsfeld” („Status Field”) des NVMe-Befehlsabschlussformats 1200 kann zum Beispiel in dem Bitbereich [63:49] den Zustand des empfangenen Befehls anzeigen. Der Client kann die Information „TTag-Index niedrig” („TTag Index Low”), die in dem Bitbereich [47:32] enthalten ist, verwenden, um einen in dem beispielhaften NVMe-Befehlsabschlussformat 1200 empfangenen Befehl mit einem zuvor gesendeten Befehl, der einen TTag aufweist, der mindestens etwas den in den Bitbereich [47:32] enthaltenen Informationen entspricht, verbinden.
-
13 veranschaulicht eine beispielhafte NVMe-Befehlsbestätigungstabelle 1300. Bei einigen Beispielen kann die NVMe-Befehlsbestätigungstabelle 1300 die verschiedenen Bestätigungsprüfungen anzeigen, die Logik und/oder Features des NW-E/A-Geräts 330 ausführen können, um einen von einem Client empfangenen Befehl zu prüfen. Wie in 13 gezeigt, können die ausgeführten Prüfungen basierend auf den Opcodes, die in den empfangenen Befehlen angezeigt oder enthalten sind, variieren. Gemäß einigen Beispielen, können die Informationen, die in einem empfangenen Befehl (zum Beispiel im Format 900, 1000 oder 1100) enthalten sind, mit Informationen verglichen werden, die in einem Index verwaltet werden, wie zum Beispiel in dem Namensraum-Kontextindex 700, um die Prüfungen auszuführen.
-
14 veranschaulicht ein beispielhaftes Blockschaltbild für ein Gerät 1400. Obwohl das Gerät 1400, das in 14 gezeigt ist, eine beschränkte Anzahl von Elementen in einer bestimmten Topologie aufweist, erkennt man, dass das Gerät 1400 mehr oder weniger Elemente in anderen Topologien nach Wunsch für eine gegebene Umsetzung aufweisen kann.
-
Das Gerät 1400 kann von den Schaltungen 1420, die an einem Netzwerk-E/A-Gerät, das mit einem Server gekoppelt ist, verwaltet wird, unterstützen. Die Schaltungen 1420 können angeordnet sein, um ein oder mehrere durch Software oder Firmware umgesetzte Module 1422-a auszuführen. Es ist beachtenswert, dass „a” und „b” und „c” und ähnliche Bezugselemente, wie sie hier verwendet werden, dazu bestimmt sind, Variablen zu sein, die eine beliebige positive Ganzzahl darstellen. Falls zum Beispiel eine Umsetzung einen Wert von a = 5 einstellt, kann der komplette Satz von Software oder Firmware für die Module 1422-a die Module 1422-1, 1422-2, 1422-3, 1422-4 oder 1422-5 aufweisen. Die präsentierten Beispiele sind in diesem Kontext nicht eingeschränkt, und die verschiedenen Variablen, die durchgehend verwendet werden, können dieselben oder unterschiedliche Ganzzahlen darstellen.
-
Gemäß einigen Beispielen, können die Schaltungen 142 einen Prozessor oder Prozessorschaltungen aufweisen. Der Prozessor oder die Prozessorschaltungen können beliebige der verschiedenen im Handel erhältlichen Prozessoren sein, darunter und uneingeschränkt ein AMD®-Athlon®-, Duron®- und Opteron®-Prozessor; ARM®-Anwendung, eingebettete und sichere Prozessoren; IBM®- und Motorola® DragonBall®- und PowerPC®-Prozessoren; IBM- und Sony®-Cell-Prozessoren; Intel® Atom®, Celeron®-, Core (2) Duo®-, Core i3-, Core i5-, Core i7-, Itanium®-, Pentium®-, Xeon®-, Xeon Phi®- und XScale®-Prozessoren und ähnliche Prozessoren. Gemäß einigen Beispielen, können beispielhafte Schaltungen 1420 auch eine anwendungsspezifische integrierte Schaltung (ASIC) sein und mindestens einige Module 1422-a können als Hardwareelemente der ASIC umgesetzt sein.
-
Gemäß einigen Beispielen, kann das Gerät 1400 ein Empfangsmodul 1422-1 aufweisen. Das Empfangsmodul 1422-1 kann fähig sein, Befehl(e) 1410 über Meldungen in einem mit RDMA übereinstimmenden Protokoll (zum Beispiel iWARP, IB, RoCE) zu empfangen. Der/die Befehle 1410 können von entfernten Clients zu einem Server gesendet worden sein. Für diese Beispiele kann der Server mit einem NW-E/A-Gerät, das ein Gerät 1400 aufweist, gekoppelt sein. Der/die Befehle 1410 können Befehle zum Zugreifen auf Speicher, der von einem NVMe-Controller, der sich an oder mit dem Server befindet, aufweisen. Das Empfangsmodul 1422-1 kann fähig sein, mindestens vorübergehend Protokollinformationen 1424-a (zum Beispiel in einer Datenstruktur, wie zum Beispiel eine Nachschlagetabelle (LUT)), um mindestens Teile des/der Befehle 1410 auszulegen oder dekodieren, zu speichern.
-
Bei einigen Beispielen kann das Gerät 1400 auch ein Bestätigungsmodul 1422-2 aufweisen. Das Bestätigungsmodul 1422-2 kann fähig sein, den/die Befehle 1410, die von dem Empfangsmodul 1422-1 empfangen wurden, zu bestätigen. Das Bestätigungsmodul 1422-2 kann Informationen, die in einem Index (zum Beispiel Namensraum-Kontextindex 700) enthalten sind, zum Ausführen der Bestätigung verwenden. Das Bestätigungsmodul 1422-2 kann fähig sein, mindestens vorübergehend die Indexinformationen in einer Datenstruktur (zum Beispiel in einer LUT) zu speichern. Die Indexinformationen sind in 14 als NSC-Indexinformationen 1426-b gezeigt. Das Bestätigungsmodul 1422-2 kann auch verschiedene Bestätigungsprüfungen unter Verwendung von Informationen, die mindestens vorübergehend in der Datenstruktur (zum Beispiel NVMe-Befehlsbestätigungstabelle 1300) gespeichert sind, ausführen. Die Prüfinformationen sind in 14 als NVMe-Befehlsprüfinformationen 1428-c gezeigt. Für diese Beispiele kann das Bestätigungsmodul 1422-2 die Bestätigung mindestens zum Teil basierend auf Informationen, die in dem/den Befehlen 1410 enthalten sind, im Vergleich zu NSC-Indexinformationen 1426-b im Anschluss an die Prüfungen, die in den NVMe-Befehlsprüfinformationen 1428-c beschrieben sind, ausführen.
-
Bei einigen Beispielen kann das Gerät 1400 auch ein Nutzlastmodul 1422-3 aufweisen. Das Nutzlastmodul 1422-3 kann fähig sein, Informationen (zum Beispiel von einer LUT, die von dem Bestätigungsmodul 1422-2 verwaltet wird) zum Platzieren von Schreib- oder Vergleichsdaten zu einem Prellpuffer, der in einem bestätigten Befehl angezeigt ist, zu erzielen. Das Nutzlastmodul 1422-3 kann Informationen von den NSC-Indexinformationen 1426-b verwenden, um zu bestimmen, zu welchen LBAs des Pufferspeichers die Daten zu schreiben sind.
-
Gemäß einigen Beispielen, kann das Gerät 1400 ein Unterbreitungsmodul 1422-4 aufweisen. Das Unterbreitungsmodul 1422-4 kann fähig sein, einen bestätigten Befehl zu einer NVMe-Unterbreitungswarteschlange zu schreiben. Das Unterbreitungsmodul 1422-4 kann Informationen von den NSC-Indexinformationen 1426-b verwenden, um zu bestimmen, zu welcher NVMe-Unterbreitungswarteschlange der/die bestätigten Befehle 1410 zu schreiben sind.
-
Bei einigen Beispielen kann das Gerät 1400 auch ein Meldemodul 1422-5 aufweisen. Das Meldemodul 1422-5 kann fähig sein, einen Zustand des/der empfangenen Befehle 1410 anzuzeigen. Der Zustand kann zum Beispiel einen ungültigen Befehl 1440 aufweisen, falls der/die Befehle 1410 als ungültig befunden wurden. Der abgeschlossene Befehl 1450 kann angezeigt werden, falls der/die Befehle 1410 von dem NVMe-Controller ausgeführt wurden. Das Meldemodul 1422-5 kann fähig sein, Protokollinformationen 1424-a (zum Beispiel in einer LUT) mindestens vorübergehend zu speichern, um mindestens Teile des ungültigen Befehls 1440 oder abgeschlossenen Befehls 1450 in einem mit RDMA übereinstimmenden Protokoll (zum Beispiel iWARP, IB, RoCE), das zu dem Client, der den/die Befehle 1410 gesendet hat, zu senden ist, zu kodieren.
-
Hier ist ein Satz von Logikabläufen enthalten, der für beispielhafte Methodologien zum Ausführen neuartiger Aspekte der offenbarten Architektur repräsentativ ist. Obwohl zur Vereinfachung der Erklärung, die einen oder mehreren gezeigten Methodologien als eine Reihe von Handlungen gezeigt und beschrieben sind, versteht und schätzt der Fachmann jedoch, dass die Methodologien nicht auf die Reihenfolge von Handlungen beschränkt sind. Einige Handlungen können in Übereinstimmung damit in einer unterschiedlichen Reihenfolge und/oder gleichzeitig mit anderen Handlungen als diejenigen, die hier gezeigt und beschrieben sind, auftreten. Der Fachmann wird zum Beispiel verstehen und schätzen, dass eine Methodologie alternativ als eine Reihe zusammenhängender Zustände oder Ereignisse, wie zum Beispiel in einem Zustandsdiagramm dargestellt werden könnte. Ferner sind eventuell nicht alle Handlungen, die in einer Methodologie veranschaulicht sind, für eine neuartige Umsetzung erforderlich.
-
Ein Logikablauf kann in Software, Firmware und/oder Hardware umgesetzt werden. Bei Software- und Firmware-Ausführungsformen, kann ein Logikablauf von computerausführbaren Anweisungen umgesetzt werden, die auf mindestens einem nicht flüchtigen computerlesbaren Träger oder maschinenlesbaren Träger, wie zum Beispiel auf einem optischen, magnetischen oder Halbleiterspeichergerät gespeichert sind. Die Ausführungsformen sind in diesem Zusammenhang nicht beschränkt.
-
15 veranschaulicht einen beispielhaften Logikablauf 1500. Der Logikablauf 1500 kann für einige oder alle der Operationen repräsentativ sein, die von einer oder mehreren Logiken, Features oder Geräten, die hier beschrieben sind, wie zum Beispiel von dem Gerät 1400 ausgeführt werden. Insbesondere kann der Logikablauf 1500 durch das Empfangsmodul 1422-1, Bestätigungsmodul 1422-2, Nutzlastmodul 1422-3, Unterbreitungsmodul 1422-4 oder Meldemodul 1422-5 umgesetzt werden.
-
Gemäß einigen Beispielen kann der Logikablauf 1500 bei Block 1502 einen Befehl von einem Client empfangen, um dem Client Zugriff auf ein Speichergerät, das von einem NVMe-Controller, der an den Server verwaltet wird, gesteuert wird, bereitzustellen. Der/die Befehle 1410 können zum Beispiel von dem Empfangsmodul 1422-1, das in einem Gerät 1400 für ein NW-E/A-Gerät, das mit dem Server gekoppelt ist, enthalten ist, empfangen werden.
-
Bei einigen Beispielen kann der Logikablauf 1500 bei Block 1504 dann den Befehl mindestens teilweise basierend darauf bestätigen, ob ein Opcode, der in dem Befehl enthalten ist, von dem NW-E/A-Gerät unterstützt wird, und ob ein Indexidentifikator, der in dem Befehl enthalten ist, den Client mit einem NVMe-Namensraumidentifikator, der dem Client zugeordnet ist, verbindet. Das Bestätigungsmodul 1422-2 kann zum Beispiel Informationen, die in dem/den Befehlen 1410 enthalten sind, mit NSC-Indexinformationen 1426-b gemäß den NVMe-Befehlsprüfinformationen 1428-c vergleichen, um zu bestimmen, ob der/die Befehle 1410 gültig sind.
-
Gemäß einigen Beispielen, kann der Logikablauf 1500 bei Block 1506 dann einen Zustand des empfangenen Befehls zu dem Client bestätigen. Für diese Beispiele kann der Zustand einen ungültigen Befehl und/oder einen abgeschlossenen Befehl aufweisen. Das Meldemodul 1422-5 kann zum Beispiel dem Client, der den/die Befehle 1410 gesendet hat, einen ungültigen Befehl 1440 anzeigen, falls das Bestätigungsmodul 1422-2 bestimmt hat, dass der Befehl ungültig war. Alternativ kann das Meldemodul 1422-5 anzeigen, dass der/die gültigen Befehle 1410 von dem NVMe-Controller, der an den Server verwaltet wird, ausgeführt wurden. Diese Anzeige kann der abgeschlossene Befehl 1450 sein, und kann, wie oben erwähnt, in einer Befehlsabschlusswarteschlange, die dem Client, der den/die Befehle 1410 gesendet hat, zugewiesen ist.
-
16 veranschaulicht ein Beispiel eines Speicherträgers 1600. Ein Träger 1600 kann einen Fertigungsgegenstand aufweisen. Bei einigen Beispielen kann der Speicherträger 1600 irgendeinen nicht flüchtigen computerlesbaren Träger oder maschinenlesbaren Träger aufweisen, wie zum Beispiel ein optisches, magnetisches oder Halbleiterspeichergerät. Der Speicherträger 1600 kann verschiedene Typen computerausführbarer Anweisungen speichern, wie zum Beispiel Anweisungen zum Umsetzen des Logikablaufs 1500. Beispiele eines computerlesbaren oder maschinenlesbaren Speicherträgers können irgendwelche konkreten Träger aufweisen, die elektronische Daten speichern können, darunter flüchtige Speicher oder nicht flüchtige Speicher, ausbaubarer oder nicht ausbaubarer Speicher, löschbarer oder nicht löschbarer Speicher, beschreibbare oder wiederbeschreibbare Speicher usw. Beispiele für computerausführbare Anweisungen können irgendeinen geeigneten Typ Code aufweisen, wie zum Beispiel Quellencode, kompilierten Code, interpretierten Code, ausführbaren Code, statischen Code, dynamischen Code, objektorientierten Code, visuellen Code und dergleichen. Die Beispiele sind in diesem Zusammenhang nicht beschränkt.
-
17 veranschaulicht ein beispielhaftes NW-E/A-Gerät 1700. Bei einigen Beispielen, wie in 17 gezeigt, kann das NW-E/A-Gerät 1700 ein Verarbeitungsbauteil 1740, andere Plattformbauteile oder eine Kommunikationsschnittstelle 1760 aufweisen. Gemäß einigen Beispielen, kann das Netzwerk-E/A-Gerät 1700 in einem NW-E/A-Gerät, das mit einem Server in einem System oder Datencenter, wie oben erwähnt, gekoppelt ist, umgesetzt werden. Gemäß einigen Beispielen kann das Verarbeitungsbauteil 1704 Verarbeitungsoperationen oder Logik für das Gerät 1400 und/oder den Speicherträger 1600 ausführen. Das Verarbeitungsbauteil 174 kann mehrere Hardwareelemente, Softwareelemente oder einer Kombination beider aufweisen. Beispiele für Hardwareelemente können Geräte, Logikgeräte, Bauteile, Prozessoren, Mikroprozessoren, Schaltungen, Prozessorschaltungen, Schaltungselemente (zum Beispiel Transistoren, Widerstände, Kondensatoren, Induktoren usw.), integrierte Schaltungen, anwendungsspezifische integrierte Schaltungen (ASIC), programmierbare logische Geräte (PLD), digitale Signalprozessoren (DSP), feldprogrammierbare Gate-Array (FPGA), Speichereinheiten, Logikgatter, Register, Halbleitervorrichtung, Chips, Mikrochips, Chipsätze usw. aufweisen. Beispiele für Softwareelemente können Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Gerätetreiber, Systemprogramme, Softwareentwicklungsprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Hilfsprogramme, Unterprogramme, Funktionen, Verfahren, Vorgehensweisen, Softwareschnittstellen, Anwendungsprogrammeschnittstellen (API), Anweisungsätze, Rechencode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder irgendeine Kombination dieser aufweisen. Das Bestimmen, ob eine Ausführungsform unter Einsatz von Hardwareelementen und/oder Softwareelementen umgesetzt wird, kann in Übereinstimmung mit irgendeiner Anzahl von Faktoren variieren, wie zum Beispiel eine gewünschte Rechengeschwindigkeit, Leistungsniveaus, Hitzetoleranzen, Verarbeitungszyklusbudget, Eingabedatenraten, Ausgabedatenraten, Speicherressourcen, Datenbusgeschwindigkeiten oder andere Konzeptions- oder Leistungsauflagen, wie für ein gegebenes Beispiel gewünscht.
-
Bei einigen Beispielen können andere Plattformbauteile 1750 herkömmliche Rechenelemente, wie zum Beispiel einen oder mehrere Prozessoren, Multi-Core-Prozessoren, Coprozessoren, Speichereinheiten, Chipsätze, Controller, Peripheriegeräte, Schnittstellen, Oszillatoren, Zeitnehmungsgeräte usw. aufweisen. Beispiele für Speichereinheiten können uneingeschränkt unterschiedliche Typen computerlesbarer und maschinenlesbarer Speicherträger in der Form einer oder mehrerer Speichereinheiten mit höherer Geschwindigkeit, wie zum Beispiel ROM, RAM, DRAM, DDRAM, SDRAM, SRAM, PROM, EPROM, EEPROM, Flashspeicher oder irgendeinen anderen Speicherträgertyp, der zum Speichern von Informationen geeignet ist, aufweisen.
-
Bei einigen Beispielen kann die Kommunikationsschnittstelle 1760 Logik und/oder Features zum Unterstützen einer Kommunikationsschnittstelle aufweisen. Für diese Beispiele kann die Kommunikationsschnittstelle 1760 eine oder mehrere Kommunikationsschnittstellen aufweisen, die gemäß verschiedenen Kommunikationsprotokollen oder Standards arbeiten, um über direkte oder Netzwerkkommunikationsverbindungen auszutauschen. Direkte Kommunikationen können anhand des Gebrauchs von Kommunikationsprotokollen oder Standards auftreten, die in einem oder mehreren Industriestandards beschrieben sind (darunter Nachkommen und Varianten), wie zum Beispiel diejenigen, die mit der PCIe-Spezifikation, der NVMe-Spezifikation, der RDMA-Protokollspezifikation, der IEEE 802-2-2008-Spezifikation, RFC 791 oder RFC 793 verbunden sind.
-
Die Bauteile und Merkmale des NW-E/A-Geräts 1700 können unter Verwendung irgendeiner Kombination diskreter Schaltungen, anwendungsspezifischer integrierter Schaltungen (ASICs), Logikgatter und/oder Einzelchiparchitekturen umgesetzt werden. Ferner können die Merkmale des NW-E/A-Geräts 1700 unter Verwendung von Mikrocontrollern, programmierbaren Logik-Arrays und/oder Mikroprozessoren oder irgendeiner Kombination der oben Stehenden je nach Eignung umgesetzt werden. Es wird darauf hingewiesen, dass Hardware, Firmware und/oder Softwareelemente hier kollektiv oder einzeln „Logik” oder „Schaltung” genannt werden können.
-
Man muss verstehen, dass das beispielhafte NW-E/A-Gerät 1700, das in dem Blockschaltbild der 17 gezeigt ist, ein funktional beschreibendes Beispiel vieler potentieller Umsetzungen darstellen kann. Eine Unterteilung, Weglassung oder das Einschließen von Blockfunktionen, die in den begleitenden FIG. abgebildet sind, bedeuten daher nicht, dass die Hardwarebauteile, Schaltungen, Software und/oder Elemente zum Umsetzen dieser Funktionen in Ausführungsformen notwendigerweise unterteilt, weggelassen oder enthalten sind.
-
Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch repräsentative Anweisungen umgesetzt werden, die auf einem maschinenlesbaren Träger gespeichert sind, der verschiedene Logik innerhalb des Prozessors darstellt, die, wenn sie von einer Maschine, einem Rechengerät oder einem System gelesen wird, die Maschine, das Rechengerät oder System veranlasst, Logik zu schaffen, um die hier beschriebenen Techniken umzusetzen. Solche Darstellungen, die als „IP Cores” bekannt sind, können auf einem materiellen maschinenlesbaren Träger gespeichert und zu verschiedenen Kunden oder Herstellungsanlagen geliefert werden, um in Fertigungsmaschinen geladen zu werden, die tatsächlich die Logik oder den Prozessor herstellen.
-
Verschiedene Ausführungsformen können unter Einsatz von Hardwareelementen, Softwareelementen oder einer Kombination beider umgesetzt werden. Beispiele für Hardwareelemente können Geräte, Bauteile, Prozessoren, Mikroprozessoren, Schaltungen, Schaltelemente (zum Beispiel Transistoren, Widerstände, Kondensatoren, Induktoren usw.), integrierte Schaltungen, anwendungsspezifische integrierte Schaltungen (ASIC), programmierbare logische Geräte (PLD), digitale Signalprozessoren (DSP), feldprogrammierbare Gate-Array (FPGA), Speichereinheiten, Logikgatter, Register, Halbleitervorrichtung, Chips, Mikrochips, Chipsätze usw. umfassen. Beispiele für Software können Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Hilfsprogramme, Unterprogramme, Funktionen, Verfahren, Vorgehensweisen, Softwareschnittstellen, Anwendungsprogrammeschnittstellen (API), Anweisungsätze, Rechencode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder irgendeine Kombination dieser aufweisen. Das Bestimmen, ob eine Ausführungsform unter Einsatz von Hardwareelementen und/oder Softwareelementen umgesetzt wird, kann in Übereinstimmung mit irgendeiner Anzahl von Faktoren variieren, wie zum Beispiel eine gewünschte Rechengeschwindigkeit, Leistungsniveaus, Hitzetoleranzen, Verarbeitungszyklusbudget, Eingabedatenraten, Ausgabedatenraten, Speicherressourcen, Datenbusgeschwindigkeiten oder andere Konzeptions- oder Leistungsauflagen, wie für ein gegebenes Beispiel gewünscht. Einige Beispiel können ein Fertigungsprodukt oder mindestens einen computerlesbaren Träger aufweisen. Ein computerlesbarer Träger kann einen nicht flüchtigen Speicherträger aufweisen, um Logik zu speichern. Bei einigen Beispielen kann der nicht flüchtige Speicherträger einen oder mehrere Typen eines computerlesbaren oder maschinenlesbaren Speicherträgers aufweisen, der fähig ist, elektronische Daten zu speichern, darunter flüchtiger Speicher oder nicht flüchtiger Speicher, ausbaubarer oder nicht ausbaubarer Speicher, löschbarer oder nicht löschbarer Speicher, beschreibbarer oder wiederbeschreibbarer Speicher usw. Bei einigen Beispielen kann die Logik verschiedene Softwareelemente aufweisen, wie zum Beispiel Softwarekomponenten, Programme, Anwendungen, Computerprogramme, Anwendungsprogramme, Systemprogramme, Maschinenprogramme, Betriebssystemsoftware, Middleware, Firmware, Softwaremodule, Hilfsprogramme, Unterprogramme, Funktionen, Verfahren, Vorgehensweisen, Softwareschnittstellen, API, Anweisungsätze, Rechencode, Computercode, Codesegmente, Computercodesegmente, Wörter, Werte, Symbole oder irgendeine Kombination dieser.
-
Gemäß einigen Beispielen kann ein computerlesbarer Träger einen nicht flüchtigen Speicherträger aufweisen, um Anweisungen zu speichern und zu verwalten, die, wenn sie von einer Maschine, von einem Rechengerät oder System ausgeführt werden, die Maschine, das Rechengerät oder das System veranlassen, Verfahren und/oder Operationen gemäß den beschriebenen Beispielen auszuführen. Diese Anweisungen können jeden geeigneten Typ Code aufweisen, wie zum Beispiel Quellencode, kompilierten Code, interpretierten Code, ausführbaren Code, statischen Code, dynamischen Code, objektorientierten Code, visuellen Code und dergleichen. Die Anweisungen können gemäß einer vordefinierten Computersprache, Art oder Syntax ausgeführt werden, um eine Maschine, ein Rechengerät oder System anzuweisen, eine bestimmte Funktion auszuführen. Die Anweisungen können unter Verwendung jeder geeigneten Programmiersprache hohen Niveaus, niedrigen Niveaus, die objektorientiert, visuell, kompiliert und/oder interpretiert ist, umgesetzt werden.
-
Einige Ausführungsformen können unter Verwendung des Ausdrucks „bei einem Beispiel” und „ein Beispiel” gemeinsam mit ihren Ableitungen beschrieben sein. Diese Begriffe bedeuten, dass ein besonderes Merkmal, eine Struktur oder Charakteristik, die in Verbindung mit dem Beispiel beschrieben ist, in mindestens einem Beispiel enthalten ist. Das Erscheinen des Satzes „bei einem Beispiel” an verschiedenen Stellen in der Patentschrift bezieht sich nicht notwendigerweise alle auf dasselbe Beispiel. Einige Ausführungsformen wurden unter Gebrauch des Ausdrucks „gekoppelt” und „verbunden” gemeinsam mit ihren Ableitungen beschrieben. Diese Begriffe sind nicht notwendigerweise als Synonyme für einander gedacht. Beschreibungen, die die Begriffe „verbunden” und/oder „gekoppelt” verwenden, können zum Beispiel angeben, dass zwei oder mehr Elemente in direktem physischem oder elektrischem Kontakt miteinander sind. Der Begriff „gekoppelt” kann jedoch auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, aber trotzdem miteinander zusammenwirken oder interagieren.
-
Es wird betont, dass die Zusammenfassung der Offenbarung gemäß 37 C. F. R. sctn. 1.72(b) bereitgestellt ist, der fordert, dass eine Zusammenfassung es dem Leser erlaubt, die Art der technischen Offenbarung rasch festzustellen. Sie wird unter der Voraussetzung unterbreitet, dass sie nicht verwendet wird, um den Geltungsbereich oder die Bedeutung der Ansprüche auszulegen oder einzuschränken. Zusätzlich sieht man in der oben stehenden ausführlichen Beschreibung, dass verschiedene Merkmale in verschiedenen Ausführungsformen zum Zweck der Rationalisierung der Offenbarung gruppiert sind. Dieses Offenbarungsverfahren darf nicht dahingehend ausgelegt werden, dass es eine Absicht wiedergibt, dass die beanspruchten Beispiele mehr Merkmale erfordern als ausdrücklich in jedem Anspruch angegeben. Wie es die folgenden Ansprüche wiedergeben, beruht der erfinderische Gegenstand in weniger als allen Merkmalen einer einzigen offenbarten Ausführungsform. Die folgenden Ansprüche werden daher hiermit in die ausführliche Beschreibung aufgenommen, wobei jeder Anspruch als ein getrenntes bevorzugtes Beispiel eigenständig ist. In den anliegenden Ansprüchen werden die Begriffe „enthaltend” und „in welchen” als die herkömmlichen Äquivalente der jeweiligen Begriffe „umfassend” und „wobei” verwendet. Außerdem werden die Begriffe „erste”, „zweite” und „dritte” usw. bloß als Bezeichnungen verwendet und bezwecken nicht, ihren Objekten zahlenmäßige Forderungen aufzuerlegen.
-
Gemäß einigen Beispielen, kann ein beispielhaftes Gerät Schaltungen für ein Netzwerk-Eingangs-/Ausgangsgerät, das mit einem Server gekoppelt ist, aufweisen. Das beispielhafte Gerät kann auch ein Empfangsmodul zur Ausführung durch die Schaltungen aufweisen, um einen Befehl von einem entfernten Client zu dem Server zu empfangen. Der Befehl kann dem Client Zugriff auf ein Speichergerät, das von einem Non-Volatile Memory Express-(NVMe)-Controller, der an dem Server verwaltet wird, gesteuert wird. Das beispielhafte Gerät kann auch ein Bestätigungsmodul zum Ausführen durch die Schaltungen aufweisen, um den Befehl mindestens zum Teil basierend darauf zu bestätigen, ob ein Operationscode (Opcode), der in dem Befehl angezeigt ist, von dem Netzwerk-Eingangs-/Ausgangsgerät unterstützt wird, und ob ein Indexidentifikator, der in dem Befehl angezeigt ist, den Client mit einem NVMe-Namensraumidentifikator, der dem Client zugeordnet ist, verbindet. Das beispielhafte Gerät kann auch ein Meldemodul zur Ausführung durch die Schaltungen aufweisen, um einen Zustand des empfangenen Befehls zu dem Client anzuzeigen. Der Zustand kann einen ungültigen Befehl und/oder einen abgeschlossenen Befehl aufweisen.
-
Bei einigen Beispielen kann das beispielhafte Gerät auch das Netzwerk-Eingangs-/Ausgangsgerät aufweisen, wobei der Speicher und der NVMe-Controller angeordnet sind, um in Übereinstimmung mit einem Industriestandard, darunter PCIe Base Specification, Revision 3.0, oder NVMe Specification, Revision 1.1, zu arbeiten.
-
Gemäß einigen Beispielen für das beispielhafte Gerät, kann der Befehl in einem Paket empfangen werden, das mit einem entfernten Direktspeicherzugriff-Protokoll (RDMA), darunter das Internet Wide Area RDMA-Protokoll (iWARP), Infinband oder RDMA over Converged Ethernet (RoCE) kompatibel ist.
-
Bei einigen Beispielen für das beispielhafte Gerät, kann der Opcode, der in dem Befehl enthalten ist, einen Flush- und/oder Schreib- und/oder Lese- und/oder nicht korrigierbaren Schreib- oder Vergleichscode aufweisen.
-
Gemäß einigen Beispielen, kann das beispielhafte Gerät auch das Speichergerät aufweisen, darunter ein Festplattenlaufwerk (HDD) oder ein Festkörperlaufwerk (SSD). Das SSDs kann nicht flüchtige Speichertypen aufweisen, wie zum Beispiel dreidimensionalen Kreuzpunktspeicher und/oder Flashspeicher und/oder ferroelektrischen Speicher und/oder Silikonoxid-Nitridoxid-Silikon-(SONOS)-Speicher und/oder Polymerspeicher, und/oder Nanodraht und/oder ferroelektrischen Transistor-Direktzugriffspeicher (FeTRAM oder FeRAM) und/oder Nanodraht oder elektrisch löschbaren programmierbaren Nurlesespeicher (EEPROM). Bei einigen Beispielen für das beispielhafte Gerät, ist der Indexidentifikator, der den Client mit dem Namensraumidentifikator verbindet, in einem Index enthalten, der zugeordnete Ressourcen, die dem Client von dem Server für Zugriff auf das Speichergerät bereitgestellt werden, anzeigt, wobei die zugeordneten Ressourcen einen Pufferspeicher aufweisen, der von dem Server verwaltet wird, und ein erstes Warteschlangenpaar, auf das der Client zugreifen kann, das eine Befehlsunterbreitungswarteschlange zu dem NVMe-Controller und eine Befehlsabschlusswarteschlange von dem NVMe-Controller aufweist.
-
Gemäß einigen Beispielen für das beispielhafte Gerät, können die zugeordneten Ressourcen auch ein zweites Warteschlangenpaar aufweisen, auf das der NVMe-Controller zugreifen kann, das eine zweite Befehlsunterbreitungswarteschlange zu dem NVMe-Controller und eine zweite Befehlsabschlusswarteschlange von dem NVMe-Controller aufweist.
-
Bei einigen Beispielen kann das beispielhafte Gerät auch das Meldemodul aufweisen, das fähig ist, den Zustand des empfangenen Befehls als einen abgeschlossenen Befehl über eine Anzeige in der ersten Befehlsabschlusswarteschlange, die anzeigt, dass der empfangene Befehl zum Zugreifen auf das Speichergerät von dem NVMe-Controller ausgeführt wurde.
-
Gemäß einigen Beispielen für das beispielhafte Gerät, können die zugeordneten Ressourcen einen Teil einer Speicherkapazität für den Pufferspeicher aufweisen. Das Bestätigungsmodul kann den Befehl auch darauf basierend, ob eine Transaktionsgröße zum Zugreifen auf das Speichergerät, die in dem Befehl angezeigt ist, den Teil der Speicherkapazität überschreitet.
-
Bei einigen Beispielen für das beispielhafte Gerät, kann der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, auch den Client mit einem ersten Transaktionskontext, der dem Pufferspeicher zugewiesen ist, verbinden. Das Bestätigungsmodul kann auch den Befehl darauf basierend bestätigen, ob ein zweiter Transaktionskontext, der in dem empfangenen Befehl angezeigt ist, mit dem ersten Transaktionstext übereinstimmt. Gemäß einigen Beispielen für das beispielhafte Gerät, kann der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, auch den NVMe-Namensraumidentifikator mit einem Opcode verbinden. Das Bestätigungsmodul kann auch den Befehl basierend darauf bestätigen, ob der Opcode, der in dem Befehl angezeigt ist, mit dem NVMe-Namensraumidentifikator verbunden ist.
-
Bei einigen Beispielen können beispielhafte Verfahren das Empfangen an einem Netzwerk-Eingangs-/Ausgangsgerät, das mit einem Server gekoppelt ist, eines Befehls für einen Client, der von dem Server entfernt ist, aufweisen, um auf ein Speichergerät, das von einem Non-Volatile Memory Express-(NVMe)-Controller, der an dem Server verwaltet wird, gesteuert wird, zuzugreifen. Der Befehl kann darauf basierend bestätigt werden, ob ein Operationscode (Opcode), der in dem Befehl angezeigt ist, von dem Netzwerk-Eingangs-/Ausgangsgerät unterstützt wird, und ob ein Indexidentifikator, der in dem Befehl angezeigt ist, den Client mit einem NVMe-Namensraumidentifikator, der dem Client zugeordnet ist, verbindet. Der Zustand des empfangenen Befehls kann dem Client als ein ungültiger und/oder ein abgeschlossener Befehl angezeigt werden.
-
Bei einigen Beispielen können die beispielhaften Verfahren auch das Netzwerk-Eingangs-/Ausgangsgerät aufweisen, wobei das Speichergerät und der NVMe-Controller angeordnet sind, um in Übereinstimmung mit einem Industriestandard, darunter PCIe Base Specification, Revision 3.0; oder NVMe Specification, Revision 1.1, zu arbeiten.
-
Gemäß einigen Beispielen für die beispielhaften Verfahren, können die zugeordneten Ressourcen auch ein zweites Warteschlangenpaar aufweisen, auf das der NVMe-Controller zugreifen kann, das eine zweite Befehlsunterbreitungswarteschlange zu dem NVMe-Controller und eine zweite Befehlsabschlusswarteschlange von dem NVMe-Controller aufweist.
-
Gemäß einigen Beispielen für die beispielhaften Verfahren, kann der Zustand des empfangenen Befehls als ein abgeschlossener Befehl über eine Abschlussanzeige, die in der ersten Befehlsabschlusswarteschlange platziert wird, angezeigt werden. Die Abschlussanzeige kann anzeigen, dass der empfangene Befehl zum Zugreifen auf das Speichergerät von dem NVMe-Controller ausgeführt wurde.
-
Bei einigen Beispielen für die beispielhaften Verfahren, kann der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, auch den Client mit einem ersten Transaktionskontext, der dem Pufferspeicher zugewiesen ist, verbinden. Das Bestätigen des Befehls kann auch das Bestätigen des Befehls darauf basierend aufweisen, ob ein zweiter Transaktionskontext, der in dem empfangenen Befehl angezeigt ist, mit dem ersten Transaktionstext übereinstimmt. Gemäß einigen Beispielen für die beispielhaften Verfahren, kann das Speichergerät ein Festplattenlaufwerk (HDD) oder ein Festkörperlaufwerk (SSD) aufweisen. Bei diesen Beispielen kann das SSDs nicht flüchtige Speichertypen aufweisen, wie zum Beispiel dreidimensionalen Kreuzpunktspeicher und/oder Flashspeicher und/oder ferroelektrischen Speicher und/oder Silikonoxid-Nitridoxid-Silikon-(SONOS)-Speicher und/oder Polymerspeicher, und/oder Nanodraht und/oder ferroelektrischen Transistor-Direktzugriffspeicher (FeTRAM oder FeRAM) und/oder Nanodraht oder elektrisch löschbaren programmierbaren Nurlesespeicher (EEPROM).
-
Gemäß einigen Beispielen kann mindestens ein maschinenlesbarer Träger, der eine Mehrzahl von Anweisungen aufweist, die als Reaktion auf ihre Ausführung auf einem Netzwerk-Eingangs-/Ausgangsgerät, das mit einem Server gekoppelt ist, ausgeführt werden, das Netzwerkgerät veranlassen, das beispielhafte Verfahren wie oben erwähnt umzusetzen.
-
Obwohl der Gegenstand in einer Sprache geschrieben wurde, die für Strukturmerkmale und/oder methodische Handlungen spezifisch ist, heißt das nicht, dass der in den anliegenden Ansprüchen definierte Gegenstand unbedingt auf die speziellen Merkmale oder Handlungen, die oben beschrieben sind, beschränkt ist. Die speziellen Merkmale und Handlungen, die oben beschrieben sind, werden vielmehr als beispielhafte Formen der Umsetzung der Ansprüche offenbart.