DE112018000230T5 - System and method for speculative instruction execution using the control memory buffer - Google Patents

System and method for speculative instruction execution using the control memory buffer Download PDF

Info

Publication number
DE112018000230T5
DE112018000230T5 DE112018000230.6T DE112018000230T DE112018000230T5 DE 112018000230 T5 DE112018000230 T5 DE 112018000230T5 DE 112018000230 T DE112018000230 T DE 112018000230T DE 112018000230 T5 DE112018000230 T5 DE 112018000230T5
Authority
DE
Germany
Prior art keywords
command
host device
storage device
queue
memory
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
DE112018000230.6T
Other languages
German (de)
Inventor
Shay Benisty
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.)
Western Digital Technologies Inc
Original Assignee
Western Digital Technologies Inc
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
Priority claimed from US15/468,620 external-priority patent/US10466903B2/en
Priority claimed from US15/585,827 external-priority patent/US10725835B2/en
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE112018000230T5 publication Critical patent/DE112018000230T5/en
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • 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/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Es werden Systeme und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers offenbart. NVM Express (NVMe) implementiert einen Mechanismus für gepaarte Übermittlungswarteschlangen- und Beendigungswarteschlangen, wobei Host-Software auf der Hostvorrichtung Befehle in die Übermittlungswarteschlange setzt und danach die Speichervorrichtung über die Befehle in der Übermittlungswarteschlange benachrichtigt. Die Übermittlungswarteschlange kann sich in der Speichervorrichtung befinden, wie zum Beispiel in einem Steuerungsspeicherpuffer. Vor der Benachrichtigung durch die Hostvorrichtung kann die Speichervorrichtung bestimmen, dass die Befehle in die Übermittlungswarteschlange gesetzt werden und Befehle spekulativ ausgeführt werden können.

Figure DE112018000230T5_0000
Disclosed are systems and methods for speculative instruction execution using the control storage buffer. NVM Express (NVMe) implements a paired delivery queue and termination queue mechanism whereby host software on the host device places commands in the delivery queue and then notifies the storage device of the instructions in the delivery queue. The delivery queue may reside in the storage device, such as in a control storage buffer. Prior to notification by the host device, the storage device may determine that the instructions are placed in the delivery queue and that instructions can be speculatively executed.
Figure DE112018000230T5_0000

Description

VERWEIS AUF VERWANDTE ANMELDUNGENREFER TO RELATED APPLICATIONS

Diese Anmeldung beansprucht die Priorität der US-Patentanmeldung Nr. 15/468620 , eingereicht am 24. März 2017, und der US-Patentanmeldung Nr. 15/585827 , eingereicht am Mittwoch, 3. Mai 2017, von denen beide hiermit durch Verweis in ihrer Gesamtheit aufgenommen sind.This application claims the priority of U.S. Patent Application No. 15/468620 , filed on March 24, 2017, and the U.S. Patent Application No. 15/585827 , filed on Wednesday, 3 May 2017, both of which are hereby incorporated by reference in their entirety.

HINTERGRUNDBACKGROUND

NVM Express (NVMe) ist ein Standard zum Zugriff auf nichtflüchtige Speichermedien, die über einen PCI-Express-Bus (PCIe-Bus) angeschlossen sind. NVMe kann mit einer Vielzahl von nichtflüchtigen Speichermedien, wie beispielsweise Festkörperlaufwerken (SSDs), verwendet werden. Ein Schwerpunkt von NVMe liegt auf der E/A-Kommunikation zwischen einer Hostvorrichtung (die auf das nichtflüchtige Speichermedium zugreifen und/oder darauf schreiben kann) und einer Speichervorrichtung (die das nichtflüchtige Speichermedium einschließt). In diesem Zusammenhang implementiert NVMe einen Mechanismus für gepaarte Übermittlungswarteschlangen und Beendigungswarteschlangen, wobei die Hostsoftware auf der Hostvorrichtung Befehle in die Übermittlungswarteschlange stellt. Die Beendigungen werden von der Speichervorrichtungssteuerung in die zugeordnete Beendigungswarteschlange gestellt.NVM Express (NVMe) is a standard for accessing non-volatile storage media connected via a PCI Express bus (PCIe bus). NVMe can be used with a variety of non-volatile storage media, such as Solid State Drives (SSDs). One focus of NVMe is on I / O communication between a host device (which can access and / or write to the nonvolatile storage medium) and a storage device (which includes the nonvolatile storage medium). In this regard, NVMe implements a paired delivery queue and completion queue mechanism wherein the host software on the host device places commands in the delivery queue. The terminations are placed in the associated completion queue by the storage device controller.

Figurenlistelist of figures

Die beigefügten Zeichnungen, die in dieser Beschreibung enthalten sind und einen Teil derselben bilden, veranschaulichen verschiedene Aspekte der Erfindung und dienen zusammen mit der Beschreibung dazu, ihre Prinzipien zu erklären. Wo immer es zweckmäßig ist, werden in allen Zeichnungen dieselben Bezugszeichen verwendet, um gleiche oder ähnliche Elemente zu bezeichnen.

  • 1A ist ein Blockdiagramm eines beispielhaften nichtflüchtigen Speichersystems.
  • 1B ist ein Blockdiagramm eines Speichermoduls, das eine Vielzahl von nichtflüchtigen Speichersystemen und einen Host einschließt.
  • 1C ist ein Blockdiagramm eines hierarchischen Speichersystems.
  • 2A ist ein Blockdiagramm beispielhafter Komponenten einer Steuerung des nichtflüchtigen Speichersystems aus 1A.
  • 2B ist ein Blockdiagramm beispielhafter Komponenten eines nichtflüchtigen Speicherchips des nichtflüchtigen Speichersystems aus 1A.
  • 3 ist ein Blockdiagramm der Hostvorrichtung und der NVMe-Steuerung, das eine Sequenz für eine Hostvorrichtung und eine Speichervorrichtung zum Anfordern und Verarbeiten eines NVMe-Befehls veranschaulicht.
  • 4 ist ein Blockdiagramm mit weiteren beispielhaften Komponenten einer Hostvorrichtung und einer Speichervorrichtung.
  • 5 ist ein Flussdiagramm zur spekulativen Ausführung eines Befehls in der Übermittlungswarteschlange.
  • 6 ist ein Flussdiagramm zur spekulativen Ausführung eines Lesebefehls in der Übermittlungswarteschlange.
The accompanying drawings, which are incorporated in and constitute a part of this specification, illustrate several aspects of the invention and, together with the description, serve to explain its principles. Wherever appropriate, the same reference numbers will be used throughout the drawings to refer to the same or similar elements.
  • 1A FIG. 10 is a block diagram of an exemplary nonvolatile memory system. FIG.
  • 1B Figure 10 is a block diagram of a memory module including a plurality of nonvolatile memory systems and a host.
  • 1C is a block diagram of a hierarchical storage system.
  • 2A FIG. 12 is a block diagram of exemplary components of a controller of the nonvolatile memory system 1A ,
  • 2 B FIG. 12 is a block diagram of exemplary components of a nonvolatile memory chip of the nonvolatile memory system 1A ,
  • 3 Figure 10 is a block diagram of the host device and the NVMe controller illustrating a sequence for a host device and a memory device for requesting and processing an NVMe command.
  • 4 FIG. 10 is a block diagram showing further exemplary components of a host device and a memory device. FIG.
  • 5 Figure 4 is a flowchart for speculatively executing a command in the delivery queue.
  • 6 Figure 4 is a flow chart for speculatively executing a read command in the submit queue.

DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMENDETAILED DESCRIPTION OF THE EMBODIMENTS

Überblickoverview

NVMe basiert auf gepaarten Übermittlungswarteschlangen (SQ) und Beendigungswarteschlangen (CQ). Unter Verwendung von Software stellt die Hostvorrichtung Befehle in eine jeweilige Übermittlungswarteschlange. Die Speichervorrichtung setzt über die Speichervorrichtungssteuerung Einträge in die zugeordnete Beendigungswarteschlange, wobei die Einträge eine vollständige Befehlsausführung anzeigen. In einer Implementierung werden Übermittlungs- und Beendigungswarteschlangen dem Speicher der Hostvorrichtung zugewiesen. Die Zuweisung der Warteschlangen in dem Host-Speicherpuffer kann physisch zusammenhängend oder nicht zusammenhängend angeordnet sein. Somit führt die Speichervorrichtungssteuerung zur Übermittlung von Warteschlangen, die sich im Host-Speicher befinden, einen PCI-Express (PCIe) durch, der aus dem Host-Speicher gelesen wird, um die Warteschlangeneinträge abzurufen.NVMe is based on paired delivery queues (SQ) and completion queues (CQ). Using software, the host device places commands in a respective submission queue. The storage device places entries in the associated completion queue through the storage device controller, the entries indicating complete command execution. In one implementation, delivery and completion queues are allocated to the memory of the host device. The allocation of the queues in the host memory buffer may be physically contiguous or non-contiguous. Thus, the storage device controller performs a PCI Express (PCIe) to transfer queues residing in the host memory, which is read from the host memory to retrieve the queue entries.

