DE112020003185T5 - Einstellung von block-pool-grössen in einem speichersystem - Google Patents

Einstellung von block-pool-grössen in einem speichersystem Download PDF

Info

Publication number
DE112020003185T5
DE112020003185T5 DE112020003185.3T DE112020003185T DE112020003185T5 DE 112020003185 T5 DE112020003185 T5 DE 112020003185T5 DE 112020003185 T DE112020003185 T DE 112020003185T DE 112020003185 T5 DE112020003185 T5 DE 112020003185T5
Authority
DE
Germany
Prior art keywords
pool
blocks
block
rtu
processor
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
DE112020003185.3T
Other languages
English (en)
Inventor
Roman Alexander Pletka
Radu Ioan Stoica
Sasa Tomic
Nikolaos Papandreou
Nikolas Ioannou
Aaron Daniel Fry
Timothy Fisher
Charalampos Pozidis
Andrew Walls
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112020003185T5 publication Critical patent/DE112020003185T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/0685Hybrid storage combining heterogeneous device types, e.g. hierarchical storage, hybrid arrays
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7205Cleaning, compaction, garbage collection, erase control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7208Multiple device management, e.g. distributing data over multiple flash devices

Abstract

Ein computerimplementiertes Verfahren gemäß einer Ausführungsform umfasst das Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt. Als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich liegt, erfolgt eine Bestimmung, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt. Darüber hinaus werden als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich liegt, gültige Daten aus einem der Blöcke in einem ersten Pool verschoben, der der ersten RTU-Warteschlange entspricht. Der Block in dem ersten Pool wird gelöscht und aus dem ersten Pool in die zweite RTU-Warteschlange übertragen, die einem zweiten Pool entspricht.

