DE112016007538T5 - TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER - Google Patents

TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER Download PDF

Info

Publication number
DE112016007538T5
DE112016007538T5 DE112016007538.3T DE112016007538T DE112016007538T5 DE 112016007538 T5 DE112016007538 T5 DE 112016007538T5 DE 112016007538 T DE112016007538 T DE 112016007538T DE 112016007538 T5 DE112016007538 T5 DE 112016007538T5
Authority
DE
Germany
Prior art keywords
driver
memory
queue
kernel
binary
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
DE112016007538.3T
Other languages
German (de)
Inventor
Changpeng Liu
Cunyin Chang
Ziye Yang
Qihua DAI
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.)
Intel Corp
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 DE112016007538T5 publication Critical patent/DE112016007538T5/en
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/10Program control for peripheral 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/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/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/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4411Configuring for operating with peripheral devices; Loading of device drivers
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Human Computer Interaction (AREA)
  • Computer Security & Cryptography (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Systeme, Vorrichtungen und Verfahren können einen binärverzweigten Treiber zum Verwalten von Non-Volatile-Memory(NVM)-express(NVMe)-Vorrichtungen und/oder einer Dateisystemspeicherung bereitstellen. Insbesondere können Systeme, Vorrichtungen und Verfahren einen Weg zum Sicherstellen einer hohen Eingabe/Ausgabe-Leistung unter Verwendung eines binärverzweigten NVMe-Treibers bereitstellen, welcher einen Userspace-Treiber und einen Kernelspace-Treiber umfasst. Die Systeme, Vorrichtungen und Verfahren können dafür sorgen, dass der binärverzweigte Treiber Zugriffsanforderungen zu dem Userspace-Treiber und/oder dem Kernelspace-Treiber leitet, basierend auf einem oder mehreren aus der Leseintensität oder der Schreibintensität einer Anwendung und/oder Dateien, die von der Anwendung verwendet werden, um für eine hohe Leistung hinsichtlich der Transaktionen je Sekunde (TPS) zu sorgen.Systems, devices, and methods may provide a binary-branched driver for managing nonvolatile memory (NVM) express (NVMe) devices and / or file system storage. In particular, systems, devices, and methods may provide a way to ensure high input / output performance using a binary-branched NVMe driver that includes a userspace driver and a kernelspace driver. The systems, apparatus, and methods may provide that the binary-branched driver directs access requests to the user-space driver and / or kernel-space driver based on one or more of the read intensity or write intensity of an application and / or files accessed by the user Application to provide high performance in terms of transactions per second (TPS).

Description

TECHNISCHES GEBIETTECHNICAL AREA

Ausführungsformen betreffen allgemein die Technologie nichtflüchtiger Speicher. Insbesondere betreffen Ausführungsformen eine Art und Weise zum Bereitstellen einer hohen Eingabe-Ausgabe-Leistungsfähigkeit unter Verwendung eines binärverzweigten Non-Volatile-Memory(NVM)-express(NVMe)-Treibers zum Verwalten einer Dateisystemspeicherung und/oder einer NVMe-Vorrichtungsspeicherung.Embodiments generally relate to nonvolatile memory technology. In particular, embodiments relate to a manner of providing high input-output performance using a non-volatile-memory (NVM) -express (NVMe) binarized driver for managing file system storage and / or NVMe device storage.

HINTERGRUNDBACKGROUND

Die Non-Volatile-Memory(NVM)-express(NVMe)-Technology ermöglicht, dass Übereinstimmungsstufen, die sich in modernen Halbleiterlaufwerken (Solid State Drives, SSDs) finden, von Host-Hardware und -Software genutzt werden. Die NVMe-Technologie kann genutzt werden, um Daten in einem Datencenter zu speichern, einen Eingabe/Ausgabe-Aufwand zu verringern und verschiedene Leistungsverbesserungen im Vergleich zu früheren logischen Vorrichtungsschnittstellen zu schaffen, welche mehrere lange Befehlswarteschlangen und eine verringerte Latenzzeit umfassen können. Jedoch können Software-Stapel für existierende NVMe-Lösungen aufgrund von Ressourcen fordernden Anwendungen (z. B. leseintensiven Anwendungen und/oder schreibintensiven Anwendungen) vor der Herausforderung stehen, den immer weiter ansteigenden Leistungsanforderungen (z. B. Stromverbrauch und Verarbeitungskapazitäten) zu genügen.Non-Volatile Memory (NVM) Express (NVMe) technology enables compliance levels found in modern solid state drives (SSDs) to be used by host hardware and software. NVMe technology can be used to store data in a data center, reduce input / output overhead, and provide various performance improvements over previous logical device interfaces, which can include multiple long instruction queues and reduced latency. However, software stacks for existing NVMe solutions may face the challenge of meeting ever-increasing performance demands (eg, power consumption and processing capacities) due to resource-demanding applications (eg, read-intensive applications and / or write-intensive applications).

Figurenlistelist of figures

Die verschiedenen Vorteile der Ausführungsformen werden dem Fachmann ersichtlich, wenn er die folgende Beschreibung und die anhängenden Ansprüche liest und auf die folgenden Zeichnungen Bezug nimmt, in welchen:

  • 1 eine Veranschaulichung eines Beispiels einer binärverzweigten Non-Volatile-Memory(NVM)-express(NVMe)-Treiberarchitektur gemäß einer Ausführungsform ist;
  • 2 ein Ablaufplan eines Beispiels eines Verfahrens zum Initialisieren eines Kernelspace-Treibers gemäß einer Ausführungsform ist;
  • 3 ein Ablaufplan eines Beispiels eines Verfahrens zum Initialisieren eines binärverzweigten Treibers gemäß einer Ausführungsform ist;
  • 4 ein Blockschaubild eines Beispiels einer hohen Rate an Lesetransaktionen je Sekunde (Transaction Per Second, TPS) für eine Datenbankanwendung gemäß einer Ausführungsform ist;
  • 5 ein Blockschaubild eines Beispiels einer Anwendung mit hoher Dateizugriffsnutzung gemäß einer Ausführungsform ist;
  • 6 ein Blockschaubild eines Beispiels zweier unabhängiger Anwendungen, welche eine NVMe-Vorrichtung gemeinsam benutzen, gemäß einer Ausführungsform ist;
  • 7 ein Blockschaubild eines Beispiels eines Prozessors gemäß einer Ausführungsform ist; und
  • 8 ein Blockschaubild eines Beispiels eines Computersystems gemäß einer Ausführungsform ist.
The various advantages of the embodiments will become apparent to those skilled in the art upon reading the following specification and appended claims, and referring to the following drawings in which:
  • 1 Figure 4 is an illustration of an example of a non-volatile-memory (NVM) non-volatile-memory (NVMe) driver architecture according to one embodiment;
  • 2 Fig. 10 is a flowchart of an example of a method for initializing a kernel space driver according to an embodiment;
  • 3 Fig. 10 is a flowchart of an example of a method for initializing a binary-branched driver according to an embodiment;
  • 4 Figure 12 is a block diagram of one example of a high rate of Transaction Per Second (TPS) for a database application according to one embodiment;
  • 5 Figure 12 is a block diagram of an example of a high file access usage application according to one embodiment;
  • 6 a block diagram of an example of two independent applications sharing an NVMe device according to one embodiment;
  • 7 Figure 12 is a block diagram of an example of a processor according to an embodiment; and
  • 8th Figure 12 is a block diagram of an example of a computer system according to one embodiment.

BESCHREIBUNG VON AUSFÜHRUNGSFORMENDESCRIPTION OF EMBODIMENTS

1 zeigt eine Veranschaulichung eines Beispiels einer binärverzweigten Non-Volatile-Memory(NVM)-express(NVMe)-Treiberarchitektur 100 gemäß einer Ausführungsform. Im Gegensatz zu einem herkömmlichen Kernel-Treiber, der in einem Unterbrechungsmodus arbeiten kann, kann ein Userspace-NVMe-Aufrufmodus-Treiber (z. B. das Storage Performance Development Kit von INTEL) benutzt werden, um Engpässe der Nutzung der Zentralprozessoreinheit (CPU) aufgrund von NVMe-Halbleiterlaufwerk(SSD)-Leistungsschüben auszugleichen und Leistungsverbesserungen zum Durchbruch zu verhelfen, die durch ein schnelles Speicherungs-Backend (z. B. eine NVMe-Speicherungsvorrichtung und/oder NVMe over Fabric NVMF) geschaffen werden. 1 FIG. 11 illustrates an example of a non-volatile memory (NVM) non-volatile memory (NVMe) driver architecture 100 according to one embodiment. Unlike a traditional kernel driver that can operate in an interrupt mode, a user-space NVMe invocation mode driver (such as the INTEL Storage Performance Development Kit) can be used to address bottlenecks in the use of the central processing unit (CPU). due to NVMe solid-state drive (SSD) performance and to provide breakthrough performance improvements provided by a fast storage backend (eg, an NVMe storage device and / or NVMe over fabric NVMF).

Die binärverzweigte NVMe-Treiberarchitektur 100 kann einen Host-Speicher 102 umfassen, welcher einen oder mehrere aus einem flüchtigen Speicher und einem nichtflüchtigen Speicher umfasst. Der nichtflüchtige Speicher kann eine Dateisystem-Vorrichtungsspeicherung 104 und eine Blockvorrichtungsspeicherung 106 (z. B. eine oder mehrere NVMe-Vorrichtungen) umfassen. Die binärverzweigte NVMe-Treiberarchitektur 100 kann ferner eine Speichersteuerung 108 (z. B. eine NVMe-Steuerung) umfassen, welche kommunikativ mit dem nichtflüchtigen Speicher verbunden ist, umfassend die Dateisystem-Vorrichtungsspeicherung 104 und die Blockvorrichtungsspeicherung 106. In einer Realisierung umfasst der Host-Speicher 102 zumindest einen Teil der Dateisystem-Vorrichtungsspeicherung 104 und/oder der Blockvorrichtungsspeicherung 106, während ein anderer Teil der Dateisystem-Vorrichtungsspeicherung 104 und/oder der Blockvorrichtungsspeicherung 106 von einer oder mehreren Anwendungen 110, 112 genutzt werden kann.The binary branched NVMe driver architecture 100 may be a host memory 102 comprising one or more of a volatile memory and a nonvolatile memory. The nonvolatile memory may be a file system device storage 104 and a block device storage 106 (eg, one or more NVMe devices). The binary branched NVMe driver architecture 100 may further include a memory controller 108 (eg, an NVMe controller) communicatively connected to the nonvolatile memory, including the file system device storage 104 and the block device storage 106 , In one implementation, the host memory includes 102 at least part of the file system device storage 104 and / or the block device storage 106 while another part of file system device storage 104 and / or the block device storage 106 one or more applications 110 . 112 can be used.

Die Speichersteuerung 108 (z. B. NVMe-Steuerung) kann einen binärverzweigten Treiber 114 nutzen, um eine oder mehrere Speicherzugriffsanforderungen zum Zugriff auf den nichtflüchtigen Speicher, umfassend die Dateisystem-Vorrichtungsspeicherung 104 und/oder die Blockvorrichtungsspeicherung 106, zu verarbeiten. Der binärverzweigte Treiber 114 kann einen Kernelspace-Treiber 116, der kommunikativ mit einem Kernel-Dateisystem 118 verbunden ist, und einen Userspace-Treiber 120 (z. B. einen INTEL-Storage-Performance-Development-Kit(SPDK)-NVMe-Treiber), der über einen Blockdienst-Dämon 122 kommunikativ mit der Blockvorrichtungsspeicherung 106 (z. B. einer oder mehreren NVMe-Vorrichtungen) verbunden ist, und Konfigurationswerkzeuge 124 (z. B. ein Außerband-Konfigurationswerkzeug oder ein NVMe-Konfigurationswerkzeug zur Verwendung eines dedizierten Kanals zur Verwaltung von Netzwerkvorrichtungen) umfassen. Die binärverzweigte NVMe-Treiberarchitektur 100 kann zur Außerbandverwaltung Daten von Befehlen und Ereignissen trennen, so dass Daten durch eine Host-zu-Steuerung-Schnittstelle fließen können, während Befehle und Ereignisse durch Verwaltungsanschluss-Ethernet-Kabel fließen können.The memory controller 108 (eg NVMe control) can be a binary-branched driver 114 use one or more memory access requests to access the non-volatile Memory comprising the file system device storage 104 and / or the block device storage 106 , to process. The binary-branched driver 114 can be a kernelspace driver 116 communicatively using a kernel file system 118 connected, and a userspace driver 120 (For example, an INTEL Storage Performance Development Kit (SPDK) NVMe driver) that uses a block service daemon 122 communicative with the block device storage 106 (eg, one or more NVMe devices) and configuration tools 124 (eg, an out-of-band configuration tool or an NVMe configuration tool for using a dedicated channel to manage network devices). The binary branched NVMe driver architecture 100 Out-of-band management can separate data from commands and events so that data can flow through a host-to-controller interface, while commands and events can flow through management-port Ethernet cables.

Die binärverzweigte NVMe-Treiberarchitektur 100 kann einen Treiber-Binärverzweiger (z. B. eine konfigurierbare Logik und/oder eine Hardware-Logik mit fester Funktionalität) umfassen, um den binärverzweigten Treiber 114 zu erzeugen. Der Treiber-Binärverzweiger kann in dem Treiber (z. B. Betriebssystem) ausgeführt werden, verwaltet werden und/oder angeordnet sein. Der Treiber-Binärverzweiger kann Benutzerkonfigurationsinformationen abrufen, die verwendet werden, um den binärverzweigten Treiber 114, den Kernelspace-Treiber 116 und den Userspace-Treiber 120 zu konfigurieren. Die Benutzerkonfigurationsinformationen können Metadaten umfassen, welche eine Anzahl von Verwaltungs-Warteschlangenpaaren 126 (z. B. Zulassungswarteschlangen und Abschlusswarteschlangen), Eingabe-Ausgabe-Warteschlangen 128, 130, 132, 134 und eine Anzahl von Binärverzweiger-Namensraumpaaren, umfassend einen Kernel-Namensraum 136 und einen Benutzer-Namensraum 138, zur Verwendung für den Kernelspace-Treiber 116 und/oder den Userspace-Treiber 120 identifizieren. Von einer oder mehreren Anwendungen 110, 112, die dafür modifiziert sind, den binärverzweigten Treiber 114 zu nutzen, können eine oder mehrere Speicherzugriffsanforderungen empfangen werden. Die eine oder die mehreren Anwendungen 110, 112 können eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen.The binary branched NVMe driver architecture 100 may include a driver binarder (eg, configurable logic and / or fixed functionality hardware logic) to the binary-branched driver 114 to create. The driver binarizer may be executed in the driver (eg, operating system), managed, and / or arranged. The driver bin can retrieve user configuration information that is used by the binary-branched driver 114 , the kernelspace driver 116 and the userspace driver 120 to configure. The user configuration information may include metadata that pairs a number of management queues 126 (for example, admission queues and completion queues), input-output queues 128 . 130 . 132 . 134 and a number of binary branch name space pairs comprising a kernel namespace 136 and a user namespace 138 , for use with the kernelspace driver 116 and / or the userspace driver 120 identify. Of one or more applications 110 . 112 that are modified for this, the binary-branched driver 114 One or more memory access requests may be received. The one or more applications 110 . 112 may include a read-intensive application and / or a write-intensive application.

Der Treiber-Binärverzweiger kann den Kernelspace-Treiber 116 initialisieren. Der Kernelspace-Treiber 116 kann eine Verwendung des Kernel-Dateisystems 118 unterstützen, um auf eine Dateisystem-Speicherungsvorrichtung zuzugreifen, wie z. B. die Blockvorrichtungsspeicherung 106. Der Treiber-Binärverzweiger kann eine Datenstruktur (z. B. eine Binärverzweigungs-Datenstruktur) in einem gemeinsam genutzten Speicherraum 140 des Host-Speichers 102 erzeugen. Der Host-Speicher 102 kann einen Treiber umfassen, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet. Auf den gemeinsam genutzten Speicherraum 140 kann durch ein Binärverzweiger-Namensraumpaar zugegriffen werden, wobei das Binärverzweiger-Namensraumpaar einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst. Die Datenstruktur kann Datenstruktur-Metadaten umfassen, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen. Auf den gemeinsam genutzten Speicherraum 140 kann durch das Binärverzweiger-Namensraumpaar zugegriffen werden, welches den Kernel-Namensraum 136 und den Benutzer-Namensraum 138 umfasst.The driver bin can use the kernelspace driver 116 initialize. The kernelspace driver 116 may be a use of the kernel file system 118 support to access a file system storage device, such as The block device storage 106 , The driver binarizer may have a data structure (eg, a binarized data structure) in a shared memory space 140 of the host memory 102 produce. The host memory 102 may include a driver where the driver manages the kernelspace driver through the binary-branched driver. On the shared storage space 140 may be accessed by a binary branch name pair, wherein the binary branch name pair includes a kernel namespace and a user namespace. The data structure may include data structure metadata including one or more of admission queue physical addresses, completion queue physical addresses, and queue address or queue ororbell physical address physical addresses. On the shared storage space 140 can be accessed by the binary branch name pair, which is the kernel namespace 136 and the user namespace 138 includes.

Der Treiber-Binärverzweiger kann in dem Host-Speicher 102 den Kernel-Namensraum 136, ein oder mehrere Kernel-Warteschlangenpaare 126, 128, 130, den Benutzer-Namensraum 138 und ein oder mehrere Userspace-Warteschlangenpaare 132, 134 erzeugen. Der Treiber-Binärverzweiger kann den Kernel-Namensraum 136 und das eine oder die mehreren Kernel-Warteschlangenpaare 126, 128, 130 dem Kernelspace-Treiber 116 zuordnen, die Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten aktualisieren, welche den Kernel-Namensraum 136 und das eine oder die mehreren Kernel-Warteschlangenpaare 126, 128, 130 identifizieren, und die Vorrichtung bei dem Treiber registrieren, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.The driver bin splitter may be in the host memory 102 the kernel namespace 136 , one or more kernel queue pairs 126 . 128 . 130 , the user namespace 138 and one or more user-space queue pairs 132 . 134 produce. The driver bin can use the kernel namespace 136 and the one or more kernel queue pairs 126 . 128 . 130 the kernelspace driver 116 to update the data structure with kernel queue pair metadata, which is the kernel namespace 136 and the one or more kernel queue pairs 126 . 128 . 130 and register the device with the driver, the device being the NVMe block device storage.

Das eine oder die mehreren Kernel-Warteschlangenpaare 126, 128, 130 können eines oder mehrere aus einem Verwaltungs-Warteschlangenpaar 126, welches eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange umfasst, und eines oder mehrere aus Treiber-Eingabe-Ausgabe-Warteschlangenpaaren 128, 130 umfassen, welche eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange umfassen können. Das eine oder die mehreren Userspace-Warteschlangenpaare 132, 134 können eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen. Auf die Blockvorrichtungsspeicherung 106 kann über den Blockdienst-Dämon 114 zugegriffen werden.The one or more kernel queue pairs 126 . 128 . 130 can one or more of a management queue pair 126 comprising a management admission queue and a management completion queue, and one or more of driver input-output queue pairs 128 . 130 include, which may include a driver admission queue and a driver completion queue. The one or more user space queue pairs 132 . 134 can include a userspace admission queue and a userspace completion queue. On the block device storage 106 can over the block service daemon 114 be accessed.

Der Treiber-Binärverzweiger kann unter Verwendung der Datenstruktur-Metadaten den Userspace-Treiber 120 initialisieren. Der Userspace-Treiber 120 kann ein Aufrufmodus-Treiber sein. Der Treiber-Binärverzweiger kann die Benutzerkonfigurationsinformationen und die Datenstruktur-Metadaten abrufen, die Vorrichtung auf der Basis der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten erzeugen, die Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten aktualisieren und eine Blockvorrichtungs-Schnittstelle (z. B. den Blockdienst-Dämon 114) zu der Vorrichtung bei dem Userspace-Treiber 120 registrieren.The driver bin can, using the data structure metadata, the userspace driver 120 initialize. The userspace driver 120 can be a call mode driver. The driver binarizer can retrieve the user configuration information and the data structure metadata, the device based on the Create user configuration information and the data structure metadata, update the data structure with the user-space queue-pair metadata, and a block device interface (for example, the block service daemon 114 ) to the device in the userspace driver 120 to register.

Nach dem Initialisieren sind der Kernelspace-Treiber 116 und der Userspace-Treiber 120 an entsprechende Vorrichtungen, die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung gebunden. Der binärverzweigte Treiber 114 und/oder Treiber (z. B. das Betriebssystem) können Leseanforderungen und Schreibanforderungen an den Kernelspace-Treiber 116 und/oder den Userspace-Treiber 120 leiten, um entsprechende Leseoperationen und/oder Schreiboperationen durchzuführen. Der Userspace-Treiber 120 kann kommunikativ mit der Speichersteuerung 108 (z. B. NVMe-Steuerung) verbunden sein.After initializing are the kernelspace drivers 116 and the userspace driver 120 to appropriate devices, the file system device storage and / or the NVMe block device storage bound. The binary-branched driver 114 and / or drivers (eg, the operating system) can read requests and write requests to the kernelspace driver 116 and / or the userspace driver 120 to perform appropriate reads and / or writes. The userspace driver 120 Can be communicative with the memory controller 108 (eg NVMe control).

Der binärverzweigte Treiber 114 kann die eine oder die mehreren Speicherzugriffsanforderungen von der einen oder den mehreren Anwendungen 110, 112, auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, empfangen, die eine oder die mehreren Speicherzugriffsanforderungen verarbeiten, unter Verwendung des Kernel-Namensraums 136 und/oder des Benutzer-Namensraums 138 auf der Basis der einen oder der mehreren Speicherzugriffsanforderungen das eine oder die mehreren Kernel-Warteschlangenpaare 126, 128, 130 oder das eine oder die mehreren Userspace-Warteschlangenpaare 132, 134 aktualisieren und unter Verwendung der Speichersteuerung 108 (z. B. der NVMe-Steuerung) die Datenstruktur in dem gemeinsam genutzten Speicherraum 140 synchronisieren.The binary-branched driver 114 may determine the one or more memory access requests from the one or more applications 110 . 112 to access the file system device storage and / or the NVMe block device storage, which process one or more memory access requests, using the kernel namespace 136 and / or the user namespace 138 based on the one or more memory access requests, the one or more kernel queue pairs 126 . 128 . 130 or the one or more user space queue pairs 132 . 134 update and using the memory controller 108 (eg the NVMe controller) the data structure in the shared memory space 140 synchronize.

Wenn es sich bei einer oder mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, können der binärverzweigte Treiber 114, der Treiber und/oder der Kernelspace-Treiber 116 die eine oder die mehreren Speicherzugriffsanforderungen zu dem Userspace-Treiber 120 leiten. In einer Ausführungsform kann der Kernelspace-Treiber 116 eine Steuerung des Userspace-Treibers 120 betreiben. Wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, können der binärverzweigte Treiber 114, der Treiber und/oder der Kernelspace-Treiber 116 die eine oder die mehreren Speicherzugriffsanforderungen zu dem Kernelspace-Treiber 116 leiten.If one or more memory access requests is a read request, the binary branch driver may be 114 , the driver and / or the kernelspace driver 116 the one or more memory access requests to the userspace driver 120 conduct. In one embodiment, the kernelspace driver may be 116 a control of the userspace driver 120 operate. If the one or more memory access requests is a write request, the binary branch driver may be 114 , the driver and / or the kernelspace driver 116 the one or more memory access requests to the kernelspace driver 116 conduct.

Platten-Lese/Schreib-Befehle können auf der Basis von Benutzerkonfigurationsinformationen (z. B. eine oder mehrere Anwendungen und Anwendungstypen, umfassend Anwendungen des leseintensiven oder schreibintensiven Typs) durch Kernel-Dateisysteme 110 zu dem Kernelspace-Treiber 116 und/oder durch den binärverzweigten Treiber 114 zu dem Userspace-Treiber 120 (z. B. einem SPDK-Plattentreiber) gesendet werden. Da herkömmlich realisierte NVMe-Treiber eine NVMe-Vorrichtung ausschließlich steuern (z. B. belegen) können, kann die Speichersteuerung 108 (z. B. NVMe-Steuerung) beispielsweise nicht von einem anderen Treiber (z. B. einem Kernel-Treiber) genutzt (z. B. gemeinsam genutzt) werden, ohne den binärverzweigten Treiber 114 zu realisieren.Disk read / write commands may be based on user configuration information (e.g., one or more applications and types of applications including read-intensive or write-intensive type applications) by kernel file systems 110 to the kernelspace driver 116 and / or by the binary-branched driver 114 to the userspace driver 120 (for example, a SPDK disk driver). Since conventionally implemented NVMe drivers can only control (e.g., allocate) an NVMe device, memory control can 108 (eg, NVMe controller), for example, are not shared (eg, shared) by another driver (eg, a kernel driver) without the binary-branched driver 114 to realize.

Eine Anwendung 110 (z. B. eine herkömmliche Speicherungsanwendung) kann den Kernelspace-Treiber 116 zur Dateisystemspeicherung verwenden, während eine andere Anwendung 112 (z. B. eine Hochleistungsanwendung) den Userspace-Treiber 120 zur Blockvorrichtungsspeicherung verwenden kann. Herkömmliche Speicherungsanwendungen wie die Anwendung 110 können mit einer tragbaren Betriebssystem-Schnittstelle (POSIX) kompatible Systemrufe verwenden, während Hochleistungsanwendungen wie die Anwendung 112 einen höheren Wert der Eingabe/Ausgabe-Operationen je Sekunde (IOPS) mit begrenzter CPU-Nutzung realisieren können.An application 110 (eg, a conventional storage application) may be the kernelspace driver 116 to use file system storage while another application 112 (eg a high performance application) the userspace driver 120 can use for block storage. Traditional storage applications like the application 110 can use compatible system calls with a portable operating system interface (POSIX), while high performance applications like the application 112 can realize a higher value of input / output operations per second (IOPS) with limited CPU usage.

Der Treiber, der binärverzweigte Treiber 114 oder der Kernelspace-Treiber 116 können eine oder mehrere Speicherungsvorrichtungen initialisieren, umfassend eine PCI-Vorrichtungssonde, wobei sie einen oder mehrere Namensräume und Warteschlangenpaare und Speicherzuweisungen für zugehörige Datenstrukturen erzeugen. Der Kernelspace-Treiber 116 kann durch Benutzerkonfigurationsinformationen die Binärverzweiger-Namensräume 136, 138 und die Eingabe-Ausgabe-Warteschlangenpaare 128, 130, 132, 134 beanspruchen. Beispielsweise können Benutzer den Kernel-Namensraum 136 und die Kernel-Warteschlangen-Paare 126, 128, 130 dem Kernel-Treiber zuweisen, so dass der Kernel-Treiber den Kernel-Namensraum 136 und dann eine zugewiesene Unterbrechungsroutine-Funktion für die Kernel-Warteschlangen-Paare 126, 128, 130 sondieren kann. Der Kernelspace-Treiber 116 kann die PCI-Vorrichtungsinformationen, umfassend die Informationen über die Binärverzweiger-Namensräume 136, 138 und die Kernel-Warteschlangen-Paare 126, 128, 130, sowie die Benutzerkonfigurationsinformationen in dem gemeinsam benutzten Speicher 140 aktualisieren.The driver, the binary-branched driver 114 or the kernelspace driver 116 may initialize one or more storage devices, including a PCI device probe, generating one or more namespaces and queue pairs and memory allocations for associated data structures. The kernelspace driver 116 can through user configuration information the binarizer namespaces 136 . 138 and the input-output queue pairs 128 . 130 . 132 . 134 claim. For example, users can use the kernel namespace 136 and the kernel queue pairs 126 . 128 . 130 assign to the kernel driver so that the kernel driver is the kernel namespace 136 and then an assigned interrupt handler function for the kernel queue pairs 126 . 128 . 130 can probe. The kernelspace driver 116 may include the PCI device information including the information about the binarist namespaces 136 . 138 and the kernel queue pairs 126 . 128 . 130 , as well as the user configuration information in the shared memory 140 To update.

Wenn der Userspace-Treiber 120 gestartet (z. B. initialisiert) ist, kann es sein, dass der Userspace-Treiber 120 keine PCI-Vorrichtungsinitialisierungsarbeit (z. B. -aufgaben) durchführt, sondern die PCI-Vorrichtungsinformationen aus dem gemeinsam genutzten Speicherraum 140 ausliest und eine logische NVMe-Vorrichtung erzeugt. Der Userspace-Treiber 120 kann spezifizierte Namensrauminformationen und Eingabe-Ausgabe-Warteschlangen verwenden, die dem Userspace-Treiber 120 zugeordnet sind. Die Eingabe-Ausgabe-Warteschlangen 128, 130, 132, 134 können für Eingabe-Ausgabe-Zulassungs- und Abschluss-Aufrufe verwendet werden. Der Laufzeit-Aufwand des binärverzweigten Treibers 114 kann gering oder nicht vorhanden sein und dadurch kann die Platten-Eingabe-Ausgabe-Leistung einer Anwendung, die ein Dateisystem verwendet, verbessert werden.If the userspace driver 120 It may be that the userspace driver is started (for example, initialized) 120 performs no PCI device initialization work (e.g., tasks), but the PCI device information from the shared memory space 140 and generates a logical NVMe device. The userspace driver 120 can be specified Use namespace information and input-output queues belonging to the userspace driver 120 assigned. The input-output queues 128 . 130 . 132 . 134 can be used for input-output admission and completion calls. The runtime overhead of the binary-branched driver 114 may be low or absent, and thereby the disk input-output performance of an application using a file system can be improved.

In einem Beispiel können ein Kernelspace-Treiber 116 und ein Userspace-Treiber 120 (z. B. ein NVMe-Treiber), die versuchen, eine NVMe-Vorrichtung gemeinsam zu nutzen, wie z. B. die Blockvorrichtungsspeicherung 106, so arbeiten, dass sie eine Anwendung 110 unterstützen, welche ein Dateisystem 118 verwenden kann (z. B. einen Altspeicher, eine Dateisystemspeicherungs-Intensivanwendung). Die Leseleistung der NVMe-Vorrichtung kann ein Schlüsselfaktor für die Anwendungsleistung sein, basierend darauf, ob eine Anwendung leseintensiv oder schreibintensiv ist. Im Allgemeinen hängen Schreibvorgänge einer NVMe-Vorrichtung stärker vom Dateisystem ab als Lesevorgänge einer NVMe-Vorrichtung. Eine Anwendung, wie zum Beispiel die Blockvorrichtungsspeicherung 106, welche mehr Leseoperationen und weniger Schreiboperationen verwendet, kann aus dem binärverzweigten Treiber 114 Nutzen ziehen.In an example, a kernelspace driver 116 and a userspace driver 120 (eg an NVMe driver) trying to share an NVMe device, such as The block device storage 106 So work that they have an application 110 support which a file system 118 use (for example, a legacy storage, a file system intensive storage application). The read performance of the NVMe device can be a key factor in application performance, based on whether an application is read-intensive or write-intensive. In general, writes to an NVMe device are more dependent on the file system than reads of an NVMe device. An application, such as the block device storage 106 which uses more reads and fewer writes may be from the binary-branched driver 114 To benefit.

In einem anderen Beispiel kann eine Anwendung, wie z. B. die Anwendung 112, stärker leseintensiv als schreibintensiv sein (z. B. eine Hochleistungs-Speicherungsanwendung, wie z. B. eine Datenbankanwendung). Die Anwendung 112 kann eine lokale und/oder verteilte Speicherung für eine Hash-Tabelle in einem Datendeduplikationssystem verwenden. Ein Hash-Schlüssel kann einmal geschrieben werden, wenn keine Duplikation vorliegt, aber jedes Mal beim Rückgriff auf die Hash-Tabelle gelesen werden. Entsprechend kann die Leistung des Rückgriffs auf die Hash-Tabelle ein Schlüsselfaktor für die Leistung des Datendeduplikationssystems sein. Die lokale und/oder verteilte Speicherung für eine Datenbank kann für Metadaten und/oder Datenbank-Rohdaten verwendet werden. Die Metadaten können einmal gespeichert, aber mehrfach gelesen werden. Und die Leseleistung bei der Metadatenspeicherung kann der Schlüssel für die Datenbankleistung sein. Die Anwendung 112 kann den binärverzweigten Treiber 114 so konfigurieren, dass er Leseanforderungen an den Userspace-Treiber (z. B. SPDK-NVMe-Treiber) sendet. Der binärverzweigte Treiber 114 kann Schreibanforderungen an das Kernelspace-Dateisystem senden. Bei Verwendung des binärverzweigten Treibers 114 können NVMe-Schreibanforderungen durch das Dateisystem zu dem Kernelspace-Treiber geleitet werden und NVMe-Leseanforderungen können durch die Blockschnittstelle zu dem Userspace-Treiber geleitet werden und der gemeinsam genutzte Speicher kann zum Synchronisieren der Abbildung der NVMe-Lese/Schreib-Adressen verwendet werden. Die NVMe-Leseleistung kann durch den Userspace-Treiber garantiert werden. Der Laufzeitaufwand zum Bewahren der Abbildung in dem gemeinsam genutzten Speicher kann gering sein, im Gegensatz zu einem herkömmlichen Kernelspace-Treiber, der NVMe-Lesevorgänge bearbeitet. Der Entwicklungsaufwand/die Entwicklungskosten für die NVMe-Lese/Schreib-Synchronisation kann/können durch die Kosten und die Zeit zum Entwickeln eines Userspace-Dateisystems aufgewogen werden.In another example, an application such as B. the application 112 more read-intensive than write-intensive (for example, a high-performance storage application, such as a database application). The application 112 can use local and / or distributed storage for a hash table in a data deduplication system. A hash key can be written once if there is no duplication, but it is read each time the hash table is accessed. Accordingly, the performance of the hash table access can be a key factor in the performance of the data deduplication system. Local and / or distributed storage for a database can be used for metadata and / or database raw data. The metadata can be saved once but read multiple times. And reading performance in metadata storage can be the key to database performance. The application 112 can be the binary-branched driver 114 configure to send read requests to the userspace driver (for example, SPDK NVMe drivers). The binary-branched driver 114 can send write requests to the kernelspace file system. When using the binary-branched driver 114 NVMe write requests may be passed through the file system to the kernelspace driver, and NVMe read requests may be passed through the block interface to the userspace driver, and the shared memory may be used to synchronize the mapping of the NVMe read / write addresses. The NVMe read performance can be guaranteed by the userspace driver. The runtime overhead for keeping the map in the shared memory can be small, unlike a traditional kernel space driver that handles NVMe reads. Development effort / development costs for NVMe read / write synchronization can be offset by the cost and time to develop a userspace file system.

In noch einem anderen Beispiel können zwei Anwendungen, wie z. B. die Anwendungen 110, 112, eine NVMe-Vorrichtung, wie z. B. die Blockvorrichtungsspeicherung 106, gemeinsam nutzen, wobei die Anwendung 110 die Dateisystemunterstützung aus dem Kernel-Dateisystem 118 verwendet und die Anwendung 112 keine Dateisystemunterstützung benötigt. Der binärverzweigte Treiber 114 kann NVMe-Lese/Schreib-Befehle von der Anwendung 110 zu dem Kernelspace-Treiber 116 leiten, um das Kernel-Dateisystem 118 zu verwenden, und NVMe-Lese/Schreib-Befehle von der Anwendung 112 zu dem Benutzer-Namensraum 138 leiten, um den Userspace-Treiber 120 zu verwenden.In yet another example, two applications, such as For example, the applications 110 . 112 , an NVMe device, such. The block device storage 106 to share, taking the application 110 the file system support from the kernel file system 118 used and the application 112 no file system support needed. The binary-branched driver 114 can NVMe read / write commands from the application 110 to the kernelspace driver 116 direct to the kernel file system 118 and NVMe read / write commands from the application 112 to the user namespace 138 direct to the userspace driver 120 to use.

Die Verwendung des binärverzweigten Treibers 114 kann zu keinem oder nur begrenztem Laufzeitaufwand zum Initialisieren der Konfiguration ohne Entwicklungsaufwand/-kosten führen. Ohne die Vorteile der Verwendung eines binärverzweigten Treibers, wie z. B. des binärverzweigten Treibers 114, können zwei oder mehr Anwendungen aufgrund von Hardware-Register-Konflikten zwischen einem herkömmlichen Kernel-Treiber und einem Userspace-Treiber (z. B. dem NVMe-Treiber) nicht in der Lage sein, eine oder mehrere NVMe-Treiber (z. B. Hardware) bei Verwendung mehrerer Namensräume gemeinsam zu nutzen.The use of the binary-branched driver 114 can result in no or limited runtime overhead for initializing the configuration without development overhead / cost. Without the benefits of using a binary-branched driver, such as. B. the binary-branched driver 114 For example, two or more applications may not be able to provide one or more NVMe drivers (e.g., NVMe drivers) due to hardware register conflicts between a conventional kernel driver and a userspace driver (eg, the NVMe driver) Hardware) when using multiple namespaces.