Alternativ können die Übermittlungswarteschlangen und Beendigungswarteschlangen in der Speichervorrichtung gespeichert werden. Zum Beispiel ermöglicht der Steuerungsspeicherpuffer (Controller Memory Buffer CMB) der Hostvorrichtung, die Übermittlungswarteschlangen und Beendigungswarteschlangen in den Steuerungsspeicher zu setzen. Somit wird eine auf der Speichersteuerung basierende Warteschlange in der gleichen Weise wie eine auf dem Host-Speicher basierende Warteschlange verwendet, mit dem Unterschied, dass sich die Speicheradresse innerhalb der Speichervorrichtung befindet (z.B. eher innerhalb des eigenen Speichers der Speichervorrichtungssteuerung als in dem Host-Speicher). Insbesondere können die Admin- und/oder E/A-Warteschlangen in den CMB gesetzt werden, wie unten detaillierter besprochen wird. Daher befinden sich in einer Implementierung für eine bestimmte Warteschlange alle Speicher, die der bestimmten Warteschlange zugeordnet sind, vollständig in entweder dem CMB oder im Host-Speicher. Übermittlungswarteschlangen im Steuerungsspeicher ermöglichen der Host-Software, den gesamten Übermittlungswarteschlangeneintrag direkt in den internen Speicher der Speichervorrichtungssteuerung zu schreiben, wodurch ein Lesen von der Speichervorrichtungssteuerung in die Host-Vorrichtung vermieden wird.Alternatively, the delivery queues and completion queues may be stored in the storage device. For example, the controller memory buffer (CMB) allows the host device to place the delivery queues and completion queues in the controller storage. Thus, a memory control based queue is used in the same way as a host memory based queue, with the difference that the memory address is within the memory device (eg, rather within the memory controller's own memory than in the host memory ). In particular, the admin and / or I / O queues may be placed in the CMB, as discussed in greater detail below. Therefore, in an implementation for a particular queue, all of the memory that the server has assigned to a particular queue, completely in either the CMB or in the host memory. Delivery queues in the control store allow the host software to write the entire delivery queue entry directly into the storage device controller's internal memory, thereby avoiding reading from the storage device controller into the host device.

Beispielhafte Typen von Warteschlangen schließen Admin-Warteschlangen und E/A-Warteschlangen ein. Die Admin-Warteschlange, wie beispielsweise die Admin-Übermittlungswarteschlangen und -Beendigungswarteschlangen, ist eine administrative Übermittlungswarteschlange, welche administrative Befehle an die Speichervorrichtung einschließt. Beispielhafte administrative Befehle beinhalten, sind aber nicht beschränkt auf: Abruf einer Auslassseiten (z.B. wird eine NVMe-Auslassseiten von einer NVMe-Vorrichtung abgerufen und stellt die Retumed-Struktur bereit); Identifizierung (z.B. wird ein Datenpuffer zurückgegeben, der Informationen über das NVMe-Subsystem, die Steuerung oder die Namensräume beschreibt), Funktionsabruf (z.B. werden Eigenschaften der spezifizierten Funktion abgerufen)/und Funktionseinstellung (z.B. werden die Eigenschaften der angezeigten Funktion spezifiziert). Die aufgeführten administrativen Befehle dienen lediglich der Veranschaulichung. E/A-Befehle können sich auf Datenübertragung beziehen, wie etwa Lesebefehle (z.B. Lesen von Daten aus dem Flash-Speicher) und Schreibbefehle (z.B. Schreiben von Daten in den Flash-Speicher).Example types of queues include admin queues and I / O queues. The admin queue, such as the admin submission queues and queuing queues, is an administrative submission queue that includes administrative commands to the storage device. Exemplary administrative commands include, but are not limited to: retrieving an exhaust page (e.g., an NVMe exhaust page is retrieved from an NVMe device and provides the retumed structure); Identification (e.g., returning a data buffer describing information about the NVMe subsystem, control or namespaces), function fetching (e.g., retrieving properties of the specified function) / and function setting (e.g., specifying the properties of the displayed function). The listed administrative commands are for illustrative purposes only. I / O commands may refer to data transmission, such as read commands (e.g., reading data from the flash memory) and write commands (e.g., writing data to the flash memory).

Üblicherweise schreibt die Host-Vorrichtung zuerst Befehle in die Übermittlungswarteschlange und benachrichtigt danach die Speichervorrichtung durch Aktualisieren des End-Doorbell-Registers der Übermittlungswarteschlange, wie unten detaillierter besprochen wird. Als Antwort auf die Benachrichtigung durch die Hostvorrichtung über einen Befehl in der Übermittlungswarteschlange beginnt die Speichervorrichtungssteuerung, den Befehl zu verarbeiten. In einer Implementierung darf die Speicherschreibaufforderung an das End-Doorbell-Register der Übermittlungswarteschlange nicht das RO-(Relaxed Ordering) Bit aufweisen, um sicherzustellen, dass es bei der Speichervorrichtungssteuerung ankommt, nachdem alles in den CMB geschrieben wurde.Typically, the host device first writes commands to the delivery queue and then notifies the storage device by updating the end-doorbell register of the delivery queue, as discussed in greater detail below. In response to the notification by the host device about a command in the delivery queue, the storage device controller begins to process the command. In one implementation, the memory write request to the end-Doorbell register of the transmit queue may not have the RO (Relaxed Ordering) bit to ensure that it arrives at the memory device controller after everything has been written to the CMB.

In einer Implementierung beginnt die Speichervorrichtungssteuerung, einen Befehl vor der Benachrichtigung durch die Host-Vorrichtung über den Befehl in der Übermittlungswarteschlange zu verarbeiten (z.B. vor der Benachrichtigung über das End-Doorbell-Register der Übermittlungswarteschlange). Zum Beispiel kann die Speichervorrichtung bestimmen, ob die Host-Vorrichtung einen Befehl in die Übermittlungswarteschlange geschrieben hat. Dies kann auf eine von mehreren Arten durchgeführt werden. Auf eine Weise kann die Speichervorrichtung die NVMe-Übermittlungswarteschlangen überwachen, die physisch in dem Steuerungsspeicherpuffer angeordnet sind, wodurch ermöglicht wird, dass die Speichervorrichtung die spekulative Befehlsausführung selbst vor dem Empfang der entsprechenden Benachrichtigung von der Host-Vorrichtung beginnt (z.B. Doorbell-Schreibübertragungen). In einer anderen Weise kann die Speichervorrichtung eine Kommunikationsschnittstelle zwischen der Hostvorrichtung und der Speichervorrichtung überwachen (z.B. den Eingang des PCIe-Busses), um zu bestimmen, ob die Hostvorrichtung irgendwelche Kommunikationen gesendet hat, die ein Schreiben eines Befehls in eine Übermittlungswarteschlange anzeigen.In one implementation, the storage device controller begins to process a command prior to notification by the host device via the command in the delivery queue (e.g., prior to notification via the end-Doorbell register of the delivery queue). For example, the storage device may determine if the host device has written a command to the delivery queue. This can be done in one of several ways. In one way, the storage device may monitor the NVMe delivery queues that are physically located in the control storage buffer, thereby allowing the storage device to begin the speculative command execution itself before receiving the corresponding notification from the host device (e.g., Doorbell write transfers). In another way, the storage device may monitor a communication interface between the host device and the storage device (e.g., the PCIe bus input) to determine if the host device has sent any communications indicating a write of a command to a delivery queue.

Als Antwort auf die Bestimmung der Speichervorrichtung, dass die Hostvorrichtung (einen) Befehl(e) in die Übermittlungswarteschlange(n) geschrieben hat, kann die Speichervorrichtung den/die Befehl(e) parsen, und als Antwort auf die Bestimmung, dass ein oder mehrere neue Befehle in der Übermittlungswarteschlange sind, mit der Ausführung des einen oder der mehreren neuen Befehle auf spekulative Weise beginnen.In response to the determination of the storage device that the host device has written command (s) into the delivery queue (s), the storage device may parse the command (s), and in response to the determination that one or more new commands in the submission queue are to begin speculatively with the execution of the one or more new commands.

Verschiedene Befehle können einer spekulativen Ausführung unterzogen werden. Zum Beispiel kann ein Lesebefehl einer spekulativen Lesebefehlsausführung unterzogen werden, die einen Rad-Look-Ahead -(RLA-)Algorithmus auslöst. Insbesondere können die relevanten Daten, die dem Lesebefehl unterliegen, aus dem Flash-Speicher in einen temporären Zwischenspeicher abgerufen werden. Wenn die Hostvorrichtung die Speichervorrichtung über den Befehl benachrichtigt (z.B. den relevanten Befehl in die Warteschlange einreiht, indem sie einen Schreibvorgang an das entsprechende Doorbell-Register der Übermittlungswarteschlange ausgibt), können die Daten sofort aus dem temporären Zwischenspeicher abgerufen und der Hostvorrichtung bereitgestellt werden. In dieser Hinsicht kann der RLA-Treffer eine bessere Latenz des Flash-Speichers (z.B. Zeitraum der Erfassung und der Übertragung) und dadurch eine bessere Leistung bewirken. In einem anderen Fall kann ein Schreibbefehl einer spekulativen Schreibbefehlsausführung unterzogen werden. Zum Beispiel können ein oder mehrere Schritte zum Durchführen des Schreibbefehls, wie beispielsweise das Abrufen der Flash-Translation-Layer-(FTL-)Tabelle, durchgeführt werden, bevor die Hostvorrichtung den Befehl in die Warteschlange reiht. Somit kann die Gesamtleistung der Speichervorrichtung verbessert werden.Various instructions may be subjected to speculative execution. For example, a read command may be subjected to a speculative read command execution that triggers a Rad Look Ahead (RLA) algorithm. In particular, the relevant data subject to the read command may be retrieved from the flash memory to a temporary cache. When the host device notifies the storage device of the command (e.g., enqueues the relevant command by issuing a write to the corresponding doorbell register of the submission queue), the data can be retrieved immediately from the temporary cache and provided to the host device. In this regard, the RLA hit may result in better latency of the flash memory (e.g., period of capture and transmission) and thereby better performance. In another case, a write command may be subjected to a speculative write command execution. For example, one or more steps to perform the write command, such as fetching the Flash Translation Layer (FTL) table, may be performed before the host device queues the command. Thus, the overall performance of the storage device can be improved.

In einer Implementierung führt die Speichervorrichtung selektiv eine spekulative Ausführung von Befehlen durch. In einer ersten spezifischen Implementierung kann die Speichervorrichtung den Befehl analysieren und kann auf Grundlage der Art des Befehls bestimmen, ob spekulativ die Ausführung des Befehls vor der Benachrichtigung der Hostvorrichtung über das Doorbell-Register durch Setzen des Befehls in die Übermittlungswarteschlange beginnen soll. Wie hierin erörtert, gibt es verschiedene Arten von Befehlen, wie zum Beispiel Lesebefehle, Schreibbefehle und dergleichen. Ein Lesebefehl kann beispielsweise einen Zeiger auf einer PRP-Liste einschließen, wobei die PRP-Liste die Abschnitte im Host-Speicher angibt, in denen die Speichervorrichtung die vom Flash-Speicher gelesenen Daten schreiben soll. Gleichermaßen schließt der Schreibbefehl einen Zeiger auf eine PRP-Liste ein, der die Abschnitte im Host-Speicher anzeigt, wo die Daten zum Schreiben in den Flash lokalisiert sind (d.h. die Speichervorrichtung verwendet die PRP-Liste zum Lesen von Host-Speicherplätzen für Daten, wobei die gelesenen Daten in den Flash-Speicher geschrieben werden).In one implementation, the storage device selectively performs a speculative execution of instructions. In a first specific Implementation, the storage device may parse the command and may determine, based on the nature of the command, whether speculatively the execution of the command should commence prior to notifying the host device of the Doorbell register by placing the command in the delivery queue. As discussed herein, there are various types of commands, such as read commands, write commands, and the like. For example, a read command may include a pointer to a PRP list, where the PRP list indicates the portions in the host memory where the memory device is to write the data read from the flash memory. Similarly, the write command includes a pointer to a PRP list indicating the portions in the host memory where the data is located for writing to the flash (ie, the memory device uses the PRP list to read host locations for data, where the read data is written to the flash memory).

In einer zweiten spezifischen Implementierung kann die Speichervorrichtung bei zumindest einer Ausführungsform des Befehls, wie zum Beispiel der Priorität des Befehls, bestimmen, ob (oder wann) die spekulative Befehlsausführung vor einer Benachrichtigung der Hostvorrichtung über das Doorbell-Registers durch Setzen des Befehls in die Übermittlungswarteschlange begonnen werden soll. Wie in der gleichzeitig anhängigen US-Anmeldung Nr._(Ref.-Nr. 10519-3193 (SDA-2985-US-Patent), hierin durch Verweis in seiner Gesamtheit aufgenommen, kann die Speichervorrichtung die Priorität für einen Befehl (oder zum Durchführen einer oder mehrerer Phasen) auf Grundlage einer oder mehrerer Kriterien einschließlich jegliches oder einer beliebigen Kombination oder aller der folgenden bestimmen: (1) Priorität des jeweiligen Befehls; (2) Interna der Speichervorrichtung (z. B. der Zustand des Chips oder die Verarbeitungsfähigkeit der Speichervorrichtung, wie nachstehend ausgeführt); (3) Energieverbrauch; (4) Zustand der Kommunikationsschnittstelle zwischen der Host-Vorrichtung und der Speichervorrichtung (z. B. der Status des Eingangs- und/oder Ausgangs-Pfades); und (5) die Phasen der Befehle, die der Ausführung unterliegen. Abhängig von der dem Befehl zugeordneten Priorität kann die Speichervorrichtung bestimmen, ob ein Befehl einer spekulativen Ausführung unterliegt. In einem Beispiel bestimmt die Speichervorrichtung die Priorität eines ersten Befehl und eines zweiten Befehl, wobei die dem ersten Befehl zugeordnete Priorität höher als die dem zweiten Befehl zugeordnete Priorität ist. Auf Grundlage der bestimmten Prioritäten führt die Speichervorrichtung eine spekulative Ausführung des ersten Befehls vor oder anstelle der spekulativen Ausführung des zweiten Befehls durch. Alternativ, in dem Fall, dass die Speichervorrichtung die spekulative Ausführung des zweiten Befehls durchführt, kann die Speichervorrichtung die Durchführung der spekulativen Ausführung des zweiten Befehls stoppen und beginnen, die spekulative Ausführung des ersten Befehls als Antwort auf die Bestimmung, dass die Hostvorrichtung den ersten Befehl in die Übermittlungswarteschlange gesetzt hat und als Antwort auf die Bestimmung, dass die dem ersten Befehl zugeordnete Priorität höher als die dem zweiten Befehl zugeordnete Priorität ist, durchführen.In a second specific implementation, in at least one embodiment of the instruction, such as the priority of the instruction, the storage device may determine whether (or when) the speculative instruction execution prior to notifying the host device of the Doorbell register by placing the instruction in the delivery queue should be started. As noted in co-pending US Application No. (Ref. No. 10519-3193 (SDA-2985-US Patent), incorporated herein by reference in its entirety, the memory device may prioritize a command (or perform one or more phases) based on one or more criteria, including any or any combination or all of the following: ( 1 ) Priority of the respective command; ( 2 ) Internals of the memory device (eg, the state of the chip or the processing capability of the memory device as set forth below); ( 3 ) Power consumption; ( 4 State of the communication interface between the host device and the storage device (eg, the status of the input and / or output path); and ( 5 ) the phases of the instructions that are subject to execution. Depending on the priority assigned to the instruction, the storage device may determine whether an instruction is subject to speculative execution. In one example, the memory device determines the priority of a first command and a second command, wherein the priority assigned to the first command is higher than the priority assigned to the second command. Based on the determined priorities, the storage device performs a speculative execution of the first instruction before or instead of the speculative execution of the second instruction. Alternatively, in the case that the storage device performs the speculative execution of the second instruction, the storage device may stop performing the speculative execution of the second instruction and begin speculative execution of the first instruction in response to the determination that the host device is the first instruction has placed in the delivery queue and in response to the determination that the priority assigned to the first instruction is higher than the priority assigned to the second instruction.

Somit führt in den ersten und zweiten spezifischen Implementierungen die Speichervorrichtung die spekulative Ausführung nur auf Abläufen innerhalb der Speichervorrichtung durch, nicht aber auf Abläufen, welche die Host-Vorrichtung miteinbeziehen (z.B. die sich außerhalb der Host-Vorrichtung befinden oder die in Kommunikation mit der Host-Vorrichtung stehen). In dieser Hinsicht wird jeder Ablauf in Zusammenhang mit der Hostvorrichtung, wie zum Beispiel das Lesen einer PRP-Liste auf der Hostvorrichtung, nicht spekulativ durchgeführt. Jedoch kann ein interner Ablauf, wie das Lesen aus einem Flash-Speicher, die Durchführung einer Fehlerkorrektur oder Verschlüsselung/Entschlüsselung, spekulativ durchgeführt werden. In dieser Hinsicht kann die Speichervorrichtung in einer spezifischen Implementierung eine spekulative Ausführung eines Lesebefehls durchführen, aber keine spekulative Ausführung eines Schreibbefehls. Genauer gesagt, vor dem Empfang der Doorbell-Benachrichtigung von der Hostvorrichtung führt die Speichervorrichtung spekulativ bestimmte Abläufe bei der Ausführung des Lesebefehls durch, wie den Lesevorgang aus dem Flash-Speicher, die Durchführung der Fehlerkorrektur und Verschlüsselung, führt aber keine anderen Abläufe, die sich auf Kommunikation mit der Hostvorrichtung beziehen, durch, wie beispielsweise das Lesen der PRP-Liste, die sich auf der Hostvorrichtung befindet.Thus, in the first and second specific implementations, the storage device performs speculative execution only on threads within the storage device, but not on threads that include the host device (eg, that are external to the host device or in communication with the host Stand device). In this regard, any flow associated with the host device, such as reading a PRP list on the host device, is not speculatively performed. However, an internal process, such as reading from flash memory, performing error correction or encryption / decryption, may be performed speculatively. In this regard, in a specific implementation, the storage device may perform a speculative execution of a read command, but not a speculative execution of a write command. Specifically, prior to receiving the Doorbell notification from the host device, the storage device speculatively performs certain operations in the execution of the read command, such as reading from the flash memory, performing error correction and encryption, but does not perform other operations by communication with the host device, such as by reading the PRP list located on the host device.

Ein Maß für die Leistung der NVME-Befehlsausführung ist der Zeitraum zwischen der Ausgabe des Doorbell-Schreibvorgangs in eine Übermittlungswarteschlange durch die Hostvorrichtung und der Zustellung einer Beendigungsnachricht an die Übermittlungswarteschlange durch die Speichervorrichtung. Unter Verwendung der spekulativen Ausführung kann diese Zeit reduziert werden. In dieser Hinsicht kann die spekulative Ausführung die Leistung für bestimmte Befehle verbessern, wie zum Beispiel Lese- und Schreibbefehle, insbesondere in niedrigen Warteschlangentiefen. Weiterhin kann die Latenz der Befehlsausführung, welche auf dem PCIe-Bus gemessen werden kann, für verschiedene Befehlsarten (z.B. Lese-, Schreib-, und Admin-Befehle) verbessert werden. Schließlich kann die spekulative Ausführung sowohl in Hardware als auch in Firmware implementiert sein, wodurch die Eingliederung innerhalb der Speichervorrichtung vereinfacht wird.One measure of the performance of the NVME command execution is the period between the issuance of the Doorbell write to a submission queue by the host device and the delivery of a completion message to the submission queue by the storage device. Using speculative execution, this time can be reduced. In this regard, speculative execution may improve performance for certain instructions, such as read and write instructions, especially at low queue depths. Furthermore, instruction execution latency, which can be measured on the PCIe bus, can be improved for different types of instructions (e.g., read, write, and admin commands). Finally, the speculative implementation may be implemented in both hardware and firmware, thereby simplifying integration within the storage device.

In der Regel, wenn die Hostvorrichtung einen Befehl in die Übermittlungswarteschlange schreibt, benachrichtigt die Hostvorrichtung die Speichervorrichtung des Befehls (z.B. wird der Befehl gegebenenfalls von der Hostvorrichtung zum Schreiben in das entsprechende Doorbell-Registerende gereiht). Es ist untypisch, dass die Hostvorrichtung einen Befehl in die Übermittlungswarteschlange schreiben kann und danach den Befehl mit einem anderen Befehl überschreiben und dann den anderen Befehl in eine Warteschlange reihen kann. Unabhängig davon kann die spekulative Ausführung diese atypische Situation beeinträchtigen. Typically, when the host device writes a command to the delivery queue, the host device notifies the storage device of the command (eg, the command is optionally queued from the host device for writing to the corresponding doorbell register end). It is atypical that the host device can write one instruction to the delivery queue and then override the instruction with another instruction and then queue the other instruction. Regardless, speculative execution may affect this atypical situation.

Ausführungsformenembodiments

Die folgenden Ausführungsformen beschreiben nichtflüchtige Speichervorrichtungen und zugehörige Verfahren zur Verarbeitung von Befehlen. Bevor auf diese und andere Ausführungsformen Bezug genommen wird, stellen die folgenden Absätze eine Erörterung beispielhafter nichtflüchtiger Speichervorrichtungen und Speichermodule bereit, die mit diesen Ausführungsformen verwendet werden können. Natürlich sind dies nur Beispiele, und es können andere geeignete Arten von nichtflüchtigen Speichervorrichtungen und/oder Speichermodulen verwendet werden.The following embodiments describe nonvolatile memory devices and associated methods for processing instructions. Before referring to these and other embodiments, the following paragraphs provide a discussion of exemplary non-volatile memory devices and memory modules that may be used with these embodiments. Of course, these are only examples and other suitable types of nonvolatile memory devices and / or memory modules may be used.

1A ist ein Blockdiagramm, das eine nichtflüchtige Speichervorrichtung 100 veranschaulicht. Die nichtflüchtige Speichervorrichtung 100 kann eine Steuerung 102 und einen nichtflüchtigen Speicher einschließen, der aus einem oder mehreren nichtflüchtigen Speicherchips 104 bestehen kann. Wie hier verwendet, bezieht sich der Ausdruck Element auf den Satz von nichtflüchtigen Speicherzellen und assoziierte Schaltlogik zum Verwalten des physischen Betriebs dieser nichtflüchtigen Speicherzellen, die auf einem einzelnen Halbleitersubstrat ausgebildet sind. Die Steuerung 102 kann mit einer Hostvorrichtung oder einem Hostsystem eine Schnittstelle bilden und Befehlssequenzen für Lese-, Programmier- und Löschvorgänge zu dem/den nichtflüchtigen Speicherchip(s) 104 übertragen. Wie unten erläutert, können die Befehle logische und/oder physische Adressen einschließen. 1A FIG. 10 is a block diagram illustrating a nonvolatile memory device. FIG 100 illustrated. The nonvolatile storage device 100 can be a controller 102 and a non-volatile memory consisting of one or more non-volatile memory chips 104 can exist. As used herein, the term element refers to the set of nonvolatile memory cells and associated circuitry for managing the physical operation of these nonvolatile memory cells formed on a single semiconductor substrate. The control 102 may interface with a host device or host system and transmit instruction sequences for read, program and erase operations to the non-volatile memory chip (s) 104. As explained below, the instructions may include logical and / or physical addresses.

Die Steuerung 102 (die eine Flash-Speichersteuerung sein kann) kann die Form einer Verarbeitungsschaltung, eines Mikroprozessors oder Prozessors und eines computerlesbaren Mediums annehmen, das computerlesbaren Programmcode (z. B. Software oder Firmware) speichert, der von dem (Mikro-) Prozessor, Logikgatter, Schaltern, einer anwendungsspezifischen integrierten Schaltung (ASIC), einer programmierbaren Logiksteuerung und einem eingebetteter Mikrocontroller ausgeführt werden kann. Die Steuerung 102 kann mit Hardware und/oder Firmware eingerichtet sein, um die verschiedenen Funktionen auszuführen, die unten beschrieben und in den Flussdiagrammen gezeigt sind. Außerdem können einige der Komponenten, die als innerhalb der Steuerung gezeigt sind, auch außerhalb der Steuerung gespeichert werden, und andere Komponenten können verwendet werden. Zusätzlich könnte der Ausdruck „operativ in Kommunikation mit“ direkt in Kommunikation mit oder indirekt (verdrahtet oder drahtlos) in Kommunikation mit einer oder mehreren Komponenten bedeuten, die hier gezeigt oder beschrieben sein können oder nicht.The control 102 (which may be a flash memory controller) may take the form of a processing circuit, a microprocessor or processor, and a computer-readable medium storing computer-readable program code (eg, software or firmware) provided by the (micro) processor, logic gate, Switches, an application specific integrated circuit (ASIC), a programmable logic controller, and an embedded microcontroller. The control 102 may be configured with hardware and / or firmware to perform the various functions described below and shown in the flowcharts. In addition, some of the components shown as being within the controller may also be stored outside the controller, and other components may be used. In addition, the term "operatively in communication with" could mean directly in communication with or indirectly (wired or wireless) in communication with one or more components, which may or may not be shown or described herein.

Wie hier verwendet, ist die Flash-Speichersteuerung eine Vorrichtung, die im Flash-Speicher gespeicherte Daten verwaltet und mit einem Host, wie einem Computer oder einer elektronischen Vorrichtung, kommuniziert. Eine Flash-Speichersteuerung kann verschiedene Funktionen zusätzlich zu der hier beschriebenen spezifischen Funktionalität aufweisen. Zum Beispiel kann die Flash-Speichersteuerung den Flash-Speicher formatieren, um sicherzustellen, dass der Speicher ordnungsgemäß arbeitet, um schlechte Flash-Speicherzellen auszugrenzen und Ersatzzellen zuzuordnen, die künftig fehlerhafte Zellen ersetzen sollen. Einige Teile der Ersatzzellen können verwendet werden, um Firmware aufzunehmen, um die Flash-Speichersteuerung zu betreiben und andere Merkmale zu implementieren. Ein Beispiel für die Firmware ist eine Flash-Translationsschicht. Wenn eine Hostvorrichtung Daten während des Betriebs aus dem Flash-Speicher lesen oder Daten in diesen schreiben muss, kommuniziert der Host mit der Flash-Speichersteuerung. Wenn der Host eine logische Adresse bereitstellt, zu der Daten gelesen/geschrieben werden sollen, kann die Flash-Speichersteuerung die vom Host empfangene logische Adresse in eine physische Adresse in der Flash-Speichersteuerung umwandeln. Die Flash-Speichersteuerung kann auch verschiedene Speicherverwaltungsfunktionen ausführen, wie z. B., ohne darauf beschränkt zu sein, Abnutzungsausgleich (Verteilen von Schreibvorgängen zum Vermeiden eines Verschleißes spezifischer Speicherblöcke, auf die ansonsten wiederholt geschrieben werden würde) und Speicherbereinigung (nachdem ein Block voll ist, Verschieben ausschließlich der gültigen Datenseiten zu einem neuen Block, so dass der volle Block gelöscht und wiederverwendet werden kann).As used herein, the flash memory controller is a device that manages data stored in the flash memory and communicates with a host, such as a computer or electronic device. A flash memory controller may have various functions in addition to the specific functionality described herein. For example, the flash memory controller may format the flash memory to ensure that the memory is operating properly to isolate bad flash memory cells and allocate spare cells to replace defective cells in the future. Some parts of the spare cells can be used to capture firmware, operate the flash memory controller, and implement other features. An example of the firmware is a flash translation layer. If a host device needs to read data from flash memory during operation or write data to it, the host communicates with the flash memory controller. When the host provides a logical address to which to read / write data, the flash memory controller may convert the logical address received from the host to a physical address in the flash memory controller. The flash memory controller may also perform various memory management functions, such as memory management. For example, but not limited to, wear leveling (distributing writes to avoid wearing down specific memory blocks that would otherwise be written to repeatedly) and garbage collection (after a block is full, shifting only the valid data pages to a new block such that the full block can be deleted and reused).

Die Schnittstelle zwischen der Steuerung 102 und dem nichtflüchtigen Speicherchip 104 kann jede geeignete Flash-Schnittstelle sein, wie z. B. der Toggle-Modus 200, 400 oder 800. In einer Ausführungsform kann die Speichervorrichtung 100 ein kartenbasiertes System sein, wie z. B. eine sichere digitale (SD) oder eine sichere digitale Mikro-Karte (Mikro-SD). In einer alternativen Ausführungsform kann das System 100 Teil einer eingebetteten Speichervorrichtung sein.The interface between the controller 102 and the nonvolatile memory chip 104 can be any suitable flash interface, such as. As the toggle mode 200 . 400 or 800 , In one embodiment, the storage device 100 be a card-based system, such. As a secure digital (SD) or a secure digital micro-card (micro-SD). In an alternative embodiment, the system 100 Be part of an embedded storage device.

Obwohl die nichtflüchtige Speichervorrichtung 100 in dem in 1A veranschaulichten Beispiel einen einzigen Kanal zwischen der Steuerung 102 und dem/den nichtflüchtigen Speicherchip(s) 104 einschließen kann, ist der hierin beschriebene Gegenstand nicht auf einen einzigen Speicherkanal beschränkt. Zum Beispiel können in einigen NAND-Speichervorrichtungsarchitekturen 2, 4, 8 oder mehr NAND-Kanäle zwischen der Steuerung und dem/den NAND-Speicherchip(s) 104 je nach den Fähigkeiten der Steuerung vorhanden sein. In jeder der hier beschriebenen Ausführungsformen kann mehr als ein einziger Kanal zwischen der Steuerung und dem/den Speicherchip(s) 104 existieren, selbst wenn ein einzelner Kanal in den Zeichnungen gezeigt ist. Although the non-volatile memory device 100 in the 1A illustrate a single channel between the controller 102 and the non-volatile memory chip (s) 104 may include, the subject matter described herein is not limited to a single memory channel. For example, in some NAND memory device architectures 2 . 4 . 8th or more NAND channels between the controller and the NAND memory chip (s) 104 depending on the capabilities of the controller. In each of the embodiments described herein, more than a single channel may exist between the controller and the memory chip (s) 104, even though a single channel is shown in the drawings.

1B veranschaulicht ein Speichermodul 200, das mehrere nichtflüchtige Speichervorrichtungen 100 einschließt. Als solches kann das Speichermodul 200 eine Speichersteuerung 202 einschließen, die mit einem Host 220 und mit einem Speichersystem 204 verbunden ist, das eine Vielzahl von nichtflüchtigen Speichervorrichtungen 100 einschließt. Die Schnittstelle zwischen der Speichersteuerung 202 und den nichtflüchtigen Speichervorrichtungen 100 kann eine Busschnittstelle sein, wie beispielsweise eine SATA-Schnittstelle (Serial Advanced Technology Attachment), eine PCIe-Schnittstelle (Peripheral Component Interface Express), eine eMMC-Schnittstelle (embedded MultiMediaCard), eine SD-Schnittstelle oder eine USB-Schnittstelle (Universal Serial Bus) sein. Das Speichersystem 200 kann in einer Ausführungsform ein SSD-Laufwerk (Solid State Drive) sein, wie es beispielsweise in tragbaren Computergeräten, wie Laptop-Computern, Tablet-Computern und Mobiltelefonen, zu finden ist. 1B illustrates a memory module 200 containing several non-volatile memory devices 100 includes. As such, the memory module 200 a memory controller 202 Include that with a host 220 and with a storage system 204 connected to a variety of non-volatile memory devices 100 includes. The interface between the memory controller 202 and the nonvolatile memory devices 100 may be a bus interface, such as a Serial Advanced Technology Attachment (SATA) interface, a Peripheral Component Interface Express (PCIe) interface, an embedded MultiMediaCard (eMMC) interface, an SD interface, or a Universal Serial Port (USB) interface Bus). The storage system 200 For example, in one embodiment, it may be a solid state drive (SSD) such as found in portable computing devices such as laptop computers, tablet computers, and cell phones.

1C ist ein Blockdiagramm, das ein hierarchisches Speichersystem 250 veranschaulicht. Das hierarchische Speichersystem 250 kann eine Vielzahl von Speichersteuerungen 202 einschließen, von denen jede ein entsprechendes Speichersystem 204 steuert. Die Hostsysteme 252 können über eine Busschnittstelle auf Speicher innerhalb des hierarchischen Speichersystems 250 zugreifen. Beispielbusschnittstellen können beispielsweise eine NVMe-Schnittstelle (Non-Volatile Memory express), eine FCoE-Schnittstelle (Fiber Channel over Ethernet), eine SD-Schnittstelle, eine USB-Schnittstelle, eine SATA-Schnittstelle, eine PCIe-Schnittstelle oder eine eMMC-Schnittstelle einschließen. In einer Ausführungsform kann das in 1C dargestellte hierarchische Speichersystem 250 ein rahmenmontierbares Massenspeichersystem sein, auf das von mehreren Hostcomputern zugegriffen werden kann, wie es beispielsweise in einem Datenzentrum oder einem anderen Standort, in dem eine Massenspeicherung benötigt wird, zu finden ist. In einer Ausführungsform können die Hostsysteme 252 die in Host 220 beschriebene Funktionalität einschließen. 1C is a block diagram illustrating a hierarchical storage system 250 illustrated. The hierarchical storage system 250 can be a variety of storage controllers 202 each of which includes a corresponding storage system 204 controls. The host systems 252 can access memory within the hierarchical storage system via a bus interface 250 access. Example bus interfaces may include, for example, an NVMe interface (non-volatile memory express), a FCoE interface (Fiber Channel over Ethernet), an SD interface, a USB interface, a SATA interface, a PCIe interface or an eMMC interface lock in. In one embodiment, the in 1C illustrated hierarchical storage system 250 a frame mountable mass storage system that can be accessed by multiple host computers, such as found in a data center or other location where mass storage is required. In one embodiment, the host systems 252 which in host 220 include described functionality.

2A ist ein Blockdiagramm, das beispielhafte Komponenten der Steuerung 102 detaillierter veranschaulicht. Die Steuerung 102 kann ein Frontend-Modul 108, das mit einem Host gekoppelt ist, ein Backend-Modul 110, das mit dem/den nichtflüchtigen Speicherchip(s) 104 gekoppelt ist, und verschiedene andere Module einschließen, die verschiedene Funktionen der nichtflüchtigen Speichervorrichtung 100 durchführen. Im Allgemeinen kann ein Modul Hardware oder eine Kombination aus Hardware und Software sein. Zum Beispiel kann jedes Modul eine anwendungsspezifische integrierte Schaltung (application specific integrated circuit - ASIC), eine anwenderprogrammierbare Gatteranordnung (field programmable gate array - FPGA), eine Schaltung, eine digitale Logikschaltung, eine analoge Schaltung, eine Kombination diskreter Schaltungen, Gatter oder irgendeine andere Art von Hardware oder Kombination davon einschließen. Zusätzlich oder alternativ kann jedes Modul Speicherhardware einschließen, die Anweisungen umfasst, die mit einem Prozessor oder einer Prozessorschaltung ausführbar sind, um eines oder mehrere der Merkmale des Moduls zu implementieren. Wenn eines der Module den Teil des Speichers einschließt, der Befehle umfasst, die mit dem Prozessor ausführbar sind, kann das Modul den Prozessor enthalten oder nicht. In einigen Beispielen kann jedes Modul nur der Teil des Speichers sein, der Anweisungen umfasst, die mit dem Prozessor ausführbar sind, um die Merkmale des entsprechenden Moduls zu implementieren, ohne dass das Modul irgendeine andere Hardware einschließt. Da jedes Modul zumindest einige Hardware einschließt, selbst wenn die enthaltene Hardware Software umfasst, kann jedes Modul austauschbar als Hardwaremodul bezeichnet werden. 2A is a block diagram illustrating example components of the controller 102 illustrated in more detail. The control 102 can be a frontend module 108 that is paired with a host, a backend module 110 which is coupled to the nonvolatile memory chip (s) 104 and various other modules that include various functions of the nonvolatile memory device 100 carry out. In general, a module may be hardware or a combination of hardware and software. For example, each module may include an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a circuit, a digital logic circuit, an analog circuit, a combination of discrete circuits, gates, or any other Type of hardware or combination thereof. Additionally or alternatively, each module may include memory hardware that includes instructions that are executable with a processor or processor circuitry to implement one or more of the features of the module. If one of the modules includes the portion of the memory that includes instructions that are executable with the processor, the module may or may not include the processor. In some examples, each module may be only that portion of the memory that includes instructions that are executable with the processor to implement the features of the corresponding module without the module including any other hardware. Because each module includes at least some hardware, even if the included hardware includes software, each module can be interchangeably referred to as a hardware module.

Die Steuerung 102 kann ein Puffermanager-/Bussteuerungsmodul 114 einschließen, das Puffer in einem Direktzugriffsspeicher (random access memory - RAM) 116 verwaltet und die interne Buszuteilung für die Kommunikation auf einem internen Kommunikationsbus 117 der Steuerung 102 steuert. Ein Nur-Lese-Speicher (read only memory - ROM) 118 kann den Bootcode des Systems speichern und/oder darauf zugreifen. Obwohl sie in 2A als von der Steuerung 102 getrennt angeordnet dargestellt sind, können in anderen Ausführungsformen entweder der RAM 116 oder der ROM 118 oder beide innerhalb der Steuerung 102 angeordnet sein. In noch anderen Ausführungsformen können sich Teile des RAM 116 und des ROM 118 sowohl innerhalb der Steuerung 102 als auch außerhalb der Steuerung 102 befinden. Ferner können in einigen Implementierungen die Steuerung 102, der RAM 116 und der ROM 118 auf separaten Halbleiterelementen angeordnet sein. Wie unten erläutert, können in einer Implementierung die Übermittlungswarteschlangen und die Beendigungswarteschlangen im Steuerungsspeicherpuffer gespeichert werden, der in dem RAM 116 untergebracht sein kann.The control 102 may be a buffer manager / bus control module 114 Include the Buffer in Random Access Memory (RAM) 116 managed and the internal bus allocation for communication on an internal communication bus 117 the controller 102 controls. A read-only memory (ROM) 118 can save and / or access the boot code of the system. Although she is in 2A as from the controller 102 can be shown separated, in other embodiments, either the RAM 116 or the ROM 118 or both within the controller 102 be arranged. In still other embodiments, portions of the RAM may become 116 and the ROM 118 both within the controller 102 as well as outside the controller 102 are located. Further, in some implementations, the controller may 102 , the RAM 116 and the ROM 118 be arranged on separate semiconductor elements. As explained below, in one implementation, the delivery queues and completion queues may be in the Control memory buffer stored in the RAM 116 can be accommodated.

Zusätzlich kann das Frontend-Modul 108 eine Host-Schnittstelle 120 und eine Physical-Layer-Schnittstelle (PHY) 122 aufweisen, die die elektrische Schnittstelle mit dem Host oder der Speichersteuerung der nächsten Ebene bereitstellen. Die Wahl des Typs der Host-Schnittstelle 120 kann von der Art des verwendeten Speichers abhängen. Beispieltypen der Host-Schnittstelle 120 können SATA, SATA Express, SAS, Fibre Channel, USB, PCle und NVMe einschließen, sind aber nicht darauf beschränkt. Die Host-Schnittstelle 120 kann üblicherweise die Übertragung von Daten, Steuersignalen und Zeitsignalen ermöglichen.Additionally, the frontend module 108 a host interface 120 and a physical layer interface (PHY) 122 which provide the electrical interface to the host or the next level storage controller. The choice of the type of host interface 120 may depend on the type of memory used. Example types of the host interface 120 These include, but are not limited to, SATA, SATA Express, SAS, Fiber Channel, USB, PCle, and NVMe. The host interface 120 usually allows the transmission of data, control signals and time signals.

Das Backend-Modul 110 kann eine ECC-Engine (Error Correction Controller) 124 enthalten, die die von dem Host empfangenen Datenbytes codiert und die aus den nichtflüchtigen Speicherchip(s) 104 gelesenen Datenbytes dekodiert und Fehler korrigiert. Wie im Folgenden näher erläutert, kann die ECC-Engine abstimmbar sein, um beispielsweise unterschiedliche Mengen an ECC-Daten basierend auf dem Modus zu erzeugen (z. B. Normalmodus-ECC-Daten im Normalprogrammiermodus erzeugen und Burstmodus-ECC-Daten im Burst-Programmiermodus erzeugen, wobei die Burstmodus-ECC-Daten größer sind als die Normalmodus-ECC-Daten). Das Backend-Modul 110 kann auch einen Befehlssequenzer 126 einschließen, der Befehlssequenzen erzeugt, wie Programmier-, Lese- und Lösch-Befehlssequenzen, die zu dem/den nichtflüchtigen Speicher-Die(s) 104 zu übertragen sind. Zusätzlich kann das Backend-Modul 110 ein RAID-Modul (Redundant Array of Independent Drives) 128 einschließen, das die Erzeugung von RAID-Parität und Wiederherstellung ausgefallener Daten verwaltet. Die RAID-Parität kann als ein zusätzlicher Integritätsschutzgrad für die Daten verwendet werden, die in die nichtflüchtige Speichervorrichtung 100 geschrieben werden. In einigen Fällen kann das RAID-Modul 128 Teil des ECC-Engine 124 sein. Eine Speicherschnittstelle 130 liefert die Befehlssequenzen an das/die nichtflüchtigen Speicher-Die(s) 104 und empfängt Statusinformationen von dem/den nichtflüchtigen Speicher-Die(s) 104. Zusätzlich zu den Befehlssequenzen und Statusinformationen können Daten, die in den/die nichtflüchtigen Speicherchip(s) 104 programmiert und daraus ausgelesen werden sollen, über die Speicherschnittstelle 130 kommuniziert werden. In einer Ausführungsform kann die Speicherschnittstelle 130 eine DDR-Schnittstelle (Double Date Rate) und/oder eine Toggle-Modus 200, 400, oder 800 Schnittstelle sein. Eine Flash-Steuerschicht 132 kann den Gesamtbetrieb des Backend-Moduls 110 steuern.The backend module 110 Can An ECC Engine (Error Correction Controller) 124 that encodes the bytes of data received from the host and that is sent from the nonvolatile memory chip (s). 104 data bytes decoded and errors corrected. As further explained below, the ECC engine may be tunable to generate, for example, different amounts of ECC data based on the mode (eg, generate normal mode ECC data in normal programming mode and burst mode ECC data in burst mode). Generate programming mode, where the burst mode ECC data is greater than the normal mode ECC data). The backend module 110 can also use a command sequencer 126 which generates instruction sequences such as program, read and erase instruction sequences to be transmitted to the nonvolatile memory die 104 (s) 104. In addition, the backend module 110 a RAID module (Redundant Array of Independent Drives) 128 which manages the generation of RAID parity and recovery of failed data. The RAID parity may be used as an additional level of integrity protection for the data entering the nonvolatile storage device 100 to be written. In some cases, the RAID module 128 Part of the ECC engine 124 his. A memory interface 130 returns the command sequences to the nonvolatile memory die (s) 104 and receive status information from the nonvolatile memory die (s) 104 , In addition to the command sequences and status information, data to be programmed into and read from the nonvolatile memory chip (s) 104 may be provided via the memory interface 130 be communicated. In one embodiment, the memory interface 130 a DDR interface (Double Date Rate) and / or a toggle mode 200 . 400 , or 800 Be interface. A flash control layer 132 can the overall operation of the backend module 110 control.

Somit kann die Steuerung 102 eine oder mehrere Verwaltungstabellen zum Verwalten von Operationen des Speichersystems 100 einschließen. Eine Art von Verwaltungstabelle enthält eine logische-zu-physische Adressenzuordnungstabelle. Die Größe der logischen-zu-physischen Zuordnungstabelle kann mit der Speichergröße wachsen. In diesem Zusammenhang kann die logische-zu-physische Adresszuordnungstabelle für Hochleistungsspeichervorrichtungen (z. B. größer als 32G) zu groß sein, um sie im SRAM zu speichern, sie kann im nichtflüchtigen Speicher 104 zusammen mit Benutzer- und Hostdaten gespeichert werden. Daher können Zugriffe auf den nichtflüchtigen Speicher 104 zuerst das Lesen der logischen-zu-physischen Adressenzuordnungstabelle aus dem nichtflüchtigen Speicher 104 erfordern.Thus, the controller 102 One or more management tables for managing operations of the storage system 100 lock in. One type of management table includes a logical-to-physical address mapping table. The size of the logical-to-physical mapping table can grow with memory size. In this regard, the logical-to-physical address mapping table for high performance memory devices (e.g., greater than 32G ) To be too large to store in the SRAM, it can be stored in non-volatile memory 104 stored together with user and host data. Therefore, accesses to the non-volatile memory 104 First, read the logical-to-physical address map from the nonvolatile memory 104 require.

Zusätzliche Module der in 2A veranschaulichten Speichervorrichtung 100 können eine Medienverwaltungsschicht 138 zum Abnutzungsausgleich von Speicherzellen des nichtflüchtigen Speicherchips 104 einschließen. Die nichtflüchtige Speichervorrichtung 100 kann auch andere diskrete Komponenten 140 enthalten, wie externe elektrische Schnittstellen, externen RAM, Widerstände, Kondensatoren oder andere Komponenten, die mit der Steuerung 102 verbunden sein können. In alternativen Ausführungsformen sind eine oder mehrere der Komponenten RAID-Modul 128, Medienverwaltungsschicht 138 und Pufferverwaltungs-/ Bussteuerung 114 optionale Komponenten, die in der Steuerung 102 möglicherweise nicht notwendig sind.Additional modules of in 2A illustrated storage device 100 can be a media management layer 138 for wear compensation of memory cells of the nonvolatile memory chip 104 lock in. The nonvolatile storage device 100 can also have other discrete components 140 included, such as external electrical interfaces, external RAM, resistors, capacitors or other components that come with the controller 102 can be connected. In alternative embodiments, one or more of the components are RAID module 128 , Media Management Layer 138 and buffer management / bus control 114 optional components included in the controller 102 may not be necessary.

Andere Module der nichtflüchtigen Speichervorrichtung 100, die in 2A veranschaulicht sind, können ein Host-Befehlsschreibmodul 111, ein Ausführungsmodul spekulativer Befehle 112 und ein Host-Überschreibbestimmungsmodul 113 einschließen. Diese Module sind, wie gezeigt, von den anderen Modulen der nichtflüchtigen Speichervorrichtung 100 getrennt, obwohl in anderen Konfigurationen eines oder mehrere von ihnen ein Teil von einem der anderen Module sein kann.Other modules of the nonvolatile memory device 100 , in the 2A can be a host command writing module 111 , an execution module of speculative instructions 112 and a host override determination module 113 lock in. As shown, these modules are from the other modules of the nonvolatile memory device 100 although in other configurations one or more of them may be part of one of the other modules.

Wie unten detaillierter besprochen, kann die Speichervorrichtung bestimmen, ob die Hostvorrichtung in die Übermittlungswarteschlange geschrieben hat, bevor die Hostvorrichtung die Speichervorrichtung unter Verwendung des Host-Befehlsschreibmoduls 111 formal benachrichtigt. Weiterhin kann in Reaktion darauf, dass die Speichervorrichtung bestimmt, dass der Host einen Befehl in die Übermittlungswarteschlange geschrieben hat, das Ausführungsmodul spekulativer Befehle 112 beginnen, den Befehl vor einer formalen Benachrichtigung von der Hostvorrichtung auszuführen. Zusätzlich kann das Host-Überschreibbestimmungsmodul 113 bestimmen, ob die Hostvorrichtung den Befehl, welcher der spekulativen Ausführung unterliegt, überschrieben hat, wie nachstehend detaillierter erläutert wird.As discussed in greater detail below, the storage device may determine whether the host device has written to the delivery queue before the host device accesses the storage device using the host command writing module 111 formally notified. Further, in response to the storage device determining that the host has written a command to the delivery queue, the execution module may issue speculative instructions 112 begin to execute the command before a formal notification from the host device. In addition, the host override determination module may 113 determine if the host device is the command which subject to speculative execution, as will be explained in greater detail below.

2B ist ein Blockdiagramm, das beispielhafte Komponenten eines nichtflüchtigen Speicherchips 104 detaillierter darstellt. Der nichtflüchtige Speicherchip 104 kann ein nichtflüchtiges Speicherarray 142 einschließen. Das nichtflüchtige Speicherarray 142 kann eine Vielzahl von nichtflüchtigen Speicherelementen oder Zellen einschließen, von denen jedes eingerichtet ist, um ein oder mehrere Datenbits zu speichern. Die nichtflüchtigen Speicherelemente oder Zellen können beliebige geeignete nichtflüchtige Speicherzellen sein, einschließlich NAND-Flash-Speicherzellen und/oder NOR-Flash-Speicherzellen in einer zweidimensionalen und/oder dreidimensionalen Konfiguration. Die Speicherzellen können die Form von Festkörper- (z. B. Flash-) Speicherzellen annehmen und können einmalig programmierbar, mehrfach programmierbar oder vielfach programmierbar sein. Darüber hinaus können die Speicherelemente oder Zellen als Single-Level-Zellen (SLCs) eingerichtet werden, die ein einzelnes Datenbit pro Zelle speichern, Multi-Level-Zellen (MLCs), die mehrere Datenbits pro Zelle speichern, oder Kombinationen davon. Für einige beispielhafte Konfigurationen können die Multi-Level-Zellen (MLCs) Dreifach-Level-Zellen (TLCs) einschließen, die drei Datenbits pro Zelle speichern. 2 B FIG. 10 is a block diagram illustrating example components of a nonvolatile memory chip. FIG 104 represents more detailed. The non-volatile memory chip 104 can be a nonvolatile storage array 142 lock in. The nonvolatile storage array 142 may include a plurality of nonvolatile memory elements or cells, each of which is arranged to store one or more bits of data. The nonvolatile memory elements or cells may be any suitable nonvolatile memory cells, including NAND flash memory cells and / or NOR flash memory cells in a two-dimensional and / or three-dimensional configuration. The memory cells may take the form of solid-state (eg, flash) memory cells and may be one-time programmable, multi-programmable, or multi-programmable. In addition, the storage elements or cells may be set up as single-level cells (SLCs) that store a single data bit per cell, multi-level cells (MLCs) that store multiple bits of data per cell, or combinations thereof. For some example configurations, the multi-level cells (MLCs) may include triple-level cells (TLCs) that store three bits of data per cell.

Zusätzlich kann eine Flash-Speicherzelle in dem Array 142 einen Floating-Gate-Transistor (FGT) einschließen, der ein Floating-Gate und ein Control-Gate aufweist. Das Floating-Gate ist von einem Isolator oder isolierendem Material umgeben, das dabei hilft, Ladung in dem Floating Gate zu halten. Das Vorhandensein oder Fehlen von Ladungen innerhalb des Floating-Gate kann eine Verschiebung in einer Schwellenspannung des FGT verursachen, die verwendet wird, um Logikpegel zu unterscheiden. Das heißt, die FGT-Schwellenspannung kann die Daten anzeigen, die in der Speicherzelle gespeichert sind. Im Folgenden können FGT, Speicherelement und Speicherzelle austauschbar verwendet werden, um sich auf dieselbe physische Einheit zu beziehen.Additionally, a flash memory cell may be in the array 142 a floating gate transistor (FGT) having a floating gate and a control gate. The floating gate is surrounded by an insulator or insulating material that helps hold charge in the floating gate. The presence or absence of charges within the floating gate can cause a shift in a threshold voltage of the FGT that is used to distinguish logic levels. That is, the FGT threshold voltage may indicate the data stored in the memory cell. In the following, FGT, memory element and memory cell can be used interchangeably to refer to the same physical unit.

Die Speicherzellen können in dem Speicherarray 142 in Übereinstimmung mit einer matrixartigen Struktur von Zeilen und Spalten von Speicherzellen angeordnet sein. An dem Schnittpunkt einer Zeile und einer Spalte befindet sich ein FGT (oder eine Speicherzelle). Eine Spalte von FGTs kann als String bezeichnet werden. FGTs in einem String oder einer Spalte können elektrisch in Reihe geschaltet sein. Eine Zeile von FGTs kann als eine Seite bezeichnet werden. Control-Gates von FGTs in einer Seite oder Reihe können elektrisch miteinander verbunden sein.The memory cells may be in the memory array 142 be arranged in accordance with a matrix-like structure of rows and columns of memory cells. At the intersection of a row and a column is an FGT (or memory cell). A column of FGTs can be called a string. FGTs in a string or column can be electrically connected in series. One line of FGTs can be called a page. Control gates of FGTs in a page or row can be electrically connected together.

Das Speicherarray 142 kann auch Wortleitungen und Bitleitungen einschließen, die mit den FGTs verbunden sind. Jede Seite von FGTs ist mit einer Wortleitung verbunden. Insbesondere kann jede Wortleitung mit den Control-Gates von FGTs in einer Seite gekoppelt sein. Zusätzlich kann jeder String von FGTs mit einer Bitleitung gekoppelt sein. Ferner kann sich ein einzelner String über mehrere Wortleitungen erstrecken, und die Anzahl von FGTs in einem String kann gleich der Anzahl von Seiten in einem Block sein.The storage array 142 may also include wordlines and bitlines connected to the FGTs. Each side of FGTs is connected to a wordline. In particular, each wordline may be coupled to the control gates of FGTs in a page. In addition, each string of FGTs may be coupled to a bitline. Further, a single string may span multiple wordlines, and the number of FGTs in a string may equal the number of pages in a block.

Der nichtflüchtige Speicherchip 104 kann ferner einen Seitenpuffer oder Datencache 144 einschließen, der Daten zwischenspeichert, die von dem Speicherarray 142 abgetastet und/oder zu diesem programmiert werden sollen. Der nichtflüchtige Speicherchip 104 kann auch einen Zeilenadressdecodierer 146 und einen Spaltenadressdecodierer 148 einschließen. Der Zeilenadressdecodierer 146 kann eine Zeilenadresse decodieren und eine bestimmte Wortleitung in dem Speicherarray 142 auswählen, wenn Daten in die Speicherzellen des Speicherarrays 142 geschrieben oder aus diesen gelesen werden. Der Spaltenadressdecodierer 148 kann eine Spaltenadresse decodieren, um eine bestimmte Gruppe von Bitleitungen in dem Speicherarray 142 zur elektrischen Kopplung mit dem Datencache 144 auszuwählen.The non-volatile memory chip 104 may also include a page buffer or data cache 144 which caches data from the storage array 142 sampled and / or programmed for this. The non-volatile memory chip 104 can also use a row address decoder 146 and a column address decoder 148 lock in. The row address decoder 146 may decode a row address and a particular wordline in the memory array 142 Select if data in the memory cells of the memory array 142 written or read from these. The column address decoder 148 may decode a column address to a particular group of bitlines in the memory array 142 for electrical coupling to the data cache 144 select.

Außerdem kann der nichtflüchtige Speicherchip 104 eine periphere Schaltung 150 einschließen. Die periphere Schaltung 150 kann eine Zustandsmaschine 151 einschließen, die Statusinformationen an die Steuerung 102 liefert. Andere Funktionalitäten der Zustandsmaschine 151 sind weiter unten detaillierter beschrieben.In addition, the non-volatile memory chip 104 a peripheral circuit 150 lock in. The peripheral circuit 150 can be a state machine 151 Include the status information to the controller 102 supplies. Other functionalities of the state machine 151 are described in more detail below.

3 veranschaulicht eine Sequenz von Schritten zum Verarbeiten eines Befehls über den NVMe-Standard. Wie gezeigt, schließt die Hostvorrichtung 300 eine Hostspeicher 302 ein, und die Speichervorrichtung schließt eine Steuerung ein, wie zum Beispiel eine NVMe-Steuerung 310. In einer Implementierung schließt der Hostspeicher 302 eine Übermittlungswarteschlange 304 und eine Beendigungswarteschlange 306 ein. In der Praxis erzeugt die Hostvorrichtung 300 in der Initialisierungsphase eine oder mehrere Übermittlungswarteschlangen und eine oder mehrere entsprechende Beendigungswarteschlangen. Wie oben erörtert, können in einer Implementierung die Übermittlungswarteschlangen und Beendigungswarteschlangen eine 1:1 - Zuordnung aufweisen, und in einer anderen Implementierung haben die Übermittlungswarteschlangen und Beendigungswarteschlangen keine 1:1 - Zuordnung. 3 illustrates a sequence of steps for processing a command over the NVMe standard. As shown, the host device completes 300 a host memory 302 and the storage device includes control, such as an NVMe controller 310. In one implementation, the host memory completes 302 a delivery queue 304 and a termination queue 306 on. In practice, the host device generates 300 in the initialization phase, one or more delivery queues and one or more corresponding completion queues. As discussed above, in one implementation, the delivery queues and completion queues may have a one-to-one mapping, and in another implementation, the delivery queues and completion queues do not have a one-to-one mapping.

Eingangs kann die Hostvorrichtung 300 die Speichervorrichtung über die Übermittlungswarteschlange(n) und die Beendigungswarteschlange(n) informieren, indem sie Informationen wie beispielsweise die Basisadresse für jede Warteschlange an die Speichervorrichtung sendet. In dieser Hinsicht weist jede Übermittlungswarteschlange eine entsprechende Beendigungswarteschlange auf. Wenn sich die Übermittlungswarteschlange und die Beendigungswarteschlange in der Hostvorrichtung befinden, sendet die Hostvorrichtung Informationen an die Speichervorrichtung, damit die Speichervorrichtung die Positionen der Übermittlungswarteschlange und der Beendigungswarteschlange in der Hostvorrichtung bestimmen kann. In einer spezifischen Implementierung sendet die Hostvorrichtung einen Befehl, der die Erzeugung der Übermittlungswarteschlange und der Beendigungswarteschlange anzeigt. Der Befehl kann einen PRP1-Zeiger einschließen, der ein Zeiger auf eine Liste auf der Hostvorrichtung ist, in der die Speicherorte der spezifischen Übermittlungswarteschlange oder der spezifischen Beendigungswarteschlange angegeben sind. In der Praxis sendet die Speichervorrichtung eine TLP-Leseanforderung unter Verwendung des PRP1, um die PRP-Liste zu erhalten, und speichert die PRP-Liste in der Speichervorrichtung, um die Speicherplätze innerhalb der Hostvorrichtung zu bestimmen, die in zukünftigen Befehlen zum Lesen aus der spezifischen Übermittlungswarteschlange oder zum Schreiben in die spezifische Beendigungswarteschlange verwendet werden. Alternativ kann die Hostvorrichtung 300 die Speichervorrichtung anweisen, die Übermittlungswarteschlange(en) und die entsprechende Beendigungswarteschlange(en) in einem Speicher, der sich in der Speichervorrichtung befindet, wie z. B. einem Steuerungsspeicherpuffer, zu erzeugen.Input can be the host device 300 informing the storage device of the delivery queue (s) and completion queue (s) by providing information such as the base address for each queue the storage device sends. In this regard, each submission queue has a corresponding completion queue. When the delivery queue and the completion queue are in the host device, the host device sends information to the storage device to allow the storage device to determine the locations of the delivery queue and the completion queue in the host device. In a specific implementation, the host device sends a command indicating the generation of the delivery queue and the completion queue. The instruction may include a PRP1 pointer which is a pointer to a list on the host device indicating the storage locations of the specific delivery queue or specific completion queue. In practice, the storage device sends a TLP read request using the PRP1 to obtain the PRP list and stores the PRP list in the storage device to determine the locations within the host device that will be used in future commands to read from the specific delivery queue or used to write to the specific completion queue. Alternatively, the host device 300 instruct the storage device, the delivery queue (s), and the corresponding completion queue (s) in a memory located in the storage device, such as a storage device. A control memory buffer.

Die Übermittlungswarteschlange 304 kann auf einem Ringpuffer basieren, wie in 3 veranschaulicht, mit einem Anfangszeiger und einem Endzeiger. Nach dem Erzeugen der Übermittlungswarteschlange(en) und dem Benachrichtigen der Speichervorrichtung über die erzeugte Übermittlungswarteschlange(en) kann die Hostvorrichtung 300 einen Befehl (oder mehrere Befehle) in die Übermittlungswarteschlange schreiben. Dies ist in 3 als Schritt 1 angegeben, mit der Bezeichnung „Warteschlangenbefehl“. Insbesondere veranschaulicht 3, dass vier Befehle in die Übermittlungswarteschlange geschrieben wurden. In einer Implementierung ist der Speichervorrichtung nicht bekannt, dass die Hostvorrichtung 300 die Übermittlungswarteschlange 304 mit vier Befehlen aktualisiert hat, da die Hostvorrichtung 300 ihren eigenen Hostspeicher 302 aktualisiert hat. In einer anderen Implementierung (z. B. wenn sich die Übermittlungswarteschlange(n) und die Beendigungswarteschlange(n) im Steuerungsspeicherpuffer befinden), kann die Speichervorrichtung eine Kommunikationsschnittstelle zwischen der Hostvorrichtung 300 und der Speichervorrichtung für bestimmte Kommunikationen überwachen, wie z. B. das Schreiben in die auf der Speichervorrichtung vorhandene(n) Übermittlungswarteschlange(n). Zum Beispiel kann die Speichervorrichtung die Transportschichtpakete (TLPs) auf dem PCI-Express-Bus überwachen, um zu bestimmen, ob die Hostvorrichtung 300 ein TLP gesendet hat, das zu einer Aktualisierung der in dem Steuerungsspeicherpuffer vorhandenen Übermittlungswarteschlange führt. In dieser Hinsicht kann die Speichervorrichtung einen oder mehrere Einträge identifizieren, die in die Übermittlungswarteschlange(n) geschrieben werden.The delivery queue 304 can be based on a ring buffer, as in 3 illustrated with an initial pointer and an end pointer. After generating the delivery queue (s) and notifying the storage device of the generated delivery queue (s), the host device may 300 Write a command (or multiple commands) to the submission queue. This is in 3 as a step 1 specified, named "Queue Command". In particular, illustrated 3 that four commands were written to the submission queue. In one implementation, the storage device is not aware of the host device 300 the delivery queue 304 has updated with four commands, since the host device 300 their own host storage 302 has updated. In another implementation (eg, when the delivery queue (s) and the completion queue (s) are in the control storage buffer), the storage device may provide a communication interface between the host device 300 and the storage device for certain communications monitor such. For example, writing to the transfer queue (s) on the storage device. For example, the storage device may monitor the transport layer packets (TLPs) on the PCI Express bus to determine whether the host device 300 has sent a TLP that results in an update of the delivery queue present in the control storage buffer. In this regard, the storage device may identify one or more entries written to the delivery queue (s).

In Schritt 2 schreibt die Host-Vorrichtung 300 in ein End-Doorbell-Register der Übermittlungswarteschlange 312 in der Speichervorrichtung. Dieses Schreiben in das End-Doorbell-Register der Übermittlungswarteschlange 312 zeigt der Speichervorrichtung an, dass die Hostvorrichtung einen oder mehrere Befehle in dieser spezifischen Übermittlungswarteschlange 304 (z. B. 4 Befehle, wie in 3 veranschaulicht) eingereiht hat. Das Schreiben in das End-Doorbell-Register der Übermittlungswarteschlange 312 kann eine von mehreren Formen annehmen. Einerseits zeigt die Hostvorrichtung 300 ein neues Ende für die Übermittlungswarteschlange 304 an, wodurch die Anzahl von Befehlen angezeigt wird, die in die Übermittlungswarteschlange 304 geschrieben wurden. Da somit die Speichervorrichtung die Basisadresse für die Übermittlungswarteschlange 304 kennt, muss die Speichervorrichtung nur die Endadresse kennen, um die Anzahl neuer Befehle anzuzeigen, die in die Übermittlungswarteschlange 304 geschrieben wurden. Nachdem ein Befehl (oder ein Satz von Befehlen) verarbeitet wurde, legt die Speichervorrichtung dann den neuen Anfang der Übermittlungswarteschlange 304 entsprechend fest. So dass der Endzeiger einen „Versatz“ von dem Anfangszeiger darstellen kann. Andererseits gibt die Hostvorrichtung 300 eine Anzahl von Befehlen an, die in die Übermittlungswarteschlange 304 geschrieben wurden. In der Praxis weist jede Übermittlungswarteschlange 304 ein entsprechendes End-Doorbell-Register der Übermittlungswarteschlange in der Speichervorrichtung auf, so dass, wenn die Hostvorrichtung 300 ein bestimmtes Doorbell-Register aktualisiert (das mit einer bestimmten Übermittlungswarteschlange 304 korreliert), die Speichervorrichtung basierend auf dem Doorbell-Register bestimmen kann, welche bestimmte Übermittlungswarteschlange 304 aktualisiert wurde.In step 2 writes the host device 300 into an end-Doorbell register of the delivery queue 312 in the storage device. This write to the end-Doorbell register of the delivery queue 312 indicates to the storage device that the host device has one or more commands in that specific delivery queue 304 (eg 4 commands, as in 3 illustrated). Writing to the end-Doorbell register of the delivery queue 312 can take one of several forms. On the one hand shows the host device 300 a new end for the delivery queue 304 , which indicates the number of commands that are in the submission queue 304 were written. Thus, the storage device is the base address for the delivery queue 304 The storage device only needs to know the end address to indicate the number of new instructions that will be in the delivery queue 304 were written. After a command (or set of commands) has been processed, the storage device then places the new beginning of the delivery queue 304 accordingly. So that the tail pointer can represent an "offset" from the start pointer. On the other hand, the host device gives 300 a number of commands that are in the submission queue 304 were written. In practice, each submission queue points 304 a corresponding end Doorbell register of the transmission queue in the memory device, so that when the host device 300 updated a particular Doorbell register (that with a specific delivery queue 304 The storage device may determine which particular delivery queue based on the Doorbell register 304 was updated.

Nach Schritt 2 (wobei die Speichervorrichtung über einen/mehrere Befehl(e) auf der Übermittlungswarteschlange 304 informiert wird) und vor Schritt 3 (wobei die Speichervorrichtung den/die Befehl(e) abruft), ist sich die Speichervorrichtung dessen bewusst, dass in der Übermittlungswarteschlange 304 ein/mehrere Befehl(e) anstehen. Im Allgemeinen kann es mehrere Übermittlungswarteschlangen (mit potentiell vielen anstehenden Befehlen in den verschiedenen Übermittlungswarteschlangen) geben. Somit kann die Speichervorrichtungssteuerung vor dem Ausführen des Schrittes 3 zwischen den verschiedenen Übermittlungswarteschlangen entscheiden, um die bestimmte Übermittlungswarteschlange auszuwählen, von der der/die Befehl(e) abzurufen ist/sind.After step 2 (where the storage device is one or more command (s) on the delivery queue 304 informed) and before step 3 (With the storage device retrieving the command (s)) the storage device is aware that in the delivery queue 304 one / more command (s) pending. In general, there can be multiple delivery queues (with potentially many pending commands in the different delivery queues). Thus, the storage device controller may perform prior to performing the step 3 between the different delivery queues to select the particular delivery queue from which to retrieve the command (s).

Als Reaktion auf das Bestimmen, von welcher bestimmten Übermittlungswarteschlange 304 der/die Befehl(e) abzurufen ist/sind, ruft die Speichervorrichtung in Schritt 3 den/die Befehl(e) aus der bestimmten Übermittlungswarteschlange 304 ab. In der Praxis kann die Speichervorrichtung auf die Basisadresse der bestimmten Übermittlungswarteschlange 304 und auf den Zeiger auf dem aktuellen Anfangszeiger zugreifen, der in der Hostvorrichtung 300 implementiert ist.In response to determining which particular delivery queue 304 the command (s) are to be retrieved, the storage device calls in step 3 the command (s) from the particular delivery queue 304 from. In practice, the storage device may access the base address of the particular delivery queue 304 and access the pointer on the current header pointer in the host device 300 is implemented.

Wie oben erläutert, kann der Übermittlungswarteschlange oder der Beendigungswarteschlange ein Speicherbereich zugewiesen werden (wie etwa in der Hostvorrichtung oder in dem Steuerungsspeicherpuffer in der Speichervorrichtung). Die Übermittlungswarteschlange und die Beendigungswarteschlange können mehrere Einträge einschließen, die jeweils einem spezifischen Befehl zugeordnet sind. Die Größe jedes Eintrags kann eine vorbestimmte Größe sein, wie 64 Kb. In diesem Zusammenhang können Einträge innerhalb der Übermittlungswarteschlange anhand der Basisadresse für die Übermittlungswarteschlange und durch Verrechnung der Basisadresse mit der Anzahl der Einträge multipliziert mit der Größe jedes Eintrags (z. B. 64 Kb) bestimmt werden.As explained above, the transmission queue or the completion queue may be allocated a memory area (such as in the host device or in the control memory buffer in the memory device). The delivery queue and the completion queue may include multiple entries, each associated with a specific instruction. The size of each entry may be a predetermined size, such as 64 Kb. In this regard, entries within the delivery queue may be based on the base address for the delivery queue and offsetting the base address against the number of entries multiplied by the size of each entry (e.g. Kb) are determined.

Wie oben erläutert, hat die Speichervorrichtung Kenntnis von dem Endzeiger, über den sie in Schritt 2 benachrichtigt wurde. Somit kann die Speichervorrichtung alle neuen Befehle aus der Übermittlungswarteschlange 304 erhalten. In einer Übermittlungswarteschlange, die sich auf der Hostvorrichtung befindet, kann die Speichervorrichtung eine TLP-Aufforderung senden, um (den) die Befehl(e) aus der Übermittlungswarteschlange 304 zu erhalten. Als Antwort auf den Empfang der TLP-Anforderung sendet die Hostvorrichtung 300 eine TLP-Beendigungsnachricht mit den Befehlen in die Übermittlungswarteschlange 304. In diesem Zusammenhang empfängt die Speichereinrichtung am Ende von Schritt 3 den/die Befehl(e) von der Übermittlungswarteschlange 304.As discussed above, the storage device has knowledge of the tail pointer that it used in step 2 was notified. Thus, the storage device can receive all new commands from the delivery queue 304 receive. In a delivery queue located on the host device, the storage device may send a TLP request to receive the command (s) from the delivery queue 304 to obtain. In response to receiving the TLP request, the host device sends 300 a TLP completion message with the instructions in the submission queue 304 , In this connection, the memory device receives at the end of step 3 the command (s) from the delivery queue 304 ,

Bei Schritt 4 verarbeitet die Speichervorrichtung den Befehl. In einer Implementierung analysiert die Speichervorrichtung die Befehle und bestimmt die Schritte zum Ausführen der Befehle (z. B. Lesen/Schreiben/usw.). Zum Beispiel kann der Befehl einen Lesebefehl umfassen. Als Reaktion auf den Empfang des Lesebefehls analysiert die Speichervorrichtung den Lesebefehl, implementiert die Adressumsetzung und greift auf den Flash zu, um die Daten zu empfangen. Nach dem Empfangen der Daten veranlasst die Speichervorrichtung, dass die Daten auf der Hostvorrichtung auf der Grundlage von Informationen in dem Befehl gespeichert werden (z. B. des unten erörterten PRP-1). Als weiteres Beispiel kann der Befehl einen Schreibbefehl umfassen. Als Reaktion auf den Empfang des Schreibbefehls analysiert die Speichervorrichtung den Schreibbefehl, bestimmt den Ort der Daten auf der dem Schreiben unterliegenden Hostvorrichtung, liest die Daten von dem Ort auf der Hostvorrichtung und schreibt die Daten in den Flash-Speicher.At step 4 the storage device processes the command. In one implementation, the storage device analyzes the instructions and determines the steps to execute the instructions (eg, read / write / etc.). For example, the command may include a read command. In response to receiving the read command, the storage device analyzes the read command, implements the address translation, and accesses the flash to receive the data. After receiving the data, the storage device causes the data to be stored on the host device based on information in the command (e.g., the PRP file discussed below). 1 ). As another example, the command may include a write command. In response to receipt of the write command, the storage device analyzes the write command, determines the location of the data on the host device being written, reads the data from the location on the host device, and writes the data into the flash memory.

Insbesondere kann die Speichervorrichtung einen Lesebefehl oder Schreibbefehl mit einem PRP1-Zeiger empfangen. Zum Beispiel beinhaltet ein Lesebefehl, bei dem die Hostvorrichtung die Speichervorrichtung auffordert, aus dem Flash-Speicher zu lesen, einen PRP1-Zeiger, der auf eine PRP-Liste zeigt. Die Speichervorrichtung erhält die PRP-Liste, um die Speicherstellen innerhalb der Hostvorrichtung zu bestimmen, um die Daten zu schreiben, die aus dem Flash-Speicher gelesen wurden. Als anderes Beispiel beinhaltet ein Schreibbefehl, bei dem die Hostvorrichtung die Speichervorrichtung auffordert, Daten in den Flash-Speicher zu schreiben, einen PRP1-Zeiger, der auf eine PRP-Liste zeigt. Die Speichervorrichtung erhält die PRP-Liste, um die Speicherstellen innerhalb der Hostvorrichtung zu bestimmen, von denen die Daten von dem Flash-Speicher zu lesen sind (und um danach die gelesenen Daten auf dem Flash-Speicher zu speichern).In particular, the memory device may receive a read command or a write command with a PRP1 pointer. For example, a read command in which the host device requests the memory device to read from the flash memory includes a PRP1 pointer pointing to a PRP list. The storage device obtains the PRP list to determine the locations within the host device to write the data read from the flash memory. As another example, a write command in which the host device requests the memory device to write data to the flash memory includes a PRP1 pointer pointing to a PRP list. The storage device receives the PRP list to determine the locations within the host device from which to read the data from the flash memory (and thereafter store the read data on the flash memory).

Jeder Eintrag in der PRP-Liste kann einem bestimmten Abschnitt in dem Hostvorrichtungsspeicher zugeordnet sein und kann eine vorbestimmte Größe, wie beispielsweise 4 Kb, aufweisen. Somit kann es in einer 1 Mb-Übertragung 250 Referenzen in der PRP-Liste geben, wobei jede 4 Kb groß ist. In der Praxis kann die Speichervorrichtung Daten außerhalb der Sequenz abrufen. Dies kann darauf zurückzuführen sein, dass die abzurufenden Daten auf mehreren Flash-Chips liegen, wobei die Chips zum Datenabruf zu unterschiedlichen Zeiten verfügbar sind. Beispielsweise kann die Speichervorrichtung die Daten, die 100-200 Kb der 1 Mb-Übertragung entsprechen, abrufen, bevor die Daten entsprechend 0-100 Kb der 1 Mb-Übertragung abgerufen werden. Dennoch kann die Speichervorrichtung, da die Speichervorrichtung die PRP-Liste hat (und daher die Speicherorte kennt, von denen Hostvorrichtung erwartet, dass die 100-200 Kb darin gespeichert werden), die Daten entsprechend 100-200 Kb der 1 Mb-Übertragung übertragen, ohne zuerst die Daten abgerufen zu haben, die 0-100 Kb der 1 Mb-Übertragung entsprechen.Each entry in the PRP list may be associated with a particular section in the host device memory and may have a predetermined size, such as 4 Kb. Thus it can be in a 1 Mb transmission 250 Give references in the PRP list, each 4 Kb in size. In practice, the storage device may retrieve data outside the sequence. This may be because the data to be retrieved is on multiple flash chips, with the chips being available for retrieval at different times. For example, the memory device may retrieve the data corresponding to 100-200 Kb of the 1 Mb transmission before retrieving the data corresponding to 0-100 Kb of the 1 Mb transmission. Nevertheless, since the storage device has the PRP list (and therefore knows the storage locations where host device expects the 100-200 Kb to be stored therein), the storage device can transfer the data corresponding to 100-200 Kb of the 1 Mb transfer, without having first retrieved the data corresponding to 0-100 Kb of 1 Mb transmission.

In NVMe kann es eine Vielzahl von PCI-e-TLPs geben, um die Daten von der Speichervorrichtung zu der Hostvorrichtung 300 zu übertragen. In der Regel werden die übertragenen Daten in dem Hostspeicher 302 der Hostvorrichtung 300 auf der Grundlage eines Hinweises in dem Befehl gespeichert (z. B. schließt der Befehl eine Adresse ein, um die angeforderten Daten zu speichern).In NVMe, there may be a plurality of PCI-e TLPs to transfer the data from the storage device to the host device 300 transferred to. In general, the data transferred in the host memory 302 the host device 300 stored on the basis of a hint in the command (eg, the command includes an address to store the requested data).

Nach Abschluss des Datentransfers, in Schritt 5, sendet die Speichervorrichtungssteuerung eine Beendigungsnachricht an die relevante Beendigungswarteschlange 306. Wie oben erwähnt, ordnet die Hostvorrichtung 300 in der Initialisierungsphase die Übermittlungswarteschlangen den Beendigungswarteschlangen zu. Damit weiß die Hostvorrichtung 300, welche Befehle in der Übermittlungswarteschlange beendet wurden, ausgehend davon, in welche Beendigungswarteschlange die Speichervorrichtung schreibt. Die Beendigungsnachricht kann Informationen in Bezug auf die Verarbeitung des Befehls/der Befehle enthalten, wie beispielsweise ob der Befehl erfolgreich abgeschlossen wurde oder ob ein Fehler bei der Ausführung des Befehls aufgetreten ist.After completion of the data transfer, in step 5 The storage device controller sends a termination message to the relevant completion queue 306 , As mentioned above, the host device allocates 300 in the initialization phase, the delivery queues to the completion queues. The host device knows this 300 which commands in the delivery queue have been terminated based on which termination queue the storage device is writing to. The completion message may include information related to the processing of the instruction (s), such as whether the instruction has completed successfully or an error has occurred in the execution of the instruction.

Nach dem Schritt 5 weiß die Hostvorrichtung 300 nicht, dass die Speichervorrichtung in die Beendigungswarteschlange 306 eingestellt hat. Dies liegt daran, dass die Speichervorrichtung veranlasst, dass Daten in die Beendigungswarteschlange 306 geschrieben werden. In diesem Zusammenhang benachrichtigt die Speichervorrichtung die Hostvorrichtung 300 in Schritt 6, dass eine Aktualisierung der Beendigungswarteschlange 306 stattgefunden hat. Insbesondere sendet die Speichervorrichtung einen Interrupt an die Hostvorrichtung 300 (z. B. kann in NVMe die Hostvorrichtung 300 einem MSIe-Interrupt verwenden).After the step 5 knows the host device 300 not that the storage device is in the termination queue 306 has set. This is because the storage device causes data to be in the completion queue 306 to be written. In this connection, the storage device notifies the host device 300 in step 6 in that an update of the completion queue 306 took place. In particular, the memory device sends an interrupt to the host device 300 (For example, in NVMe the host device can 300 use an MSIe interrupt).

Als Reaktion auf den Empfang des Interrupts bestimmt die Hostvorrichtung 300, dass ein oder mehrere Beendigungseinträge in der Beendigungswarteschlange 306 für die Hostvorrichtung 300 anstehen. In Schritt 7 verarbeitet die Hostvorrichtung 300 dann die Einträge in der Beendigungswarteschlange 306.In response to receipt of the interrupt, the host device determines 300 in that one or more completion entries in the termination queue 306 for the host device 300 pending. In step 7 processes the host device 300 then the entries in the termination queue 306 ,

Nachdem der Host die Einträge aus der Beendigungswarteschlange 306 verarbeitet hat, benachrichtigt die Hostvorrichtung 300 in Schritt 8 die Speichervorrichtung über die Einträge, die die Hostvorrichtung 300 aus der Beendigungswarteschlange 306 verarbeitet hat. Dies kann durch Aktualisieren eines Anfang-Doorbell-Registers 314 der Beendigungswarteschlange erfolgen, das der Speichervorrichtung anzeigt, dass die Hostvorrichtung 300 einen oder mehrere Einträge aus der Beendigungswarteschlange 306 verarbeitet hat. Als Reaktion auf das Aktualisieren des Anfang-Doorbell-Registers 314 der Beendigungswarteschlange aktualisiert die Speichervorrichtung den Anfang der Beendigungswarteschlange 306. Mit dem neuen Anfang weiß die Speichervorrichtung, welche Einträge in der Beendigungswarteschlange 306 bereits von der Hostvorrichtung 300 verarbeitet wurden und überschrieben werden können.After the host deletes the entries from the termination queue 306 has processed, notifies the host device 300 in step 8th the storage device via the entries that the host device 300 from the termination queue 306 has processed. This can be done by updating a start Doorbell register 314 the termination queue indicating to the storage device that the host device 300 one or more entries from the termination queue 306 has processed. In response to updating the start Doorbell register 314 the termination queue updates the memory device the beginning of the completion queue 306 , With the new beginning, the storage device knows which entries in the termination queue 306 already from the host device 300 have been processed and can be overwritten.

4 ist ein Blockdiagramm mit weiteren beispielhaften Komponenten einer Hostvorrichtung 400 und einer Speichervorrichtung 420. Die Hostvorrichtung 400 schließt den Host-Speicher 402 ein, der Physical Region Page (PRP) 404, Datenpuffer 406 und andere Speicher 408 aufweisen kann. 4 FIG. 10 is a block diagram of other exemplary components of a host device. FIG 400 and a storage device 420 , The host device 400 closes the host memory 402 a, the Physical Region Page (PRP) 404 , Data buffer 406 and other stores 408 can have.

4 veranschaulicht ferner eine Kommunikationsschnittstelle zwischen der Hostvorrichtung 400 und der Speichervorrichtung 420. In einer ersten Implementierung (in 4 nicht dargestellt) ist die Kommunikationsschnittstelle zwischen der Hostvorrichtung und der Speichervorrichtung als Simplexschnittstelle ausgeführt, mit Kommunikationen zu und Kommunikationen von der Speichervorrichtung auf dem gleichen Pfad. In einer zweiten Implementierung (in 4 veranschaulicht) ist die Kommunikationsschnittstelle zwischen der Hostvorrichtung 400 und der Speichervorrichtung 420 als Duplexschnittstelle ausgeführt, mit einem separaten Eingangspfad und einem separaten Ausgangspfad. Der Eingangspfad enthält aus der Perspektive der Speichervorrichtung 420 ankommende Anforderungen von der Hostvorrichtung 400 an die Speichervorrichtung 420. Umgekehrt enthält der Ausgangspfad aus der Perspektive der Speichervorrichtung 420 ausgehende Anforderungen von der Speichervorrichtung 420 an die Hostvorrichtung 400. 4 further illustrates a communication interface between the host device 400 and the storage device 420 , In a first implementation (in 4 not shown), the communication interface between the host device and the storage device is implemented as a simplex interface, with communications to and communications from the storage device on the same path. In a second implementation (in 4 illustrated) is the communication interface between the host device 400 and the storage device 420 designed as a duplex interface, with a separate input path and a separate output path. The input path contains from the perspective of the storage device 420 incoming requests from the host device 400 to the storage device 420 , Conversely, the output path contains from the perspective of the storage device 420 outbound requests from the storage device 420 to the host device 400 ,

Die eingehenden Anforderungen (Anforderungen von der Hostvorrichtung 400 an die Speichervorrichtung 420) können auf verschiedene Arten segmentiert sein, wie eingehende Leseanforderungen und eingehende Schreibanforderungen. Gleichermaßen kann die Speichervorrichtung 400 über den Eingangspfad eine Leseanforderung an einen Speicherabschnitt in der Speichervorrichtung 420 oder eine Schreibanforderung zum Schreiben in einen Speicherabschnitt in die Speichervorrichtung 420 senden. Gleichermaßen kann die Speichervorrichtung 420 über den Ausgangspfad eine Leseanforderung an einen Abschnitt des Speichers in der Hostvorrichtung 400 oder eine Schreibanforderung zum Schreiben in einen Abschnitt des Speichers in der Hostvorrichtung 400 senden.The incoming requests (requests from the host device 400 to the storage device 420 ) can be segmented in several ways, such as incoming read requests and incoming write requests. Similarly, the storage device 400 via the input path, a read request to a memory section in the memory device 420 or a write request for writing to a memory section in the memory device 420 send. Similarly, the storage device 420 via the output path, a read request to a portion of the memory in the host device 400 or a write request for writing to a portion of the memory in the host device 400 send.

In der Praxis kann es bei Verwendung von MVMe eine Reihe von Leseanforderungen (eine Anforderung von der Hostvorrichtung zum Lesen von auf der Speichervorrichtung residenten Daten, und umgekehrt) und eine Reihe von Schreibanforderungen geben (eine Anforderung von der Hostvorrichtung zum Schreiben von Daten an einen auf der Speichervorrichtung residenten Ort, und umgekehrt). Insbesondere kommunizieren die Speichervorrichtung und die Hostvorrichtung in NVMe miteinander über TLP-Anforderungen (Transaction Layer Packet), wie z. B. TLP-Leseanforderungen, um ein Lesen auf der anderen Vorrichtung durchzuführen, oder TLP-Schreibanforderungen, um ein Schreiben auf der anderen Vorrichtung durchzuführen. In einem Beispiel (mit der sich auf der Hostvorrichtung befindenden SQ und CQ) verwendet die Speichervorrichtung als Antwort auf eine (über den Eingangspfad gesendete) TLP-Schreibaufforderung durch die Hostvorrichtung an das Doorbell-Register auf der Speichervorrichtung (wobei das Schreiben in das Doorbell-Register anzeigt, dass ein Befehl in der SQ vorhanden ist) eine TLP-Leseanforderung (über den Ausgangspfad gesendet), um den Schreibbefehl aus der SQ (die sich auf der Hostvorrichtung befindet) abzurufen. Somit ist der Schreibbefehl eine Anforderung für die Speichervorrichtung, Daten in den nichtflüchtigen Speicher zu schreiben. Die Speichervorrichtung analysiert dann den Schreibbefehl bezüglich Informationen, wie zum Beispiel einen Hinweis eines PRP-Pointers (z. B. PRP1) auf eine PRP-Liste. Die PRP-Liste ist eine Reihe von Informationen, wie beispielsweise Pointer oder Adressen, welche den Ort der Daten in der Hostvorrichtung anzeigen. Die Speichervorrichtung verwendet dann eine weitere TLP-Leseanforderung, um Daten von den Pointern oder Adressen in der PRP-Liste zu lesen. Danach führt die Speichervorrichtung den Schreibvorgang durch Speichern der Daten in einem nichtflüchtigen Speicher (z. B. einem Flash-Speicher) auf der Speichervorrichtung durch. Nach dem Speichern der Daten verwendet die Speichervorrichtung eine TLP-Schreibaufforderung, um einen Eintrag in die CQ zu schreiben (der anzeigt, dass der Schreibbefehl beendet wurde). Schließlich verwendet die Speichervorrichtung eine TLP-Schreibaufforderung, um eine Unterbrechung für die Hostvorrichtung zu erzeugen, wobei die Unterbrechung der Hostvorrichtung signalisiert, dass ein Eintrag in der CQ vorhanden ist. Als Antwort auf die Unterbrechung liest die Host-Vorrichtung den Eintrag in der CQ und gibt dann eine TLP-Schreibanforderung an ein CQ-Doorbell-Schreibregister aus, die angibt, dass die Hostvorrichtung den Eintrag in der CQ überprüft hat.In practice, using MVMe, there may be a series of read requests (a request from the host device to read data resident on the storage device, and vice versa) and a series of write requests (a request from the host device to write data to one the storage device resident location, and vice versa). In particular, the storage device and the host device communicate with each other in NVMe TLP requirements (Transaction Layer Packet), such as: For example, TLP read requests to perform a read on the other device, or TLP write requests to perform a write on the other device. In one example (with the SQ and CQ on the host device), the memory device uses the Doorbell register on the memory device in response to a TLP write request (sent via the input path) by the host device (writing to the Doorbell device). Register indicates that a command is present in the SQ) a TLP read request (sent over the output path) to fetch the write command from the SQ (located on the host device). Thus, the write command is a request for the memory device to write data to the nonvolatile memory. The storage device then analyzes the write command for information, such as an indication of a PRP pointer (eg, PRP1) to a PRP list. The PRP list is a set of information, such as pointers or addresses, that indicate the location of the data in the host device. The storage device then uses another TLP read request to read data from the pointers or addresses in the PRP list. Thereafter, the storage device performs the writing operation by storing the data in a nonvolatile memory (eg, a flash memory) on the storage device. After storing the data, the storage device uses a TLP write request to write an entry to the CQ (indicating that the write command has been completed). Finally, the memory device uses a TLP write request to generate an interrupt to the host device, which interrupt signals the host device that an entry exists in the CQ. In response to the interruption, the host device reads the entry in the CQ and then issues a TLP write request to a CQ Doorbell write register indicating that the host device has checked the entry in the CQ.

In einem anderen Beispiel (wobei sich die SQ und die CQ auf der Hostvorrichtung befinden) verwendet die Speichervorrichtung als Antwort auf eine TLP-Schreibaufforderung des Hosts an das Doorbell-Register auf der Speichervorrichtung (wobei das Schreiben in das Doorbell-Register anzeigt, dass ein Befehl auf dem SQ vorliegt) eine TLP-Leseanforderung, um den Lesebefehl von der SQ (die sich auf der Hostvorrichtung befindet) abzurufen. Somit ist der Lesebefehl eine Anforderung für die Speichervorrichtung, Daten aus dem nichtflüchtigen Speicher zu lesen und die gelesenen Daten an die Hostvorrichtung zu senden. Die Speichervorrichtung liest dann den nichtflüchtigen Speicher (z. B. Flash-Speicher) zum Auslesen der Daten. Die Speichervorrichtung kann eine Reihe von Operationen an den Daten ausführen, wie beispielsweise eine Fehlerkorrektur, Codierung/Decodierung, usw., wobei Speicherpuffer zwischen jeder der seriellen Operationen eingestreut sind. Die Speichervorrichtung kann dann den Lesebefehl bezüglich Informationen analysieren, wie zum Beispiel einen Hinweis eines PRP-Pointers (z. B. PRP1) auf eine PRP-Liste. Die PRP-Liste ist eine Reihe von Informationen, wie z. B. Pointer oder Adressen, die den Speicherort in der Hostvorrichtung angeben, um die Daten zu speichern, die aus dem nichtflüchtigen Speicher gelesen (und optional fehlerkorrigiert, verschlüsselt usw.) wurden. Die Speichervorrichtung verwendet dann eine TLP-Leseanforderung, um Daten von den Pointern oder Adressen in der PRP-Liste zu lesen. Danach verwendet die Speichervorrichtung eine TLP-Schreibanforderung, um die Daten zu schreiben, die aus dem nichtflüchtigen Speicher gelesen wurden. Nach dem Schreiben der Daten in die Hostvorrichtung verwendet die Speichervorrichtung eine TLP-Schreibaufforderung, um einen Eintrag in die CQ zu schreiben (der angibt, dass der Lesebefehl beendet wurde). Schließlich verwendet die Speichervorrichtung eine TLP-Schreibaufforderung, um eine Unterbrechung für die Hostvorrichtung zu erzeugen, wobei die Unterbrechung der Hostvorrichtung signalisiert, dass ein Eintrag in der CQ vorhanden ist. Als Antwort auf die Unterbrechung liest die Host-Vorrichtung den Eintrag in der CQ und gibt dann eine TLP-Schreibanforderung an ein CQ-Doorbell-Schreibregister aus, die angibt, dass die Hostvorrichtung den Eintrag in der CQ überprüft hat.In another example (with the SQ and the CQ residing on the host device), the storage device uses the Doorbell register on the storage device (in which writing to the Doorbell register indicates that a write request is made by the host in response to a TLP write request from the host Command on the SQ) is a TLP read request to fetch the read command from the SQ (located on the host device). Thus, the read command is a request for the memory device to read data from the nonvolatile memory and send the read data to the host device. The storage device then reads the nonvolatile memory (eg, flash memory) to read out the data. The memory device may perform a number of operations on the data, such as error correction, encoding / decoding, etc., with memory buffers interspersed between each of the serial operations. The storage device may then analyze the read command for information, such as an indication of a PRP pointer (eg, PRP1) to a PRP list. The PRP list is a set of information, such as: Pointers or addresses indicating the location in the host device to store the data read from the non-volatile memory (and optionally error-corrected, encrypted, etc.). The storage device then uses a TLP read request to read data from the pointers or addresses in the PRP list. Thereafter, the storage device uses a TLP write request to write the data read from the nonvolatile memory. After writing the data to the host device, the storage device uses a TLP write request to write an entry to the CQ (indicating that the read command has ended). Finally, the memory device uses a TLP write request to generate an interrupt to the host device, which interrupt signals the host device that there is an entry in the CQ. In response to the interruption, the host device reads the entry in the CQ and then issues a TLP write request to a CQ Doorbell write register indicating that the host device has checked the entry in the CQ.

Optional können sich die CQ und SQ in der Speichervorrichtung befinden, wie beispielsweise in dem Steuerungsspeicherpuffer (CMB). In diesem Fall kann die Hostvorrichtung eine TLP-Schreibaufforderung (gesendet über den Eingangspfad) an die Speichervorrichtung senden, um in die Beendigungswarteschlange zu schreiben. Gleichermaßen kann die Speichervorrichtung eine TLP-Schreibanforderung (über den Ausgangspfad gesendet) senden, um einen Interrupt für die Hostvorrichtung zu erzeugen.Optionally, the CQ and SQ may reside in the memory device, such as in the Control Memory Buffer (CMB). In this case, the host device may send a TLP write request (sent over the input path) to the storage device to write to the termination queue. Likewise, the memory device may send a TLP write request (sent over the output path) to generate an interrupt for the host device.

Die Speichervorrichtung 420 schließt die Speichervorrichtungssteuerung 422 und die Speicherarrays 446 ein. Das Speicherarray 446 kann auf verschiedene Arten segmentiert werden, wie zum Beispiel in 10 Abschnitte, wie in 4 veranschaulicht. Die Speichervorrichtungssteuerung 422 kann eine oder alle von einer PCIe-MAC- und PHY-Schnittstelle 424 enthalten. Die Speichervorrichtungssteuerung 422 kann auch einen oder mehrere Prozessoren 450 einschließen.The storage device 420 closes the storage device control 422 and the storage arrays 446 on. The storage array 446 can be segmented in several ways, such as in 10 Sections, as in 4 illustrated. The storage device controller 422 can use any or all of a PCIe MAC and PHY interface 424 contain. The storage device controller 422 can also have one or more processors 450 lock in.

Die Speichervorrichtungssteuerung 422 schließt weiterhin den Steuerungsspeicherpuffer (CMB) 426 ein, welcher der Hostvorrichtung 400 zugewiesen ist. Wie oben erörtert, können die verschiedenen Warteschlangen, einschließlich der Übermittlungswarteschlangen und Beendigungswarteschlangen, sich in der Hostvorrichtung oder in der Speichervorrichtung befinden. Wie in 4 gezeigt, befinden sich die Warteschlangen in CMB 426 in der Speichervorrichtung 420, wie zum Beispiel die Übermittlungswarteschlangen 428. Zusätzlich kann CMB 426 andere Daten 430 einschließen.The storage device controller 422 also closes the Control Memory Buffer (CMB) 426 which is the host device 400 is assigned. As discussed above, the various queues, including the Delivery queues and completion queues residing in the host device or in the storage device. As in 4 shown, the queues are in CMB 426 in the storage device 420 , such as the delivery queues 428 , Additionally, CMB 426 other data 430 lock in.

Der Befehlsparser 432 ist eingerichtet, um einen oder mehrere interne Busse, wie den Bus der PCle MAC- und PHY-Schnittstelle 424 zu CMB 426, zu überwachen. Befehlsparser 432 ist weiterhin zum Parsen der durch die Hostvorrichtung 400 in Echtzeit geschriebenen NVMe-Befehle (oder wenn die Befehle intern innerhalb der Speichervorrichtung 420 übermittelt werden) und zur Auswahl der Befehle, die Kandidaten für eine spekulative Ausführung sind, eingerichtet. Befehlsparser 432 kann diese Befehle in der Durchführungseinheit für spekulative Befehle 434 reihen, welche sowohl in Hardware als auch in Firmware implementiert werden können. Wie unten ausführlicher erläutert wird, kann die Durchführungseinheit für spekulative Befehle 434 auf Grundlage von Ressourcen innerhalb der Speichervorrichtung 420 die Ausführungsphase dieser Befehle selbst vor einer formalen Benachrichtigung der Befehle von der Hostvorrichtung 400 starten.The command parser 432 is set up to one or more internal buses, such as the bus of the PCle MAC and PHY interface 424 to CMB 426 to monitor. command parser 432 is still for parsing by the host device 400 real-time written NVMe commands (or if the commands are sent internally within the storage device 420 and to select the commands that are candidates for speculative execution. command parser 432 can use these commands in the performing unit for speculative commands 434 rows that can be implemented both in hardware and in firmware. As will be explained in more detail below, the speculative instructions execution unit may 434 based on resources within the storage device 420 the execution phase of these commands even before a formal notification of the commands from the host device 400 start.

Das Flash-Schnittstellenmodul 440 ist eingerichtet, um die Speicherarrays 446 zu steuern und auf sie zuzugreifen. Beispielsweise kann das Flash-Schnittstellenmodul 440 mit den Speicherarrays 446 interagieren, hauptsächlich bei Lese- und Schreibvorgängen. Planer 440 ist zum Steuern der Datenübertragung während der Aktivierung des Steuerungspfades 436 zum Abrufen der PRPs, der Beendigungsnachricht (z.B. Schritt 5 in 3) und der Unterbrechungen (z.B. Schritt 6 in 3) sowie der Aktivierung der DMAs 438 für die tatsächliche Datenübertragung zwischen der Hostvorrichtung 400 und der Speichervorrichtung 420 eingerichtet. Die Fehlerkorrekturmaschine 442 ist eingerichtet, um die von den Speicherarrays 446 abgerufenen Daten zu korrigieren.The flash interface module 440 is set up to the storage arrays 446 to control and access them. For example, the flash interface module 440 with the storage arrays 446 interact, mainly during read and write operations. planner 440 is for controlling the data transfer during the activation of the control path 436 for retrieving the PRPs, the completion message (eg, step 5 in 3 ) and the interruptions (eg step 6 in 3 ) as well as the activation of the DMAs 438 for the actual data transfer between the host device 400 and the storage device 420 set up. The error correction engine 442 is set up by the storage arrays 446 to correct retrieved data.

In einer Implementierung stellt die spekulative Befehlsausführung nicht spekulativ jeden Ablauf, der sich auf die Hostvorrichtung 400 bezieht, zu. Vielmehr kann die Beendigungsnachricht nur nach dem Warteschlangenbefehl durchgeführt werden, was ein Schreibvorgang in das entsprechende Doorbell-Register sein kann (siehe Schritt 3 in 3).In one implementation, speculative instruction execution does not speculatively expose any process that relates to the host device 400 refers to. Rather, the completion message may be executed only after the queue command, which may be a write to the corresponding Doorbell register (see step 3 in 3 ).

Obwohl 4 Warteschlangen einschließt, wie beispielsweise die Übermittlungswarteschlange 428 in CMB 426 in der Speichervorrichtung 420, kann die spekulative Ausführung durchgeführt werden, wenn sich die Warteschlangen, wie sequentielle Warteschlangen, in der Hostvorrichtung 400 befinden. In diesem Fall können sequentielle Warteschlangen in dem DRAM-Host gespeichert werden. In einigen Anmeldungen kann es vorteilhaft sein, Befehle aus den nächsten Slots in den sequentiellen Warteschlangen vorabzurufen, selbst bevor die Hostvorrichtung 400 die Speichervorrichtung 420 benachrichtigt (z. B. in Schritt 2 von 3 in das Doorbell-Register schreibt). In solchen Implementierungen hält die Speichervorrichtung intern die vorherigen Befehle, die in der Vergangenheit von der Hostvorrichtung 400 in dieselben Slots gereiht wurden. Wenn die Befehle vorabgerufen werden, kann die Speichervorrichtung 420 zuerst erkennen, ob neue Befehle in diesen Slots durch die Hostvorrichtung 400 gesetzt sind, oder ob die vorhergehenden Befehle immer noch vorhanden sind. Wenn es neue verfügbare Befehle gibt, kann die Speichervorrichtung 420 die spekulative Ausführung beginnen, selbst bevor die Hostvorrichtung 400 den Doorbell-Schreibvorgang ausgibt. Somit kann die Speichervorrichtung 420 über die PCIe-MAC-PHY-Schnittstelle 424 kommunizieren, um die neuen Befehle, die sich in den Übermittlungswarteschlangen auf der Hostvorrichtung 400 befinden, vorabzurufen.Even though 4 Includes queues, such as the delivery queue 428 in CMB 426 in the storage device 420 , the speculative execution may be performed when the queues, such as sequential queues, in the host device 400 are located. In this case, sequential queues may be stored in the DRAM host. In some applications, it may be advantageous to pre-fetch commands from the next slots in the sequential queues even before the host device 400 the storage device 420 notified (eg in step 2 from 3 in the Doorbell register writes). In such implementations, the storage device internally holds the previous commands received from the host device in the past 400 in the same slots were ranked. When the commands are prefetched, the storage device may 420 First, be aware of any new commands in these slots by the host device 400 are set, or if the previous commands still exist. If there are new commands available, the storage device can 420 The speculative execution will start even before the host device 400 Issue the Doorbell write. Thus, the storage device 420 communicate via the PCIe MAC PHY interface 424 to the new commands residing in the submission queues on the host device 400 are to be prefetched.

5 ist ein Flussdiagramm 500 zur spekulativen Ausführung eines Befehls in der Übermittlungswarteschlange. In 502 schreibt die Hostvorrichtung 400 einen Befehl in die Übermittlungswarteschlange 428, die sich in CMB 426 befindet. In 504 parst der Befehlsparser 432 den Befehl in Echtzeit, während der Befehl in CMB 426 geschrieben wird. In 506 bestimmt der Befehlsparser 432, ob der Befehl spekulativ auszuführen ist oder nicht. Insbesondere kann der Befehlsparser 432 einen oder mehrere Gesichtspunkte analysieren, um zu bestimmen, ob eine spekulative Ausführung durchzuführen ist. In einer Implementierung analysiert der Befehlsparser 432 den Befehl selbst (z.B. den Typ des Befehls), um zu bestimmen, ob eine spekulative Ausführung durchzuführen ist. In einem Beispiel als Antwort auf die Bestimmung des Befehlsparsers 432, dass der Befehl ein Lesebefehl ist, wird die spekulative Ausführung durchgeführt. In diesem Fall kann die Speichervorrichtung in 510 auf das Speicherarray 446 zugreifen und einige (oder alle) Daten als Antwort auf den Lesebefehl vorabrufen und den Eintritt in einen speziellen Zustand oder eine Datenbank vorbereiten. Umgekehrt gibt es bestimmte NVMe-Befehle, bei denen es keinen hinzugefügten Wert für eine spekulative Ausführung gibt. In dieser Hinsicht beginnt in 508 die Ausführung dieser gewissen NVMe-Befehle erst dann, wenn die Hostvorrichtung über den Befehl benachrichtigt hat (z.B. Schritt 2 von 3). 5 is a flowchart 500 to speculatively execute a command in the delivery queue. In 502 writes the host device 400 a command in the submission queue 428 that are in CMB 426 located. In 504 parses the command parser 432 the command in real time while the command in CMB 426 is written. In 506 determines the command parser 432 whether the command is speculative or not. In particular, the command parser 432 Analyze one or more aspects to determine if speculative execution is to be performed. In one implementation, the command parser parses 432 the instruction itself (eg, the type of instruction) to determine whether to perform a speculative execution. In an example, in response to the determination of the command parser 432 in that the command is a read command, the speculative execution is performed. In this case, the memory device may be connected to the memory array in 510 446 and prefetch some (or all) data in response to the read command and prepare for entry into a particular state or database. Conversely, there are certain NVMe commands where there is no added value for a speculative execution. In this regard, in 508, execution of these certain NVMe instructions will not begin until the host device has notified of the command (eg, step 2 from 3 ).

In einer anderen Implementierung analysiert der Befehlsparser 432 die verfügbaren internen Ressourcen der Speichervorrichtung 420, um zu bestimmen, ob eine spekulative Ausführung durchzuführen ist. In einem Beispiel bestimmt der Befehlsparser 432 als Antwort auf die Bestimmung des Befehlsparsers 432, dass Speichervorrichtung 420 über ausreichende interne Ressourcen zur Durchführung der spekulativen Ausführung verfügt, um die spekulative Ausführung durchzuführen. Umgekehrt, wenn es an einem bestimmten Punkt keine verfügbaren Ressourcen in der Speichervorrichtung gibt, die für die Ausführung des Befehls erforderlich sind, kann der Befehl später ausgeführt werden, und sogar nach der Host-Befehlswarteschlange. In noch einer anderen Implementierung analysiert der Befehlsparser 432 sowohl den Befehl als auch die internen Ressourcen der Speichervorrichtung, indem bestimmt wird, ob eine spekulative Ausführung durchzuführen ist. Wenn somit verfügbare Ressourcen vorhanden sind und wenn der Befehl ein Kandidat für eine spekulative Ausführung ist, startet die Speichervorrichtung die spekulative Ausführungsphase.In another implementation, the command parser parses 432 the available internal resources of the storage device 420 to determine if speculative execution is to be performed. In one example, the command parser determines 432 in response to the determination of the command parser 432 that storage device 420 has sufficient internal resources to perform the speculative execution to perform the speculative execution. Conversely, if at some point there are no available resources in the storage device required to execute the command, the command can be executed later, and even after the host command queue. In yet another implementation, the command parser parses 432 both the instruction and the internal resources of the storage device by determining whether to perform a speculative execution. Thus, if there are available resources and if the instruction is a candidate for speculative execution, the storage device starts the speculative execution phase.

Es gibt Fälle, in denen die Host-Vorrichtung 400 einen Befehl überschreiben kann, nachdem der Befehl in die Übermittlungswarteschlange 428 gesetzt worden ist. Somit bestimmt die Speichervorrichtung in 512, ob die Hostvorrichtung 400 die Befehle überschrieben hat, bevor sie gereiht wurden. Falls dies der Fall ist, wird in 514 die spekulative Ausführung des überschriebenen Befehls aufgehoben. Andernfalls wird in 516 bestimmt, ob die Hostvorrichtung 400 durch Schreiben in das entsprechende Doorbell-Register den Befehl in der Warteschlange gereiht hat (z. B, Schritt 2 von 3). Falls nicht, springt das Flussdiagramm 500 zurück zu 512 und wartet, um zu bestimmen, ob ein Überschreiben aufgetreten ist. Falls dies der Fall ist, kann die Speichervorrichtung 420 in 518 die Befehlsausführung normal fortsetzen, während sie die spekulative Ausführung nutzt. Als ein Beispiel kann die spekulative Ausführung eines Lesebefehls das Lesen von Daten aus den Speicherarrays 446 und das Speichern der gelesenen Daten in temporäre Speicherpuffer aufweisen, wie mit Bezug auf 6 erläutert.There are cases where the host device 400 can overwrite a command after the command enters the submit queue 428 has been set. Thus, the storage device determines in 512 whether the host device 400 overwritten the commands before they were ranked. If this is the case, in 514 canceled the speculative execution of the overwritten command. Otherwise it will be in 516 determines if the host device 400 by placing the command in the queue by writing to the corresponding Doorbell register (eg, step 2 from 3 ). If not, the flowchart jumps 500 back to 512 and wait to determine if overwriting has occurred. If so, the storage device may 420 in 518 continue the command execution normally while using speculative execution. As an example, speculative execution of a read command may involve reading data from the memory arrays 446 and storing the read data into temporary memory buffers as described with reference to 6 explained.

6 ist ein Flussdiagramm 600 für die spekulative Ausführung eines Lesebefehls in der Übermittlungswarteschlange. Wie oben beschrieben, wenn die Hostvorrichtung 400 einen Befehl in die Übermittlungswarteschlange schreibt, der einen Lesezugriff auf das Flash-Speicherarray erfordert, kann der Lesevorgang an diesem Punkt in einer spekulativen Weise beginnen (z.B. ein Rad Look Ahead). Somit wird in 602 bestimmt, ob die Hostvorrichtung einen Befehl geschrieben hat, der einen Lesezugriff erfordert. Falls dies der Fall ist, kann in 604 die Speichervorrichtungssteuerung 422 auf die Speicherarrays 446 in 606 zugreifen, die entsprechenden Seiten lesen und in 608 die gelesenen relevanten Seiten in einem temporären Puffer speichern. Wie oben besprochen, können aus dem Speicherarray 446 gelesene Daten (wie der Flash-Speicher) einem Nachlesevorgang unterliegen, wie eine Fehlerkorrektur und/oder Verschlüsselung/Entschlüsselung. Beispielsweise können die gelesenen Daten zuerst auf Fehler analysiert werden und unter Verwendung des ECC-Controllers 124 Fehler in den gelesenen Daten korrigiert werden. Die korrigierten Daten können dann Gegenstand zum Verschlüsseln oder Entschlüsseln sein und schließlich in dem temporären Puffer gespeichert werden. 6 is a flowchart 600 for the speculative execution of a read command in the submission queue. As described above, when the host device 400 writes a command into the delivery queue requiring read access to the flash memory array, the read may begin at this point in a speculative manner (eg, a wheel look ahead). Thus, in 602 determines whether the host device has written a command that requires a read access. If this is the case, in 604 the storage device controller 422 on the storage arrays 446 in 606 access, read the appropriate pages and in 608 Save the read relevant pages in a temporary buffer. As discussed above, from the memory array 446 read data (such as the flash memory) undergo a read, such as error correction and / or encryption / decryption. For example, the read data may first be analyzed for errors and using the ECC controller 124 Errors in the read data are corrected. The corrected data may then be subject to encryption or decryption and eventually stored in the temporary buffer.

In 610 bestimmt die Speichervorrichtungssteuerung 422, ob die Hostvorrichtung 400 den Befehl in die Warteschlange gestellt hat. Wenn die Hostvorrichtung 400 den Befehl in 612 reiht, wird bestimmt, ob der Befehl überschrieben worden ist. Falls nicht, können in 614 die Daten aus dem temporären Puffer abgerufen werden, anstatt sie aus den Flash-Speicherarrays zu holen. In dieser Hinsicht werden in einer Implementierung die in dem temporären Puffer gespeicherten Daten an den Host nur dann übermittelt, wenn die Hostvorrichtung 400 den Befehl reiht. In einer spezifischeren Implementierung kann die Speichervorrichtung korrigierte entschlüsselte Daten aus dem temporären Puffer zur Übertragung an die Hostvorrichtung abrufen. Auf diese Weise kann die Speichervorrichtung die Funktionen Abruf, Fehlerkorrektur und die Verschlüsselung oder Entschlüsselung vor dem Reihen des Befehls durch die Hostvorrichtung durchführen (z.B. führt die Hostvorrichtung Schritt 2 in 3 durch).In 610 determines the storage device control 422 whether the host device 400 queued the command. If the host device 400 the command in 612 determines whether the command has been overwritten. If not, can in 614 retrieve the data from the temporary buffer instead of fetching it from the flash memory arrays. In this regard, in one implementation, the data stored in the temporary buffer is transmitted to the host only when the host device 400 the order lines up. In a more specific implementation, the storage device may retrieve corrected decrypted data from the temporary buffer for transmission to the host device. In this way, the storage device may perform the fetch, error correction, and encryption or decryption functions before the instruction is fetched by the host device (eg, the host device will perform step 2 in 3 by).

Umgekehrt kann während der Zeit, in der die Daten in dem temporären Puffer gespeichert sind, die Host-Vorrichtung 400 den Befehl überschrieben haben. In diesem Fall werden in 614 die neuen Daten für den entsprechenden Lesebefehl bereitgestellt.Conversely, during the time the data is stored in the temporary buffer, the host device may 400 overwrite the command. In this case, in 614 provided the new data for the corresponding read command.

Aufgrund der spekulativen Ausführung kann die Speichervorrichtung auf die temporären Speicherpuffer zugreifen, um die gelesenen Daten an die Hostvorrichtung zu übertragen, wenn die Hostvorrichtung 400 den Befehl reiht. Dies steht im Gegensatz zur herkömmlichen Befehlsausführung, in der die Daten aus dem Speicherarray als Antwort auf die Befehlsreihung gelesen werden. Daher kann mit Bezug auf Lesebefehle die spekulative Ausführung schneller sein, da das Lesen der Daten aus dem temporären Puffer schneller als das Lesen der Daten aus den Speicherarrays 446 erfolgt. Der Nutzen in diesem Fall könnte signifikant sein, da die Leseleistung von Warteschlangen mit geringer Tiefe leicht erhöht werden kann.Due to the speculative implementation, the memory device may access the temporary memory buffers to transmit the read data to the host device when the host device 400 the order lines up. This is in contrast to conventional instruction execution in which the data is read from the memory array in response to the instruction string. Therefore, with respect to read commands, the speculative execution may be faster because reading the data from the temporary buffer is faster than reading the data from the memory arrays 446 he follows. The benefit in this case could be significant as the read performance of low depth queues can be increased slightly.

Andere Befehle als Lesebefehle können Kandidaten für spekulative Ausführung sein. Beispielsweise können Schreibbefehle spekulativ ausgeführt werden. Insbesondere kann die spekulative Ausführung für Flash-Schreibvorgänge den Abruf der Flash-Translation-Layer-(FTL)-Tabelle aufweisen, die für Adressübersetzungen verwendet wird (z.B. logischer Block in eine physikalischer Blockübersetzungstabelle). In einem weiteren Beispiel können Energieverwaltungsbefehle spekulativ ausgeführt werden. Insbesondere kann die Hostvorrichtung 400 die Speichervorrichtung auffordern, in einen spezifischen NVMe-Leistungszustand unter Verwendung des Funktionseinstellungsbefehls einzutreten. Die spekulative Ausführung kann in diesem Fall das Flushen aller internen Caches in das Flash-Speicherarray und andere auf diesen speziellen Zustand bezogene Vorbereitungen einschließen. In einem noch weiteren Beispiel können Flush-Befehle spekulativ ausgeführt werden. Insbesondere kann die Hostvorrichtung 400 Flush-Befehle senden. Als Antwort flusht die Speichervorrichtung 420 ihre temporären Puffer auf das Medium und stellt dann der Hostvorrichtung 400 eine Beendigungsnachricht zu. Für einen spekulativen Flush-Vorgang kann die Speichervorrichtung 420 den Flush-Vorgang wie üblich starten. Im schlimmsten Fall kann die Hostvorrichtung den Befehl überschreiben (z.B. wird den Befehl nicht reihen). Nichtsdestotrotz hat auch dann, wenn die Speichervorrichtung 420 die Flush-Vorgänge ausführt, die Speichervorrichtung 420 keine Regel missachtet.Commands other than read commands may be speculative execution candidates. For example, write commands may be speculative. In particular, the speculative execution for flash writes may include retrieval of the Flash Translation Layer (FTL) table used for address translations (eg, logical block into a physical block translation table). In another example Power management commands are executed speculatively. In particular, the host device 400 prompt the storage device to enter a specific NVMe power state using the function setting command. The speculative execution in this case may include flushing all internal caches into the flash memory array and other preparations related to that particular state. In yet another example, flush commands may be performed speculatively. In particular, the host device 400 Send flush commands. In response, the storage device flutters 420 put their temporary buffer on the medium and then put the host device 400 a completion message too. For a speculative flush, the storage device may 420 start the flushing process as usual. In the worst case, the host device may override the command (eg, will not order the command). Nonetheless, even if the storage device has 420 executing flushes, the storage device 420 no rule disregarded.

Schließlich kann, wie oben erwähnt, jeder geeignete Speichertyp verwendet werden. Halbleiter-Speichervorrichtungen schließen flüchtige Speichervorrichtungen ein, wie beispielsweise „DRAM“-Speichervorrichtungen (Dynamic Random Access Memory) oder „SRAM“-Speichervorrichtungen (Static Random Access Memory), nichtflüchtige Speicher wie „ReRAM“-Speicher (Resistive Random Access Memory), „EEPROM“-Speicher (Electrically Erasable Programmable Read Only Memory), Flash-Speicher (der auch als Untergruppe eines EEPROM angesehen werden kann), „FRAM“-Speicher (Ferroelectric Random Access Memory) und „MRAM“-Speicher (Magnetoresistive Random Access Memory) und andere Halbleiterelemente, die Informationen speichern können. Jede Art von Speichervorrichtung kann unterschiedliche Konfigurationen aufweisen. Zum Beispiel können Flash-Speichervorrichtungen in einer NAND- oder NOR-Konfiguration eingerichtet sein.Finally, as mentioned above, any suitable storage type can be used. Semiconductor memory devices include volatile memory devices, such as "Dynamic Random Access Memory (DRAM) memory devices, or Static Random Access Memory (SRAM) memory devices, nonvolatile memory such as Resistive Random Access Memory (ReRAM) memories." Electrically Erasable Programmable Read Only Memory, Flash Memory (which may also be considered a subset of an EEPROM), Ferroelectric Random Access Memory (FRAM), and Magnetoresistive Random Access Memory (MRAM) memory ) and other semiconductor elements that can store information. Each type of storage device may have different configurations. For example, flash memory devices may be configured in a NAND or NOR configuration.

Die Speichervorrichtungen können aus passiven und/oder aktiven Elementen in beliebigen Kombinationen gebildet sein. Als ein nicht einschränkendes Beispiel sei angeführt, dass passive Halbleiter-Speicherelemente ReRAM-Vorrichtungselemente einschließen, die in einigen Ausführungsformen ein Speicherelement mit Widerstandsumschaltung, wie beispielsweise ein Anti-Fuse-, Phasenwechsel-Material usw. und optional ein Lenkelement, wie eine Diode usw., enthalten. Ferner sei als nicht einschränkendes Beispiel genannt, dass aktive Halbleiter-Speicherelemente EEPROM- und Flash-Speichervorrichtungselemente enthalten, die in einigen Ausführungsformen Elemente mit einem Ladungsspeicherbereich, wie beispielsweise ein Floating-Gate, leitende Nanopartikel, oder ein Ladung speicherndes dielektrisches Material enthalten.The memory devices may be formed of passive and / or active elements in any combination. As a non-limiting example, passive semiconductor memory devices include ReRAM device elements, in some embodiments a resistive memory element such as an anti-fuse, phase change material, etc., and optionally a steering element such as a diode, etc. , contain. Further, by way of non-limiting example, semiconductor active memory elements include EEPROM and flash memory device elements, which in some embodiments include elements having a charge storage region, such as a floating gate, conductive nanoparticles, or a charge-storing dielectric material.

Mehrere Speicherelemente können so eingerichtet sein, dass sie in Reihe geschaltet sind oder dass jedes Element einzeln zugänglich ist. Als nicht einschränkendes Beispiel enthalten Flash-Speichervorrichtungen in NAND-Konfiguration (NAND-Speicher) üblicherweise Speicherelemente, die in Reihe geschaltet sind. Ein NAND-Speicherarray kann so eingerichtet sein, dass das Array aus mehreren Speicherketten zusammengesetzt ist, in denen eine Kette aus mehreren Speicherelementen zusammengesetzt ist, die sich eine einzelne Bitleitung teilen und auf die als eine Gruppe zugegriffen wird. Alternativ können Speicherelemente so konfiguriert sein, dass jedes Element einzeln zugänglich ist, z. B. ein NOR-Speicherarray. NAND- und NOR-Speicherkonfigurationen sind beispielhaft, und Speicherelemente können anderweitig eingerichtet sein.Multiple storage elements can be set up in series or each item can be accessed individually. As a non-limiting example, flash memory devices in NAND (NAND) configuration typically include memory elements connected in series. A NAND memory array may be arranged such that the array is composed of a plurality of memory chains in which a chain is composed of a plurality of memory elements that share a single bit line and are accessed as a group. Alternatively, memory elements may be configured so that each element is individually accessible, e.g. B. a NOR memory array. NAND and NOR memory configurations are exemplary, and memory elements may be otherwise configured.

Die Halbleiterspeicherelemente, die innerhalb und/oder über einem Substrat angeordnet sind, können in zwei oder drei Dimensionen angeordnet sein, wie einer zweidimensionalen Speicherstruktur oder einer dreidimensionalen Speicherstruktur.The semiconductor memory elements disposed within and / or over a substrate may be arranged in two or three dimensions, such as a two-dimensional memory structure or a three-dimensional memory structure.

In einer zweidimensionalen Speicherstruktur sind die Halbleiterspeicherelemente in einer einzelnen Ebene oder einer einzelnen Speichervorrichtungsebene angeordnet. Üblicherweise sind in einer zweidimensionalen Speicherstruktur Speicherelemente in einer Ebene (z. B. in einer x-z-Richtung-Ebene) angeordnet, die sich im Wesentlichen parallel zu einer Hauptfläche eines Substrats erstreckt, das die Speicherelemente trägt. Das Substrat kann ein Wafer sein, über oder in dem die Schicht der Speicherelemente gebildet ist, oder es kann ein Trägersubstrat sein, das nach dem Ausbilden an den Speicherelementen befestigt ist. Als ein nicht einschränkendes Beispiel, kann das Substrat einen Halbleiter wie Silizium einschließen.In a two-dimensional memory structure, the semiconductor memory elements are arranged in a single plane or a single memory device plane. Typically, in a two-dimensional memory structure, memory elements are arranged in a plane (eg, in an x-z direction plane) that extends substantially parallel to a major surface of a substrate carrying the memory elements. The substrate may be a wafer over or in which the layer of memory elements is formed, or it may be a carrier substrate attached to the memory elements after formation. As a non-limiting example, the substrate may include a semiconductor such as silicon.

Die Speicherelemente können auf der einzelnen Speichervorrichtungsebene in einem geordneten Array angeordnet sein, wie in einer Vielzahl von Zeilen und/oder Spalten. Jedoch können die Speicherelemente in nicht regelmäßigen oder nicht orthogonalen Konfigurationen angeordnet sein. Die Speicherelemente können jeweils zwei oder mehr Elektroden oder Kontaktleitungen, wie Bitleitungen und Wortleitungen, aufweisen.The storage elements may be arranged on the single storage device level in an ordered array, such as in a plurality of rows and / or columns. However, the memory elements may be arranged in non-regular or non-orthogonal configurations. The memory elements may each comprise two or more electrodes or contact lines, such as bit lines and word lines.

Ein dreidimensionales Speicherarray ist so angeordnet, dass Speicherelemente mehrere Ebenen oder mehrere Speichervorrichtungsebenen belegen, wodurch eine Struktur in drei Dimensionen gebildet wird (d. h. in der x-, y- und z-Richtung, wo die y-Richtung im Wesentlichen senkrecht ist und die x- und z-Richtungen im Wesentlichen parallel zur Hauptoberfläche des Substrats verlaufen).A three-dimensional memory array is arranged such that memory elements occupy multiple levels or multiple memory device levels, thereby forming a structure in three dimensions (ie, in the x, y, and z directions, where the y-direction is substantially perpendicular and the x and z-directions are substantially parallel to the main surface of the substrate).

Als ein nicht einschränkendes Beispiel kann eine dreidimensionale Speicherstruktur vertikal als ein Stapel von mehreren zweidimensionalen Speichervorrichtungsebenen angeordnet sein. Als weiteres nicht einschränkendes Beispiel kann ein dreidimensionales Speicherarray als mehrere vertikale Spalten (z. B. Spalten, die sich im Wesentlichen senkrecht zur Hauptfläche des Substrats erstrecken, d. h. in y-Richtung) angeordnet sein, wobei jede Spalte mehrere Speicherelemente in jeder Spalte aufweist. Die Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-z-Ebene, was in einer dreidimensionalen Anordnung von Speicherelementen mit Elementen auf mehreren vertikal gestapelten Speicherebenen resultiert. Andere Konfigurationen von Speicherelementen in drei Dimensionen können auch ein dreidimensionales Speicherarray bilden. As a non-limiting example, a three-dimensional memory structure may be vertically arranged as a stack of a plurality of two-dimensional storage device layers. As a further non-limiting example, a three-dimensional memory array may be arranged as a plurality of vertical columns (eg, columns extending substantially perpendicular to the main surface of the substrate, ie, in the y-direction), each column having a plurality of memory elements in each column. The columns may be arranged in a two-dimensional configuration, e.g. In an xz plane, resulting in a three-dimensional array of storage elements with elements on multiple vertically stacked storage levels. Other configurations of storage elements in three dimensions may also form a three-dimensional storage array.

Als nicht einschränkendes Beispiel können in einem dreidimensionalen NAND-Speicherarray die Speicherelemente miteinander gekoppelt sein, um eine NAND-Kette innerhalb einer einzelnen horizontalen (z. B. x-y) Speichervorrichtungsebenen zu bilden. Alternativ können die Speicherelemente miteinander gekoppelt sein, um eine vertikale NAND-Kette zu bilden, die über mehrere horizontale Speichervorrichtungsebenen verläuft. Andere dreidimensionale Konfigurationen können in Betracht gezogen werden, wobei einige NAND-Ketten Speicherelemente in einer einzelnen Speicherebene enthalten, während andere Ketten Speicherelemente enthalten, die sich über mehrere Speicherebenen erstrecken. Dreidimensionale Speicherarrays können auch als eine NOR-Konfiguration und als eine ReRAM-Konfiguration ausgelegt sein.As a non-limiting example, in a three-dimensional NAND memory array, the memory elements may be coupled together to form a NAND chain within a single horizontal (eg, x-y) memory device levels. Alternatively, the storage elements may be coupled together to form a vertical NAND chain that extends across a plurality of horizontal storage device levels. Other three-dimensional configurations may be considered, with some NAND chains containing memory elements in a single memory plane, while other chains include memory elements extending across multiple memory planes. Three-dimensional memory arrays may also be configured as a NOR configuration and as a ReRAM configuration.

Üblicherweise werden in einem monolithischen dreidimensionalen Speicherarray ein oder mehrere Speichervorrichtungsebenen über einem einzigen Substrat gebildet. Gegebenenfalls kann das monolithische dreidimensionale Speicherarray auch eine oder mehrere Speicherschichten zumindest teilweise innerhalb des einzelnen Substrats aufweisen. Als ein nicht einschränkendes Beispiel, kann das Substrat einen Halbleiter wie Silizium einschließen. In einem monolithischen dreidimensionalen Array werden die Schichten, die jede Speichervorrichtungsebene des Arrays bilden, üblicherweise auf den Schichten der darunter liegenden Speichervorrichtungsebenen des Arrays gebildet. Jedoch können Schichten von benachbarten Speichervorrichtungsebenen eines monolithischen dreidimensionalen Speicherarrays gemeinsam genutzt werden oder Zwischenschichten zwischen Speichervorrichtungsebenen aufweisen.Typically, in a monolithic three-dimensional memory array, one or more storage device layers are formed over a single substrate. Optionally, the monolithic three-dimensional memory array may also include one or more memory layers at least partially within the single substrate. As a non-limiting example, the substrate may include a semiconductor such as silicon. In a monolithic three-dimensional array, the layers that make up each storage device plane of the array are typically formed on the layers of the underlying storage device layers of the array. However, layers of adjacent memory device levels of a monolithic three-dimensional memory array may be shared or may have intermediate layers between memory device levels.

Dann können wiederum zweidimensionale Arrays getrennt gebildet und dann zusammengepackt werden, um eine nicht monolithische Speichervorrichtung mit mehreren Speicherschichten zu bilden. Beispielsweise können nicht monolithische gestapelte Speicher konstruiert werden, indem Speicherebenen auf separaten Substraten gebildet werden und dann übereinander gestapelt werden. Die Substrate können vor dem Stapeln ausgedünnt oder von den Speichervorrichtungsebenen entfernt werden, aber da die Speichervorrichtungsebenen anfänglich über separaten Substraten gebildet werden, sind die resultierenden Speicherarrays keine monolithischen dreidimensionalen Speicherarrays. Weiterhin können mehrere zweidimensionale Speicherarrays oder dreidimensionale Speicherarrays (monolithisch oder nicht monolithisch) auf separaten Chips gebildet und dann zusammengepackt werden, um eine gestapelte Chip-Speichervorrichtung zu bilden.Then, again, two-dimensional arrays may be separately formed and then packaged together to form a non-monolithic memory device having a plurality of memory layers. For example, non-monolithic stacked memories can be constructed by forming memory layers on separate substrates and then stacking them one on top of the other. The substrates may be thinned out or removed from the storage device planes before stacking, but since the storage device layers are initially formed over separate substrates, the resulting storage arrays are not monolithic three-dimensional storage arrays. Furthermore, multiple two-dimensional memory arrays or three-dimensional memory arrays (monolithic or non-monolithic) can be formed on separate chips and then packaged together to form a stacked chip memory device.

Zugehörige Schaltungen sind üblicherweise für den Betrieb der Speicherelemente und für die Kommunikation mit den Speicherelementen erforderlich. Als nicht einschränkende Beispiele können Speichervorrichtungen Schaltungen aufweisen, die zum Steuern und Treiben von Speicherelementen verwendet werden, um Funktionen wie Programmieren und Lesen auszuführen. Diese zugehörige Schaltung kann sich auf demselben Substrat wie die Speicherelemente und/oder auf einem separaten Substrat befinden. Zum Beispiel kann eine Steuerung für Schreib-/Lesevorgänge des Speichers auf einem separaten Steuerungschip und/oder auf demselben Substrat wie die Speicherelemente angeordnet sein.Associated circuits are usually required for the operation of the memory elements and for communication with the memory elements. As non-limiting examples, memory devices may include circuits used to control and drive memory elements to perform functions such as programming and reading. This associated circuit may be located on the same substrate as the memory elements and / or on a separate substrate. For example, a controller for read / write operations of the memory may be disposed on a separate control chip and / or on the same substrate as the memory elements.

Es ist beabsichtigt, dass die vorstehende ausführliche Beschreibung als eine Veranschaulichung ausgewählter Formen, die die Erfindung annehmen kann, und nicht als eine Definition der Erfindung verstanden wird. Es sind nur die folgenden Ansprüche einschließlich aller Äquivalente, die den Umfang der beanspruchten Erfindung definieren sollen. Schließlich sei darauf hingewiesen, dass jeder Aspekt jeder der hier beschriebenen bevorzugten Ausführungsformen allein oder in Kombination miteinander verwendet werden kann.It is intended that the foregoing detailed description be interpreted as illustrative of selected forms that the invention may and not as a definition of the invention. It is only the following claims, including all equivalents, that are intended to define the scope of the claimed invention. Finally, it should be understood that each aspect of each of the preferred embodiments described herein may be used alone or in combination with each other.

ZITATE ENTHALTEN IN DER BESCHREIBUNG QUOTES INCLUDE IN THE DESCRIPTION

Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.This list of the documents listed by the applicant has been generated automatically and is included solely for the better information of the reader. The list is not part of the German patent or utility model application. The DPMA assumes no liability for any errors or omissions.

Zitierte PatentliteraturCited patent literature

  • US 15468620 [0001]US 15468620 [0001]
  • US 15585827 [0001]US 15585827 [0001]

Claims (20)

Verfahren, aufweisend: bevor eine Hostvorrichtung eine Speichervorrichtung benachrichtigt, dass ein Befehl in einer Übermittlungswarteschlange zugestellt wird, die Speichervorrichtung Folgendes veranlasst: Lesen des Befehls aus der Übermittlungswarteschlange; und Verarbeitung des Befehls; Bestimmung, ob die Hostvorrichtung die Speichervorrichtung benachrichtigt hat, dass der Befehl an die Übermittlungswarteschlange zugestellt wurde; und als Antwort auf die Bestimmung, dass die Hostvorrichtung die Speichervorrichtung benachrichtigt hat, dass der Befehl an die Übermittlungswarteschlange zugestellt wurde, Benachrichtigung der Hostvorrichtung über den Abschluss des Befehls über eine Beendigungswarteschlange.Method, comprising before a host device notifies a storage device that a command is being delivered in a delivery queue, the storage device causes: Reading the command from the delivery queue; and Processing the command; Determining if the host device has notified the storage device that the command has been delivered to the delivery queue; and in response to determining that the host device has notified the storage device that the command has been delivered to the delivery queue, notifying the host device of completion of the termination queue command. Verfahren gemäß Anspruch 1, weiterhin die Bestimmung aufweisend, ob die Hostvorrichtung den Befehl, welcher der Übermittlungswarteschlange zugestellt wurde, überschrieben hat.Method according to Claim 1 , further comprising determining whether the host device has overridden the command that was delivered to the delivery queue. Verfahren gemäß Anspruch 2, weiterhin als Antwort auf die Bestimmung aufweisend, dass die Hostvorrichtung den Befehl, der an der Übermittlungswarteschlange zugestellt wurde, überschrieben hat, die Befehlsverarbeitung widerruft.Method according to Claim 2 , further comprising in response to the determination that the host device has overridden the command delivered at the delivery queue, revoking the command processing. Verfahren gemäß Anspruch 1, wobei: der Befehl einen Lesebefehl umfasst; und die Verarbeitung des Befehls umfasst, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl an die Übermittlungswarteschlange zugestellt wird, Daten aus dem nichtflüchtigen Speicher zu lesen und die gelesene Daten in einem flüchtigen Speicher zu speichern.Method according to Claim 1 wherein: the instruction comprises a read instruction; and processing the command before the host device notifies the storage device that the command is delivered to the delivery queue, reads data from the nonvolatile memory, and stores the read data in volatile memory. Verfahren gemäß Anspruch 4, wobei die Befehlsverarbeitung ferner die Fehlerkorrektur der gelesenen Daten aufweist.Method according to Claim 4 wherein the instruction processing further comprises error correction of the read data. Verfahren gemäß Anspruch 1, wobei: der Befehl einen Flush-Befehl aufweist, der der Speichervorrichtung anzeigt, dass sie interne Caches in einen nichtflüchtigen Speicher flushen soll; und die Verarbeitung des Befehls umfasst, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl an die Übermittlungswarteschlange zugestellt wird, mindestens einem Teil der Daten in den internen Caches in den nichtflüchtigen Speicher zu schreiben.Method according to Claim 1 wherein: the instruction comprises a flush instruction indicating to the memory device that it is to flush internal caches to non-volatile memory; and processing the command before the host device notifies the storage device that the command is delivered to the delivery queue to write at least a portion of the data in the internal caches to the nonvolatile memory. Verfahren gemäß Anspruch 6, weiterhin aufweisend: die Bestimmung, dass die Hostvorrichtung den Flush-Befehl überschrieben hat; und als Antwort auf die Bestimmung, dass die Hostvorrichtung den Flush-Befehl überschrieben hat, das Schreiben des mindestens einen Teils der Daten in den internen Caches an den nichtflüchtigen Speicher zu widerrufen.Method according to Claim 6 , further comprising: determining that the host device has overwritten the flush command; and in response to the determination that the host device has overridden the flush command, revoking the writing of the at least a portion of the data in the internal caches to the nonvolatile memory. Verfahren gemäß Anspruch 1, weiterhin aufweisend: nach dem Lesen des Befehls aus der Übermittlungswarteschlange zu bestimmen, ob die Verarbeitung des Befehls zu beginnen ist, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl an die Übermittlungswarteschlange zugestellt wird; als Antwort auf die Bestimmung, die Verarbeitung des Befehls zu beginnen, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird, den Befehl zu verarbeiten, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird; und als Antwort auf die Bestimmung, die Verarbeitung des Befehls nicht zu beginnen, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird, zu warten, bis die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird, um die Befehlsverarbeitung zu beginnen.Method according to Claim 1 , further comprising: after reading the instruction from the delivery queue, determining whether to begin processing the instruction before the host device notifies the storage device that the instruction is delivered to the delivery queue; in response to the determination to begin processing the command before the host device notifies the storage device that the command is delivered to the delivery queue to process the command before the host device notifies the storage device that the command is being delivered to the delivery queue; and in response to the determination not to begin processing the command before the host device notifies the storage device that the command is delivered to the delivery queue, wait until the host device notifies the storage device that the command is delivered to the delivery queue, to start the command processing. Verfahren gemäß Anspruch 8, wobei die Bestimmung, ob die Verarbeitung des Befehls zu beginnen ist, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird, auf einem Befehlstyp basiert.Method according to Claim 8 wherein determining whether to start processing the command before the host device notifies the storage device that the command is being delivered to the delivery queue is based on a command type. Verfahren gemäß Anspruch 9, weiterhin aufweisend: als Antwort auf die Bestimmung, dass der Befehlstyp ein Lesebefehl ist, zu bestimmen, die Befehlsverarbeitung zu beginnen, bevor die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl in die Übermittlungswarteschlange zugestellt wird; und als Antwort auf die Bestimmung, dass der Befehlstyp ein Lesebefehl ist, zu bestimmen, mit der Befehlsverarbeitung zu warten, bis die Hostvorrichtung die Speichervorrichtung benachrichtigt, dass der Befehl an die Übermittlungswarteschlange zugestellt wird.Method according to Claim 9 , further comprising: in response to the determination that the type of command is a read command, determining to begin command processing before the host device notifies the storage device that the command is being delivered to the delivery queue; and, in response to the determination that the type of command is a read command, to determine to wait with the command processing until the host device notifies the storage device that the command is being delivered to the delivery queue. Nichtflüchtige Speichervorrichtung, aufweisend: einen nichtflüchtigen Speicher; eine Schnittstelle, die zum Kommunizieren mit einer Hostvorrichtung eingerichtet ist, damit die Hostvorrichtung einen oder mehrere Befehle zum Speichern in einer Übermittlungswarteschlange erstellen kann; und eine Steuerung in Kommunikation mit dem nichtflüchtigen Speicher und der Schnittstelle, wobei die Steuerung eingerichtet ist: bevor die Hostvorrichtung benachrichtigt wird, dass der eine oder die mehreren Befehle in der Übermittlungswarteschlange gespeichert sind: den einen oder die mehreren Befehle zu lesen; einen Ablauf innerhalb der Speichervorrichtung zu bestimmen, der durchzuführen ist, um den einen oder die mehreren Befehle zu verarbeiten; und mindestens teilweises den Ablauf innerhalb der Speichervorrichtung durchzuführen; und nachdem die Hostvorrichtung benachrichtigt, dass der eine oder die mehreren Befehle in der Übermittlungswarteschlange gespeichert sind: einen Ablauf außerhalb der Speichervorrichtung zu bestimmen, der durchzuführen ist, um den einen oder die mehreren Befehle zu verarbeiten; und und den Ablauf außerhalb der Speichervorrichtung durchzuführen.A nonvolatile memory device comprising: a nonvolatile memory; an interface adapted to communicate with a host device for the host device to create one or more instructions for storage in a delivery queue; and a controller in communication with the nonvolatile memory and the interface, wherein the controller is configured: before the host device is notified that the one or more instructions are stored in the transmission queue: reading the one or more instructions; determine a flow within the storage device to be performed to process the one or more instructions; and at least partially performing the flow within the storage device; and after the host device notifies that the one or more instructions are stored in the transmission queue: to determine a procedure outside the memory device to be performed to process the one or more instructions; and performing the procedure outside the storage device. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 11, wobei: der eine oder die mehreren Befehle Lesebefehle aufweisen; und der Ablauf innerhalb der Speichervorrichtung das Lesen von Daten aus dem nichtflüchtigen Speicher aufweist.The nonvolatile memory device according to Claim 11 wherein: the one or more instructions comprise read commands; and the flow within the memory device comprises reading data from the nonvolatile memory. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 11, ferner umfassend einen Steuerungsspeicherpuffer, der eingerichtet ist, um die Übermittlungswarteschlange zu speichern; wobei die Steuerung weiterhin eingerichtet ist, um: zu bestimmen, bevor die Hostvorrichtung benachrichtigt, dass der eine oder die mehreren Befehle in der Übermittlungswarteschlange gespeichert sind, dass die Hostvorrichtung den einen oder die mehreren Befehle in der Übermittlungswarteschlange in dem Steuerungsspeicherpuffer gespeichert hat; und als Antwort darauf, dass die Steuerung bestimmt, dass die Hostvorrichtung den einen oder die mehreren Befehle in der Übermittlungswarteschlange in dem Steuerungsspeicherpuffer gespeichert hat, den einen oder die mehreren Befehle aus der Übermittlungswarteschlange in dem Steuerungsspeicherpuffer zu lesen und den Ablauf innerhalb der Speichervorrichtung mindestens teilweise durchzuführen.The nonvolatile memory device according to Claim 11 further comprising a control storage buffer configured to store the delivery queue; wherein the controller is further configured to: determine, before the host device notifies that the one or more instructions are stored in the transmission queue, that the host device has stored the one or more instructions in the transmission queue in the control memory buffer; and in response to the controller determining that the host device has stored the one or more instructions in the delivery queue in the control storage buffer, reading the one or more instructions from the delivery queue in the control storage buffer and at least partially completing the flow within the storage device perform. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 11, wobei der Ablauf außerhalb der Speichervorrichtung die Kommunikation über die Kommunikationsschnittstelle mit der Hostvorrichtung aufweist.The nonvolatile memory device according to Claim 11 wherein the flow outside the storage device comprises the communication via the communication interface with the host device. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 14, wobei der Ablauf außerhalb der Speichervorrichtung das Senden einer Transmission-Layer-Packet-Leseaufforderung zum Lesen eines Abschnitts des Host-Speichers aufweist.The nonvolatile memory device according to Claim 14 wherein the flow outside the storage device comprises transmitting a transmission layer packet read request to read a portion of the host memory. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 14, wobei der Ablauf außerhalb der Speichervorrichtung das Senden einer Transmission-Layer-Packet-Schreibaufforderung zum Schreiben in einen Abschnitt des Host-Speichers aufweist.The nonvolatile memory device according to Claim 14 wherein the flow outside the storage device comprises transmitting a transmission layer packet write request for writing to a portion of the host memory. Eine nichtflüchtige Speichervorrichtung, aufweisend: einen nichtflüchtigen Speicher: eine Kommunikationsschnittstelle, die zum Kommunizieren mit einer Hostvorrichtung eingerichtet ist, damit die Hostvorrichtung einen oder mehrere Befehle zum Speichern in einer Übermittlungswarteschlange erstellen kann; Mittel zum Bestimmen, bevor die Hostvorrichtung benachrichtigt, dass der eine oder die mehreren Befehle in der Übermittlungswarteschlange gespeichert werden, dass der eine oder die mehreren Befehle in der Übermittlungswarteschlange gespeichert sind; Mittel zum Bestimmen, ob der eine oder die mehreren Befehle, die in der Übermittlungswarteschlange gespeichert sind, spekulativ verarbeitet werden sollen; und als Antwort auf die Bestimmung, den einen oder die mehreren Befehle, die in der Übermittlungswarteschlange gespeichert sind, spekulativ zu verarbeiten, Mittel zur spekulativen Verarbeitung des einen oder der mehreren Befehle.A non-volatile memory device comprising: a non-volatile memory: a communication interface configured to communicate with a host device for the host device to create one or more instructions for storage in a delivery queue; Means for determining, before the host device notifies that the one or more instructions are stored in the transmission queue, that the one or more instructions are stored in the transmission queue; Means for determining whether the one or more instructions stored in the submission queue are to be speculatively processed; and in response to the determination to speculatively process the one or more instructions stored in the transmission queue, means for speculatively processing the one or more instructions. Speichersystem gemäß Anspruch 17, wobei die Mittel zum Bestimmen, ob der eine oder die mehreren Befehle, die in der Übermittlungswarteschlange gespeichert sind, spekulativ verarbeitet werden sollen, auf einem Befehlstyp basieren.Storage system according to Claim 17 wherein the means for determining whether the one or more instructions stored in the transmission queue are to be speculatively processed are based on a type of instruction. Speichersystem gemäß Anspruch 17, wobei die Mittel zum Bestimmen, ob der eine oder die mehreren Befehle, die in der Übermittlungswarteschlange gespeichert sind, spekulativ verarbeitet werden sollen, darauf basiert, ob der Befehl ein Lesebefehl oder ein Schreibbefehl ist.Storage system according to Claim 17 wherein the means for determining whether the one or more instructions stored in the transmission queue are to be speculatively processed is based on whether the instruction is a read command or a write command. Speichersystem gemäß Anspruch 17, weiterhin aufweisend: Mittel zum Bestimmen, dass die Hostvorrichtung einen Befehl, der an die Übermittlungswarteschlange zugestellt wird, überschrieben hat; und als Antwort auf die Bestimmung, dass die Hostvorrichtung den Befehl, der an die Übermittlungswarteschlange zugestellt wird, überschrieben hat, Mittel zur Aufhebung der spekulativen Verarbeitung des Befehls.Storage system according to Claim 17 , further comprising: means for determining that the host device has overwritten a command delivered to the delivery queue; and in response to the determination that the host device has overwritten the command delivered to the delivery queue, means for suspending the speculative processing of the command.
DE112018000230.6T 2017-03-24 2018-02-27 System and method for speculative instruction execution using the control memory buffer Pending DE112018000230T5 (en)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/468,620 US10466903B2 (en) 2017-03-24 2017-03-24 System and method for dynamic and adaptive interrupt coalescing
US15/468,620 2017-03-24
US15/585,827 US10725835B2 (en) 2017-05-03 2017-05-03 System and method for speculative execution of commands using a controller memory buffer
US15/585,827 2017-05-03
PCT/US2018/019905 WO2018175059A1 (en) 2017-03-24 2018-02-27 System and method for speculative execution of commands using the controller memory buffer

Publications (1)

Publication Number Publication Date
DE112018000230T5 true DE112018000230T5 (en) 2019-09-05

Family

ID=61622735

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018000230.6T Pending DE112018000230T5 (en) 2017-03-24 2018-02-27 System and method for speculative instruction execution using the control memory buffer

Country Status (3)

Country Link
CN (1) CN110073323B (en)
DE (1) DE112018000230T5 (en)
WO (1) WO2018175059A1 (en)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110309077B (en) * 2019-06-28 2021-06-11 清华大学 Method and device for constructing flash translation layer of cooperative work of host and equipment
JP2021056550A (en) 2019-09-26 2021-04-08 キオクシア株式会社 Memory system, control method of memory system, and information processing system
CN111221476B (en) * 2020-01-08 2022-03-29 深圳忆联信息系统有限公司 Front-end command processing method and device for improving SSD performance, computer equipment and storage medium
US11544107B2 (en) * 2020-04-17 2023-01-03 Western Digital Technologies, Inc. Storage system and method for multiprotocol handling
US11733920B2 (en) * 2020-09-10 2023-08-22 Western Digital Technologies, Inc. NVMe simple copy command support using dummy virtual function
CN112256601B (en) * 2020-10-19 2023-04-21 苏州凌云光工业智能技术有限公司 Data access control method, embedded storage system and embedded equipment
CN112732176B (en) * 2020-12-28 2022-10-04 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) SSD (solid State disk) access method and device based on FPGA (field programmable Gate array), storage system and storage medium
CN112711442A (en) * 2020-12-29 2021-04-27 北京浪潮数据技术有限公司 Host command writing method, device and system and readable storage medium
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device
CN114490222B (en) * 2022-02-14 2022-11-15 无锡众星微系统技术有限公司 PCIe P2P system test starting method and device

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7596628B2 (en) * 2006-05-01 2009-09-29 Broadcom Corporation Method and system for transparent TCP offload (TTO) with a user space library
JP2008046791A (en) * 2006-08-14 2008-02-28 Fujitsu Ltd Storage device, firmware update method and control device
US8645617B2 (en) * 2008-12-09 2014-02-04 Rambus Inc. Memory device for concurrent and pipelined memory operations
US8230177B2 (en) * 2009-05-28 2012-07-24 Oracle America, Inc. Store prefetching via store queue lookahead
WO2013048451A1 (en) * 2011-09-30 2013-04-04 Intel Corporation Presentation of direct accessed storage under a logical drive model
JP5962260B2 (en) * 2012-06-29 2016-08-03 富士通株式会社 Storage device and write completion notification method
US9483431B2 (en) * 2013-04-17 2016-11-01 Apeiron Data Systems Method and apparatus for accessing multiple storage devices from multiple hosts without use of remote direct memory access (RDMA)
US20140331001A1 (en) * 2013-05-02 2014-11-06 Lsi Corporation Command Barrier for a Solid State Drive Controller
US9348537B2 (en) * 2013-09-10 2016-05-24 Qualcomm Incorporated Ascertaining command completion in flash memories
US9778859B2 (en) * 2013-09-18 2017-10-03 Western Digital Technologies, Inc. Doorless protocol having multiple queue read requests in flight
US9513869B2 (en) * 2013-09-18 2016-12-06 HGST Netherlands B.V. Doorbell-less endpoint-initiated protocol for storage devices
US9317204B2 (en) * 2013-11-14 2016-04-19 Sandisk Technologies Inc. System and method for I/O optimization in a multi-queued environment
US20160259568A1 (en) * 2013-11-26 2016-09-08 Knut S. Grimsrud Method and apparatus for storing data
US9459810B2 (en) * 2013-12-30 2016-10-04 Sandisk Technologies Llc Storage module and method for configuring command attributes
US9720860B2 (en) * 2014-06-06 2017-08-01 Toshiba Corporation System and method for efficient processing of queued read commands in a memory system
US20160124876A1 (en) * 2014-08-22 2016-05-05 HGST Netherlands B.V. Methods and systems for noticing completion of read requests in solid state drives
US9563367B2 (en) * 2014-08-26 2017-02-07 HGST Netherlands B.V. Latency command processing for solid state drive interface protocol
US9626106B2 (en) * 2015-01-13 2017-04-18 Sandisk Technologies Llc System and method for memory command queue management and configurable memory status checking
US9524114B2 (en) * 2015-01-27 2016-12-20 Futurewei Technologies, Inc. Optimizing synchronous write via speculation
US10089266B2 (en) * 2015-07-10 2018-10-02 Apple Inc. Power saving feature for storage subsystems
KR20170032502A (en) * 2015-09-14 2017-03-23 삼성전자주식회사 Storage device and interrupt generation method thereof

