DE112017005890T5 - Abrufen von Datenpufferzeigern für direkten Speicherzugriff - Google Patents

Abrufen von Datenpufferzeigern für direkten Speicherzugriff Download PDF

Info

Publication number
DE112017005890T5
DE112017005890T5 DE112017005890.2T DE112017005890T DE112017005890T5 DE 112017005890 T5 DE112017005890 T5 DE 112017005890T5 DE 112017005890 T DE112017005890 T DE 112017005890T DE 112017005890 T5 DE112017005890 T5 DE 112017005890T5
Authority
DE
Germany
Prior art keywords
data buffer
memory
pointer
list
data
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
DE112017005890.2T
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
Application filed by Western Digital Technologies Inc filed Critical Western Digital Technologies Inc
Publication of DE112017005890T5 publication Critical patent/DE112017005890T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays

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)
  • Read Only Memory (AREA)
  • Memory System (AREA)

Abstract

Hierin wird eine Technologie zum Betreiben eines nichtflüchtigen Speichers beschrieben. In einem Aspekt ruft eine Speichersteuerung Zeiger auf Datenpuffer in dem Hostsystemspeicher „just-in-time“ ab. Zum Beispiel können die Zeiger abgerufen werden, unmittelbar bevor das Speichersystem bereit ist, einen DMA durchzuführen. Die Datenpufferzeiger können NVMe-PRP-Einträge (Physical Region Page) in einer PRP-Liste sein. Der gleiche Datenpufferzeiger muss nicht mehr als einmal abgerufen werden. Zum Beispiel wird als Reaktion auf das Bestimmen des nichtflüchtigen Speichersystems, dass ein Datenpufferzeiger ein zweites Mal benötigt werden könnte (z. B. für einen anderen DMA), dieser Datenpufferzeiger so gespeichert, dass er wiederverwendet werden kann. In einem Aspekt wird, wenn ein DMA auf den gesamten Host-Datenpuffer zugreift, der Zeiger auf diesen Puffer gespeichert, so dass er nicht erneut abgerufen werden muss.