In einem anderen Beispiel kann ein Userspace-Dateisystem entwickelt und realisiert werden, um einen NVMe-Treiber (z. B. einen INTEL-SPDK-NVMe-Treiber) in dem Benutzernamensraum zu verwenden, um zu versuchen, NVMe-Lesevorgänge oder Lese- und Schreiboperationen zu beschleunigen. Jedoch kann eine Entwicklung zum Realisieren eines Userspace-Dateisystems bedeutende Zeit in Anspruch nehmen und Kosten verursachen und ein Instabilitäts- und Qualitätsrisiko für das Dateisystem bedeuten. Als ein weiteres Beispiel kann bei Verwendung eines herkömmlichen Kernelspace-Treibers zur Durchführung von NVMe-Schreibvorgängen und NVMe-Lesevorgängen unter Verwendung eines alten Kernelspace-Dateisystems die Leistungsfähigkeit von NVMe-Lese- und/oder NVMe-Lese- und -Schreiboperationen nicht garantiert werden. Überdies können relativ teure entsprechende Komponenten (z. B. eine schnellere CPU, eine 9-10xCPU) erforderlich sein, um Nachteile zu überwinden und um die maximale NVMe-Hardware-Leistung zu erreichen, die ansonsten unter Verwendung eines binärverzweigten Treibers, z. B. des binärverzweigten Treibers 114, erreicht wird. Die Entwicklung eines Userspace-Dateisystems und/oder die Verwendung von Komponenten höherer Leistungsfähigkeit (z. B. einer schnelleren CPU, einer 9-10xCPU) kann auch aufgrund eines ineffizienten Software-Stapels die Kosten steigen lassen, der aus dem jeweiligen Ansatz resultiert.In another example, a userspace file system may be developed and implemented to use an NVMe driver (eg, an INTEL SPDK NVMe driver) in the user namespace to attempt NVMe reads or read and write Accelerate write operations. However, development to realize a userspace file system can take a significant amount of time and costs, and can create instability and quality risks to the file system. As another example, using a conventional kernelspace driver to perform NVMe writes and NVMe reads using an old kernelspace file system may increase the performance of NVMe read and / or NVMe reads. Read and write operations are not guaranteed. Moreover, relatively expensive corresponding components (eg, a faster CPU, a 9-10x CPU) may be required to overcome disadvantages and to achieve the maximum NVMe hardware performance otherwise achieved using a binary-branched driver, e.g. B. the binary-branched driver 114 , is achieved. Developing a user-space file system and / or using higher-performance components (eg, a faster CPU, a 9-10x CPU) can also increase the cost associated with each approach due to an inefficient software stack.