Description

  • TECHNISCHER BEREICH
  • Die vorliegende Erfindung betrifft Datenspeichersysteme, und insbesondere betrifft diese Erfindung das Einstellen von Speicherblock-Pool-Größen in einem Speichersystem.
  • HINTERGRUND
  • Unter Heranziehung eines Flash-Speichers als Beispiel unterscheiden sich die Leistungsmerkmale herkömmlicher Flash-basierter NAND-Festkörperlaufwerke (SSDs, solid state drives) fundamental von denen traditioneller Festplattenlaufwerke (HDDs, hard disk drives). Daten in herkömmlichen SSDs sind typischerweise auf Seiten mit Größen von 4, 8 oder 16 KB organisiert. Darüber hinaus sind Seitenleseoperationen bei SSDs typischerweise eine Größenordnung schneller als Schreiboperationen, und die Latenz hängt weder von der aktuellen noch der vorherigen Speicherstelle von Operationen ab.
  • Bei Flash-basierten SSDs werden Speicherstellen jedoch vor dem Beschreiben in Blöcken gelöscht. Die Größe einer Löschblockeinheit liegt irgendwo bei 256 bis 512 oder sogar mehreren Tausend Seiten, und die Löschoperationen dauern um etwa eine Größenordnung länger als eine Seitenprogrammieroperation. Aufgrund der inhärenten Eigenschaften des NAND-Flash schreiben Flash-basierte SSDs Daten durcheinander, weshalb eine Zuordnungstabelle logische Adressen der geschriebenen Daten physischen zuordnet. Diese Zuordnungstabelle wird typischerweise als Logisch-zu-Physisch-Tabelle (LPT, logical-to-physical table) bezeichnet.
  • Nachdem Flash-basierte Speicherzellen aufgrund von Verschleiß oder aus anderen Gründen Lesefehler und/oder Störungen aufzeigen, kann innerhalb von Speicherseiten sowie über Speicherchips eine zusätzliche Redundanz (z.B. Systeme in der Art von RAID-5 und RAID-6) verwendet werden. Die zusätzliche Redundanz innerhalb von Speicherseiten kann einen Fehlerkorrekturcode (ECC, error correction code) einschließen, der beispielsweise BCH, LDPC oder andere Codes einschließen kann. Während das Hinzufügen eines ECC in Seiten relativ unkompliziert ist, ist die Organisation von Speicherblöcken in RAID-artigen Stripes komplexer. So werden beispielsweise einzelne Blöcke im Laufe der Zeit ausrangiert, was entweder eine Neuorganisation der Stripes oder eine Verringerung der Kapazität des Stripe erfordert. Nachdem die Organisation der Stripes zusammen mit der LPT die Anordnung von Daten bestimmt, nutzen SSDs typischerweise eine protokollstrukturierte Anordnungsarchitektur (LSA, log-structured array), die diese beiden Verfahren kombiniert.
  • Die LSA-Architektur beruht auf ortsversetzten Schreibvorgängen. Bei diesem Ansatz führt ein Überschreiben einer Speicherseite zum Schreiben der Speicherseitendaten an eine neue Speicherstelle im Speicher, zur Markierung der alten Kopie der Speicherseitendaten als ungültig und zum anschließenden Aktualisieren der Zuordnungsinformationen. Aufgrund der Beschränkungen der gegenwärtigen NAND-Speichertechnologie kann eine ungültig gemachte Datenstelle nicht wiederverwendet werden, bis der gesamte Block, zu dem sie gehört, gelöscht ist. Vor dem Löschen wird der Block jedoch einer Speicherbereinigung unterzogen, wodurch sämtliche gültigen Daten in dem Block in einen neuen Block verschoben werden. Die Speicherbereinigung eines Blocks wird zur Maximierung der Menge an ungültig gemachten Daten in dem Block und damit zur Verringerung der Anzahl an gültigen Seiten, die verschoben werden, typischerweise so lange wie möglich aufgeschoben, da die Verschiebung von Daten zusätzliche Schreiboperationen verursacht und dadurch den Schreibfaktor erhöht.
  • ZUSAMMENFASSUNG
  • Ein computerimplementiertes Verfahren gemäß einer Ausführungsform dient dem Einstellen von Block-Pool-Größen in einem Speichersystem. Das computerimplementierte Verfahren umfasst das Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt. Als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt, erfolgt eine Bestimmung, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt. Darüber hinaus werden als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt, gültige Daten aus einem der Blöcke in einem ersten Pool verschoben, der der ersten RTU-Warteschlange entspricht. Der Block in dem ersten Pool wird gelöscht und aus dem ersten Pool in die zweite RTU-Warteschlange übertragen, die einem zweiten Pool entspricht. Die Blöcke in dem ersten Pool sind im SLC-Modus (SLC, single-level cell, ein Bit pro Zelle) konfiguriert, wogegen die Blöcke in dem zweiten Pool im Multi-Bit-Pro-Zelle-Modus konfiguriert sind.
  • Ein Computerprogrammprodukt gemäß einer weiteren Ausführungsform umfasst ein computerlesbares Speichermedium, in dem Programmanweisungen realisiert sind. Die Programmanweisungen sind durch einen Prozessor zum Veranlassen des Prozessors zum Ausführen des vorstehenden Verfahrens lesbar und/oder ausführbar.
  • Ein System gemäß noch einer weiteren Ausführungsform umfasst mehrere NVRAM-Blöcke (NVRAM, non-volatile random access memory, nicht flüchtiger Direktzugriffsspeicher), die auf das Speichern von Daten ausgelegt sind. Das System umfasst auch einen Prozessor und Logik, die in den Prozessor integriert und/oder durch diesen ausführbar ist. Die Logik ist auf das Ausführen des vorstehenden Verfahrens ausgelegt.
  • Weitere Aspekte und Ausführungsformen der vorliegenden Erfindung werden aus der folgenden genauen Beschreibung ersichtlich, die bei der Betrachtung in Verbindung mit den Zeichnungen beispielhaft die Prinzipien der Erfindung veranschaulicht.
  • Figurenliste
    • 1 ist ein Diagramm einer nicht flüchtigen Speicherkarte gemäß einer Ausführungsform.
    • 2 ist ein Diagramm einer Datenspeichersystemarchitektur gemäß einer Ausführungsform.
    • 3 ist ein Systemdiagramm gemäß einer Ausführungsform.
    • 4 ist ein Konzeptdiagramm, das einen Block-Stripe und einen Seiten-Stripe gemäß einer Ausführungsform aufweist.
    • 5 ist eine repräsentative Ansicht eines nicht flüchtigen Speichermoduls gemäß einer Ausführungsform.
    • 6A ist ein Ablaufdiagramm eines Verfahrens gemäß einer Ausführungsform.
    • 6B ist ein Ablaufdiagramm eines Verfahrens gemäß einer Ausführungsform.
    • 6C ist ein Ablaufdiagramm von Unterprozessen zu einem der Abläufe des Verfahrens gemäß einer Ausführungsform gemäß 6A und/oder 6B.
    • 7 ist eine repräsentative Teilansicht einer Daten- und Block-Ablaufübersicht gemäß einer Ausführungsform.
    • 8 ist eine Netzwerkarchitektur gemäß einer Ausführungsform.
    • 9 ist eine repräsentative Hardwareumgebung gemäß einer Ausführungsform, die den Servern und/oder Clients gemäß 8 zugeordnet werden kann.
    • 10 ist ein mehrstufiges Datenspeichersystem gemäß einer Ausführungsform.
  • GENAUE BESCHREIBUNG
  • Die folgende Beschreibung erfolgt zum Zwecke der Veranschaulichung der allgemeinen Prinzipien der vorliegenden Erfindung und soll die hier beanspruchten erfinderischen Konzepte nicht einschränken. Ferner können hier beschriebene besondere Merkmale in jeder der unterschiedlichen möglichen Kombinationen und Abwandlungen in Kombination mit weiteren beschriebenen Merkmalen genutzt werden.
  • Soweit dies hier nicht ausdrücklich anderweitig definiert ist, sind sämtliche Begriffe in ihrer weitest möglichen Auslegung zu verstehen, einschließlich der aus der Patentschrift konkludenten Bedeutungen sowie der Fachleuten bekannten und/oder in Wörterbüchern, Abhandlungen, etc. definierten Bedeutungen.
  • Ebenso ist darauf hinzuweisen, dass die Singularformen „ein“, „eine“ und „der“, „die“, „das“ nach dem Gebrauch in der Beschreibung und den beigefügten Ansprüchen, soweit nichts anderes angegeben ist, Pluralbezüge einschließen. Ferner versteht sich, dass die Begriffe „umfasst“ und/oder „umfassen“, soweit sie in dieser Beschreibung verwendet werden, das Vorhandensein der angegebenen Merkmale, ganzzahligen Werte, Schritte, Operationen, Elemente, und/oder Komponenten angeben, das Vorhandensein oder Hinzukommen eines oder weiterer anderer Merkmale, ganzzahliger Werte, Schritte, Operationen, Elemente, Komponenten und/oder Gruppen dieser jedoch nicht ausschließen.
  • In der folgenden Beschreibung sind einige bevorzugte Ausführungsformen von Datenspeichersystemen sowie von Funktions- und/oder Bauteilbestandteilen dieser offenbart. Es sollte gewürdigt werden, dass unterschiedliche Ausführungsformen hier mit einer breiten Palette an Speichermedien implementiert werden können, darunter beispielsweise NVRAM-Technologien (NVRAM, non-volatile random access memory, nicht flüchtiger Direktzugriffsspeicher) wie NAND-Flash-Speicher, NOR-Flash-Speicher, Phasenwechselspeicher (PCM, phase change memory), magnetoresistives RAM (MRAM) und resistives RAM (RRAM). Um einen Kontext zu liefern und ausschließlich als Hilfestellung für den Leser können unterschiedliche Ausführungsformen unter Bezugnahme auf einen Typ von nicht flüchtigem Speicher beschrieben sein. Dies erfolgt lediglich beispielhaft und darf nicht als die in den Ansprüchen definierte Erfindung einschränkend betrachtet werden.
  • Bei einer allgemeinen Ausführungsform dient ein computerimplementiertes Verfahren dem Einstellen von Block-Pool-Größen in einem Speichersystem. Das computerimplementierte Verfahren umfasst das Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt. Als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt, erfolgt eine Bestimmung, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt. Darüber hinaus werden als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt, gültige Daten aus einem der Blöcke in einem ersten Pool verschoben, der der ersten RTU-Warteschlange entspricht. Der Block in dem ersten Pool wird gelöscht und aus dem ersten Pool in die zweite RTU-Warteschlange übertragen, die einem zweiten Pool entspricht. Die Blöcke in dem ersten Pool sind im SLC-Modus (SLC, single-level cell, ein Bit pro Zelle) konfiguriert, wogegen die Blöcke in dem zweiten Pool im Multi-Bit-Pro-Zelle-Modus konfiguriert sind.
  • Bei einer weiteren allgemeinen Ausführungsform weist ein Computerprogrammprodukt ein computerlesbares Speichermedium auf, auf dem Programmanweisungen implementiert sind. Die Programmanweisungen sind durch einen Prozessor zum Veranlassen des Prozessors zum Ausführen des vorstehenden Verfahrens lesbar und/oder ausführbar.
  • Bei noch einer weiteren allgemeinen Ausführungsform weist ein System mehrere NVRAM-Blöcke (NVRAM, non-volatile random access memory, nicht flüchtiger Direktzugriffsspeicher) auf, die auf das Speichern von Daten ausgelegt sind. Dass System weist auch einen Prozessor und Logik auf, die in den Prozessor integriert und/oder durch diesen ausführbar ist. Die Logik ist auf das Ausführen des vorstehenden Verfahrens ausgelegt.
  • 1 stellt eine Speicherkarte 100 gemäß einer Ausführungsform dar. Es ist darauf hinzuweisen, dass, obwohl die Speicherkarte 100 bei der vorliegenden Ausführungsform als beispielhafte nicht flüchtige Datenspeicherkarte dargestellt ist, gemäß alternativen Ausführungsformen unterschiedliche andere Typen nicht flüchtiger Datenspeicherkarten in einem Datenspeichersystem verwendet werden können. Es folgt, dass die Architektur und/oder die Komponenten der Speicherkarte 100 die Erfindung in keiner Weise beschränken sollen, sondern vielmehr als nicht einschränkendes Beispiel aufgeführt sind.
  • Darüber hinaus kann als eine Option die vorliegende Speicherkarte 100 in Verbindung mit Merkmalen jeder weiteren hier aufgeführten Ausführungsform wie den unter Bezugnahme auf die anderen Figuren beschriebenen implementiert werden. Eine derartige Speicherkarte 100 und weitere hier vorgestellte können jedoch für unterschiedliche Anwendungen und/oder in Abwandlungen verwendet werden, die im Zusammenhang mit den hier aufgeführten beispielhaften Ausführungsformen im Besonderen beschrieben sein können, aber nicht sein müssen. Ferner kann die hier vorgestellte Speicherkarte 100 in jeder gewünschten Umgebung verwendet werden.
  • Weiterhin Bezug nehmend auf 1 weist die Speicherkarte 100 einen Netzkoppler 102 auf, einen Allzweckprozessor (einen GPP, general purpose processor) 112 (wie eine ASIC, eine FPGA, eine CPU, etc.), der an einen GPP-Speicher 114 (der ein RAM, ein ROM, ein batteriegepufferes DRAM, einen Phasenwechselspeicher ein PC-RAM, ein MRAM, ein STT-MRAM, etc. oder eine Kombination dieser umfassen kann) angeschlossen ist, und eine Reihe von Speichersteuerungen 108, die bei dem vorliegenden Beispiel Flash-Steuerungen umfassen. Jede Speichersteuerung 108 ist über Kanäle 106 mit mehreren NVRAM-Speichermodulen 104 verbunden (die NAND-Flash oder einen weiteren nicht flüchtigen Speichertyp /weitere nicht flüchtige Speichertypen wie die vorstehend aufgeführten umfassen können).
  • Gemäß unterschiedlichen Ausführungsformen können eine oder mehrere der Steuerungen 108 ein oder mehrere Prozessoren und/oder eine beliebige Logik zur Steuerung eines beliebigen Untersystems der Speicherkarte 100 sein oder diese aufweisen. Die Steuerungen 108 steuern typischerweise beispielsweise die Funktionen von NVRAM-Speichermodulen 104 wie das Schreiben von Daten, die Rückführung von Daten, das Lesen von Daten, etc. Die Steuerungen 108 können unter Verwendung von nach dem Stand der Technik bekannter Logik sowie jeder hier offenbarten Logik arbeiten und somit in Bezug auf jede der hierin enthaltenen Beschreibungen nicht flüchtiger Speicher in unterschiedlichen Ausführungsformen als Prozessor betrachtet werden.
  • Darüber hinaus kann die Steuerung 108 so konfiguriert und/oder programmierbar sein, dass sie einen Teil der oder die gesamte hier vorgestellte Methodologie ausführt oder steuert. Somit kann die Steuerung 108 als auf die Ausführung unterschiedlicher Operationen mittels in einen oder mehrere Chips, Module und/oder Blöcke, etc. und Kombinationen dieser programmierter Logik ausgelegt betrachtet werden, wobei Software, Firmware und/oder weitere Anweisungen einem oder mehreren Prozessorenzugänglich sind.
  • Nach wie vor Bezug nehmend auf 1 ist jede Speichersteuerung 108 auch mit einem Steuerungsspeicher 110 verbunden, der vorzugsweise einen Cache umfasst, der eine nicht flüchtige Speicherstruktur gemäß den unterschiedlichen hier beschriebenen Ausführungsformen repliziert. Abhängig von der gewünschten Ausführungsform kann der Steuerungsspeicher 110 jedoch ein batteriegepufferes DRAM, ein Phasenwechselspeicher, ein PC-RAM, ein MRAM, ein STT-MRAM, etc. oder eine Kombination dieser sein.
  • Wie bereits erwähnt, kann die Speicherkarte 100 abhängig von der gewünschten Ausführungsform durch unterschiedliche Typen von Datenspeichersystemen implementiert werden. 2 stellt eine Datenspeichersystemarchitektur 200 gemäß einer beispielhaften Ausführungsform dar, die die Erfindung in keiner Weise einschränken soll. Darüber hinaus ist darauf hinzuweisen, dass das Datenspeichersystem 220 gemäß 2 unterschiedliche Komponenten aufweisen kann, die bei der Ausführungsform gemäß 1 zu finden sind.
  • Mit Blick auf 2 umfasst das Datenspeichersystem 220 eine Reihe von Schnittstellenkarten 202, die darauf ausgelegt sind, über E-/A-Verbindungen 204 mit einem oder mehreren Prozessorsystemen 201 zu kommunizieren. Das Datenspeichersystem 220 kann auch eine oder mehrere RAID-Steuerungen 206 umfassen, die darauf ausgelegt sind, die Datenspeicherung auf mehreren nicht flüchtigen Datenspeicherkarten 208 zu steuern. Die nicht flüchtigen Datenspeicherkarten 208 können ein NVRAM, Flash-Speicherkarten, ein RAM, ein ROM und/oder einen anderen bekannten Typ von nicht flüchtigem Speicher umfassen.
  • Die E-/A-Verbindungen 204 können beliebige bekannte Kommunikationsprotokolle wie Fiber Channel (FC), FC over Ethernet (FCoE), Infiniband, Internet Small Computer System Interface (iSCSI), Transport Control Protocol/Internet Protocol (TCP/IP), Peripheral Component Interconnect Express (PCle), etc. und/oder jede Kombination dieser aufweisen.
  • Die RAID Steuerung(en) 206 in dem Datenspeichersystem 220 kann/können ein dem von RAID-5, RAID-10 verwendeten ähnliches Paritätsschema oder ein anderes geeignetes Paritätsschema ausführen, wie für Fachleute bei der Lektüre der vorliegenden Beschreibungen ersichtlich.
  • Jedes Prozessorsystem 201 weist einen oder mehrere Prozessoren 210 (wie CPUs, Mikroprozessoren, etc.), einen lokalen Datenspeicher 211 (wie z.B. gemäß 9 ein RAM 914, gemäß 9 ein ROM 916, etc.) und einen E-/A-Adapter 218 auf, der darauf ausgelegt ist, mit dem Datenspeichersystem 220 zu kommunizieren.
  • Erneut Bezug nehmend auf 1 können die Speichersteuerungen 108, der GPP 112 und/oder andere hier beschriebene Steuerungen (gemäß 2 z.B. RAID-Steuerungen 206) abhängig von der gewünschten Ausführungsform zum Ausführen unterschiedlicher Funktionen an gespeicherten Daten geeignet sein. Genauer können die Speichersteuerungen oder der GPP 112 Logik aufweisen, die auf das Ausführen einer beliebigen oder mehrerer der folgenden Funktionen ausgelegt ist, die in keiner Weise eine exklusive Auflistung darstellen sollen. Anders ausgedrückt kann die Logik eines Speichersystems abhängig von der gewünschten Ausführungsform darauf ausgelegt sein, zusätzliche oder alternative Funktionen auszuführen, wie es für Fachleute bei der Lektüre der vorliegenden Beschreibung zu erkennen ist.
  • Speicherbereinigung
  • Die Speicherbereinigung kann im Kontext von SSD-Speichersteuerungen gemäß der vorliegenden Beschreibung den Prozess der Erkennung von Blöcken von zur künftigen Verwendung wiederzuerlangenden Daten und des Verschiebens sämtlicher darin noch gültigen Seiten einschließen. Darüber hinaus können abhängig von der spezifischen Steuerung und/oder der jeweiligen Speicherbereinigungs-Funktionseinheit logische Löschblöcke (LEBs, logical erase blocks) zur Wiederherstellung und/oder Verschiebung identifiziert werden. Typischerweise entspricht ein LEB einem Block-Stripe, doch alternative Implementierungen können auch eine feste Anzahl an Block-Stripes oder einen einzigen Block berücksichtigen, der einen LEB bildet.
  • Ein physischer „Block“ stellt eine minimale Einheit dar, die aus einem nicht flüchtigen Speicher wie z.B. einem NAND-Flash-Speicher gelöscht und dadurch zum Beschreiben von Daten vorbereitet werden kann. Eine typische Speicherbereinigungs-Funktionseinheit ist jedoch häufig ein Mehrfaches der physischen Blöcke eines nicht flüchtigen Speichers und wird hier ebenfalls als LEB bezeichnet. Dies ist dem Umstand geschuldet, dass typischerweise RAID-artige Paritätsinformationen zu LEBs hinzugefügt sind. Daher können bei einem Seiten- oder Blockfehler Daten nur wiederhergestellt werden, wenn sämtliche Blöcke in dem LEB noch Daten enthalten. Dementsprechend können die einzelnen Blöcke der Speicherbereinigungseinheit nur entweder individuell oder als eine einzelne Einheit gelöscht werden, wenn sämtliche noch gültigen Daten aus sämtlichen Blöcken in dem LEB erfolgreich an neue Speicherplätze verschoben wurden. Daher werden die vollständigen Speicherbereinigungseinheiten als eine einzige Einheit speicherbereinigt. Darüber hinaus beeinflusst die Größe des LEB direkt den speicherbereinigungsinduzierten Schreibfaktor. Je größer der LEB, desto wahrscheinlicher wird es, dass unzusammenhängende Daten gemeinsam in dem LEB gespeichert werden, und daher können bei der Speicherbereinigungsauswahl mehr der LEB-Daten verschoben werden müssen.
  • Häufig werden Blöcke von unterschiedlichen Chips und/oder Flash-Kanälen zusammen gruppiert, so dass Blöcke aus der gleichen Gruppe parallel gelesen oder beschrieben werden können, wodurch die Gesamtbandbreite erhöht wird. Es ist auch möglich, die beiden vorstehenden Verfahren zu kombinieren und RAID-Stripes unter Verwendung von Blöcken aus verschiedenen Flash-Kanälen zusammenzustellen, auf die parallel zugegriffen werden kann.
  • Es sei auch darauf hinzuweisen, dass ein LEB jedes Vielfache des physischen Speicherblocks aufweisen kann, der eine Einheit der physischen Löschung ist. Darüber hinaus ermöglicht die Organisation von Speicherblöcken zu LEBs nicht nur das Hinzufügen RAID-artiger Paritätsschutzschemata unter Speicherblöcken von unterschiedlichen Speicherchips, Speicherebenen und/oder Kanälen, sondern auch eine erhebliche Verbesserung der Leistung durch eine höhere Parallelität. So können beispielsweise mehrere nicht flüchtige Speicherblöcke zusammen in einem RAID-Stripe gruppiert werden. Wie für Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich, verbessern RAID-Schemata im Allgemeinen die Zuverlässigkeit und verringern die Wahrscheinlichkeit eines Datenverlusts.
  • Gemäß einer beispielhaften Ausführungsform, die die Erfindung in keiner Weise einschränken soll, können Speichersteuerungen (siehe z.B. 108 gemäß 1) und/oder der GPP 112 eine Speicherbereinigung intern ausführen. Wie bereits erwähnt, kann die Speicherbereinigung die Auswahl eines zu verschiebenden LEB einschließen, worauf sämtliche noch gültigen Daten, die sich in dem ausgewählten LEB befinden, verschoben (z.B. verlegt) werden können. Nach dem Verschieben der noch gültigen Daten kann der LEB gelöscht und danach zum Speichern neuer Daten verwendet werden. Die Menge an aus dem speicherbereinigten LEB verschobenen Daten bestimmt den Schreibfaktor. Darüber hinaus schließt eine effiziente Methode zur Verringerung des Schreibfaktors das Implementieren einer Schreibhitzeaufteilung ein.
  • Schreibhitzeaufteilung
  • Im vorliegenden Kontext bezeichnet die „Schreibhitze“ von Daten die Geschwindigkeit (z.B. die Häufigkeit), mit der die Daten aktualisiert (z.B. mit neuen Daten überschrieben) werden. Speicherblöcke, die als „heiß“ betrachtet werden, tendieren zu einer häufigen Aktualisierungsrate, wogegen Speicherblöcke, die als „kalt“ betrachtet werden, eine langsamere Aktualisierungsrate als heiße Blöcke aufweisen.
  • Die Nachverfolgung der Schreibhitze einer logischen Seite kann beispielsweise die Zuordnung einer bestimmten Anzahl an Bits in dem LPT-Zuordnungseintrag für die Seite zur Nachverfolgung einschließen, wie vielen Schreiboperationen die Seite innerhalb eines bestimmten Zeitraums oder -fensters unterzogen wurde. Typischerweise erhöhen Host-Schreiboperationen die Schreibhitze, wogegen interne Verschiebungsschreibvorgänge die Schreibhitze verringern. Die tatsächlichen Erhöhungen und/oder Verringerungen der Schreibhitze können deterministisch oder probabilistisch sein.
  • Ähnlich kann eine Lesehitze mit einer bestimmten Anzahl an zusätzlichen Bits für jede logische Seite in der LPT nachverfolgt werden. Zur Reduzierung von Metadaten kann die Lesehitze auch auf einer physischen Blockebene nachverfolgt werden, auf der separate Zähler pro Block für blockübergreifende und nicht blockübergreifende Lesevorgänge gehalten werden können. Es ist jedoch darauf hinzuweisen, dass die Anzahl der Leseanforderungen an einen Speicherblock und/oder der an diesem ausgeführten Lesevorgänge bei der Bestimmung der Schreibhitze des Speicherblocks bei einigen Ausführungsformen nicht für die Schreibhitzeaufteilung ins Spiel kommen muss. Wenn beispielsweise häufig Daten aus einem bestimmten Speicherblock gelesen werden, bedeutet die hohe Lesehäufigkeit nicht notwendigerweise, dass der Speicherblock auch eine hohe Aktualisierungsrate aufweist. Vielmehr kann eine hohe Häufigkeit von an einem gegebenen Speicherblock ausgeführten Lesevorgängen eine Wesentlichkeit, einen Wert, etc. der in dem Speicherblock gespeicherten Daten aufzeigen.
  • Durch das Gruppieren von Speicherblöcken mit den gleichen und/oder ähnlichen Schreibhitzewerten kann eine Schreibhitzeaufteilung realisiert werden. Insbesondere können durch Hitzeaufteilungsverfahren heiße Speicherseiten zusammen in bestimmten Speicherblöcken gruppiert werden, wogegen kalte Speicherseiten zusammen in separaten Speicherblöcken gruppiert werden. Dadurch hat ein hitzeaufgeteilter LEB die Tendenz, entweder von heißen oder von kalten Daten besetzt zu sein.
  • Der Vorteil einer Schreibhitzeaufteilung ist zweifach. Erstens verhindert das Ausführen eines Speicherbereinigungsprozesses an einem heißen Speicherblock das Auslösen auch der Verschiebung kalter Daten. Ohne eine Schreibhitzeaufteilung führen Aktualisierungen heißer Daten, die häufig ausgeführt werden, auch zur unerwünschten Verschiebung sämtlicher kalten Daten, die sich mit in dem gleichen LEB befinden, wenn die heißen Daten verschoben werden. Daher ist der durch das Ausführen einer Speicherbereinigung verursachte Schreibfaktor bei Ausführungsformen, die eine Schreibhitzeaufteilung implementieren, wesentlich geringer.
  • Zweitens kann die relative Hitze von Daten für Verschleißausgleichszwecke genutzt werden. Heiße Daten können beispielsweise in gesünderen (z.B. neueren) Speicherblöcken platziert werden, wogegen kalte Daten in im Bezug auf diese gesünderen Speicherblöcke weniger gesunden (z.B. älteren) Speicherblöcken platziert werden können. Damit wird die Geschwindigkeit, mit der relativ ältere Blöcke einem Verschleiß ausgesetzt sind, effektiv verlangsamt, wodurch die Dauerhaltbarkeit eines gegebenen Datenspeichersystems, das eine Schreibhitzeaufteilung implementiert, insgesamt verbessert wird.
  • Schreibzuordnung
  • Die Schreibzuordnung schließt das Platzieren von Daten aus Schreiboperationen an freien Speicherstellen offener LEBs ein. Sobald sämtliche Seiten in einem LEB beschrieben sind, wird der LEB geschlossen und in einem Pool platziert, der besetzte LEBs hält. Typischerweise werden LEBs in dem besetzten Pool zur Speicherbereinigung auswählbar. Die Anzahl offener LEBs ist normalerweise begrenzt, und jeder geschlossene LEB kann entweder sofort oder nach einiger Verzögerung durch einen frischen LEB ersetzt werden, der durch die Zuordnung eines oder mehrerer gelöschter Blöcke zu dem LEB geöffnet wird.
  • Während des Betriebs kann eine Speicherbereinigung gleichzeitig mit Benutzerschreiboperationen erfolgen. Wenn beispielsweise ein Benutzer (z.B. ein Host) Daten in eine Vorrichtung schreibt, kann die Vorrichtungssteuerung durchgehend eine Speicherbereinigung an LEBs mit ungültigen Daten ausführen, um für die neu hereinkommenden Datenseiten Platz zu schaffen. Wie vorstehend erwähnt, enthalten die LEBs, an denen die Speicherbereinigung ausgeführt wird, häufig einige Seiten, die zum Zeitpunkt des Speicherbereinigungsvorgangs noch gültig sind; somit werden diese Seiten vorzugsweise in einen neuen LEB verschoben (z.B. geschrieben).
  • Erneut sollen die vorstehenden Funktionen in keiner Weise den Funktionsumfang eines der hier beschriebenen und/oder vorgeschlagenen Speichersysteme beschränken. Vielmehr werden die vorstehend aufgeführten Funktionen beispielhaft vorgestellt, und die Logik eines Speichersystems kann abhängig von der gewünschten Ausführungsform darauf ausgelegt sein, zusätzliche oder alternative Funktionen auszuführen, wie für Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich.
  • Wird nun auf 3 Bezug genommen, ist ein System 300 gemäß einer Ausführungsform dargestellt. Als eine Option kann das vorliegende System 300 in Verbindung mit Merkmalen jeder anderen hier aufgeführten Ausführungsform wie den unter Bezugnahme auf die weiteren Figuren beschriebenen implementiert werden. Ein derartiges System 300 und weitere hier vorgestellte können jedoch in unterschiedlichen Anwendungen und/oder in Abwandlungen verwendet werden, die in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben sein können, aber nicht sein müssen. Ferner kann das hier vorgestellte System 300 in jeder gewünschten Umgebung, z.B. in Kombination mit einer Steuerung verwendet werden.
  • Wie dargestellt, weist das System 300 einen Schreib-Cache 302 auf, der mit mehreren anderen Komponenten gekoppelt ist, darunter einer Speicherbereinigung 304. Wie bereits erwähnt, kann die Speicherbereinigung 304 zum Leeren von LEB-Einheiten durch Verschieben gültiger Daten und Bereitstellen zur späteren Wiederverwendung zu löschender nicht flüchtiger Speicherblöcke verwendet werden. Somit kann die Speicherbereinigung 304 abhängig von der gewünschten Ausführungsform Blöcke fortlaufenden physischen Speicherplatzes zurückgewinnen. Gemäß einer beispielhaften Ausführungsform können Blocklöscheinheiten zur Nachverfolgung und/oder zum Abschließen des Löschens von der Speicherbereinigung 304 überlassener nicht flüchtiger Speicherblöcke verwendet werden.
  • Der Schreib-Cache 302 ist auch mit einem Freie-Blöcke-Manager 306 gekoppelt, der freie nicht flüchtige Speicherblöcke nach ihrer Löschung nachverfolgen kann. Darüber hinaus kann der Freie-Blöcke-Manager 306, wie für durchschnittliche Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich, unter Verwendung der gelöschten freien nicht flüchtigen Speicherblöcke freie Stripes aus nicht flüchtigen Speicherblöcken aus unterschiedlichen Spuren (z.B. Block-Stripes) zusammenstellen.
  • Nach wie vor Bezug nehmend auf 3 ist der Schreib-Cache 302 mit einem LPT-Manager 308 und einer Speicher-E-/A-Einheit 310 gekoppelt. Der LPT-Manager 308 hält die Logisch-zu-Physisch-Zuordnungen der logischen Adressen zu physischen Seiten im Speicher. Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, der kann LPT-Manager 308 die Logisch-zu-Physisch-Zuordnungen logischer Adressen von 4 KB oder 16 KB halten. Die Speicher-E-/A-Einheit 310 kommuniziert zum Ausführen von Operationen auf niedriger Ebene wie z.B. dem Lesen einer oder mehrerer nicht flüchtiger Speicherseiten, dem Schreiben einer nicht flüchtigen Speicherseite, dem Löschen eines nicht flüchtigen Speicherblocks, etc. mit den Speicherchips.
  • Zum besseren Verständnis der Unterscheidung zwischen Block-Stripes und Seiten-Stripes im hier verwendeten Sinne ist 4 ein Konzeptdiagramm 400 gemäß einer Ausführungsform. LEBs sind aus Block-Stripes aufgebaut, und typischerweise wird ein einzelner Block-Stripe zum Aufbau eines LEB verwendet. Alternative Ausführungsformen können jedoch mehrere Block-Stripes zur Bildung eines LEB verwenden. Als eine Option kann das vorliegende Konzeptdiagramm 400 in Verbindung mit Merkmalen jeder anderen hier aufgeführten Ausführungsform wie den unter Bezugnahme auf die weiteren Figuren beschriebenen implementiert werden. Ein derartiges Konzeptdiagramm 400 und weitere hier vorgestellte können jedoch in unterschiedlichen Anwendungen und/oder in Abwandlungen verwendet werden, die in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben sein können, aber nicht sein müssen. Ferner kann das hier vorgestellte Steuerungskonzeptdiagramm 400 in jeder gewünschten Umgebung verwendet werden. So kann das beispielhafte Konzeptdiagramm 400 für eine nicht flüchtige Speichersteuerung gemäß 4 in einer Cache-Architektur implementiert werden. Abhängig von der gewünschten Ausführungsform kann das Konzeptdiagramm 400 gemäß 4 jedoch zur Festlegung der Organisation von in dem nicht flüchtigen Speicher gespeicherten Daten implementiert werden. Dementsprechend sind beide Implementierungen nachstehend nacheinander beschrieben.
  • Nicht flüchtiger Speicher
  • Mit Blick auf 4 umfasst das Konzeptdiagramm 400 einen Satz von M+1 zusammengefassten Ebenen, die als „Ebene 0“ bis „Ebene M“ bezeichnet sind. Eine zusammengefasste Ebene besteht aus sämtlichen physischen Ebenen mit dem gleichen Ebenenindex auf unterschiedlichen Kanälen. Es ist darauf hinzuweisen, dass zusammengefasste Ebenen hier auch einfach als Ebenen bezeichnet werden.
  • Bei einer Implementierung mit in einem nicht flüchtigen Speicher gespeicherten Daten kann jede physische Ebene auf einem Kanal einen großen Satz von Blöcken, typischerweise z.B. in der Größenordnung von 1024, 2048 oder mehr umfassen. Darüber hinaus können eine oder mehrere physische Ebenen auch mehrere zusätzliche Blöcke umfassen, die als Ersatzblöcke für fehlerhafte Blöcke (z.B. Blöcke mit mangelhafter Leistung, Blöcke mit unerwünschten Eigenschaften, etc.) verwendet werden können.
  • Auf jeder Ebene des nicht flüchtigen Speichers kann ein einziger Block auf jedem Kanal einen jeweiligen Block-Stripe bilden. Es folgt, dass eine Anzahl an Block-Stripes, die von einer gegeben Ausführungsform des nicht flüchtigen Speichers unterstützt wird, durch die Anzahl an Blöcken pro Ebene und die Anzahl der Ebenen bestimmt werden kann.
  • In der auseinandergezogenen Ansicht der Ebene 0 stellt das Konzeptdiagramm 400 ferner einen einzelnen Block-Stripe (den Block-Stripe 0) unter dem Satz von Block-Stripes dar, die in den übrigen der Ebenen unterstützt werden. Der Block-Stripe 0 der Ebene 0 ist als 11 Blöcke einschließend dargestellt, einen Block aus jedem als „Kanal 0“ bis „Kanal 10“ bezeichneten Kanal. Es ist darauf hinzuweisen, dass sich die Zuordnung von Blöcken zu Block-Stripes im Laufe der Zeit ändern kann, da Block-Stripes typischerweise aufgelöst werden, nachdem sie speicherbereinigt wurden. Gelöschte Blöcke können in freien Block-Pools platziert werden, wodurch neue Block-Stripes aus Blöcken in den freien Block-Pools zusammengestellt werden, wenn die Schreibzuordnung frische Block-Stripes anfordert. Wird beispielsweise das Konzeptdiagramm 400 betrachtet, sind Block 10 aus Kanal 0 und Block 41 aus Kanal 4 aktuell dem dargestellten Block-Stripe 0 der Ebene 0 zugeordnet. Weiterhin hält der dargestellte Block-Stripe 0 N+1 Seiten-Stripes, und daher hält jeder Block N+1 Seiten mit der Bezeichnung „Seite 0“ bis „Seite N“.
  • Cache-Architektur
  • Weiterhin Bezug nehmend auf 4 kann bei der Implementierung in einer Cache-Architektur jeder in der auseinandergezogenen Ansicht der zusammengefassten Ebene 0 dargestellte Block von Seiten einen eindeutigen Block aus einem Kanal bilden. Ähnlich trägt jeder Kanal einen einzigen, einzelnen Block bei, die einen Block-Stripe bilden. Wird beispielsweise das Konzeptdiagramm 400 betrachtet, umfasst Block 10 aus Kanal 0 sämtliche darin enthaltenen Seiten (Seite 0 bis Seite N), während Block 41 aus Kanal 4 sämtlichen darin enthaltenen Seiten entspricht usw.
  • Im Kontext einer Speichersteuerung, die z.B. zur Implementierung von RAID auf der Kanalebene geeignet sein kann, ist ein Block-Stripe aus mehreren Blöcken zusammengesetzt, die einen Stripe von Blöcken ergeben. Bei weiterer Betrachtung von 4 bilden die mehreren Blöcke der zusammengefassten Ebene 0 den Block-Stripe 0. Während sämtliche Blöcke in einem Block-Stripe typischerweise zu der gleichen zusammengefassten Ebene gehören, können bei einigen Ausführungsformen ein oder mehrere Blöcke eines Block-Stripe zu unterschiedlichen physischen Ebenen gehören. Es folgt, dass jede zusammengefasste Ebene einen oder mehrere Block-Stripes umfassen kann. Somit können gemäß einer veranschaulichenden Ausführungsform Block 0 bis Block 10 aus unterschiedlichen physischen Ebenen einen Block-Stripe bilden.
  • Unabhängig davon, ob das Konzeptdiagramm 400 gemäß 4 durch einen nicht flüchtigen Speicher und/oder eine Cache-Architektur implementiert wird, können bei unterschiedlichen Ausführungsformen die Anzahl der Seiten in jedem Block und/oder die Anzahl der Kanäle auf jeder Ebene abhängig von der gewünschten Ausführungsform variieren. Gemäß einer beispielhaften Ausführungsform, die die Erfindung in keiner Weise einschränken soll, kann ein Block 256 Seiten umfassen, er könnte jedoch bei unterschiedlichen Ausführungsformen mehr oder weniger umfassen. Analog können die Anzahl der Kanäle pro Ebene und/oder die Anzahl der Ebenen abhängig von der gewünschten Ausführungsform variieren.
  • Weiterhin Bezug nehmend auf 4 bedeuten alle Seiten in einem Block-Stripe mit dem gleichen Seitenindex einen Seiten-Stripe. So umfasst beispielsweise der Seiten-Stripe 0 die erste Seite (Seite 0) jedes Kanals in dem Block-Stripe 0 der Ebene 0. Ähnlich umfasst der Seiten-Stripe N die letzte Seite (die Seite N) jedes Kanals in dem Block-Stripe 0 der Ebene 0.
  • Wie vorstehend angedeutet, haben sich die physischen Konfigurationen von Speicherblöcken in einem nicht flüchtigen Speicher im Laufe der Zeit verändert. So wiesen beispielsweise in der Vergangenheit Flash-Blöcke eine Ein-Bit-Pro-Zelle-Konfiguration auf, doch durch Verbesserungen bei der Datenspeicherung wurden Flash-Blöcke eingeführt, die Multi-Bit-Pro-Zelle-Konfigurationen implementieren. Obwohl Blöcke mit einer Multi-Bit-Pro-Zelle-Konfigurationen mehr Informationen als Blöcke mit einer Ein-Bit-Pro-Zelle-Konfiguration speichern können, hat diese Erhöhung der Speicherkapazität hinsichtlich der Ausführungslatenz ihren Preis. Speicherblöcke mit einer Ein-Bit-Pro-Zelle-Konfiguration zeigen beispielsweise Schreiblatenzen, die um etwa das 2,5- bis 10-fache geringer als die von Speicherblöcken mit einer Multi-Bit-Pro-Zelle-Konfigurationen sind. Ähnlich zeigen Speicherblöcke mit einer Ein-Bit-Pro-Zelle-Konfiguration niedrigere Leselatenzen als Speicherblöcke mit einer Multi-Bit-Pro-Zelle-Konfigurationen.
  • Dieser Kompromiss zwischen Speicherkapazität und Ausführungslatenz lässt bei Speichersystemen in gewissem Umfang maßgeschneiderte Leistungskapazitäten des Speichers zu. Ein Speichersystem, bei dem ein hohes Aufkommen an E-/A-Verkehr vorauszusehen ist, kann beispielsweise selektiv eine höhere Anzahl an Speicherblöcken mit einer Ein-Bit-Pro-Zelle-Konfiguration als an solchen mit einer Multi-Bit-Pro-Zelle-Konfigurationen aufweisen. Umgekehrt kann ein Speichersystem, in dem voraussichtlich eine große Menge an kalten Daten gespeichert wird, selektiv eine höhere Anzahl an Speicherblöcken mit einer Multi-Bit-Pro-Zelle-Konfigurationen als an solchen mit einer Ein-Bit-Pro-Zelle-Konfiguration aufweisen. Die Echtzeitnutzung weicht jedoch häufig von den Vorhersagen ab, die bei der Konstruktion dieser Speichersysteme berücksichtigt worden sein können. Dadurch waren herkömmliche Speichersysteme nicht geeignet, eine effiziente Leistung zu halten.
  • In scharfem Kontrast zu den vorstehend aufgeführten, von herkömmlichen Systemen gezeigten Nachteilen implementieren verschiedene der hierin aufgenommenen Ausführungsformen Hybridsteuerungen, die zur dynamischen Anpassung von Block-Pool-Größen entsprechend z. B. den aktuellen Nutzungs- und Arbeitslastmerkmalen geeignet sind, wie nachstehend genauer beschrieben.
  • Wird nun 5 betrachtet, ist ein nicht flüchtiges Speichermodul 500 mit einer Hybridsteuerung 502 gemäß einer Ausführungsform dargestellt. Als eine Option kann das vorliegende Speichermodul 500 in Verbindung mit Merkmalen jeder anderen hier aufgeführten Ausführungsform wie den unter Bezugnahme auf die weiteren Figuren beschriebenen implementiert werden. Ein derartiges Speichermodul 500 und weitere hier vorgestellte können jedoch in unterschiedlichen Anwendungen und/oder in Abwandlungen verwendet werden, die in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben sein können, aber nicht sein müssen. Ferner kann das hier vorgestellte Speichermodul 500 in jeder gewünschten Umgebung verwendet werden. Somit kann 5 (und die anderen Figuren) als jede mögliche Permutation einschließend betrachtet werden.
  • Wie vorstehend ausgeführt, weist das Speichermodul 500 eine Hybridsteuerung 502 auf, die zum Verwalten und/oder Einstellen von Blöcken geeignet ist, die im (hier auch als „SLC-Modus“ (SLC, single-level cell) bezeichneten) Ein-Bit-Pro-Zelle-Modus sowie im Multi-Bit-Pro-Zelle-Modus konfiguriert sind. Gemäß einigen Ansätzen verwaltet die Hybridsteuerung 502 die unterschiedlichen Blockkonfigurationen durch ihre Aufteilung in zwei unterschiedliche Pools 504, 506. Einer dieser Pools 504 ist so festgelegt, dass er die Blöcke umfasst, die im SLC-Modus konfiguriert sind, wogegen der andere Pool 506 die im Multi-Bit-Pro-Zelle-Modus konfigurierten Blöcke umfasst.
  • Jeder der Pools 504, 506 erstreckt sich über eine Reihe von Datenspeicherkomponenten (z.B. NVRAM-Speichermodule wie NAND-Flash-Speichervorrichtungen), die gemeinsam als Speicheranordnung 508 dienen. Es folgt, dass die in 5 dargestellten unterschiedlichen Komponenten als Speicherkarte fungieren und in Bezug auf die Speicherkarte 100 gemäß 1 jeden der vorstehend beschriebenen Ansätze implementieren können.
  • Weiterhin Bezug nehmend auf 5 ist die Hybridsteuerung 502 auch mit einem Cache-Speicher 510 sowie einem Netzkoppler (Gateway) 512 gekoppelt, der Datenbefehle von einem oder mehreren Hosts, Speichersystemen, laufenden Anwendungen, etc. empfängt. Der Netzkoppler 512 ist wiederum mit einem GPP 514 und einem GPP-Speicher 516 gekoppelt. Wie vorstehend erwähnt, kann der GPP 514 jeder gewünschte Typ wie z.B. ein ASIC, ein FPGA, eine CPU, etc. sein. Ähnlich kann der GPP-Speicher 516 jeder gewünschte Typ wie z.B. ein RAM, ein ROM, ein batteriegepuffertes DRAM, ein Phasenwechselspeicher, ein PC-RAM, ein MRAM, ein STT-MRAM, etc. und/oder Kombinationen dieser sein.
  • Es folgt, dass die Hybridsteuerung Daten, auf die häufig zugegriffen wird (die z.B. gelesen, überschrieben, angehängt werden, etc.), in Blöcken speichern kann, die im SLC-Modus konfiguriert und daher in dem ersten Pool 504 enthalten sind, wogegen Daten, auf die weniger häufig zugegriffen wird, in Blöcken gespeichert werden, die im Multi-Bit-Pro-Zelle-Modus konfiguriert und daher in dem zweiten Pool 506 enthalten sind. Da eine Hybridsteuerung genutzt werden kann, um Benutzerschreibvorgänge zuerst in Blöcken zu platzieren, die im SLC-Modus konfiguriert sind, während später im Hintergrund nur noch gültige Daten in Multi-Bit-Pro-Zelle-Blöcke ausgelagert werden, wird dadurch die Anzahl der an Blöcken in dem zweiten Pool ausgeführten Schreiboperationen erheblich verringert, so dass die Gesamtlebensdauer erhöht wird. Dieses Speicherschema erzielt eine effiziente Nutzung der unterschiedlichen Blöcke des Speichers und ihrer jeweiligen Leistungsmerkmale. Wenn jedoch das Verhältnis heißer und kalter Daten, die in dem Speichermodul 500 gespeichert sind, im Laufe der Zeit fluktuiert, kann jeder der jeweiligen Pools 504, 506 unausgelastet und/oder überlastet sein.
  • Dementsprechend kann die Hybridsteuerung 502 zur dynamischen Anpassung entsprechend tatsächlichen Nutzungs- und/oder Arbeitslastmerkmalen jeden der Blöcke in dem ersten und/oder zweiten Pool 504, 506 selektiv rekonfigurieren. Dies ermöglicht unabhängig von der Menge an darin gespeicherten heißen oder kalten Daten die Aufrechterhaltung einer effizienten Leistung des Speichermoduls 500. Wird nun 6A betrachtet, ist ein Verfahren 600 zum Einstellen von Block-Pool-Größen in einem Speichersystem gemäß einer Ausführungsform gezeigt. Das Verfahren 600 kann gemäß der vorliegenden Erfindung in unterschiedlichen Ausführungsformen unter anderem in jeder der in den 1 - 5 dargestellten Umgebungen ausgeführt werden. Selbstverständlich können mehr oder weniger Operationen als die in 6A im Besonderen beschriebenen in das Verfahren 600 einbezogen werden, wie es für Fachleute bei der Lektüre der vorliegenden Beschreibungen ersichtlich ist. Die unterschiedlichen in das Verfahren 600 einbezogenen Prozesse sind beispielsweise nachstehend im Kontext der Umwandlung von im SLC-Modus konfigurierten Speicherblöcken in im Multi-Bit-Pro-Zelle-Modus konfigurierte beschrieben. Jeder einzelne oder mehrere der unterschiedlichen an dem Verfahren 600 beteiligten Prozesse können jedoch im Kontext der Umwandlung von im Multi-Bit-Pro-Zelle-Modus konfigurierten Speicherblöcken in im SLC-Modus konfigurierte angewendet werden (siehe z.B. nachstehend 6B).
  • Jeder der Schritte des Verfahrens 600 kann durch jede geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei unterschiedlichen Ausführungsformen kann das Verfahren 600 beispielsweise teilweise oder vollständig von einer Hybridsteuerung, einer Steuerung, einem Prozessor, einem Computer, etc. oder einer anderen Vorrichtung mit einem oder mehreren Prozessoren ausgeführt werden. Somit kann bei einigen Ausführungsformen das Verfahren 600 ein computerimplementiertes Verfahren sein. Bei derartigen Ausführungsformen kann der zur Implementierung des Verfahrens verwendete Computer selbst ein Speichermodul oder einen Teil desselben wie z.B. die Hybridsteuerung aufweisen. Darüber hinaus können die Begriffe Computer, Prozessor und Steuerung hier in Bezug auf jede der Ausführungsformen austauschbar verwendet werden, da derartige Komponenten bei den zahlreichen unterschiedlichen Abwandlungen der vorliegenden Erfindung als Äquivalente betrachtet werden.
  • Darüber hinaus kann bei den Ausführungsformen mit einem Prozessor der Prozessor, z.B. eine Verarbeitungsschaltung (Verarbeitungsschaltungen), ein Chip (Chips) und/oder ein Module (Module), die als Hardware und/oder Software implementiert sind und vorzugsweise zumindest eine Hardware-Komponente aufweisen, in einer beliebigen Vorrichtung zum Ausführen eines oder mehrerer Schritte des Verfahrens 600 verwendet werden. Beispielhafte Prozessoren umfassen eine Zentraleinheit (CPU, central processing unit), eine anwendungsspezifische integrierte Schaltung (ASIC, application specific integrated circuit), eine feldprogrammierbare Gatteranordnung (FPGA, field programmable gate array), etc., Kombinationen dieser oder jede andere geeignete, nach dem Stand der Technik bekannte Rechenvorrichtung, sind jedoch nicht darauf beschränkt.
  • Wie in 6A gezeigt, umfasst Ablauf 602 des Verfahrens 600 das Ermitteln der Größe einer ersten RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) und der Größe einer zweiten RTU-Warteschlange. Sowohl die erste als auch die zweite RTU-Warteschlange umfassen Speicherblöcke, die jeweils in einen ersten und einen zweiten Pool von Speicherblöcken aufgenommen sind. Darüber hinaus umfasst jeder unter dem ersten und dem zweiten Pool Speicherblöcke, die in unterschiedlichen Modi konfiguriert sind. Wie vorstehend erwähnt, umfasst der erste Pool im SLC-Modus konfigurierte Speicherblöcke, wogegen der zweite Pool im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke aufweist. Es folgt, dass die erste RTU-Warteschlange im SLC-Modus konfigurierte Speicherblöcke aufweist, wogegen die zweite RTU-Warteschlange im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke aufweist. Abhängig von dem Ansatz können die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, eine Reihe unterschiedlicher Konfigurationen aufweisen. Bei einigen Ansätzen sind die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, beispielsweise im MLC-Modus (MLC, multi-level cell, mehrere (zwei) Bits pro Zelle) konfiguriert, wogegen bei anderen Ansätzen die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, im TLC-Modus (TLC, triple-level cell, drei Bits pro Zelle) konfiguriert sind. Bei weiteren Ansätzen sind die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, im QLC-Modus (QLC, quad-level cell, vier Bit pro Zelle) konfiguriert, und jeder der im QLC-Modus konfigurierten Blöcke enthält untere Seiten, obere Seiten, Extraseiten und oberste Seiten.
  • In Bezug auf die vorliegende Beschreibung soll die „Größe“ einer gegeben RTU-Warteschlange die Menge der gelöschten Speicherblöcke repräsentieren, die darin aufgenommen sind. Anfangs, wenn keine Daten in die Vorrichtung geschrieben sind, repräsentiert die Größe einer RTU-Warteschlange die Gesamtspeicherkapazität, da sämtliche Blöcke gelöscht und entsprechend ihrem Modus in der RTU-Warteschlange platziert sind. Mit der Zeit, wenn Daten in das nicht flüchtige Speichermodul geschrieben werden, werden neue LEBs für die Datenplatzierung geöffnet, indem Blöcke aus den jeweiligen RTUs genommen werden, wodurch sich ihre Größe verringert. An einem gewissen Punkt führt das Öffnen und Schließen von LEBs bei einer der RTUs zu einem niedrigen Warteschlangenstand, wobei dies der Zeitpunkt ist, zu dem die Speicherbereinigung ausgeführt werden muss. Die Größe der RTU kann durch eine Anzahl an Blöcken, die die RTU-Warteschlange umfasst, die kombinierte Speicherkapazität der Blöcke, die die RTU-Warteschlange umfasst, einen Prozentsatz der Gesamtzahl an in dem übergeordneten System enthaltenen Blöcken, die die RTU-Warteschlange umfasst, etc. repräsentiert (z.B. unter Verwendung dieser quantifiziert) werden. Gemäß einigen Ansätzen wird die Größe der ersten und/oder der zweiten RTU-Warteschlange durch tatsächliches Überprüfen der Warteschlangen selbst, Abrufen der Informationen von einem Zähler, eine Abruftabelle, die Durchsicht eines Operationsprotokolls, etc. ermittelt.
  • Darüber hinaus schließt die Entscheidung 604 das Bestimmen ein, ob eine Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt. Es folgt, dass dieser erste Bereich bei bevorzugten Ansätzen für die erste RTU-Warteschlange spezifisch ist. Bei einigen Ansätzen kann der erste Bereich jedoch bei der ersten RTU-Warteschlange sowie der zweiten RTU-Warteschlange der gleiche oder ein ähnlicher sein. Die erste RTU-Warteschlange entspricht vorzugsweise auch einem Speicherbereinigungsschwellenwert der ersten RTU-Warteschlange, so dass als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, unerwünscht gering ist, eine Speicherbereinigungsoperation ausgeführt wird. Die Speicherbereinigungsprozesse verschieben gültige Daten aus einem oder mehreren der Blöcke in dem ersten Pool, so dass der eine oder die mehreren Blöcke in der ersten RTU-Warteschlange platziert werden können, wodurch z.B. die Anzahl an darin aufgenommenen Blöcken erhöht wird, wie bald ersichtlich wird. Es ist jedoch darauf hinzuweisen, dass „in einem ersten Bereich“ die Erfindung in keiner Weise einschränken soll. Statt zu bestimmen, ob ein Wert in einem gegebenen Bereich liegt, können abhängig von dem gewünschten Ansatz äquivalente Bestimmungen vorgenommen werden, z.B., ob ein Wert über einem vorgegebenen Schwellenwert liegt, ob ein Wert außerhalb eines vorgegebenen Bereichs liegt, ob ein absoluter Wert über einem Schwellenwert liegt, ob ein Wert unter einem Schwellenwert liegt, etc.
  • Wie bereits erwähnt, wird das Verfahren 600 als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem ersten Bereich der ersten RTU-Warteschlange liegt, mit dem Ablauf 606 fortgesetzt. Hier umfasst der Ablauf 606 das Auswählen eines der Blöcke in dem ersten Pool, wogegen der Ablauf 608 das Verschieben sämtlicher gültigen Daten aus dem ausgewählten Block umfasst. Der in Ablauf 606 ausgewählte Block wird einem Speicherbereinigungsprozess unterzogen, der in Ablauf 608 eingeleitet wird. Es folgt, dass bei einigen Ansätzen der Block mit den meisten darin enthaltenen ungültigen Daten unter sämtlichen der Blöcke in dem ersten Pool ausgewählt wird. Es können jedoch bei dem Prozess der Auswahl eines der Blöcke in dem ersten Pool, der einem Speicherbereinigungsprozess unterzogen werden soll, beliebige weitere gewünschte Faktoren berücksichtigt werden. So können bei der Auswahl eines der Blöcke in dem ersten Pool beispielsweise ein Alter jedes der Blöcke, eine Menge an gültigen Daten, die in jedem der Blöcke enthalten ist, etc. berücksichtigt werden.
  • Das Verschieben der gültigen Daten aus dem ausgewählten Block kann weiterhin auf jede gewünschte Art und Weise ausgeführt werden. So können die gültigen Daten bei einigen Ansätzen beispielsweise temporär in einem Cache (siehe z.B. den Cache-Speicher 510 in 5) gespeichert werden, bevor sie in einem anderen Block des Speichers gespeichert werden. Bei anderen Ansätzen können die gültigen Daten direkt in einen anderen Block des Speichers übertragen werden. Als Reaktion auf das Verschieben der gültigen Daten aus dem ausgewählten Block umfasst der Ablauf 610 das Löschen des ausgewählten Blocks.
  • Fortfahrend mit Ablauf 612 umfasst das Verfahren 600 das Platzieren des ausgewählten (und nun gelöschten) Blocks in der ersten RTU-Warteschlange, die dem ersten Pool entspricht. Wie vorstehend erwähnt, umfassen sowohl die erste als auch zweite RTU-Warteschlange Speicherblöcke, die jeweils in einen ersten und einen zweiten Pool von Speicherblöcken aufgenommen sind. Dementsprechend wird durch Ausführen eines Speicherbereinigungsvorgangs an dem ausgewählten Block und seine Platzierung in der ersten RTU-Warteschlange der ausgewählte Block effektiv verwendet, um die erste RTU-Warteschlange füllen zu helfen. Dadurch werden wünschenswerterweise Latenzprobleme vermieden, indem sichergestellt wird, dass eine vorgegebene Anzahl an verfügbaren (z.B. leeren) Blöcken in der ersten RTU-Warteschlange enthalten ist.
  • Es ist auch darauf hinzuweisen, dass bei einigen Ansätzen ein Block einer Rekalibrierung des Leseschwellenspannungs-Verschiebungswerts unterzogen wird, wenn Daten in den Seiten gespeichert sind und der Block noch nicht gelöscht ist. Dementsprechend schließt der Prozess des Platzierens des ausgewählten (und nun gelöschten) Blocks in der ersten RTU-Warteschlange bei einigen Ansätzen das Markieren des Blocks zur Rekalibrierung des Leseschwellenspannungs-Verschiebungswerts (der Leseschwellenspannungs-Verschiebungswerte) ein. Der Leseschwellenspannungs-Verschiebungswert kann unter Verwendung beliebiger Prozesse rekalibriert werden, die für Fachleute nach der Lektüre der vorliegenden Beschreibung ersichtlich sind. Das Kalibrieren der Leseschwellenspannungs-Verschiebungswerte kann beispielsweise zu dem Zeitpunkt ausgeführt werden, zu dem die Seiten in dem Block tatsächlich programmiert werden. Somit müssen Leseschwellenspannungs-Verschiebungswerte nicht tatsächlich direkt nach dem Löschen des Blocks rekalibriert werden. Stattdessen wartet ein gelöschter Block, der zur Kalibrierung des Leseschwellenspannungs-Verschiebungswerts markiert wurde, zum Ausführen der Kalibrierung, bis der Block wieder neu programmiert wird.
  • Weiterhin Bezug nehmend auf 6A wird das Verfahren 600 von Ablauf 612 auf Ablauf 602 zurückgesetzt, so dass z.B. die Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Zurückgesetzt auf die Entscheidung 604 wird das Ablaufdiagramm als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt, mit der Entscheidung 614 fortgesetzt. Anders ausgedrückt wird das Verfahren 600 nach der Entscheidung 604 als Reaktion auf die Bestimmung, dass die ersten RTU-Warteschlange eine gewünschte Anzahl an Speicherblöcken enthält, mit der Entscheidung 614 fortgesetzt. Erneut entspricht dieser erste Bereich der ersten RTU-Warteschlange und kann von einem Benutzer vorgegeben werden, auf Industriestandards basieren, entsprechend der Systemleistung eingestellt werden, etc.
  • Die Entscheidung 614 weist das Bestimmen auf, ob die Größe des ersten Pools verringert werden sollte. Anders ausgedrückt wird bei der Entscheidung 614 bestimmt, ob die Anzahl der Speicherblöcke, die in dem ersten Pool enthalten sind, unerwünscht oder zumindest unnötig hoch ist. Diese Bestimmung kann durch Vergleichen einer Sollgröße des ersten Pools mit der aktuellen (z.B. tatsächlichen) Größe des ersten Pools erfolgen. Die Anzahl der Speicherblöcke in dem ersten Pool umfasst sämtliche Blöcke in dem entsprechenden Modus, die dem ersten Pool zugeordnet sind, unabhängig davon, ob sich der Block in einem geöffneten oder geschlossenen LEB oder in der ersten RTU befindet. Die Sollgröße des ersten Pools kann von einem Benutzer vorgegeben werden, entsprechend prognostizierten Arbeitslasten des übergeordneten Systems festgelegt sein, etc.
  • Als Reaktion auf die Bestimmung, dass die Größe des ersten Pools nicht verringert werden sollte, wird das Verfahren 600 auf Ablauf 602 zurückgesetzt, so dass z.B. die Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Das Verfahren 600 wird jedoch nach der Entscheidung 614 als Reaktion auf die Bestimmung, dass die Größe des ersten Pools verringert werden sollte, mit der Entscheidung 616 fortgesetzt. Dort umfasst die Entscheidung 616 das Bestimmen, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt. Es folgt, dass dieser zweiten Bereich vorzugsweise spezifisch für die zweite RTU-Warteschlange ist. Es ist jedoch auch darauf hinzuweisen, dass bei einigen Ansätzen der zweite Bereich bei der ersten RTU-Warteschlange sowie der zweiten RTU-Warteschlange der gleiche oder ein ähnlicher sein kann. Dieser zweite Bereich der zweiten RTU-Warteschlange kann bei bevorzugten Ansätzen auch dergestalt einem „Boost-Schwellenwert“ entsprechen, dass bei der Bestimmung, ob Blöcke aus einem Pool in einen anderen übertragen werden sollen, die RTU-Warteschlange der Zielspeicherstelle geprüft wird. Dadurch wird durch Verhindern der Übertragung von Blöcken unter Pools noch bevor der Ziel-Pool seine Kapazität erreicht hat wünschenswerterweise sichergestellt, dass die Zielspeicherstelle nicht überbelegt ist. Anders ausgedrückt wird selbst dann, wenn die erste RTU-Warteschlange und der erste Pool (z.B. die „Quellenspeicherstelle“) ausreichend mit Speicherblöcken gefüllt sind, auch der Status der zweiten RTU-Warteschlange (z.B. der „Zielspeicherstelle“) berücksichtigt, bevor entschieden wird, Speicherblöcke aus dem ersten Pool auszulagern. Darüber hinaus kann der Boost-Schwellenwert in Echtzeit entsprechend einer aktuellen Menge an Blocktransfers, die mit den aktuellen Arbeitslastmerkmalen einhergehen, dynamisch eingestellt werden. Bei einer bevorzugten Ausführungsform liegt der Boost-Schwellenwert über dem Schwellenwert, bei dem die Speicherbereinigung in dem gleichen Pool beendet wird. Bei einigen Ansätzen, die die Größenanpassung der Block-Pools einschließen, kann der Boost-Schwellenwert des Ziel-Pools (z.B. des „empfangenden“ Pools) proportional zu der Anzahl an Blöcken verringert werden, deren Hinzukommen erwartet wird. Diese Verringerung kann entweder bei einer Erhöhung des Boost-Schwellenwerts für den Quellen-Pool oder nach der Extraktion eines Blocks aus dem Quellen-Pool ausgeführt werden.
  • Die Bewertung sowohl der Quellenspeicherstelle als auch Zielspeicherstelle ist insbesondere wünschenswert, weil dadurch unnötiger Verarbeitungsaufwand vermieden wird. Genauer kann eine Größenanpassung von Block-Pools die E-/A-Latenz und den Durchsatz des Gesamtsystems beeinflussen. Dies liegt zumindest teilweise daran, dass Blocktransfers die Blöcke in einer der RTU-Warteschlangen erschöpfen können, was potentiell zu Verarbeitungsverzögerungen führt. Selbst wenn die RTU-Warteschlangen nicht erschöpft sind, können Blocktransfers die Anzahl an freien Blöcken in einem gegebenen Pool unter ein gewünschtes Niveau absenken, wodurch ein aggressiveres Ausführen von Speicherbereinigungsoperationen verursacht wird. Der Mehraufwand, der aus den zusätzlichen Speicherbereinigungsvorgängen resultiert, würde zu einer unerwünschten Drosselung von Host-Operationen führen. Weiterhin verursacht das Ändern der Konfiguration bzw. des „Modus“ eines gegeben Blocks Aufwand. So werden beim Wechsel zwischen Blockkonfigurationsmodi beispielsweise zusätzliche Steuerungsmetadaten aktualisiert. Darüber hinaus schafft der Prozess des Verschiebens gültiger Daten aus einem Block, der rekonfiguriert wird, und/oder der Rekalibrierung des Schwellenspannungs-Verschiebungswerts (der Schwellenspannungs-Verschiebungswerte) des Blocks zusätzlichen Verarbeitungsaufwand.
  • Es folgt, dass durch das Bewerten der Quellenspeicherstelle sowie der Zielspeicherstelle vor dem Ausführen einer Speicherblockübertragung zwischen diesen das System derartige Transfers beschränken und dadurch wünschenswerterweise unnötigen Verarbeitungsaufwand vermeiden kann. Es ist auch darauf hinzuweisen, dass „in einem zweiten Bereich“ die Erfindung in keiner Weise einschränken soll. Wie vorstehend ausgeführt, können abhängig von dem gewünschten Ansatz statt der Bestimmung, ob ein Wert in einem gegebenen Bereich liegt, äquivalente Bestimmungen vorgenommen werden, z.B. ob ein Wert über einem vorgegebenen Schwellenwert (z.B. dem Boost-Schwellenwert) liegt, ob ein Wert außerhalb eines vorgegebenen Bereichs liegt, ob ein absoluter Wert über einem Schwellenwert liegt, ob ein Wert unter einem Schwellenwert liegt, etc.
  • Die Größenanpassung der Pools wird ferner intelligent durch Beschränken der Geschwindigkeit der Größenanpassung auf die Geschwindigkeit ermöglicht, mit der in dem Ziel-Pool Blöcke verbraucht werden. Anders ausgedrückt wird der Gesamtaufwand weiter minimiert, da die Bewertung der Quellen- und Zielspeicherstellen das Aufschieben der Speicherbereinigung von Blöcken selbst dann erleichtert, wenn die Größe der Pools angepasst werden muss, wodurch die Menge an ungültig gemachten Daten in zur Speicherbereinigung ausgewählten Blöcken bei der Größenanpassung maximiert und somit die Anzahl an zu verschiebenden gültigen Seiten verringert wird, wodurch der Schreibfaktor effektiv verringert wird.
  • Weiterhin Bezug nehmend auf 6A wird das Verfahren 600 als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in dem zweiten Bereich der zweiten RTU-Warteschlange liegt, von der Entscheidung 616 auf Ablauf 602 zurückgesetzt. Wie vorstehend erwähnt, ermöglicht dies dem Verfahren 600 die Fortsetzung der Überwachung der Größen der ersten und/oder der zweiten RTU-Warteschlange. Alternativ wird das Verfahren 600 als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt, mit der Entscheidung 618 fortgesetzt.
  • Fortfahrend mit der Entscheidung 618 weist das Verfahren 600 dort die Bestimmung auf, ob eine aktuelle Eingangs-/Ausgangs-Arbeitslast (aktuelle E-/A--Arbeitslast), mit der das Speichersystem konfrontiert ist, in einem dritten Bereich liegt. Wie vorstehend angedeutet, ist der Prozess der Übertragung von Speicherblöcken zwischen Pools ein arbeitslastintensiver Prozess, der dadurch Auswirkungen auf die Leistung des übergeordneten Systems haben kann. Dementsprechend kann das Verfahren 600 durch Bewerten der aktuellen E-/A--Arbeitslast des Speichersystems bei der Bestimmung, ob und/oder wann ein Speicherblock zwischen Pools übertragen werden soll, auf geringe E-/A-Arbeitslasten abzielen und die resultierenden Auswirkungen der Verarbeitung verringern. Erneut soll „in einem dritten Bereich“ die Erfindung in keiner Weise einschränken. Wie vorstehend ausgeführt, können abhängig von dem gewünschten Ansatz anstelle der Bestimmung, ob ein Wert in einem gegebenen Bereich liegt, äquivalente Bestimmungen vorgenommen werden, z.B. ob ein Wert über einem vorgegebenen Schwellenwert liegt, ob ein Wert außerhalb eines vorgegebenen Bereichs liegt, ob ein absoluter Wert über einem Schwellenwert liegt, ob ein Wert unter einem Schwellenwert liegt, etc. Es wird auch darauf hingewiesen, dass das Ergebnis der Entscheidung 618 deterministisch oder probabilistisch bestimmt werden kann. Somit kann die Bestimmung, ob ein Wert in einem gegebenen Bereich liegt, auch einschließen, ob der Wert mit einer bestimmten Wahrscheinlichkeit in dem gegebenen Bereich liegt, und die Entscheidung kann basierend auf der Wahrscheinlichkeit erfolgen.
  • Das Verfahren 600 kehrt als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, in dem dritten Bereich liegt, zur Operation 602 zurück. Anders ausgedrückt wird das Verfahren 600 als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast des Speichersystems unerwünscht hoch ist, mit Ablauf 620 fortgesetzt. Das Verfahren 600 wird jedoch als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, nicht in dem dritten Bereich liegt, mit Ablauf 620 fortgesetzt. Dort umfasst der Ablauf 620 das Auswählen eines der Blöcke in dem ersten Pool. Der in Ablauf 620 ausgewählte Block wird einem Speicherbereinigungsprozess unterzogen. Es folgt, dass bei einigen Ansätzen der Block, der die meisten ungültigen Daten enthält, unter sämtlichen Blöcken in dem ersten Pool ausgewählt wird. Bei dem Prozess des Auswählens eines der Blöcke in dem ersten Pool, der einem Speicherbereinigungsprozess unterzogen werden soll, können jedoch beliebige andere gewünschte Faktoren berücksichtigt werden. So können beispielsweise ein Alter jedes der Blöcke, eine Menge an in jedem der Blöcke enthaltenen gültigen Daten, ob ein gegebener Block für eine Übertragung auswählbar ist, etc. bei der Auswahl eines der Blöcke in dem ersten Pool berücksichtigt werden.
  • Die Operation 622 weist ferner das Verschieben gültiger Daten aus dem ausgewählten Block in den ersten Pool auf. Das Verschieben der gültigen Daten aus dem ausgewählten Block kann abhängig von dem Ansatz auf jede gewünschte Art und Weise ausgeführt werden. Die gültigen Daten können bei einigen Ansätzen vor der Speicherung in einem anderen Block des Speichers beispielsweise temporär in einem Cache (siehe z.B. den Cache-Speicher 510 in 5) gespeichert werden. Bei anderen Ansätzen können die gültigen Daten direkt in einen anderen Block des Speichers übertragen werden. Als Reaktion auf das Verschieben der gültigen Daten aus dem ausgewählten Block weist die Operation 624 das Löschen des ausgewählten Blocks auf.
  • Weiterhin umfasst Operation 626 das Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht. Gemäß der vorliegenden Beschreibung verbleibt ein Block, der zwischen RTU-Warteschlangen und/oder Pools „übertragen“ wird, auf einer gleichen Ebene und in einem gleichen Kanal des Speichers (siehe z.B. 4). Anders ausgedrückt bewegen sich die Blöcke selbst nicht physisch in dem Speicher, obwohl sich die funktionalen Eigenschaften des gegebenen Blocks als Ergebnis einer Aktivierung und/oder Deaktivierung bestimmter Bits in jeder der darin enthaltenen Zellen ändern können. Vielmehr werden die Blöcke in einem logischen Sinn zwischen RTU-Warteschlangen und/oder Pools „übertragen“. Bei einigen Ansätzen sind diese Übertragungen in einer LPT, einer Blockstatustabelle, einem Operationsprotokoll, etc. angegeben.
  • Erneut enthält der erste Pool (zusammen mit der ersten RTU-Warteschlange) im SLC-Modus konfigurierte Speicherblöcke, wogegen der zweite Pool (zusammen mit der zweiten RTU-Warteschlange) im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke enthält. Da jeder unter dem ersten und dem zweiten Pool Speicherblöcke umfasst, die in unterschiedlichen Modi konfiguriert sind, umfasst der Prozess der tatsächlichen Übertragung des ausgewählten Blocks er Operation 626 daher das Rekonfigurieren des Blocks. Unter momentaner Bezugnahme auf 6C sind beispielhafte Unterprozesse zur Übertragung eines gegebenen Blocks zwischen dem ersten Pool und der zweiten RTU-Warteschlange gemäß einer Ausführungsform dargestellt, von denen einer oder mehrere zum Ausführen der nachstehenden Operation 626 gemäß 6A und/oder der nachstehenden Operation 656 gemäß 6B verwendet werden können. Es ist jedoch darauf hinzuweisen, dass in 6C die Unterprozesse gemäß einer Ausführungsform dargestellt sind, die die Erfindung in keiner Weise einschränken soll.
  • Wie gezeigt, weist das Ablaufdiagramm gemäß 6C das Rekonfigurieren des ausgewählten Blocks auf. Siehe Unterablauf 670. Abhängig davon, ob der ausgewählte Block aus dem ersten Pool in die zweite RTU-Warteschlange oder aus dem zweiten Pool in die erste RTU-Warteschlange übertragen wird, kann der Prozess des Rekonfigurierens des Blocks des Speichers unterschiedlich ausgeführt werden. So werden beispielsweise Blöcke, die aus dem ersten Pool in die zweite RTU-Warteschlange übertragen werden, vorzugsweise aus dem SLC-Modus in den Multi-Bit-Pro-Zelle-Modus rekonfiguriert. Blöcke, die aus dem zweiten Pool in die erste RTU-Warteschlange übertragen werden, werden jedoch vorzugsweise aus dem Multi-Bit-Pro-Zelle-Modus in den SLC-Modus rekonfiguriert. Der Prozess der Rekonfiguration eines Blocks zwischen SLC- und Multi-Bit-Pro-Zelle-Modus kann durch Deaktivieren und/oder Reaktivieren bestimmter der Bits, die in dem Block enthalten sind, logisches Neudefinieren des gegebenen Blocks, etc. oder unter Verwendung beliebiger Prozesse ausgeführt werden, die für Fachleute nach der Lektüre der vorliegenden Beschreibung offensichtlich sind.
  • Die Rekalibrierung eines Blocks hat eine Auswirkung auf die Leistung des Blocks. So können sich beispielsweise die mit dem Zugriff auf den gegebenen Block in dem zweiten Pool in Zusammenhang stehenden Leseschwellenspannungs-Verschiebungswerte aufgrund der Verwendung des Blocks in dem ersten Pool verändert haben. Dementsprechend umfasst das Ablaufdiagramm auch die Markierung des Blocks zur Rekalibrierung der Leseschwellenspannungs-Verschiebungswerte in den Zielmodus, sowie der Block erneut programmiert wird. Siehe Unterablauf 672. Die Leseschwellenspannungs-Verschiebungswerte können unter Verwendung beliebiger Prozesse rekalibriert werden, die für Fachleute nach der Lektüre der vorliegenden Beschreibung ersichtlich sind. Bei einigen Ansätzen kann jedoch vom Speicher (z.B. über eine Abruftabelle) auf die Leseschwellenspannungs-Verschiebungswerte zugegriffen werden, sie können vorgegeben, spontan dynamisch eingestellt werden, etc. Darüber hinaus umfasst der Unterablauf 672 bei einigen Ansätzen die Rekalibrierung eines oder mehrerer Leseschwellenspannungs-Verschiebungswerte für jedes aktive Bit in dem gegebenen Block.
  • Erneut Bezug nehmend auf 6A kehrt das Verfahren 600 von Operation 626 zur Operation 602 zurückgesetzt, so dass z.B. die Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Es folgt, dass das Verfahren 600 bei gleichzeitiger Aufrechterhaltung einer effizienten Leistung des übergeordneten Speichersystems Block-Pool-Größen erfolgreich in Echtzeit anpassen kann.
  • Wie bereits erwähnt, können einer oder mehrere der unterschiedlichen Prozesse, die das Verfahren 600 aufweist, im Kontext der Umwandlung im Multi-Bit-Pro-Zelle-Modus konfigurierter Speicherblöcke in SLC-Modus konfigurierte angewendet werden. Wird nun 6B betrachtet, ist dementsprechend ein Verfahren 630 zum Einstellen von Block-Pool-Größen in einem Speichersystem gemäß einer weiteren Ausführungsform gezeigt. Das Verfahren 630 gemäß der vorliegenden Erfindung kann in unterschiedlichen Ausführungsformen in jeder der unter Anderem in den 1 - 6A dargestellten Umgebungen ausgeführt werden. Selbstverständlich können mehr oder weniger Abläufe als die in 6B spezifisch beschriebenen in das Verfahren 630 aufgenommen werden, wie für Fachleute bei der Lektüre der vorliegenden Beschreibungen ersichtlich. Die unterschiedlichen Prozesse, die das Verfahren 630 umfasst, sind nachstehend beispielsweise im Kontext der Umwandlung im Multi-Bit-Pro-Zelle-Modus konfigurierter Speicherblöcke in im SLC-Modus konfigurierte beschrieben. Es folgt, dass jeder einzelne oder mehrere der vorstehend in Bezug auf das Verfahren 600 gemäß 6A beschriebenen Ansätze wie gewünscht in dem Verfahren 630 implementiert werden können.
  • Jeder der Schritte des Verfahrens 630 kann auch durch jede geeignete Komponente der Betriebsumgebung ausgeführt werden. So kann beispielsweise bei unterschiedlichen Ausführungsformen das Verfahren 630 teilweise oder vollständig von einer Hybridsteuerung, einer Steuerung, einem Prozessor, einem Computer, etc. oder einer anderen Vorrichtung ausgeführt werden, die einen oder mehrere Prozessoren aufweist. Somit kann das Verfahren 630 bei einigen Ausführungsformen ein computerimplementiertes Verfahren sein. Bei derartigen Ausführungsformen kann der zur Implementierung des Verfahrens verwendete Computer selbst ein Speichermodul oder einen Teil desselben aufweisen, wie z.B. die Hybridsteuerung. Darüber hinaus können die Begriffe Computer, Prozessor und Steuerung in Bezug auf jede der Ausführungsformen hier austauschbar verwendet werden, wobei derartige Komponenten bei den zahlreichen unterschiedlichen Abwandlungen der vorliegenden Erfindung als Äquivalente betrachtet werden.
  • Darüber hinaus kann bei den Ausführungsformen mit einem Prozessor der Prozessor, z.B. eine Verarbeitungsschaltung (Verarbeitungsschaltungen), ein Chip (Chips) und/oder ein Modul (Module), die als Hardware und/oder Software implementiert sind und vorzugsweise zumindest eine Hardware Komponente aufweisen, in einer beliebigen Vorrichtung zum Ausführen eines oder mehrerer Schritte des Verfahrens 630 genutzt werden. Beispielhafte Prozessoren umfassen eine Zentraleinheit (CPU, central processing unit), eine anwendungsspezifische integrierte Schaltung (ASIC, application specific integriert circuit), eine feldprogrammierbare Gatteranordnung (FPGA, field programmable gate array), etc., Kombinationen dieser oder eine beliebige andere geeignete nach dem Stand der Technik bekannte Rechenvorrichtung, sind jedoch nicht darauf beschränkt.
  • Wie in 6B gezeigt, weist Operation 632 des Verfahrens 630 die Ermittlung der Größe einer ersten RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) und der Größe einer zweiten RTU-Warteschlange auf. Jede unter der ersten und der zweiten RTU-Warteschlange umfasst Speicherblöcke, die jeweils in einen ersten und einen zweiten Pool von Speicherblöcken aufgenommen sind. Darüber hinaus enthält jeder unter dem ersten und dem zweiten Pool Speicherblöcke, die in unterschiedlichen Modi konfiguriert sind. Wie vorstehend erwähnt, umfasst der erste Pool im SLC-Modus konfigurierte Speicherblöcke, wogegen der zweite Pool im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke umfasst. Es folgt, dass die erste RTU-Warteschlange im SLC-Modus konfigurierte Speicherblöcke umfasst, wogegen die zweite RTU-Warteschlange im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke umfasst.
  • Erneut soll in Bezug auf die vorliegende Beschreibung die „Größe“ einer gegebenen RTU-Warteschlange die Menge an gelöschten Speicherblöcken repräsentieren, die darin enthalten sind. Die Größe einer RTU-Warteschlange repräsentiert dadurch die Gesamtspeicherkapazität der gegebenen RTU-Warteschlange und kann durch eine Anzahl an Blöcken, die die RTU-Warteschlange umfasst, die kombinierte Speicherkapazität der Blöcke, die die RTU-Warteschlange umfasst, einen Prozentsatz der Gesamtzahl an in dem übergeordneten System enthaltenen Blöcken, die die RTU-Warteschlange umfasst, etc. repräsentiert (z.B. unter Verwendung dieser quantifiziert) werden. Gemäß einigen Ansätzen wird die Größe der ersten und/oder der zweiten RTU-Warteschlange durch eine tatsächliche Überprüfung der Warteschlangen selbst, das Abrufen der Informationen aus einer Abruftabelle, die Durchsicht eines Operationsprotokolls, etc. ermittelt.
  • Darüber hinaus umfasst die Entscheidung 634 die Bestimmung, ob eine Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in einem ersten Bereich der zweiten RTU-Warteschlange liegt. Wie vorstehend ausgeführt, entspricht dieser erste Bereich bei bevorzugten Ansätzen einem SpeicherbereinigungsSchwellenwert, so dass als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, unerwünscht gering ist, ein Speicherbereinigungsvorgang ausgeführt wird. Es wird darauf hingewiesen, dass dieser erste Bereich der zweiten RTU zugeordnet ist und z.B. der gleiche oder ein anderer sein kann als der der in dem Verfahren 600 vorgestellten ersten RTU zugeordnete erste Bereich, wie für Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich.
  • Das Verfahren 600 wird als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem ersten Bereich der zweiten RTU-Warteschlange liegt, mit Ablauf 636 fortgesetzt. Dort umfasst die Operation 636 die Auswahl eines der Blöcke in dem zweiten Pool, wogegen die Operation 638 das Verschieben sämtlicher gültiger Daten aus dem ausgewählten Block umfasst. Der bei der Operation 636 ausgewählte Block wird einem Speicherbereinigungsprozess unterzogen, der in Operation 638 eingeleitet wird. Es folgt, dass bei einigen Ansätzen der Block, der die meisten ungültigen Daten enthält, unter sämtlichen Blöcken in dem zweiten Pool ausgewählt wird. Bei dem Prozess der Auswahl eines der Blöcke in dem zweiten Pool, der einem Speicherbereinigungsprozess unterzogen werden soll, können jedoch beliebige weitere gewünschte Faktoren berücksichtigt werden.
  • Als Reaktion auf das Verschieben der gültigen Daten aus dem ausgewählten Block weist die Operation 640 das Löschen des ausgewählten Blocks auf. Fortfahrend mit der Operation 642 weist das Verfahren 630 dort das Platzieren des ausgewählten (und nun gelöschten) Blocks in der zweiten RTU-Warteschlange auf, die dem zweiten Pool entspricht. Es ist auch darauf hinzuweisen, dass bei einigen Ansätzen ein Block einer Leseschwellenspannungs-Verschiebungswert-Rekalibrierung unterzogen wird, wenn Daten in den Seiten gespeichert sind und der Block noch nicht gelöscht ist. Dementsprechend schließt bei einigen Ansätzen der Prozess der Platzierung des ausgewählten (und nun gelöschten) Blocks in der zweiten RTU-Warteschlange das Markieren des Blocks zur Rekalibrierung des Leseschwellenspannungs-Verschiebungswerts (der Leseschwellenspannungs-Verschiebungswerte) ein, z.B. unter Verwendung beliebiger Prozesse, die für Fachleute nach der Lektüre der vorliegenden Beschreibung ersichtlich sind.
  • Weiterhin Bezug nehmend auf 6B kehrt das Verfahren 630 von Operation 642 zur Operation 632 zurück, so dass z.B. die Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Zurückgesetzt auf die Entscheidung 634 wird das Ablaufdiagramm als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der zweiten RTU-Warteschlange liegt, mit Entscheidung 644 fortgesetzt. Dort weist die Entscheidung 644 die Bestimmung auf, ob die Größe des zweiten Pools verringert werden sollte. Anders ausgedrückt wird in der Entscheidung 644 bestimmt, ob die Anzahl an Speicherblöcken, die in dem zweiten Pool enthalten sind, unerwünscht oder zumindest unnötig hoch ist. Diese Bestimmung kann durch einen Vergleich einer Sollgröße des zweiten Pools mit der aktuellen (z.B. der tatsächlichen) Größe des zweiten Pools erfolgen.
  • Als Reaktion auf die Bestimmung, dass die Größe des zweiten Pools nicht verringert werden sollte, kehrt das Verfahren 630 zur Operation 632 zurück, so dass z.B. Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Das Verfahren 630 wird jedoch als Reaktion auf die Bestimmung, dass die Größe des zweiten Pools verringert werden sollte, von Entscheidung 644 mit Entscheidung 646 fortgesetzt. Dort umfasst die Entscheidung 646 die Bestimmung, ob eine Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der ersten RTU-Warteschlange liegt. Dieser zweite Bereich der ersten RTU-Warteschlange ist der ersten RTU-Warteschlange selbst zugeordnet und entspricht bei bevorzugten Ansätzen einem „Boost-Schwellenwert“, so dass bei der Bestimmung, ob Blöcke aus einem Pool in einen anderen übertragen werden sollen, die RTU-Warteschlange der Zielspeicherstelle bewertet wird. Anders ausgedrückt wird selbst dann, wenn die zweite RTU-Warteschlange und der zweite Pool (z.B. die „Quellenspeicherstelle“) ausreichend mit Speicherblöcken gefüllt sind, auch der Status der ersten RTU-Warteschlange (z.B. der „Zielspeicherstelle“) berücksichtigt, bevor entschieden wird, Speicherblöcke aus dem zweiten Pool auszulagern, was aus den vorstehend besprochenen Gründen besonders wünschenswert ist. Es wird darauf hingewiesen, dass dieser zweite Bereich der ersten RTU zugeordnet ist und z.B. der gleiche oder ein anderer als der der in Verfahren 600 vorgestellten zweiten RTU zugeordnete zweite Bereich sein kann, wie für Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich.
  • Weiterhin Bezug nehmend auf 6B kehrt das Verfahren 630 als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem zweiten Bereich der ersten RTU-Warteschlange liegt, von der Entscheidung 646 auf die Operation 632 zurück. Wie vorstehend erwähnt, ermöglicht dies dem Verfahren 630 die Fortsetzung der Überwachung der Größen der ersten und/oder der zweiten RTU-Warteschlange. Das Verfahren 630 wird alternativ als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der ersten RTU-Warteschlange liegt, mit der Entscheidung 648 fortgesetzt. Dort umfasst die Entscheidung 648 die Bestimmung, ob eine aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, in dem dritten Bereich liegt. Wie vorstehend angedeutet, ist der Prozess der Übertragung von Speicherblöcken zwischen Pools ein arbeitslastintensiver Prozess, der dadurch Auswirkungen auf die Leistung des übergeordneten Systems haben kann. Dementsprechend kann das Verfahren 630 durch das Bewerten der aktuellen E-/A--Arbeitslast des Speichersystems bei der Bestimmung, ob und/oder wann ein Speicherblock zwischen Pools übertragen werden soll, auf geringe E-/A-Arbeitslasten abzielen und die resultierenden Auswirkungen auf die Verarbeitung verringern.
  • Das Verfahren 630 kehrt als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, in dem dritten Bereich liegt, zur Operation 632 zurück. Alternativ wird das Verfahren 630 als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, nicht in dem dritten Bereich liegt, mit Ablauf 650 fortgesetzt. Dort weist der Ablauf 650 die Auswahl eines der Blöcke in dem zweiten Pool auf. Der in Ablauf 650 ausgewählte Block wird einem Speicherbereinigungsprozess unterzogen. Es folgt, dass bei einigen Ansätzen der Block, der die meisten ungültigen Daten enthält, unter sämtlichen der Blöcke in dem ersten Pool ausgewählt wird. Bei dem Prozess der Auswahl eines der Blöcke in dem ersten Pool, der einem Speicherbereinigungsprozess unterzogen werden soll, können jedoch beliebige weitere gewünschte Faktoren berücksichtigt werden.
  • Ablauf 652 umfasst ferner das Verschieben gültiger Daten aus dem ausgewählten Block in den zweiten Pool. Als Reaktion auf das Verschieben der gültigen Daten aus dem ausgewählten Block umfasst Ablauf 654 das Löschen des ausgewählten Blocks. Fortfahrend mit der Entscheidung 656 umfasst das Verfahren 630 dort das Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht. Erneut verbleibt ein Block, der zwischen RTU-Warteschlangen und/oder Pools „übertragen“ wird, auf einer gleichen Ebene und einem gleichen Kanal des Speichers (siehe z.B. 4). Anders ausgedrückt werden, obwohl sich die funktionalen Eigenschaften des gegebenen Blocks aufgrund einer Aktivierung und/oder Deaktivierung bestimmter Bits in jeder der darin enthaltenen Zellen ändern können, die Blöcke selbst in dem Speicher nicht physisch bewegt. Vielmehr werden die Blöcke in einem logischen Sinn zwischen RTU-Warteschlangen und/oder Pools „übertragen“. Bei einigen Ansätzen sind diese Übertragungen in einer LPT, einer Blockstatustabelle, einem Operationsprotokoll, etc. angegeben.
  • Erneut umfasst der zweite Pool (zusammen mit der zweiten RTU-Warteschlange) im Multi-Bit-Pro-Zelle-Modus konfigurierte Speicherblöcke, wogegen der erste Pool (zusammen mit der ersten RTU-Warteschlange) im SLC-Modus konfigurierte Speicherblöcke enthält. Da jeder unter dem ersten und dem zweiten Pool Speicherblöcke enthält, die in unterschiedlichen Modi konfiguriert sind, umfasst der Prozess der tatsächlichen Übertragung des ausgewählten Blocks bei der Operation 656 daher das Rekonfigurieren des Blocks. Unter erneuter momentaner Bezugnahme auf 6C kann jeder der beschriebenen Unterprozesse und/oder spezifischen Ansätze für die Übertragung eines gegebenen Blocks zwischen einem Pool und einer RTU-Warteschlange zum Ausführen des Ablaufs 656 gemäß 6B verwendet werden.
  • Erneut Bezug nehmend auf 6B kehrt das Verfahren 630 von Operation 656 auf Operation 632 zurück, damit z.B. die Größen der ersten und/oder der zweiten RTU-Warteschlange weiterhin überwacht werden können. Dementsprechend kann das Verfahren 630 bei gleichzeitiger Aufrechterhaltung der Leistung des übergeordneten Speichersystems auch in Echtzeit Block-Pool-Größen erfolgreich anpassen.
  • Nun Bezug nehmend auf 7 ist eine Daten- und Blockablaufübersicht 700 gemäß einer Ausführungsform dargestellt. Als eine Option kann die vorliegende Daten- und Blockablaufübersicht 700 in Verbindung mit Merkmalen jeder anderen hier aufgeführten Ausführungsform wie die unter Bezugnahme auf die weiteren Figuren wie die 6A - 6C beschriebenen implementiert werden. Eine derartige Daten- und Blockablaufübersicht 700 und weitere hier vorgestellte können jedoch in unterschiedlichem Anwendungen und/oder in Abwandlungen verwendet werden, die in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben sein können, dies aber nicht sein müssen. Ferner kann die hier vorgestellte Daten- und Blockablaufübersicht 700 in jeder gewünschten Umgebung verwendet werden. Somit kann davon ausgegangen werden, dass 7 (und die weiteren Figuren) jede mögliche Abwandung einschließen.
  • Wie gezeigt, werden Host-Schreibvorgänge von einem Datenplatzierungsmodul 702 empfangen, das einen LEB 704 enthält, der aus einem oder mehreren Blöcken des Speichers besteht, die im SLC-Modus konfiguriert sind, sowie einen LEB 706, der aus einem oder mehreren Blöcken des Speichers besteht, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind. Neue Daten werden bei einigen Ansätzen zunächst in LEBs mit im SLC-Modus konfigurierten Blöcken geschrieben, wodurch ein Profitieren der neuen Daten von den niedrigeren Latenzen und dem höheren Durchsatz ermöglicht wird, der mit Blöcken im SLC-Modus (z.B. im Vergleich zu im Multi-Bit-Pro-Zelle-Modus konfigurierten Blöcken) einhergeht. In Situationen, die mit hohen Host- und internen Schreiblasten verbunden sind, können neue Daten jedoch direkt in Blöcken gespeichert werden, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind. Im SLC-Modus konfigurierte Blöcke werden von einem ersten Satz von RTU-Warteschlangen 708 empfangen, wogegen im Multi-Bit-Pro-Zelle-Modus konfigurierte Blöcke von einem zweiten Satz von RTU-Warteschlangen 710 empfangen werden. Jeder unter dem ersten und dem zweiten Satz von RTU-Warteschlangen 708, 710 weist mehrere Speicherblöcke 712 auf, die z.B. jeweils in RTU-Warteschlangen für unterschiedliche Ebenen und Kanäle 714 zusammengefasst sind, wie es für Fachleute nach der Lektüre der vorliegenden Beschreibung ersichtlich ist.
  • Jede der RTU-Warteschlangen 714, die einer Ebene und einem Kanal zugeordnet und in dem ersten und dem zweiten Satz von RTU-Warteschlangen 708, 710 enthalten ist, ist mit einer Reihe von unterschiedlichen Schwellenwerten dargestellt, die der Anzahl an Speicherblöcken entsprechen, die in der jeweiligen RTU-Warteschlange 714 enthalten sind. Einer dieser Schwellenwerte ist ein Boost-Schwellenwert, der einem der vorstehend beschriebenen zweiten Bereiche (siehe z.B. Entscheidungen 616 und 646) entspricht. Dieser „Boost“-Schwellenwert wird somit bei einigen Ansätzen zur Bestimmung verwendet, ob die jeweilige RTU-Warteschlange und/oder der spezifische Kanal eine unerwünscht geringe Anzahl an Speicherblöcken enthalten. „Hohe“, „niedrige“ und „kritische“ Schwellenwerte sind bei der vorliegenden Ausführungsform ebenfalls implementiert, wobei jeder von ihnen einen anderen Füllstand der jeweiligen Kanäle in dem ersten und dem zweiten Satz von RTU-Warteschlangen 708, 710 aufzeigt.
  • Als Reaktion auf das Füllen eines gegeben Blocks oder Speichers mit Daten an dem Datenplatzierungsmodul 702 wird der LEB an die jeweilige der belegten Blockwarteschlangen übertragen. Genauer werden im SLC-Modus konfigurierte LEBs an die SLC-belegten Blockwarteschlangen 716 übertragen, wogegen die im Multi-Bit-Pro-Zelle-Modus konfigurierten LEBs an die Multi-Bit-pro-Zelle-belegten Blockwarteschlangen 718 übertragen werden. Die Anzahl der in jede der Warteschlangen 716, 718 aufgenommenen LEBs verändert sich im Laufe der Zeit. Daher verändert sich auch die Menge der in jeder der Warteschlangen 716, 718 gespeicherten Informationen (z.B. ihre effektive Größe) im Laufe der Zeit.
  • Im Laufe der Zeit werden die LEBs schließlich aus den Warteschlangen 716, 718 an die Speicherbereinigung und Verschleißausgleichsmodule 720 übergeben. Bei einigen Ansätzen werden die LEBs entsprechend Standard-Speicherbereinigungsprozeduren an die Speicherbereinigung und die Verschleißausgleichsmodule 720 weitergegeben. So kann der LEB beispielsweise für die Speicherbereinigung spezifiziert werden, wenn die Daten in den Blöcken eines LEB im Laufe der Zeit (z.B. aufgrund von Überschreiboperationen, Löschungen, etc.) ungültig gemacht werden. Bei anderen Ansätzen können LEBs jedoch von der Speicherbereinigung und den Verschleißausgleichsmodulen 720 gemäß jedem der vorstehend unter Bezugnahme auf die 6A - 6C beschriebenen Prozesse ausgewählt und verarbeitet werden. Bei einigen Ausführungsformen können LEBs von der Speicherbereinigung oder der Verschleißausgleichsvorrichtung ferner basierend auf der Speicherzeit oder der Anzahl an Lesevorgänge, denen die Blöcke in dem LEB unterzogen wurden, oder der gemessenen RBER ausgewählt werden.
  • Von der Speicherbereinigung und den Verschleißausgleichsmodulen 720 rücken die LEBs zu dem Datenverschiebungsmodul 722 vor, das alle aus den Blöcken in dem LEB extrahierten gültigen Daten an das Datenplatzierungsmodul 702 zurücksendet (wie durch die gestrichelten Pfeillinien dargestellt) . Dementsprechend können die Daten in einem anderen verfügbaren LEB des Speichers gespeichert werden. Die Blöcke in dem LEB werden anschließend von den Blocklöschmodulen 724 gelöscht. Der Löschvorgang kann die Spezifikation des Zielmodus des Blocks einschließen.
  • Abhängig von dem spezifizierten Zielblockmodus werden gelöschte Blöcke entweder in die RTU-Warteschlange zurückgeführt, die dem aktuellen Modus entspricht, in dem der Block konfiguriert ist, oder die Blöcke werden rekonfiguriert. So wird beispielsweise ein im SLC-Modus konfigurierter leerer Block entweder in eine RTU 714 in dem ersten Satz von RTU-Warteschlangen 708 zurückgeführt oder vor der Platzierung in einer RTU 714 in dem zweiten Satz von RTU-Warteschlangen 710 in den Multi-Bit-Pro-Zelle-Modus rekonfiguriert. Ähnlich wird ein im Multi-Bit-Pro-Zelle-Modus konfigurierter leerer Block entweder in eine RTU 714 in dem zweiten Satz von RTU-Warteschlangen 710 zurückgeführt oder vor der Platzierung in einer RTU 714 in dem ersten Satz von RTU-Warteschlangen 708 in den SLC-Modus rekonfiguriert. Dementsprechend ist jedes der Blocklöschmodule 724 mit zwei Pfeillinien dargestellt, die sich von im erstrecken, wobei jede dieser Linien die möglichen Pfade der Blöcke darstellt, die darin gelöscht werden. Diese Bestimmung, ob ein Speicherblock in eine passende RTU-Warteschlange zurückgeführt oder der Block vor dem Hinzufügen zu einer anderen RTU-Warteschlange rekonfiguriert werden soll, kann basierend auf jedem der in den 6A - 6C aufgeführten Prozesse erfolgen, wie vorstehend erwähnt. Ferner kann das Rekonfigurieren eines Blocks das Aktualisieren einer Blockstatustabelle einschließen.
  • Es folgt, dass verschiedene der hier aufgeführten Ausführungsformen bei gleichzeitiger Aufrechterhaltung der Leistung des übergeordneten Speichersystems Block-Pool-Größen erfolgreich in Echtzeit anpassen können. Die Effizienz des Systems wird aufrechterhalten, indem sichergestellt wird, dass ein verkleinerter Pool aufgrund der Größenanpassung keinen Mangel an Speicherblöcken erfährt, indem sichergestellt wird, dass der vergrößerte Pool nicht zu viele gelöschte Blöcke in den RTUs hält, indem sichergestellt wird, dass der Schreibfaktor in dem Quellen-Pool nicht erheblich ansteigt, und indem sichergestellt wird, dass ein Block, der übertragen wird, zur Übertragung auswählbar ist. Diese Pool-Größenanpassungsoperationen werden ferner im Hintergrund ausgeführt, wodurch sie keine Auswirkungen auf die Host-E-/A-Latenz und den Durchsatz haben, wie für Fachleute nach der Lektüre der vorliegenden Beschreibung ersichtlich.
  • Einige der hier aufgeführten Ausführungsformen können auch Situationen vermeiden, in denen Blöcke aus einem gegebenen Pool verschoben werden, wenn dieser Pool für die Bewältigung von Datenschreibvorgängen und/oder Verschiebungen hinsichtlich sauberer (z.B. leerer) Blöcke unter Druck steht. Die Leistung wird durch die Nutzung von Zeitspannen, die mit geringen E-/A-Lasten verbunden sind, weiter verbessert. Dadurch können, wenn das System nicht ausgelastet ist, im Hintergrund Blocktransfers zwischen den Pools ausgeführt werden, ohne die Nennleistung des Systems zu beeinträchtigen. Weiterhin ist eine Bewertung sowohl der Quellenspeicherstelle als auch der Zielspeicherstelle bei der Bestimmung besonders wünschenswert, ob Blöcke zwischen Pools übertragen werden sollen, da dadurch unnötiger Verarbeitungsaufwand vermieden wird. Dadurch wird auch sichergestellt, dass der Quellen-Pool ausreichend wiederaufgefüllt ist, bevor Blöcke in einen anderen Pool überführt werden.
  • Es ist auch darauf hinzuweisen, dass, obwohl unterschiedliche der Ansätze hier im Kontext von zwei Speicherblock-Pools beschrieben wurden, jeder dieser Ansätze auf Ausführungsformen mit mehr als zwei Block-Pools erweitert werden kann. Bei derartigen Ausführungsformen kann der Ziel-Pool unter Verwendung von Prioritäten, entsprechend einer Benutzereingabe, durch Vergleichen der RTU-Blockstände jedes jeweiligen Pools und Auswählen des Pools mit der geringsten Anzahl an RTU-Blöcken, etc. bestimmt werden.
  • Die vorliegende Erfindung kann ein System, ein Verfahren und/oder ein Computerprogrammprodukt auf jedem technisch möglichen Detailniveau an Integration sein. Das Computerprogrammprodukt kann ein computerlesbares Speichermedium (oder Medien) mit darin enthaltenen computerlesbaren Programmanweisungen zur Veranlassung eines Prozessors zum Ausführen von Aspekten der vorliegenden Erfindung umfassen.
  • Das computerlesbare Speichermedium kann eine konkrete Vorrichtung sein, die Anweisungen zur Verwendung durch eine Anweisungsausführungsvorrichtung halten und speichern kann. Das computerlesbare Speichermedium kann beispielsweise eine elektronische Speichervorrichtung, eine magnetische Speichervorrichtung, eine optische Speichervorrichtung, eine elektromagnetische Speichervorrichtung, eine Halbleiter-Speichervorrichtung oder jede geeignete Kombination der vorstehenden sein, ist jedoch nicht darauf beschränkt. Eine nicht erschöpfende Liste spezifischerer Beispiele des computerlesbaren Speichermediums umfasst die folgenden: eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (ein RAM), einen Festspeicher (ein ROM), einen löschbaren programmierbaren Festspeicher (ein EPROM oder einen Flash-Speicher), einen statischen Direktzugriffsspeicher (ein SRAM), einen tragbaren Compact-Disc-Festspeicher (eine CD-ROM), eine digitale, vielseitig einsetzbare Platte (eine DVD, digital versatile disk), einen Speicherstick, eine Diskette, eine mechanisch codierte Vorrichtung wie Lochkarten oder erhabene Strukturen in einer Nut mit darauf aufgezeichneten Anweisungen und jede geeignete Kombination der vorstehenden. Ein computerlesbares Speichermedium im hier verwendeten Sinne darf nicht als flüchtige Signale per se wie Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich über einen Wellenleiter oder andere Sendemedien ausbreiten (z.B. Lichtimpulse, die ein Glasfaserkabel durchlaufen) oder über ein Kabel gesendete elektrische Signale aufgefasst werden.
  • Die hier beschriebenen computerlesbaren Programmanweisungen können von einem computerlesbaren Speichermedium auf jeweilige Rechen-Nerarbeitungsvorrichtungen oder über ein Netzwerk, beispielsweise das Internet, ein lokales Netzwerk, ein Weitbereichsnetzwerk und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichervorrichtung heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, optische Übertragungsfasern, eine drahtlose Übertragung, Router, Firewalls, Schalter, Netzkopplercomputer und/oder Edge-Server umfassen. Eine Netzadapterkarte oder eine Netzschnittstelle in jeder Rechen-Verarbeitungsvorrichtung empfängt computerlesbare Programmanweisungen aus dem Netzwerk und leitet die computerlesbaren Programmanweisungen zur Speicherung auf einem computerlesbaren Speichermedium in der jeweiligen Rechen-Verarbeitungsvorrichtung weiter.
  • Computerlesbare Programmanweisungen zum Ausführen von Operationen gemäß der vorliegenden Erfindung können Assembler-Anweisungen, Befehlssatzarchitekturanweisungen (ISA-Anweisungen, ISA: instruction set architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten, Konfigurationsdaten für integrierte Schaltkreise oder jeder in einer beliebigen Kombination einer oder mehrerer Programmiersprachen, darunter einer objektorientierten Programmiersprache wie Smalltalk, C++ oder dergleichen und prozeduralen Programmiersprachen wie der Programmiersprache „C“ oder ähnlichen Programmiersprachen geschriebene Source-Code oder Objektcode sein. Die computerlesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als unabhängiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernten Computer oder vollständig auf dem entfernten Computer oder Server ausgeführt werden. Bei dem zuletzt genannten Szenario kann der entfernte Computer über jeden Typ von Netzwerk einschließlich eines lokalen Netzwerks (LAN) oder eines Weitbereichsnetzwerks (WAN) mit dem Computer des Benutzers verbunden sein, oder die Verbindung zu einem externen Computer kann (beispielsweise über das Internet unter Verwendung eines Internetdienstanbieters) hergestellt werden. Bei einigen Ausführungsformen können elektronische Schaltkreise, darunter beispielsweise programmierbare Logikschaltkreise, feldprogrammierbare Gatteranordnungen (FPGA) oder programmierbare Logikanordnungen (PLA), die computerlesbaren Programmanweisungen durch die Nutzung von Zustandsinformationen der computerlesbaren Programmanweisungen zur Personalisierung der elektronischen Schaltkreise zum Ausführen von Aspekten der vorliegenden Erfindung ausführen.
  • Aspekte der vorliegenden Erfindung sind hier unter Bezugnahme auf Ablaufdiagrammdarstellungen und/oder Blockdiagramme von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block der Ablaufdiagrammdarstellungen und/oder Blockdiagramme und Kombinationen von Blöcken in den Ablaufdiagrammdarstellungen und/oder Blockdiagrammen durch computerlesbare Programmanweisungen implementiert werden können.
  • Diese computerlesbaren Programmanweisungen können einem Prozessor eines Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung zur Erzeugung einer Maschine zugänglich gemacht werden, so dass die Anweisungen, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, eine Einrichtung zur Implementierung der in dem bzw. den Ablaufdiagramm - und/oder Blockdiagramm-Block oder -Blöcken spezifizierten Funktionen/Vorgänge schaffen. Diese computerlesbaren Programmanweisungen können auch in einem computerlesbaren Speichermedium gespeichert werden, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Vorrichtungen anweisen kann, auf eine bestimmte Weise zu arbeiten, so dass das computerlesbare Speichermedium, in dem Anweisungen gespeichert sind, ein Fertigungserzeugnis umfasst, das Anweisungen einschließt, durch die Aspekte der Funktion/des Vorgangs implementiert werden, die bzw. der in dem bzw. den Ablaufdiagramm und/oder Blockdiagramm-Block oder -Blöcken spezifiziert ist.
  • Die computerlesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Vorrichtung geladen werden, um zur Erzeugung eines computerimplementierten Prozesses die Ausführung einer Folge von Verfahrensschritten auf dem Computer, der anderen programmierbaren Vorrichtung oder sonstigen Vorrichtung zu veranlassen, so dass die Anweisungen, die auf dem Computer, der anderen programmierbaren Vorrichtung oder der sonstigen Vorrichtung ausgeführt werden, die in dem bzw. den Ablaufdiagramm- und/oder Blockdiagramm-Block oder -Blöcken spezifizierten Funktionen/Vorgänge implementieren.
  • Das Ablaufdiagramm und die Blockdiagramme in den Figuren zeigen die Architektur, den Funktionsumfang und die Funktionsweise möglicher Implementierungen von Systemen, Verfahren und Computerprogrammprodukten gemäß unterschiedlichen Ausführungsformen der vorliegenden Erfindung. In dieser Hinsicht kann jeder Block in dem Ablaufdiagramm oder den Blockdiagrammen ein Modul, ein Segment oder einen Anteil von Anweisungen repräsentieren, das bzw. der eine oder mehrere ausführbare Anweisungen zur Implementierung der spezifizierten logischen Funktion(en) umfasst. Bei einigen alternativen Implementierungen können die in den Blöcken aufgeführten Funktionen außerhalb der in den Figuren festgehaltenen Reihenfolge auftauchen. So können abhängig von dem beteiligten Funktionsumfang beispielsweise zwei als aufeinanderfolgend dargestellte Blöcke tatsächlich als ein Schritt durchgeführt, gleichzeitig, im Wesentlichen gleichzeitig, in teilweiser oder vollständiger zeitlicher Überlagerung ausgeführt werden, oder die Blöcke können gelegentlich in umgekehrter Reihenfolge ausgeführt werden. Es ist auch ersichtlich, das jeder Block der Blockdiagramme und/oder der Ablaufdiagrammdarstellung und Kombinationen von Blöcken der Blockdiagramme und/oder der Ablaufdiagrammdarstellung durch hardwarebasierte Systeme mit besonderer Zweckbestimmung implementiert werden können, die die spezifizierten Funktionen oder Vorgänge ausführen oder Kombinationen von Spezialhardware und Computeranweisungen durchführen.
  • Darüber hinaus kann ein System gemäß unterschiedlichen Ausführungsformen einen Prozessor und in den Prozessor integrierte und/oder durch diesen ausführbare Logik umfassen, wobei die Logik auf das Ausführen eines oder mehrerer der hier aufgeführten Prozessschritte ausgelegt ist. Integriert in bedeutet, dass der Prozessor eine als Hardware-Logik wie eine anwendungsspezifische integrierte Schaltung (ASIC), eine feldprogrammierbare Gatteranordnung (FPGA), etc. darin eingebettete Logik aufweist. Durch den Prozessor ausführbar bedeutet, dass die Logik Hardware-Logik; Software-Logik wie Firmware, Teil eines Betriebssystems, Teil eines Anwendungsprogramms; etc. oder eine Kombination von Hardware- und Software-Logik ist, auf die von dem Prozessor zugegriffen werden kann und die auf das Veranlassen des Prozessors zum Ausführen einer Funktion bei der Ausführung durch den Prozessor ausgelegt sind. Software-Logik kann in einem lokalen und/oder entfernten Speicher jedes nach dem Stand der Technik bekannten Speichertyps gespeichert sein. Jeder nach dem Stand der Technik bekannte Prozessor wie ein Software-Prozessormodul und/oder ein Hardware-Prozessor wie eine ASIC, eine FPGA, eine Zentraleinheit (eine CPU), eine integrierte Schaltung (eine IC), eine Grafikverarbeitungseinheit (eine GPU), etc. kann verwendet werden.
  • 8 stellt eine Netzwerkarchitektur 800 gemäß einer Ausführungsform dar. Wie in 8 gezeigt, sind mehrere entfernte Netzwerke 802 vorgesehen, die ein erstes entferntes Netzwerk 804 und ein zweites entferntes Netzwerk 806 umfassen. Ein Netzkoppler 801 kann zwischen die entfernten Netzwerke 802 und ein nahes Netzwerk 808 gekoppelt sein. Im Kontext der vorliegenden Netzwerkarchitektur 800 können die Netzwerke 804, 806 jeweils eine beliebige Form einschließlich die eines LAN, eines WAN wie des Internet, des öffentlichen Telefonnetzes (PSTN, public switched telephone network), eines internen Telefonnetzes, etc. annehmen, sind jedoch nicht darauf beschränkt.
  • Im Gebrauch dient der Netzkoppler 801 als Zugangspunkt zu dem nahen Netzwerk 808 aus den entfernten Netzwerken 802. Als solcher kann der Netzkoppler 801 als Router, der zum Weiterleiten eines gegebenen Pakets von Daten geeignet ist, das an dem Netzkoppler 801 ankommt, und Schalter fungieren, der für ein gegebenes Paket den tatsächlichen Pfad in den und aus dem Netzkoppler 801 bereitstellt.
  • Ferner eingebunden ist zumindest ein mit dem nahen Netzwerk 808 gekoppelter Daten-Server 814, auf den von den entfernten Netzwerke 802 über den Netzkoppler 801 zugegriffen werden kann. Es ist darauf hinzuweisen, dass der/die Daten-Server 814 jeden Typ von Rechenvorrichtung/Groupware umfassen kann/können. Mit jedem Daten-Server 814 sind mehrere Benutzervorrichtungen 816 gekoppelt. Derartige Benutzervorrichtungen 816 können einen Desktop-Computer, einen Laptop-Computer, einen Handcomputer, einen Drucker und/oder jeden anderen Typ von Logik enthaltender Vorrichtung einschließen. Es ist darauf hinzuweisen, dass bei einigen Ausführungsformen eine Benutzervorrichtung 811 auch direkt mit einem der Netzwerke gekoppelt sein kann.
  • Ein Peripheriegerät 820 oder eine Reihe von Peripheriegeräten 820, z.B. Faxgeräte, Drucker, Scanner, Festplattenlaufwerke, Netzwerk- und/oder lokale Datenspeichereinheiten oder -systeme, etc., können mit einem oder mehreren der Netzwerke 804, 806, 808 gekoppelt sein. Es ist darauf hinzuweisen, dass Datenbanken und/oder zusätzliche Komponenten von jedem Typ von mit den Netzwerken 804, 806, 808 gekoppeltem Netzwerkelement genutzt werden oder in diese integriert sein können. Im Kontext der vorliegenden Beschreibung kann ein Netzwerkelement jede Komponente eines Netzwerks bezeichnen.
  • Gemäß einigen Ausführungsformen können das Verfahren und die Systeme, die hier beschrieben sind, mit und/oder auf virtuellen Systemen und/oder Systemen implementiert werden, die ein oder mehrere andere Systeme nachbilden, wie ein UNIX-System, das virtuell eine MICROSOFT WINDOWS-Umgebung, etc. beherbergt. Diese Virtualisierung und/oder Nachbildung kann bei einigen Ausführungsformen durch die Verwendung von VMWARE-Software verbessert werden.
  • Bei anderen Ausführungsformen können ein oder mehrere Netzwerke 804, 806, 808 einen allgemein als „Cloud“ bezeichneten Cluster von Systemen repräsentieren. Beim Cloud-Computing werden geteilte Ressourcen wie Verarbeitungsleistung, Peripheriegeräte, Software, Daten, Server, etc. jedem System in der Cloud in einer On-Demand-Beziehung zur Verfügung gestellt, wodurch der Zugang zu und die Verteilung von Diensten über viele Rechensysteme ermöglicht werden. Cloud-Computing ist typischerweise mit einer Internet-Verbindung zwischen den Systemen verbunden, die in der Cloud arbeiten, doch es können auch andere nach dem Stand der Technik bekannte Techniken zum Verbinden der Systeme verwendet werden.
  • 9 zeigt eine einer Benutzervorrichtung 816 und/oder einem Server 814 gemäß 8 zugehörige repräsentative Hardware-Umgebung gemäß einer Ausführungsform. 9 stellt eine typische Hardware-Konfiguration eines Prozessorsystems 900 mit einer Zentraleinheit 910 wie einem Mikroprozessor und einer Reihe weiterer, über einen Systembus 912 miteinander verbundener Einheiten gemäß einer Ausführungsform dar. Bei einigen Ausführungsformen kann die Zentraleinheit 910 jeden der vorstehend unter Bezugnahme auf den einen oder die mehreren Prozessoren 210 gemäß 2 beschriebenen Ansätze umfassen.
  • Das in 9 gezeigte Prozessorsystem 900 umfasst einen Direktzugriffsspeicher (ein RAM) 914, einen Festspeicher (ein ROM) 916 und einen E-/A-Adapter 918. Gemäß einigen Ausführungsformen, die die Erfindung in keiner Weise einschränken sollen, kann der E-/A-Adapter 918 jeden der vorstehend unter Bezugnahme auf den E-/A-Adapter 218 gemäß 2 beschriebenen Ansätze umfassen. Weiterhin Bezug nehmend auf das Prozessorsystem 900 gemäß 9 können die vorstehend aufgeführten Komponenten 914, 916, 918 zum Verbinden von Peripherievorrichtungen wie einem Speicheruntersystem 920 mit dem Bus 912 verwendet werden. Bei einigen Ausführungsformen kann ein Speicheruntersystem 920 eine ähnliche und/oder die gleiche Konfiguration wie das Datenspeichersystem 220 gemäß 2 aufweisen. Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, kann das Speicheruntersystem 920 zusätzlich zu den in 2 dargestellten RAID-Steuerungen nicht flüchtige Datenspeicherkarten mit z.B. NVRAM-Speicherkarten, einem RAM, einem ROM und/oder einem anderen bekannten Typ von nicht flüchtigem Speicher umfassen.
  • Weiterhin Bezug nehmend auf 9 einen Benutzerschnittstellenadapter 922 zum Anschließen einer Tastatur 924, einer Maus 926, eines Lautsprechers 928, eines Mikrophons 932 und/oder weiterer Benutzerschnittstellenvorrichtungen wie einem berührungsempfindlichen Bildschirm, einer (nicht gezeigten) digitalen Kamera, etc. an den Bus 912.
  • Das Prozessorsystem 900 umfasst ferner einen Kommunikationsadapter 934, der das Prozessorsystem 900 mit einem Kommunikationsnetzwerk 935 (z.B. einem Datenverarbeitungsnetzwerk) verbindet, und einen Anzeigeadapter 936, der den Bus 912 mit einer Anzeigevorrichtung 938 verbindet.
  • Auf dem Prozessorsystem 900 kann ein Betriebssystem wie das MICROSOFT WINDOWS-Betriebssystem (OS, operating system), ein MAC-OS, ein UNIX-OS, etc. installiert sein. Es versteht sich, dass eine bevorzugte Ausführungsform auch auf anderen Plattformen und Betriebssystemen als den aufgeführten implementiert werden kann. Eine bevorzugte Ausführungsform kann zusätzlich zu einer objektorientierten Programmiermethodologie unter Verwendung der Sprachen JAVA, XML, C und/oder C++ oder anderer Programmiersprachen geschrieben werden. Es kann objektorientiertes Programmieren (OOP) eingesetzt werden, das zunehmend zur Entwicklung komplexer Anwendungen verwendet wird.
  • Darüber hinaus stellt 10 ein Speichersystem 1000 gemäß einer Ausführungsform dar, das Speicherkategorien auf hohem Niveau (z.B. SSD) in Kombination mit Speicherkategorien auf niedrigerem Niveau (z.B. Magnetband) implementiert. Es wird darauf hingewiesen, dass einige der in 10 gezeigten Elemente gemäß unterschiedlichen Ausführungsformen als Hardware und/oder Software implementiert werden können. Das Speichersystem 1000 kann einen Speichersystemmanager 1012 für die Kommunikation mit mehreren Medien auf zumindest einer höheren Speicherkategorie 1002 und zumindest einer niedrigeren Speicherkategorie 1006 umfassen. Bei anderen Ansätzen kann ein Speichersystemmanager 1012 jedoch mit mehreren Medien auf zumindest einer höheren Speicherkategorie 1002 kommunizieren, jedoch mit keiner niedrigeren Speicherkategorie. Die höhere(n) Speicherkategorie(n) 1002 kann/können vorzugsweise ein oder mehrere Medien 1004 mit wahlfreiem und/oder direktem Zugriff wie Festplatten, nicht flüchtige Speicher (NVM, NVRAM), Festkörperspeicher in SSDs, Flash-Speicher, SSD-Anordnungen, Flash-Speicheranordnungen, etc. und/oder weitere hier aufgeführte oder nach dem Stand der Technik bekannte umfassen. Gemäß veranschaulichenden Beispielen zeigen die 3 - 4 beispielhafte Architekturen von SSD-Systemen, die abhängig von der gewünschten Ausführungsform als höhere Speicherkategorie verwendet werden können 1002.
  • Weiterhin Bezug nehmend auf 10 umfasst/umfassen die niedrigere(n) Speicherkategorie(n) 1006 vorzugsweise ein oder mehrere Speichermedien 1008 mit geringerer Leistung, darunter Medien mit sequentiellem Zugriff wie Magnetband in Bandlaufwerken und/oder optische Medien, HDDs mit langsamerem Zugriff, SSDs mit langsamerem Zugriff, etc. und/oder weitere hier aufgeführte oder nach dem Stand der Technik bekannte. Eine oder mehrere zusätzliche Speicherkategorien 1016 können wie von einem Gestalter des Systems 1000 gewünscht jede Kombination von Speichermedien umfassen. Somit können die eine oder die mehreren zusätzlichen Speicherkategorien 1016 bei einigen Ansätzen eine den in den 1-2 dargestellten ähnliche oder die gleiche SSD-Systemarchitektur umfassen. Ebenso kann jede der höheren Speicherkategorien 1002 und/oder der niedrigeren Speicherkategorien 1006 jede Kombination von Speichervorrichtungen und/oder Speichermedien umfassen.
  • Der Speichersystemmanager 1012 kann über ein Netzwerk 1010 wie ein Speicherbereichsnetzwerk (SAN, storage area network), wie in 10 gezeigt, oder einen anderen geeigneten Netzwerktyp mit den Speichermedien 1004, 1008 der höheren Speicherkategorie(n) 1002 und der niedrigeren Speicherkategorie(n) 1006 kommunizieren. Der Speichersystemmanager 1012 kann auch über eine Host-Schnittstelle 1014, die ein Teil des Speichersystemmanagers 1012 sein kann, dies aber nicht sein muss, mit einem oder mehreren (nicht gezeigten) Host-Systemen kommunizieren. Der Speichersystemmanager 1012 und/oder jede andere Komponente des Speichersystems 1000 kann als Hardware und/oder Software implementiert werden und kann einen (nicht gezeigten) Prozessor eines nach dem Stand der Technik bekannten Typs wie eine Zentraleinheit (CPU), eine feldprogrammierbare Gatteranordnung (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC), etc. zum Ausführen von Befehlen nutzen. Selbstverständlich kann jede Anordnung eines Speichersystems verwendet werden, wie für Fachleute bei der Lektüre der vorliegenden Beschreibung ersichtlich.
  • Bei weiteren Ausführungsformen kann das Speichersystem 1000 eine beliebige Anzahl an Datenspeicherkategorien und innerhalb jeder Speicherkategorie die gleichen oder unterschiedliche Speichermedien umfassen. So kann beispielsweise jede Datenspeicherkategorie den gleichen Typ von Speichermedien wie HDDs, SSDs, Medien mit sequentiellem Zugriff (Bänder in Bandlaufwerken, optische Platten in optischen Plattenlaufwerken, etc.), Direktzugriffsmedien (CD-ROM, DVD-ROM, etc.) oder jede Kombination von Speichermedientypen umfassen. Bei einer derartigen Konfiguration kann eine höhere Speicherkategorie 1002 eine Mehrzahl an SSD-Speichermedien zum Speichern von Daten in einer Speicherumgebung mit höherer Leistung umfassen, und die übrigen Speicherkategorien einschließlich der niedrigeren Speicherkategorie 1006 und zusätzlicher Speicherkategorien 1016 können jede Kombination von SSDs, HDDs, Bandlaufwerken, etc. zum Speichern von Daten in einer Speicherumgebung mit geringerer Leistung umfassen. Auf diese Weise können Daten, auf die häufiger zugegriffen wird, Daten mit einer höheren Priorität, Daten, auf die schneller zugegriffen werden muss, etc. in der höheren Speicherkategorie 1002 gespeichert werden, wogegen Daten, die keines dieser Attribute aufweisen, in den zusätzlichen Speicherkategorien 1016 einschließlich der niedrigeren Speicherkategorie 1006 gespeichert werden können. Selbstverständlich können Fachleute bei der Lektüre der vorliegenden Beschreibungen viele weitere Kombinationen von Speichermedientypen zur Implementation unterschiedlicher Speicherschemata gemäß den hier vorgestellten Ausführungsformen ausarbeiten.
  • Gemäß einigen Ausführungsformen kann das Speichersystem (wie 1000) Logik, die auf das Empfangen einer Anforderung zum Öffnen eines Datensatzes ausgelegt ist, Logik, die darauf ausgelegt ist, zu bestimmen, ob der angeforderte Datensatz in mehreren zugehörigen Teilen in einer niedrigeren Speicherkategorie 1006 eines mehrstufigen Datenspeichersystems 1000 gespeichert ist, Logik, die darauf ausgelegt ist, jeden zugehörigen Teil des angeforderten Datensatzes in eine höhere Speicherkategorie 1002 des mehrstufigen Datenspeichersystems 1000 zu verschieben, und Logik umfassen, die darauf ausgelegt ist, den angeforderten Datensatz aus den zugehörigen Teilen in der höheren Speicherkategorie 1002 des mehrstufigen Datenspeichersystems 1000 zusammenzusetzen.
  • Selbstverständlich kann diese Logik gemäß unterschiedlichen Ausführungsformen als Verfahren auf jeder Vorrichtung und/oder jedem System oder als Computerprogrammprodukt implementiert werden.
  • Es ist klar, dass die unterschiedlichen Merkmale der vorstehenden Systeme und/oder Methodologien auf jede Weise kombiniert werden können, wodurch sich mehrere Kombinationen aus den vorstehend vorgelegten Beschreibungen ergeben.
  • Die Beschreibungen der unterschiedlichen Ausführungsformen der vorliegenden Erfindung wurden zu Veranschaulichungszwecken vorgestellt, sollen jedoch nicht erschöpfend oder auf die offenbarten Ausführungsformen beschränkt sein. Viele Modifikationen und Abänderungen sind für durchschnittliche Fachleute offensichtlich, ohne dass vom Umfang der beschriebenen Ausführungsformen abgewichen würde. Die hier verwendete Terminologie wurde gewählt, um die Prinzipien der Ausführungsformen, die praktische Anwendung oder die technische Verbesserung gegenüber auf dem Markt zu findenden Technologien bestmöglich zu erläutern oder anderen durchschnittlichen Fachleuten das Verständnis der hier offenbarten Ausführungsformen zu ermöglichen.

Claims (20)

  1. Computerimplementiertes Verfahren zum Einstellen von Block-Pool-Größen in einem Speichersystem, das aufweist: Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt; Bestimmen, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt, als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt; Verschieben gültiger Daten aus einem der Blöcke in einem ersten Pool, der der ersten RTU-Warteschlange entspricht, als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt; Löschen des Blocks in dem ersten Pool; und Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die einem zweiten Pool entspricht, wobei die Blöcke in dem ersten Pool im SLC-Modus (SLC, single-level cell, ein Bit pro Zelle) konfiguriert sind, wobei die Blöcke in dem zweiten Pool im Multi-Bit-Pro-Zelle-Modus konfiguriert sind.
  2. Computerimplementiertes Verfahren nach Anspruch 1, wobei das Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, aufweist: Rekonfigurieren des Blocks aus dem SLC-Modus in den Multi-Bit-Pro-Zelle-Modus; und Markieren des rekonfigurierten Blocks zur Rekalibrierung seines Leseschwellenspannungs-Verschiebungswerts.
  3. Computerimplementiertes Verfahren nach Anspruch 1, das umfasst: Bestimmen, ob eine aktuelle Eingangs-/Ausgangs-Arbeitslast (aktuelle E-/A-Arbeitslast), mit der das Speichersystem konfrontiert ist, in einem dritten Bereich liegt; und Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, als Reaktion auf eine Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, nicht in dem dritten Bereich liegt.
  4. Computerimplementiertes Verfahren nach Anspruch 1, wobei die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, im QLC-Modus (QLC, quad-level cell, vier Bit pro Zelle) konfiguriert sind.
  5. Computerimplementiertes Verfahren nach Anspruch 1, das umfasst: Auswählen eines der Blöcke in dem ersten Pool als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem ersten Bereich liegt; Verschieben gültiger Daten aus dem ausgewählten Block; Löschen des ausgewählten Blocks; und Platzieren des ausgewählten Blocks in der ersten RTU-Warteschlange, die dem ersten Pool entspricht.
  6. Computerimplementiertes Verfahren nach Anspruch 5, wobei das Platzieren des ausgewählten Blocks in der ersten RTU-Warteschlange, die dem ersten Pool entspricht, aufweist: Markieren des ausgewählten Blocks zur Rekalibrierung seines Leseschwellenspannungs-Verschiebungswerts.
  7. Computerimplementiertes Verfahren nach Anspruch 1, das aufweist: Bestimmen, ob eine Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in einem ersten Bereich der zweiten RTU-Warteschlange liegt; Bestimmen, ob eine Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der ersten RTU-Warteschlange liegt, als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der zweiten RTU-Warteschlange liegt; Verschieben gültiger Daten aus einem der Blöcke in dem zweiten Pool als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der ersten RTU-Warteschlange liegt; Löschen des Blocks in dem zweiten Pool; und Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht.
  8. Computerimplementiertes Verfahren nach Anspruch 7, wobei das Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht, aufweist: Rekonfigurieren des Blocks aus dem Multi-Bit-Pro-Zelle-Modus in den SLC-Modus; und Markieren des rekonfigurierten Blocks zur Rekalibrierung seines Schwellenspannungs-Verschiebungswerts.
  9. Computerprogrammprodukt, das ein computerlesbares Speichermedium mit auf diesem realisierten Programmanweisungen aufweist, wobei die Programmanweisungen durch einen Prozessor lesbar und/oder ausführbar sind, zum Veranlassen des Prozessors zum: Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt, durch den Prozessor; Bestimmen, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt, durch den Prozessor als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt; Verschieben gültiger Daten aus einem der Blöcke in einem ersten Pool, der der ersten RTU-Warteschlange entspricht, durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt; Löschen des Blocks in dem ersten Pool durch den Prozessor; und Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die einem zweiten Pool entspricht, durch den Prozessor, wobei die Blöcke in dem ersten Pool im SLC-Modus (SLC, single-level cell, ein Bit pro Zelle) konfiguriert sind, wobei die Blöcke in dem zweiten Pool im Multi-Bit-Pro-Zelle-Modus konfiguriert sind.
  10. Computerprogrammprodukt nach Anspruch 9, wobei das Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, aufweist: Rekonfigurieren des Blocks aus dem SLC-Modus in den Multi-Bit-Pro-Zelle-Modus; und Markieren des rekonfigurierten Blocks zur Rekalibrierung seines Schwellenspannungs-Verschiebungswerts.
  11. Computerprogrammprodukt nach Anspruch 9, wobei die Programmanweisungen durch den Prozessor lesbar und/oder ausführbar sind, zum Veranlassen des Prozessors zum: Bestimmen, ob eine aktuelle Eingangs-/Ausgangs-Arbeitslast (aktuelle E-/A--Arbeitslast), mit der das Speichersystem konfrontiert ist, in einem dritten Bereich liegt, durch den Prozessor; und Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, durch den Prozessor als Reaktion auf eine Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, nicht in dem dritten Bereich liegt.
  12. Computerprogrammprodukt nach Anspruch 9, wobei die Blöcke in dem zweiten Pool, die im Multi-Bit-Pro-Zelle-Modus konfiguriert sind, im QLC-Modus (QLC, quad-level cell, vier Bit pro Zelle) konfiguriert sind.
  13. Computerprogrammprodukt nach Anspruch 9, wobei die Programmanweisungen durch den Prozessor lesbar und/oder ausführbar sind, zum Veranlassen des Prozessors zum: Auswählen eines der Blöcke in dem ersten Pool durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem ersten Bereich der ersten RTU-Warteschlange liegt; Verschieben gültiger Daten aus dem ausgewählten Block durch den Prozessor; Löschen des ausgewählten Blocks durch den Prozessor; und Platzieren des ausgewählten Blocks in der ersten RTU-Warteschlange, die dem ersten Pool entspricht, durch den Prozessor.
  14. Computerprogrammprodukt nach Anspruch 13, wobei das Platzieren des ausgewählten Blocks in der ersten RTU-Warteschlange, die dem ersten Pool entspricht, aufweist: Markieren des rekonfigurierten ausgewählten Blocks zur Rekalibrierung seines Schwellenspannungs-Verschiebungswerts.
  15. Computerprogrammprodukt nach Anspruch 9, wobei die Programmanweisungen durch den Prozessor lesbar und/oder ausführbar sind, zum Veranlassen des Prozessors zum: Bestimmen, ob eine Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in einem ersten Bereich der zweiten RTU-Warteschlange liegt, durch den Prozessor; Bestimmen, ob eine Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der ersten RTU-Warteschlange liegt, durch den Prozessor als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der zweiten RTU-Warteschlange liegt; Verschieben gültiger Daten aus einem der Blöcke in dem zweiten Pool durch den Prozessor als Reaktion auf eine Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der ersten RTU-Warteschlange liegt; Löschen des Blocks in dem zweiten Pool durch den Prozessor; und Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht, durch den Prozessor.
  16. Computerprogrammprodukt nach Anspruch 15, wobei das Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht, aufweist: Rekonfigurierern des Blocks aus dem Multi-Bit-Pro-Zelle-Modus in den SLC-Modus durch den Prozessor; und Markieren des rekonfigurierten Blocks zur Rekalibrierung seines Schwellenspannungs-Verschiebungswerts durch den Prozessor.
  17. System, das aufweist: mehrere NVRAM-Blöcke (NVRAM, non-volatile random access memory, nicht flüchtiger Direktzugriffsspeicher), die auf das Speichern von Daten ausgelegt sind; und einen Prozessor und Logik, die in den Prozessor integriert und/oder durch diesen ausführbar ist, wobei die Logik ausgelegt ist auf: ein Bestimmen, ob eine Anzahl an Blöcken, die in eine erste RTU-Warteschlange (RTU, ready-to-use, einsatzbereit) aufgenommen sind, in einem ersten Bereich der ersten RTU-Warteschlange liegt, durch den Prozessor; ein Bestimmen, ob eine Anzahl an Blöcken, die in eine zweite RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der zweiten RTU-Warteschlange liegt, durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der ersten RTU-Warteschlange liegt; ein Verschieben gültiger Daten aus einem der Blöcke in einem ersten Pool, der der ersten RTU-Warteschlange entspricht, durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der zweiten RTU-Warteschlange liegt; ein Löschen des Blocks in dem ersten Pool durch den Prozessor; und ein Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die einem zweiten Pool entspricht, durch den Prozessor, wobei die Blöcke in dem ersten Pool im SLC-Modus (SLC, single-level cell, ein Bit pro Zelle) konfiguriert sind, wobei die Blöcke in dem zweiten Pool im Multi-Bit-Pro-Zelle-Modus konfiguriert sind.
  18. System nach Anspruch 17, wobei das Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, aufweist: das Rekonfigurieren des Blocks aus dem SLC-Modus in den Multi-Bit-Pro-Zelle-Modus; und das Markieren des rekonfigurierten Blocks zur Rekalibrierung eines Schwellenspannungs-Verschiebungswerts für den rekonfigurierten Block.
  19. System nach Anspruch 17, wobei die Logik ausgelegt ist auf: das Bestimmen, ob eine aktuelle Eingangs-/Ausgangs-Arbeitslast (aktuelle E-/A--Arbeitslast), mit der das Speichersystem konfrontiert ist, in einem dritten Bereich liegt, durch den Prozessor; und das Übertragen des Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht, durch den Prozessor als Reaktion auf die Bestimmung, dass die aktuelle E-/A--Arbeitslast, mit der das Speichersystem konfrontiert ist, nicht in dem dritten Bereich liegt.
  20. System nach Anspruch 17, wobei die Logik ausgelegt ist auf: ein Bestimmen, ob eine Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in einem ersten Bereich der zweiten RTU-Warteschlange liegt, durch den Prozessor; ein Bestimmen, ob eine Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, in einem zweiten Bereich der ersten RTU-Warteschlange liegt, durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die zweite RTU-Warteschlange aufgenommen sind, in dem ersten Bereich der zweiten RTU-Warteschlange liegt; ein Verschieben gültiger Daten aus einem der Blöcke in den zweiten Pool durch den Prozessor als Reaktion auf die Bestimmung, dass die Anzahl an Blöcken, die in die erste RTU-Warteschlange aufgenommen sind, nicht in dem zweiten Bereich der ersten RTU-Warteschlange liegt; ein Löschen des Blocks in dem zweiten Pool durch den Prozessor; und ein Übertragen des Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht, durch den Prozessor.
DE112020003185.3T 2019-07-01 2020-06-23 Einstellung von block-pool-grössen in einem speichersystem Pending DE112020003185T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/459,393 2019-07-01
US16/459,393 US11182089B2 (en) 2019-07-01 2019-07-01 Adapting memory block pool sizes using hybrid controllers
PCT/IB2020/055904 WO2021001724A1 (en) 2019-07-01 2020-06-23 Adapting block pool sizes in a storage system

Publications (1)

Publication Number Publication Date
DE112020003185T5 true DE112020003185T5 (de) 2022-05-19

Family

ID=74065734

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020003185.3T Pending DE112020003185T5 (de) 2019-07-01 2020-06-23 Einstellung von block-pool-grössen in einem speichersystem

Country Status (6)

Country Link
US (1) US11182089B2 (de)
JP (1) JP2022539133A (de)
CN (1) CN114096952A (de)
DE (1) DE112020003185T5 (de)
GB (1) GB2598878B (de)
WO (1) WO2021001724A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11442809B1 (en) * 2019-07-17 2022-09-13 Marvell Asia Pte, Ltd. Double-parity raid enabling recovery of two failed data units
US11119672B2 (en) * 2019-08-06 2021-09-14 Intel Corporation Dynamic single level cell memory controller
US11656792B2 (en) * 2021-06-29 2023-05-23 International Business Machines Corporation Mirroring data in write caches of a controller of a non-volatile memory
US11797199B2 (en) * 2021-07-06 2023-10-24 International Business Machines Corporation Balancing utilization of memory pools of physical blocks of differing storage densities

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7330956B1 (en) * 2002-04-16 2008-02-12 Emc Corporation Bucket based memory allocation
US7610468B2 (en) * 2006-10-26 2009-10-27 Hewlett-Packard Development Company, L.P. Modified buddy system memory allocation
US7865658B2 (en) 2007-12-31 2011-01-04 Sandisk Il Ltd. Method and system for balancing host write operations and cache flushing
US8407400B2 (en) 2008-11-12 2013-03-26 Micron Technology, Inc. Dynamic SLC/MLC blocks allocations for non-volatile memory
US8040744B2 (en) 2009-01-05 2011-10-18 Sandisk Technologies Inc. Spare block management of non-volatile memories
US8312219B2 (en) 2009-03-02 2012-11-13 International Business Machines Corporation Hybrid caching techniques and garbage collection using hybrid caching techniques
US7948798B1 (en) 2009-07-22 2011-05-24 Marvell International Ltd. Mixed multi-level cell and single level cell storage device
US9021177B2 (en) * 2010-04-29 2015-04-28 Densbits Technologies Ltd. System and method for allocating and using spare blocks in a flash memory
US8694754B2 (en) 2011-09-09 2014-04-08 Ocz Technology Group, Inc. Non-volatile memory-based mass storage devices and methods for writing data thereto
US8943261B2 (en) 2011-10-28 2015-01-27 International Business Machines Corporation Efficient memory management in software caches
US9176862B2 (en) 2011-12-29 2015-11-03 Sandisk Technologies Inc. SLC-MLC wear balancing
US9965199B2 (en) * 2013-08-22 2018-05-08 Sandisk Technologies Llc Smart dynamic wear balancing between memory pools
US9558107B2 (en) 2013-12-24 2017-01-31 International Business Machines Corporation Extending useful life of a non-volatile memory by health grading
US10452280B2 (en) * 2014-10-03 2019-10-22 International Business Machines Corporation Hybrid storage system employing reconfigurable memory
WO2016069031A1 (en) 2014-11-01 2016-05-06 Hewlett Packard Enterprise Development Lp Managing a storage pool
US10254981B2 (en) * 2016-12-12 2019-04-09 International Business Machines Corporation Adaptive health grading for a non-volatile memory
JP2018120439A (ja) * 2017-01-25 2018-08-02 東芝メモリ株式会社 メモリシステムおよび制御方法
US10545685B2 (en) 2017-08-30 2020-01-28 Micron Technology, Inc. SLC cache management
US20200042223A1 (en) * 2018-08-02 2020-02-06 Alibaba Group Holding Limited System and method for facilitating a high-density storage device with improved performance and endurance

Also Published As

Publication number Publication date
GB2598878A (en) 2022-03-16
US11182089B2 (en) 2021-11-23
JP2022539133A (ja) 2022-09-07
WO2021001724A1 (en) 2021-01-07
GB2598878B (en) 2022-08-03
CN114096952A (zh) 2022-02-25
US20210004158A1 (en) 2021-01-07

Similar Documents

Publication Publication Date Title
DE112020002526B4 (de) Blockmodusumschaltung in datenspeichersystem
DE112017002941B4 (de) Arbeitslastoptimierte Datendeduplizierung mittels Phantomfingerabdrücken
DE112020003185T5 (de) Einstellung von block-pool-grössen in einem speichersystem
DE112020000178T5 (de) Verwaltung von in zonen unterteilten namensräumen nichtflüchtiger speicherungsvorrichtungen
DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
DE102019132371A1 (de) Zuordnungsverwaltung logisch zu physisch unter Verwendung von nichtflüchtigem Speicher
DE102020106971A1 (de) Datenschreibverwaltung im nichtflüchtigen speicher
DE112018004251T5 (de) Adaptive vorrichtungsdienstqualität durch host-speicherpufferbereich
DE112020003290T5 (de) Datenplatzierung in einer schreib-cache-architektur, die eine lesehitze-datenaufteilung unterstützt
DE102018105750A1 (de) System und Verfahren für Hybrid-Push-Pull-Datenmanagement in einem nichtflüchtigen Datenspeicher
DE112018004256T5 (de) Redundanzcodierstreifen basierend auf internen adressen von speichervorrichtungen
DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
DE112015004873T5 (de) Verarbeitung von Entabbildungsbefehlen zur Verbesserung der Leistungsfähigkeit und Standzeit einer Speicherungsvorrichtung
DE112020000139T5 (de) Nicht sequentiell in zonen aufgeteilte namensräume
DE102013020269A1 (de) Umordnen des Zurückschickens für einen Host-Lesebefehl basierend auf der Zeitschätzung des Abschlusses eines Flash-Lesebefehls
DE102011086227A1 (de) Adress mapping method, data storage device and user device
DE102020116362B3 (de) Dynamische zuweisung von unterblöcken
DE112020005350T5 (de) Aktualisieren von korrigierenden lesespannung-offsetwerten in nichtflüchtigen direktzugriffsspeichern
DE112015005742B4 (de) Lastadaptiver algorithmus zum packen von daten
DE102018123880A1 (de) Adaptive Verwaltung von Zwischenspeichern
DE112015003536T5 (de) Host-Verwalter nicht flüchtiger Speicher
DE112018000230T5 (de) System und Verfahren zur spekulativen Befehlsausführung unter Verwendung des Steuerungsspeicherpuffers
DE102018123670A1 (de) Speicherungssystem, Rechensystem und Verfahren dafür
DE112020004591T5 (de) L2P-Übersetzungstechniken in begrenzten RAM-Systemen
DE112017005782T5 (de) Warteschlange für Speichervorgänge

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R083 Amendment of/additions to inventor(s)