DE112018000230T5 - System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers - Google Patents

System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers 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
English (en)
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.)
SANDISK TECHNOLOGIES, INC. (N.D.GES. D. STAATE, US
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/de
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.

Description

  • VERWEIS AUF VERWANDTE ANMELDUNGEN
  • 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.
  • HINTERGRUND
  • 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.
  • Figurenliste
  • 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.
  • DETAILLIERTE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
  • Überblick
  • 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.
  • 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.
  • 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).
  • Ü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.
  • 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.
  • 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.
  • 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.
  • 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 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.
  • 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.
  • 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.
  • 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.
  • Ausführungsformen
  • 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.
  • 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.
  • 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.
  • 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).
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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).
  • 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.
  • 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).
  • 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.
  • 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).
  • 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.
  • 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.
  • 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 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.
  • 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.
  • 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 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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).
  • 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.
  • 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).
  • 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.
  • 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.
  • 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.
  • 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).
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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).
  • 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.
  • 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.
  • Ü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.
  • 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.
  • 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.
  • 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.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 15468620 [0001]
    • US 15585827 [0001]

Claims (20)

  1. 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.
  2. Verfahren gemäß Anspruch 1, weiterhin die Bestimmung aufweisend, ob die Hostvorrichtung den Befehl, welcher der Übermittlungswarteschlange zugestellt wurde, überschrieben hat.
  3. 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.
  4. 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.
  5. Verfahren gemäß Anspruch 4, wobei die Befehlsverarbeitung ferner die Fehlerkorrektur der gelesenen Daten aufweist.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. Die nichtflüchtige Speichervorrichtung gemäß Anspruch 11, wobei der Ablauf außerhalb der Speichervorrichtung die Kommunikation über die Kommunikationsschnittstelle mit der Hostvorrichtung aufweist.
  15. 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.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. 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.
DE112018000230.6T 2017-03-24 2018-02-27 System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers Pending DE112018000230T5 (de)

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 2017-05-03
US15/585,827 US10725835B2 (en) 2017-05-03 2017-05-03 System and method for speculative execution of commands using a controller memory buffer
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 (de) 2019-09-05

Family

ID=61622735

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018000230.6T Pending DE112018000230T5 (de) 2017-03-24 2018-02-27 System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers

Country Status (3)

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

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110309077B (zh) * 2019-06-28 2021-06-11 清华大学 主机与设备协同工作的闪存转换层构建方法及装置
JP2021056550A (ja) * 2019-09-26 2021-04-08 キオクシア株式会社 メモリシステム、メモリシステムの制御方法、および情報処理システム
CN111221476B (zh) * 2020-01-08 2022-03-29 深圳忆联信息***有限公司 提升ssd性能的前端命令处理方法、装置、计算机设备及存储介质
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 (zh) * 2020-10-19 2023-04-21 苏州凌云光工业智能技术有限公司 数据存取控制方法、嵌入式存储***及嵌入式设备
CN112732176B (zh) * 2020-12-28 2022-10-04 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 基于fpga的ssd访问方法及装置、存储***及存储介质
CN112711442A (zh) * 2020-12-29 2021-04-27 北京浪潮数据技术有限公司 一种主机命令写入方法、设备、***及可读存储介质
US11966343B2 (en) 2021-07-19 2024-04-23 Samsung Electronics Co., Ltd. Universal mechanism to access and control a computational device
CN114490222B (zh) * 2022-02-14 2022-11-15 无锡众星微***技术有限公司 一种PCIe P2P***测试启动方法和装置

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 (ja) * 2006-08-14 2008-02-28 Fujitsu Ltd 記憶装置、ファームウェア更新方法、及び制御装置
WO2010077414A1 (en) * 2008-12-09 2010-07-08 Rambus Inc. Non-volatile 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 (ja) * 2012-06-29 2016-08-03 富士通株式会社 ストレージ装置および書込完了通知方法
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
US9513869B2 (en) * 2013-09-18 2016-12-06 HGST Netherlands B.V. Doorbell-less endpoint-initiated protocol for storage devices
US9778859B2 (en) * 2013-09-18 2017-10-03 Western Digital Technologies, Inc. Doorless protocol having multiple queue read requests in flight
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 (ko) * 2015-09-14 2017-03-23 삼성전자주식회사 스토리지 장치 및 그것의 인터럽트 발생 방법

Also Published As

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

Similar Documents

Publication Publication Date Title
DE112018000230T5 (de) System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers
DE112018000180T5 (de) System und verfahren zum adaptiven senden frühzeitiger beendigung unter verwendung eines steuerungsspeicherpuffers
DE112018000834T5 (de) System und verfahren zur adaptiven befehlsabruf-aggregation
DE112018000181T5 (de) System und verfahren für die schnelle ausführung von kapselinternen befehlen
DE112018000233T5 (de) System und Verfahren zur Verarbeitung und Arbitrierung von Übermittlungs- und Beendigungswarteschlangen
DE112018000228T5 (de) System und Verfahren zur Verarbeitung und Arbitrierung von Übermittlungs- und Beendigungswarteschlangen
DE102017128939A1 (de) System und Verfahren zum dynamischen und adaptiven Zusammenführen von Interrupts
DE102018123891A1 (de) Handhabung nichtabgestimmter Schreibvorgänge
DE102018106154A1 (de) Faltungsoperationen in datenspeichersystemen mit einzeladressenaktualisierungen
DE112017005890T5 (de) Abrufen von Datenpufferzeigern für direkten Speicherzugriff
DE112017005887T5 (de) Speichersystem und Verfahren zur thermischen Drosselung über eine Befehlsarbitrierung
DE112020000139T5 (de) Nicht sequentiell in zonen aufgeteilte namensräume
DE112015004536T5 (de) Hardware-Automatisierung für Speicherverwaltung
DE112019005511T5 (de) Halten von schreibbefehlen in gezonten namensräumen
DE112017005955T5 (de) Speichersystem und verfahren zur schlanken speicherzuweisung
DE102018123880A1 (de) Adaptive Verwaltung von Zwischenspeichern
DE102018105871A1 (de) Speichersystem und Verfahren zur Vermeidung von Befehlskollisionen in nicht flüchtigen Datenspeichern mit expliziter Kachelgruppierung
DE112019000147T5 (de) Partielle rücksetzung einer speichersteuerung
DE112019000161T5 (de) Speicher-cache-verwaltung
US10635350B2 (en) Task tail abort for queued storage tasks
DE112020004966T5 (de) Zns-parität-verschiebung nach dram
DE102018123494A1 (de) Speichervorrichtung, die zum aktualisieren einesfeldprogrammierbaren gate-arrays ausgestaltetist, und betriebsverfahren dafür
DE112020000159T5 (de) Systeme und verfahren zum definieren von speicher-unterblöcken
DE112020005044T5 (de) Zonenanhang-befehlsplanung basierend auf zonenzustand
DE112016000696T5 (de) Ablaufplanungsschema(ta) für eine Mehrchip-Speichervorrichtung

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

R081 Change of applicant/patentee

Owner name: SANDISK TECHNOLOGIES, INC. (N.D.GES. D. STAATE, US

Free format text: FORMER OWNER: WESTERN DIGITAL TECHNOLOGIES, INC, SAN JOSE, CALIF., US