In noch einem anderen Beispiel kann der Userspace-Treiber 120 (z. B. NVMe-Treiber) einer oder mehreren virtuellen Maschinen dienen und kann einer NVMe-Vorrichtung einen Blockdienst, z. B. die Blockvorrichtungsspeicherung 106, in einem Speicherungsnetzwerk bereitstellen. Die breite Verwendung eines NVMe-Treibers kann die Speicherung auf Vorrichtungen des Blockschnittstellentyps begrenzen, während der Kernelspace-Treiber 116 für Elemente verwendet werden kann, die von einem Treiber bereitgestellt werden (z. B. Dateisystemunterstützung) und von Anwendungen wie der Anwendung 110 verwendbar sind. Anwendungen, die für Hochleistungs-Lesevorgänge mit niedriger CPU-Nutzung und keine oder nur begrenzte Dateisystemanforderungen ausgelegt sind, wie die Anwendung 112, können jedoch den Userspace-Treiber 120 verwenden, während weder der Kernelspace-Treiber noch der Userspace-Treiber 120 die Anforderungen für Anwendungen erfüllen können, die relativ gleichermaßen sowohl Dateisystemunterstützung (z. B. schreibintensive Operationen) als auch Blockebenen-Vorrichtungsunterstützung benötigen.In yet another example, the userspace driver may be 120 (e.g., NVMe drivers) of one or more virtual machines, and may provide an NVMe device with a block service, e.g. The block device storage 106 to deploy in a storage network. The widespread use of an NVMe driver may limit storage to block interface type devices while the kernelspace driver 116 can be used for items provided by a driver (such as file system support) and applications such as the application 110 are usable. Applications designed for high-performance reads with low CPU usage and no or limited file system requirements, such as the application 112 but can use the userspace driver 120 while neither the kernelspace driver nor the userspace driver 120 can meet the requirements for applications that require relatively similar file system support (e.g., write-intensive operations) as well as block-level device support.

2 ist ein Ablaufplan eines Beispiels eines Verfahrens zum Initialisieren eines Kernelspace-Treibers gemäß einer Ausführungsform. Das Verfahren 200 kann als ein Modul oder eine entsprechende Komponente in einem Satz von Logikbefehlen realisiert werden, die in einem nichtflüchtigen, maschinen- oder computerlesbaren Speichermedium, wie z. B. einem Direktzugriffsspeicher (RAM), einem Nur-Lese-Speicher (ROM), einem programmierbaren ROM (PROM), einer Firmware, einem Flash-Speicher usw., in einer konfigurierbaren Logik, wie zum Beispiel programmierbaren Logik-Arrays (PLAs), feldprogrammierbaren Gate-Arrays (FPGAs), komplexen programmierbaren Logikvorrichtungen (CPLDs), in einer Hardware-Logik mit fester Funktionalität unter Verwendung einer Schaltungstechnologie, wie zum Beispiel einer anwendungsspezifischen integrierten Schaltung (ASIC), einer Komplementär-Metall-Oxid-Halbleiter(CMOS)- oder einer Transistor-Transistor-Logik(TTL)-Technologie, oder einer beliebigen Kombination davon gespeichert sind. Beispielsweise kann Computerprogramm-Code zum Durchführen von Operationen, die in dem Verfahren 200 dargestellt sind, in einer beliebigen Kombination einer oder mehrerer Programmiersprachen geschrieben sein, umfassend eine objektorientierte Programmiersprache wie JAVA, SMALLTALK, C++ oder Ähnliches und herkömmliche prozedurorientierte Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. 2 FIG. 10 is a flowchart of an example of a method for initializing a kernel space driver according to one embodiment. The procedure 200 may be implemented as a module or corresponding component in a set of logic instructions used in a non-volatile, machine or computer readable storage medium, such as a memory device. Random access memory (RAM), read only memory (ROM), programmable ROM (PROM), firmware, flash memory, etc., in configurable logic, such as programmable logic arrays (PLAs). Field Programmable Gate Arrays (FPGAs), Complex Programmable Logic Devices (CPLDs), in fixed-functionality hardware logic using circuit technology, such as an Application Specific Integrated Circuit (ASIC), Complementary Metal Oxide Semiconductor (CMOS) ) or a transistor-transistor-logic (TTL) technology, or any combination thereof. For example, computer program code may be used to perform operations described in the method 200 are written in any combination of one or more programming languages, including an object-oriented programming language such as JAVA, SMALLTALK, C ++ or the like and conventional procedural programming languages such as the "C" programming language or similar programming languages.

Im dargestellten Verarbeitungsblock 202 wird für eine Initialisierung des Kernel-Treibers gesorgt, der mit einem Kernel-Dateisystem verbunden ist. Im dargestellten Verarbeitungsblock 204 wird für ein Laden von Benutzerkonfigurationsinformationen gesorgt, umfassend Warteschlangen- und Namensraum-Aufteilungsinformationen. Im dargestellten Verarbeitungsblock 206 wird für ein Erzeugen mehrerer NVMe-Hardware-Warteschlangenpaare gesorgt, und wenn keine Namensräume existieren, Erzeugen eines oder mehrerer Namensräume (z. B. eines oder mehrerer Binärverzweiger-Namensraumpaare) in einer Datenstruktur in einem gemeinsam genutzten Speicherraum eines Host-Speichers. Der Host-Speicher kann einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfassen, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet. Der nichtflüchtige Speicher kann eine Dateisystem-Vorrichtungsspeicherung und eine NVMe-Blockvorrichtungsspeicherung umfassen. Auf den gemeinsam genutzten Speicherraum kann durch ein Binärverzweiger-Namensraumpaar, welches einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst, ein oder mehrere Kernel-Warteschlangenpaare, den Benutzer-Namensraum und ein oder mehrere Userspace-Warteschlangenpaare zugegriffen werden. Im dargestellten Verarbeitungsblock 206 wird außerdem für ein Erzeugen des Kernel-Namensraums, eines oder mehrerer Kernel-Warteschlangenpaare, des Benutzer-Namensraums und eines oder mehrerer Userspace-Warteschlangenpaare in dem Host-Speicher gesorgt. Im dargestellten Verarbeitungsblock 208 wird für eine Zuordnung des Kernel-Namensraums und des einen oder der mehreren Kernel-Warteschlangenpaare zu dem Kernelspace-Treiber gesorgt. Im dargestellten Verarbeitungsblock 210 wird für eine Zuteilung einer Eingabe-Ausgabe-Warteschlangen-Unterbrechungsroutine für ein Befehlsabschlussverfahren gesorgt. Im dargestellten Verarbeitungsblock 212 wird für eine Zuordnung von Warteschlangenpaaren zu dem Userspace-Treiber gesorgt. Im dargestellten Verarbeitungsblock 214 wird für einen Export einer Speichersteuerungs-Identitätsstruktur (z. B. NVMe-Steuerungs-Identitätsstruktur), einer Eingabe-Ausgabe-Warteschlangenstruktur und einer Namensraum-Identitäts-Datenstruktur zu einem gemeinsam genutzten Speicher und ein Aktualisieren der Datenstruktur(en) mit Kernel-Warteschlangenpaar-Metadaten gesorgt, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren. Im dargestellten Verarbeitungsblock 216 wird für eine Registrierung der Vorrichtung in dem Treiber gesorgt, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.In the illustrated processing block 202 will initialize the kernel driver connected to a kernel file system. In the illustrated processing block 204 loading user configuration information including queue and namespace partitioning information is provided. In the illustrated processing block 206 generating a plurality of NVMe hardware queue pairs, and if there are no namespaces, creating one or more namespaces (eg, one or more binary branch name pairs) in a data structure in a shared memory space of a host memory. The host memory may include a volatile memory and / or a nonvolatile memory, wherein the host memory includes a driver, wherein the driver manages the kernel space driver via the binary branched driver. The nonvolatile memory may include file system device storage and NVMe block storage. The shared memory space may be accessed by a binary branch name pair, which includes a kernel namespace and a user namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs. In the illustrated processing block 206 it also provides for generating the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host memory. In the illustrated processing block 208 An assignment of the kernel namespace and the one or more kernel queue pairs to the kernelspace driver is provided. In the illustrated processing block 210 an allocation of an input-output queuing interrupt routine for a command completion process is provided. In the illustrated processing block 212 An assignment of queue pairs to the user space driver is provided. In the illustrated processing block 214 for an export of a storage control identity structure (eg, NVMe Control Identity Structure), an input-output queue structure, and a namespace identity data structure to a shared memory Updating the data structure (s) with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs. In the illustrated processing block 216 a registration of the device in the driver is provided, the device being the NVMe block device storage.

Nun übergehend zu 3, ist dort ein Beispiel eines Ablaufplans eines Verfahrens 300 zum Initialisieren eines binärverzweigten Treibers gemäß einer Ausführungsform dargestellt. Der binärverzweigte Treiber kann einer sein, wie oben in Bezug auf den binärverzweigten Treiber 114 beschrieben, wie in 1 dargestellt. Das Verfahren 300 kann als ein Modul oder eine entsprechende Komponente in einem Satz von Logikbefehlen realisiert werden, die in einem nichtflüchtigen, maschinen- oder computerlesbaren Speichermedium, wie einem RAM, einem ROM, einem PROM, einer Firmware, einem Flash-Speicher usw., in einer konfigurierbaren Logik, wie zum Beispiel PLAs, FPGAs, CPLDs, in einer Hardware-Logik mit fester Funktionalität unter Verwendung einer Schaltungstechnologie, wie zum Beispiel einer ASIC-, einer CMOS- oder einer TTL-Technologie, oder einer beliebigen Kombination davon gespeichert sind.Now over to 3 , there is an example of a schedule of a procedure 300 for initializing a binary-branched driver according to an embodiment. The binary-branched driver may be one as above with respect to the binary-branched driver 114 described as in 1 shown. The procedure 300 can be implemented as a module or corresponding component in a set of logic instructions used in a non-volatile, machine or computer readable storage medium, such as RAM, ROM, PROM, firmware, flash memory, etc., in a configurable Logic, such as PLAs, FPGAs, CPLDs, are stored in fixed-functionality hardware logic using circuit technology, such as ASIC, CMOS, or TTL technology, or any combination thereof.

Im dargestellten Verarbeitungsblock 302 wird für eine Initialisierung des Userspace-Treibers unter Verwendung der Datenstruktur-Metadaten aus dem gemeinsam genutzten Speicherraum gesorgt. Im dargestellten Verarbeitungsblock 304 wird für ein Laden/Abrufen von Benutzerkonfigurationsinformationen und Speichersteuerungs-Identitätsinformationen (z. B. NVMe-Steuerungs-Identitätsinformationen), umfassend beispielsweise die Datenstruktur-Metadaten, umfassend die Speichersteuerungs-Identitätsstruktur (z. B. NVMe-Steuerungs-Identitätsstruktur), aus dem gemeinsam genutzten Speicher gesorgt. Im dargestellten Verarbeitungsblock 306 wird für ein Laden der Eingabe-Ausgabe-Warteschlangen-Datenstruktur, der Eingabe-Ausgabe-Warteschlangenstruktur und der Namensraum-Identitäts-Datenstruktur und der Kernel-Warteschlangenpaar-Metadaten gesorgt. Im dargestellten Verarbeitungsblock 308 wird für eine Erzeugung einer Vorrichtung (z. B. NVMe-Blockvorrichtung) auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten (z. B. Namensrauminformationen) gesorgt. Der Benutzerraumtreiber kann ein Aufrufmodus-Treiber sein. Im dargestellten Verarbeitungsblock 310 wird für ein Aufrufen des Threads für Eingabe-Ausgabe- und Abschlussaktualisierungen und für ein Aktualisieren der Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten gesorgt. Im dargestellten Verarbeitungsblock 312 wird für eine Registrierung einer Blockvorrichtungs-Schnittstelle (z. B. eines Blockdienst-Dämons) zu der Vorrichtung in dem Userspace-Treiber gesorgt, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.In the illustrated processing block 302 Initialization of the userspace driver is accomplished using the data structure metadata from the shared memory space. In the illustrated processing block 304 is for loading / retrieving user configuration information and storage control identity information (e.g., NVMe control identity information) including, for example, the data structure metadata comprising the storage control identity structure (e.g., NVMe control identity structure) from shared storage taken care of. In the illustrated processing block 306 loading of the input-output queue data structure, the input-output queue structure and the namespace identity data structure and the kernel queue pair metadata is provided. In the illustrated processing block 308 A device (e.g., NVMe block device) is created based on the user configuration information and data structure metadata (eg, namespace information). The user space driver may be a call mode driver. In the illustrated processing block 310 will be invoked to invoke the thread for input-output and completion updates, and to update the data structure with the user-space queue-pair metadata. In the illustrated processing block 312 For example, a registration of a block device interface (eg, a block service daemon) to the device in the userspace driver is provided, which device is the NVMe block device storage.

4 ist ein Blockschaubild 400 eines Beispiels einer hohen Rate an Lesetransaktionen je Sekunde (TPS) für eine Datenbankanwendung gemäß einer Ausführungsform. Der binärverzweigte Treiber 402 kann dem Userspace-Treiber 404 und dem Kernelspace-Treiber 406 gleichzeitig Zugriff zu einer NVMe-Vorrichtung gewähren, wie oben in Bezug auf die Blockvorrichtungsspeicherung 106 beschrieben, wie in 1 dargestellt, um für eine hohe TPS-Rate für eine Datenbankanwendung 408 zu sorgen. Der Userspace-Treiber 404 und der Kernelspace-Treiber 406 können einen Namensraum 410 der Vorrichtung gemeinsam nutzen, so dass der Userspace-Treiber 404 und der Kernelspace-Treiber 406 eine logische Blockadressierung (LBA) lesen/schreiben können (z. B. eine Verschiebung der Plattenkapazität, welche die Stelle von Datenblöcken spezifiziert, die in einer Speicherungsvorrichtung gespeichert sind). Der Kernelspace-Treiber 406 kann eine Lese/Schreib-Unterstützung unter Verwendung eines Kernel-Dateisystems 412 für kleine dedizierte Datenbank-Anwendungsdateien (z. B. mittlere Dateikapazität < 1GB) bereitstellen, wie z. B. Write-Ahead-Protokolldateien 414 und Redo-Protokolldateien 416. Für sehr große Datenbank-Anwendungsdateien (z. B. mittlere Dateikapazität >= 1 GB), wie z. B. eine Datenbank-Sorted-String-Table(SST)-Datei 418, kann die Datenbankanwendung 408 den Kernelspace-Treiber 406 für Schreibvorgänge verwenden und die Datenbankanwendung 408 kann den Userspace-Treiber 404 für Lesevorgänge verwenden. Die Entscheidung, ob der Userspace-Treiber 404 oder der Kernelspace-Treiber 406 verwendet wird, kann auf der Leseintensität und/oder der Schreibintensität einer Anwendung und/oder von Dateien basieren, die von der Anwendung verwendet werden, um (z. B. für leseintensive Arbeitsbeanspruchungen) die Lese-TPS zu erhöhen. 4 is a block diagram 400 an example of a high rate of read transactions per second (TPS) for a database application according to one embodiment. The binary-branched driver 402 can the userspace driver 404 and the kernelspace driver 406 concurrently grant access to an NVMe device as described above with respect to the block device storage 106 described as in 1 shown for a high TPS rate for a database application 408 to care. The userspace driver 404 and the kernelspace driver 406 can have a namespace 410 Share the device so that the userspace driver 404 and the kernelspace driver 406 can read / write a logical block addressing (LBA) (e.g., a shift in disk capacity specifying the location of data blocks stored in a storage device). The kernelspace driver 406 can provide read / write support using a kernel file system 412 for small dedicated database application files (eg, average file capacity <1GB), such as: B. Write-ahead log files 414 and redo log files 416 , For very large database application files (eg medium file capacity> = 1 GB), such as: A database-sorted-string-table (SST) file 418, the database application can 408 the kernelspace driver 406 to use for writes and the database application 408 can the userspace driver 404 for read operations. Deciding if the userspace driver 404 or the kernelspace driver 406 may be based on the read intensity and / or write intensity of an application and / or files used by the application to increase (eg, for read-intensive workloads) the read TPS.

5 ist ein Blockschaubild 500 eines Beispiels einer Anwendung 502 mit hoher Dateizugriffsnutzung gemäß einer Ausführungsform. Ein binärverzweigter Treiber 504 kann einen Userspace-Treiber 506 und einen Kernelspace-Treiber 508 umfassen. Die Anwendung 502 kann einen hohen Dateizugriff zum Speichern von (z. B. Schreibvorgänge) und Zugreifen auf (z. B. Lesevorgänge) Metadaten in einer Schlüsselwertmaschine 510 verwenden, welche lokal statt entfernt sein kann. Bei Verwendung des binärverzweigten Treibers 504 kann eine NVMe-Vorrichtung mit mehreren Namensräumen konfiguriert sein, umfassend zum Beispiel einen Kernel-Namensraum 512, welcher für eine Key-Value-Maschinen-Backend-Speicherung (z. B. Dateien niedriger Kapazität, mittlere Dateikapazität < 1 GB) unter Verwendung eines Kernel-Dateisystems 514 genutzt werden kann, und den Benutzer-Namensraum 516, welcher für eine Datenspeicherung unter Verwendung der Blockvorrichtungsspeicherung genutzt werden kann (z. B. für große Dateien, mittlere Dateikapazität >= 1 GB). Die Blockvorrichtungsspeicherung kann eine sein, wie oben in Bezug auf die Blockvorrichtungsspeicherung 106 beschrieben, wie in 1 dargestellt. 5 is a block diagram 500 an example of an application 502 high file access usage according to one embodiment. A binary-branched driver 504 can be a userspace driver 506 and a kernelspace driver 508 include. The application 502 may require high file access to store (e.g., write) and access (eg, read) metadata in a key-value machine 510 which can be local instead of remote. When using the binary-branched driver 504 For example, an NVMe device having multiple namespaces may be configured, including, for example, a kernel namespace 512 which is for a key value machine backend storage (eg, low capacity files, average file capacity <1 GB) using a kernel file system 514 can be used, and the user namespace 516 , which one can be used for data storage using block storage (eg for large files, average file capacity> = 1 GB). The block device storage may be one, as above with respect to the block device storage 106 described as in 1 shown.

6 ist ein Blockschaubild 600 eines Beispiels zweier unabhängiger Anwendungen 602, 604, welche eine NVMe-Vorrichtung gemeinsam nutzen, gemäß einer Ausführungsform. Die NVMe-Vorrichtung kann eine sein, wie oben in Bezug auf die Blockvorrichtungsspeicherung 106 beschrieben, wie in 1 dargestellt. Der binärverzweigte Treiber 606 kann einen Kernelspace-Treiber 608 mit Unterstützung des Kernel-Dateisystems 610 und einen Userspace-Treiber 612 umfassen und mehrere logische Unterteilungen bereitstellen und/oder erzeugen, umfassend einen Kernel-Namensraum 614 und einen Benutzer-Namensraum 616, die entsprechenden Anwendungen 602, 604 zugeordnet sind, die von dem Kernelspace-Treiber 608 und dem Userspace-Treiber 612 bedient werden. 6 is a block diagram 600 an example of two independent applications 602 . 604 which share an NVMe device, according to one embodiment. The NVMe device may be one as above with respect to the block device storage 106 described as in 1 shown. The binary-branched driver 606 can be a kernelspace driver 608 with the support of the kernel file system 610 and a userspace driver 612 and provide and / or generate a plurality of logical partitions comprising a kernel namespace 614 and a user namespace 616 , the appropriate applications 602 . 604 are assigned by the kernelspace driver 608 and the userspace driver 612 to be served.