Description

  • HINTERGRUND
  • Die vorliegende Offenbarung bezieht sich auf eine Technologie für nichtflüchtigen Speicher.
  • Ein Typ eines nichtflüchtigen Speichers ist ein Halbleiterspeicher. Zum Beispiel werden nichtflüchtige Halbleiterspeicher in Festkörperlaufwerken, mobilen Rechenvorrichtungen, nicht mobilen Rechenvorrichtungen und anderen Speichersystemen verwendet. In der Regel weist das Speichersystem eine Steuerung auf, welcher die Datenübertragungen zwischen dem Speichersystem und einem Hostsystem über eine Kommunikationsschnittstelle steuert. Das Hostsystem könnte ein Computersystem, ein Mobiltelefon, ein Server usw. sein. Das Speichersystem und das Hostsystem können Daten beispielsweise über einen PCIe-Bus (Peripheral Computer Interface Express) austauschen. NVMe (Non-volatile Memory Express) ist eine logische Geräteschnittstellenspezifikation zum Zugreifen auf einen nichtflüchtigen Speicher, der über einen PCIe-Bus angeschlossen ist. NVMe nutzt die Parallelität, die von Halbleiterspeichern wie beispielsweise Festkörperlaufwerken, ohne darauf beschränkt zu sein, angeboten wird.
  • Figurenliste
    • 1A ist eine perspektivische Ansicht eines Satzes von Blöcken in einer gestapelten nichtflüchtigen 3D Speichervorrichtung.
    • 1B ist ein Funktionsblockdiagramm einer Speichervorrichtung, wie der gestapelten nichtflüchtigen 3D Speichervorrichtung von 1A.
    • 2A ist ein Blockdiagramm eines beispielhaften Speichersystems, das mehr Details der Steuerung und des Hosts zeigt.
    • 2B ist ein Diagramm einer Ausführungsform einer Betriebsumgebung.
    • 3A ist ein Diagramm eines Beispiels von einem Hostbefehl, von Host-Datenpuffern und Listen von Datenpufferzeigern.
    • 3B zeigt ein Diagramm mit einem Beispiel für einen Hostbefehl, Host-Datenpuffer, und Listen von Datenpufferzeigern, in welchen der erste Datenpufferzeiger einen Nicht-Null-Versatz aufweist.
    • 4 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Betreiben eines nichtflüchtigen Speichersystems.
    • 5 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Durchführen eines DMA von einem Speichersystem auf ein Hostsystem für einen Lesebefehl.
    • 6 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Durchführen eines DMA von einem Speichersystem auf ein Hostsystem für einen Schreibbefehl.
    • 7 ist ein Diagramm einer Ausführungsform eines Befehlskontextspeichers, eines Ringpuffers, eines Pufferzeigermanagers und des Hostspeichers.
    • 8 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Verwalten von Listenzeigern.
    • 9 ist ein Flussdiagramm einer Ausführungsform eines Prozesses zum Zugreifen auf Datenpufferzeiger.
    • 10 ist ein Flussdiagramm einer Ausführungsform eines Prozesses, wenn der erste Datenpufferzeiger einen Nicht-Null-Versatz aufweist.
  • DETAILLIERTE BESCHREIBUNG
  • Hierin wird eine Technologie zum Betreiben eines nichtflüchtigen Speichers beschrieben. Eine Ausführungsform ist eine Steuerung in einem nichtflüchtigen Speichersystem, der Zeiger auf Datenpuffer im Hostsystemspeicher abruft. In einer Ausführungsform werden die Datenpufferzeiger genau zum richtigen Zeitpunkt abgerufen. Wenn die Datenpufferzeiger beispielsweise zu früh abgerufen werden, dann kann Speicher in dem nichtflüchtigen Speichersystem verschwendet werden, um Zeiger zu speichern. Wenn die Datenpufferzeiger zu spät abgerufen werden, dann kann sich die Leistung aufgrund einer Verzögerung bei Datenübertragungen verschlechtern.
  • In einigen Ausführungsformen sind die Datenpufferzeiger NVMe-PRP-Einträge (Physical Region Page) in einer PRP-Liste, die sich in einem Speicher eines Hostsystems befinden kann, das mit dem nichtflüchtigen Speichersystem verbunden ist. Die Datenpufferzeiger (z. B. NVMe-PRP-Einträge) werden in einer Ausführungsform über einen PCIe-Bus (Peripheral Component Interconnect express) zwischen dem Hostsystem und dem nichtflüchtigen Speichersystem abgerufen. Die hier offenbarten Ausführungsformen nutzen die Bandbreite des PCIe-Busses effizient. In einigen Ausführungsformen führt die Anzahl von Datenpufferzeigern (z. B. NVMe-PRP-Einträgen), die abgerufen werden, zu einer effizienten Übertragung über den PCIe-Bus.
  • Die hier offenbarten Ausführungsformen rufen Datenpufferzeiger effizient in einem Datenpaket ab, das verwendet wird, um Daten über eine physische Schnittstelle (z. B. einen PCIe-Bus) zwischen dem Hostsystem und dem Speichersystem zu übertragen. Beispielsweise können Daten über einen PCIe-Bus unter Verwendung eines TLP (Transaction Layer Packet) übertragen werden. In einigen Ausführungsformen wird die TLP-Paketgröße für eine effiziente Übertragung ausgewählt. Zum Beispiel kann die Anzahl von Pufferzeigern (z. B. NVMe-PRP-Einträgen) in der Datennutzlast für eine effiziente Übertragung ausgewählt werden.
  • Ausführungsbeispiele, die hierin offenbart sind, reduzieren oder eliminieren das Abrufen desselben Datenpufferzeigers (z. B. NVMe-PRP-Eintrag) mehr als einmal. Einige herkömmliche Techniken können den gleichen Datenpufferzeiger (z. B. NVMe-PRP-Eintrag) mehr als einmal abrufen, was ineffizient ist. In einer Ausführungsform wird, als Reaktion auf das Bestimmen des nichtflüchtigen Speichersystems, dass ein Datenpufferzeiger ein zweites Mal benötigt werden könnte (z. B. für einen anderen DMA), dieser Datenpufferzeiger so gespeichert, dass er wiederverwendet werden kann. Somit braucht dieser Datenpufferzeiger nicht ein zweites Mal abgerufen zu werden. Es ist jedoch zu beachten, dass, wenn das nichtflüchtige Speichersystem bestimmt, dass ein Datenpufferzeiger nicht mehr benötigt wird, der Datenpufferzeiger aus dem Speicher im Speichersystem entfernt (oder überschrieben) werden kann. Somit wird der Speicher effizient verwendet. Dies kann dazu beitragen, die Cache-Größen zu reduzieren, was den Vorrichtungsbereich reduzieren kann.
  • Die hierin offenbarten Ausführungsformen ermöglichen es, Daten außer der Reihe zu übertragen, auch innerhalb eines bestimmten Befehls. So kann beispielsweise ein einziger Lesebefehl des Hostsystems zu separaten Lesevorgängen für mehrere Speicher-Dies führen. Die Lesevorgänge können parallel ablaufen, wobei die Reihenfolge, in der die Speicher-Dies ihren Lesevorgang beenden, unbestimmt sein kann. In einer Ausführungsform ruft das Speichersystem Datenpufferzeiger ab, kurz bevor Daten, die infolge eines Lesevorgangs in einem Speicher-Die gelesen wurden, zur Übertragung an das Hostsystem bereit sind. Dies ermöglicht Datentransfer außer der Reihe (sowie das Abrufen von Datenpufferzeigern außer der Reihe). Es ist zu beachten, dass die Datenübertragung außer der Reihe es ermöglicht, dass die Daten, die als nächstes bereit sind, als nächstes übertragen werden. Dies ermöglicht auch eine effiziente Nutzung des Speicherplatzes im Speichersystem, da es die Anzahl der im Speichersystem gespeicherten Datenpufferzeiger reduzieren kann.
  • Die hierin beschriebene Technologie kann mit einer Vielzahl von Arten von nichtflüchtigen Speichern verwendet werden. Ein Beispiel ist ein dreidimensionales (3D) nichtflüchtiges Speichersystem. Ausführungsformen können jedoch auch in einem zweidimensionalen (2D) nichtflüchtigen Speichersystem praktiziert werden. 1A ist eine perspektivische Ansicht eines Satzes von Blöcken in einer gestapelten nichtflüchtigen 3D Speichervorrichtung. Das Speichersystem 100 beinhaltet ein Substrat 101. Auf dem Substrat befinden sich Beispielblöcke BLK0, BLK1, BLK2 und BLK3 von Speicherzellen (Speicherelementen) und ein Peripheriebereich 104 mit Schaltungen zur Verwendung durch die Blöcke. Zum Beispiel kann die Schaltung Spannungstreiber 105 aufweisen, die mit Steuergateschichten der Blöcke verbunden werden können. Bei einem Ansatz werden Steuergateschichten auf einer gemeinsamen Höhe in den Blöcken gemeinsam angesteuert. Das Substrat 101 kann auch Schaltungen unter den Blöcken zusammen mit einer oder mehreren unteren Metallschichten tragen, die in Leiterbahnen strukturiert sind, um Signale der Schaltung zu übertragen. Die Blöcke sind in einem Zwischenbereich 102 der Speichervorrichtung ausgebildet. In einem oberen Bereich 103 der Speichervorrichtung sind eine oder mehrere obere Metallschichten in Leiterbahnen strukturiert, um Signale der Schaltung zu übertragen. Jeder Block weist einen gestapelten Bereich von Speicherzellen auf, wobei alternierende Ebenen des Stapels Steuergateschichten repräsentieren. In einem möglichen Ansatz sind die Steuergateschichten jedes Blocks in einer gemeinsamen Höhe miteinander und mit einem Spannungstreiber verbunden. Während vier Blöcke beispielhaft dargestellt sind, können zwei oder mehr Blöcke verwendet werden, die sich in x - und/oder y-Richtung erstrecken.
  • Die Länge der Ebene in x-Richtung kann eine Richtung darstellen, in der sich Signalpfade zu Wortleitungen in der einen oder den mehreren oberen Metallschichten erstrecken (z. B. eine Wortleitungs- oder SGD-Leitungsrichtung), und die Breite der Ebene in der y-Richtung repräsentiert eine Richtung, in der sich Signalpfade zu Bitleitungen in der einen oder den mehreren oberen Metallschichten (z. B. einer Bitleitungsrichtung) erstrecken. Die z-Richtung stellt eine Höhe der Speichervorrichtung dar.
  • 1B ist ein Funktionsblockdiagramm einer Speichervorrichtung, wie des gestapelten nichtflüchtigen 3D Speichersystems 100 von 1A. Das Funktionsblockdiagramm kann auch für ein nichtflüchtiges 2D Speichersystem verwendet werden. Das Speichersystem 100 kann ein oder mehrere Speicher-Dies 108 enthalten. Der Satz von Blöcken von 1A kann auf einem Die sein. Das Speicher-Die 108 enthält eine Speicherstruktur 126 aus Speicherzellen, wie zum Beispiel ein Array aus Speicherzellen, eine Steuerschaltung 110 und Lese/Schreib-Schaltungen 128. In einer 3D-Konfiguration kann die Speicherstruktur die Blöcke aus 1A enthalten. Die Speicherstruktur 126 ist durch Wortleitungen über einen Zeilendecoder 124 und durch Bitleitungen über einen Spaltendecoder 132 adressierbar. Die Lese -/Schreibschaltungen 128 enthalten mehrere Abtastblöcke SB1, SB2,..., SBp (Abtastschaltkreise) und ermöglichen, dass eine Seite von Speicherzellen parallel gelesen oder programmiert wird. Üblicherweise ist eine Steuerung 122 in dem gleichen Speichersystem 100 (z. B. einer entfernbaren Speicherkarte) wie das eine oder die mehreren Speicher-Dies 108 enthalten. Befehle und Daten werden zwischen dem Host 140 und der Steuerung 122 über einen Datenbus 120 und zwischen der Steuerung und dem einen oder den mehreren Speicher-Dies 108 über Leitungen 118 übertragen.
  • Mehrere Speicherzellen in der Struktur 126 können so eingerichtet sein, dass sie in Reihe geschaltet sind, oder so, dass jedes Element einzeln zugänglich ist. Als nicht einschränkendes Beispiel enthalten Flash-Speichervorrichtungen in NAN D-Konfiguration (NAND-Speicher) üblicherweise Speicherelemente, die in Reihe geschaltet sind. Eine NAND-Kette ist ein Beispiel eines Satzes von in Reihe geschalteten Transistoren, die Speicherzellen und Auswahlgate-Transistoren aufweisen.
  • 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 eingerichtet 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.
  • Andere Arten von nichtflüchtigen Speichern zusätzlich zu NAND-Flash-Speichern können ebenfalls 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 Speicherelemente können aus passiven und/oder aktiven Elementen in beliebigen Kombinationen gebildet sein. Als nicht einschränkendes Beispiel enthalten passive Halbleiterspeicherelemente ReRAM-Vorrichtungselemente, die in einigen Ausführungsformen ein widerstandsschaltendes Speicherelement wie etwa ein Anti-Fuse- oder Phasenwechselmaterial und gegebenenfalls ein Lenkelement wie etwa eine Diode oder einen Transistor enthalten. Weiterhin beinhalten als nicht einschränkendes Beispiel aktive Halbleiterspeicherelemente EEPROM- und Flash-Speichervorrichtungselemente, die in einigen Ausführungsformen Elemente enthalten, die einen Ladungsspeicherbereich enthalten, wie etwa ein Floating-Gate, leitende Nanopartikel oder ein dielektrisches Ladungsspeichermaterial.
  • Die Speicherstruktur 126 kann zweidimensional (2D) oder dreidimensional (3D) sein. Die Speicherstruktur 126 kann ein oder mehrere Anordnungen von Speicherelementen (auch als Speicherzellen bezeichnet) umfassen. 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-y-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.
  • 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 z-Richtung im Wesentlichen senkrecht ist und die x- und y-Richtungen im Wesentlichen parallel zur Hauptoberfläche des Substrats verlaufen).
  • Die Speicherstruktur kann eine monolithische dreidimensionale Speicherstruktur aufweisen, in der mehrere Speicherebenen über (und nicht in) einem einzelnen Substrat wie beispielsweise einem Wafer ohne dazwischen liegende Substrate ausgebildet sind. Die Speicherstruktur kann jede Art von nichtflüchtigem Speicher aufweisen, der monolithisch in einer oder mehreren physischen Ebenen von Speicherzellenanordnungen ausgebildet ist, die einen aktiven Bereich aufweisen, der über einem Siliciumsubstrat angeordnet ist. Die Speicherstruktur kann sich in einer nichtflüchtigen Speichervorrichtung befinden, die Schaltungen aufweist, die dem Betrieb der Speicherzellen zugeordnet sind, ganz gleich, ob sich die zugehörige Schaltung oberhalb oder innerhalb des Substrats befindet.
  • Ü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.
  • 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. Die Spalten können in einer zweidimensionalen Konfiguration angeordnet sein, z. B. in einer x-y-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) Speichervorrichtungsebene 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.
  • 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 gedü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.
  • Ein Fachmann wird erkennen, dass diese Technologie nicht auf die beschriebenen zweidimensionalen und dreidimensionalen beispielhaften Strukturen beschränkt ist, sondern alle relevanten Speicherstrukturen in dem Geist und Umfang der Technologie abdeckt, wie hier beschrieben und wie es von einem Fachmann verstanden wird.
  • 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.
  • Die Steuerschaltung 110 arbeitet mit den Lese-/Schreibschaltungen 128 zusammen, um Speichervorgänge auf der Speicherstruktur 126 auszuführen, und enthält eine Zustandsmaschine 112, einen On-Chip-Adressdecodierer 114 und ein Leistungssteuermodul 116. Die Zustandsmaschine 112 stellt eine Chipebenensteuerung von Speicheroperationen bereit. Ein Speicherbereich 113 kann für Parameter zum Betreiben der Speichervorrichtung vorgesehen sein, wie zum Beispiel Programmierparameter für verschiedene Zeilen oder andere Gruppen von Speicherzellen. Diese Programmierparameter könnten Bitleitungsspannungen und Verifizierungsspannungen enthalten.
  • Der On-Chip-Adressdecodierer 114 stellt eine Adressschnittstelle zwischen derjenigen, die von dem Host oder einer Speichersteuerung verwendet wird, zu der Hardwareadresse, die von den Decodierern 124 und 132 verwendet wird, bereit. Das Leistungssteuermodul 116 steuert die Leistung und Spannungen, die den Wortleitungen und Bitleitungen während Speichervorgängen zugeführt werden. Er kann Treiber für Wortleitungsschichten (WLLs) in einer 3D-Konfiguration, SGS- und SGD-Auswahlgates und Source-Leitungen enthalten. Die Abtastblöcke können in einem Ansatz Bitleitungstreiber enthalten. Ein SGS-Auswahlgate ist ein Gate-Transistor an einem Source-Ende einer NAND-Kette, und ein SGD-Auswahlgate ist ein Transistor an einem Drain-Ende einer NAND-Kette.
  • In einigen Implementierungen können einige der Komponenten kombiniert werden. Bei verschiedenen Ausführungen können eine oder mehrere der Komponenten (allein oder in Kombination), die sich von der Speicherstruktur 126 unterscheiden, als mindestens eine Steuerschaltung betrachtet werden, die eingerichtet ist, um die hier beschriebenen Vorgänge durchzuführen. Zum Beispiel kann eine Steuerschaltung eine beliebige der Komponenten oder eine Kombination aus einer Steuerschaltung 110, Zustandsmaschine 112, Decodern 114/132, Leistungssteuermodul 116, Erfassungsblöcken SB1, SB2,..., SBp, Lese/Schreib-Schaltungen 128, Steuerung 122 usw. beinhalten.
  • Die Off-Chip-Steuerung 122 kann einen Prozessor 122c und Speichervorrichtungen (Speicher), wie ROM 122a und RAM 122b, aufweisen. Die Speichervorrichtungen weisen Code wie etwa einen Satz von Anweisungen auf, und der Prozessor ist betreibbar, um den Satz von Anweisungen auszuführen, um die hierin beschriebene Funktionalität bereitzustellen. Alternativ oder zusätzlich kann der Prozessor auf Code von einer Speichervorrichtung 126a der Speicherstruktur zugreifen, wie beispielsweise einen reservierten Bereich von Speicherzellen in einer oder mehreren Wortleitungen.
  • Der Code wird von der Steuerung 122 verwendet, um auf die Speicherstruktur 126 zuzugreifen, wie zum Beispiel für Programmier-, Lese- und Löschvorgänge. Der Code kann Bootcode und Steuercode (z. B. einen Satz von Befehlen) enthalten. Der Bootcode ist eine Software, die die Steuerung während eines Boot- oder Startvorgangs initialisiert und der Steuerung ermöglicht, auf die Speicherstruktur zuzugreifen. Der Code kann von der Steuerung verwendet werden, um eine oder mehrere Speicherstrukturen zu steuern. Beim Hochfahren ruft der Prozessor 122c den Bootcode aus dem ROM 122a oder der Speichervorrichtung 126a zur Ausführung ab, und der Bootcode initialisiert die Systemkomponenten und lädt den Steuercode in den RAM 122b. Sobald der Steuercode in den RAM geladen ist, wird er durch den Prozessor ausgeführt. Der Steuercode enthält Treiber zum Durchführen grundlegender Aufgaben, wie beispielsweise Steuern und Zuweisen von Speicher, Priorisieren der Verarbeitung von Befehlen und Steuern von Eingabe- und Ausgabeports.
  • 2A ist ein Blockdiagramm eines beispielhaften Speichersystems 100, das mehr Details einer Ausführungsform der Steuerung 122 und des Hostsystems 140 zeigt. In einer Ausführungsform ist das System aus 2A ein SSD-Laufwerk. Wie hier verwendet, ist die Speichersteuerung eine Vorrichtung, die auf einem Speichersystem gespeicherte Daten verwaltet und mit einem Hostsystem wie z. B. einem Computer oder einer elektronischen Vorrichtung kommuniziert. Eine Speichersteuerung kann verschiedene Funktionen zusätzlich zu der hier beschriebenen spezifischen Funktionalität aufweisen. Zum Beispiel kann die Speichersteuerung den Speicher formatieren, um sicherzustellen, dass der Speicher ordnungsgemäß arbeitet, um schlechte Flash-Speicherzellen auszugrenzen und Ersatzspeicherzellen zuzuordnen, die künftig fehlerhafte Zellen ersetzen sollen. Einige Teile der Ersatzzellen können verwendet werden, um Firmware aufzunehmen, um die Speichersteuerung zu betreiben und andere Merkmale zu implementieren. Wenn ein Host während des Betriebs Daten aus dem Flash-Speicher lesen oder in ihn schreiben muss, kommuniziert er mit der Speichersteuerung. Wenn der Host eine logische Adresse (LA) bereitstellt, zu der Daten gelesen/geschrieben werden sollen, kann die Flash-Speichersteuerung die vom Host empfangene logische Adresse in eine physische Adresse im Speicher umwandeln. (Alternativ kann der Host die physische Adresse bereitstellen). Die Speichersteuerung kann auch verschiedene Speicherverwaltungsfunktionen ausführen, wie z. B., ohne darauf beschränkt zu sein, einen Abnutzungsausgleich (Verteilen von Schreibvorgängen zum Vermeiden eines Verschleißes spezifischer Speicherblöcke, auf die ansonsten wiederholt geschrieben werden würde) und eine Speicherbereinigung (nachdem ein Block voll ist, Bewegen ausschließlich der gültigen Datenseiten zu einem neuen Block, so dass der volle Block gelöscht und wiederverwendet werden kann).
  • Das Hostsystem 140 weist den Hostspeicher 160 auf. In einer Ausführungsform beinhaltet der Hostspeicher 160 Befehlsübermittlungswarteschlangen (submission queues, SQs) 162 und Befehlsbeendigungswarteschlangen (completion queues, CQs) 164. Befehle zum Zugriff auf den nichtflüchtigen Speicher 108 können vom Host in eine Übermittlungswarteschlange 162 platziert werden. Ein Befehl kann beispielsweise sein, in dem nichtflüchtigen Speicher 108 zu lesen oder zu schreiben. In einer Ausführungsform ist eine Übermittlungswarteschlange 162 ein Ringpuffer mit einem Slot fester Größe. In einer Ausführungsform informiert der Host das Speichersystem, wenn ein neuer Befehl auf einer Übermittlungswarteschlange 162 platziert wurde. Ein solcher Mechanismus wird hierin als „Doorbell“ bezeichnet.
  • Die Steuerung 122 kann in eine zugehörige Beendigungswarteschlange 164 schreiben, um den Status für beendete Befehle zu senden. In einer Ausführungsform ist eine Beendigungswarteschlange 164 ein Ringpuffer mit einem Slot fester Größe.
  • Die Datenpuffer 168 können verwendet werden, um Daten zu speichern, die in den nichtflüchtigen Speicher 108 geschrieben werden sollen, oder um Daten zu speichern, die aus dem nichtflüchtigen Speicher 108 gelesen wurden. Die Steuerung 122 kann einen DMA von Daten aus den Datenpuffern 168 durchführen, als Teil des Schreibens von Daten in den nichtflüchtigen Speicher 108. So kann beispielsweise die Steuerung 122 Schreibdaten aus den Datenpuffern 168 in Schreibpuffer im Speichersystem übertragen. Die Steuerung 122 kann einen DMA von Daten an die Datenpuffer 168 durchführen, als Teil des Lesens von Daten aus dem nichtflüchtigen Speicher 108. So kann beispielsweise die Steuerung 122 Lesedaten von Lesepuffern im Speichersystem in die Datenpuffer 168 übertragen.
  • Der Hostspeicher 160 beinhaltet auch Datenpufferzeiger 166. Die Datenpufferzeiger 166 identifizieren Positionen in den Datenpuffern 168. In Ausführungsformen verwendet die Speichersteuerung 122 die Datenpufferzeiger 166, um DMAs auszuführen und einen Lese- oder Schreibbefehl zu erfüllen.
  • In einer Ausführungsform sind die Übermittlungswarteschlangen (SQs) 162, Beendigungswarteschlangen (CQs) und Datenpufferzeiger 166 mit NVM Express kompatibel. In einer Ausführungsform sind die Datenpufferzeiger 166 NVMe-PRP-Einträge („Physical Region Page“). Die Übermittlungswarteschlangen (SQs) 162, Beendigungswarteschlangen (CQs) und Datenpufferzeiger 166 müssen jedoch nicht mit NVM Express kompatibel sein.
  • Die Schnittstelle zwischen der Steuerung 122 und dem nichtflüchtigen Speicher-Die 108 kann jede geeignete Schnittstelle sein. In einer Ausführungsform kann das Speichersystem 100 ein kartenbasiertes System wie eine sichere digitale Karte (SD) oder eine sichere digitale Mikro-Karte (Mikro-SD) sein. In einer alternativen Ausführungsform kann das Speichersystem 100 Teil eines eingebetteten Speichersystems sein. Zum Beispiel kann der Speicher in dem Host eingebettet sein, beispielsweise in Form eines Solid-State-Laufwerks (SSD), das in einem Personal Computer installiert ist.
  • In einigen Ausführungsformen beinhaltet das nichtflüchtige Speichersystem 100 einen einzelnen Kanal zwischen der Steuerung 122 und dem nichtflüchtigen Speicher-Rohchip 108, wobei der hierin beschriebene Gegenstand nicht auf einen einzelnen Speicherkanal beschränkt ist. Zum Beispiel können in einigen Speichersystemen 2, 4, 8 oder mehr Kanäle zwischen der Steuerung und dem Speicher-Die, je nach den Fähigkeiten der Steuerung, vorhanden sein. In jeder der hier beschriebenen Ausführungsformen kann mehr als ein einzelner Kanal zwischen der Steuerung und dem Speicher-Die vorhanden sein, selbst wenn in den Zeichnungen nur ein Kanal dargestellt ist.
  • Wie in der 2A dargestellt beinhaltet die Steuerung 122 ein Frontend-Modul 208, das mit einem Hostsystem 140 interagiert, ein Backend-Modul 210, das mit einem oder mehreren nichtflüchtigen Speicher-Dies 108 interagiert, und verschiedene andere Module zur Ausführung von Funktionen, die nachfolgend detailliert beschrieben werden.
  • Die in der 2A dargestellten Komponenten der Steuerung 122 können in Form einer gehäusten bzw. gebündelten funktionalen Hardwareeinheit (z. B. einer elektrischen Schaltung), die zur Verwendung mit anderen Komponenten bestimmt ist, eines Teils eines Programmcodes (z. B. Software oder Firmware), der von einem (Mikro)Prozessor oder einer Prozessorschaltung (oder einem oder mehreren Prozessoren), von dem (von denen) üblicherweise eine bestimmte Funktion zugehöriger Funktionen erfüllt wird, ausführbar ist, oder einer eigenständigen Hardware- oder Softwarekomponente, die mit einem größeren System verbunden ist, vorliegen. Zum Beispiel kann jedes Modul eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares 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. Alternativ oder zusätzlich kann jedes Modul Software beinhalten, die in einer prozessorlesbaren Vorrichtung (z. B. einem Speicher) gespeichert ist, um einen oder mehrere Prozessoren zu programmieren, damit die Steuerung 122 die hier beschriebenen Funktionen durchführt. Die in 2A dargestellte Architektur ist eine beispielhafte Implementierung, die die Komponenten der in 1B dargestellten Steuerung 122 (d. h. RAM 122b, ROM 122a, Prozessor 122c) verwenden kann (oder nicht).
  • Die Steuerung 122 kann mit einem oder mehreren Speicher-Dies 108 verbunden sein. In einer Ausführungsform implementieren die Steuerung 122 und mehrere Speicher-Dies (zusammen aufweisend das nichtflüchtige Speichersystem 100) ein Solid-State-Laufwerk (SSD), das anstelle eines Festplattenlaufwerks innerhalb eines Hosts, als NAS-Vorrichtung usw. emuliert, ersetzt oder verwendet werden kann. Darüber hinaus muss das SSD nicht als Festplatte verwendet werden.
  • Unter erneuter Bezugnahme auf Module der Steuerung 122 verwaltet ein Lese/Schreib-Puffermanager (R/W-Puffermanager) 214 Puffer im Direktzugriffsspeicher (RAM). Diese Puffer können Schreibpuffer und Lesepuffer einschließen. Der RAM kann als temporärer Puffer verwendet werden, um Daten von dem Host 140 zu speichern, die in den nichtflüchtigen Speicher 108 geschrieben werden sollen. Der RAM kann auch als temporärer Puffer verwendet werden, um Daten zu speichern, die aus dem nichtflüchtigen Speicher 108 gelesen werden, um zu dem Host 140 übertragen zu werden. Der R/W-Puffermanager 214 kann auch die interne Buszuteilung der Steuerung 122 steuern. Ein Nur-Lese-Speicher (ROM) speichert den Boot-Code des Systems.
  • RAM und ROM sind in 2A nicht explizit dargestellt. In einer Ausführungsform sind RAM und/oder ROM innerhalb der Steuerung 122 angeordnet. In einer Ausführungsform sind RAM und/oder ROM außerhalb der Steuerung 122 angeordnet. In noch anderen Ausführungsformen können sich Teile des RAM und des ROM sowohl innerhalb der Steuerung 122 als auch außerhalb der Steuerung befinden. Weiterhin können in einigen Implementierungen die Steuerung 122, der RAM und der ROM auf separaten Halbleiterchips angeordnet sein.
  • Das Frontend-Modul 208 beinhaltet eine Host-Schnittstelle 220 und eine Physical-Layer-Schnittstelle (PHY) 222, welche die elektrische Schnittstelle mit dem Host oder der Speichersteuerung der nächsten Ebene bereitstellen. In einer Ausführungsform ist die PHY 222 Peripheral Component Interconnect Express (PCle). Jedoch ist PHY 222 nicht auf PCle beschränkt.
  • Die Host-Schnittstelle 220 erleichtert üblicherweise die Übertragung von Daten, Steuersignalen und Taktsignalen. Die Wahl des Typs der Host-Schnittstelle 220 kann von der Art des verwendeten Speichers abhängen. In einigen Ausführungsformen ist die Host-Schnittstelle 220 mit NVM Express (NVMe) kompatibel. NVMe ist eine logische Geräteschnittstelle, die verwendet werden kann, um auf einen nichtflüchtigen Speicher zuzugreifen, der unter Verwendung von einem PCIe-Bus zwischen dem Host 140 und dem Speichersystem 100 angeschlossen ist. Es ist jedoch zu beachten, dass die Host-Schnittstelle 220 nicht auf NVMe beschränkt ist. Die Host-Schnittstelle 220 beinhaltet einen Befehlskontextspeicher 242, Schnittstellenregister 244, Befehlsabrufer 246, Befehlsparser 248, Pufferzeigermanager 250 und Datenpufferzeigerspeicher 252.
  • Der Befehlskontextspeicher 242 wird verwendet, um Informationen für einen Befehl von dem Host zu speichern, den die Speichersteuerung gegenwärtig verarbeitet. Diese Informationen können Zeiger auf Listen von Zeigern in dem Hostspeicher 160 enthalten. In einer Ausführungsform gibt es für jeden ausstehenden Lese- oder Schreibbefehl des Hostsystems 140 einen separaten Befehlskontext. Jedoch ist es nicht erforderlich, dass alle Arten von Befehlen von dem Hostsystem 140 Informationen aufweisen, die in einem Befehlskontext gespeichert sind. 7 zeigt weitere Details einer Ausführungsform des Befehlskontextspeichers 242.
  • Die Schnittstellenregister 244 enthalten verschiedene Register zur Verwendung beim Bereitstellen der Host-Schnittstelle. In einer Ausführungsform ist eines der Register ein „Doorbell Register“, das der Host in einer Ausführungsform schreiben kann, um dem Speichersystem mitzuteilen, dass sich ein neuer Befehl auf der SQ 162 befindet. Der Befehlsabrufer 246 ist eingerichtet, um einen neuen Befehl von einer SQ 162 abzurufen. Der Befehlsparser 248 ist eingerichtet, um den neuen Befehl zu analysieren. In einer Ausführungsform analysiert der Befehlsparser 248 Datenzeigerfelder in dem Befehl, um zu bestimmen, wie die Speichersteuerung den Zugriff auf Datenpufferzeiger handhaben soll.
  • Der Datenpufferzeigerspeicher 252 wird verwendet, um Zeiger auf Datenpuffer im Hostspeicher zu speichern. In einem Ausführungsbeispiel wird der Datenpufferzeigerspeicher 252 verwendet, um NVMe-PRP-Einträge zu speichern. PRP-Einträge können in NVMe als Zeiger auf Datenpuffer im Hostspeicher verwendet werden. In einem Ausführungsbeispiel gibt es einen Datenpufferzeigerspeicher 252 für jeden Speicher-Die 108. Der Pufferzeigermanager 250 kann eingerichtet sein, um auf Datenpufferzeiger aus dem Hostspeicher zuzugreifen und sie in einen Datenpufferzeigerspeicher 252 zu übertragen.
  • Das Backend-Modul 210 schließt einen Planer 226, einen Befehlsausführer 228, eine ECC-Engine (Error Correction Controller) 224 und eine Speicherschnittstelle 230 ein.
  • Ein Befehlsplaner 226 erzeugt Befehlssequenzen, wie beispielsweise Programmier-, Lese- und Löschbefehlssequenzen, die an das nichtflüchtige Speicher-Die 108 übertragen werden sollen. Der Befehlsausführer 228 überwacht die Ausführung dieser Befehle.
  • Die Speicherschnittstelle 230 stellt die Befehlssequenzen für das nichtflüchtige Speicher-Die 108 bereit und empfängt Statusinformationen vom nichtflüchtigen Speicher-Die 108. In einer Ausführungsform kann die Speicherschnittstelle 230 eine DDR-Schnittstelle (Double Data Rate) sein. In einigen Ausführungsformen ist die Speicherschnittstelle 203 eine Flash-Speicherschnittstelle. Jedoch sind die Speicherzellen in dem nichtflüchtigen Speicher 108 nicht auf Flash beschränkt. Somit ist die Speicherschnittstelle 230 nicht auf eine Flash-Speicherschnittstelle beschränkt. In dem Fall, dass der Speicher 108 ein Flash-Speicher ist, kann das Backend-Modul 210 eine Flash-Steuerschicht beinhalten, welche den gesamten Betrieb des Backend-Moduls 210 steuert.
  • Die ECC-Engine 224 codiert die von dem Hostsystem 140 empfangenen Datenbytes und decodiert und korrigiert Fehler bei den aus dem nichtflüchtigen Speicher 108 gelesenen Datenbytes. In einer Ausführungsform weist die ECC-Engine 224 einen LDPC-Dekodierer (lowdensity parity check) auf.
  • Der DMA 253 ist eingerichtet, um eine DMA-Übertragung (Direct Memory Access) von Daten zwischen dem Speichersystem 100 und dem Speicher 160 im Hostsystem 140 zu steuern. Zum Beispiel kann DMA 253 auf Daten von Host-Datenpuffern 168 zugreifen und sie zu den Schreibpuffern im RAM übertragen (z. B. 1B, 122b). Der DMA 253 kann Datenpufferzeiger 166 verwenden, die von der Host-Schnittstelle 220 bereitgestellt werden, um auf die korrekte Stelle in den Host-Datenpuffern 168 zuzugreifen. Der DMA 253 kann Daten von Lesepuffern in dem RAM 122b übertragen und zu den Host-Datenpuffern 168 übertragen. Der DMA 253 kann Datenpufferzeiger 166 verwenden, die von der Host-Schnittstelle 220 bereitgestellt werden, um auf die korrekte Stelle in den Host-Datenpuffern 168 zuzugreifen, um von dem nichtflüchtigen Speicher 108 gelesene Daten zu übertragen. Es ist zu beachten, dass das Backend-Modul 210 bei Lese- und Schreibvorgängen eine zusätzliche Verarbeitung der Daten wie Fehlerkorrektur, Verschlüsselung usw. durchführen kann. So sind beispielsweise die Daten, die an die Host-Datenpuffer 168 übertragen werden, in der Regel nicht die aus dem nichtflüchtigen Speicher 108 gelesenen Rohdaten.
  • 2B ist ein Diagramm einer Ausführungsform einer Betriebsumgebung. In dieser Ausführungsform sind die SQs 162, die CQs und die Datenpufferzeiger 166 im Speicher 264 gespeichert (auch als „eine Speichereinheit“ bezeichnet). Der Speicher 264 kann, ohne darauf beschränkt zu sein, als RAM, DRAM, ReRAM implementiert sein. In einem Ausführungsbeispiel ist der Speicher 264 Teil des nichtflüchtigen Speichers 108. Beispielsweise kann der Speicher 264 Flash-Speicherzellen in einem Speicherarray darstellen. Der Speicher 264 ist über eine physische Kommunikationsverbindung mit der Steuerung 122 gekoppelt. Der Abschnitt des Speichers 264, der die SQs 162, CQs und Datenpufferzeiger 166 speichert, kann als Steuerungsspeicherpuffer (Controller Memory Buffer, CMB) dienen. In einer Ausführungsform ist der CMB mit einem CMB einer NVMe-Spezifikation kompatibel. Die Übermittlungswarteschlangen (SQs) 162 im Speicher 264 ermöglichen dem Hostsystem 140 in einer Ausführungsform, direkt Befehle in den internen Speicherplatz der Speichersteuerung zu schreiben. Dies entschärft die Notwendigkeit, dass die Speichersteuerung auf Befehle aus dem Hostspeicher zugreift. Die Datenpufferzeiger 166 in dem Speicher 264 ermöglichen dem Hostsystem 140 in einer Ausführungsform, die Datenpufferzeiger direkt in den internen Speicherplatz der Speichersteuerung zu schreiben. CMB-basierte SQs 162, CQs und Datenpufferzeiger 166 können auf eine ähnliche Weise verwendet werden, wenn die SQs 162, CQs und Datenpufferzeiger 166 auf dem Hostsystem gespeichert sind. Ein Unterschied besteht darin, dass der Speicherplatz der Speichersteuerung anstelle des Hostspeichers verwendet wird.
  • Die Steuerung 122 weist eine Speichersteuerung 262 auf, um das Übertragen von Daten zwischen dem Speicher 264 und dem Speicher in der Steuerung 122 zu verwalten. Zum Beispiel können Daten von dem Speicher 264 zu dem Befehlskontextspeicher 242, den Schnittstellenregistern 244 und/oder dem Datenpufferzeigerspeicher 252 übertragen werden. Somit können der Befehlskontextspeicher 242, das Schnittstellenregister 244 und/oder der Datenpufferzeigerspeicher 252 in der Steuerung 122 integriert sein. Dieser interne Speicher kann RAM, Register usw. sein.
  • Man beachte, dass es in der Ausführungsform von 2B eine beliebige Anzahl von Host-Schnittstellen 220 geben kann.
  • In der Ausführungsform von 2B enthält der Hostspeicher 160 die Datenpuffer 168. Somit kann die Steuerung 122, basierend auf Datenpufferzeigern, DMAs zu/von den Datenpuffern 168 initiieren. Jedoch überträgt in einer Ausführungsform die Speichersteuerung 122 zuerst Datenpufferzeiger aus dem Bereich 166 des Speichers 264 zu dem Datenpufferzeigerspeicher 252, der sich in einer Ausführungsform innerhalb der Steuerung 122 befindet.
  • Andere Variationen der in 2A und 2B dargestellten Ausführungsformen sind möglich. Zum Beispiel kann jede Teilmenge der SQs 162, CQs 164 und der Datenpufferzeiger 166 in dem Speicher 264 des Speichersystems 100 gespeichert werden. Zum Beispiel werden SQs 162 und CQs 164 in dem Speicher 264 gespeichert, doch die Datenpufferzeiger 166 werden in einem Ausführungsbeispiel in dem Hostspeicher 160 gespeichert.
  • 3A ist ein Diagramm eines Beispiels von einem Hostbefehl 320, von Host-Datenpuffern 168 und Listen 304 von Datenpufferzeigern. In einer Ausführungsform ist jeder der Host-Datenpuffer eine physische Seite im Hostspeicher. Ebenso ist in einer Ausführungsform jede der Listen 304 eine physische Seite im Hostspeicher. Die Listen 304 befinden sich in einer Ausführungsform in Datenpufferzeigern 166 im Hostspeicher 160. Jedoch ist zu beachten, dass die Listen 304 sich in dem Speichersystem 100 befinden könnten. In Bezug auf die Ausführungsform von 2B könnten sich beispielsweise Listen 304 in Datenpufferzeigern 166 im Speicher 264 befinden, die über eine physische Kommunikationsverbindung mit der Steuerung 122 gekoppelt sind.
  • Das Hostsystem kann in einer Ausführungsform den Hostbefehl 320 auf SQs 162 im Hostspeicher 160 platzieren. Das Hostsystem kann in einer Ausführungsform den Hostbefehl 320 auf SQs 162 im Speicher 264 platzieren. Es ist zu beachten, dass der Hostbefehl 302 für eine Speicherzugriffsoperation, wie z. B. Schreiben (auch als „Programmieren“ bezeichnet) oder Lesen, verwendet werden kann. Die Befehlskennung 340 kann verwendet werden, um den Befehl zu identifizieren. Mit anderen Worten kann die Befehlskennung 340 einen Lesebefehl von einem anderen Lesebefehl unterscheiden, usw. Die Speichersteuerung 122 kann diese Befehlskennung 340 verwenden, um den Status für den beendeten Befehl in der Beendigungswarteschlange bereitzustellen (z. B. 2A, 164 oder 2B, 164). Der Befehlstyp 342 gibt den Typ des Befehls an (z. B. Lesen, Schreiben, usw.). Das Start-LBA-Feld 344 gibt die Start-LBA (Logical Block Address) für ein Lesen oder Schreiben an. Das Längenfeld 346 steht für die Länge des Lese- oder Schreibvorgangs. Die Länge könnte als eine Anzahl logischer Blöcke angegeben werden. Es ist zu beachten, dass die Speichersteuerung 122 die Start-LBA sowie andere LBAs, wie durch die Länge des Lese- oder Schreibvorgangs angezeigt, in physische Adressen in dem nichtflüchtigen Speicher 108 umwandeln kann.
  • Ein Hostbefehl 320 enthält Feld 322 und Feld 324. Feld 322 und Feld 324 können Datenzeiger enthalten. Beispielsweise kann das Feld 322 auf einen Datenpuffer im Hostspeicher zeigen. Falls verwendet, kann Feld 324 in einer Ausführungsform auf eine Liste von Datenpufferzeigern im Hostspeicher zeigen. Es ist zu beachten, dass in einigen Ausführungsformen das Feld 324, falls verwendet, auf eine Liste von Datenpufferzeigern im Speicher 264 verweisen kann (siehe 2B). Der Hostbefehl 320 kann auch andere Felder aufweisen. Zum Beispiel können verschiedene Felder für die Datenverwaltung verwendet werden, beispielsweise ob die Daten komprimierbar sind, ob dieser Befehl Teil einer sequentiellen Anforderung, von Latenzanforderungen usw. ist.
  • Feld 322 enthält in diesem Beispiel einen Zeiger auf den ersten Datenpuffer im Hostspeicher. In einigen Ausführungsformen weist das Feld 322 einen Versatz auf, der null oder nicht null sein kann. Der Versatz kann verwendet werden, um den Startort des Datenpuffers zu verfeinern. 3B Und 10 und deren Beschreibung stellen weitere Details einer Ausführungsform zum Verarbeiten von Datenpufferzeigern bereit, wenn es einen Nicht-Null-Versatz im Feld 322 gibt.
  • Das Feld 324 enthält in diesem Beispiel einen Zeiger auf eine Liste von Datenpufferzeigern 304a. Die Liste 304a enthält eine Anzahl von Einträgen. Alle außer dem letzten Eintrag enthalten einen Zeiger auf einen Datenpuffer in dem Hostspeicher. Hierin wird ein Zeiger auf einen Datenpuffer im Speicher des Hostsystems als ein „Datenpufferzeiger“ bezeichnet. Der letzte Eintrag in der Liste 304a enthält einen Zeiger auf die Liste 304b. Die Liste 304b enthält eine Anzahl von Einträgen. Alle außer dem letzten Eintrag enthalten einen Zeiger auf einen Datenpuffer in dem Hostspeicher. Der letzte Eintrag in der Liste 304b enthält einen Zeiger auf eine andere Liste 304 (in 3A nicht dargestellt). Hierin kann der Begriff „Listenzeiger“ verwendet werden, um sich auf einen Zeiger auf eine Liste zu beziehen, die Datenpufferzeiger enthält. Es ist jedoch zu beachten, dass die Liste auch Einträge enthalten könnte, die keine Datenpufferzeiger sich, wie beispielsweise einen Zeiger auf eine andere Liste. Es ist zu beachten, dass der letzte Eintrag nicht immer ein Zeiger auf eine andere Liste 304 ist. Der letzte Eintrag kann einfach ein Zeiger auf einen Host-Datenpuffer sein.
  • In einer Ausführungsform ist das Feld 322 ein PRP-Eintrag (Physical Region Page), wie der Ausdruck in NVMe verwendet wird. Ein PRP-Eintrag (Physical Region Page) kann ein Zeiger auf eine physische Speicherseite im Hostspeicher sein. Die PRPs können als Streu-/Sammelmechanismus für den Datentransfer zwischen der Speichersystemsteuerung und dem Hostspeicher verwendet werden. In einer Ausführungsform wird die Größe einer physischen Speicherseite im Hostspeicher durch das Hostsystem eingerichtet. Zum Beispiel könnte das Hostsystem festlegen, dass jede physische Speicherseite 4KB, 8 KB, 16 KB oder irgendeine andere Größe ist.
  • In einer Ausführungsform weisen die PRP-Einträge eine feste Größe auf. In einer Ausführungsform kann ein PRP-Eintrag eine 64-Bit (z. B. 8 Byte) physische Speicherseitenadresse sein. Die PRP-Einträge könnten jedoch größer oder kleiner als 64 Bits sein. Ein PRP-Eintrag kann eine Seitenbasisadresse und einen Versatz aufweisen. In einer Ausführungsform zeigen die unteren Bits eines PRP-Eintrags einen Versatz innerhalb einer physischen Speicherseite im Hostspeicher an. Wenn zum Beispiel die Speicherseite 4 KB groß ist, dann können die Bits 11:02 den Versatz bilden, wenn die Speicherseite 8 KB groß ist, dann können die Bits 12:02 den Versatz bilden, usw.
  • In einer Ausführungsform ist das Feld 324 ein Zeiger auf eine Liste von NVMe-PRPs. Somit sind in einer Ausführungsform die Listen 304 PRP-Listen. Als ein Beispiel könnte eine PRP-Liste 512 PRP-Einträge haben. Zum Beispiel könnte die PRP-Liste die Größe von 4 KB haben, mit 512 PRP-Einträgen, die jeweils 64 Bits groß sind. Jedoch kann es mehr oder weniger PRP-Einträge in einer PRP-Liste 304 geben. Auch könnte die PRP-Liste 304 größer oder kleiner als 4 KB sein. So könnte beispielsweise eine 8 KB große PRP-Liste 304 1024 Einträge enthalten, die jeweils 64 Bit groß sind. In einer Ausführungsform weist die PRP-Liste 304 eine Größe auf, die gleich einer einzelnen Seite eines zusammenhängenden Speichers in dem Hostspeicher ist.
  • Man beachte, dass der Hostbefehl 320 mehr als einer Liste 304 von Datenpufferzeigern zugeordnet sein kann. Die Gesamtanzahl von Datenpufferzeigern, die für einen Befehl benötigt werden, kann durch die Befehlsparameter und die physische Speicherseitengröße impliziert werden. Der letzte Eintrag in der Liste 304 kann entweder ein Zeiger auf einen Datenpuffer oder ein Zeiger auf die nächste Liste sein. Für den Fall, dass der letzte Eintrag ein Zeiger auf die nächste Liste ist, zeigt dieser Eintrag auf eine Hostspeicheradresse, die die nächste Liste 304 enthält. Es ist zu beachten, dass die nächste Liste 304 eine physische Speicherseite umfassen kann.
  • In einer Ausführungsform ist die Speichersteuerung 122 in der Lage, den Ort des letzten Eintrags in einer gegebenen Liste 304 basierend auf der Größe einer physischen Speicherseite zu bestimmen. In einer Ausführungsform ist die Speichersteuerung 122 in der Lage, zu bestimmen, ob der letzte Eintrag ein Zeiger auf eine andere Liste 304 oder ein Datenpufferzeiger ist, basierend darauf, ob mehr Datenpufferzeiger erforderlich sind, um den Lese- oder Schreibbefehl zu erfüllen.
  • Es könnte eine große Anzahl von Listen 304 vorhanden sein. Zum Beispiel könnte ein Befehl darin bestehen, 256 MB in dem nichtflüchtigen Speichersystem zu lesen. Wenn jeder Datenpuffer 4 KB groß ist, könnte dies etwa 64.000 Datenpuffer erfordern - und damit 64.000 Listeneinträge. Wenn jeder Listeneintrag 64 Bits groß ist, bedeutet dies, dass die Datenpufferzeiger etwa 512 KB Speicherplatz verwenden könnten.
  • Es ist zu beachten, dass für einige Lese- oder Schreibbefehle das Feld 324 nicht verwendet wird. Wenn zum Beispiel ein Lesebefehl für nur einen Datenpuffer erfolgt, dann könnte nur das Feld 322 verwendet werden. Auch könnte es in einigen Fällen nur eine Liste 304 geben. Dies kann wiederum der Fall sein, wenn eine relativ kleine Menge von Daten zu lesen oder zu schreiben ist. Wenn es jedoch mehrere Listen gibt, wird es für die Speichersteuerung 122 viel schwieriger, den Zugriff auf die Datenpufferzeiger z. B. aus dem Hostspeicher effizient zu verwalten.
  • Die hierin offenbarten Ausführungsformen rufen Datenpufferzeiger (z. B. NVMe-PRP-Einträge) früh genug ab, so dass die Zeiger auf die Hostspeicher-Datenpuffer für den DMA rechtzeitig zur Verfügung stehen. Daher werden hohe Datenübertragungsraten zwischen dem Host und dem Speichersystem erreicht. Das vorzeitige Abrufen der Datenpufferzeiger erfordert jedoch einen beträchtlichen Speicherplatz auf der Speichervorrichtung. Wenn zum Beispiel alle Datenpufferzeiger für einen Befehl abgerufen werden sollten, sobald der Befehl zum ersten Mal durch das Speichersystem empfangen wird, könnte dies einen beträchtlichen Speicherplatz auf der Speichervorrichtung erfordern. Daher vermeiden die hierin offenbarten Ausführungsformen das Abrufen von Datenpufferzeigern bis kurz vor ihrer Verwendung für DMA zu/von den Hostspeicher-Datenpuffern. Daher wird Speicherplatz auf dem Speichersystem effizient genutzt. Zum Beispiel wird RAM 122b effizient genutzt.
  • Die hier offenbarten Ausführungsformen rufen Datenpufferzeiger effizient über die physische Schnittstelle (z. B. den PCIe-Bus) zwischen dem Hostsystem und dem Speichersystem ab. In einer Ausführungsform ist die Anzahl der Datenpufferzeiger, auf die gleichzeitig zugegriffen wird, für eine effiziente Übertragung über einen PCIe-Bus angepasst.
  • Die hier offenbarten Ausführungsformen rufen Datenpufferzeiger effizient in einem Datenpaket ab, das verwendet wird, um Daten über eine physische Schnittstelle (z. B. einen PCIe-Bus) zwischen dem Hostsystem und dem Speichersystem zu übertragen. Zum Beispiel kann ein PCle ein TLP-Paket (Transaction Layer Packet) verwenden. So kann beispielsweise eine TLP-Nutzlastgröße von 64 Bytes in einigen Konfigurationen eine optimale Effizienz darstellen. In diesem Fall kann die Anzahl von Datenpufferzeigern (z. B. NVMe PRPs), die in einem TLP-Paket abgerufen werden, 64 Bytes von Daten aufweisen. Jedoch können in anderen Konfigurationen mehr oder weniger als 64 Bytes die optimale Effizienz für eine TLP-Nutzlastgröße darstellen.
  • In einer Ausführungsform kann der erste Datenpufferzeiger in dem Befehl von dem Host einen Versatz aufweisen. 3B zeigt ein Diagramm eines Beispiels von einem Hostbefehl, von Host-Datenpuffern und Listen von Datenpufferzeigern ähnlich der 3A. Die Liste 304b von 3A ist nicht dargestellt, um das Diagramm zu vereinfachen. Außerdem weist der Zeiger auf den ersten Datenpuffer im Feld 322 im Befehl 320 in 3B einen Nicht-Null-Versatz auf. Mit diesem Versatz ist die Größe des ersten Host-Puffers kleiner als die Größe anderer Puffer. Zum Beispiel können die Puffer 168(1) bis 168(24) jeweils 4 KB sein. Jedoch kann der verwendete Teil des Puffers 168(0) um die Größe des Versatzes kleiner als 4 KB sein. Es ist zu beachten, dass ein Datenpuffer durch die Größe eines Datenpuffers (der ein fester Wert sein kann, der durch den Host spezifiziert ist) und die Hostspeicheradresse definiert werden kann, auf die ein Datenpufferzeiger zeigt. Zum Beispiel zeigen die Zeiger auf die Datenpuffer 168(1), 168(2) usw. in einer Ausführungsform auf den Anfang des Datenpuffers.
  • Der Versatz kann dazu führen, dass alle Übertragungen zwischen dem Hostsystem und dem Speichersystem nicht ausgerichtet sind. Zum Beispiel kann das Speichersystem die ersten 64 KB übertragen wollen. Unter der Annahme eines Datenpuffers von 4 KB entspricht die acht vollständigen der Host-Datenpuffern. In diesem Beispiel wird der Zeiger auf den ersten Puffer im Feld 322 für die Datenübertragung sowie die acht Datenpufferzeiger in der ersten Liste 304a benötigt. Diese acht Datenpufferzeiger zeigen auf die Datenpuffer 168(1) bis 168(8). Der letzte Host-Datenpuffer (z. B. 168(8)), der mit dieser beispielhaften 64 KB-Übertragung verbunden ist, wird jedoch aufgrund des Versatzes nicht vollständig aus diesen 64 KB-Daten gefüllt.
  • Bei der Übertragung der 64 KB, die sequentiell in den Puffern folgen, kann der verbleibende Teil des Datenpuffers 168(8) gefüllt werden. Um ein mehrfaches Abrufen von Datenpufferzeigern zu vermeiden, wird in einer Ausführungsform der Rest-Datenpufferzeigerspeicher (7, 714) verwendet. Der Rest-Datenpufferzeigerspeicher 714 wird verwendet, um Datenpufferzeiger zu speichern, die Datenpuffern entsprechen, die nicht vollständig gefüllt waren. Zum Beispiel kann der Datenpufferzeiger auf den Datenpuffer 168(8) in dem Rest-Datenpufferzeigerspeicher 714 gespeichert werden. In einer Ausführungsform prüft der Pufferzeigermanager 250 als Reaktion auf den Erhalt einer Anforderung zum Abrufen eines Datenpufferzeigers zunächst, ob benötigte Datenpufferzeiger (z. B. NVMe-PRP-Einträge) im Rest-Datenpufferzeigerspeicher 714 gespeichert sind. Falls dies der Fall ist, müssen diese Datenpufferzeiger nicht aus dem Hostspeicher abgerufen werden. Dies sorgt für eine beträchtliche Verbesserung der Leistung, da diese Datenpufferzeiger (z. B. PRP-Einträge) nicht erneut abgerufen werden müssen.
  • Es sei darauf hingewiesen, dass im obigen Szenario der Datenpufferzeiger, der im Rest-Datenpufferzeigerspeicher 714 gespeichert wurde, sich am Ende der 64 KB-Datenübertragung befand. Eine andere Möglichkeit besteht darin, den Datenpufferzeiger am Anfang einer 64 KB-Übertragung zu speichern. So kann beispielsweise die Speichersteuerung als nächstes eine 64 KB-Datenübertragung durchführen, die den Datenpuffer 168(16) teilweise füllt, die Datenpuffer 168(17) bis 168(23) vollständig füllt und den Datenpuffer 168(24) teilweise füllt. In diesem Fall können die Zeiger sowohl zu dem Datenpuffer 168(16) als auch 128(24) in dem Rest-Datenpufferzeigerspeicher 714 gespeichert werden. Eine spätere Übertragung kann Datenpuffer 168(8) bis 168(16) beinhalten (in denen der Datenpuffer 168(8) teilweise beschrieben wird und der Datenpuffer 168(16) den Rest der Strecke gefüllt wird). In diesem Fall muss die Speichersteuerung den Zeiger nicht wieder in den Datenpuffer 168(16) übertragen. Somit muss in diesem Beispiel die Speichersteuerung keinen Datenpufferzeiger zu eine Datenpuffer am Ende der Datenübertragung übertragen.
  • Auch sei darauf hingewiesen, dass die Notwendigkeit, neun Datenpufferzeiger gleichzeitig zu übertragen, oben vermieden wird. In einigen Ausführungsformen ist die Übertragung über den PCIe-Bus effizienter, wenn acht Datenpufferzeiger anstelle von neun Datenpufferzeigern übertragen werden.
  • 4 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 400 zum Betreiben eines nichtflüchtigen Speichersystems. Der Prozess 400 kann durch eine Steuerschaltung in dem Speichersystem 100 durchgeführt werden. In einer Ausführungsform führt eine Speichersteuerung 122 den Prozess 400 durch. In einer Ausführungsform wird der Prozess 400 in einer Umgebung, wie in 2A dargestellt, durchgeführt, in der das Hostsystem 140 SQs 162, CQs 164 und Datenpufferzeiger 166 enthält. In einer Ausführungsform wird der Prozess 400 in einer Umgebung, wie in 2B dargestellt, durchgeführt, in der das Speichersystem 100 SQs 162, CQs 164 und Datenpufferzeiger 166 enthält. In einer Ausführungsform wird der Prozess 400 in einer Umgebung ausgeführt, in der das Hostsystem 140 Datenpufferzeiger 166s enthält, aber das Speichersystem SQs 162 und CQs 164 aufweist. In einigen Ausführungsformen weist das Hostsystem 140 Datenpuffer 166 auf. In einigen Ausführungsformen sind die Datenpufferzeiger 166 NVMe-PRP-Einträge.
  • In Schritt 402 greift die Speichersteuerung 122 auf einen Befehl von dem Hostsystem zu, um einen Speicherzugriff auf den nichtflüchtigen Speicher in dem Speichersystem 100 zuzugreifen. Der Befehl könnte ein Lesevorgang oder ein Schreibvorgang sein. Der Befehl spezifiziert in einer Ausführungsform eine Start-LBA und eine Länge. Somit kann der Befehl darin bestehen, bei einigen LBAs (abhängig von der Länge) zu lesen oder zu schreiben. In einem Ausführungsbeispiel greift die Speichersteuerung 122 auf den Befehl von SQs 162 im Hostspeicher 160 zu. In einer Ausführungsform greift die Speichersteuerung 122 auf den Befehl von SQs 162 auf dem Speichersystem 100 zu (z. B. Speicher 264, 2B). Der Befehl weist in einer Ausführungsform einen Listenzeiger auf. Der Listenzeiger zeigt auf eine Liste, die Datenpufferzeiger auf Datenpuffer in dem Hostsystem enthält.
  • In Schritt 404 bestimmt die Speichersteuerung 122, welche Datenpufferzeiger für einen DMA von Hostsystem-Datenpuffern erforderlich sind. Es ist möglich, dass einige dieser Datenpufferzeiger aus einem früheren DMA gesichert wurden. In einer Ausführungsform ist es möglich, dass ein Datenpufferzeiger am Anfang und/oder am Ende eines früheren DMA gespeichert wurde.
  • In Schritt 406 bestimmt die Speichersteuerung 122, ob einige der benötigten Datenpufferzeiger derzeit in dem Speichersystem gespeichert sind. So bestimmt beispielsweise die Speichersteuerung 122, ob einer der benötigten Datenpufferzeiger im Befehlskontextspeicher 242 gespeichert wurde. Wenn ja, greift die Speichersteuerung 122 auf den oder die gespeicherten Datenpufferzeiger in Schritt 408 zu. Es ist zu beachten, dass dadurch der Zugriff auf diesen Datenpufferzeiger über z. B. einen PCIe-Bus entfällt. Dies kann zu einem wesentlich effizienteren Betrieb führen.
  • In Schritt 410 greift die Speichersteuerung 122 auf Datenpufferzeiger auf Host-Datenpuffer für den DMA zu. Dieser Schritt kann alle Datenpufferzeiger für den DMA abrufen, falls keiner von einem früheren DMA gespeichert wurde. Dies kann die verbleibenden Datenpufferzeiger abrufen, die für den DMA benötigt werden, falls einer oder mehrere von einem früheren DMA gespeichert wurden.
  • In einer Ausführungsform greift die Speichersteuerung 122 nur auf die Datenpufferzeiger zu, die für den DMA benötigt werden. Wenn der DMA beispielsweise acht Datenpufferzeiger benötigt, kann die Speichersteuerung nur diese acht Datenpufferzeiger abrufen. Die Speichersteuerung 122 kann diesen Abruf auf den Listenzeiger im Befehl basieren. Es sei jedoch darauf hingewiesen, dass der Befehl mit mehreren Listen von Datenpufferzeigern verknüpft sein kann. In einer Ausführungsform verwendet die Speichersteuerung den Listenzeiger im Befehl, um einen anderen Listenzeiger z. B. im Hostspeicher zu finden.
  • In einem Ausführungsbeispiel ruft die Speichersteuerung 122 die Datenpufferzeiger in Schritt 410 aus dem Hostspeicher 160 ab. In einer Ausführungsform ruft die Speichersteuerung 122 die Datenpufferzeiger in Schritt 410 aus dem Speicher 264 (siehe 2B) ab.
  • Der Schritt 412 ist dafür vorgesehen, dass die Speichersteuerung 122 den DMA zwischen dem Speichersystem 100 und den Hostspeicher-Datenpuffern durchführt, die durch die Datenpufferzeiger spezifiziert sind. In einer Ausführungsform erfolgt der DMA von einem Lesepuffer im Speichersystem 100 zu einem Datenpuffer im Hostspeicher. In einer Ausführungsform erfolgt der DMA von einem Datenpuffer im Hostspeicher zu einem Schreibpuffer im Speichersystem 100.
  • Schritt 414 ist eine Bestimmung, ob der DMA vollständig auf alle Datenpuffer zugegriffen hat. Beispielsweise kann der DMA bei einem Lesevorgang einen oder mehrere der Datenpuffer nur teilweise gefüllt haben. Als Beispiel kann ein Datenpuffer 4 KB groß sein. Der DMA hat möglicherweise weniger als 4 KB Daten in einen der Datenpuffer geschrieben. Für einen Schreibvorgang kann der DMA auf Daten von nur einem Teil eines oder mehrerer der Datenpuffer zugegriffen haben. In diesem Fall könnte der DMA weniger als 4 KB für einen der Datenpuffer gelesen haben. Für andere Datenpuffer (auf die vollständig zugegriffen wurde) können 4 KB geschrieben oder gelesen worden sein.
  • Wenn es einen Puffer gibt, auf den nicht vollständig zugegriffen wurde, dann wird der Datenpufferzeiger für diesen Datenpuffer z. B. im Befehlskontextspeicher 242 gespeichert. Der Prozess 400 kehrt dann zu Schritt 404 zurück, um einen weiteren DMA zu verarbeiten.
  • 5 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 500 zum Durchführen eines DMA von einem Speichersystem auf ein Hostsystem für einen Lesebefehl. Dieser Prozess 500 geht davon aus, dass der Befehl mehreren Listen von Datenpufferzeigern zugeordnet ist (z. B. mehreren NVMe-PRP-Listen). Der Prozess 500 wird in Bezug auf den beispielhaften Befehl 320 der 3A oder 3B erörtert, ist aber nicht darauf beschränkt.
  • In Schritt 502 wird eine „Doorbell“ aktiviert. Die Doorbell ist ein Mechanismus, mit dem das Hostsystem das Speichersystem darüber informiert, dass ein neuer Befehl auf einer Übermittlungswarteschlange (SQ) 162 bereit ist. In einer Ausführungsform weist die Speichersteuerung 122 ein Doorbell-Register auf, welches das Hostsystem schreibt, um „die Doorbell zu aktivieren“.
  • In Schritt 504 ruft die Speichersteuerung 122 den neuen Befehl von der SQ 162 als Reaktion auf die Doorbell ab. In einer Ausführungsform greift die Speichersteuerung 122 auf den neuen Befehl aus dem Hostspeicher 160 zu (z. B. Befehlswarteschlange 162, 2A). In einer Ausführungsform greift die Speichersteuerung 122 auf den neuen Befehl aus dem RAM im Speichersystem zu (z. B. SQs 162 im Speicher 264, 2A).
  • In Schritt 506 fügt die Speichersteuerung 122 den Datenzeiger im Feld 322 zum Befehlskontextspeicher für diesen Befehl hinzu. Es ist zu beachten, dass dies in diesem Beispiel ein Zeiger auf einen Datenpuffer ist. Die Speichersteuerung 122 fügt auch den Listenzeiger im Feld 324 zum Befehlskontextspeicher für diesen Befehl hinzu.
  • Es ist zu beachten, dass der Befehlsparser 248 den Befehl analysieren kann, um zu bestimmen, wie die Datenpufferzeiger (z. B. NVMe-PRP-Einträge) basierend auf Feld 324 verarbeitet werden sollen. Wenn beispielsweise das Feld 324 kein Listenzeiger ist, muss die Verarbeitung von Datenpufferzeigern nicht den Prozess 500 verwenden.
  • In Schritt 508 gibt die Speichersteuerung 122 Befehle an das Speicher-Die aus, Lesevorgänge durchzuführen. Es ist zu beachten, dass dabei davon ausgegangen wird, dass der Lesebefehl des Hosts physische Positionen auf mehreren Speicher-Dies umfasst. Es ist nicht erforderlich, dass das Lesen mehrere Speicher-Dies umfasst, in welchem Fall die Speichersteuerung einen Lesebefehl an ein Speicher-Die ausgeben kann.
  • Schritt 510 beinhaltet, dass die Speichersteuerung 122 einen Hinweis empfängt, dass die von einem der Speicher-Dies gelesenen Daten nahezu bereit für einen DMA sind. Es ist jedoch zu beachten, dass dies nicht unbedingt die Rohdaten aus dem Speicher-Die sind. In der Regel wird die Fehlerkorrektur durch die ECC 224 durchgeführt. Darüber hinaus können weitere Schritte wie eine Entschlüsselung oder Verschlüsselung durchgeführt werden. Somit können die Daten, die aus dem Speicher-Die gelesen wurden, durch eine Pipeline in der Speichersteuerung gehen, bevor sie in den Lesepuffer zur Übertragung an das Hostsystem platziert werden.
  • In einer Ausführungsform ist der DMA für eine vorgegebene Anzahl von Host-Datenpuffern ausgelegt. So kann beispielsweise der DMA für acht Host-Datenpuffer ausgelegt sein. Als ein Beispiel ist jeder Host-Datenpuffer 4 Kilobytes groß, also kann dies für ein DMA von 32 Kilobytes gelten.
  • Schritt 512 beinhaltet, dass die Speichersteuerung auf Datenpufferzeiger (z. B. NVMe-PRPs) für diesen Teil des Lesevorgangs zugreift. Diese Datenpufferzeiger können im Datenpufferzeigerspeicher 252 für das Speicher-Die gespeichert werden, aus dem die Daten gelesen wurden.
  • In Schritt 514 wird gewartet, bis die Daten für einen DMA bereit sind. In einer Ausführungsform sind die Daten für einen DMA bereit, wenn sie in einen Lesepuffer im RAM 122b des Speichersystems 100 platziert werden. Wie oben angemerkt, können die Daten durch eine Pipeline in der Speichersteuerung gehen, bevor sie in den Lesepuffer zur Übertragung an das Hostsystem platziert werden.
  • In Schritt 516 verwendet die Speichersteuerung die Datenpufferzeiger, um einen DMA der Daten von der Speichersteuerung auf die Host-Datenpuffer durchzuführen.
  • In einer Ausführungsform nutzt die Speichersteuerung eine kurze Verzögerung zwischen dem Hinweis von Schritt 510 und der Bereitschaft der Daten zur Übertragung in Schritt 514, um die Datenpufferzeiger in Schritt 512 abzurufen. Die Verzögerung kann leicht berechnet oder zumindest geschätzt werden, basierend auf Faktoren wie der Zeitspanne, die üblicherweise vom Erteilen des Lesebefehls an das Speicher-Die bis zum Senden von Daten an die Speichersteuerung vergeht, wie lange es üblicherweise dauert, bis die Speichersteuerung die Daten verarbeitet (z. B. ECC, Ver-/Entschlüsselung usw.), sowie wie lange es üblicherweise dauert, die Datenpufferzeiger aus dem Hostspeicher (oder alternativ dem Speicher 264) abzurufen. Die Speichersteuerung 122 gestaltet das Timing des Abrufs so, dass die Datenpufferzeiger für den DMA bereit sind, sobald die Daten für die Übertragung in die Host-Datenpuffer bereit sind. Somit können die Datenpufferzeiger „just-in-time“ bereitgestellt werden
  • Die Speichersteuerung 122 vermeidet jedoch, Datenpufferzeiger (z. B. NVMe-PRPs) so früh abzurufen, dass Speicherplatz zum Speichern von Datenpufferzeigern verschwendet wird, die für einen DMA noch nicht benötigt werden. Außerdem vermeidet die Speichersteuerung 122, dass Datenpufferzeiger (z. B. NVMe-PRPs) in Ausführungsformen mehr als einmal abgerufen werden. Dies kann daran liegen, dass die Speichersteuerung 122 die Datenpufferzeiger in einer Ausführungsform erst dann abruft, wenn bekannt ist, dass ein DMA bereit ist. Im Gegensatz dazu können einige Techniken, bei denen möglicherweise eine größere Anzahl von Datenpufferzeigern abgerufen wird, unabhängig davon, ob sie benötigt werden oder nicht, dazu führen, dass ein Datenpufferzeiger überschrieben wird und somit dieser Datenpufferzeiger erneut abgerufen werden muss. Dies verschwendet nicht nur Speicherplatz auf dem Speichersystem, sondern auch die Übertragungsbandbreite des Datenbus zwischen Speichersystem und Host. Im Gegensatz dazu nutzen einige der hierin diskutierten Ausführungsformen die Busbandbreite effizient, indem sie jeden Datenpufferzeiger (z. B. jede NVMe-PRP) nur einmal über den Bus übertragen.
  • 6 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 600 zum Durchführen eines DMA von einem Speichersystem auf ein Hostsystem für einen Schreibbefehl. Dieser Prozess 600 geht davon aus, dass der Befehl mehreren Listen von Datenpufferzeigern zugeordnet ist (z. B. mehreren NVMe-PRP-Listen). Der Prozess 600 wird in Bezug auf den beispielhaften Befehl 320 der 3A oder 3B erörtert, ist aber nicht darauf beschränkt.
  • In Schritt 602 wird eine „Doorbell“ aktiviert. In Schritt 604 ruft die Speichersteuerung 122 den neuen Befehl von der SQ 162 als Reaktion auf die Doorbell ab. In Schritt 606 fügt die Speichersteuerung 122 den Datenzeiger im Feld 322 zum Befehlskontextspeicher für diesen Befehl hinzu. Die Schritte 602, 604 und 606 können den Schritten 502, 504 und 506 des Prozesses 500 ähnlich sein.
  • In Schritt 608 bestimmt die Speichersteuerung 122, dass ein Schreibpuffer kurz davor ist, für neue Daten bereit zu sein. Dieser Schreibpuffer ist ein Puffer im Speichersystem 100, der verwendet wird, um Daten zu speichern, die in ein Speicher-Die 108 geschrieben werden sollen, in einer Ausführungsform. Der Schreibpuffer kann verwendet werden, um Daten zu speichern, auf die aus Datenpuffern im Hostspeicher 160 zugegriffen wird.
  • Schritt 610 beinhaltet, dass die Speichersteuerung auf Datenpufferzeiger (z. B. NVMe-PRPs) für einen Teil des Schreibvorgangs zugreift. So kann beispielsweise die Speichersteuerung bestimmen, welche Datenpufferzeiger für einen 32 Kilobyte-Teil der zu schreibenden Daten benötigt werden. Diese Datenpufferzeiger können im Datenpufferzeigerspeicher 252 für das Speicher-Die gespeichert werden, in das die Daten geschrieben werden sollen.
  • Schritt 612 ist eine Bestimmung, ob der Schreibpuffer Platz für die zu übertragenden Daten aus den Host-Datenpuffern hat. Wenn nicht, wartet der Prozess. Wenn genügend Platz vorhanden ist, wird der Prozess bei Schritt 614 fortgesetzt.
  • In Schritt 614 verwendet die Speichersteuerung die Datenpufferzeiger, um einen DMA der Daten von den Host-Datenpuffern auf den Schreibpuffer durchzuführen.
  • In Schritt 616 gibt die Speichersteuerung einen Befehl an das Speicher-Die aus, in das die Daten geschrieben werden sollen, um einen Schreibvorgang durchzuführen. Der Prozess 600 kann dann zu Schritt 608 zurückkehren, was bedeutet, dass die Speichersteuerung erneut bestimmt, dass der Schreibpuffer kurz davor ist, für neue Daten bereit zu sein.
  • In einer Ausführungsform nutzt die Speichersteuerung eine kurze Verzögerung zwischen dem Hinweis von Schritt 608 und der Bereitschaft des Schreibpuffers in Schritt 612, um die Datenpufferzeiger in Schritt 610 abzurufen.
  • 7 ist ein Diagramm einer Ausführungsform eines Befehlskontextspeichers 242, eines Ringpuffers 752, eines Pufferzeigermanagers 250 und des Hostspeichers 160. Die Ringpuffer 752 sind eine Ausführungsform des Datenpufferzeigerspeichers 252.
  • Es kann ein Befehlskontextspeicher 242(1) bis 242(n) für jeden ausstehenden Lese- oder Schreibbefehl in einer Ausführungsform vorhanden sein. Der Befehlskontextspeicher weist Feld 702 auf, das verwendet werden kann, um einen Datenpufferzeiger aus dem Hostbefehl zu speichern. In einer Ausführungsform wird das Feld 702 verwendet, um den Wert aus dem Feld 322 im Befehl 320 des Beispiels von 3 zu speichern. In 7 wird dieser Wert als PRP1 bezeichnet und ist ein Datenpufferzeiger, der als „data_ptr0“ bezeichnet wird. Dies kann der erste in einer Folge von Datenpuffern im Hostspeicher sein.
  • Das Feld 704 kann verwendet werden, um einen Listenzeiger aus dem Befehl 320 zu speichern. In einer Ausführungsform wird das Feld 704 verwendet, um den Wert aus dem Feld 324 im Befehl 320 des Beispiels von 3 zu speichern. In 7 wird dieser Wert als PRP2 bezeichnet und ist ein Listenzeiger, der als „Iist_ptr0“ bezeichnet wird Es ist zu beachten, dass dies auf die erste Liste 304(1) von Datenpufferzeigern im Hostspeicher 160 verweist.
  • PRPTR_A 706 kann verwendet werden, um einen Zeiger auf eine Liste von Datenpufferzeigern (z. B. eine Liste von NVMe-PRPs) zu speichern. PPTR_A_INDEX 708 ist ein Index für den in PRPTR_A 706 gespeicherten Zeiger. Der Index ist eine ganze Zahl von Null aufwärts, die angibt, auf welche Liste 304 gezeigt wird. Ein Wert von Null kann verwendet werden, um anzuzeigen, dass der Wert in PRPTR_A 706 nicht auf eine Liste zeigt. Wie bereits erwähnt, kann der Befehl mit mehreren Listen von Datenpufferzeigern 304 verknüpft sein. Diese Listen 304 können basierend auf ihren Hostspeicheradressen nummeriert werden.
  • PRPTR_B 710 kann verwendet werden, um einen Zeiger auf eine Liste von PRPs zu speichern. PPTR_B_INDEX 712 ist ein Index für den in PRPTR_B 710 gespeicherten Zeiger. Der Index ist eine ganze Zahl von Null aufwärts, die angibt, auf welche Liste 304 gezeigt wird. Ein Wert von Null kann verwendet werden, um anzuzeigen, dass der Wert in PRPTR_B 710 nicht auf eine Liste zeigt.
  • Die verbleibenden Datenzeigerpuffer 714 können einen Wert speichern, der relevant ist, wenn der erste Datenpufferzeiger in Feld 702 einen Versatz aufweist. 10 stellt weitere Einzelheiten für eine Ausführungsform bereit, die Rest-Datenzeigerpuffer 714 verwendet. In einer Ausführungsform speichert der Rest-Datenzeigerpuffer 714 übrig gebliebene NVMe-PRP-Einträge.
  • Der Hostspeicher 160 enthält mehrere Listen 304 von Datenpufferzeigern (z. B. NVMe-PRPs). In diesem Beispiel gibt es die Liste 304(1) und 304 (2). Der Wert „1“ oder „2“ in Verbindung mit der Liste 304 bezieht sich auf einen Index. Es können viel mehr Listen 304 vorhanden sein, jede mit ihrem eigenen Index.
  • Es gibt einen Ringpuffer 752 für jedes Speicher-Die in einer Ausführungsform. Die Ringpuffer 752 speichern jeweils Datenpufferzeiger. In einer Ausführungsform speichern die Ringpuffer 752 NVMe-PRPs. Die Ringpuffer 252(1) - 252(m) sind in einer Ausführungsform jeweils ein kreisförmiger (Ring-) Puffer. In einer Ausführungsform werden die Daten, die aus einem gegebenen Speicher-Die gelesen werden, an den Host-Datenpuffer in der Reihenfolge übertragen. Mit „in der Reihenfolge“ ist die Reihenfolge der Zeiger in dem Ringpuffer eines gegebenen Speicher-Dies gemeint. Jedoch werden die Daten von verschiedenen Speicher-Dies nicht notwendigerweise in der Reihenfolge in Bezug auf andere Speicher-Dies übertragen. So kann beispielsweise das Speichersystem 100 einen DMA auf einen Datenpuffer durchführen, der als data_ptrN angezeigt wird, bevor es einen DMA auf einen Datenpuffer durchführt, der als data_prt2 angezeigt wird (beide in Liste 304(1)), wenn diese beiden Datenzeiger mit Daten verknüpft sind, die von zwei verschiedenen Speicher-Dies gelesen wurden. Somit kann der Pufferzeigermanager 250 eingerichtet sein, DMAs in Bezug auf einen Ringpuffer eines gegebenen Speicher-Dies außerhalb der Reihenfolge in Bezug auf Ringpuffer anderer Speicher-Dies auszuführen.
  • Der Pufferzeigermanager 250 ist so eingerichtet, dass er auf Listenzeiger aus dem Befehlskontextspeicher 242 zugreift und diese verwendet, um auf Datenzeiger und andere Listenzeiger aus dem Hostspeicher 160 zuzugreifen. Der Pufferzeigermanager 250 ist so eingerichtet, dass er die Datenpufferzeiger auf einen geeigneten Ringpuffer 252 überträgt. Zum Beispiel ist der Pufferzeigermanager 250 eingerichtet, um die Datenzeiger auf den Ringpuffer 252 zu übertragen, der einem Speicher-Die zugeordnet ist, das ein Lesen oder Schreiben durchführen soll, das diesen Datenzeigern zugeordnet ist. Der Pufferzeigermanager 250 ist so eingerichtet, dass er neue Listenzeiger auf den Befehlskontextspeicher überträgt.
  • 8 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 800 zum Verwalten von Listenzeigern. Dieser Prozess 800 kann mit einer Ausführungsform des Kontextspeichers von 7 verwendet werden, ist aber nicht darauf beschränkt. Der Prozess 800 beginnt, wenn ein neuer Befehl von dem Hostsystem 140 von der Speichersteuerung verarbeitet wird. In einer Ausführungsform führt die Speichersteuerung 122 den Prozess 800 durch, wenn sie einen Befehl empfängt, dem mehrere Listen von Datenpufferzeigern zugeordnet sind. Zum Beispiel kann die Speichersteuerung 122 den Prozess 800 ausführen, wenn sie einen Befehl empfängt, dem mehrere NVMe-PRP-Listen zugeordnet sind.
  • In Schritt 802 speichert die Speichersteuerung 122 einen Listenzeiger in PPTR_A 706. Außerdem kann die Speichersteuerung Zeiger in den Feldern 702 und 704 speichern. Bezugnehmend auf das Beispiel von 3 kann der Zeiger auf den ersten Puffer aus Feld 322 im Feld 702 gespeichert werden, und der Listenzeiger aus Feld 324 kann im Feld 704 gespeichert werden. Der Listenzeiger aus Feld 324 kann auch in PPTR_A 706 gespeichert werden.
  • Schritt 804 schließt das Setzen des PPTR_A_INDEX ein, um zu identifizieren, welche Liste 304 in PPTR_A 706 gespeichert ist. Bezugnehmend auf das Beispiel von 7 kann PPTR_A_INDEX anfangs auf „1“ gesetzt werden, um anzuzeigen, dass PPTR_A 706 auf Liste 304(1) verweist. Es ist zu beachten, dass zu diesem Zeitpunkt PPTR_B_INDEX auf „0“ gesetzt werden kann, um anzuzeigen, dass PPTR_B 710 keinen gültigen Listenzeiger enthält.
  • Irgendwann kann bei der Verarbeitung des Befehls ein Bedarf für einen Datenpufferzeiger (z. B. einen NVME-PRP-Eintrag) in einer Liste 304 entstehen, für die das Speichersystem keinen Listenzeiger hat. Mit anderen Worten weist das Speichersystem keinen Listenzeiger zu einer bestimmten Liste 304 auf. Dies kann daran liegen, dass keines der Felder 704, 706 oder 710 einen solchen Listenzeiger enthält. Wenn dies der Fall ist (Schritt 806=ja), kann die Speichersteuerung auf einen neuen Listenzeiger zugreifen und ihn als PPTR_B 710 speichern. Die Speichersteuerung 122 kann wie folgt bestimmen, welche Datenpufferzeiger (z. B. NVMe-PRP-Einträge) benötigt werden. Unter Bezugnahme auf das Beispiel von 7 enthält die erste Liste 304(1) eine Reihe von Datenzeigern (data_ptr1 - data_ptrN). Die Speichersteuerung 122 kann bestimmen, dass die benötigten Datenpufferzeiger nicht irgendwo in der Liste 304(1) stehen. Dazu weiß die Speichersteuerung 122, wie viele Datenpufferzeiger auf der Liste 304(1) stehen und wie viele logische Blöcke der Liste zugeordnet sind. In einer Ausführungsform ist jeder Datenpufferzeiger einem logischen Block zugeordnet. Somit kann die Speichersteuerung bestimmen, welcher Bereich von logischen Blöcken der Liste 304(1) entspricht. Dies ist nur ein Beispiel dafür, ob sich die benötigten Datenpufferzeiger in der Liste 304(1) befinden.
  • Zum Zwecke der Diskussion bestimmt die Speichersteuerung 122, dass Datenpufferzeiger, die sich in der Liste 304(2) befinden, für einen DMA benötigt werden. Die Speichersteuerung greift auf list_ptr1 vom Ende der Liste 304(1) zu. Es ist zu beachten, dass list_ptr1 auf Liste 304(2) zeigt. Daher kann list_ptr1 in PPTR_B 710 gespeichert werden. In einer Ausführungsform wird auf den Listenzeiger aus dem Hostspeicher zugegriffen (z. B. von Datenpufferzeigern 166 im Hostspeicher 160, 2A). In einer Ausführungsform wird auf den Listenzeiger aus dem Speicher 264 zugegriffen (z. B. aus den Datenpufferzeigern 166 im Speicher 264, 2B).
  • Außerdem kann in Schritt 810 der Index „2“ in PPTR_B_INDEX 712 gespeichert werden, um zu identifizieren, dass der in PPTR_B 710 gespeicherte Listenzeiger auf Liste 304(2) verweist. Es ist zu beachten, dass PPTR_B 710 auf eine andere Liste verweisen könnte, in diesem Fall wird PPTR_B_INDEX 712 auf den relativen Index für diese Liste 304 gesetzt.
  • Irgendwann kann es sein, dass für einen DMA ein weiterer Listenzeiger benötigt wird. Wenn die Speichersteuerung feststellt, dass einer benötigt wird (Schritt 812=ja), kehrt der Prozess 800 zu Schritt 802 zurück. Diesmal wird der in PPTR_A 706 gespeicherte Listenzeiger mit einem neuen Listenzeiger überschrieben. Beispielsweise könnte die Speichersteuerung list_ptr2 vom Ende der Liste 304(2) in PPTR_A 706 speichern. In diesem Fall kann die Speichersteuerung den Index „3“ in PPTR_A_INDEX 708 speichern, um anzugeben, auf welche PRP-Liste PPTR_A 706 verweist.
  • Der Prozess 800 kann weiterhin PPTR_A 706 und PPTR_B 710 als „Ping-Pong“-Puffer verwenden, in denen der älteste Listenzeiger überschrieben wird, wenn ein neuer Listenzeiger für einen DMA benötigt wird.
  • Es ist zu beachten, dass es nicht erforderlich ist, dass die Listen 304 sequentiell verwendet werden. Vielmehr ist es möglich, dass als nächstes eine Liste 304 benötigt wird, die einen Index überspringt. Es ist auch zu beachten, dass mehr oder weniger als zwei Listenzeiger im Befehlskontext für einen Befehl gespeichert werden können. Beispielsweise kann es für einen dritten Listenzeiger einen PPTR_C und einen PPTR_C_INDEX geben. Außerdem sind in einer Ausführungsform PPTR_B_INDEX 712 und PPTR_B 710 nicht erforderlich.
  • 9 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 900 zum Zugreifen auf Datenpufferzeiger. Der Prozess 900 ist eine Ausführungsform von Schritt 410 des Prozesses 400. In einer Ausführungsform wird der Prozess 900 verwendet, um auf NVMe-PRP-Einträge zuzugreifen. In einer Ausführungsform wird auf die Datenpufferzeiger aus dem Hostspeicher zugegriffen (z. B. von den Datenpufferzeigern 166 in dem Hostspeicher 160, 2A). In einer Ausführungsform wird auf die Datenpufferzeiger aus dem Speicher 264 zugegriffen(z. B. von den Datenpufferzeigern 166 im Speicher 264, 2B).
  • In Schritt 902 berechnet die Speichersteuerung, welche Datenpufferzeiger (z. B. NVMe-PRP-Einträge) für einen DMA benötigt werden. In einer Ausführungsform führt die Speichersteuerung diese Berechnung basierend auf logischen Adressen des Hosts durch. Die Speichersteuerung kann zwischen logischen Adressen, die das Hostsystem verwendet, und physischen Adressen im nichtflüchtigen Speicher konvertieren. Wenn beispielsweise die Speichersteuerung im Begriff ist, eine Dateneinheit zu übertragen, die von bestimmten physischen Adressen gelesen wurde, kann die Speichersteuerung diese physischen Adressen in logische Adressen umwandeln. Es sei daran erinnert, dass eine logische Startadresse im Lesebefehl des Hostsystems angegeben werden kann. Es sei auch daran erinnert, dass Datenpufferzeiger eine bestimmte Größe haben können (z. B. 64 Bit) und dass jeder Datenpuffer eine bestimmte Größe aufweisen kann (z. B. 4 KB). Mit diesen Informationen kann die Speichersteuerung bestimmen, wie weit in den Listen der Datenpufferzeiger die benötigten Datenpufferzeiger (für die LBA) vorhanden sind.
  • In Schritt 904 bestimmt die Speichersteuerung, ob ein Listenzeiger, der den benötigten Datenpufferzeigern zugeordnet ist, im Speichersystem 100 gespeichert ist. In einer Ausführungsform bestimmt der Pufferzeigermanager 250, ob das Feld 706 oder 710 den benötigten Listenzeiger enthält. In einer Ausführungsform berechnet der Pufferzeigermanager 250, was der Index für die benötigte Liste 304 ist. Mit anderen Worten berechnet der Pufferzeigermanager 250, ob die benötigten Datenpufferzeiger in der ersten Liste 304(1), zweiten Liste 304(2), dritten Liste, vierten Liste, usw. enthalten sind. Der Pufferzeigermanager 250 kann die Felder 708 und 712 einfach untersuchen, um festzustellen, ob entweder das Feld 708 oder 712 den Index der benötigten Liste enthält.
  • Wenn der benötigte Listenzeiger bereits im Speichersystem 100 gespeichert ist, kann die Speichersteuerung mit diesem Listenzeiger die benötigten Datenpufferzeiger aus der entsprechenden Liste im Hostspeicher abrufen. So kann beispielsweise die Speichersteuerung entweder PPTR_A aus dem Feld 706 oder PPTR_B aus dem Feld 710 verwenden, um den Startpunkt der Liste 304 zu bestimmen. Anschließend bestimmt die Speichersteuerung, wie weit in dieser Liste die benötigten Datenpufferzeiger vorhanden sind.
  • Die Speichersteuerung greift in einer Ausführungsform nur auf die benötigten Datenpufferzeiger aus der Liste zu. So kann es beispielsweise sein, dass aus einer Liste von 512 Datenpufferzeigern nur acht Datenpufferzeiger benötigt werden. In einer Ausführungsform greift die Speichersteuerung auf die benötigten Datenpufferzeiger zu, indem sie ein einzelnes TLP-Paket (Transaction Layer Packet) über einen PCIe-Bus erhält. Dadurch können die benötigten Datenpufferzeiger sehr effizient in Bezug auf die PCIe-Busnutzung beschafft werden. Es ist zu beachten, dass die Anzahl der erhaltenen Datenpufferzeiger für eine effiziente Übertragung über den PCIe-Bus optimiert werden kann. In einigen Fällen können mehr oder weniger als acht Datenpufferzeiger zu einer effizienteren Nutzung des PCIe-Busses führen.
  • Die abgerufenen Datenpufferzeiger können in einer Ausführungsform in dem entsprechenden Ringspeicher 752 gespeichert werden. So können beispielsweise die Datenpufferzeiger einem Lesevorgang eines bestimmten Speicher-Dies zugeordnet werden. Somit können die Datenpufferzeiger in einen Ringpuffer für dieses Speicher-Die platziert werden.
  • Wenn der benötigte Listenzeiger nicht bereits im Speichersystem 100 (Schritt 904=nein) gespeichert ist, ruft die Speichersteuerung den gewünschten Listenzeiger aus der entsprechenden Liste im Hostspeicher in Schritt 908 ab. So kann beispielsweise die Speichersteuerung entweder PPTR_A aus dem Feld 706 oder PPTR_B aus dem Feld 710 verwenden, um den Startpunkt einer der Listen 304 zu bestimmen. [Es ist zu beachten, dass in diesem Beispiel weder PPTR_A noch PPTR_B der benötigte Listenzeiger ist.] Dann kann die Speichersteuerung bestimmen, wie weit vom Anfang dieser Liste entfernt der benötigte Listenzeiger existiert. Unter Bezugnahme auf 7 als ein Beispiel nehmen wir mal an, dass der benötigte Listenzeiger list_ptr2 am Ende der Liste 304(2) ist. In diesem Fall kann die Speichersteuerung den Standort von list_ptr2 basierend auf dem Anfang der Liste 304(2) und der Länge der Liste 304(2) bestimmen. Es ist zu beachten, dass die Speichersteuerung den Listenzeiger in Feld 706 oder Feld 710 mit dem neuen Listenzeiger überschreiben kann.
  • In Schritt 910 ruft die Speichersteuerung die benötigten Datenpufferzeiger aus der entsprechenden Liste im Hostspeicher ab. Dieser Schritt kann ähnlich wie Schritt 906 sein, da der benötigte Listenzeiger nun verfügbar ist.
  • 10 ist ein Flussdiagramm einer Ausführungsform eines Prozesses 1000 zum Verwalten von Datenpufferzeigern, wenn der erste Datenpufferzeiger einen Nicht-Null-Versatz aufweist. 10 stellt weitere Details einer Ausführungsform des Prozesses 400 bereit. In 10 ist das Beispiel das eines Lesebefehls. Der Prozess kann jedoch für einen Schreibbefehl geändert werden. Der Befehlskontext 242 von 7 kann in Prozess 1000 verwendet werden, jedoch ist Prozess 1000 nicht auf dieses Beispiel beschränkt. In einer Ausführungsform wird der Prozess 1000 von der Speichersteuerung in 2A ausgeführt. In einer Ausführungsform wird der Prozess 1000 von der Speichersteuerung in 2B ausgeführt. Der Prozess 1000 ist jedoch nicht auf 2A oder 2B beschränkt.
  • In Schritt 1002 bestimmt die Speichersteuerung die Datenpufferzeiger (z. B. NVMe-PRP-Einträge), die für einen DMA benötigt werden. Dies kann z. B. ein 64 KB-DMA sein. Allerdings könnte der DMA für eine andere Größe sein. Dies kann ein Schreiben oder ein Lesen sein.
  • In Schritt 1004 bestimmt die Speichersteuerung, ob PRP1 einen Nicht-Null-Versatz aufweist. So kann beispielsweise der Pufferzeigermanager 250 bestimmen, ob „data_ptr0“ im Feld 702 des Befehlskontextspeichers 242 einen Nicht-Null-Versatz aufweist. Der Versatz kann sich in diesem Feld 702 in einem bestimmten Bitbereich befinden.
  • Wenn es keinen Nicht-Null-Versatz gibt (Schritt 1004=nein), kann die Verarbeitung wie in den Schritten 904-910 im Prozess 900 fortgesetzt werden. Wenn es einen Nicht-Null-Versatz gibt (Schritt 1004=ja), kann die Verarbeitung bei Schritt 1006 fortgesetzt werden. Es ist zu beachten, dass ein Beispiel für einen Nicht-Null-Versatz in 3B dargestellt ist. In Schritt 1006 bestimmt die Speichersteuerung, ob erforderliche Datenpufferzeiger (z. B. NVMe-PRP-Einträge) im Rest-Datenpufferzeigerspeicher 714 gespeichert werden. Dies können beispielsweise die ersten und/oder letzten Datenpufferzeiger für die Datenübertragung sein, wie in den obigen Beispielen erwähnt.
  • Wenn sich einer der erforderlichen Datenpufferzeiger im Rest-Datenpufferzeigerspeicher 714 befindet, wird auf diese Datenpufferzeiger aus dem Rest-Datenpufferzeigerspeicher 714 in Schritt 1008 zugegriffen. Diese Datenpufferzeiger können in einer Ausführungsform in den entsprechenden Ringspeicher übertragen werden. Außerdem können die Datenpufferzeiger, auf die aus dem Rest-Datenpufferzeigerspeicher 714 zugegriffen wurde, aus dem Rest-Datenpufferzeigerspeicher 714 verworfen werden. Dies spart Speicherplatz, da diese Datenpufferzeiger in einer Ausführungsform nicht mehr benötigt werden. Hierin bedeutet „Verwerfen“ eines Datenpufferzeigers, dass der Speicherplatz, in dem er gespeichert ist/war, freigegeben werden kann, so dass der Platz für einen anderen Datenpufferzeiger verwendet werden kann. Dies kann dadurch erreicht werden, dass der Speicherplatz als für einen anderen Datenpufferzeiger verfügbar markiert wird. Dies erfordert keine physische Änderung des Speicherplatzes. So kann beispielsweise der verworfene Datenpufferzeiger zu einem späteren Zeitpunkt überschrieben werden. Die Speichersteuerung kann feststellen, welche Speicherplätze derzeit einen gültigen (nicht verworfenen) Datenpufferzeiger aufweisen und welche Speicherplätze im Rest-Datenpufferzeigerspeicher 714 frei sind. Dann kann die Verarbeitung wie in den Schritten 904-910 im Prozess 900 fortgesetzt werden, um die anderen Datenpufferzeiger für diese Datenübertragung zu erhalten.
  • Wenn sich keiner der erforderlichen Datenpufferzeiger im Rest-Datenpufferzeigerspeicher 714 befindet, kann die Verarbeitung wie in den Schritten 904-910 im Prozess 900 fortgesetzt werden, um alle Pufferzeiger für diesen Datentransfer zu erhalten.
  • In Schritt 1010 bestimmt die Speichersteuerung, ob es Host-Datenpuffer gibt, die nach dem Datentransfer nicht vollständig gefüllt werden. So kann es beispielsweise sein, dass der erste und/oder letzte Host-Datenpuffer nach der Datenübertragung nicht vollständig gefüllt wird. Wenn dies der Fall ist, dann werden in Schritt 1012 die Datenpufferzeiger, die diesen nicht vollständig gefüllten Datenpuffern zugeordnet sind, im Rest-Datenpufferzeigerspeicher 714 gespeichert. Mit vollständig gefüllt ist gemeint, dass der gesamte, z. B. 4 KB große Datenpuffer mit Daten gefüllt wird. Der Datenpuffer kann eine andere Größe aufweisen.
  • Wenn alle Host-Datenpuffer vollständig gefüllt werden sollen, kann der Prozess enden, ohne dass Datenpufferzeiger im Rest-Datenpufferzeigerspeicher 714 gespeichert werden. Außerdem werden im Falle der Ausführung von Schritt 1012 die Datenpufferzeiger, die den vollständig gefüllten Datenpuffern entsprechen, nicht im Rest-Datenpufferzeigerspeicher 714 gespeichert.
  • Nachdem der DMA durchgeführt wurde, können sich alle am DMA beteiligten Datenpufferzeiger in einem Ringspeicher 752 befinden. In einer Ausführungsform bestimmt der Pufferzeigermanager 250, dass die am DMA beteiligten Datenpufferzeiger im Ringspeicher 752 nun überschrieben werden können. Somit können nach dem DMA die Datenpufferzeiger im Ringspeicher 752 verloren gehen, unabhängig davon, ob Schritt 1012 ausgeführt wurde.
  • Eine hierin offenbarte Ausführungsform beinhaltet ein nichtflüchtiges Speichersystem, aufweisend eine Vielzahl von nichtflüchtigen Speicherzellen, einen Befehlskontextspeicher und eine Steuerschaltung in Verbindung mit dem Befehlskontextspeicher und der Vielzahl von nichtflüchtigen Speicherzellen. Die Steuerschaltung ist eingerichtet, um auf einen Befehl eines Hostsystems für den Zugriff auf nichtflüchtige Speicherzellen im nichtflüchtigen Speichersystem zuzugreifen. Der Befehl weist einen Listenzeiger auf eine Liste auf, die Datenpufferzeiger auf Datenpuffer in dem Hostsystem aufweist. Die Steuerschaltung ist eingerichtet, um einen Datenpufferzeiger auf einen Datenpuffer des Hostsystems basierend auf dem Listenzeiger abzurufen. Die Steuerschaltung ist eingerichtet, um einen ersten DMA zwischen dem nichtflüchtigen Speichersystem und dem Datenpuffer im Hostsystem durchzuführen, auf den der abgerufene Datenpufferzeiger zeigt. Die Steuerschaltung ist eingerichtet, um den Datenpufferzeiger in den Befehlskontextspeicher zu speichern, als Reaktion darauf, dass der erste DMA nicht auf den gesamten Datenpuffer zugreift. Die Steuerschaltung ist eingerichtet, um auf den gespeicherten Datenpufferzeiger zuzugreifen. Die Steuerschaltung ist eingerichtet, um den gespeicherten Datenzeiger zu verwenden, um einen zweiten DMA auszuführen, um auf einen Teil des Host-Datenpuffers zuzugreifen, auf den der Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat.
  • Ein hierin offenbartes Ausführungsbeispiel beinhaltet ein Verfahren zum Betreiben eines nichtflüchtigen Speichersystems. Das Verfahren weist den Zugriff auf einen Befehl von einem Hostsystem zum Lesen von Daten auf, die in dem nichtflüchtigen Speichersystem gespeichert sind. Der Befehl weist ein erstes Feld mit einem Datenpufferzeiger auf einen Datenpuffer und einen Nicht-Null-Versatz in den Datenpuffer und ein zweites Feld mit einem Listenzeiger auf eine Liste von Datenpufferzeigern auf Datenpuffer im Hostsystem auf. Das Verfahren weist das Abrufen von Datenpufferzeigern auf Datenpuffer des Hostsystems auf, die für direkte Speicherzugriffe (DMAs) in Bezug auf einen Lese- oder Schreibvorgang von nichtflüchtigen Speicherzellen in dem nichtflüchtigen Speichersystem verwendet werden. Die Datenpufferzeiger werden vom Hostsystem abgerufen. Das Verfahren umfasst, als Reaktion darauf, dass ein erster DMA von den DMAs nicht auf einen gesamten Host-Datenpuffer zugreift, auf den der erste Datenpufferzeiger zeigt, das Speichern eines ersten der Datenpufferzeiger, die für die DMAs verwendet wurden, in dem nichtflüchtigen Speichersystem. Das Verfahren umfasst das Zugreifen auf den ersten Datenpufferzeiger, der im nichtflüchtigen Speichersystem gespeichert ist, als Reaktion auf eine Bestimmung, dass ein zweiter DMA für einen anderen Lese- oder Schreibvorgang auf einen Teil des Host-Datenpuffers zugreifen soll, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat. Das Verfahren weist das Verwenden des ersten gespeicherten Datenpufferzeigers für den zweiten DMA auf, um auf den Teil des Host-Datenpuffers zuzugreifen, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat.
  • Eine hierin offenbarte Ausführungsform beinhaltet ein nichtflüchtiges Speichersystem, das eine Vielzahl von nichtflüchtigen Speicher-Dies von nichtflüchtigen Speicherzellen aufweist. Das nichtflüchtige Speichersystem weist Mittel zum Zugreifen auf einen Befehl von einem Hostsystem auf, um auf die nichtflüchtigen Speicherzellen zuzugreifen. Das nichtflüchtige Speichersystem weist Mittel zum Analysieren des Befehls auf, um zu bestimmen, ob der Befehl ein erstes Feld mit einem Zeiger auf einen Datenpuffer und einen Nicht-Null-Versatz in den Datenpuffer und ein zweites Feld mit einem Listenzeiger auf eine Liste von Datenpufferzeigern zu Datenpuffern in einem Hostsystem aufweist. Das nicht flüchtige Speichersystem weist Mittel zum Initiieren einer Speicherarrayoperation von nichtflüchtigen Speicherzellen in einem Speicher-Die in dem nichtflüchtigen Speicher als Reaktion auf den Befehl auf. Das nichtflüchtige Speichersystem weist Mittel zum Abrufen von Datenpufferzeigern auf Datenpuffer des Hostsystems auf, die für direkte Speicherzugriffe (DMAs) in Bezug auf die Speicherarrayoperation zu verwenden sind. Das nichtflüchtige Speichersystem weist Mittel zum Verwenden der abgerufenen Datenpufferzeiger auf, um die DMAs des Speichers in dem Hostsystem auszuführen. Das nichtflüchtige Speichersystem weist Mittel zum Speichern eines ersten der Datenpufferzeiger in dem nichtflüchtigen Speichersystem auf, die für die DMAs verwendet wurden, als Reaktion darauf, dass ein erster DMA der DMAs nicht auf einen gesamten Host-Datenpuffer zugreift, auf den der erste Datenpufferzeiger zeigt. Das nichtflüchtige Speichersystem weist Mittel zum Zugreifen auf den ersten Datenpufferzeiger auf, der in dem nichtflüchtigen Speichersystem gespeichert ist, als Reaktion auf eine Bestimmung, dass ein zweiter DMA für eine andere Speicherarrayoperation auf einen Teil des Host-Datenpuffers zugreifen soll, auf den der erste Datenpufferzeiger zeigt. Das nichtflüchtige Speichersystem weist Mittel zum Verwenden des ersten gespeicherten Datenpufferzeigers für den zweiten DMA auf, um auf den Teil des Host-Datenpuffers zuzugreifen, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat.
  • In einer Ausführungsform beinhalten Mittel zum Zugreifen auf einen Befehl von einem Hostsystem zum Zugreifen auf die nichtflüchtigen Speicherzellen eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem Frontend-Modul 208, einem Befehlsabrufer 246 und/oder andere Hardware und/oder Software.
  • In einer Ausführungsform beinhalten die Mittel zum Analysieren des Befehls, um zu bestimmen, ob der Befehl ein erstes Feld mit einem Zeiger auf einen Datenpuffer und einen Nicht-Null-Versatz in den Datenpuffer und ein zweites Feld mit einem Listenzeiger auf eine Liste von Datenpufferzeigern zu Datenpuffern in einem Hostsystem aufweist, eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem Befehlsparser 248, einem Befehlsabrufer 246 und/oder andere Hardware und/oder Software.
  • In einer Ausführungsform beinhalten Mittel zum Initiieren einer Speicherarrayoperation von nichtflüchtigen Speicherzellen in einem Speicher-Die in dem nichtflüchtigen Speichersystem, als Reaktion auf den Befehl, eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem Backend-Modul 210, einem Befehlsplaner 226, einem Befehlsausführer 228 und/oder andere Hardware und/oder Software.
  • In einer Ausführungsform weisen Mittel zum Abrufen von Datenpufferzeigern auf Datenpuffer des Hostsystems, die für direkte Speicherzugriffe (DMAs) in Bezug auf die Speicherarrayoperation verwendet werden sollen, eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem Frontend-Modul 208, einem Pufferzeigermanager 250 und/oder andere Hardware und/oder Software auf.
  • In einer Ausführungsform weisen Mittel zum Verwenden der abgerufenen Datenpufferzeiger zum Durchführen der DMAs des Speichers in dem Hostsystem eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem DMA 253, einem Pufferzeigermanager 250 und/oder andere Hardware und/oder Software auf.
  • In einer Ausführungsform beinhalten Mittel zum Speichern eines ersten der Datenpufferzeiger, die für die DMAs verwendet wurden, als Reaktion auf einen ersten DMA der DMAs, der nicht auf einen gesamten Host-Datenpuffer zugreift, auf den der erste Datenpufferzeiger zeigt, in dem nichtflüchtigen Speichersystem eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem DMA 253, einem Pufferzeigermanager 250 und/oder andere Hardware und/oder Software.
  • In einer Ausführungsform beinhalten die Mittel zum Zugreifen auf den ersten Datenpufferzeiger, der in dem nichtflüchtigen Speichersystem gespeichert ist, als Reaktion auf eine Bestimmung, dass ein zweiter DMA für eine andere Speicherarrayoperation auf einen Teil des Host-Datenpuffers zugreifen soll, auf den der erste Datenpufferzeiger zeigt, eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem DMA 253, einem Pufferzeigermanager 250 und/oder andere Hardware und/oder Software.
  • In einem Ausführungsbeispiel weisen Mittel zum Verwenden des gespeicherten ersten Datenpufferzeigers für den zweiten DMA, um auf den Teil des Host-Datenpuffers zuzugreifen, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat, eine/einen oder mehrere von einer Steuerung 122, einem Prozessor 122c, einem DMA 253, einem Pufferzeigermanager 250 und/oder andere Hardware und/oder Software auf.
  • Entsprechende Verfahren, Systeme und von einem Computer oder von einem Prozessor lesbare Speichermedien, die ausführbaren Programmcode zur Durchführung der hierin bereitgestellten Verfahren aufweisen, können ebenfalls bereitgestellt werden.
  • Die vorhergehende detaillierte Beschreibung der Erfindung wurde zu Zwecken der Veranschaulichung und Beschreibung präsentiert. Sie soll nicht erschöpfend sein oder die Erfindung auf die genaue offenbarte Form beschränken. Viele Modifikationen und Variationen sind unter Berücksichtigung der vorstehend genannten Lehre möglich. Die beschriebenen Ausführungsformen wurden gewählt, um die Prinzipien der Erfindung und ihre praktische Anwendung am besten zu erklären, um dadurch anderen Fachleuten zu ermöglichen, die Erfindung in verschiedenen Ausführungsformen und mit verschiedenen Modifikationen, wie sie für die jeweilige beabsichtigte Verwendung geeignet sind, am besten zu nutzen. Es ist beabsichtigt, dass der Schutzumfang der Erfindung durch die hieran angehängten Ansprüche definiert wird.

