DE112013000601T5 - Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client - Google Patents

Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client Download PDF

Info

Publication number
DE112013000601T5
DE112013000601T5 DE112013000601.4T DE112013000601T DE112013000601T5 DE 112013000601 T5 DE112013000601 T5 DE 112013000601T5 DE 112013000601 T DE112013000601 T DE 112013000601T DE 112013000601 T5 DE112013000601 T5 DE 112013000601T5
Authority
DE
Germany
Prior art keywords
command
client
nvme
memory
server
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112013000601.4T
Other languages
English (en)
Inventor
Ben-Zion Friedman
Eliezer Tamir
Vadim Makhervaks
Phil C. Cayton
Theodore L. Willke
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tahoe Research Ltd
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112013000601T5 publication Critical patent/DE112013000601T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17331Distributed shared memory [DSM], e.g. remote direct memory access [RDMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/30Authentication, i.e. establishing the identity or authorisation of security principals
    • G06F21/44Program or device authentication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/79Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/78Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
    • G06F21/80Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in storage media based on magnetic or optical technology, e.g. disks with sectors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1097Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/12Protocol engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Mathematical Physics (AREA)
  • Computer And Data Communications (AREA)
  • Information Transfer Systems (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Retry When Errors Occur (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Beispiele für die Befehlsbestätigung für den Zugriff auf ein Speichergerät, das an einem Server verwaltet wird, werden offenbart. Bei einigen Beispielen kann ein Netzwerk-Eingangs-/Ausgangsgerät, das mit dem Server gekoppelt ist, den Befehl von einem von dem Server entfernten Client empfangen. Bei diesen Beispielen können Elemente oder Module des Netzwerk-Eingangs-/Ausgangsgeräts in der Lage sein, den Befehl zu bestätigen und den Zustand des empfangenen Befehls zu dem Client melden. Andere Beispiele sind beschrieben und beansprucht.

Description

  • 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.

Claims (25)

  1. Gerät, das Folgendes aufweist: Schaltungen für ein Netzwerk-Eingangs-/Ausgangsgerät, das mit einem Server gekoppelt ist, ein Empfangsmodul zum Ausführen durch die Schaltungen, zum Empfangen eines Befehls von einem Client, der von dem Server entfernt ist, wobei der Befehl dem Client Zugang auf ein Speichergerät bereitstellt, das von einem Non-Volatile Memory Express-(NVMe)-Controller, der an dem Server verwaltet wird, gesteuert wird, ein Bestätigungsmodul zum Ausführen durch die Schaltungen, 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, und ein Befehlsmodul zum Ausführen durch die Schaltungen, um einen Zustand des empfangenen Befehls zu dem Client anzuzeigen, wobei der Zustand einen ungültigen Befehl und/oder einen abgeschlossenen Befehl aufweist.
  2. Gerät nach Anspruch 1, wobei das Netzwerk-Eingangs-/Ausgangsgerät, 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.
  3. Gerät nach Anspruch 1, wobei der Befehl in einem Paket empfangen wird, das mit einem entfernten Direktspeicherzugriffsprotokoll (RDMA), darunter das Internet Wide Area RDMA-Protokoll (iWARP), Infinband oder RDMA over Converged Ethernet (RoCE) kompatibel ist.
  4. Gerät nach Anspruch 1, wobei der Opcode, der in dem Befehl enthalten ist, einen Flush- und/oder Schreib-und/oder Lese- und/oder nicht korrigierbaren Schreib- oder Vergleichscode aufweist.
  5. Gerät nach Anspruch 1, wobei das Speichergerät ein Festplattenlaufwerk (HDD) oder ein Festkörperlaufwerk (SSD) aufweist, wobei das SSD nicht flüchtigen Speicher aufweist, 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).
  6. Gerät nach Anspruch 1, wobei der Indexidentifikator, der den Client mit dem Namensraumidentifikator verbindet, in einem Index enthalten ist, 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.
  7. Gerät nach Anspruch 6, wobei 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.
  8. Gerät nach Anspruch 6, wobei das Meldemodul 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 der Speichergerät von dem NVMe-Controller ausgeführt wurde, anzuzeigen.
  9. Gerät nach Anspruch 6, wobei die zugeordneten Ressourcen einen Teil einer Speicherkapazität für den Pufferspeicher aufweisen, das Bestätigungsmodul auch den Befehl basierend darauf bestätigt, ob eine Transaktionsgröße zum Zugreifen auf das Speichergerät, die in dem Befehl angezeigt ist, den Teil der Speicherkapazität überschreitet.
  10. Gerät nach Anspruch 6, wobei der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, den Client auch mit einem ersten Transaktionskontext, der dem Pufferspeicher zugewiesen ist, verbindet, wobei das Bestätigungsmodul den Befehl auch basierend darauf bestätigt, ob ein zweiter Transaktionskontext, der in dem empfangenen Befehl angezeigt ist, mit dem ersten Transaktionskontext übereinstimmt.
  11. Gerät nach Anspruch 1, wobei der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, auch den NVMe-Namensraumidentifikator mit einem Opcode verbindet, wobei das Bestätigungsmodul den Befehl auch basierend darauf bestätigt, ob der Opcode, der in dem Befehl angezeigt ist, mit dem NVMe-Namensraumidentifikator verbunden ist.
  12. Verfahren, das Folgendes aufweist: 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, um auf ein Speichergerät, das von einem Non-Volatile Memory Express-(NVMe)-Controller, der an dem Server verwaltet wird, gesteuert wird, zuzugreifen. Bestätigen des Befehls basierend darauf, 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, und Anzeigen eines Zustands des empfangenen Befehls zu dem Client als ein ungültiger und/oder ein abgeschlossener Befehl.
  13. Verfahren nach Anspruch 12, wobei das Netzwerk-Eingangs-/Ausgangsgerät, 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.
  14. Verfahren nach Anspruch 12, wobei der Befehl in einem Paket empfangen wird, das mit einem entfernten Direktspeicherzugriff-Protokoll (RDMA), darunter das Internet Wide Area RDMA-Protokoll (iWARP), Infinband-Protokoll oder RDMA over Converged Ethernet (RoCE) kompatibel ist.
  15. Verfahren nach Anspruch 12, wobei der Opcode, der in dem Befehl angezeigt ist, einen Flush- und/oder Schreib- und/oder Lese- und/oder nicht korrigierbaren Schreib- oder Vergleichscode aufweist.
  16. Verfahren nach Anspruch 12, wobei der Indexidentifikator, der den Client mit dem Namensraumidentifikator verbindet, in einem Index enthalten ist, 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 erste Befehlsabschlusswarteschlange von dem NVMe-Controller aufweist.
  17. Verfahren nach Anspruch 16, wobei 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.
  18. Verfahren nach Anspruch 16, das den Zustand des empfangenen Befehls als einen abgeschlossenen Befehl über eine Abschlussanzeige anzeigt, die in der ersten Befehlsabschlusswarteschlange platziert ist, wobei die Abschlussanzeige anzeigt, dass der empfangene Befehl zum Zugreifen auf das Speichergerät von dem NVMe-Controller ausgeführt wurde.
  19. Verfahren nach Anspruch 16, wobei der Index, der den Client mit dem NVMe-Namensraumidentifikator verbindet, den Client auch mit einem ersten Transaktionskontext, der dem Pufferspeicher zugewiesen ist, verbindet, wobei das Bestätigen des Befehls auch das Bestätigen des Befehls darauf basierend aufweist, ob ein zweiter Transaktionskontext, der in dem empfangenen Befehl angezeigt ist, mit dem ersten Transaktionskontext übereinstimmt.
  20. Verfahren nach Anspruch 12, wobei das Speichergerät ein Festplattenlaufwerk (HDD) oder ein Festkörperlaufwerk (SSD) aufweist, wobei das SSD nicht flüchtigen Speicher aufweist, darunter dreidimensionaler Kreuzpunktspeicher und/oder Flashspeicher und/oder ferroelektrischer 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).
  21. Der mindestens eine maschinenlesbare Träger, der eine Mehrzahl von Anweisungen aufweist, die als Reaktion auf ihr Ausführen auf einem Netzwerk-Eingangs-/Ausgangsgerät, das mit einem Server gekoppelt ist, das Netzwerk-Eingangs-/Ausgangsgerät zu Folgendem veranlassen: Empfangen eines Befehls von einem Client, der von dem Server entfernt ist, zum Zugreifen auf ein Speichergerät, das von einem Non-Volatile Memory Express-(NVMe)-Controller, der an dem Server verwaltet wird, gesteuert wird, wobei der in einem Paket empfangene Befehl mit einem entfernten Direktspeicherzugriff-(RDMA)-Protokoll kompatibel ist, das das Internet Wide Area RDMA-Protokoll (iWARP) und/oder Infinband-Protokoll oder RDMA over Converged Ethernet-(RoCE)-Protokoll aufweist; Bestätigen des Befehls basierend darauf, 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, und Anzeigen eines Zustands des empfangenen Befehls zu dem Client als ein ungültiger und/oder ein abgeschlossener Befehl.
  22. Der mindestens eine maschinenlesbare Träger nach Anspruch 21, wobei das Netzwerk-Eingangs-/Ausgangsgerät, 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.
  23. Der mindestens eine maschinenlesbare Träger nach Anspruch 21, wobei der Indexidentifikator, der den Client mit dem NVMe-Namensraumidentifikator verbindet, in einem Index enthalten ist, der zugeordnete Ressourcen anzeigt, die dem Client von dem Server zum Zugreifen auf das Speichergerät bereitgestellt werden, 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 erste Befehlsunterbreitungswarteschlange zu dem NVMe-Controller und eine erste Befehlsabschlusswarteschlange von dem NVMe-Controller aufweist.
  24. Der mindestens eine maschinenlesbare Träger nach Anspruch 23, wobei 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.
  25. Der mindestens eine maschinenlesbare Träger nach Anspruch 21, wobei der Opcode, der in dem Befehl enthalten ist, einen Flush- und/oder Schreib- und/oder Lese- und/oder nicht korrigierbaren Schreib- oder Vergleichscode aufweist.
DE112013000601.4T 2012-01-17 2013-01-16 Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client Pending DE112013000601T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201261587541P 2012-01-17 2012-01-17
USUS-61/587,541 2012-01-17
PCT/US2013/021759 WO2013109640A1 (en) 2012-01-17 2013-01-16 Techniques for command validation for access to a storage device by a remote client

Publications (1)

Publication Number Publication Date
DE112013000601T5 true DE112013000601T5 (de) 2014-12-18

Family

ID=48799625

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112013000601.4T Pending DE112013000601T5 (de) 2012-01-17 2013-01-16 Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client

Country Status (5)

Country Link
US (7) US9467512B2 (de)
CN (1) CN104246742B (de)
BR (1) BR112014017543A2 (de)
DE (1) DE112013000601T5 (de)
WO (1) WO2013109640A1 (de)

Families Citing this family (197)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9471578B2 (en) 2012-03-07 2016-10-18 Commvault Systems, Inc. Data storage system utilizing proxy device for storage operations
US9298715B2 (en) 2012-03-07 2016-03-29 Commvault Systems, Inc. Data storage system utilizing proxy device for storage operations
US9342537B2 (en) 2012-04-23 2016-05-17 Commvault Systems, Inc. Integrated snapshot interface for a data storage system
US9886346B2 (en) 2013-01-11 2018-02-06 Commvault Systems, Inc. Single snapshot for multiple agents
US11966355B2 (en) * 2013-03-10 2024-04-23 Mellanox Technologies, Ltd. Network adapter with a common queue for both networking and data manipulation work requests
US9423977B2 (en) * 2013-03-14 2016-08-23 Seagate Technology Llc Lock-free communication storage request reordering
US8966164B1 (en) * 2013-09-27 2015-02-24 Avalanche Technology, Inc. Storage processor managing NVME logically addressed solid state disk array
US9009397B1 (en) * 2013-09-27 2015-04-14 Avalanche Technology, Inc. Storage processor managing solid state disk array
US8954657B1 (en) * 2013-09-27 2015-02-10 Avalanche Technology, Inc. Storage processor managing solid state disk array
US9967340B2 (en) * 2013-04-11 2018-05-08 Avago Technologies General Ip (Singapore) Pte. Ltd. Network-displaced direct storage
US9483431B2 (en) 2013-04-17 2016-11-01 Apeiron Data Systems Method and apparatus for accessing multiple storage devices from multiple hosts without use of remote direct memory access (RDMA)
US9756128B2 (en) 2013-04-17 2017-09-05 Apeiron Data Systems Switched direct attached shared storage architecture
US10452316B2 (en) 2013-04-17 2019-10-22 Apeiron Data Systems Switched direct attached shared storage architecture
US20140337456A1 (en) * 2013-05-07 2014-11-13 Dell Products L.P. Systems and methods for enabling rdma between diverse endpoints
US9430412B2 (en) * 2013-06-26 2016-08-30 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over Ethernet-type networks
US9785355B2 (en) 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
US10063638B2 (en) * 2013-06-26 2018-08-28 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
US9785356B2 (en) 2013-06-26 2017-10-10 Cnex Labs, Inc. NVM express controller for remote access of memory and I/O over ethernet-type networks
US9986028B2 (en) * 2013-07-08 2018-05-29 Intel Corporation Techniques to replicate data between storage servers
US10223326B2 (en) * 2013-07-31 2019-03-05 Oracle International Corporation Direct access persistent memory shared storage
CN103946828B (zh) 2013-10-29 2017-02-22 华为技术有限公司 数据处理系统和数据处理的方法
US9245140B2 (en) * 2013-11-15 2016-01-26 Kabushiki Kaisha Toshiba Secure data encryption in shared storage using namespaces
US20160259568A1 (en) 2013-11-26 2016-09-08 Knut S. Grimsrud Method and apparatus for storing data
US9052835B1 (en) 2013-12-20 2015-06-09 HGST Netherlands B.V. Abort function for storage devices by using a poison bit flag wherein a command for indicating which command should be aborted
US9753812B2 (en) 2014-01-24 2017-09-05 Commvault Systems, Inc. Generating mapping information for single snapshot for multiple applications
US9632874B2 (en) 2014-01-24 2017-04-25 Commvault Systems, Inc. Database application backup in single snapshot for multiple applications
US9639426B2 (en) 2014-01-24 2017-05-02 Commvault Systems, Inc. Single snapshot for multiple applications
US9495251B2 (en) 2014-01-24 2016-11-15 Commvault Systems, Inc. Snapshot readiness checking and reporting
US10635316B2 (en) 2014-03-08 2020-04-28 Diamanti, Inc. Methods and systems for data storage using solid state drives
US10628353B2 (en) 2014-03-08 2020-04-21 Diamanti, Inc. Enabling use of non-volatile media-express (NVMe) over a network
US11921658B2 (en) 2014-03-08 2024-03-05 Diamanti, Inc. Enabling use of non-volatile media-express (NVMe) over a network
WO2015138245A1 (en) * 2014-03-08 2015-09-17 Datawise Systems, Inc. Methods and systems for converged networking and storage
US9887008B2 (en) * 2014-03-10 2018-02-06 Futurewei Technologies, Inc. DDR4-SSD dual-port DIMM device
US9548890B2 (en) * 2014-03-17 2017-01-17 Cisco Technology, Inc. Flexible remote direct memory access resource configuration in a network environment
US9667711B2 (en) 2014-03-26 2017-05-30 International Business Machines Corporation Load balancing of distributed services
WO2015162660A1 (ja) * 2014-04-21 2015-10-29 株式会社日立製作所 計算機システム
US20150317176A1 (en) * 2014-05-02 2015-11-05 Cavium, Inc. Systems and methods for enabling value added services for extensible storage devices over a network via nvme controller
US9294567B2 (en) 2014-05-02 2016-03-22 Cavium, Inc. Systems and methods for enabling access to extensible storage devices over a network as local storage via NVME controller
US9430268B2 (en) 2014-05-02 2016-08-30 Cavium, Inc. Systems and methods for supporting migration of virtual machines accessing remote storage devices over network via NVMe controllers
US9529773B2 (en) 2014-05-02 2016-12-27 Cavium, Inc. Systems and methods for enabling access to extensible remote storage over a network as local storage via a logical storage controller
EP3349418B1 (de) * 2014-05-29 2019-07-24 Huawei Technologies Co., Ltd. Dienstverarbeitungsverfahren, zugehörige vorrichtung und system
US9632953B2 (en) 2014-06-03 2017-04-25 Qualcomm Incorporated Providing input/output virtualization (IOV) by mapping transfer requests to shared transfer requests lists by IOV host controllers
US9690720B2 (en) 2014-06-03 2017-06-27 Qualcomm Incorporated Providing command trapping using a request filter circuit in an input/output virtualization (IOV) host controller (HC) (IOV-HC) of a flash-memory-based storage device
US9881680B2 (en) 2014-06-03 2018-01-30 Qualcomm Incorporated Multi-host power controller (MHPC) of a flash-memory-based storage device
WO2015194005A1 (ja) 2014-06-19 2015-12-23 株式会社日立製作所 ストレージ装置およびインタフェース装置
KR102249810B1 (ko) 2014-07-23 2021-05-11 삼성전자주식회사 스토리지 장치 및 스토리지 장치의 동작 방법
US10979503B2 (en) 2014-07-30 2021-04-13 Excelero Storage Ltd. System and method for improved storage access in multi core system
US9658782B2 (en) 2014-07-30 2017-05-23 Excelero Storage Ltd. Scalable data using RDMA and MMIO
US10237347B2 (en) 2015-06-08 2019-03-19 Excelero Storage Ltd. System and method for providing a client device seamless access to a plurality of remote storage devices presented as a virtual device
US10936200B2 (en) 2014-07-30 2021-03-02 Excelero Storage Ltd. System and method for improved RDMA techniques for multi-host network interface controllers
US9112890B1 (en) 2014-08-20 2015-08-18 E8 Storage Systems Ltd. Distributed storage over shared multi-queued storage device
US9563367B2 (en) 2014-08-26 2017-02-07 HGST Netherlands B.V. Latency command processing for solid state drive interface protocol
US9774672B2 (en) * 2014-09-03 2017-09-26 Commvault Systems, Inc. Consolidated processing of storage-array commands by a snapshot-control media agent
US10042716B2 (en) 2014-09-03 2018-08-07 Commvault Systems, Inc. Consolidated processing of storage-array commands using a forwarder media agent in conjunction with a snapshot-control media agent
US9274720B1 (en) 2014-09-15 2016-03-01 E8 Storage Systems Ltd. Distributed RAID over shared multi-queued storage devices
US10230531B2 (en) 2014-10-23 2019-03-12 Hewlett Packard Enterprise Development Lp Admissions control of a device
WO2016068941A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Secure transactions in a memory fabric
WO2016068942A1 (en) 2014-10-30 2016-05-06 Hewlett Packard Enterprise Development Lp Encryption for transactions in a memory fabric
US9934177B2 (en) * 2014-11-04 2018-04-03 Cavium, Inc. Methods and systems for accessing storage using a network interface card
KR102238652B1 (ko) 2014-11-12 2021-04-09 삼성전자주식회사 데이터 저장 장치, 이의 작동 방법, 및 이를 포함하는 데이터 처리 시스템의 작동 방법
US9648105B2 (en) 2014-11-14 2017-05-09 Commvault Systems, Inc. Unified snapshot storage management, using an enhanced storage manager and enhanced media agents
US9448731B2 (en) 2014-11-14 2016-09-20 Commvault Systems, Inc. Unified snapshot storage management
US9519666B2 (en) 2014-11-27 2016-12-13 E8 Storage Systems Ltd. Snapshots and thin-provisioning in distributed storage over shared storage devices
WO2016089411A1 (en) * 2014-12-04 2016-06-09 Hewlett-Packard Development Company, L.P. Access to network-based storage resource based on hardware identifier
CN104407820B (zh) * 2014-12-12 2016-08-17 华为技术有限公司 基于固态硬盘存储系统的数据处理方法、装置以及系统
CN104536701B (zh) * 2014-12-23 2018-02-06 记忆科技(深圳)有限公司 一种nvme协议多命令队列的实现方法及系统
US9747249B2 (en) * 2014-12-29 2017-08-29 Nicira, Inc. Methods and systems to achieve multi-tenancy in RDMA over converged Ethernet
US9846650B2 (en) 2015-03-09 2017-12-19 Samsung Electronics Co., Ltd. Tail response time reduction method for SSD
US11042300B2 (en) * 2015-03-31 2021-06-22 Toshiba Memory Corporation Command load balancing for NVME dual port operations
US9525737B2 (en) * 2015-04-14 2016-12-20 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM cache in a highly-distributed shared topology with direct memory access capable interconnect
US9529542B2 (en) 2015-04-14 2016-12-27 E8 Storage Systems Ltd. Lockless distributed redundant storage and NVRAM caching of compressed data in a highly-distributed shared topology with direct memory access capable interconnect
US9639395B2 (en) 2015-04-16 2017-05-02 Google Inc. Byte application migration
US9747122B2 (en) 2015-04-16 2017-08-29 Google Inc. Virtual machine systems
US10838852B2 (en) 2015-04-17 2020-11-17 Samsung Electronics Co., Ltd. System and method to extend NVME queues to user space
US11036533B2 (en) 2015-04-17 2021-06-15 Samsung Electronics Co., Ltd. Mechanism to dynamically allocate physical storage device resources in virtualized environments
WO2016175756A1 (en) 2015-04-28 2016-11-03 Hewlett Packard Enterprise Development Lp Hardware for system firmware use
US10817446B1 (en) * 2015-04-30 2020-10-27 Mobiveil, Inc. Optimized multiport NVMe controller for multipath input/output applications
US10009438B2 (en) 2015-05-20 2018-06-26 Sandisk Technologies Llc Transaction log acceleration
US9760314B2 (en) * 2015-05-29 2017-09-12 Netapp, Inc. Methods for sharing NVM SSD across a cluster group and devices thereof
US10496626B2 (en) 2015-06-11 2019-12-03 EB Storage Systems Ltd. Deduplication in a highly-distributed shared topology with direct-memory-access capable interconnect
US10248610B2 (en) * 2015-06-23 2019-04-02 Mellanox Technologies, Ltd. Enforcing transaction order in peer-to-peer interactions
KR102430187B1 (ko) 2015-07-08 2022-08-05 삼성전자주식회사 RDMA NVMe 디바이스의 구현 방법
US10303647B2 (en) 2015-07-15 2019-05-28 Mellanox Technologies, Ltd. Access control in peer-to-peer transactions over a peripheral component bus
JP6403162B2 (ja) 2015-07-23 2018-10-10 東芝メモリ株式会社 メモリシステム
US20180032471A1 (en) * 2016-07-26 2018-02-01 Samsung Electronics Co., Ltd. Self-configuring ssd multi-protocol support in host-less environment
US11983138B2 (en) 2015-07-26 2024-05-14 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US9892071B2 (en) * 2015-08-03 2018-02-13 Pure Storage, Inc. Emulating a remote direct memory access (‘RDMA’) link between controllers in a storage array
US10162537B2 (en) 2015-09-10 2018-12-25 Samsung Electronics Co., Ltd. Methods and systems to detect silent corruption of data
US9864654B2 (en) 2015-09-21 2018-01-09 Sandisk Technologies Llc Detecting data indicated as being uncorrectable at a data storage device
US9954979B2 (en) * 2015-09-21 2018-04-24 International Business Machines Corporation Protocol selection for transmission control protocol/internet protocol (TCP/IP)
CN108141417B (zh) * 2015-10-09 2021-01-22 索尼公司 总线系统和通信设备
CN106569736B (zh) * 2015-10-10 2018-10-19 北京忆芯科技有限公司 NVMe协议处理器及其处理方法
CN106648440B (zh) * 2015-10-28 2020-07-24 华为技术有限公司 操作存储设备的控制方法和存储设备
CN106775434B (zh) * 2015-11-19 2019-11-29 华为技术有限公司 一种NVMe网络化存储的实现方法、终端、服务器及系统
US20170155717A1 (en) * 2015-11-30 2017-06-01 Intel Corporation Direct memory access for endpoint devices
US10423568B2 (en) 2015-12-21 2019-09-24 Microsemi Solutions (U.S.), Inc. Apparatus and method for transferring data and commands in a memory management environment
US9898222B2 (en) * 2015-12-24 2018-02-20 Intel IP Corporation SoC fabric extensions for configurable memory maps through memory range screens and selectable address flattening
US10860511B1 (en) * 2015-12-28 2020-12-08 Western Digital Technologies, Inc. Integrated network-attachable controller that interconnects a solid-state drive with a remote server computer
CN107430585B (zh) 2016-01-29 2021-04-02 慧与发展有限责任合伙企业 用于远程直接存储器访问的系统和方法
WO2017131749A1 (en) * 2016-01-29 2017-08-03 Hewlett Packard Enterprise Development Lp Remote direct memory access
EP3265925A4 (de) 2016-01-29 2018-12-26 Hewlett-Packard Enterprise Development LP Entfernter sicherer speicherzugriff
US10025727B2 (en) * 2016-02-05 2018-07-17 Honeywell International Inc. Relay mechanism to facilitate processor communication with inaccessible input/output (I/O) device
CN107045483B (zh) * 2016-02-05 2019-10-18 北京忆恒创源科技有限公司 基于队列的消息交换方法及其装置
US10055377B2 (en) * 2016-02-24 2018-08-21 Western Digital Technologies, Inc. Using a proprietary framework on a standards-based embedded device
US10776272B2 (en) 2016-03-02 2020-09-15 Mellanox Technologies, Ltd. Control of persistent memory via a computer bus
US10503753B2 (en) 2016-03-10 2019-12-10 Commvault Systems, Inc. Snapshot replication operations based on incremental block change tracking
CN105892945B (zh) * 2016-03-30 2019-09-20 深圳忆联信息系统有限公司 一种信息更新方法及电子设备
US10769098B2 (en) * 2016-04-04 2020-09-08 Marvell Asia Pte, Ltd. Methods and systems for accessing host memory through non-volatile memory over fabric bridging with direct target access
US9842084B2 (en) 2016-04-05 2017-12-12 E8 Storage Systems Ltd. Write cache and write-hole recovery in distributed raid over shared multi-queue storage devices
JP6717026B2 (ja) * 2016-04-19 2020-07-01 オムロン株式会社 制御装置、中継装置、制御装置の制御方法、中継装置の制御方法、制御プログラム、および記録媒体
CN107346265B (zh) * 2016-05-05 2021-05-18 北京忆恒创源科技有限公司 实现QoS的方法与装置
CN112347012A (zh) * 2016-06-20 2021-02-09 北京忆芯科技有限公司 支持SR-IOV的NVMe控制器及方法
US10728331B2 (en) * 2016-06-22 2020-07-28 Excelero Storage Ltd. Techniques for dynamic cache use by an input/output device
CN111352873B (zh) * 2016-06-30 2021-10-08 北京忆芯科技有限公司 NVMe协议命令处理方法与装置
US10089134B2 (en) 2016-06-30 2018-10-02 Western Digital Technologies, Inc. Controlling access to namespaces of a storage device
US10390114B2 (en) * 2016-07-22 2019-08-20 Intel Corporation Memory sharing for physical accelerator resources in a data center
US10372659B2 (en) * 2016-07-26 2019-08-06 Samsung Electronics Co., Ltd. Multi-mode NMVE over fabrics devices
US11461258B2 (en) 2016-09-14 2022-10-04 Samsung Electronics Co., Ltd. Self-configuring baseboard management controller (BMC)
US11144496B2 (en) 2016-07-26 2021-10-12 Samsung Electronics Co., Ltd. Self-configuring SSD multi-protocol support in host-less environment
US10346041B2 (en) 2016-09-14 2019-07-09 Samsung Electronics Co., Ltd. Method for using BMC as proxy NVMeoF discovery controller to provide NVM subsystems to host
US10452279B1 (en) * 2016-07-26 2019-10-22 Pavilion Data Systems, Inc. Architecture for flash storage server
US10210123B2 (en) 2016-07-26 2019-02-19 Samsung Electronics Co., Ltd. System and method for supporting multi-path and/or multi-mode NMVe over fabrics devices
US20190109720A1 (en) 2016-07-26 2019-04-11 Samsung Electronics Co., Ltd. Modular system (switch boards and mid-plane) for supporting 50g or 100g ethernet speeds of fpga+ssd
US10649950B2 (en) 2016-08-29 2020-05-12 Excelero Storage Ltd. Disk access operation recovery techniques
US10735513B2 (en) 2016-09-08 2020-08-04 Toshiba Memory Corporation Remote NVMe activation
US10445018B2 (en) * 2016-09-09 2019-10-15 Toshiba Memory Corporation Switch and memory device
US11216396B2 (en) * 2016-09-29 2022-01-04 Intel Corporation Persistent memory write semantics on PCIe with existing TLP definition
US20180088978A1 (en) * 2016-09-29 2018-03-29 Intel Corporation Techniques for Input/Output Access to Memory or Storage by a Virtual Machine or Container
CN107992436B (zh) 2016-10-26 2021-04-09 华为技术有限公司 一种NVMe数据读写方法及NVMe设备
WO2018119742A1 (zh) * 2016-12-28 2018-07-05 华为技术有限公司 NVMe over Fabric中转发报文的方法、设备和系统
US20180188974A1 (en) * 2016-12-30 2018-07-05 Intel Corporation Computer program product, system, and method to allow a host and a storage device to communicate using different fabric, transport, and direct memory access protocols
US10769081B2 (en) 2016-12-30 2020-09-08 Intel Corporation Computer program product, system, and method to allow a host and a storage device to communicate between different fabrics
US10031872B1 (en) 2017-01-23 2018-07-24 E8 Storage Systems Ltd. Storage in multi-queue storage devices using queue multiplexing and access control
WO2018137217A1 (zh) * 2017-01-25 2018-08-02 华为技术有限公司 一种数据处理的系统、方法及对应装置
US20180210846A1 (en) * 2017-01-25 2018-07-26 Hewlett Packard Enterprise Development Lp Files access from a nvm to external devices through an external ram
US10657245B2 (en) * 2017-03-14 2020-05-19 Wyse Technology L.L.C. Dynamically controlling access to devices
US10509759B2 (en) * 2017-03-31 2019-12-17 Intel Corporation Multiple storage devices implemented using a common connector
US10282094B2 (en) * 2017-03-31 2019-05-07 Samsung Electronics Co., Ltd. Method for aggregated NVME-over-fabrics ESSD
US10733137B2 (en) 2017-04-25 2020-08-04 Samsung Electronics Co., Ltd. Low latency direct access block storage in NVME-of ethernet SSD
CA3062336C (en) * 2017-05-03 2022-07-12 Eidetic Communications Inc. Apparatus and method for controlling data acceleration
US10310745B2 (en) 2017-05-19 2019-06-04 Samsung Electronics Co., Ltd. Method and apparatus for fine tuning and optimizing NVMe-oF SSDs
US10803039B2 (en) 2017-05-26 2020-10-13 Oracle International Corporation Method for efficient primary key based queries using atomic RDMA reads on cache friendly in-memory hash index
US10719446B2 (en) 2017-08-31 2020-07-21 Oracle International Corporation Directly mapped buffer cache on non-volatile memory
US10685010B2 (en) 2017-09-11 2020-06-16 Amazon Technologies, Inc. Shared volumes in distributed RAID over shared multi-queue storage devices
US10802766B2 (en) 2017-09-29 2020-10-13 Oracle International Corporation Database with NVDIMM as persistent storage
US11086876B2 (en) 2017-09-29 2021-08-10 Oracle International Corporation Storing derived summaries on persistent memory of a storage device
US10956335B2 (en) 2017-09-29 2021-03-23 Oracle International Corporation Non-volatile cache access using RDMA
US20190102287A1 (en) * 2017-09-29 2019-04-04 Intel Corporation Remote persistent memory access device
US10732836B2 (en) 2017-09-29 2020-08-04 Oracle International Corporation Remote one-sided persistent writes
US10564857B2 (en) * 2017-11-13 2020-02-18 Western Digital Technologies, Inc. System and method for QoS over NVMe virtualization platform using adaptive command fetching
US10884975B2 (en) * 2017-11-30 2021-01-05 Samsung Electronics Co., Ltd. Differentiated storage services in ethernet SSD
CN110235098B (zh) 2017-12-26 2021-06-22 华为技术有限公司 存储系统访问方法及装置
WO2019127017A1 (zh) * 2017-12-26 2019-07-04 华为技术有限公司 存储系统中存储设备的管理方法及装置
US10740022B2 (en) 2018-02-14 2020-08-11 Commvault Systems, Inc. Block-level live browsing and private writable backup copies using an ISCSI server
CN109417514B (zh) * 2018-03-06 2022-07-22 华为技术有限公司 一种报文发送的方法、装置和存储设备
CN108549610B (zh) * 2018-03-27 2021-02-23 深圳忆联信息系统有限公司 一种NVMe扩展的实现方法及固态硬盘
US11509606B2 (en) * 2018-06-29 2022-11-22 Intel Corporation Offload of storage node scale-out management to a smart network interface controller
WO2020000485A1 (zh) 2018-06-30 2020-01-02 华为技术有限公司 一种基于NVMe的数据写入方法、装置及系统
EP3792776B1 (de) * 2018-06-30 2022-10-26 Huawei Technologies Co., Ltd. Verfahren, vorrichtung und system zum nvme-basierten datenlesen
KR20200008483A (ko) * 2018-07-16 2020-01-28 삼성전자주식회사 PCIe EP 및 네트워크 인터페이스를 통해 동시에 듀얼 라인 SSD 장치에 액세스하는 방법
US11263124B2 (en) 2018-08-03 2022-03-01 Micron Technology, Inc. Host-resident translation layer validity check
US11016911B2 (en) * 2018-08-24 2021-05-25 Samsung Electronics Co., Ltd. Non-volatile memory express over fabric messages between a host and a target using a burst mode
TWI660346B (zh) * 2018-09-07 2019-05-21 大陸商深圳大心電子科技有限公司 記憶體管理方法以及儲存控制器
US10852964B2 (en) * 2018-09-25 2020-12-01 Micron Technology, Inc. Host-resident translation layer validity check techniques
US11226907B2 (en) 2018-12-19 2022-01-18 Micron Technology, Inc. Host-resident translation layer validity check techniques
US11226894B2 (en) 2018-12-21 2022-01-18 Micron Technology, Inc. Host-based flash memory maintenance techniques
CN110008154B (zh) * 2019-04-16 2020-08-21 北京智芯微电子科技有限公司 提高处理器与访存总线时序的方法及内存属性预测器
US11397644B2 (en) 2019-04-23 2022-07-26 Samsung Electronics Co., Ltd. Method for controlling operations of RAID system comprising host device and plurality of SSDs
US11809888B2 (en) * 2019-04-29 2023-11-07 Red Hat, Inc. Virtual machine memory migration facilitated by persistent memory devices
DE112020002497T5 (de) 2019-05-23 2022-04-28 Hewlett Packard Enterprise Development Lp System und verfahren zur dynamischen zuweisung von reduktionsmotoren
TWI766194B (zh) * 2019-06-17 2022-06-01 慧榮科技股份有限公司 資料儲存裝置以及非揮發式記憶體控制方法
EP3771180B1 (de) * 2019-07-25 2023-08-30 INTEL Corporation Offload von speicherknoten-scale-out-verwaltung an ein schnittstellensteuergerät eines intelligenten netzwerks
US10893105B1 (en) * 2019-08-07 2021-01-12 EMC IP Holding Company LLC Utilization of networking protocol for seamless integration of compute nodes with software-defined storage nodes
CN112579311B (zh) * 2019-09-30 2023-11-10 华为技术有限公司 访问固态硬盘的方法及存储设备
CN111177054B (zh) * 2019-12-30 2021-09-03 京信网络系统股份有限公司 数据传输方法、装置、设备及存储介质
US11650937B2 (en) * 2019-12-31 2023-05-16 Western Digital Technologies, Inc. Storage system and method for secure host controller memory buffer access
US11422921B2 (en) * 2019-12-31 2022-08-23 Western Digital Technologies, Inc. Debug systems for deterministic validation of data storage devices
CN111813345A (zh) * 2020-07-17 2020-10-23 济南浪潮数据技术有限公司 一种数据传输方法、装置、服务器及可读存储介质
US11789634B2 (en) 2020-07-28 2023-10-17 Samsung Electronics Co., Ltd. Systems and methods for processing copy commands
US11733918B2 (en) 2020-07-28 2023-08-22 Samsung Electronics Co., Ltd. Systems and methods for processing commands for storage devices
US11467992B1 (en) * 2020-09-24 2022-10-11 Amazon Technologies, Inc. Memory access operation in distributed computing system
US11327909B1 (en) 2020-10-26 2022-05-10 Mellanox Technologies, Ltd. System for improving input / output performance
US11687365B2 (en) * 2020-12-21 2023-06-27 Eidetic Communications Inc. Method and apparatus for controlling a computational storage processor
CN114691026A (zh) * 2020-12-31 2022-07-01 华为技术有限公司 一种数据访问方法及相关设备
US11720424B2 (en) * 2021-03-12 2023-08-08 Salesforce, Inc. Single flow execution
US11609700B2 (en) 2021-08-11 2023-03-21 Mellanox Technologies, Ltd. Pacing in a storage sub-system
CN114024871B (zh) * 2022-01-04 2022-03-22 苏州浪潮智能科技有限公司 一种芯片验证方法、系统、计算机设备及可读存储介质
US11733912B2 (en) 2022-01-19 2023-08-22 Dell Products L.P. Intelligent target routing in a distributed storage system
US20230244613A1 (en) * 2022-01-28 2023-08-03 Seagate Technology Llc Scalable storage using nvme communication
US11977785B2 (en) 2022-02-08 2024-05-07 Microsoft Technology Licensing, Llc Non-volatile memory device-assisted live migration of virtual machine data
US11829602B2 (en) 2022-03-16 2023-11-28 Dell Products L.P. Intelligent path selection in a distributed storage system
US11907537B2 (en) 2022-04-06 2024-02-20 Dell Products L.P. Storage system with multiple target controllers supporting different service level objectives
US11762595B1 (en) 2022-04-08 2023-09-19 Dell Products L.P. Host-based locality determination for logical volumes stored across multiple nodes of a distributed storage system
CN115098426B (zh) * 2022-06-22 2023-09-12 深圳云豹智能有限公司 Pcie设备管理方法、接口管理模块、pcie系统、设备和介质
US11995356B2 (en) 2022-10-12 2024-05-28 Dell Products L.P. Host-based locality determination using locality log pages
WO2024113295A1 (en) * 2022-12-01 2024-06-06 Intel Corporation System, method and apparatus for filtering configuration accesses to unimplemented devices
US20240184612A1 (en) * 2022-12-05 2024-06-06 Microsoft Technology Licensing, Llc Virtual machine live migration with direct-attached non-volatile memory express device

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7584262B1 (en) 2002-02-11 2009-09-01 Extreme Networks Method of and system for allocating resources to resource requests based on application of persistence policies
US7010633B2 (en) 2003-04-10 2006-03-07 International Business Machines Corporation Apparatus, system and method for controlling access to facilities based on usage classes
US7895286B1 (en) 2004-04-30 2011-02-22 Netapp, Inc. Network storage system with NVRAM and cluster interconnect adapter implemented in a single circuit module
US7711835B2 (en) 2004-09-30 2010-05-04 Citrix Systems, Inc. Method and apparatus for reducing disclosure of proprietary data in a networked environment
US7756943B1 (en) 2006-01-26 2010-07-13 Symantec Operating Corporation Efficient data transfer between computers in a virtual NUMA system using RDMA
US7921177B2 (en) * 2007-07-18 2011-04-05 International Business Machines Corporation Method and computer system for providing remote direct memory access
US8463881B1 (en) * 2007-10-01 2013-06-11 Apple Inc. Bridging mechanism for peer-to-peer communication
US8775718B2 (en) * 2008-05-23 2014-07-08 Netapp, Inc. Use of RDMA to access non-volatile solid-state memory in a network storage system
US20100083247A1 (en) * 2008-09-26 2010-04-01 Netapp, Inc. System And Method Of Providing Multiple Virtual Machines With Shared Access To Non-Volatile Solid-State Memory Using RDMA
US9015268B2 (en) 2010-04-02 2015-04-21 Intel Corporation Remote direct storage access
US8588228B1 (en) 2010-08-16 2013-11-19 Pmc-Sierra Us, Inc. Nonvolatile memory controller with host controller interface for retrieving and dispatching nonvolatile memory commands in a distributed manner
US9105305B2 (en) 2010-12-01 2015-08-11 Seagate Technology Llc Dynamic higher-level redundancy mode management with independent silicon elements
US20140229659A1 (en) 2011-12-30 2014-08-14 Marc T. Jones Thin translation for system access of non volatile semicondcutor storage as random access memory
US9098402B2 (en) 2012-12-21 2015-08-04 Intel Corporation Techniques to configure a solid state drive to operate in a storage mode or a memory mode
US9710406B2 (en) 2014-12-15 2017-07-18 Intel Corporation Data transmission using PCIe protocol via USB port

Also Published As

Publication number Publication date
US11138143B2 (en) 2021-10-05
US11500810B2 (en) 2022-11-15
US20230185759A1 (en) 2023-06-15
US20130198312A1 (en) 2013-08-01
CN104246742B (zh) 2017-11-10
WO2013109640A1 (en) 2013-07-25
US10360176B2 (en) 2019-07-23
CN104246742A (zh) 2014-12-24
US20220100696A1 (en) 2022-03-31
US20190278739A1 (en) 2019-09-12
US11755527B2 (en) 2023-09-12
US20130198311A1 (en) 2013-08-01
US9467511B2 (en) 2016-10-11
US20170249281A1 (en) 2017-08-31
BR112014017543A2 (pt) 2017-06-27
US9467512B2 (en) 2016-10-11
US20140325013A1 (en) 2014-10-30

Similar Documents

Publication Publication Date Title
DE112013000601T5 (de) Techniken für die Befehlsbestätigung für den Zugriff auf ein Speichergerät durch einen entfernten Client
DE102014109519A1 (de) Techniken zum Replizieren von Daten zwischen Speicherservern
DE102014109518A1 (de) Techniken zur Initialisierung von einem Speichergerät, auf das von der Ferne zugegriffen werden kann
DE102020127924A1 (de) Gemeinschaftlich verwendeter speicherraum unter vorrichtungen
US9244881B2 (en) Facilitating, at least in part, by circuitry, accessing of at least one controller command interface
DE102012209016B4 (de) System und Verfahren zur Weiterleitung von Fibre-Channel-Eingangs- und Ausgangsdaten
DE102012208803B4 (de) System und Verfahren zur Weiterleitung von Fibre-Channel-Eingangs- und Ausgangsdaten
DE112016005910T5 (de) Architechtur für Software-Definierten Interconnect-Switch
DE102012209011B4 (de) System und Verfahren zur Weiterleitung von Fibre-Channel-Eingangs- und Ausgangsdaten
DE112017004663T5 (de) Mehrfachverbinder-unterstützung für usb-c
DE102012209009B4 (de) System und Verfahren zur Weiterleitung von Fibre-Channel-Eingangs- und Ausgangsdaten
US20150346795A1 (en) Multi-host power controller (mhpc) of a flash-memory-based storage device
DE112020006858T5 (de) Dynamische interrupt-bereitstellung
DE102020130534A1 (de) System, Vorrichtung und Verfahren zum persistenten Umgehen mit Speicheranforderungen in einem System
DE102013202627A1 (de) Verwalten einer Speichereinheit unter Verwendung einer hybriden Steuereinheit
DE102012209014B4 (de) System und Verfahren zur Weiterleitung von Fibre-Channel-Eingangs- und Ausgangsdaten
DE102020118205A1 (de) Verfahren und einrichtungen zum implementieren mehrerer inferenz-rechen-engines
DE102014116418A1 (de) Bereitstellung von, zumindest teilweise, mindestens einer Indikation, dass zumindest ein Teil der Daten zur Verarbeitung verfügbar sind
DE102022125850A1 (de) Systemressourcenzuweisung zur codeausführung
DE112022002601T5 (de) In-kernel-caching für verteilten cache

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R081 Change of applicant/patentee

Owner name: TAHOE RESEARCH, LTD., IE

Free format text: FORMER OWNER: INTEL CORPORATION, SANTA CLARA, CALIF., US

R082 Change of representative

Representative=s name: VOSSIUS & PARTNER PATENTANWAELTE RECHTSANWAELT, DE