7 ist ein Blockschaubild 700 eines Beispiels eines Prozessorkerns 701 gemäß einer Ausführungsform. Der Prozessorkern 701 kann der Kern für einen beliebigen Prozessortyp sein, z. B. einen Mikroprozessor, einen eingebetteten Prozessor, einen digitalen Signalprozessor (DSP), einen Netzwerkprozessor oder eine andere Vorrichtung zum Ausführen von Code. Obwohl in 7 nur ein Prozessorkern 701 dargestellt ist, kann ein Verarbeitungselement alternativ mehr als einen von dem in 7 dargestellten Prozessorkern 701 umfassen. Der Prozessorkern 701 kann ein einfädiger Kern sein, oder der Prozessorkern 701 kann für mindestens eine Ausführungsform mehrfädig sein, dadurch, dass er mehr als einen Hardware-Thread-Kontext (oder „logischen Prozessor“) je Kern umfassen kann. 7 is a block diagram 700 an example of a processor core 701 according to one embodiment. The processor core 701 may be the core for any type of processor, eg. A microprocessor, an embedded processor, a digital signal processor (DSP), a network processor or other device for executing code. Although in 7 just a processor core 701 Alternatively, a processing element may alternatively comprise more than one of the ones shown in FIG 7 represented processor core 701 include. The processor core 701 can be a single core, or the processor core 701 may be multi-threaded for at least one embodiment in that it may include more than one hardware thread context (or "logical processor") per core.

7 veranschaulicht außerdem einen Speicher 707, der mit dem Prozessorkern 701 verbunden ist. Der Speicher 707 kann einer aus einer breiten Vielfalt von Speichern sein (umfassend verschiedene Speicherhierarchieschichten), wie sie dem Fachmann bekannt oder auf andere Weise zugänglich sind. Der Speicher 771 kann einen oder mehrere Befehle des Codes 713 umfassen, die von dem Prozessorkern 701 auszuführen sind, wobei der Code 713 das Verfahren 200 (2) und/oder das Verfahren 300 (3) realisieren kann, die bereits beschrieben wurden. Der Prozessorkern 701 folgt einer Programmsequenz von Befehlen, die von dem Code 713 angezeigt werden. Jeder Befehl kann in einen Front-End-Abschnitt 711 eintreten und von einem oder mehreren Decodern 721 verarbeitet werden. Der Decoder 721 kann als seine Ausgabe eine Mikrooperation erzeugen, wie z. B. eine Mikrooperation fester Breite in einem vorgegebenen Format, oder kann andere Befehle, Mikrobefehle oder Steuersignale erzeugen, welche den ursprünglichen Code-Befehl reflektieren. Der veranschaulichte Front-End-Abschnitt 711 umfasst außerdem eine Register-Neubenennungslogik 725 und eine Ablaufplanungslogik 731, welche im Allgemeinen Ressourcen zuteilen und die Operation, die dem umgewandelten Befehl entspricht, zur Ausführung in eine Warteschlange einreihen. 7 also illustrates a memory 707 that with the processor core 701 connected is. The memory 707 may be one of a wide variety of memories (including various memory hierarchy layers) as known to those skilled in the art or otherwise available. The memory 771 can be one or more commands of the code 713 include that from the processor core 701 are to execute, the code 713 the procedure 200 ( 2 ) and / or the method 300 ( 3 ), which have already been described. The processor core 701 follows a program sequence of commands issued by the code 713 are displayed. Each command can be in a front-end section 711 occur and by one or more decoders 721 are processed. The decoder 721 can generate as its output a micro-operation such. A fixed-width micro-operation in a predetermined format, or may generate other instructions, micro-instructions or control signals reflecting the original code instruction. The illustrated front-end section 711 also includes register renaming logic 725 and scheduling logic 731 which generally allocates resources and queues the operation corresponding to the converted instruction for execution.

Der Prozessorkern 701 ist so dargestellt, dass er eine Ausführungslogik 751 umfasst, welche einen Satz von Ausführungseinheiten 755-1 bis 755-N aufweist. Einige Ausführungsformen können eine Anzahl von Ausführungseinheiten umfassen, die für spezielle Funktionen oder Gruppen von Funktionen dediziert sind. Andere Ausführungsformen können nur eine Ausführungseinheit umfassen, oder eine Ausführungseinheit, die eine bestimmte Funktion ausführen kann. Die dargestellte Ausführungslogik 751 führt die Operationen durch, die von den Code-Befehlen spezifiziert werden.The processor core 701 is shown as having an execution logic 751 includes a set of execution units 755 - 1 to 755-N having. Some embodiments may include a number of execution units dedicated to particular functions or groups of functions. Other embodiments may include only one execution unit, or an execution unit that may perform a particular function. The illustrated execution logic 751 performs the operations specified by the code instructions.

Nach Abschluss der Ausführung der Operationen, die von den Code-Befehlen spezifiziert sind, legt die Back-End-Logik 761 die Befehle des Codes 713 still. In einer Ausführungsform ermöglicht der Prozessorkern 701 eine Ausführung außerhalb der Reihenfolge, benötigt aber eine Stilllegung der Befehle in der Reihenfolge. Eine Stilllegungslogik 765 kann eine Vielfalt von Formen annehmen, wie dem Fachmann bekannt ist (z. B. Neuordnungspuffer oder Ähnliches). Auf diese Weise kann der Prozessorkern 701 während der Ausführung des Codes 713 umgewandelt werden, zumindest in Form der Ausgabe, die von dem Decoder erzeugt wird, der Hardware-Register und Tabellen, die von der Register-Neubenennungslogik 725 verwendet werden, und aller Register (nicht dargestellt), die von der Ausführungslogik 751 modifiziert werden.Upon completion of the execution of the operations specified by the code instructions, the back-end logic sets 761 the commands of the code 713 quiet. In one embodiment, the processor core allows 701 an out-of-order execution, but requires a quiesce of commands in that order. A decommissioning logic 765 may take a variety of forms, as known to those of skill in the art (eg, reorder buffers or the like). That way, the processor core can 701 while executing the code 713 be converted, at least in the form of the output generated by the decoder, the hardware registers and tables generated by the register renaming logic 725 and all registers (not shown) used by the execution logic 751 be modified.

Wenngleich in 7 nicht dargestellt, kann ein Verarbeitungselement andere Elemente auf einem Chip mit dem Prozessorkern 701 umfassen. Beispielsweise kann ein Verarbeitungselement eine Speichersteuerungslogik zusammen mit dem Prozessorkern 701 umfassen. Das Verarbeitungselement kann eine I/O-Steuerungslogik umfassen und/oder kann eine mit der Speichersteuerungslogik integrierte I/O-Steuerungslogik umfassen. Das Verarbeitungselement kann außerdem einen oder mehrere Cache-Speicher umfassen.Although in 7 not shown, a processing element may have other elements on a chip with the processor core 701 include. For example, a processing element may include memory control logic along with the processor core 701 include. The processing element may include I / O control logic and / or may include I / O control logic integrated with the memory control logic. The processing element may also include one or more caches.

Der Speicher kann extern des Prozessors angeordnet sein (z. B. externer Speicher) und/oder kann mit dem Prozessor verbunden sein, zum Beispiel durch einen Speicherbus. Außerdem kann der Speicher als Hauptspeicher realisiert sein. Der Speicher kann beispielsweise flüchtigen Speicher, nichtflüchtigen Speicher usw. oder Kombinationen davon umfassen. Beispielsweise kann der Speicher dynamischen Direktzugriffsspeicher (DRAM), der als ein oder mehrere Speichermodule konfiguriert ist, wie zum Beispiel Dual-Inline-Speichermodule (DIMMs), Small-Outline-DIMMs (SODIMMs) usw., Nur-Lese-Speicher (ROM) (z. B. programmierbaren Nur-Lese-Speicher (PROM), löschbaren PROM (EPROM), elektrisch EPROM (EEPROM) usw.), Phasenwechselspeicher (Phase Change Memory, PCM) usw. oder Kombinationen davon umfassen. Der Speicher kann ein Matrixfeld von Speicherzellen umfassen, die in Reihen und Spalten angeordnet sind und in unabhängig adressierbare Speicherstellen partitioniert sind. Der Prozessor und/oder das Betriebssystem können mit dem Speicher eine Sekundärspeicher-Speicherung nutzen, um die Leistungsfähigkeit, die Kapazität und die Flexibilität zu verbessern.The memory may be external to the processor (eg, external memory) and / or may be connected to the processor, for example, a memory bus. In addition, the memory may be realized as main memory. The memory may, for example, be volatile memory, nonvolatile memory, etc., or combinations thereof. For example, the memory may be dynamic random access memory (DRAM) configured as one or more memory modules, such as dual inline memory modules (DIMMs), small outline DIMMs (SODIMMs), etc., read only memory (ROM). (e.g., programmable read only memory (PROM), erasable PROM (EPROM), electrically EPROM (EEPROM), etc.), phase change memory (PCM), etc., or combinations thereof. The memory may comprise a matrix array of memory cells arranged in rows and columns and partitioned into independently addressable memory locations. The processor and / or the operating system may use secondary memory storage with the memory to improve performance, capacity, and flexibility.

Nicht-beschränkende Beispiele für nichtflüchtigen Speicher können beliebige oder eine Kombination aus Folgenden umfassen: Halbleiterspeicher (z. B. planarer oder 3-dimensionaler (3D) NAND-Flash-Speicher oder NOR-Flash-Speicher), 3D-Kreuzpunktspeicher, Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial (z. B. Chalkogenidglas) verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischer Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher (z. B. ferroelektrischer Polymerspeicher), ferroelektrischer Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher, elektrisch löschbarer programmierbarer Nur-Lese-Speicher, verschiedene andere Typen nichtflüchtiger Direktzugriffsspeicher (RAMs) und Speicher mit magnetischer Speicherung. In einigen Ausführungsformen kann ein 3D-Kreuzpunktspeicher eine transistorfreie stapelbare Kreuzpunktarchitektur umfassen, bei welcher die Speicherzellen am Schnittpunkt von Wortleitungen und Bitleitungen sitzen und individuell adressierbar sind und bei welcher eine Bitspeicherung auf einem Wechsel des Bahnwiderstands basiert. In bestimmten Ausführungsformen kann ein Speichermodul mit nichtflüchtigem Speicher einen oder mehrere Standards, die vom Joint Electron Device Engineering Council (JEDEC) herausgegeben wurden, wie z. B. JESD218, JESD219, JESD220-1, JESD223B, JESD223-1, oder einen anderen geeigneten Standard einhalten (die hierin zitierten JEDEC-Standards sind unter jedec.org einsehbar).Non-limiting examples of nonvolatile memory may include any or a combination of the following: semiconductor memory (eg, planar or 3-dimensional (3D) NAND flash memory or NOR flash memory), 3D crosspoint memory, memory devices using a chalcogenide phase change material (eg, chalcogenide glass), byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide-nitride-oxide-silicon (SONOS) memory, polymer memory (e.g., ferroelectric polymer memory), ferroelectric Transistor Random Access Memory (Fe-TRAM), Ovonik Memory, Nanowire Memory, Electrically Erasable Programmable Read Only Memory, Various Other Non-Volatile Random Access Memory (RAM) Types, and Magnetic Storage Memory. In some embodiments, a 3-D crosspoint memory may include a transistorless stackable crosspoint architecture in which the memory cells are located at the intersection of word lines and bit lines and individually addressable, and where bit storage is based on a change in track resistance. In certain embodiments, a nonvolatile memory module may include one or more standards issued by the Joint Electron Device Engineering Council (JEDEC), such as: JESD218, JESD219, JESD220-1, JESD223B, JESD223-1, or any other suitable standard (the JEDEC standards cited herein are available at jedec.org).

Flüchtiger Speicher ist ein Speichermedium, welches Strom benötigt, um den Zustand von Daten, die durch das Medium gespeichert werden, aufrechtzuerhalten. Beispiele für flüchtigen Speicher können verschiedene Typen von Direktzugriffsspeicher (RAM) umfassen, wie z. B. dynamischen Direktzugriffsspeicher (DRAM) oder statischen Direktzugriffsspeicher (SRAM). Ein spezieller DRAM-Typ, der in einem Speichermodul verwendet werden kann, ist synchroner dynamischer Direktzugriffsspeicher (SDRAM). In speziellen Ausführungsformen hält der DRAM der Speichermodule einen Standard ein, der von der JEDEC herausgegeben wurde, wie z. B. JESD79F für Double-Data-Rate(DDR)-SDRAM, JESD79-2F für DDR2-SDRAM, JESD79-3F für DDR3-SDRAM oder JESD79-4A für DDR4-SDRAM (diese Standards sind unter www.jedec.org einsehbar). Solche Standards (und ähnliche Standards) können als Standards auf DDR-Basis bezeichnet werden und Kommunikationsschnittstellen der Speichervorrichtungen, die solche Standards realisieren, können als Schnittstellen auf DDR-Basis bezeichnet werden.Volatile memory is a storage medium that requires power to maintain the state of data stored by the medium. Examples of volatile memory may include various types of random access memory (RAM), such as: Dynamic random access memory (DRAM) or static random access memory (SRAM). One particular type of DRAM that may be used in a memory module is Synchronous Dynamic Random Access Memory (SDRAM). In particular embodiments, the DRAM of the memory modules complies with a standard issued by the JEDEC, such as, for example, US Pat. Eg JESD79F for Double Data Rate (DDR) SDRAM, JESD79-2F for DDR2 SDRAM, JESD79-3F for DDR3 SDRAM or JESD79-4A for DDR4 SDRAM (these standards are available at www.jedec.org) , Such standards (and similar standards) may be referred to as DDR-based standards, and communication interfaces of the memory devices that implement such standards may be referred to as DDR-based interfaces.

Nun Bezug nehmend auf 8, ist dort ein Blockschaubild einer Ausführungsform eines Computersystems 800 gemäß einer Ausführungsform dargestellt. Dargestellt ist in 8 ein Multiprozessorsystem 800, welches ein erstes Verarbeitungselement 870 und ein zweites Verarbeitungselement 880 umfasst. Obwohl zwei Verarbeitungselemente 870 und 880 dargestellt sind, versteht es sich, dass eine Ausführungsform des Systems 800 auch lediglich ein solches Verarbeitungselement umfassen kann.Now referring to 8th Figure 4 is a block diagram of one embodiment of a computer system 800 represented according to an embodiment. Is shown in 8th a multiprocessor system 800 which is a first processing element 870 and a second processing element 880 includes. Although two processing elements 870 and 880 It should be understood that one embodiment of the system 800 may also comprise only such a processing element.

Das System 800 ist als ein Punkt-zu-Punkt-Verbindungssystem dargestellt, wobei das erste Verarbeitungselement 870 und das zweite Verarbeitungselement 880 über eine Punkt-zu-Punkt-Verbindung 850 verbunden sind. Es versteht sich, dass beliebige oder alle der Verbindungen, die in 8 dargestellt sind, statt als Punkt-zu-Punkt-Verbindungen als Mehrfachauskopplungsbus realisiert sein können.The system 800 is shown as a point-to-point connection system, wherein the first processing element 870 and the second processing element 880 over a point-to-point connection 850 are connected. It is understood that any or all of the compounds described in U.S. Pat 8th instead of being realized as point-to-point connections as a multiple drop-out bus.

Wie in 8 dargestellt, kann es sich bei jedem der Verarbeitungselemente 870 und 880 um mehrkernige Prozessoren handeln, welche erste und zweite Prozessorkerne (d.h. Prozessorkerne 874a und 874b und Prozessorkerne 884a und 884b) umfassen. Solche Kerne 874a, 874b, 884a, 884b können so konfiguriert sein, dass sie Befehls-Code auf eine ähnliche Weise ausführen, wie oben in Verbindung mit 7 beschrieben. Die Kerne können einen oder mehrere Befehle ausführen, wie z. B. einen Lesebefehl, einen Schreibbefehl, einen Löschbefehl, einen Verschiebungsbefehl, einen arithmetischen Befehl, einen Steuerbefehl usw. oder Kombinationen davon. Die Kerne können beispielsweise einen oder mehrere Befehle zum Verschieben von Daten (z. B. Programmdaten, OperationsCode, Operanden usw.) zwischen einem Cache-Speicher oder einem Register (nicht dargestellt) und dem Speicher und/oder der Sekundärspeicher-Speicherung, zum Lesen der Daten aus dem Speicher, zum Schreiben der Daten in den Speicher, zum Durchführen einer arithmetischen Operation unter Verwendung der Daten (z. B. Addieren, Subtrahieren, eine bitweise Operation, Vergleichen usw.), zum Durchführen einer Steuerungsoperation in Verbindung mit den Daten (z. B. Verzweigen usw.) usw. oder Kombinationen davon ausführen. Die Befehle können eine beliebige Code-Darstellung umfassen, wie zum Beispiel Binärcode, Oktalcode und/oder Hexadezimalcode (z. B. Maschinensprache), symbolischen Code (z. B. Assemblersprache), Dezimalcode, alphanumerischen Code, Code einer höheren Programmiersprache usw. oder Kombinationen davon. So kann beispielsweise Hexadezimalcode verwendet werden, um einen Operationscode (z. B. Op-Code) eines x86-Befehlssatzes darzustellen, umfassend einen Byte-Wert „00“ für eine Additionsoperation, einen Byte-Wert „8B“ für eine Verschiebungsoperation, einen Byte-Wert „FF“ für eine Vorwärtszähl/Rückwärtszähl-Operation usw.As in 8th As shown, each of the processing elements may be 870 and 880 polynuclear processors, which are first and second processor cores (ie, processor cores 874a and 874b and processor cores 884a and 884b ). Such cores 874a . 874b . 884a . 884b can be configured to execute command code in a similar manner to that described above 7 described. The cores can execute one or more commands, such as: A read command, a write command, a clear command, a move command, an arithmetic command, a control command, etc., or combinations thereof. For example, the cores may read one or more instructions to move data (eg, program data, opcodes, operands, etc.) between a cache memory or a register (not shown) and the memory and / or secondary memory storage the data from the memory, writing the data to the memory, performing an arithmetic operation using the data (e.g., adding, subtracting, bitwise operation, comparing, etc.) to perform a Perform control operation in conjunction with the data (eg, branching, etc.), etc., or combinations thereof. The instructions may include any code representation, such as binary code, octal code and / or hexadecimal code (e.g., machine language), symbolic code (eg, assembly language), decimal code, alphanumeric code, higher-level language code, etc., or Combinations of it. For example, hexadecimal code may be used to represent an opcode (eg, opcode) of an x86 instruction set, including a byte value "00" for an add operation, a byte value "8B" for a move operation, a byte Value "FF" for a count-up / count-down operation, etc.

Jedes Verarbeitungselement 870, 880 kann mindestens einen gemeinsam genutzten Cache-Speicher 899a, 899b umfassen. Der gemeinsam genutzte Cache-Speicher 899a, 899b kann Daten (z. B. Befehle) speichern, die von einer oder mehreren Komponenten des Prozessors verwendet werden, z. B. von den Kernen 874a, 874b bzw. 884a, 884b. Beispielsweise kann der gemeinsam genutzte Cache-Speicher 899a, 899b Daten, die in einem Speicher 832, 834 gespeichert sind, für einen schnelleren Zugriff durch Komponenten des Prozessors lokal cache-speichern. In einer oder mehreren Ausführungsformen kann der gemeinsam genutzte Cache-Speicher 899a, 899b einen oder mehrere Cache-Speicher mittlerer Ebene, z. B. Ebene 2 (Level 2, L2), Ebene 3 (L3), Ebene 4 (L4) oder andere Cache-Ebenen, einen Cache-Speicher letzter Ebene (Last Level Cache, LLC) und/oder Kombinationen davon umfassen.Each processing element 870 . 880 can have at least one shared cache 899a . 899b include. The shared cache 899a . 899b may store data (eg, instructions) used by one or more components of the processor, e.g. From the cores 874a . 874b respectively. 884a . 884b , For example, the shared cache 899a . 899b Data stored in a memory 832 . 834 cache locally for faster access by components of the processor. In one or more embodiments, the shared cache memory may 899a . 899b one or more middle level caches, e.g. Level 2 (L2), Level 3 (L3), Level 4 (L4) or other cache levels, Last Level Cache (LLC), and / or combinations thereof.