Claims (16)

  1. Wir beanspruchen:
  2. Nichtflüchtiges Speichersystem (100), aufweisend: eine Vielzahl von nichtflüchtigen Speicherzellen (126); einen Befehlskontextspeicher (242); und eine Steuerschaltung (122) in Kommunikation mit dem Befehlskontextspeicher und der Vielzahl von nichtflüchtigen Speicherzellen, die eingerichtet ist zum: Zugreifen auf einen Befehl (320) von einem Hostsystem (140), um auf nichtflüchtige Speicherzellen in dem nichtflüchtigen Speichersystem zuzugreifen, wobei der Befehl einen Listenzeiger auf eine Liste aufweist, die Datenpufferzeiger zu Datenpuffern (168) in dem Hostsystem aufweist; Abrufen eines Datenpufferzeigers auf einen Datenpuffer des Hostsystems, basierend auf dem Listenzeiger; Durchführen eines ersten direkten Speicherzugriffs (DMA) zwischen dem nichtflüchtigen Speichersystem und dem Datenpuffer in dem Hostsystem, auf den durch den abgerufenen Datenpufferzeiger hingewiesen wird; als Reaktion darauf, dass der erste DMA nicht auf den gesamten Datenpuffer zugreift, Speichern des abgerufenen Datenpufferzeigers in dem Befehlskontextspeicher; Zugreifen auf den gespeicherten Datenpufferzeiger aus dem Befehlskontextspeicher; und Verwenden des gespeicherten Datenpufferzeigers, um einen zweiten DMA durchzuführen, um auf einen Teil des Host-Datenpuffers zuzugreifen, auf den der Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat.
  3. Nichtflüchtiges Speichersystem gemäß Anspruch 1, wobei der Listenzeiger ein erster Listenzeiger auf eine erste Liste ist, die Datenpufferzeiger auf Datenpuffer in dem Hostsystem aufweist, wobei die Steuerschaltung weiterhin eingerichtet ist zum: Speichern des ersten Listenzeigers in dem Befehlskontextspeicher; Speichern eines zweiten Listenzeigers auf eine zweite Liste von Datenpufferzeigern in dem Hostsystem in dem Befehlskontextspeicher; als Reaktion auf eine Bestimmung, dass der Datenpufferzeiger sich entweder in der ersten Liste oder der zweiten Liste befindet, Verwenden entweder des ersten Listenzeigers oder des zweiten Listenzeigers, um den Datenpufferzeiger abzurufen; als Reaktion auf eine Bestimmung, dass der Datenpufferzeiger sich weder in der ersten Liste noch in der zweiten Liste befindet, Abrufen eines dritten Listenzeigers von dem Hostsystemspeicher und Verwenden des dritten Listenzeigers, um auf den Datenpufferzeiger zuzugreifen.
  4. Nichtflüchtiges Speichersystem gemäß Anspruch 2, wobei die Steuerschaltung weiterhin eingerichtet ist zum: Speichern des dritten Listenzeigers in dem Befehlskontextspeicher, wobei der dritte Listenzeiger entweder den ersten Listenzeiger oder den zweiten Listenzeiger überschreibt; und Speichern eines Index des dritten Listenzeigers in dem Befehlskontextspeicher.
  5. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 3, weiterhin aufweisend: einen separaten Datenpufferzeigerspeicher für jedes einer Vielzahl von Speicher-Dies in dem nichtflüchtigen Speichersystem, wobei die Steuerschaltung weiterhin eingerichtet ist, Datenpufferzeiger auf Hostsystem-Datenpuffer in den jeweiligen Datenpufferzeigerspeichern für die Vielzahl von Speicher-Dies zu speichern.
  6. Nichtflüchtiges Speichersystem gemäß Anspruch 4, wobei die Steuerschaltung weiterhin eingerichtet ist, DMAs bezüglich eines Datenpufferzeigerspeichers eines gegebenen Speicher-Dies außer der Reihe in Bezug auf einen Datenpufferzeigerspeicher anderer Speicher-Dies durchzuführen.
  7. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 5, wobei der Datenpufferzeiger ein PRP-Zeiger (Physical Region Page) in einer NVMe-Schnittstelle (Non-Volatile Memory Express) ist.
  8. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 6, wobei die Steuerschaltung eingerichtet ist, um den Datenpufferzeiger zusammen mit anderen Datenpufferzeigern auf Datenpuffer des Hostsystems über einen PCIe-Bus (Peripheral Computer Interface Express) abzurufen, wobei der Befehl mehreren Listen von Datenpufferzeigern im Speicher des Hostsystems zugeordnet ist, wobei die Steuerschaltung eingerichtet ist, nur Datenpufferzeiger abzurufen, die in ein einziges TLP-Paket (Transaction Layer Packet) über den PCIe-Bus passen.
  9. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 7, wobei: der Befehl ein Lesebefehl ist; und die Steuerschaltung weiterhin eingerichtet ist, um den Datenpufferzeiger abzurufen, nachdem die Steuerschaltung einen Lesevorgang an einen Speicher-Die in dem nichtflüchtigen Speichersystem ausgibt, um den Lesebefehl zu erfüllen, aber vor dem Lesen von Daten aus dem Speicher-Die als Reaktion darauf, dass der Lesevorgang zur Übertragung an das Hostsystem bereit ist.
  10. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 8, wobei die Steuerschaltung weiterhin eingerichtet ist, um den Datenpufferzeiger als Reaktion auf eine Bestimmung zu verwerfen, dass der erste DMA und der zweite DMA kombiniert auf den gesamten Host-Datenpuffer zugegriffen haben, auf den durch den Datenpufferzeiger verwiesen wird.
  11. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 9, wobei die Steuerschaltung weiterhin eingerichtet ist, um den Datenpufferzeiger aus dem Hostsystemspeicher abzurufen.
  12. Nichtflüchtiges Speichersystem gemäß einem der Ansprüche 1 bis 9, weiterhin aufweisend: eine Speichersteuerung; und eine Speichereinheit, die mit der Speichersteuerung gekoppelt ist, wobei die Steuerschaltung weiterhin eingerichtet ist, um den Datenpufferzeiger aus der Speichereinheit, die mit der Speichersteuerung gekoppelt ist, abzurufen.
  13. Verfahren zum Betreiben eines nichtflüchtigen Speichersystems, das Verfahren aufweisend: Zugreifen auf einen Befehl (320) von einem Hostsystem (140), um auf nichtflüchtige Speicherzellen (126) in dem nichtflüchtigen Speichersystem (100) zuzugreifen, wobei der Befehl ein erstes Feld (322) mit einem Zeiger auf einen Datenpuffer (168) und einem Nicht-Null-Versatz in den Datenpuffer und ein zweites Feld (324) mit einem Listenzeiger auf eine Liste von Datenpufferzeigern auf Datenpuffer (168) in dem Hostsystem aufweist; Abrufen von Datenpufferzeigern zu Datenpuffern des Hostsystems, die für direkte Speicherzugriffe (DMAs) in Bezug auf einen Lese- oder Schreibvorgang von nichtflüchtigen Speicherzellen im nichtflüchtigen Speichersystem verwendet werden sollen, wobei die Datenpufferzeiger vom Hostsystem zum Speicher (252) im nichtflüchtigen Speichersystem abgerufen werden; Verwenden der abgerufenen Datenpufferzeiger, um die DMAs durchzuführen; als Reaktion darauf, dass ein erster DMA von den DMAs nicht auf einen gesamten Host-Datenpuffer zugreift, auf den der erste Datenpufferzeiger zeigt, Speichern eines ersten der Datenpufferzeiger, die für die DMAs verwendet wurden, in dem nichtflüchtigen Speichersystem; als Reaktion auf eine Bestimmung, dass ein zweiter DMA für einen anderen Lese- oder Schreibvorgang auf einen Teil des Host-Datenpuffers zugreifen soll, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat, Zugreifen auf den ersten Datenpufferzeiger, der im nichtflüchtigen Speichersystem gespeichert ist; und Verwenden des ersten gespeicherten Datenpufferzeigers für den zweiten DMA, um auf den Teil des Host-Datenpuffers zuzugreifen, auf den der erste Datenpufferzeiger zeigt, auf den der erste DMA nicht zugegriffen hat.
  14. Verfahren gemäß Anspruch 12, weiterhin aufweisend: als Reaktion auf eine Bestimmung, dass auf den Host-Datenpuffer, auf den der erste Datenpufferzeiger verwiesen hat, vollständig durch den ersten DMA und den zweiten DMA zugegriffen wurde, Verwerfen des ersten Datenpufferzeigers.
  15. Verfahren gemäß Anspruch 12 oder 13, weiterhin aufweisend: als Reaktion darauf, dass ein zweiter DMA der DMAs auf einen gesamten Host-Datenpuffer zugegriffen hat, auf den ein zweiter der Datenpufferzeiger zeigt, der für die DMAs verwendet wurde, Bestimmen, dass der zweite Datenpufferzeiger nicht gespeichert werden sollte.
  16. Verfahren gemäß einem der Ansprüche 12 bis 14, wobei der Listenzeiger ein erster Listenzeiger auf eine erste Liste von NVMe-PRP-Einträgen (Non-Volatile Memory Express), (Physical Region Page) in dem Hostsystem ist, und weiterhin aufweisend: Speichern des ersten Listenzeigers in einem Speicher in dem nichtflüchtigen Speichersystem; Speichern eines zweiten Listenzeigers in einem Speicher in dem nichtflüchtigen Speichersystem, wobei der zweite Listenzeiger auf eine zweite Liste von NVMe-PRP-Einträgen in dem Hostsystem verweist; als Reaktion auf eine Bestimmung, dass die Datenpufferzeiger, die für die DMAs verwendet werden sollen, sich entweder in der ersten Liste von NVMe-PRP-Einträgen oder der zweiten Liste von NVMe-PRP-Einträgen befinden, Verwenden entweder des ersten Listenzeigers oder des zweiten Listenzeigers, um die für die DMAs zu verwendenden Datenpufferzeiger abzurufen; und als Reaktion auf eine Bestimmung, dass die Datenpufferzeiger, die für den DMA verwendet werden sollen, sich weder in der ersten Liste von NVMe-PRP-Einträgen noch in der zweiten Liste von NVMe-PRP-Einträgen befinden, Abrufen eines dritten Listenzeigers von dem Hostsystemspeicher und Verwenden des dritten Listenzeigers, um auf die für die DMAs zu verwendenden Datenpufferzeiger zuzugreifen.