Also Published As

Publication number Publication date
WO2018175059A1 (en) 2018-09-27
CN110073323A (en) 2019-07-30
CN110073323B (en) 2022-10-25

Similar Documents

Publication Publication Date Title
DE112018000230T5 (en) System and method for speculative instruction execution using the control memory buffer
DE112018000180T5 (en) SYSTEM AND METHOD FOR ADAPTIVELY SENDING EARLY TERMINATION USING A CONTROL MEMORY BUFFER
DE112018000834T5 (en) SYSTEM AND METHOD FOR ADAPTIVE COMMAND CALL AGGREGATION
DE112018000181T5 (en) SYSTEM AND METHOD FOR THE FAST EXECUTION OF CAPSULE COMMANDS
DE112018000233T5 (en) System and method for processing and arbitrating delivery and completion queues
US10725835B2 (en) System and method for speculative execution of commands using a controller memory buffer
DE112018000228T5 (en) System and method for processing and arbitrating delivery and completion queues
DE102017128939A1 (en) System and method for dynamically and adaptively merging interrupts
DE102018123891A1 (en) Handling non-aligned writes
DE102018106154A1 (en) FOLDING OPERATIONS IN DATA STORAGE SYSTEMS WITH SINGLE ADDRESS UPDATES
DE112017005890T5 (en) Retrieve data buffer pointers for direct memory access
DE112017005887T5 (en) Memory system and method of thermal throttling via command arbitration
DE112020000139T5 (en) NAME SPACES NOT SEQUENTIALLY DIVIDED INTO ZONES
DE102017112013A1 (en) Adaptive temperature and storage parameter throttling
DE112015004536T5 (en) Hardware automation for storage management
DE112019005511T5 (en) KEEP WRITE COMMANDS IN ZONED NAME SPACES
DE112017005955T5 (en) STORAGE SYSTEM AND METHOD FOR LOWER MEMORY ASSIGNMENT
DE102018123880A1 (en) Adaptive management of caches
DE102018105871A1 (en) Storage system and method for avoiding collision in non-volatile data stores with explicit tile grouping
DE112019000161T5 (en) MEMORY CACHE MANAGEMENT
US10635350B2 (en) Task tail abort for queued storage tasks
DE112020004966T5 (en) CNS PARITY SHIFT AFTER DRAM
DE102018123494A1 (en) MEMORY DEVICE DESIGNED TO UPGRADE A FIELD-PROGRAMMABLE GATE ARRAY, AND OPERATING METHOD THEREFOR
DE112020005044T5 (en) ZONE ATTACHMENT COMMAND SCHEDULING BASED ON ZONE STATE
DE112016000696T5 (en) Scheduling scheme (ta) for a multi-chip storage device

Legal Events

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

Free format text: PREVIOUS MAIN CLASS: G06F0003060000

Ipc: G06F0013160000

R082 Change of representative

Representative=s name: MURGITROYD GERMANY PATENTANWALTSGESELLSCHAFT M, DE