Obwohl mit lediglich zwei Verarbeitungselementen 870, 880 dargestellt, versteht es sich, dass der Umfang der Ausführungsformen nicht darauf beschränkt ist. In anderen Ausführungsformen können in einem gegebenen Prozessor ein oder mehrere zusätzliche Verarbeitungselemente vorhanden sein. Alternativ können ein oder mehrere Verarbeitungselemente 870, 880 ein anderes Element als ein Prozessor sein, z. B. ein Beschleuniger oder ein feldprogrammierbares Gate-Array. Beispielsweise kann ein zusätzliches Verarbeitungselement bzw. können zusätzliche Verarbeitungselemente einen zusätzlichen Prozessor bzw. zusätzliche Prozessoren, welche die gleichen sind wie ein erster Prozessor 870, einen zusätzlichen Prozessor bzw. zusätzliche Prozessoren, welche heterogen oder asymmetrisch zu einem ersten Prozessor 870 sind, Beschleuniger (z. B. Graphikbeschleuniger oder digitale Signalverarbeitungs(DSP)-Einheiten), feldprogrammierbare Gate-Arrays oder ein beliebiges anderes Verarbeitungselement umfassen. Es kann eine Vielfalt von Unterschieden zwischen den Verarbeitungselementen 870, 880 in Bezug auf ein Spektrum von Leistungsmetriken geben, umfassend Architektur-, Mikroarchitektur-, Wärme-, Stromverbrauchseigenschaften und Ähnliches. Diese Unterschiede können sich im Ergebnis als Asymmetrie und Heterogenität unter den Verarbeitungselementen 870, 880 manifestieren. Für mindestens eine Ausführungsform können die Verarbeitungselemente 870, 880 in demselben Die-Package angeordnet sein.Although with only two processing elements 870 . 880 As illustrated, it should be understood that the scope of the embodiments is not limited thereto. In other embodiments, one or more additional processing elements may be present in a given processor. Alternatively, one or more processing elements 870 . 880 be an element other than a processor, e.g. An accelerator or a field programmable gate array. For example, an additional processing element (s) may include an additional processor or processors that are the same as a first processor 870 , an additional processor or processors that are heterogeneous or asymmetric to a first processor 870 , accelerators (eg, graphics accelerators or digital signal processing (DSP) units), field programmable gate arrays, or any other processing element. There can be a variety of differences between the processing elements 870 . 880 in terms of a spectrum of performance metrics, including architectural, microarchitectural, thermal, power consumption, and the like. These differences may result in asymmetry and heterogeneity among the processing elements 870 . 880 manifest. For at least one embodiment, the processing elements 870 . 880 be arranged in the same die package.

Das erste Verarbeitungselement 870 kann ferner eine Speichersteuerungslogik (MC) 872 und Punkt-zu-Punkt(P-P)-Schnittstellen 876 und 878 umfassen. In ähnlicher Weise kann das zweite Verarbeitungselement 880 eine MC 882 und P-P-Schnittstellen 886 und 888 umfassen. Wie in 8 dargestellt, verbinden die MCs 872 und 882 die Prozessoren mit entsprechenden Speichern, nämlich einem Speicher 832 und einem Speicher 834, welche Teile des Hauptspeichers sein können, die lokal an den entsprechenden Prozessoren befestigt sind. Obwohl die MC 872 und 882 als in die Verarbeitungselemente 870, 880 integriert dargestellt ist, kann die MC-Logik für alternative Ausführungsformen eine diskrete Logik außerhalb der Verarbeitungselemente 870, 880 sein, anstatt darin integriert zu sein.The first processing element 870 furthermore, a memory control logic (MC) may be provided 872 and point-to-point (PP) interfaces 876 and 878 include. Similarly, the second processing element 880 an MC 882 and PP interfaces 886 and 888 include. As in 8th shown, connect the MCs 872 and 882 the processors with corresponding memories, namely a memory 832 and a memory 834 which may be parts of the main memory which are locally attached to the respective processors. Although the MC 872 and 882 as in the processing elements 870 . 880 is integrated, the MC logic for alternative embodiments may have discrete logic outside of the processing elements 870 . 880 instead of being integrated into it.

Das erste Verarbeitungselement 870 und das zweite Verarbeitungselement 880 können über P-P-Verbindungen 876 bzw. 886 mit einem I/O-Teilsystem 890 verbunden sein. Wie in 8 dargestellt, umfasst das I/O-Teilsystem 890 P-P-Schnittstellen 894 und 898. Ferner umfasst das I/O-Teilsystem 890 eine Schnittstelle 892 zum Verbinden des I/O-Teilsystems 890 mit einer Hochleistungs-Graphikmaschine 838. In einer Ausführungsform kann ein Bus 849 verwendet werden, um die Graphikmaschine 838 mit dem I/O-Teilsystem 890 zu verbinden. Alternativ können diese Komponenten durch eine Punkt-zu-Punkt-Verbindung verbunden sein.The first processing element 870 and the second processing element 880 can via PP connections 876 respectively. 886 with an I / O subsystem 890 be connected. As in 8th shown includes the I / O subsystem 890 PP interfaces 894 and 898 , It also includes the I / O subsystem 890 an interface 892 to connect the I / O subsystem 890 with a high performance graphics engine 838 , In one embodiment, a bus 849 used to be the graphics engine 838 with the I / O subsystem 890 connect to. Alternatively, these components may be connected by a point-to-point connection.

Im Gegenzug kann das I/O-Teilsystem 890 über eine Schnittstelle 896 mit einem ersten Bus 816 verbunden sein. In einer Ausführungsform kann der erste Bus 816 ein Peripheral-Component-Interconnect(PCI)-Bus oder ein Bus wie z. B. ein PCI-Express-Bus oder ein anderer I/O-Verbindungsbus der dritten Generation sein, wenngleich der Umfang der Ausführungsformen nicht darauf beschränkt ist.In turn, the I / O subsystem 890 via an interface 896 with a first bus 816 be connected. In an embodiment, the first bus 816 a Peripheral Component Interconnect (PCI) bus or a bus such. A PCI Express bus or other third generation I / O connection bus, although the scope of the embodiments is not so limited.

Wie in 8 dargestellt, können verschiedene I/O-Vorrichtungen 814 (z. B. Lautsprecher, Kameras, Sensoren) mit dem ersten Bus 816 verbunden sein, neben einer Busbrücke 818, welche den ersten Bus 816 mit einem zweiten Bus 820 verbinden kann. In einer Ausführungsform kann der zweite Bus 820 ein Bus mit niedriger Pin-Zahl (Low Pin Count, LPC) sein. Mit dem zweiten Bus 820 können verschiedene Vorrichtungen verbunden sein, zum Beispiel eine Tastatur/Maus 812, eine Kommunikationsvorrichtung(en) 826 und eine Datenspeicherungseinheit 819, wie z. B. ein Plattenlaufwerk oder eine andere Massenspeicherungsvorrichtung, welche in einer Ausführungsform Code 830 umfassen kann. Der dargestellte Code 830 kann das Verfahren 200 (2) und/oder das Verfahren 300 (3) realisieren, die bereits beschrieben wurden, und kann dem Code 713 (7), der bereits beschrieben wurde, ähnlich sein. Ferner kann eine Audio-I/O 824 mit dem zweiten Bus 820 verbunden sein und eine Batterie 810 kann das Computersystem 800 mit Strom versorgen.As in 8th As shown, different I / O devices may be used 814 (eg speakers, cameras, sensors) with the first bus 816 be connected, next to a bus bridge 818 , which is the first bus 816 with a second bus 820 can connect. In one embodiment, the second bus 820 a low pin count (LPC) bus. With the second bus 820 For example, various devices may be connected, for example a keyboard / mouse 812 , a communication device (s) 826 and a data storage unit 819 , such as As a disk drive or other mass storage device, which in a Embodiment code 830 may include. The code shown 830 can the procedure 200 ( 2 ) and / or the method 300 ( 3 ), which have already been described, and can be the code 713 ( 7 ), which has already been described, be similar. Furthermore, an audio I / O 824 with the second bus 820 be connected and a battery 810 can the computer system 800 supply electricity.

Es sei angemerkt, dass andere Ausführungsformen in Erwägung gezogen werden. Beispielsweise kann ein System statt der Punkt-zu-Punkt-Architektur der 8 einen Mehrfachauskopplungsbus oder eine andere derartige Kommunikationstopologie realisieren. Außerdem können die Elemente der 8 alternativ mit mehr oder weniger integrierten Chips partitioniert sein, als in 8 dargestellt.It should be noted that other embodiments are contemplated. For example, instead of the point-to-point architecture of the system, a system can 8th realize a multi-drop bus or other such communication topology. In addition, the elements of the 8th alternatively be partitioned with more or less integrated chips than in 8th shown.

Weitere Anmerkungen und Beispiele:Further comments and examples:

Beispiel 1 kann ein System umfassen, umfassend einen Host-Speicher, der einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, und eine Speichersteuerung, die kommunikativ mit dem Host-Speicher verbunden ist, wobei die Speichersteuerung einen binärverzweigten Treiber zum Verarbeiten einer oder mehrerer Speicherzugriffsanforderungen zum Zugreifen auf den Speicher umfasst, wobei der binärverzweigte Treiber einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber umfasst, der kommunikativ mit einer Vorrichtung verbunden ist.Example 1 may include a system comprising a host memory including a volatile memory and / or a non-volatile memory, and a memory controller communicatively coupled to the host memory, the memory controller comprising a binary-branched driver for processing one or more of the memory Memory access requests for accessing the memory, wherein the binary-branched driver comprises a kernel space driver communicatively connected to a kernel file system and a userspace driver communicatively connected to a device.

Beispiel 2 kann das System des Beispiels 1 umfassen, ferner umfassend einen Treiber-Binärverzweiger zum Erzeugen des binärverzweigten Treibers, wobei der Treiber-Binärverzweiger Benutzerkonfigurationsinformationen abruft, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen empfangen werden, die dafür modifiziert sind, den binärverzweigten Treiber zu nutzen, und wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen.Example 2 may include the system of Example 1, further comprising a driver binarizer for generating the binary-branched driver, wherein the driver binarizer retrieves user configuration information used to configure the binary-branched driver, the user configuration information comprising a number of input-output Queues and a number of namespaces for use with the kernelspace driver and the userspace driver, wherein the one or more memory access requests are received from one or more applications modified to utilize the binary-branched driver, and wherein the one or more applications comprise a read-intensive application and / or a write-intensive application.

Beispiel 3 kann das System des Beispiels 2 umfassen, wobei der Treiber-Binärverzweiger den Kernelspace-Treiber initialisiert, wobei der Treiber-Binärverzweiger eine Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers erzeugt, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Namensraumpaar Zugriffsmöglichkeit besteht, wobei das Binärverzweiger-Namensraumpaar einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine Non-Volatile-Memory(NVM)-express(NVMe)-Blockvorrichtungsspeicherung umfasst. Der Treiber-Binärverzweiger erzeugt ferner in dem Host-Speicher den Kernel-Namensraum, ein oder mehrere Kernel-Warteschlangenpaare, den Benutzer-Namensraum und ein oder mehrere Userspace-Warteschlangenpaare, ordnet den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare dem Kernelspace-Treiber zu, aktualisiert die Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren, und registriert die Vorrichtung in dem Treiber, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Example 3 may include the system of Example 2 wherein the driver binarizer initializes the kernelspace driver, wherein the driver binarizer generates a data structure in a shared memory space of the host memory, the host memory including a driver Driver manages the kernel space driver via the binarized driver, wherein the shared memory space is accessed via a namespace pair, the binarizer name space pair comprising a kernel namespace and a user namespace, the nonvolatile memory comprising a file system device storage and a non-volatile memory -Volatile Memory (NVM) Express (NVMe) Block Device Storage. The driver binarizer also generates in the host memory the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs, associates the kernel namespace and the one or more kernel queue pairs Kernelspace driver, updates the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs, and registers the device in the driver, the device being NVMe block storage.

Beispiel 4 kann das System des Beispiels 3 umfassen, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.Example 4 may include the system of Example 3, where the data structure comprises data structure metadata that includes one or more of admission queue physical addresses, completion queue physical addresses, and queue address or queue orphan queue physical addresses.

Beispiel 5 kann das System des Beispiels 3 umfassen, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Example 5 may include the system of Example 3, wherein the one or more kernel queue pairs comprise one or more of a management queue pair comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair comprising a driver admission queue and a driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue.

Beispiel 6 kann das System des Beispiels 3 umfassen, wobei der Treiber-Binärverzweiger unter Verwendung der Datenstruktur-Metadaten den Userspace-Treiber initialisiert, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei der Treiber-Binärverzweiger die Benutzerkonfigurationsinformationen und die Datenstruktur-Metadaten abruft, die Vorrichtung auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten erzeugt, die Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten aktualisiert und bei dem Userspace-Treiber eine Blockvorrichtungs-Schnittstelle zu der Vorrichtung registriert.Example 6 may include the system of Example 3, where the driver bin is initializing the user space driver using the data structure metadata, where the userspace driver is a call mode driver, wherein the driver bin is the user configuration information and the data structure metadata generates the device based on the user configuration information and the data structure metadata, updates the data structure with the user-space queue-pair metadata, and registers a block device interface with the device to the user-space driver.

Beispiel 7 kann das System des Beispiels 3 umfassen, wobei der binärverzweigte Treiber kommunikativ mit der Speichersteuerung verbunden ist und wobei der binärverzweigte Treiber von der einen oder den mehreren Anwendungen die eine oder die mehreren Speicherzugriffsanforderungen empfängt, auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers verarbeitet, unter Verwendung eines oder mehrerer aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen aktualisiert und unter Verwendung der Speichersteuerung die Datenstruktur synchronisiert. Example 7 may include the system of Example 3 wherein the binary-branched driver is communicatively coupled to the memory controller and wherein the binary-branched driver receives the one or more memory access requests from the one or more applications to the file system device storage and / or the NVMe Block memory storage, which processes one or more memory access requests using the binary-branched driver, using one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user space queue pairs updated based on the one or more memory access requests, and synchronizes the data structure using the memory controller.

Beispiel 8 kann das System des Beispiels 3 umfassen, wobei der flüchtige Speicher Direktzugriffsspeicher (RAM) umfasst, z. B. eines oder mehrere aus dynamischem Direktzugriffsspeicher (DRAM), statischem Direktzugriffsspeicher (SRAM) und synchronem dynamischen Direktzugriffsspeicher (SDRAM), und wobei der nichtflüchtige Speicher nichtflüchtige Direktzugriffsspeicher umfasst, z. B. Halbleiterspeicher, 3D-Kreuzpunktspeicher, eine oder mehrere Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher, z. B. ferroelektrischen Polymerspeicher, ferroelektrischen Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher und/oder elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), wobei der Halbleiterspeicher planaren oder 3-dimensionalen (3D) NAND-Flash-Speicher und/oder NOR-Flash-Speicher umfasst, wobei der 3D-Kreuzpunktspeicher mindestens eines aus einer transistorfreien stapelbaren Kreuzpunktarchitektur umfasst, wobei die Speicherzellen an einem Schnittpunkt von Wortleitungen und Bitleitungen sitzen und die Speicherzellen individuell adressierbar sind, und die Bitspeicherung basiert auf einem Wechsel des Bahnwiderstands.Example 8 may include the system of Example 3, wherein the volatile memory comprises Random Access Memory (RAM), e.g. One or more of Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), and Synchronous Dynamic Random Access Memory (SDRAM), and wherein nonvolatile memory includes nonvolatile random access memory, e.g. Semiconductor memory, 3D crosspoint memory, one or more memory devices using a chalcogenide phase change material, byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide nitride oxide silicon (SONOS) memory, polymer memory, e.g. B. ferroelectric polymer memory, ferroelectric transistor random access memory (Fe-TRAM), Ovonikspeicher, nanowire memory and / or electrically erasable programmable read-only memory (EEPROM), wherein the semiconductor memory planar or 3-dimensional (3D) NAND flash memory and wherein the 3D crosspoint memory comprises at least one of a non-transistor stackable crosspoint architecture, wherein the memory cells are located at an intersection of word lines and bit lines and the memory cells are individually addressable, and the bit storage is based on a change in the track resistance ,

Beispiel 9 kann das System des Beispiels 8 umfassen, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, der binärverzweigte Treiber die eine oder die mehreren Speicherzugriffsanforderungen zu dem Userspace-Treiber leitet.Example 9 may include the system of Example 8, where, if the one or more memory access requests is a read request, the binary-branched driver directs the one or more memory access requests to the userspace driver.

Beispiel 10 kann das System eines der Beispiele 2 bis 8 umfassen, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, der binärverzweigte Treiber die eine oder die mehreren Speicherzugriffsanforderungen zu dem Kernelspace-Treiber leitet.Example 10 may include the system of any of Examples 2 through 8, wherein if the one or more memory access requests is a write request, the binary branch driver directs the one or more memory access requests to the kernelspace driver.

Beispiel 11 kann ein Verfahren zum gemeinsamen Nutzen einer Non-Volatile-Memory(NVM)-express(NVMe)-Vorrichtung umfassen, umfassend Erzeugen eines binärverzweigte Treibers unter Verwendung eines Prozessors, der mit einem Host-Speicher verbunden ist, wobei der Host-Speicher einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber umfasst, der kommunikativ mit einer Vorrichtung verbunden ist, und Verarbeiten einer oder mehrerer Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher unter Verwendung des binärverzweigten Treibers.Example 11 may include a method of sharing a Non-Volatile Memory (NVM) Express (NVMe) device, comprising generating a binary-branched driver using a processor connected to a host memory, wherein the host memory a volatile memory and / or a non-volatile memory, the binary-branched driver comprising a kernel space driver communicatively connected to a kernel file system and a userspace driver communicatively connected to a device and processing one or more Memory access requests for accessing the non-volatile memory using the binary-branched driver.

Beispiel 12 kann das Verfahren des Beispiels 11 umfassen, ferner umfassend Empfangen der einen oder der mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen, die dafür modifiziert sind, den binärverzweigten Treiber zu verwenden, wobei das Erzeugen des binärverzweigten Treibers Abrufen von Benutzerkonfigurationsinformationen, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, unter Verwendung eines Treiber-Binärverzweigers umfasst, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen und wobei die eine oder die mehreren Speicherzugriffsanforderungen eine Leseanforderung und/oder eine Schreibanforderung umfassen.Example 12 may include the method of Example 11, further comprising receiving the one or more memory access requests from one or more applications modified to use the binary-branched driver, wherein generating the binary-branched driver retrieves user configuration information that is used to configure the binary-branched driver using a driver binarizer, the user configuration information comprising a number of input-output queues and a number of namespaces for use with the kernelspace driver and the userspace driver, one or more of multiple applications comprise a read-intensive application and / or a write-intensive application, and wherein the one or more memory access requests comprise a read request and / or a write request.

Beispiel 13 kann das Verfahren des Beispiels 12 umfassen, ferner umfassend Initialisieren des Kernelspace-Treibers, umfassend Erzeugen einer Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Namensraumpaar Zugriffsmöglichkeit besteht, umfassend einen Kernel-Namensraum und einen Benutzer-Namensraum, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine NVMe-Blockvorrichtungsspeicherung umfasst. Das Initialisieren des Kernelspace-Treibers umfasst ferner Erzeugen des Kernel-Namensraums, eines oder mehrerer Kernel-Warteschlangenpaare, des Benutzer-Namensraums und eines oder mehrerer Userspace-Warteschlangenpaare in dem Host-Speicher, Zuordnen des Kernel-Namensraums und des einen oder der mehreren Kernel-Warteschlangenpaare zu dem Kernelspace-Treiber, Aktualisieren der Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren, und Registrieren der Vorrichtung in dem Treiber, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Example 13 may include the method of Example 12, further comprising initializing the kernel space driver, comprising generating a data structure in a shared memory space of the host memory, wherein the host memory comprises a driver, wherein the driver drives the kernel space driver via the kernel space driver a shared-name random access memory, comprising a kernel namespace and a user namespace, the nonvolatile memory comprising file system device storage and NVMe block storage. Initializing the kernel space driver further includes generating the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host memory, associating the kernel name space Kernel namespace and the one or more kernel queue pairs to the kernelspace driver, updating the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs, and registering the device in the kernel Driver, where the device is the NVMe block device storage.