DE112017005890.2T 2017-03-07 2017-11-21 Abrufen von Datenpufferzeigern für direkten Speicherzugriff Pending DE112017005890T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/452,039 2017-03-07
US15/452,039 US10275378B2 (en) 2017-03-07 2017-03-07 Data buffer pointer fetching for direct memory access
PCT/US2017/062896 WO2018164741A1 (en) 2017-03-07 2017-11-21 Data buffer pointer fetching for direct memory access

Publications (1)

Publication Number Publication Date
DE112017005890T5 true DE112017005890T5 (de) 2019-08-01

Family

ID=60655113

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112017005890.2T Pending DE112017005890T5 (de) 2017-03-07 2017-11-21 Abrufen von Datenpufferzeigern für direkten Speicherzugriff

Country Status (4)

Country Link
US (1) US10275378B2 (de)
CN (1) CN108572933B (de)
DE (1) DE112017005890T5 (de)
WO (1) WO2018164741A1 (de)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10254967B2 (en) * 2016-01-13 2019-04-09 Sandisk Technologies Llc Data path control for non-volatile memory
US10528286B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US10528267B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Command queue for storage operations
US10528255B2 (en) 2016-11-11 2020-01-07 Sandisk Technologies Llc Interface for non-volatile memory
US20180341494A1 (en) * 2017-05-26 2018-11-29 Intel Corporation Accelerating network security monitoring
TWI662409B (zh) * 2018-01-23 2019-06-11 祥碩科技股份有限公司 實體區域頁面位址轉換器與實體區域頁面清單存取方法
KR20190135746A (ko) * 2018-05-29 2019-12-09 삼성전자주식회사 쓰기 버퍼 메모리를 포함하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
US10943032B2 (en) * 2018-07-31 2021-03-09 EMC IP Holding Company LLC Data encryption and decryption techniques
CN110109845B (zh) * 2019-04-26 2021-03-05 深圳忆联信息系统有限公司 缓存数据管理方法、装置、计算机设备及存储介质
KR20210080761A (ko) * 2019-12-23 2021-07-01 삼성전자주식회사 컴플리션 타이밍을 관리하는 스토리지 컨트롤러, 및 이의 동작 방법
EP3842952B1 (de) 2019-12-23 2023-05-10 Samsung Electronics Co., Ltd. Speichersteuergerät zur verwaltung der komplettierungszeit und betriebsverfahren dafür
US11507309B2 (en) * 2020-05-04 2022-11-22 Western Digital Technologies, Inc. Storage system and method for using memory allocated in a host for read data as a host memory buffer
US11372785B2 (en) * 2020-05-06 2022-06-28 Microsoft Technology Licensing, Llc Local non-volatile memory express virtualization device
US11934693B2 (en) 2021-01-20 2024-03-19 Western Digital Technologies, Inc. Detection of scattered data locations
US11809745B2 (en) 2021-05-13 2023-11-07 Western Digital Technologies, Inc. Multi-fetching data for multi-pass programming within storage devices
US11853555B2 (en) * 2021-10-11 2023-12-26 Western Digital Technologies, Inc. NVMe dual port enterprise SSD optimization
US20230136664A1 (en) * 2021-11-02 2023-05-04 SK Hynix Inc. Storage device and electronic device
US11656798B1 (en) * 2021-12-03 2023-05-23 Western Digital Technologies, Inc. Immediate partial host buffer fetching
US11768606B2 (en) 2021-12-27 2023-09-26 Western Digital Technologies, Inc. Maximizing performance through traffic balancing
US11847323B1 (en) * 2022-06-07 2023-12-19 Westem Digital Technologies, Inc. Data storage device and method for host buffer management
CN115622954B (zh) * 2022-09-29 2024-03-01 中科驭数(北京)科技有限公司 数据传输方法、装置、电子设备及存储介质

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6092149A (en) * 1997-05-28 2000-07-18 Western Digital Corporation Disk drive cache system using a dynamic priority sequential stream of data segments continuously adapted according to prefetched sequential random, and repeating types of accesses
US6981104B2 (en) * 2002-07-12 2005-12-27 Hewlett-Packard Development Company, L.P. Method for conducting checkpointing within a writeback cache
US8817029B2 (en) * 2005-10-26 2014-08-26 Via Technologies, Inc. GPU pipeline synchronization and control system and method
US7870309B2 (en) * 2008-12-23 2011-01-11 International Business Machines Corporation Multithreaded programmable direct memory access engine
KR20120001405A (ko) 2010-06-29 2012-01-04 삼성전자주식회사 메모리 시스템 및 그것의 웨어 레벨링 방법
US8589735B2 (en) * 2011-05-16 2013-11-19 International Business Machines Corporation Creating randomly ordered fields while maintaining the temporal ordering based on the value of the fields
KR20130032077A (ko) * 2011-09-22 2013-04-01 에스케이하이닉스 주식회사 설정 데이터 저장회로, 이를 포함하는 비휘발성 메모리 장치 및 메모리 시스템
US9148819B2 (en) * 2012-11-06 2015-09-29 Peraso Technologies, Inc. In-place A-MSDU aggregation for wireless systems
US20140331001A1 (en) 2013-05-02 2014-11-06 Lsi Corporation Command Barrier for a Solid State Drive Controller
US8977786B1 (en) * 2013-07-30 2015-03-10 Qlogic, Corporation Method and system for processing information at peripheral devices
US20150095551A1 (en) * 2013-09-30 2015-04-02 Micron Technology, Inc. Volatile memory architecutre in non-volatile memory devices and related controllers
WO2015121912A1 (ja) 2014-02-12 2015-08-20 株式会社日立製作所 データ記憶装置
KR102330389B1 (ko) 2014-07-24 2021-11-24 삼성전자주식회사 데이터 저장 장치 및 그것의 데이터 처리 방법
US9563367B2 (en) 2014-08-26 2017-02-07 HGST Netherlands B.V. Latency command processing for solid state drive interface protocol
US9678665B2 (en) * 2015-03-06 2017-06-13 Western Digital Technologies, Inc. Methods and systems for memory page allocation
US10108565B2 (en) * 2015-03-31 2018-10-23 Toshiba Memory Corporation Method for on-demand fetching of SGL pointers based buffer, traffic and command requirements
US9990138B2 (en) * 2015-03-31 2018-06-05 Toshiba Memory Corporation Out of order SGL read sorting in a mixed system with PRP read or system that supports only SGL reads