Beispiel 14 kann das Verfahren des Beispiels 13 umfassen, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.Example 14 may include the method of Example 13, wherein the data structure comprises data structure metadata comprising one or more of admission queue physical addresses, completion queue physical addresses, and queue queue or queue address physical address queuing physical addresses.

Beispiel 15 kann das Verfahren des Beispiels 13 umfassen, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Example 15 may include the method of Example 13, wherein the one or more kernel queue pairs comprises one or more of a management queue pair comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair comprising a driver admission queue and a driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue.

Beispiel 16 kann das Verfahren des Beispiels 13 umfassen, ferner umfassend Initialisieren des Userspace-Treibers unter Verwendung der Datenstruktur-Metadaten, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei das Initialisieren des Userspace-Treibers Abrufen der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten, Erzeugen der Vorrichtung auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten, Aktualisieren der Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten und Registrieren einer Blockvorrichtungs-Schnittstelle zu der Vorrichtung bei dem Userspace-Treiber umfasst.Example 16 may include the method of Example 13, further comprising initializing the userspace driver using the data structure metadata, the user space driver being a call mode driver, wherein initializing the userspace driver retrieving the user configuration information and the data structure metadata , Generating the device based on the user configuration information and the data structure metadata, updating the data structure with the user space queue pair metadata, and registering a block device interface with the device at the user space driver.

Beispiel 17 kann das Verfahren des Beispiels 13 umfassen, ferner umfassend Empfangen der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers von der einen oder den mehreren Anwendungen, um auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, Verarbeiten der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers, Aktualisieren eines oder mehrerer aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung einer Speichersteuerung, die kommunikativ mit dem binärverzweigten Treiber verbunden ist, und Synchronisieren der Datenstruktur unter Verwendung der Speichersteuerung.Example 17 may include the method of Example 13, further comprising receiving the one or more memory access requests using the binary-branched driver from the one or more applications to access the file system device storage and / or the NVMe block device storage or the plurality of memory access requests using the binary-branched driver, updating one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user-space queue pairs based on the one or more Memory access requests using a memory controller communicatively connected to the binary-branched driver, and synchronizing the data structure using the memory controller.

Beispiel 18 kann das Verfahren des Beispiels 13 umfassen, wobei der flüchtige Speicher Direktzugriffsspeicher (RAM) umfasst, z. B. dynamischen Direktzugriffsspeicher (DRAM), statischen Direktzugriffsspeicher (SRAM) und/oder synchronen dynamischen Direktzugriffsspeicher (SDRAM), und wobei der nichtflüchtige Speicher nichtflüchtige Direktzugriffsspeicher umfasst, z. B. Halbleiterspeicher, 3D-Kreuzpunktspeicher, eine oder mehrere Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher, z. B. ferroelektrischen Polymerspeicher, ferroelektrischen Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher und/oder elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), wobei der Halbleiterspeicher planaren oder 3-dimensionalen (3D) NAND-Flash-Speicher und/oder NOR-Flash-Speicher umfasst, wobei der 3D-Kreuzpunktspeicher mindestens eines aus einer transistorfreien stapelbaren Kreuzpunktarchitektur umfasst, wobei die Speicherzellen an einem Schnittpunkt von Wortleitungen und Bitleitungen sitzen und die Speicherzellen individuell adressierbar sind, und die Bitspeicherung basiert auf einem Wechsel des Bahnwiderstands.Example 18 may include the method of Example 13, wherein the volatile memory comprises Random Access Memory (RAM), e.g. Dynamic random access memory (DRAM), static random access memory (SRAM) and / or synchronous dynamic random access memory (SDRAM), and wherein the nonvolatile memory comprises nonvolatile random access memory, e.g. Semiconductor memory, 3D crosspoint memory, one or more memory devices using a chalcogenide phase change material, byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide nitride oxide silicon (SONOS) memory, polymer memory, e.g. B. ferroelectric polymer memory, ferroelectric transistor random access memory (Fe-TRAM), Ovonikspeicher, nanowire memory and / or electrically erasable programmable read-only memory (EEPROM), wherein the semiconductor memory planar or 3-dimensional (3D) NAND flash memory and wherein the 3D crosspoint memory comprises at least one of a non-transistor stackable crosspoint architecture, wherein the memory cells are located at an intersection of word lines and bit lines and the memory cells are individually addressable, and the bit storage is based on a change in the track resistance ,

Beispiel 19 kann eines der Beispiele 12 bis 18 umfassen, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Userspace-Treiber geleitet werden, und wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Kernelspace-Treiber geleitet werden.Example 19 may include any of Examples 12-18, wherein if the one or more memory access requests is a read request, the one or more memory access requests are directed to the userspace driver using the binary-branched driver, and wherein if the one or more memory access requests is a write request, routing the one or more memory access requests to the kernelspace driver using the binary-branched driver.

Beispiel 20 kann mindestens ein computerlesbares Speichermedium umfassen, umfassend einen Satz von Befehlen, welche, wenn sie von einer Computervorrichtung ausgeführt werden, bewirken, dass die Computervorrichtung unter Verwendung eines Prozessors, der mit einem Host-Speicher verbunden ist, einen binärverzweigten Treiber erzeugt, wobei der Host-Speicher einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber umfasst, der kommunikativ mit einer Vorrichtung verbunden ist, und unter Verwendung des binärverzweigten Treibers eine oder mehrere Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher verarbeitet.Example 20 may include at least one computer-readable storage medium comprising a set of instructions that, when executed by a computing device, causes the computing device to generate a binary-branched driver using a processor coupled to a host memory the host memory comprises a volatile memory and / or a nonvolatile memory, wherein the binary-branched driver comprises a kernelspace driver communicatively coupled to a kernel file system and a userspace driver communicatively coupled to a device, and using the binary-branched driver, one or more memory access requests to access the nonvolatile memory processed.

Beispiel 21 kann das mindestens eine computerlesbare Speichermedium des Beispiels 20 umfassen, wobei die Befehle, wenn sie ausgeführt werden, bewirken, dass eine Computervorrichtung die eine oder die mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen empfängt, die dafür modifiziert sind, den binärverzweigten Treiber zu nutzen, unter Verwendung eines Treiber-Binärverzweigers den binärverzweigten Treiber erzeugt, umfassend Abrufen von Benutzerkonfigurationsinformationen, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen und wobei die eine oder die mehreren Speicherzugriffsanforderungen eine Leseanforderung und/oder eine Schreibanforderung umfassen.Example 21 may include the at least one computer-readable storage medium of Example 20, wherein the instructions, when executed, cause a computing device to receive the one or more memory access requests from one or more applications modified to utilize the binary-branched driver , generates the binary-branched driver using a driver binarizer, comprising retrieving user configuration information used to configure the binary-branched driver, the user configuration information comprising a number of input-output queues and a number of namespaces to be used for the kernelspace Driver and the userspace driver, wherein the one or more applications comprise a read-intensive application and / or a write-intensive application, and wherein the one or more memory access requests are a read request and / or or include a write request.

Beispiel 22 kann das mindestens eine computerlesbare Speichermedium des Beispiels 21 umfassen, wobei die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung den Kernelspace-Treiber initialisiert, wobei das Initialisieren des Kernelspace-Treibers ferner bewirkt, dass die Computervorrichtung eine Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers erzeugt, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Namensraumpaar Zugriffsmöglichkeit besteht, umfassend einen Kernel-Namensraum und einen Benutzer-Namensraum, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine Non-Volatile-Memory(NVM)-express(NVMe)-Blockvorrichtungsspeicherung umfasst. Das Initialisieren des Kernelspace-Treibers kann bewirken, dass die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung den Kernel-Namensraum, ein oder mehrere Kernel-Warteschlangenpaare, den Benutzer-Namensraum und ein oder mehrere Userspace-Warteschlangenpaare in dem Host-Speicher erzeugt, den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare dem Kernelspace-Treiber zuordnet, die Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten aktualisiert, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren, und die Vorrichtung in dem Treiber registriert, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Example 22 may include the at least one computer-readable storage medium of example 21, wherein the instructions, when executed, further cause the computing device to initialize the kernelspace driver, wherein initializing the kernelspace driver further causes the computing device to construct a data structure in a shared memory space of the host memory, wherein the host memory comprises a driver, wherein the driver manages the kernel space driver via the binary branched driver, the shared memory space being accessible via a name space pair comprising a kernel namespace and a user namespace, wherein the nonvolatile memory includes file system device storage and Non-Volatile Memory (NVM) Express (NVMe) block device storage. Initializing the kernelspace driver may cause the instructions, when executed, to further cause the computing device to specify the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host Generates memory, maps the kernel namespace and the one or more kernel queue pairs to the kernelspace driver, updates the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs, and registers the device in the driver, the device being the NVMe block device storage.

Beispiel 23 kann das mindestens eine computerlesbare Speichermedium des Beispiels 22 umfassen, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.Example 23 may include the at least one computer-readable storage medium of Example 22, the data structure comprising data structure metadata comprising one or more of admission queue physical addresses, completion queue physical addresses, and queue address or queue-size physical queue addresses.

Beispiel 24 kann das mindestens eine computerlesbare Speichermedium des Beispiels 22 umfassen, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Example 24 may include the at least one computer readable storage medium of example 22, wherein the one or more kernel queue pairs comprise one or more of a management queue pair comprising a management admission queue and a management completion queue, and one or more of a driver input device. An output queue pair, comprising a driver admission queue and a driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue.

Beispiel 25 kann das mindestens eine computerlesbare Speichermedium des Beispiels 22 umfassen, wobei die Befehle, wenn sie ausgeführt werden, bewirken, dass eine Computervorrichtung den Userspace-Treiber unter Verwendung der Datenstruktur-Metadaten initialisiert, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei das Initialisieren des Userspace-Treibers ferner bewirkt, dass die Computervorrichtung die Benutzerkonfigurationsinformationen und die Datenstruktur-Metadaten abruft, auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten die Vorrichtung erzeugt, die Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten aktualisiert und eine Blockvorrichtungs-Schnittstelle zu der Vorrichtung bei dem Userspace-Treiber registriert.Example 25 may include the at least one computer-readable storage medium of Example 22, wherein the instructions, when executed, cause a computing device to initialize the userspace driver using the data structure metadata, where the userspace driver is a call-mode driver, wherein initializing the userspace driver further causes the computing device to retrieve the user configuration information and the data structure metadata, generate the device based on the user configuration information and the data structure metadata, update the data structure with the user-space queue-pair metadata, and update a block device Interface to the device registered with the userspace driver.

Beispiel 26 kann das mindestens eine computerlesbare Speichermedium des Beispiels 22 umfassen, wobei der flüchtige Speicher Direktzugriffsspeicher (RAM) umfasst, z. B. dynamischen Direktzugriffsspeicher (DRAM), statischen Direktzugriffsspeicher (SRAM) und/oder synchronen dynamischen Direktzugriffsspeicher (SDRAM), und wobei der nichtflüchtige Speicher nichtflüchtige Direktzugriffsspeicher umfasst, z. B. Halbleiterspeicher, 3D-Kreuzpunktspeicher, eine oder mehrere Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher, z. B. ferroelektrischen Polymerspeicher, ferroelektrischen Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher und/oder elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), wobei der Halbleiterspeicher planaren oder 3-dimensionalen (3D) NAND-Flash-Speicher und/oder NOR-Flash-Speicher umfasst, wobei der 3D-Kreuzpunktspeicher mindestens eines aus einer transistorfreien stapelbaren Kreuzpunktarchitektur umfasst, wobei die Speicherzellen an einem Schnittpunkt von Wortleitungen und Bitleitungen sitzen und die Speicherzellen individuell adressierbar sind, und die Bitspeicherung basiert auf einem Wechsel des Bahnwiderstands.Example 26 may include the at least one computer-readable storage medium of Example 22, wherein the volatile storage comprises Random Access Memory (RAM), e.g. Dynamic random access memory (DRAM), static random access memory (SRAM) and / or synchronous dynamic random access memory (SDRAM), and wherein the nonvolatile memory comprises nonvolatile random access memory, e.g. Semiconductor memory, 3D crosspoint memory, one or more Memory devices using a chalcogenide phase change material, byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide-nitride-oxide-silicon (SONOS) memory, polymer memory, e.g. B. ferroelectric polymer memory, ferroelectric transistor random access memory (Fe-TRAM), Ovonikspeicher, nanowire memory and / or electrically erasable programmable read-only memory (EEPROM), wherein the semiconductor memory planar or 3-dimensional (3D) NAND flash memory and wherein the 3D crosspoint memory comprises at least one of a non-transistor stackable crosspoint architecture, wherein the memory cells are located at an intersection of word lines and bit lines and the memory cells are individually addressable, and the bit storage is based on a change in the track resistance ,

Beispiel 27 kann das mindestens eine computerlesbare Speichermedium eines der Beispiele 22 bis 26 umfassen, wobei die Befehle, wenn sie ausgeführt werden, bewirken, dass eine Computervorrichtung durch den binärverzweigten Treiber die eine oder die mehreren Speicherzugriffsanforderungen von der einen oder den mehreren Anwendungen empfängt, auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers verarbeitet, unter Verwendung der Speichersteuerung, die kommunikativ mit dem binärverzweigten Treiber verbunden ist, auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen eines oder mehrere aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren aktualisiert und die Datenstruktur unter Verwendung der Speichersteuerung synchronisiert, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Userspace-Treiber geleitet werden, und wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Kernelspace-Treiber geleitet werden.Example 27 may include the at least one computer-readable storage medium of any of Examples 22 to 26, wherein the instructions, when executed, cause a computing device to receive the one or more memory access requests from the one or more applications through the binary-branched driver accessing the file system device storage and / or the NVMe block device storage processing the one or more memory access requests using the binary-branched driver using the memory controller communicatively coupled to the binary-branched driver based on the one or more memory access requests of the one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user space queue pairs and updates the data structure using the store synchronization, wherein if the one or more memory access requests is a read request, the one or more memory access requests are routed to the user space driver using the binary-branched driver, and wherein if one or more of the memory access requests multiple memory access requests is a write request that one or more memory access requests are routed to the kernelspace driver using the binary-branched driver.

Beispiel 28 kann ein System umfassen, umfassend ein Mittel zum Erzeugen eines binärverzweigte Treibers unter Verwendung eines Prozessors, der mit einem Host-Speicher verbunden ist, wobei der Host-Speicher einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber umfasst, der kommunikativ mit einer Vorrichtung verbunden ist, und Verarbeiten einer oder mehrerer Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher unter Verwendung des binärverzweigten Treibers.Example 28 may include a system comprising means for generating a binary-branched driver using a processor connected to a host memory, wherein the host memory comprises a volatile memory and / or a nonvolatile memory, the binary-branched driver having a A kernel space driver communicatively connected to a kernel file system and comprising a userspace driver communicatively coupled to a device, and processing one or more memory access requests to access the nonvolatile memory using the binary branched driver.

Beispiel 29 kann das System des Beispiels 28 umfassen, ferner umfassend ein Mittel zum Empfangen der einen oder der mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen, die dafür modifiziert sind, den binärverzweigten Treiber zu verwenden, wobei das Mittel zum Erzeugen des binärverzweigten Treibers Abrufen von Benutzerkonfigurationsinformationen, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, unter Verwendung eines Treiber-Binärverzweigers umfasst, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen und wobei die eine oder die mehreren Speicherzugriffsanforderungen eine Leseanforderung und/oder eine Schreibanforderung umfassen.Example 29 may include the system of Example 28, further comprising means for receiving the one or more memory access requests from one or more applications modified to use the binary-branched driver, wherein the means for generating the binary-branched driver retrieves user configuration information used to configure the binary-branched driver using a driver binarizer, the user configuration information comprising a number of input-output queues and a number of namespaces for use with the kernelspace driver and the userspace driver, wherein the one or more applications comprise a read-intensive application and / or a write-intensive application, and wherein the one or more memory access requests comprise a read request and / or a write request.

Beispiel 30 kann das System des Beispiels 28 umfassen, ferner umfassend ein Mittel zum Initialisieren des Kernelspace-Treibers, umfassend ein Mittel zum Erzeugen einer Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Binärverzweiger-Namensraumpaar Zugriffsmöglichkeit besteht, umfassend einen Kernel-Namensraum und einen Benutzer-Namensraum, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine NVMe-Blockvorrichtungsspeicherung umfasst. Das Initialisieren des Kernelspace-Treibers kann ferner ein Mittel zum Erzeugen des Kernel-Namensraums, eines oder mehrerer Kernel-Warteschlangenpaare, des Benutzer-Namensraums und eines oder mehrerer Userspace-Warteschlangenpaare in dem Host-Speicher, ein Mittel zum Zuordnen des Kernel-Namensraums und des einen oder der mehreren Kernel-Warteschlangenpaare zu dem Kernelspace-Treiber, ein Mittel zum Aktualisieren der Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren, und ein Mittel zum Registrieren der Dateisystem-Vorrichtungsspeicherung in dem Treiber umfassen, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Example 30 may include the system of Example 28, further comprising means for initializing the kernelspace driver, comprising means for generating a data structure in a shared memory space of the host memory, the host memory comprising a driver, the driver manages the kernel space driver via the binarized driver, wherein the shared memory space is accessible via a binarizer name space pair comprising a kernel namespace and a user namespace, the nonvolatile storage comprising file system device storage and NVMe block storage. Initializing the kernelspace driver may further include means for generating the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host memory, means for mapping the kernel namespace, and the one or more kernel queue pairs to the kernel space driver, means for updating the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs, and means for registering the file system Device storage in the driver, the device being the NVMe block device storage.

Beispiel 31 kann das System des Beispiels 30 umfassen, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen. Example 31 may include the system of Example 30, wherein the data structure comprises data structure metadata that includes one or more of admission queue physical addresses, completion queue physical addresses, and queue queue or queue address physical queue addresses.

Beispiel 32 kann das System des Beispiels 30 umfassen, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Example 32 may include the system of Example 30, wherein the one or more kernel queue pairs comprise one or more of a management queue pair comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair comprising a driver admission queue and a driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue.

Beispiel 33 kann das System des Beispiels 30 umfassen, wobei der flüchtige Speicher Direktzugriffsspeicher (RAM) umfasst, z. B. dynamischen Direktzugriffsspeicher (DRAM), statischen Direktzugriffsspeicher (SRAM) und/oder synchronen dynamischen Direktzugriffsspeicher (SDRAM), und wobei der nichtflüchtige Speicher nichtflüchtige Direktzugriffsspeicher umfasst, z. B. Halbleiterspeicher, 3D-Kreuzpunktspeicher, eine oder mehrere Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher, z. B. ferroelektrischen Polymerspeicher, ferroelektrischen Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher und/oder elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), wobei der Halbleiterspeicher planaren oder 3-dimensionalen (3D) NAND-Flash-Speicher und/oder NOR-Flash-Speicher umfasst, wobei der 3D-Kreuzpunktspeicher mindestens eines aus einer transistorfreien stapelbaren Kreuzpunktarchitektur umfasst, wobei die Speicherzellen an einem Schnittpunkt von Wortleitungen und Bitleitungen sitzen und die Speicherzellen individuell adressierbar sind, und die Bitspeicherung basiert auf einem Wechsel des Bahnwiderstands.Example 33 may include the system of Example 30, wherein the volatile memory includes Random Access Memory (RAM), e.g. Dynamic random access memory (DRAM), static random access memory (SRAM) and / or synchronous dynamic random access memory (SDRAM), and wherein the nonvolatile memory comprises nonvolatile random access memory, e.g. Semiconductor memory, 3D crosspoint memory, one or more memory devices using a chalcogenide phase change material, byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide nitride oxide silicon (SONOS) memory, polymer memory, e.g. B. ferroelectric polymer memory, ferroelectric transistor random access memory (Fe-TRAM), Ovonikspeicher, nanowire memory and / or electrically erasable programmable read-only memory (EEPROM), wherein the semiconductor memory planar or 3-dimensional (3D) NAND flash memory and wherein the 3D crosspoint memory comprises at least one of a non-transistor stackable crosspoint architecture, wherein the memory cells are located at an intersection of word lines and bit lines and the memory cells are individually addressable, and the bit storage is based on a change in the track resistance ,

Beispiel 34 kann das System eines der Beispiele 30 bis 33 umfassen, ferner umfassend ein Mittel zum Initialisieren des Userspace-Treibers unter Verwendung der Datenstruktur-Metadaten, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei das Initialisieren des Userspace-Treibers ein Mittel zum Abrufen der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten, ein Mittel zum Erzeugen der Vorrichtung auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten, ein Mittel zum Aktualisieren der Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten und ein Mittel zum Registrieren einer Blockvorrichtungs-Schnittstelle zu der Vorrichtung bei dem Userspace-Treiber umfasst. Das Initialisieren des Userspace-Treibers umfasst ferner ein Mittel zum Empfangen der einen oder der mehreren Speicherzugriffsanforderungen von der einen oder den mehreren Anwendungen durch den binärverzweigten Treiber, um auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, ein Mittel zum Verarbeiten der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers, ein Mittel zum Aktualisieren eines oder mehrerer aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung der Speichersteuerung, die kommunikativ mit dem binärverzweigten Treiber verbunden ist, und ein Mittel zum Synchronisieren der Datenstruktur unter Verwendung der Speichersteuerung, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Userspace-Treiber geleitet werden, und wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Kernelspace-Treiber geleitet werden.Example 34 may include the system of any of Examples 30 to 33, further comprising means for initializing the user space driver using the data structure metadata, wherein the user space driver is a call mode driver, wherein initializing the userspace driver is a means for retrieving the user configuration information and the data structure metadata, means for generating the device based on the user configuration information and the data structure metadata, means for updating the data structure with the user space queue pair metadata, and means for registering a block device interface the device in the Userspace driver includes. Initializing the user space driver further includes means for receiving the one or more memory access requests from the one or more applications through the binary branch driver to access the file system device storage and / or the NVMe block device storage, means for processing the one or more memory access requests using the binary-branched driver, means for updating one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user-space queue pairs based on the one or more memory access requests using the memory controller communicatively connected to the binary-branched driver, and means for synchronizing the data structure using the memory controller, wherein, if one or more of the memory controllers multiple memory access requests being a read request, passing the one or more memory access requests to the userspace driver using the binary-branched driver, and wherein, if the one or more memory access requests is a write request, the one or more memory access requests be routed to the kernelspace driver using the binary-branched driver.

Die Ausführungsformen sind auf eine Verwendung mit allen Typen von Halbleiterchips mit integrierten Schaltungen („IC-Chips“) anwendbar. Beispiele für diese IC-Chips umfassen, ohne darauf beschränkt zu sein, Prozessoren, Steuerungen, Chipsatzkomponenten, programmierbare Logik-Arrays (PLAs), Speicherchips, Netzwerkchips, Systeme auf einem Chip (Systems on Chip, SoCs), SSD/NAND-Steuerungs-ASICs und Ähnliches. Außerdem sind in einigen der Zeichnungen Signalleitungen mit Linien dargestellt. Einige können unterschiedlich dargestellt sein, um mehrere einzelne Signalpfade anzuzeigen, eine numerische Kennzeichnung aufweisen, um eine Anzahl einzelner Signalpfade anzuzeigen, und/oder Pfeile an einem oder mehreren Enden aufweisen, um eine Hauptrichtung des Informationsflusses anzuzeigen. Dies sollte jedoch nicht beschränkend ausgelegt werden. Stattdessen können solche zusätzlichen Details in Verbindung mit einer oder mehreren beispielhaften Ausführungsformen verwendet werden, um ein einfacheres Verständnis einer Schaltung zu ermöglichen. Alle dargestellten Signalleitungen, mit oder ohne zusätzliche Informationen, können tatsächlich ein oder mehrere Signale umfassen, welche in mehrere Richtungen laufen können und mit einer beliebigen geeigneten Art von Signalschema realisiert werden können, z. B. digitale oder analoge Leitungen, die mit Differentialpaaren, Lichtwellenleitern und/oder asymmetrischen Leitungen realisiert sind.The embodiments are applicable to use with all types of integrated circuit semiconductor chips ("IC chips"). Examples of these IC chips include, but are not limited to, processors, controllers, chipset components, programmable logic arrays (PLAs), memory chips, network chips, systems on chip (SoCs), SSD / NAND controller chipsets. ASICs and the like. In addition, in some of the drawings, signal lines are represented by lines. Some may be represented differently to display a plurality of individual signal paths, have a numerical identifier to indicate a number of individual signal paths, and / or have arrows at one or more ends to indicate a major direction of the information flow. However, this should not be construed restrictively. Instead, such additional details may be used in conjunction with one or more exemplary embodiments to facilitate easier understanding of a circuit. All illustrated signal lines, with or without additional information, may actually comprise one or more signals which may be multi-directional and may be implemented with any suitable type of signal scheme, e.g. As digital or analog lines, which are realized with differential pairs, optical fibers and / or asymmetric lines.

Es können beispielhafte Größen/Modelle/Werte/Bereiche angegeben worden sein, obwohl die Ausführungsformen nicht auf diese beschränkt sind. Da Herstellungstechniken (z. B. Photolithographie) nach einer gewissen Zeit überholt sind, wird angenommen, dass zukünftig Vorrichtungen kleinerer Größen hergestellt werden könnten. Außerdem sind in den Figuren gut bekannte Spannungs/Masse-Verbindungen zu IC-Chips und anderen Komponenten dargestellt oder nicht, um die Darstellung und die Erörterung zu vereinfachen und um bestimmte Aspekte der Ausführungsformen nicht unklar zu machen. Ferner können Anordnungen in Blockschaubildform dargestellt sein, um zu vermeiden, dass Ausführungsformen unklar werden, und auch im Hinblick auf die Tatsache, dass spezielle Einzelheiten in Bezug auf die Realisierung solcher Blockschaubild-Anordnungen stark von dem Computersystem abhängen, innerhalb welchem die Ausführungsform zu realisieren ist, d.h. solche speziellen Einzelheiten sollten dem Fachmann leicht zugänglich sein. Obwohl spezielle Einzelheiten (z. B. Schaltungen) ausgeführt werden, um beispielhafte Ausführungsformen zu beschreiben, sollte dem Fachmann ersichtlich sein, dass die Ausführungsformen ohne diese speziellen Einzelheiten oder mit Variationen dieser ausgeführt werden können. Die Beschreibung ist daher als veranschaulichend und nicht als beschränkend anzusehen.Exemplary sizes / models / values / ranges may have been given, although the embodiments are not limited to these. Because manufacturing techniques (eg, photolithography) have become obsolete after some time, it is believed that devices of smaller sizes could be manufactured in the future. In addition, in the figures, well-known voltage / ground connections to IC chips and other components are or may not be shown to simplify the illustration and discussion, and not to obscure certain aspects of the embodiments. Furthermore, arrangements may be shown in block diagram form to avoid embodiments becoming obscure, and also in view of the fact that specific details relating to the realization of such block diagram arrangements are highly dependent on the computer system within which the embodiment is to be implemented ie such specific details should be readily available to those skilled in the art. Although specific details (eg, circuits) are set forth to describe example embodiments, it should be understood by those skilled in the art that the embodiments may be practiced without these specific details or variations thereof. The description is therefore to be considered as illustrative and not restrictive.

Der Begriff „verbunden“ kann hierin so verwendet werden, dass er sich auf eine beliebige Art von Beziehung, direkt oder indirekt, zwischen den betreffenden Komponenten bezieht, und kann auf elektrische, mechanische, Fluid-, optische, elektromagnetische, elektromechanische oder andere Verbindungen angewendet werden. Außerdem können die Begriffe „erste“, „zweite“, usw. hierin so verwendet sein, dass sie lediglich die Erörterung vereinfachen und keine bestimmte zeitliche oder chronologische Relevanz aufweisen, sofern nicht anders angegeben.The term "connected" may be used herein to refer to any type of relationship, directly or indirectly, between the components concerned and may be applied to electrical, mechanical, fluid, optical, electromagnetic, electromechanical or other connections become. In addition, the terms "first," "second," etc., may be used herein to merely simplify the discussion and have no particular temporal or chronological relevance, unless otherwise specified.

Wie in der vorliegenden Anmeldung und in den Ansprüchen verwendet, kann eine Liste von Elementen, die durch den Begriff „eines oder mehrere aus“ verbunden sind, eine beliebige Kombination der aufgelisteten Begriffe bedeuten. Beispielsweise können die Ausdrücke „eines oder mehrere aus A, B und C“ A; B; C; A und B; A und C; B und C oder A, B und C bedeuten.As used in the present application and claims, a list of elements associated with the term "one or more of" may mean any combination of the listed terms. For example, the terms "one or more of A, B and C" may be A; B; C; A and B; A and C; B and C or A, B and C mean.

Der Fachmann erkennt aus der vorstehenden Beschreibung, dass die breit angelegten Techniken der Ausführungsformen in einer Vielfalt von Formen realisiert werden können. Deswegen sollte, obwohl die Ausführungsformen in Verbindung mit bestimmten Beispielen dafür beschrieben worden sind, der wahre Umfang der Ausführungsformen nicht dadurch beschränkt sein, da dem Fachmann nach Betrachtung der Zeichnungen, der Beschreibung und der folgenden Ansprüche weitere Modifikationen ersichtlich werden.Those skilled in the art will recognize from the foregoing description that the broad techniques of the embodiments can be implemented in a variety of forms. Therefore, while the embodiments have been described in connection with particular examples thereof, the true scope of the embodiments should not be so limited since other modifications will become apparent to those skilled in the art upon consideration of the drawings, the specification, and the following claims.

Claims (26)