Also Published As

Publication number Publication date
US10275378B2 (en) 2019-04-30
WO2018164741A1 (en) 2018-09-13
US20180260347A1 (en) 2018-09-13
CN108572933B (zh) 2021-02-19
CN108572933A (zh) 2018-09-25

Similar Documents

Publication Publication Date Title
DE112017005890T5 (de) Abrufen von Datenpufferzeigern für direkten Speicherzugriff
DE112018000834T5 (de) System und verfahren zur adaptiven befehlsabruf-aggregation
DE112018000180T5 (de) System und verfahren zum adaptiven senden frühzeitiger beendigung unter verwendung eines steuerungsspeicherpuffers
DE102018123891A1 (de) Handhabung nichtabgestimmter Schreibvorgänge
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
DE112019000147T5 (de) Partielle rücksetzung einer speichersteuerung
DE102018106154A1 (de) Faltungsoperationen in datenspeichersystemen mit einzeladressenaktualisierungen
DE112016004760T5 (de) System und Verfahren für direktes Schreiben auf einen MLC-Speicher
DE112018000230T5 (de) System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers
DE112018000233T5 (de) System und Verfahren zur Verarbeitung und Arbitrierung von Übermittlungs- und Beendigungswarteschlangen
DE102010018765A1 (de) Speichervorrichtung und Speicherverfahren
DE112018004256T5 (de) Redundanzcodierstreifen basierend auf internen adressen von speichervorrichtungen
DE112019005369T5 (de) Verfahren zum umschalten zwischen herkömmlicher ssd und open-channel-ssd ohne datenverlust
DE102008033518B4 (de) Datenverarbeitungsverfahren für eine Solid-State-Disk-Steuereinheit, Solid-State-Disk-Steuereinheit und Datenspeicherelement
DE112015004536T5 (de) Hardware-Automatisierung für Speicherverwaltung
DE112020000139T5 (de) Nicht sequentiell in zonen aufgeteilte namensräume
DE102010013388A1 (de) Hierarchische Speichervorrichtung zur Verbindung von Massenspeichern
DE102021115374A1 (de) Abschwächung des in zonen unterteilten namensraums unter verwendung des unterblock-modus
DE102017120787A1 (de) Verfahren und Vorrichtung zum Entladen von Datenverarbeitung in Hybrid-Speichervorrichtungen
DE112017005955T5 (de) Speichersystem und verfahren zur schlanken speicherzuweisung
DE112019005511T5 (de) Halten von schreibbefehlen in gezonten namensräumen
DE102019124668A1 (de) Transistorschwellenspannungshaltung in 3d-speicher
DE112018004252T5 (de) Redundanzcodierstreifen auf der basis eines koordinierten internen adressschemas über mehrere vorrichtungen
DE112019000161T5 (de) Speicher-cache-verwaltung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
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