System, umfassend: einen Host-Speicher, der einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst; und eine Speichersteuerung, die kommunikativ mit dem Host-Speicher verbunden ist, wobei die Speichersteuerung einen binärverzweigten Treiber zum Verarbeiten einer oder mehrerer Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber umfasst, der kommunikativ mit einer Vorrichtung verbunden ist.System comprising: a host memory comprising a volatile memory and / or a nonvolatile memory; and a memory controller communicatively coupled to the host memory, the memory controller comprising a binary-branched driver for processing one or more memory access requests to access the non-volatile memory, the binary-branched driver a kernel space driver communicatively coupled to a kernel file system and includes a userspace driver communicatively connected to a device. System nach Anspruch 1, ferner umfassend einen Treiber-Binärverzweiger zum Erzeugen des binärverzweigten Treibers, wobei der Treiber-Binärverzweiger Benutzerkonfigurationsinformationen abruft, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen empfangen werden, die dafür modifiziert sind, den binärverzweigten Treiber zu nutzen, und wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen.System after Claim 1 and further comprising a driver binarizer for generating the binarized driver, wherein the driver binarizer retrieves user configuration information used to configure the binarized driver, wherein the user configuration information comprises a number of input-output queues and a number of namespaces for use for the kernelspace driver and the userspace driver, wherein the one or more memory access requests are received from one or more applications modified to utilize the binary-branched driver, and wherein the one or more applications are a read-intensive application or include a write-intensive application. System nach Anspruch 2, wobei der Treiber-Binärverzweiger den Kernelspace-Treiber initialisiert, wobei der Treiber-Binärverzweiger: eine Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers erzeugt, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Binärverzweiger-Namensraumpaar Zugriffsmöglichkeit besteht, wobei das Binärverzweiger-Namensraumpaar einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine Non-Volatile-Memory(NVM)-express(NVMe)-Blockvorrichtungsspeicherung umfasst; in dem Host-Speicher den Kernel-Namensraum, ein oder mehrere Kernel-Warteschlangenpaare, den Benutzer-Namensraum und ein oder mehrere Userspace-Warteschlangenpaare erzeugt; den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare dem Kernelspace-Treiber zuordnet; die Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten aktualisiert, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren; und die Vorrichtung in dem Treiber registriert, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.System after Claim 2 wherein the driver binarizer initializes the kernelspace driver, wherein the driver binarizer: generates a data structure in a shared memory space of the host memory, the host memory including a driver, wherein the driver routes the kernelspace driver over the binarized one Driver, wherein shared memory space is accessible through a binarizer name space pair, the binarizer name space pair comprising a kernel namespace and a user namespace, wherein the nonvolatile memory includes file system device storage and Non-Volatile Memory (NVM) Express (NVMe) block device storage; in the host memory, generating the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more userspace queue pairs; assigns the kernel namespace and the one or more kernel queue pairs to the kernelspace driver; update the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs; and register the device in the driver, the device being the NVMe block device storage. System nach Anspruch 3, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.System after Claim 3 wherein the data structure comprises data structure metadata that includes one or more of admission queue physical addresses, completion queue physical addresses, and queue address or queue orphan queue physical addresses. System nach Anspruch 3, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.System after Claim 3 wherein the one or more kernel queue pairs comprise one or more of a management queue pair, comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair, comprising a driver admission queue and a Driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue. System nach Anspruch 3, wobei der Treiber-Binärverzweiger: unter Verwendung der Datenstruktur-Metadaten den Userspace-Treiber initialisiert, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei der Treiber-Binärverzweiger: die Benutzerkonfigurationsinformationen und die Datenstruktur-Metadaten abruft; die Vorrichtung auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten erzeugt; die Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten aktualisiert; und bei dem Userspace-Treiber eine Blockvorrichtungs-Schnittstelle zu der Vorrichtung registriert.System after Claim 3 wherein the driver binarizer: using the data structure metadata, initializes the userspace driver, the user space driver being a call mode driver, the driver binarizer: retrieving the user configuration information and the data structure metadata; generate the device based on the user configuration information and the data structure metadata; updated the data structure with the userspace queue pair metadata; and registering a block device interface with the device to the user space driver. System nach Anspruch 3, wobei der binärverzweigte Treiber kommunikativ mit der Speichersteuerung verbunden ist, und wobei der binärverzweigte Treiber: von der einen oder den mehreren Anwendungen die eine oder die mehreren Speicherzugriffsanforderungen empfängt, auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen; die eine oder die mehreren Speicherzugriffsanforderungen verarbeitet; unter Verwendung eines oder mehrerer aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen aktualisiert; und unter Verwendung der Speichersteuerung die Datenstruktur synchronisiert.System after Claim 3 wherein the binary-branched driver is communicatively coupled to the memory controller, and wherein the binary-branched driver: receives from the one or more applications the one or more memory access requests to access the file system device storage and / or the NVMe block device storage; processing the one or more memory access requests; using one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user space queue pairs, based on the one or more memory access requests; and synchronizes the data structure using the memory controller. System nach Anspruch 3, wobei der flüchtige Speicher Direktzugriffsspeicher (RAM) umfasst, z. B. eines oder mehrere aus dynamischem Direktzugriffsspeicher (DRAM), statischem Direktzugriffsspeicher (SRAM) und synchronem dynamischen Direktzugriffsspeicher (SDRAM), und wobei der nichtflüchtige Speicher nichtflüchtige Direktzugriffsspeicher umfasst, z. B. Halbleiterspeicher, 3D-Kreuzpunktspeicher, eine oder mehrere Speichervorrichtungen, bei denen ein Chalkogenid-Phasenwechselmaterial verwendet wird, byte-adressierbare nichtflüchtige Speichervorrichtungen, ferroelektrischen Speicher, Silizium-Oxid-Nitrid-Oxid-Silizium(SONOS)-Speicher, Polymerspeicher, z. B. ferroelektrischen Polymerspeicher, ferroelektrischen Transistor-Direktzugriffsspeicher (Fe-TRAM), Ovonikspeicher, Nanodrahtspeicher und/oder elektrisch löschbaren programmierbaren Nur-Lese-Speicher (EEPROM), wobei der Halbleiterspeicher planaren oder 3-dimensionalen (3D) NAND-Flash-Speicher und/oder NOR-Flash-Speicher umfasst, wobei der 3D-Kreuzpunktspeicher mindestens eines aus einer transistorfreien stapelbaren Kreuzpunktarchitektur umfasst, wobei die Speicherzellen an einem Schnittpunkt von Wortleitungen und Bitleitungen sitzen und die Speicherzellen individuell adressierbar sind, und die Bitspeicherung basiert auf einem Wechsel des Bahnwiderstands.System after Claim 3 wherein the volatile memory comprises Random Access Memory (RAM), e.g. One or more of Dynamic Random Access Memory (DRAM), Static Random Access Memory (SRAM), and Synchronous Dynamic Random Access Memory (SDRAM), and wherein nonvolatile memory includes nonvolatile random access memory, e.g. Semiconductor memory, 3D crosspoint memory, one or more memory devices using a chalcogenide phase change material, byte addressable nonvolatile memory devices, ferroelectric memory, silicon oxide nitride oxide silicon (SONOS) memory, polymer memory, e.g. B. ferroelectric polymer memory, ferroelectric transistor random access memory (Fe-TRAM), Ovonikspeicher, nanowire memory and / or electrically erasable programmable read-only memory (EEPROM), wherein the semiconductor memory planar or 3-dimensional (3D) NAND flash memory and wherein the 3D crosspoint memory comprises at least one of a non-transistor stackable crosspoint architecture, wherein the memory cells are located at an intersection of word lines and bit lines and the memory cells are individually addressable, and the bit storage is based on a change in the track resistance , System nach Anspruch 8, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, der binärverzweigte Treiber die eine oder die mehreren Speicherzugriffsanforderungen zu dem Userspace-Treiber leitet.System after Claim 8 wherein, if the one or more memory access requests is a read request, the binary branch driver directs the one or more memory access requests to the userspace driver. System nach einem der Ansprüche 2 bis 8, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, der binärverzweigte Treiber die eine oder die mehreren Speicherzugriffsanforderungen zu dem Kernelspace-Treiber leitet.System according to one of Claims 2 to 8th wherein, if the one or more memory access requests is a write request, the binary branch driver directs the one or more memory access requests to the kernelspace driver. Verfahren zum gemeinsamen Nutzen einer Non-Volatile-Memory(NVM)-express(NVMe)-Vorrichtung, umfassend: Erzeugen eines binärverzweigten Treibers unter Verwendung eines Prozessors, der mit einem Host-Speicher verbunden ist, wobei der Host-Speicher einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber umfasst: einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber, der kommunikativ mit einer Vorrichtung verbunden ist; und Verarbeiten einer oder mehrerer Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher unter Verwendung des binärverzweigten Treibers. A method of sharing a Non-Volatile Memory (NVM) Express (NVMe) device, comprising: generating a binary-branched driver using a processor connected to a host memory, wherein the host memory is a volatile memory and or a non-volatile memory, the binary-branched driver comprising: a kernel space driver communicatively connected to a kernel file system and a userspace driver communicatively connected to a device; and processing one or more memory access requests to access the nonvolatile memory using the binary-branched driver. Verfahren nach Anspruch 11, ferner umfassend Empfangen der einen oder der mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen, die dafür modifiziert sind, den binärverzweigten Treiber zu verwenden, wobei das Erzeugen des binärverzweigten Treibers Abrufen von Benutzerkonfigurationsinformationen, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, unter Verwendung eines Treiber-Binärverzweigers umfasst, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen, und wobei die eine oder die mehreren Speicherzugriffsanforderungen eine Leseanforderung und/oder eine Schreibanforderung umfassen.Method according to Claim 11 further comprising receiving the one or more memory access requests from one or more applications modified to use the binary-branched driver, wherein generating the binarized driver retrieves user configuration information used to configure the binary-branched driver using a driver binarizer, wherein the user configuration information comprises a number of input-output queues and a number of namespaces for use with the kernelspace driver and the userspace driver, the one or more applications having a read-intensive application and / or application write-intensive application, and wherein the one or more memory access requests comprise a read request and / or a write request. Verfahren nach Anspruch 12, ferner umfassend: Initialisieren des Kernelspace-Treibers, umfassend: Erzeugen einer Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Binärverzweiger-Namensraumpaar Zugriffsmöglichkeit besteht, wobei das Binärverzweiger-Namensraumpaar einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine NVMe-Blockvorrichtungsspeicherung umfasst; Erzeugen des Kernel-Namensraums, eines oder mehrerer Kernel-Warteschlangenpaare, des Benutzer-Namensraums und eines oder mehrerer Userspace-Warteschlangenpaare in dem Host-Speicher; Zuordnen des Kernel-Namensraums und des einen oder der mehreren Kernel-Warteschlangenpaare zu dem Kernelspace-Treiber; Aktualisieren der Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren; und Registrieren der Vorrichtung in dem Treiber, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Method according to Claim 12 , further comprising: initializing the kernel space driver, comprising: generating a data structure in a shared memory space of the host memory, the host memory including a driver, wherein the driver manages the kernel space driver through the binary branched driver, wherein the shared memory space via a binary branch name space pair accessibility, wherein the binary branch name space pair comprises a kernel namespace and a user namespace, the nonvolatile memory comprising file system device storage and NVMe block storage; Generating the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host memory; Associating the kernel namespace and the one or more kernel queue pairs with the kernelspace driver; Updating the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs; and registering the device in the driver, the device being the NVMe block device storage. Verfahren nach Anspruch 13, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.Method according to Claim 13 wherein the data structure comprises data structure metadata that includes one or more of admission queue physical addresses, completion queue physical addresses, and queue address or queue orphan queue physical addresses. Verfahren nach Anspruch 13, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Method according to Claim 13 wherein the one or more kernel queue pairs comprise one or more of a management queue pair, comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair, comprising a driver admission queue and a Driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue. Verfahren nach Anspruch 13, ferner umfassend: Initialisieren des Userspace-Treibers unter Verwendung der Datenstruktur-Metadaten, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei das Initialisieren des Userspace-Treibers umfasst: Abrufen der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten; Erzeugen der Vorrichtung auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten; Aktualisieren der Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten; und Registrieren einer Blockvorrichtungs-Schnittstelle zu der Vorrichtung bei dem Userspace-Treiber.Method according to Claim 13 further comprising: initializing the userspace driver using the data structure metadata, the user space driver being a call mode driver, wherein initializing the userspace driver comprises: retrieving the user configuration information and the data structure metadata; Generating the device based on the user configuration information and the data structure metadata; Updating the data structure with the userspace queue pair metadata; and registering a block device interface with the device at the userspace driver. Verfahren nach Anspruch 13, ferner umfassend: Empfangen der einen oder der mehreren Speicherzugriffsanforderungen durch den binärverzweigten Treiber von der einen oder den mehreren Anwendungen, um auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen, Verarbeiten der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers, Aktualisieren eines oder mehrerer aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder den mehreren Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen unter Verwendung einer Speichersteuerung, die kommunikativ mit dem binärverzweigten Treiber verbunden ist; und Synchronisieren der Datenstruktur unter Verwendung der Speichersteuerung.Method according to Claim 13 further comprising: receiving the one or more memory access requests by the binary-branched driver from the one or more applications to access the file system device storage and / or the NVMe block device storage, Processing the one or more memory access requests using the binary branched driver, updating one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more user space queue pairs based on the one or the plurality of memory access requests using a memory controller communicatively connected to the binary-branched driver; and synchronizing the data structure using the memory controller. Verfahren nach einem der Ansprüche 12 bis 17, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Userspace-Treiber geleitet werden, und wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Kernelspace-Treiber geleitet werden.Method according to one of Claims 12 to 17 wherein if the one or more memory access requests is a read request, the one or more memory access requests are routed to the userspace driver using the binary-branched driver, and wherein if the one or more memory access requests is a write request that one or more memory access requests are routed to the kernelspace driver using the binary-branched driver. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien, umfassend einen Satz von Befehlen, welche, wenn sie von einer Computervorrichtung ausgeführt werden, bewirken, dass die Computervorrichtung: unter Verwendung eines Prozessors, der mit einem Host-Speicher verbunden ist, einen binärverzweigten Treiber erzeugt, wobei der Host-Speicher einen flüchtigen Speicher und/oder einen nichtflüchtigen Speicher umfasst, wobei der binärverzweigte Treiber umfasst: einen Kernelspace-Treiber, der kommunikativ mit einem Kernel-Dateisystem verbunden ist, und einen Userspace-Treiber, der kommunikativ mit einer Vorrichtung verbunden ist; und unter Verwendung des binärverzweigten Treibers eine oder mehrere Speicherzugriffsanforderungen zum Zugreifen auf den nichtflüchtigen Speicher verarbeitet.A computer-readable storage medium or a plurality of computer-readable storage media, comprising a set of instructions which, when executed by a computing device, causes the computing device to: using a processor connected to a host memory, generates a binary-branched driver, the host memory comprising a volatile memory and / or a nonvolatile memory, wherein the binary-branched driver comprises: a kernel space driver communicatively connected to a kernel file system, and a userspace driver communicatively connected to a device; and using the binary-branched driver processes one or more memory access requests to access the nonvolatile memory. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach Anspruch 19, wobei die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung: die eine oder die mehreren Speicherzugriffsanforderungen von einer oder mehreren Anwendungen empfängt, die dafür modifiziert sind, den binärverzweigten Treiber zu nutzen, unter Verwendung eines Treiber-Binärverzweigers den binärverzweigten Treiber erzeugt, umfassend Abrufen von Benutzerkonfigurationsinformationen, die verwendet werden, um den binärverzweigten Treiber zu konfigurieren, wobei die Benutzerkonfigurationsinformationen eine Anzahl von Eingabe-Ausgabe-Warteschlangen und eine Anzahl von Namensräumen zur Verwendung für den Kernelspace-Treiber und den Userspace-Treiber umfassen, wobei die eine oder die mehreren Anwendungen eine leseintensive Anwendung und/oder eine schreibintensive Anwendung umfassen, und wobei die eine oder die mehreren Speicherzugriffsanforderungen eine Leseanforderung und/oder eine Schreibanforderung umfassen.Computer readable storage medium or multiple computer readable storage media Claim 19 wherein the instructions, when executed, further cause the computing device: to receive the one or more memory access requests from one or more applications modified to utilize the binary-branched driver using a driver binary arbiter the binary-branched driver comprising, retrieving user configuration information used to configure the binary-branched driver, wherein the user configuration information comprises a number of input-output queues and a number of namespaces for use with the kernel space driver and the userspace driver, the one or more applications comprise a read-intensive application and / or a write-intensive application, and wherein the one or more memory access requests comprise a read request and / or a write request. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach Anspruch 19, wobei die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung: den Kernelspace-Treiber initialisiert, wobei das Initialisieren des Kernelspace-Treibers ferner bewirkt, dass die Computervorrichtung: eine Datenstruktur in einem gemeinsam genutzten Speicherraum des Host-Speichers erzeugt, wobei der Host-Speicher einen Treiber umfasst, wobei der Treiber den Kernelspace-Treiber über den binärverzweigten Treiber verwaltet, wobei auf den gemeinsam genutzten Speicherraum über ein Binärverzweiger-Namensraumpaar Zugriffsmöglichkeit besteht, wobei das Binärverzweiger-Namensraumpaar einen Kernel-Namensraum und einen Benutzer-Namensraum umfasst, wobei der nichtflüchtige Speicher eine Dateisystem-Vorrichtungsspeicherung und eine Non-Volatile-Memory(NVM)-express(NVMe)-Blockvorrichtungsspeicherung umfasst; den Kernel-Namensraum, ein oder mehrere Kernel-Warteschlangenpaare, den Benutzer-Namensraum und ein oder mehrere Userspace-Warteschlangenpaare in dem Host-Speicher erzeugt; den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare dem Kernelspace-Treiber zuordnet; die Datenstruktur mit Kernel-Warteschlangenpaar-Metadaten aktualisiert, welche den Kernel-Namensraum und das eine oder die mehreren Kernel-Warteschlangenpaare identifizieren; und die Vorrichtung in dem Treiber registriert, wobei die Vorrichtung die NVMe-Blockvorrichtungsspeicherung ist.Computer readable storage medium or multiple computer readable storage media Claim 19 wherein the instructions, when executed, further cause the computing device to: initialize the kernelspace driver, wherein initializing the kernelspace driver further causes the computing device to: generate a data structure in a shared memory space of the host memory; wherein the host memory comprises a driver, wherein the driver manages the kernel space driver via the binary branched driver, wherein the shared memory space is accessible via a binarizer name space pair, the binarizer name space pair comprising a kernel namespace and a user namespace wherein the nonvolatile memory comprises file system device storage and Non-Volatile Memory (NVM) Express (NVMe) block device storage; the kernel namespace, one or more kernel queue pairs, the user namespace, and one or more user space queue pairs in the host memory; assigns the kernel namespace and the one or more kernel queue pairs to the kernelspace driver; update the data structure with kernel queue pair metadata identifying the kernel namespace and the one or more kernel queue pairs; and register the device in the driver, the device being the NVMe block device storage. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach Anspruch 21, wobei die Datenstruktur Datenstruktur-Metadaten umfasst, welche eines oder mehrere aus physischen Adressen von Zulassungswarteschlangen, physischen Adressen von Abschlusswarteschlangen und physischen Adressen von Warteschlangengrößen- oder Warteschlangen-Doorbell-Registern umfassen.Computer readable storage medium or multiple computer readable storage media Claim 21 wherein the data structure comprises data structure metadata comprising one or more of admission queue physical addresses, completion queue physical addresses, and physical addresses of Queue size or queue Doorbell registers. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach Anspruch 21, wobei das eine oder die mehreren Kernel-Warteschlangenpaare eines oder mehrere eines Verwaltungs-Warteschlangenpaars, umfassen umfassend eine Verwaltungs-Zulassungswarteschlange und eine Verwaltungs-Abschlusswarteschlange, und eines oder mehrere eines Treiber-Eingabe-Ausgabe-Warteschlangenpaars umfassen, umfassend eine Treiber-Zulassungswarteschlange und eine Treiber-Abschlusswarteschlange, und wobei das eine oder die mehreren Userspace-Warteschlangenpaare eine Userspace-Zulassungswarteschlange und eine Userspace-Abschlusswarteschlange umfassen.Computer readable storage medium or multiple computer readable storage media Claim 21 wherein the one or more kernel queue pairs comprise one or more of a management queue pair, comprising a management admission queue and a management completion queue, and one or more of a driver input-output queue pair, comprising a driver admission queue and a driver completion queue, and wherein the one or more user space queue pairs comprise a userspace admission queue and a userspace completion queue. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach Anspruch 21, wobei die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung: den Userspace-Treiber unter Verwendung der Datenstruktur-Metadaten initialisiert, wobei der Userspace-Treiber ein Aufrufmodus-Treiber ist, wobei das Initialisieren des Userspace-Treibers ferner bewirkt, dass die Computervorrichtung: die Benutzerkonfigurationsinformationen und die Datenstruktur-Metadaten abruft; auf der Grundlage der Benutzerkonfigurationsinformationen und der Datenstruktur-Metadaten die Vorrichtung erzeugt; die Datenstruktur mit den Userspace-Warteschlangenpaar-Metadaten aktualisiert; und eine Blockvorrichtungs-Schnittstelle zu der Vorrichtung bei dem Userspace-Treiber registriert.Computer readable storage medium or multiple computer readable storage media Claim 21 wherein, when executed, the instructions further cause the computing device to: initialize the user space driver using the data structure metadata, the user space driver being a call mode driver, wherein initializing the userspace driver further causes that the computing device: retrieves the user configuration information and the data structure metadata; generates the device based on the user configuration information and the data structure metadata; updated the data structure with the userspace queue pair metadata; and register a block device interface to the device at the userspace driver. Computerlesbares Speichermedium oder mehrere computerlesbare Speichermedien nach einem der Ansprüche 21 bis 24, wobei die Befehle, wenn sie ausgeführt werden, ferner bewirken, dass die Computervorrichtung: durch den binärverzweigten Treiber die eine oder die mehreren Speicherzugriffsanforderungen von der einen oder den mehreren Anwendungen empfängt, auf die Dateisystem-Vorrichtungsspeicherung und/oder die NVMe-Blockvorrichtungsspeicherung zuzugreifen; die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers verarbeitet; unter Verwendung der Speichersteuerung, die kommunikativ mit dem binärverzweigten Treiber verbunden ist, auf der Grundlage der einen oder der mehreren Speicherzugriffsanforderungen eines oder mehrere aus dem Kernel-Namensraum, dem Benutzer-Namensraum, dem einen oder mehrere Kernel-Warteschlangenpaaren und dem einen oder den mehreren Userspace-Warteschlangenpaaren aktualisiert; die Datenstruktur unter Verwendung der Speichersteuerung synchronisiert, wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Leseanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Userspace-Treiber geleitet werden, und wobei, wenn es sich bei der einen oder den mehreren Speicherzugriffsanforderungen um eine Schreibanforderung handelt, die eine oder die mehreren Speicherzugriffsanforderungen unter Verwendung des binärverzweigten Treibers zu dem Kernelspace-Treiber geleitet werden.Computer-readable storage medium or a plurality of computer-readable storage media according to one of Claims 21 to 24 wherein the instructions, when executed, further cause the computer device: to receive, by the binary-branched driver, the one or more memory access requests from the one or more applications to access the file system device storage and / or the NVMe block device storage; processing the one or more memory access requests using the binary-branched driver; using the memory controller communicatively coupled to the binary-branched driver, one or more of the kernel namespace, the user namespace, the one or more kernel queue pairs, and the one or more of the one or more memory access requests Updated user space queue pairs; synchronizing the data structure using the memory controller, wherein if the one or more memory access requests is a read request, the one or more memory access requests are directed to the userspace driver using the binary-branched driver, and wherein if it is the one or more memory access requests is a write request, the one or more memory access requests are routed to the kernelspace driver using the binary-branched driver. System, umfassend ein Mittel zum Durchführen des Verfahrens nach einem der Ansprüche 11 bis 17.A system comprising means for carrying out the method according to any one of Claims 11 to 17 ,
DE112016007538.3T 2016-12-23 2016-12-30 TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER Pending DE112016007538T5 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CNPCT/CN2016/111736 2016-12-23
CN2016111736 2016-12-23
PCT/CN2016/113701 WO2018113030A1 (en) 2016-12-23 2016-12-30 Technology to implement bifurcated non-volatile memory express driver

Publications (1)

Publication Number Publication Date
DE112016007538T5 true DE112016007538T5 (en) 2019-09-26

Family

ID=62624352

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016007538.3T Pending DE112016007538T5 (en) 2016-12-23 2016-12-30 TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER

Country Status (3)

Country Link
CN (1) CN109983443B (en)
DE (1) DE112016007538T5 (en)
WO (1) WO2018113030A1 (en)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111444113B (en) * 2019-01-16 2023-06-13 阿里巴巴集团控股有限公司 Nonvolatile storage medium sharing method and device, electronic equipment and storage equipment
US11636059B2 (en) * 2020-03-31 2023-04-25 Samsung Electronics Co., Ltd. Scaling performance in a storage server with storage devices
US11409439B2 (en) 2020-11-10 2022-08-09 Samsung Electronics Co., Ltd. Binding application to namespace (NS) to set to submission queue (SQ) and assigning performance service level agreement (SLA) and passing it to a storage device
CN112667565B (en) * 2020-12-30 2021-12-03 湖南博匠信息科技有限公司 Storage unit file management method and system based on FUSE
CN114968385B (en) * 2022-05-23 2024-08-06 斑马网络技术有限公司 Driving coordination method, device and storage medium based on microkernel operating system

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101458749B (en) * 2005-04-22 2012-05-30 微软公司 Method for establishing protected environment
JP4548505B2 (en) * 2008-04-16 2010-09-22 ソニー株式会社 Information processing apparatus, information processing method, and computer program
US8713312B2 (en) * 2008-12-07 2014-04-29 Trend Micrio Incorporated Method and system for detecting data modification within computing device
US8832354B2 (en) * 2009-03-25 2014-09-09 Apple Inc. Use of host system resources by memory controller
US8533376B1 (en) * 2011-07-22 2013-09-10 Kabushiki Kaisha Yaskawa Denki Data processing method, data processing apparatus and robot
US9311110B2 (en) * 2013-07-08 2016-04-12 Intel Corporation Techniques to initialize from a remotely accessible storage device
US9535870B2 (en) * 2013-09-18 2017-01-03 HGST Netherlands B.V. Acknowledgement-less protocol for solid state drive interface

Also Published As

Publication number Publication date
CN109983443A (en) 2019-07-05
WO2018113030A1 (en) 2018-06-28
CN109983443B (en) 2024-03-08

Similar Documents

Publication Publication Date Title
US20210042219A1 (en) Apparatuses and methods for memory address translation during block migration
DE102013017511B4 (en) EFFICIENT STORAGE VIRTUALIZATION IN MULTI-THREAD PROCESSING UNITS
DE102020132764A1 (en) SOLID-STATE-DRIVE WITH EXTERNAL SOFTWARE EXECUTION FOR EFFECTING INTERNAL OPERATIONS OF THE SOLID-STATE-DRIVE
DE102013017509B4 (en) Efficient memory virtualization in multi-threaded processing units
DE102007062744B4 (en) Guest-to-host address translation for accessing devices on storage in a partitioned system
DE102004038649B4 (en) Continuous storage device for backup process checkpoint states
DE112016007538T5 (en) TECHNOLOGY FOR REALIZING A BINARY DISCONTINUED NON-VOLATILE MEMORY EXPRESS DRIVER
DE102018213430A1 (en) Accelerator with low latency
DE102011076895B4 (en) Cache coherence protocol for persistent storage
DE102019110023A1 (en) System with programmable multi-context accelerator circuit
DE112010005821T5 (en) context switching
DE102012222394A1 (en) Method and apparatus for collecting buffers of source operands
DE102013201178B4 (en) Controlling work distribution for processing tasks
DE102013017510A1 (en) Efficient storage virtualization in multi-strand processing units
DE202010017667U1 (en) Data storage device with flash memory chips
DE102013205886A1 (en) Dynamic bank mode addressing for memory access
DE112007001988T5 (en) Sharing information with guests in a virtual machine environment
DE102012221502A1 (en) A system and method for performing crafted memory access operations
DE102010035603A1 (en) Providing hardware support for shared virtual memory between physical local and remote storage
DE102010001339A1 (en) Manage requirements of operating systems that run in virtual machines
DE112020004181T5 (en) PROVIDE DIRECT DATA ACCESS BETWEEN ACCELERATORS AND STORAGE IN A COMPUTING ENVIRONMENT
EP2807558A1 (en) Memory controller for providing a plurality of defined areas of a mass storage medium as independent mass memories to a master operating system core for exclusive provision to virtual machines
DE112017003332T5 (en) OPENING ACCESSORIES, PROCESSES, SYSTEMS AND COMMANDS
DE112017001118T5 (en) Method and apparatus for providing a contiguous addressable memory area by remapping an address space
DE102019117794A1 (en) Memory devices comprising heterogeneous processors that share memory and methods of operating the same

Legal Events

Date Code Title Description
R012 Request for examination validly filed