DE112020002526B4 - Blockmodusumschaltung in datenspeichersystem - Google Patents

Blockmodusumschaltung in datenspeichersystem Download PDF

Info

Publication number
DE112020002526B4
DE112020002526B4 DE112020002526.8T DE112020002526T DE112020002526B4 DE 112020002526 B4 DE112020002526 B4 DE 112020002526B4 DE 112020002526 T DE112020002526 T DE 112020002526T DE 112020002526 B4 DE112020002526 B4 DE 112020002526B4
Authority
DE
Germany
Prior art keywords
block
pool
processor
blocks
mode
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.)
Active
Application number
DE112020002526.8T
Other languages
English (en)
Other versions
DE112020002526T5 (de
Inventor
Roman Alexander Pletka
Aaron Daniel Fry
Timothy Fisher
Sasa Tomic
Nikolaos Papandreou
Nikolas Ioannou
Radu Ioan Stoica
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 DE112020002526T5 publication Critical patent/DE112020002526T5/de
Application granted granted Critical
Publication of DE112020002526B4 publication Critical patent/DE112020002526B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • G06F3/0616Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
    • 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/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0614Improving the reliability of storage systems
    • 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/0629Configuration or reconfiguration of storage systems
    • G06F3/0631Configuration or reconfiguration of storage systems by allocating resources to storage systems
    • 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/0638Organizing or formatting or addressing of data
    • G06F3/0644Management of space entities, e.g. partitions, extents, pools
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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
    • 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
    • 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/7211Wear leveling
    • 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
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

Durch einen Computer implementiertes Verfahren (700) zum Umschalten von Blockmodi in einem Speichersystem, umfassend:Führen (702) einer Blockwechselmetrik für jeden Speicherblock im Speichersystem;Ermitteln (705), ob ein erster Block in einem ersten Pool in einen zweiten Pool übertragen werden soll, gemäß einer Blockwechselmetrik, die dem ersten Block entspricht;in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik in den zweiten Pool übertragen werden soll, Löschen (708) des ersten Blocks;Übertragen (732) des ersten Blocks aus dem ersten Pool in eine zweite Warteschlange für verwendungsbereite Blöcke (RTU), die dem zweiten Pool entspricht;Löschen (716) eines zweiten Blocks; undÜbertragen (718) des zweiten Blocks aus dem zweiten Pool in eine erste RTU-Warteschlange, die dem ersten Pool entspricht,wobei die Blöcke (504) im ersten Pool im Einstufenzellen- (SLC-) Modus konfiguriert sind,wobei die Blöcke (506) im zweiten Pool im Multibit-pro-Zelle-Modus konfiguriert sind.

Description

  • TECHNISCHES GEBIET
  • Die vorliegende Erfindung betrifft allgemein Datenspeichersysteme und insbesondere Blockmodusumschalten in Datenspeichersystemen.
  • HINTERGRUND
  • Am Beispiel des Flashspeichers zeigt sich, dass sich die Leistungsmerkmale herkömmlicher auf NAND-Flash beruhende Halbleiterspeicher (solid state drives) grundlegend von denen herkömmlicher Festplattenlaufwerke (HDDs, hard disk drives) unterscheiden. Daten in herkömmlichen SSDs sind in der Regel in 4, 8 oder 16 KB großen Seiten organisiert. Außerdem sind Seitenlesevorgänge in SSDs in der Regel um eine Größenordnung schneller als Schreibvorgänge, und die Latenzzeit hängt weder von der aktuellen noch von der vorherigen Position der Vorgänge ab.
  • Bei Flash-basierten SSDs werden Speicherorte jedoch blockweise gelöscht, bevor sie beschrieben werden. Die Größe einer Löschblockeinheit kann zwischen 256, 512 oder sogar mehreren Tausend Seiten liegen, und der Löschvorgang nimmt etwa eine Größenordnung mehr Zeit in Anspruch als ein Seitenprogrammiervorgang. Aufgrund der inhärenten Eigenschaften von NAND-Flash schreiben Flash-basierte SSDs Daten in unterschiedliche Speicherorte (out-of-place), wobei eine Zuordnungstabelle logische Adressen der geschriebenen Daten physischen Adressen zuordnet. Diese Zuordnungstabelle wird normalerweise als Logical-to-Physical- (LPT-, Logisch-auf-Physisch-) Tabelle bezeichnet.
  • Da Flash-basierte Speicherzellen Lesefehler und/oder Ausfälle aufgrund von Abnutzung oder aus anderen Gründen zeigen, kann zusätzliche Redundanz sowohl innerhalb von Speicherseiten als auch zwischen Speicherchips verwendet werden (z.B. RAID-5- und RAID-6-ähnliche Schemata). Die zusätzliche Redundanz innerhalb von Speicherseiten kann einen Fehlerkorrekturcode (ECC, error correction code) umfassen, der z.B. BCH-, LDPC- oder andere Codes umfassen kann. Während das Hinzufügen von ECC in Seiten relativ einfach ist, ist die Organisation von Speicherblöcken in RAID-ähnlichen Stripes (einheitenübergreifend gespeicherten Datenblöcken) komplexer. So werden beispielsweise einzelne Blöcke im Laufe der Zeit ausgemustert, was entweder eine Neuorganisation der Stripes oder eine Kapazitätsverringerung des Stripe erfordert. Da die Organisation der Stripes zusammen mit der LPT die Platzierung der Daten definiert, verwenden SSDs in der Regel eine LSA- (Log-Structured Array, Protokoll-Array) Architektur, die diese beiden Methoden kombiniert.
  • Die LSA-Architektur stützt sich auf Out-of-Place-Schreibvorgänge. Bei diesem Ansatz führt ein Speicherseiten-Überschreibvorgang dazu, dass die Speicherseitendaten an einen neuen Ort im Speicher geschrieben werden, die alte Kopie der Speicherseitendaten als ungültig markiert wird und dann die Zuordnungsinformationen aktualisiert werden. Aufgrund der Beschränkungen der aktuellen NAND-Speichertechnologie kann ein ungültig gemachter Datenspeicherort erst dann wieder verwendet werden, wenn der gesamte Block, zu dem er gehört, gelöscht wurde. Vor dem Löschen wird der Block jedoch einer Speicherbereinigung (Garbage Collection) unterzogen, bei der alle gültigen Daten des Blocks in einen neuen Block verschoben werden. Die Speicherbereinigung eines Blocks wird in der Regel so lange wie möglich aufgeschoben, um die Menge der ungültig gemachten Daten im Block zu maximieren und damit die Anzahl gültiger Seiten zu reduzieren, die verschoben werden, da das Verschieben von Daten zusätzliche Schreibvorgänge verursacht und damit die Schreibverstärkung erhöht.
  • Im Stand der Technik beschreibt US9176862B2 ein Verfahren und System zum SLC-MLC-Verschleißausgleich in einem Flash-Speichergerät und US7948798B1 ein Verfahren zum Programmieren eines Flash-Speichers mit einer Vielzahl von Speicherblöcken.
  • KURZDARSTELLUNG
  • Gemäß einer Ausführungsform wird ein durch einen Computer implementiertes Verfahren zum Umschalten von Blockmodi in einem Speichersystem verwendet. Das durch einen Computer implementierte Verfahren umfasst: Führen einer Blockwechselmetrik für jeden Speicherblock im Speichersystem. Gemäß einer Blockwechselmetrik, die dem ersten Block entspricht, wird ermittelt, ob ein erster Block in einem ersten Pool in einen zweiten Pool übertragen werden soll. In Reaktion auf gemäß der dem ersten Block entsprechenden Blockwechselmetrik erfolgendes Feststellen, dass der erste Block im ersten Pool in den zweiten Pool übertragen werden sollte, wird der erste Block gelöscht. Der erste Block wird dann aus dem ersten Pool in eine zweite Warteschlange für verwendungsbereite Blöcke (RTU, ready-to-use) übertragen, die dem zweiten Pool entspricht. Ein zweiter Block im zweiten Pool wird ebenfalls gelöscht und vom zweiten Pool in eine erste RTU-Warteschlange übertragen, die dem ersten Pool entspricht. Die Blöcke im ersten Pool sind im SLC- (Single-Level Cell, einstufige Speicherzelle) Modus konfiguriert, während die Blöcke im zweiten Pool im Multi-Bit-per-Cell- (Multibit-pro-Zelle-) Modus konfiguriert sind.
  • Gemäß einer anderen Ausführungsform enthält ein Computerprogrammprodukt ein durch einen Computer lesbares Speichermedium mit darauf enthaltenen Programmanweisungen. Die Programmanweisungen sind durch einen Prozessor lesbar und/oder ausführbar, um den Prozessor zu veranlassen, das vorstehend genannte Verfahren durchzuführen.
  • Gemäß einer weiteren Ausführungsform enthält ein System Folgendes: eine Mehrzahl von nichtflüchtigen Direktzugriffsspeicher- (NVRAM, non-volatile random access memory) Blöcken, die zum Speichern von Daten konfiguriert sind. In einigen Ansätzen enthält das System zudem einen Prozessor und in den Prozessor integrierte und/oder von diesem ausführbare Logik. Die Logik ist so konfiguriert, dass sie das vorstehend genannte Verfahren durchführt.
  • Weitere Aspekte und Ausführungsformen der vorliegenden Erfindung werden aus der nachfolgenden ausführlichen Beschreibung ersichtlich, welche in Zusammenschau mit den Zeichnungen beispielhaft die Prinzipien der Erfindung veranschaulicht.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
    • 1 ist ein Schaltbild einer nichtflüchtigen Speicherkarte gemäß einer Ausführungsform.
    • 2 ist ein Schaltbild einer Datenspeichersystemarchitektur gemäß einer Ausführungsform.
    • 3 ist ein Systemschaltbild gemäß einer Ausführungsform.
    • 4 ist ein Konzeptschaubild, das einen Block-Stripe und einen Page-Stripe gemäß einer Ausführungsform enthält.
    • 5 ist eine repräsentative Teilansicht eines nichtflüchtigen Speichermoduls gemäß einer Ausführungsform.
    • 6 ist eine repräsentative Teilansicht einer Daten- und Blockflussübersicht gemäß einer Ausführungsform.
    • 7 ist ein Ablaufplan eines Verfahrens gemäß einer Ausführungsform.
    • 8 ist eine Netzwerkarchitektur gemäß einer Ausführungsform.
    • 9 ist eine repräsentative Hardwareumgebung, die gemäß einer Ausführungsform zu den Servern und/oder Clients aus 8 gehören kann.
    • 10 ist ein gestuftes Datenspeichersystem gemäß einer Ausführungsform.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die nachfolgende Beschreibung erfolgt zum Zwecke der Veranschaulichung der Grundprinzipien der vorliegenden Erfindung und soll nicht die vorliegend beanspruchten erfindungsgemäßen Konzepte einschränken. Ferner können vorliegend beschriebene jeweilige Merkmale in Kombination mit anderen beschriebenen Merkmalen in jeder der verschiedenen möglichen Kombinationen und Permutationen verwendet werden.
  • Soweit nicht vorliegend ausdrücklich anders angegeben, sind alle Bezeichnungen so breit wie möglich auszulegen, einschließlich aus der Spezifikation implizierter Bedeutungen sowie Bedeutungen, die von einem Fachmann verstanden werden und/oder die in Wörterbüchern, Abhandlungen usw. definiert sind.
  • Zudem ist zu beachten, dass die in der Spezifikation und den sich anschließenden Ansprüchen verwendeten Singularformen „ein/e/“ und „der/die/das“ die Möglichkeit mehrerer Bezugsobjekte mit einschließen, sofern nicht anders angegeben. Ferner ist zu beachten, dass die Ausdrücke „weist auf“ und/oder „aufweisend“, soweit in dieser Spezifikation verwendet, das Vorliegen genannter Merkmale, Zahlen, Schritte, Vorgänge, Elemente und/oder Komponenten angibt, jedoch nicht das Vorliegen oder Hinzufügen eines oder mehrerer weiterer Merkmale, Zahlen, Schritte, Vorgänge, Elemente, Komponenten und/oder Gruppen davon ausschließt.
  • Die nachfolgende Beschreibung offenbart verschiedene bevorzugte Ausführungsformen von Datenspeichersystemen sowie deren Betrieb und/oder Komponenten. Es sollte beachtet werden, dass verschiedene Ausführungsformen vorliegend mit einer breiten Palette von Speichermedien implementiert werden können, darunter zum Beispiel nichtflüchtige Direktzugriffsspeicher- (NVRAM-) Technologien wie NAND-Flashspeicher, NOR-Flashspeicher, Phasenwechselspeicher (PCM, phase-change memory), magnetoresistiver RAM (MRAM) und resistiver RAM (RRAM). Um den Kontext zu verdeutlichen und um den Leser zu unterstützen, können verschiedene Ausführungsformen unter Bezugnahme auf einen nichtflüchtigen Speichertyp beschrieben werden. Hierbei handelt es sich lediglich um Beispiele, die nicht als Einschränkung der in den Ansprüchen definierten Erfindung angesehen werden sollten.
  • In einer allgemeinen Ausführungsform wird ein durch einen Computer implementiertes Verfahren zum Umschalten von Blockmodi in einem Speichersystem verwendet. Das durch einen Computer implementierte Verfahren umfasst: Führen einer Blockschaltmetrik für jeden Speicherblock im Speichersystem. Gemäß einer Blockwechselmetrik, die dem ersten Block entspricht, wird ermittelt, ob ein erster Block in einem ersten Pool in einen zweiten Pool übertragen werden soll. In Reaktion auf gemäß der dem ersten Block entsprechenden Blockwechselmetrik erfolgendes Feststellen, dass der erste Block im ersten Pool in den zweiten Pool übertragen werden sollte, wird der erste Block gelöscht. Der erste Block wird dann aus dem ersten Pool in eine zweite RTU- (ready-to-use, verwendungsbereit) Warteschlange übertragen, die dem zweiten Pool entspricht. Ein zweiter Block im zweiten Pool wird ebenfalls gelöscht und vom zweiten Pool in eine erste RTU-Warteschlange übertragen, die dem ersten Pool entspricht. Die Blöcke im ersten Pool sind im SLC- (Single-Level Cell, einstufige Speicherzelle) Modus konfiguriert, während die Blöcke im zweiten Pool im Multi-Bit-per-Cell- (Multibit-pro-Zelle-) Modus konfiguriert sind.
  • In einer anderen allgemeinen Ausführungsform enthält ein Computerprogrammprodukt ein durch einen Computer lesbares Speichermedium mit darauf enthaltenen Programmanweisungen. Die Programmanweisungen sind durch einen Prozessor lesbar und/oder ausführbar, um den Prozessor zu veranlassen, das vorstehend genannte Verfahren durchzuführen.
  • In einer weiteren allgemeinen Ausführungsform enthält ein System: eine Mehrzahl nichtflüchtiger Direktzugriffsspeicher- (NVRAM-) Blöcke, die zum Speichern von Daten konfiguriert sind. In einigen Ansätzen enthält das System zudem einen Prozessor und in den Prozessor integrierte und/oder von diesem ausführbare Logik. Die Logik ist so konfiguriert, dass sie das vorstehend genannte Verfahren durchführt.
  • 1 zeigt eine Speicherkarte 100 gemäß einer Ausführungsform. Es sollte beachtet werden, dass, wenngleich die Speicherkarte 100 in der vorliegenden Ausführungsform als eine beispielhafte nichtflüchtige Datenspeicherkarte dargestellt ist, in einem Datenspeichersystem gemäß alternativen Ausführungsformen verschiedene andere Arten von nichtflüchtigen Datenspeicherkarten verwendet werden können. Daraus folgt, dass die Architektur und/oder die Komponenten der Speicherkarte 100 in keiner Weise dazu gedacht sind, die Erfindung einzuschränken, sondern vielmehr als nichteinschränkendes Beispiel dargestellt wurden.
  • Darüber hinaus kann wahlweise die vorliegende Speicherkarte 100 zusammen mit Merkmalen aus beliebigen anderen vorliegend aufgeführten Ausführungsformen implementiert werden, beispielsweise den unter Bezugnahme auf die anderen Figuren beschriebenen. Eine solche Speicherkarte 100 und andere vorliegend vorgestellte können jedoch in verschiedenen Anwendungen und/oder in Permutationen verwendet werden, die konkret in den vorliegend aufgeführten veranschaulichenden Ausführungsformen beschrieben sein können oder auch nicht. Ferner kann die vorliegend vorgestellte Speicherkarte 100 in jeder gewünschten Umgebung verwendet werden.
  • Unter weiterer Bezugnahme auf 1 enthält die Speicherkarte 100 ein Gateway 102, einen Universalprozessor (GPP, general purpose processor) 112 (z.B. eine ASIC, ein FPGA, eine CPU usw.), der mit einem GPP-Speicher 114 verbunden ist (der RAM, ROM, batteriegepufferten DRAM, Phasenänderungs- (PC-) RAM, MRAM, STT-MRAM usw. oder eine Kombination aus diesen aufweisen kann), und eine Reihe von Speicher-Controllern 108, die im vorliegenden Beispiel Flash-Controller umfassen. Jeder Speicher-Controller 108 ist über Kanäle 106mit einer Mehrzahl von NVRAM-Speichermodulen 104 verbunden (die NAND-Flash- oder andere nichtflüchtige Speichertypen, wie die vorstehend aufgeführten, aufweisen können).
  • Gemäß verschiedenen Ausführungsformen können einer oder mehrere der Controller 108 ein oder mehrere Prozessoren und/oder beliebige Logik zum Steuern eines beliebigen Teilsystems der Speicherkarte 100 sein oder diese umfassen. Beispielsweise steuern die Controller 108 in der Regel die Funktionen der NVRAM-Speichermodule 104, wie etwa das Schreiben von Daten, die Rückführung von Daten, das Lesen von Daten usw. Die Controller 108 können mit einer im Fachgebiet bekannten Logik sowie mit beliebiger vorliegend offenbarter Logik arbeiten und können daher für beliebige der vorliegend enthaltenen Beschreibungen nichtflüchtiger Speicher in verschiedenen Ausführungsformen als Prozessor betrachtet werden.
  • Darüber hinaus kann der Controller 108 so konfiguriert und/oder programmierbar sein, dass er die vorliegend vorgestellte Methodik teilweise oder ganz durchführt. Der Controller 108 kann somit als so konfiguriert betrachtet werden, dass er mittels Logik, die in einen oder mehrere Chips, Module und/oder Blöcke programmiert ist, Software, Firmware und/oder anderer Anweisungen, die für einen oder mehrere Prozessoren verfügbar sind, usw. sowie Kombinationen aus diesen, verschiedene Arbeitsschritte durchführt.
  • Unter weiterer Bezugnahme auf 1 ist jeder Speicher-Controller 108 zudem mit einem Controller-Speicher 110 verbunden, der vorzugsweise einen Cache enthält, der eine nichtflüchtige Speicherstruktur gemäß den verschiedenen vorliegend beschriebenen Ausführungsformen repliziert. Je nach gewünschter Ausführungsform kann der Controller-Speicher 110 jedoch auch ein batteriegepufferter DRAM, ein Phasenwechsel- (PC-) RAM, ein MRAM, ein STT-MRAM usw. oder eine Kombination aus diesen sein.
  • Wie bereits erwähnt, kann die Speicherkarte 100 je nach der gewünschten Ausführungsform in verschiedenen Arten von Datenspeichersystemen implementiert werden. 2 veranschaulicht eine Datenspeichersystemarchitektur 200 gemäß einer beispielhaften Ausführungsform, die die Erfindung in keiner Weise einschränken soll. Darüber hinaus ist zu beachten, dass das Datenspeichersystem 220 aus 2 verschiedene Komponenten enthalten kann, die auch in der Ausführungsform aus 1 enthalten sind.
  • Gemäß 2 weist das Datenspeichersystem 220 eine Anzahl von Schnittstellenkarten 202 auf, die so konfiguriert sind, dass sie über E/A-Zwischenverbindungen 204 mit einem oder mehreren Prozessorsystemen 201 Daten austauschen können. Das Datenspeichersystem 220 kann auch einen oder mehrere RAID-Controller 206 aufweisen, die so konfiguriert sind, dass sie Datenspeicherung in einer Mehrzahl nichtflüchtiger Datenspeicherkarten 208 steuern. Die nichtflüchtigen Datenspeicherkarten 208 können NVRAM, Flashspeicherkarten, RAM, ROM und/oder einen anderen bekannten Typ von nichtflüchtigem Speicher aufweisen.
  • Die E/A-Zwischenverbindungen 204 können beliebige bekannte Datenübertragungsprotokolle aufweisen, beispielsweise 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 (PCIe) usw. und/oder eine beliebige Kombination aus diesen.
  • Der oder die RAID-Controller 206 im Datenspeichersystem 220 können ein Paritätsschema, das dem von RAID-5 oder RAID-10 eingesetzten ähnelt, oder ein anderes geeignetes Paritätsschema durchführen, wie ein Fachmann beim Lesen der vorliegenden Beschreibungen versteht.
  • Jedes Prozessorsystem 201 weist einen oder mehrere Prozessoren 210 (wie etwa CPUs, Mikroprozessoren usw.), eine lokale Datenspeicherung 211 (z.B. den RAM 914 aus 9, den ROM 916 aus 9 usw.) und einen E/A-Adapter 218 auf, der so konfiguriert ist, dass er mit dem Datenspeichersystem 220 Daten austauscht.
  • Unter erneuter Bezugnahme auf 1 können die Speicher-Controller 108, der GPP 112 und/oder andere vorliegend beschriebene Controller (z.B. die RAID-Controller 206 aus 2) je nach der gewünschten Ausführungsform in der Lage sein, verschiedene Funktionen an gespeicherten Daten durchzuführen. Insbesondere können Speicher-Controller oder der GPP 112 Logik enthalten, die so konfiguriert ist, dass sie eine oder mehrere der nachstehenden Funktionen ausführt, die keineswegs als ausschließende Liste zu verstehen sind. Mit anderen Worten: Je nach gewünschter Ausführungsform kann Logik eines Speichersystems so konfiguriert sein, dass sie zusätzliche oder alternative Funktionen ausführt, wie ein Fachmann beim Lesen der vorliegenden Beschreibung versteht.
  • Speicherbereinigung
  • Die Speicherbereinigung im Zusammenhang mit SSD-Speicher-Controllern der vorliegenden Beschreibung kann den Prozess des Identifizierens von Datenblöcken, die für eine künftige Nutzung zurückgewonnen werden sollen, und des Verschiebens aller in diesen noch gültigen Seiten umfassen. Darüber hinaus können je nach dem konkreten Controller und/oder der jeweiligen in Betrieb befindlichen Garbage-Collection-Einheit logische Löschblöcke (LEBs, logical erase blocks) identifiziert werden, die wiedergewonnen und/oder verschoben werden sollen. In der Regel entspricht ein LEB einem Block-Stripe, wobei alternative Implementierungen jedoch auch eine feste Anzahl von Block-Stripes oder einen einzelnen Block als LEB betrachten können.
  • Ein physischer „Block“ stellt eine kleinste Einheit dar, die in einem nichtflüchtigen Speicher, z.B. einem NAND-Flashspeicher, gelöscht und damit für ein Beschreiben mit Daten vorbereitet werden kann. Eine typische Garbage-Collection-Einheit ist jedoch oft ein Vielfaches der physischen Blöcke des nichtflüchtigen Speichers und wird vorliegend ebenfalls als LEB bezeichnet. Dies ist darauf zurückzuführen, dass in LEBs normalerweise RAIDähnliche Paritätsinformationen hinzugefügt werden. Daher können im Falle eines Seiten- oder Blockausfalls Daten nur dann rekonstruiert werden, wenn alle Blöcke im LEB noch Daten enthalten. Dementsprechend können die einzelnen Blöcke aus der Garbage-Collection-Einheit erst dann einzeln oder in einer Einheit gelöscht werden, wenn alle noch gültigen Daten aus allen Blöcken im LEB erfolgreich an neue Stellen verschoben worden sind. Daher werden die vollständigen Garbage-Collection-Einheiten als eine einzige Einheit der Speicherbereinigung unterzogen. Darüber hinaus wirkt sich die Größe des LEB direkt auf die durch Speicherbereinigung verursachte Schreibverstärkung aus. Je größer der LEB ist, desto wahrscheinlicher wird es, dass nicht zusammenhängende Daten zusammen im LEB gespeichert sind und daher mehr LEB-Daten bei der Garbage-Collection-Auswahl verschoben werden müssen.
  • Häufig werden Blöcke von verschiedenen Dies und/oder Flash-Kanälen gruppiert, so dass Blöcke aus derselben Gruppe parallel gelesen oder beschrieben werden können, was die Gesamtbandbreite erhöht. Es ist zudem 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.
  • Zudem ist zu beachten, dass ein LEB ein beliebiges Vielfaches des physischen Speicherblocks enthalten kann, bei dem es sich um eine Einheit der physischen Löschung handelt. Darüber hinaus ermöglicht die Organisation von Speicherblöcken in LEBs nicht nur ein Hinzufügen von RAID-ähnlichen Paritätsschutzschemata unter Speicherblöcken aus verschiedenen Speicherchips, Speicherebenen und/oder Kanälen, sondern auch eine erhebliche Leistungssteigerung durch höhere Parallelität. So können beispielsweise mehrere nichtflüchtige Speicherblöcke in einem RAID-Stripe zusammengefasst werden. Wie ein Fachmann beim Lesen der vorliegenden Beschreibung versteht, verbessern RAID-Schemata im Allgemeinen die Zuverlässigkeit und verringern die Wahrscheinlichkeit von Datenverlust.
  • Gemäß einer beispielhaften Ausführungsform, die die Erfindung in keiner Weise einschränken soll, können die Speicher-Controller (siehe z.B. 108 und/oder GPP 112 aus 1) intern eine Speicherbereinigung durchführen. Wie bereits erwähnt, kann die Speicherbereinigung Auswählen eines zu verschiebenden LEBs umfassen, woraufhin alle Daten, die auf dem ausgewählten LEB noch gültig sind, verschoben (z.B. verlagert) werden können. Nachdem die noch gültigen Daten verschoben wurden, kann der LEB gelöscht und anschließend zum Speichern neuer Daten verwendet werden. Die Menge der aus dem der Speicherbereinigung unterzogenen LEB ausgelagerten Daten bestimmt die Schreibverstärkung. Ein effizienter Weg zur Verringerung der Schreibverstärkung umfasst darüber hinaus Implementieren einer Schreibhitzetrennung.
  • Schreibhitzetrennung
  • Vorliegend bezieht sich die „Schreibhitze“ von Daten auf die Rate (z.B. Häufigkeit), mit der die Daten aktualisiert (z.B. mit neuen Daten überschrieben) werden. Speicherblöcke, die als „heiß“ gelten, werden in der Regel häufig aktualisiert, während Speicherblöcke, die als „kalt“ gelten, eine langsamere Aktualisierungsrate aufweisen als heiße Blöcke.
  • Ein Verfolgen der Schreibhitze einer logischen Seite kann beispielsweise Zuteilen einer bestimmten Anzahl von Bits im LPT-Zuordnungseintrag für die Seite umfassen, um zu verfolgen, wie viele Schreibvorgänge die Seite in einem bestimmten Zeitraum oder -fenster erlebt hat. Normalerweise erhöhen Host-Schreibvorgänge die Schreibhitze, während interne Verschiebungsschreibvorgänge die Schreibhitze verringern. Die tatsächlichen Erhöhungen und/oder Verringerungen der Schreibhitze können deterministisch oder probabilistisch sein.
  • Gleichermaßen kann die Lesehitze mit einer bestimmten Anzahl von zusätzlichen Bits in der LPT für jede logische Seite verfolgt werden. Um Metadaten zu reduzieren, kann die Lesehitze auch auf der Ebene der physischen Blöcke verfolgt werden, wobei für jeden Block separate Zähler für übergreifende und nichtübergreifende Lesevorgänge geführt werden können. Es sollte jedoch beachtet werden, dass die Anzahl an Leseanfragen an einen Speicherblock und/oder der an diesem durchgeführten Lesevorgänge für die Schreibhitzetrennung beim Ermitteln der Schreibhitze des Speicherblocks in einigen Ausführungsformen möglicherweise keine Rolle spielt. Wenn beispielsweise häufig Daten aus einem bestimmten Speicherblock gelesen werden, bedeutet die hohe Lesefrequenz nicht unbedingt, dass dieser Speicherblock auch eine hohe Aktualisierungsrate hat. Vielmehr kann eine hohe Frequenz an einem bestimmten Speicherblock vorgenommener Lesevorgänge auf eine Wichtigkeit, einen Wert usw. der in diesem Speicherblock gespeicherten Daten hinweisen.
  • Durch Gruppieren von Speicherblöcken mit gleichen und/oder ähnlichen Schreibhitzewerten kann eine Schreibhitzetrennung erreicht werden. Insbesondere können Wärmetrennungsverfahren heiße Speicherseiten in bestimmten Speicherblöcken zusammenfassen, während kalte Speicherseiten in separaten Speicherblöcken zusammengefasst werden. Ein hitzegetrennter LEB wird also in der Regel entweder mit heißen oder mit kalten Daten belegt.
  • Der Vorteil der Schreibhitzetrennung ist ein doppelter. Erstens wird durch ein Durchführen eines Garbage-Collection-Prozesses für einen heißen Speicherblock verhindert, dass auch kalte Daten verschoben werden. Ohne eine Schreibhitzetrennung führen häufige Aktualisierungen heißer Daten auch zu unerwünschten Verschiebungen aller kalten Daten, die sich auf demselben LEB befinden wie die zu verschiebenden heißen Daten. Daher ist die Schreibverstärkung, die beim Durchführen der Speicherbereinigung entsteht, bei Ausführungsformen, die eine Schreibhitzetrennung implementieren, viel geringer.
  • Zweitens kann die relative Hitze der Daten für Verschleißausgleichszwecke genutzt werden. So können beispielsweise heiße Daten in einwandfreieren (z.B. jüngeren) Speicherblöcken abgelegt werden, während kalte Daten in im Verhältnis zu diesen einwandfreieren Speicherblöcken weniger einwandfreien (z.B. älteren) Speicherblöcken abgelegt werden können. Auf diese Weise wird die Rate, mit der relativ ältere Blöcke Verschleiß ausgesetzt sind, effektiv verlangsamt, wodurch die Gesamtlebensdauer eines jeweiligen Datenspeichersystems, das Wärmetrennung implementiert, verbessert wird.
  • Schreibzuteilung
  • Die Schreibzuteilung umfasst Ablegen der Daten von Schreibvorgängen an freien Orten offener LEBs. Sobald alle Seiten in einem LEB geschrieben wurden, wird der LEB geschlossen und in einen Pool mit belegten LEBs gelegt. Normalerweise kommen LEBs im belegten Pool für Speicherbereinigung in Frage. Die Anzahl offener LEBs ist normalerweise begrenzt, und jeder LEB, der geschlossen wird, kann entweder sofort oder mit einer gewissen Verzögerung durch einen neuen LEB ersetzt werden, der geöffnet wird, indem ein oder mehrere gelöschte Blöcke dem LEB zugeordnet werden.
  • Während der Durchführung kann die Speicherbereinigung gleichzeitig mit Benutzerschreibvorgängen erfolgen. Wenn beispielsweise ein Benutzer (z.B. ein Host) Daten in eine Einheit schreibt, kann der Controller der Einheit kontinuierlich eine Speicherbereinigung für LEBs mit ungültigen Daten durchführen, um Platz für die neu eingehenden Datenseiten zu schaffen. Wie bereits erwähnt, verfügen die LEBs, an denen die Speicherbereinigung durchgeführt wird, häufig über einige Seiten, die zum Zeitpunkt der Speicherbereinigung noch gültig sind, daher werden diese Seiten bevorzugt in einen neuen LEB verschoben (z.B. geschrieben).
  • Auch hier gilt, dass die vorstehend genannten Funktionen in keiner Weise die Möglichkeiten vorliegend beschriebener und/oder vorgeschlagener Speichersysteme einschränken sollen. Die vorstehend genannten Funktionen sind vielmehr beispielhaft dargestellt, und je nach der gewünschten Ausführungsform kann Logik eines Speichersystems so konfiguriert sein, dass sie zusätzliche oder alternative Funktionen ausführt, wie ein Fachmann beim Lesen der vorliegenden Beschreibung versteht.
  • Gemäß 3 ist nun ein System 300 gemäß einer Ausführungsform veranschaulicht. Wahlweise kann das vorliegende System 300 zusammen mit Merkmalen aus beliebigen anderen vorliegend aufgeführten Ausführungsformen implementiert werden, beispielsweise den unter Bezugnahme auf die anderen Figuren beschriebenen. Ein solches System 300 und andere vorliegend vorgestellte können jedoch in verschiedenen Anwendungen und/oder in Permutationen verwendet werden, die konkret in den vorliegend aufgeführten veranschaulichenden Ausführungsformen beschrieben sein können oder auch nicht. Ferner kann das vorliegend vorgestellte System 300 in jeder gewünschten Umgebung verwendet werden, z.B. in Kombination mit einem Controller.
  • Wie dargestellt, enthält das System 300 einen Schreibcache 302, der mit verschiedenen anderen Komponenten, darunter einem Garbage Collector 304, verbunden ist. Wie bereits erwähnt, kann der Garbage Collector 304 verwendet werden, um durch Verschieben gültiger Daten und Bereitstellen nichtflüchtiger Speicherblöcke für Löschung zur späteren Wiederverwendung LEB-Einheiten freizugeben. Somit kann der Garbage Collector 304 je nach gewünschter Ausführungsform Blöcke aus aufeinanderfolgendem physischem Speicherplatz zurückgewinnen. Gemäß einer beispielhaften Ausführungsform können Blocklöscheinheiten verwendet werden, um die Löschung nichtflüchtiger Speicherblöcke, die vom Garbage Collector 304 übergeben werden, zu verfolgen und/oder abzuschließen.
  • Der Schreibcache 302 ist zudem mit einem Manager für freie Blöcke 306 verbunden, der freie nichtflüchtige Speicherblöcke verfolgen kann, nachdem sie gelöscht wurden. Darüber hinaus kann der Manager für freie Blöcke 306, wie ein Fachmann beim Lesen der vorliegenden Beschreibung versteht, freie Stripes aus nichtflüchtigen Speicherblöcken verschiedener Lanes (z.B. Block-Stripes) unter Verwendung der gelöschten freien nichtflüchtigen Speicherblöcke erstellen.
  • Unter weiterer Bezugnahme auf 3 ist der Schreibcache 302 mit dem LPT-Manager 308 und der Speicher-E/A-Einheit 310 verbunden. Der LPT-Manager 308 unterhält die logisch-physischen Zuordnungen logischer Adressen zu physischen Seiten im Speicher. Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, kann der LPT-Manager 308 die logisch-physischen Zuordnungen von 4 KiB oder 16 KiB großen logischen Adressen unterhalten. Die Speicher-E/A-Einheit 310 tauscht Daten mit den Speicherchips aus, um Operationen auf niedriger Ebene durchzuführen, z.B. Lesen einer oder mehrerer nichtflüchtiger Speicherseiten, Schreiben einer nichtflüchtigen Speicherseite, Löschen eines nichtflüchtigen Speicherblocks usw.
  • Zum besseren Verständnis der vorliegend verwendeten Unterscheidung zwischen Block-Stripes und Page-Stripes zeigt 4 ein Konzeptschaubild 400 gemäß einer Ausführungsform. LEBs werden aus Block-Stripes aufgebaut, und in der Regel wird ein einzelner Block-Stripe zum Aufbau eines LEB verwendet. In alternativen Ausführungsformen können jedoch auch mehrere Block-Stripes verwendet werden, um einen LEB zu bilden. Wahlweise kann das vorliegende Konzeptschaubild 400 zusammen mit Merkmalen aus beliebigen anderen vorliegend aufgeführten Ausführungsformen implementiert werden, beispielsweise den unter Bezugnahme auf die anderen Figuren beschriebenen. Ein solches Konzeptschaubild 400 und andere vorliegend vorgestellte können jedoch in verschiedenen Anwendungen und/oder in Permutationen verwendet werden, die konkret in den vorliegend aufgeführten veranschaulichenden Ausführungsformen beschrieben sein können oder auch nicht. Ferner kann das vorliegend vorgestellte Controller-Konzeptschaubild 400 in jeder gewünschten Umgebung verwendet werden. Somit kann das beispielhafte Konzeptdiagramm 400 des nichtflüchtigen Speicher-Controllers von 4 in einer Cache-Architektur implementiert werden. Je nach gewünschter Ausführungsform kann das Konzeptschaubild 400 aus 4 jedoch auch beim Definieren der Organisation von im nichtflüchtigen Speicher gespeicherten Daten eingesetzt werden. Dementsprechend werden beide Implementierungen im Folgenden nacheinander beschrieben.
  • Nichtflüchtiger Speicher
  • Gemäß 4 enthält das Konzeptschaubild 400 einen Satz von M+1 aggregierten Ebenen, die mit „Ebene 0“ bis „Ebene M“ bezeichnet sind. Eine aggregierte Ebene besteht aus allen physischen Ebenen mit demselben Ebenenindex auf verschiedenen Kanälen. Es sei darauf hingewiesen, dass aggregierte Ebenen vorliegend auch schlicht als Ebenen bezeichnet werden.
  • Bei Implementierung mit in einem nichtflüchtigen Speicher gespeicherten Daten kann jede physische Ebene auf einem Kanal einen großen Satz von Blöcken enthalten, z.B. typischerweise in der Größenordnung von 1024, 2048 oder mehr. Darüber hinaus können eine oder mehrere physische Ebenen zudem verschiedene zusätzliche Blöcke enthalten, die als Ersatzblöcke für schlechte Blöcke (z.B. Blöcke mit schlechter Leistung, Blöcke mit unerwünschten Eigenschaften usw.) verwendet werden können.
  • In jeder Ebene des nichtflüchtigen Speichers kann ein einzelner Block aus jedem Kanal einen jeweiligen Block-Stripe bilden. Daraus folgt, dass eine Anzahl an Block-Stripes, die von einer bestimmten Ausführungsform des nichtflüchtigen Speichers unterstützt werden, durch die Anzahl der Blöcke pro Ebene und die Anzahl der Ebenen bestimmt werden kann.
  • In der Explosionsdarstellung der Ebene 0 zeigt das Konzeptschaubild 400 ferner einen einzigen Block-Stripe (Block-Stripe 0) aus dem Satz von Block-Stripes, die in den übrigen Ebenen unterstützt werden. Wie gezeigt, enthält der Block-Stripe 0 der Ebene 0 11 Blöcke, einen Block aus jedem Kanal mit der Bezeichnung „Kanal 0“ bis „Kanal 10“. Es ist zu beachten, dass sich die Zuordnung von Blöcken zu Block-Stripes im Laufe der Zeit ändern kann, da Block-Stripes in der Regel aufgelöst werden, nachdem sie einer Speicherbereinigung unterzogen wurden. Gelöschte Blöcke können in Pools freier Blöcke abgelegt werden, wobei neue Block-Stripes aus Blöcken in den Pools freier Blöcke zusammengestellt werden, wenn die Schreibzuteilung neue Block-Stripes anfordert. Betrachtet man beispielsweise das Konzeptschaubild 400, so sind Block 10 aus Kanal 0 und Block 41 aus Kanal 4 aktuell dem abgebildeten Block-Stripe 0 der Ebene 0 zugehörig. Darüber hinaus enthält der abgebildete Block-Stripe 0 N+1 Page-Stripes, und jeder Block enthält daher N+1 Seiten, die mit „Seite 0“ bis „Seite N“ bezeichnet sind.
  • Cache-Architektur
  • Unter weiterer Bezugnahme auf 4 kann jeder Seitenblock in der Explosionsdarstellung der aggregierten Ebene 0 bei Implementierung in einer Cache-Architektur einen eindeutigen Block aus einem Kanal darstellen. Gleichermaßen steuert jeder Kanal einen einzelnen individuellen Block bei, der einen Block-Stripe bildet. Betrachtet man beispielsweise das Konzeptschaubild 400, so umfasst Block 10 aus Kanal 0 alle darin enthaltenen Seiten (Seite 0 bis Seite N), während Block 41 aus Kanal 4 allen in diesem enthaltenen Seiten entspricht, und so weiter.
  • Im Zusammenhang mit einem Speicher-Controller, der z.B. in der Lage sein kann, RAID auf Kanalebene zu implementieren, besteht ein Block-Stripe aus mehreren Blöcken, die einen Stripe aus Blöcken bilden. Unter weiterer Betrachtung von 4 bilden die mehreren Blöcke der aggregierten Ebene 0 den Block-Stripe 0. Während alle Blöcke eines Block-Stripe in der Regel zur gleichen aggregierten Ebene gehören, können in einigen Ausführungsformen ein oder mehrere Blöcke eines Block-Stripe zu verschiedenen physischen Ebenen gehören. Daraus folgt, dass jede aggregierte Ebene einen oder mehrere Block-Stripes enthalten kann. Somit können gemäß einer veranschaulichenden Ausführungsform Blöcke 0 bis 10 aus verschiedenen physischen Ebenen einen Block-Stripe bilden.
  • Unabhängig davon, ob das Konzeptschaubild 400 aus 4 mit nichtflüchtigem Speicher und/oder einer Cache-Architektur implementiert wird, kann die Anzahl an Seiten in jedem Block und/oder die Anzahl an Kanälen in jeder Ebene je nach gewünschter Ausführungsform variieren. Gemäß einer beispielhaften Ausführungsform, die die Erfindung in keiner Weise einschränken soll, kann ein Block 256 Seiten enthalten, kann aber in verschiedenen Ausführungsformen auch mehr oder weniger enthalten. Analog kann die Anzahl der Kanäle pro Ebene und/oder die Anzahl der Ebenen je nach gewünschter Ausführungsform variieren.
  • Unter weiterer Bezugnahme auf 4 bezeichnen alle Seiten in einem Block-Stripe mit demselben Seitenindex einen Page-Stripe. Zum Beispiel enthält der Page-Stripe 0 die erste Seite (Seite 0) jedes Kanals im Block-Stripe 0 der Ebene 0. Gleichermaßen enthält der Page-Stripe N die letzte Seite (Seite N) jedes Kanals im Block-Stripe 0 der Ebene 0.
  • Wie bereits erwähnt, haben sich die physischen Konfigurationen von Speicherblöcken im nichtflüchtigen Speicher im Laufe der Zeit geändert. In der Vergangenheit hatten Flash-Blöcke beispielsweise eine Konfiguration mit einem Bit pro Zelle (single-bit-per-cell), aber durch Verbesserungen bei der Datenspeicherung wurden Flash-Blöcke eingeführt, die Konfigurationen mit mehreren Bits pro Zelle (multi-bit-per-cell) implementieren. Blöcke mit Multibit-pro-Zelle-Konfigurationen können zwar mehr Informationen speichern als Blöcke mit einer Einzelbit-pro-Zelle-Konfiguration, allerdings hat diese höhere Speicherkapazität ihren Preis in Form von Leistungslatenz. Beispielsweise sind Schreiblatenzen bei Speicherblöcken mit einer Einzelbit-pro-Zelle-Konfiguration etwa 2,5- bis 10-mal geringer als bei Speicherblöcken mit einer Multibit-pro-Zelle-Konfiguration. Gleichermaßen weisen Speicherblöcke mit einer Einzelbit-pro-Zelle-Konfiguration geringere Leselatenzen auf als Speicherblöcke mit Multibit-pro-Zelle-Konfigurationen.
  • Dieser Kompromiss zwischen Speicherkapazität und Leistungslatenz ermöglicht es Speichersystemen, die Leistungsfähigkeit eines Speichers bis zu einem gewissen Grad anzupassen. So kann ein Speichersystem, für das ein hohes Maß an E/A-Verkehr oder Programmier-/Lösch- (P/E-, program/erase) Zyklen vorhergesagt wird, selektiv eine größere Anzahl von Speicherblöcken mit einer Einzelbit-pro-Zelle-Konfiguration einbeziehen als solche mit einer Multibit-pro-Zelle-Konfiguration. Umgekehrt kann ein Speichersystem, über das vorhergesagt wird, dass es eine große Menge an kalten Daten speichert, selektiv eine größere Anzahl von Speicherblöcken mit Multi-Bit-pro-Zelle-Konfigurationen einbeziehen als solche mit einer Einzelbit-pro-Zelle-Konfiguration. Allerdings verschlechtern sich Blöcke eines nichtflüchtigen Speichers mit der Zeit und werden schließlich fehleranfällig und letztlich unbrauchbar. Herkömmliche Speichersysteme, die eine statische Zuweisung von Speicherblöcken zu verschiedenen Pools implementieren, sind daher nicht in der Lage, einen Verschleißausgleich vorzunehmen und/oder eine effiziente Speicherleistung aufrechtzuerhalten.
  • In scharfem Kontrast zu diesen Unzulänglichkeiten herkömmlicher Systeme implementieren verschiedene der vorliegend enthaltenen Ausführungsformen Hybrid-Controller, die in der Lage sind, dynamisch zwischen verschiedenen Blockkonfigurationen umzuschalten und Größen von Blockpools auf Grundlage von Nutzungs- und Arbeitslasteigenschaften anzupassen, wie z.B. im Folgenden näher beschrieben wird.
  • Gemäß 5 ist ein nichtflüchtiges Speichermodul 500 mit einem Hybrid-Controller 502 gemäß einer Ausführungsform dargestellt. Wahlweise kann das vorliegende Speichermodul 500 zusammen mit Merkmalen aus beliebigen anderen vorliegend aufgeführten Ausführungsformen implementiert werden, beispielsweise den unter Bezugnahme auf die anderen Figuren beschriebenen. Ein solches Speichermodul 500 und andere vorliegend vorgestellte können jedoch in verschiedenen Anwendungen und/oder in Permutationen verwendet werden, die konkret in den vorliegend aufgeführten veranschaulichenden Ausführungsformen beschrieben sein können oder auch nicht. Ferner kann das vorliegend vorgestellte Speichermodul 500 in jeder gewünschten Umgebung verwendet werden. 5 (und die anderen Figuren) kann somit als jede mögliche Permutation umfassend betrachtet werden.
  • Wie bereits erwähnt, enthält das Speichermodul 500 einen Hybrid-Controller 502, der in der Lage ist, Blöcke zu verwalten und/oder anzupassen, die sowohl im Einzelbit-pro-Zelle-Modus (vorliegend auch als „Einstufenzellen- (single-level cell) Modus“ oder „SLC-Modus“ bezeichnet) als auch im Multibit-pro-Zelle-Modus konfiguriert sind. Gemäß einigen Ansätzen verwaltet der Hybrid-Controller 502 die verschiedenen Blockkonfigurationen, indem er diese in zwei verschiedene Pools 504, 506 aufteilt. Einer dieser Pools 504 enthält die Blöcke, die im SLC-Modus konfiguriert sind, während der andere Pool 506 die Blöcke enthält, die im Multibit-pro-Zelle-Modus konfiguriert sind.
  • Jeder der Pools 504, 506 erstreckt sich über eine Anzahl von Datenspeicherkomponenten (z.B. NVRAM-Speichermodule wie NAND-Flashspeichereinheiten), die zusammen als ein Speicher-Array 508 dienen. Daraus folgt, dass die verschiedenen in 5 dargestellten Komponenten als Speicherkarte fungieren und jeden der vorstehend in Bezug auf die Speicherkarte 100 aus 1 beschriebenen Ansätze implementieren können. Unter weiterer Bezugnahme auf 5 ist der Hybrid-Controller 502 zudem mit einem Cachespeicher 510 sowie mit einem Gateway 512 verbunden, das Datenbefehle von einem oder mehreren Hosts, Speichersystemen, laufenden Anwendungen usw. empfängt. Das Gateway 512 ist seinerseits mit einem GPP 514 und einem GPP-Speicher 516 verbunden. Wie bereits erwähnt, kann der GPP 514 von jedem gewünschten Typ sein, z.B. eine ASIC, ein FPGA, eine CPU usw. Gleichermaßen kann der GPP-Speicher 516 von beliebigem Typ sein, z.B. RAM, ROM, batteriegepufferter DRAM, Phasenwechsel- (PC-) RAM, MRAM, STT-MRAM usw. und/oder Kombinationen aus diesen.
  • Der Hybrid-Controller 502 kann Daten, auf die häufig zugegriffen wird (die z.B. gelesen, überschrieben, angehängt usw. werden), in Blöcken speichern, die im SLC-Modus konfiguriert und daher im ersten Pool 504enthalten sind, während Daten, auf die weniger häufig zugegriffen wird, in Blöcken gespeichert werden, die im Multibit-pro-Zelle-Modus konfiguriert und daher im zweiten Pool 506enthalten sind. Mit diesem Speicherschema wird eine effiziente Nutzung der verschiedenen Speicherblöcke und ihrer jeweiligen Leistungsmerkmale erreicht. Da jedoch Speicherblöcke in den einzelnen Pools 504 und 506 im Laufe der Zeit unterschiedlich stark verschleißen und eine unterschiedliche Anzahl von P/E-Zyklen durchlaufen, weicht der effektive Zustand jedes Blocks von dem der anderen ab. Wenngleich der Verschleiß verschiedener Blöcke mit zunehmenden P/E-Zyklen unterschiedlich zunimmt, nimmt der Verschleiß von Multibit-Zellen bei gleichen P/E-Zyklen im Durchschnitt schneller als der von SLC-Zellen zu. Da das Verhältnis von heißen und kalten Daten, die im Speichermodul 500 gespeichert sind, im Zeitverlauf schwankt, kann jeder der jeweiligen Pools 504, 506 unter- und/oder überbeansprucht sein.
  • Dementsprechend kann der Hybrid-Controller 502 jeden der Blöcke im ersten und/oder zweiten Pool 504, 506 selektiv umkonfigurieren, um den Speicher auf Grundlage der tatsächlichen Nutzung und/oder der Arbeitslasteigenschaften dynamisch anzupassen. Auf diese Weise kann das Speichermodul 500 den effektiven Zustand der einzelnen Speicherblöcke regulieren, z.B. durch Verschleißausgleich. Die effiziente Leistung des gesamten Moduls 500 bleibt zudem unabhängig von der Menge darin gespeicherter heißer oder kalter Daten erhalten.
  • 6 zeigt eine detaillierte Ansicht des ersten und des zweiten Pools 504, 506 in 5, und daher weisen verschiedene Komponenten in 6 eine gleiche Nummerierung wie die in 5 auf. Wie dargestellt, empfangen der erste und der zweite Pool 504, 506 jeweils Schreibvorgänge vom Hybrid-Controller 502. Daten in den von jedem des ersten und des zweiten Pools 504, 506 empfangenen Schreibvorgängen werden verwendet, um Speicherblöcke zu füllen, die sich in der ersten und der zweiten Warteschlange für verwendungsbereite Blöcke (RTU, ready-to-use) 600, 602 angesammelt haben. Wenn Blöcke in der ersten und der zweiten RTU-Warteschlange 600, 602 gefüllt sind, werden sie in die jeweiligen Pools belegter Blöcke 604, 606 zurückgegeben, wo sie verbleiben, bis sie als bereit für eine Garbage-Collection-Prozedur identifiziert werden.
  • Bei Erreichen einer geringen Anzahl gelöschter Blöcke in einer der RTU-Warteschlangen 600, 602 wählt der Garbage Collector einen Block aus den entsprechenden Pools belegter Blöcke 604, 606 aus, der über eine hohe Anzahl ungültig gemachter Seiten verfügt. Wie bereits erwähnt, werden in Speicherblöcken enthaltene Daten im Laufe der Zeit durch Schreibaktualisierungen, Löschvorgänge usw. ungültig. Sobald sie ungültig geworden sind, sind die Daten in einem bestimmten Speicherblock praktisch unbrauchbar und können gelöscht werden. Es können jedoch keine ausgewählten Teile von Daten aus einem Block eines nichtflüchtigen Speichers gelöscht und gleichzeitig der Rest der Daten in dem Block beibehalten werden. Vielmehr werden zuerst die gültigen Daten verschoben, bevor der gesamte Block gelöscht wird. Daraus folgt, dass mit zunehmender Menge an ungültig gemachten Daten in einem bestimmten Speicherblock der Block zu einem zunehmend ineffizienter genutzten Speicherplatz wird, wodurch der Anreiz zur Durchführung einer Speicherbereinigung für den Block steigt. Umgekehrt stellt die Durchführung eines Garbage-Collection-Vorgangs für einen Speicherblock, der nur eine geringe Menge ungültig gemachter Daten enthält, eine ineffiziente Nutzung von Datenverarbeitungsressourcen dar und verringert sogar die Effizienz. Dieser Kompromiss zwischen der Nutzung von Datenverarbeitungsressourcen und der Rückgewinnung von Speicherplatz kann so nach Belieben austariert werden. Der Garbage Collector verschiebt dann alle noch gültigen Daten an neue Speicherorte, bevor der Block als löschbereit identifiziert wird.
  • Blöcke, die als löschbereit identifiziert wurden, werden in eine Warteschlange für löschbereite Blöcke (608, 610) in jedem des ersten bzw. zweiten Pools (504, 506) übertragen. Nach dem Eintritt in die Warteschlangen für löschbereite Blöcke 608, 610 wird ein Block schließlich gelöscht und an die jeweilige RTU-Warteschlange 600, 602 zurückgegeben. Speicherblöcke können auch zwischen dem ersten und dem zweiten Pool 504, 506 überführt werden. Es ist jedoch zu beachten, dass Löschvorgänge für Blöcke, die im SLC-Modus konfiguriert sind, etwas anders durchgeführt werden als für Blöcke, die im Multibit-pro-Zelle-Modus konfiguriert sind. Daher wird der Zielmodus (z.B. der Modus, in dem ein bestimmter Block konfiguriert werden soll) für einen Block vorzugsweise angegeben, wenn der Block gelöscht wird. Dies führt dazu, dass Blöcke von der Warteschlange für löschbereite Blöcke 610 in die RTU-Warteschlange 602 oder 600 und ebenso von der Warteschlange für löschbereite Blöcke 608 in die RTU-Warteschlange 600 oder 602verschoben werden können, wie z.B. durch die verschiedenen Pfeillinien in 6 angedeutet.
  • Gemäß der vorliegenden Beschreibung bleibt ein Block, der zwischen Pools „übertragen“ wird, in einer gleichen Ebene und einem gleichen Kanal des Speichers. Mit anderen Worten: Während sich die funktionalen Eigenschaften des jeweiligen Blocks durch Aktivieren bzw. Deaktivieren bestimmter Bits in den einzelnen in diesem enthaltenen Zellen ändern können, bewegen sich die Blöcke selbst nicht physisch im Speicher. Vielmehr werden die Blöcke zwischen Pools in einem logischen Sinne „übertragen“. Der Löschvorgang kann Angeben des Zielmodus des Blocks beinhalten. In einigen Ansätzen werden diese Übertragungen in einer LPT, einem Betriebsprotokoll, einer Blockstatustabelle usw. angezeigt.
  • Bestimmte Blöcke können als für eine Übertragung zwischen dem ersten und dem zweiten Pool 504, 506 in Frage kommend identifiziert werden. Gemäß einigen Ansätzen kann diese Eignung auf einer Anzahl an P/E-Zyklen beruhen, die der Block seit einer letzten Übertragung zwischen den Pools durchlaufen hat, darauf, ob der Block zum Löschen bereit ist, auf einem oder mehreren Guthaben, die den Pools oder Kanälen jedes Pools zugeordnet sind und der Anzahl der Blöcke entsprechen, die in jeder Richtung zwischen den Pools übertragen werden können, usw., wie z.B. nachstehend näher beschrieben wird.
  • Gemäß 7 ist ein Verfahren 700 zum Umschalten von Blockmodi in einem Speichersystem gemäß einer Ausführungsform gezeigt. Gemäß der vorliegenden Erfindung kann in verschiedenen Ausführungsformen das Verfahren 700 unter anderem in jeder der in 1 bis 6 abgebildeten Umgebungen durchgeführt werden. Im Verfahren 700 können natürlich mehr oder weniger Arbeitsschritte als die konkret in 7 beschriebenen enthalten sein, wie ein Fachmann bei Lektüre der vorliegenden Beschreibungen versteht. Die verschiedenen Prozesse des Verfahrens 700 werden im Folgenden beispielsweise im Zusammenhang mit einem Bewerten von Speicherblöcken in einem ersten Pool beschrieben, die im SLC-Modus konfiguriert sind. Jedoch können ein oder mehrere beliebige der verschiedenen Prozesse, die im Verfahren 700 enthalten sind, im Zusammenhang mit einem Bewerten von Speicherblöcken in einem zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, angewandt werden, wie z.B. nachstehend näher beschrieben wird.
  • Jeder der Schritte des Verfahrens 700 kann durch jede geeignete Komponente der Betriebsumgebung durchgeführt werden. Beispielsweise kann in verschiedenen Ausführungsformen das Verfahren 700 teilweise oder ganz durch einen Hybrid-Controller, einen Controller, einen Prozessor, einen Computer usw. oder eine andere Einheit mit einem oder mehreren darin befindlichen Prozessoren durchgeführt werden. In einigen Ausführungsformen kann das Verfahren 700 somit ein durch einen Computer implementiertes Verfahren sein. In solchen Ausführungsformen kann der zur Implementierung des Verfahrens verwendete Computer selbst ein Speichermodul selbst oder einen Teil davon, z.B. den Hybrid-Controller, enthalten. Darüber hinaus können die Begriffe Computer, Prozessor und Controller in Bezug auf jede der vorliegenden Ausführungsformen austauschbar verwendet werden, da diese Komponenten in den vielen verschiedenen Permutationen der vorliegenden Erfindung als gleichwertig betrachtet werden.
  • Darüber hinaus kann für die Ausführungsformen, die einen Prozessor aufweisen, der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software implementiert sind und bevorzugt mindestens eine Hardware-Komponente besitzen, in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 700 durchzuführen. Zu veranschaulichenden Prozessoren zählen, ohne jedoch hierauf eingeschränkt zu sein, eine zentrale Verarbeitungseinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), eine vor Ort programmierbare Gatter-Anordnung (FPGA) usw., Kombinationen aus diesen oder irgendeine andere geeignete Datenverarbeitungseinheit, die im Fachgebiet bekannt ist.
  • Wie in 7 gezeigt, umfasst der Arbeitsschritt 702 des Verfahrens 700 Führen einer Blockwechselmetrik für jeden Speicherblock im Speichersystem. Die Blockwechselmetrik wird in einigen Ansätzen verwendet, um zu ermitteln, ob ein bestimmter Speicherblock neu konfiguriert und in den anderen Pool gewechselt werden kann und/oder sollte (z.B. „muss“). Daraus folgt, dass die für einen bestimmten geführte Blockwechselmetrik bevorzugt in der Lage ist, den Umfang der Nutzung des jeweiligen Blocks zu verfolgen. Es sollte beachtet werden, dass in einigen Ansätzen die Blockwechselmetrik nur für Blöcke geführt wird, die eine vorbestimmte Anzahl programmierter Seiten enthalten. So werden beispielsweise Blockwechselmetriken für Blöcke geführt, für die mindestens die Hälfte der darin enthaltenen Seiten programmiert wurde, bevor der Blockwechselvorgang eingeleitet wird.
  • Je nach Ansatz können für jeden der Speicherblöcke unterschiedliche Arten von Blockwechselmetriken geführt werden. In einigen Ansätzen umfasst die Blockwechselmetrik beispielsweise eine Zählung der P/E-Zyklen für den jeweiligen Block. Darüber hinaus kann die P/E-Zyklenzählung für eine bestimmte Konfiguration des jeweiligen Blocks spezifisch sein. So kann die P/E-Zyklenzählung beispielsweise nur die Anzahl der P/E-Zyklen erfassen, die der betreffende Block durchlaufen hat, während er im Multibit-pro-Zelle-Modus oder im SLC-Modus konfiguriert war. Die Lebensdauer von Blöcken, die im Multibit-Zellen-Modus konfiguriert sind, ist jedoch in der Regel geringer als die Lebensdauer von Blöcken, die im SLC-Modus konfiguriert sind, und daher ist es vorteilhaft, P/E-Zyklen im Multibit-Modus zu verfolgen, wenn sie nur in einem Modus verfolgt werden. Darüber hinaus kann in einer bevorzugten Ausführungsform die P/E-Zyklenzählung in den Wechselmetriken beim Wechseln des Blockmodus zurückgesetzt werden, so dass nur die P/E-Zyklen im aktuellen Modus seit dem letzten Wechsel verwendet werden. Dadurch wird die Menge der für jeden Speicherblock gespeicherten Metadaten reduziert, was die Effizienz des gesamten Systems erhöht. Diese P/E-Zyklenzählung kann verwendet werden, um die P/E-Zyklenzählung für den jeweiligen Block zu extrapolieren, während dieser in anderen Modi konfiguriert ist, wie z.B. ein Fachmann nach dem Lesen der vorliegenden Beschreibung versteht.
  • In anderen Ansätzen umfasst die Blockwechselmetrik eine Rohbitfehlerrate (RBER, raw bit error rate) für den jeweiligen Block. Die RBER kann ferner als Durchschnittswert für alle Seiten im jeweiligen Block, als höchster (z.B. schlechtester) Wert aller Seiten oder Codewörter im jeweiligen Block, als Medianwert aller Seiten im jeweiligen Block usw. geführt werden. Eine Blockwechselmetrik, die auf der RBER eines Blocks basiert, spiegelt vorzugsweise die Beiträge zur RBER wider, die sich aus permanenten Änderungen der zugrunde liegenden Schwellenspannungsverteilungen aufgrund von Programmier-Lösch-Zyklen ergeben. In weiteren Ansätzen umfasst die Blockwechselmetrik Datenzugriffszeiten für den jeweiligen Block, z.B. Lesedurchführungszeiten, Schreibdurchführungszeiten, Löschungszeiten usw. In einigen Ansätzen können sogar Kombinationen verschiedener Blockwechselmetriken implementiert werden. Wenngleich dies in 7 nicht dargestellt ist, kann das Verfahren 700 auch Initialisieren eines oder mehrerer Guthaben umfassen, die der Anzahl der Blöcke entsprechen, die in jeder Richtung zwischen den Pools übertragen werden können. In Bezug auf die vorliegende Beschreibung wird in einigen Ansätzen ein „Guthaben“ verwendet, um sicherzustellen, dass die Speicherpools in Bezug auf ihre jeweilige Größe relativ gleich bleiben, wie z.B. nachstehend näher beschrieben wird.
  • Das Verfahren 700 fährt mit Arbeitsschritt 703 fort, bei dem ein zu löschender Block aus der Warteschlange für löschbereite Blöcke 608 im ersten Pool ausgewählt wird, bevor mit der Entscheidung 704 fortgefahren wird. In einer alternativen Ausführungsform kann der Arbeitsschritt 703 auch einen Block aus dem Pool belegter Blöcke 606 auswählen. Da jedoch alle noch gültigen Daten vor dem Löschen des Blocks verschoben werden müssen, ist es vorteilhaft, einen Block aus der Warteschlange für löschbereite Blöcke 608 auszuwählen. Die Entscheidung 704 umfasst Ermitteln, ob eine Menge programmierter Seiten im ersten Block in einem vorbestimmten Bereich liegt. In einigen Ansätzen muss mindestens die Hälfte der Seiten programmiert sein, um den Modus des Blocks zu ändern, während andere keine solche Einschränkung vorsehen.
  • In Reaktion auf Feststellen, dass die Menge programmierter Seiten im ersten Block nicht im vorbestimmten Bereich liegt, fährt das Verfahren 700 mit dem nachstehend beschriebenen Arbeitsschritt 724 fort. Wenn jedoch festgestellt wird, dass die Menge programmierter Seiten im ersten Block ausreichend ist und somit in dem vorbestimmten Bereich liegt, geht das Verfahren 700 zur Entscheidung 705 über. Dort umfasst die Entscheidung 705 Ermitteln gemäß der dem ersten Block entsprechenden Blockwechselmetrik, ob ein erster Block in einem ersten Pool in einen zweiten Pool übertragen werden muss. Wie vorstehend erwähnt, können Speicherblöcke in zwei verschiedene Pools unterteilt werden, wobei jeder Pool Speicherblöcke enthält, die im gleichen Modus konfiguriert sind. Beispielsweise sind die Blöcke im ersten Pool im SLC-Modus konfiguriert, während die Blöcke im zweiten Pool im Multibit-pro-Zelle-Modus konfiguriert sind (vgl. z.B. die Pools 504, 506 in 5 oben). Die Anzahl der Pools und die Arten der darin enthaltenen Blockkonfigurationen können jedoch je nach gewünschtem Ansatz variieren.
  • Es sollte auch beachtet werden, dass „der erste Block“ in keiner Weise auf einen bestimmten Speicherblock beschränkt ist. Der Ausdruck „erster Block“ bezieht sich vielmehr auf einen beliebigen der Blöcke des ersten Pools, der gerade vom Verfahren 700 bewertet wird. Das Verfahren 700 prüft Blöcke in den Warteschlangen für löschbereite Blöcke (siehe z.B. 608, 610), aber in einem alternativen Ansatz kann das Verfahren 700 auch alle Speicherblöcke in jedem Pool pauschal prüfen, und daher kann die Entscheidung 705 und/oder einer der anderen vorliegend enthaltenen Prozesse iterativ wiederholt werden. Natürlich werden bei jedem durch das Verfahren 700 ausgewählten Block, der sich aktuell im Pool belegter Blöcke befindet (siehe z.B. 606, 604), vorzugsweise alle gültigen Daten darin zunächst durch eine Garbage-Collection-Prozedur verschoben, bevor der Block gelöscht wird, wie z.B. ein Fachmann nach dem Lesen der vorliegenden Beschreibung versteht.
  • Auch hier wird die dem ersten Block entsprechende Blockwechselmetrik verwendet, um zu ermitteln, ob der erste Block in den zweiten Pool übertragen werden muss. Dementsprechend umfasst die Entscheidung 705 in einigen Ansätzen Ermitteln, ob die Blockwechselmetrik in einem vorbestimmten Bereich liegt. Für jeden Pool oder jeden der Speicherblöcke können unterschiedliche Arten von Blockwechselmetriken geführt werden, so dass der Prozess des Ermittelns, ob der erste Block in den zweiten Pool übertragen werden sollte, je nach Art der verfügbaren Metrik unterschiedlich ausfallen kann. In einigen Ansätzen umfasst die Blockwechselmetrik beispielsweise eine P/E-Zyklenzählung für den ersten Block, die verwendet werden kann, um zu ermitteln, ob der erste Block eine vorbestimmte Anzahl von P/E-Zyklen seit einem Wechsel in den aktuellen Modus oder global (d.h. P/E-Zyklen in jedem Modus) durchlaufen hat. In anderen Ansätzen können ein RBER-Wert, der permanente Änderungen in den zugrunde liegenden Schwellenspannungsverteilungen aufgrund von Programmier-Lösch-Zyklen widerspiegelt, und/oder Datenzugriffszeiten im Zusammenhang mit dem ersten Block verwendet werden, um festzustellen, ob der erste Block ein ungewünschtes Betriebsverhalten zeigt. Daraus folgt, dass die Verwendung von Schwellenwerten ein wünschenswerter Weg ist, um die Blockwechselmetriken zu implementieren, da die Schwellenwerte in jedem Modus unterschiedlich sein können. Die Schwellenwerte können auch dynamisch an Arbeitslasteigenschaften angepasst werden (z.B. wenn Poolgrößen geändert werden).
  • In Reaktion auf Feststellen gemäß der entsprechenden Blockwechselmetrik, dass der erste Block gemäß der diesem entsprechenden Blockwechselmetrik in den zweiten Pool übertragen werden muss, geht das Verfahren 700 zu Arbeitsschritt 708 über, der Löschen des ersten Blocks umfasst.
  • Das Verfahren 700 umfasst ferner Übertragen des ersten Blocks aus dem ersten Pool in die zweite RTU-Warteschlange, die dem zweiten Pool entspricht. Siehe Arbeitsschritt 710. Gemäß der vorliegenden Beschreibung verbleibt ein Block, der zwischen RTU-Warteschlangen und/oder Pools „übertragen“ wird, in einer gleichen Ebene und einem gleichen Kanal des Speichers (vgl. z.B. 4). Mit anderen Worten: Während sich die funktionalen Eigenschaften des jeweiligen Blocks durch Aktivieren bzw. Deaktivieren bestimmter Bits in den einzelnen in diesem enthaltenen Zellen ändern können, bewegen sich die Blöcke selbst nicht physisch im Speicher. Vielmehr werden die Blöcke zwischen RTU-Warteschlangen und/oder Pools in einem logischen Sinne „übertragen“. In einigen Ansätzen werden diese Übertragungen in einer LPT, einem Betriebsprotokoll usw. angegeben.
  • Auch hier enthält gemäß der vorliegenden Ausführungsform der erste Pool (zusammen mit der ersten RTU-Warteschlange) Speicherblöcke, die im SLC-Modus konfiguriert sind, während der zweite Pool (zusammen mit der zweiten RTU-Warteschlange) Speicherblöcke enthält, die im Multibit-pro-Zelle-Modus konfiguriert sind. Je nach Ansatz können die Blöcke im zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, eine Anzahl verschiedener Konfigurationen aufweisen. In einigen Ansätzen sind beispielsweise die Blöcke im zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, im Mehrstufenzellen- (MLC, multi-level cell) Modus konfiguriert, während in anderen Ansätzen die Blöcke im zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, im Dreistufenzellen-(TLC, triple-level cell) Modus konfiguriert sind. In weiteren Ansätzen sind die Blöcke im zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, im Vierstufenzellen- (QLC, quad-level cell) Modus konfiguriert, und jeder der im QLC-Modus konfigurierten Blöcke umfasst untere Seiten, obere Seiten, zusätzliche Seiten und oberste Seiten.
  • Da somit sowohl der erste als auch der zweite Pool Speicherblöcke enthalten, die in unterschiedlichen Modi konfiguriert sind, umfasst der Prozess des tatsächlichen Übertragens des ersten Blocks in Arbeitsschritt 710 Umkonfigurieren des Blocks. Je nachdem, 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 Umkonfigurierens des Speicherblocks unterschiedlich durchgeführt werden. So werden beispielsweise Blöcke, die vom ersten Pool in die zweite RTU-Warteschlange übertragen werden, bevorzugt vom SLC-Modus in den Multibit-pro-Zelle-Modus umkonfiguriert. Blöcke, die vom zweiten Pool in die erste RTU-Warteschlange übertragen werden, werden dagegen bevorzugt vom Multibit-pro-Zelle-Modus in den SLC-Modus umkonfiguriert. Der Prozess des Umkonfigurierens eines bestimmten Blocks zwischen dem SLC- und dem Multibit-pro-Zelle-Modus kann durch Deaktivieren und/oder Reaktivieren bestimmter Bits des Blocks, durch logisches Neudefinieren des jeweiligen Blocks usw. oder durch beliebige Prozesse erfolgen, die für einen Fachmann nach dem Lesen der vorliegenden Beschreibung offensichtlich sind.
  • Blöcke können in einen anderen Modus umkonfiguriert werden, wenn sich die genutzte Kapazität und/oder die Arbeitslasteigenschaften ändern (z.B. Skew-Änderungen). In einigen Ansätzen werden jedoch die Arbeitslasteigenschaften möglicherweise nicht erfasst. Wenn die Auslastung und die Arbeitslasteigenschaften unverändert bleiben, aber immer noch Schreibvorgänge durchgeführt werden (z.B. Host- und/oder Verschiebeschreibvorgänge), wird ein Austauschen von Blöcken zwischen Pools durchgeführt.
  • Normalerweise hat Neukalibrieren eines Speicherblocks Auswirkungen auf die Leistung des Blocks selbst. So können sich beispielsweise Leseschwellenspannungsverschiebungswerte, die mit einem Zugreifen auf einen bestimmten Block verbunden sind, in einigen Situationen als Ergebnis der Neukalibrierung ändern. Da das Verfahren 700 jedoch bewirkt, dass Speicherblöcke unabhängig von Auslastungs- und Arbeitslasteigenschaften periodisch umkonfiguriert werden, sind frühere Leseschwellenspannungsverschiebungswerte, die Änderungen in den zugrunde liegenden Schwellenspannungsverteilungen aus P/E-Zyklen kompensieren (d.h. Leseschwellenspannungsverschiebungswerte aus Basiskalibrierungen), oft genau und können in solchen Situationen wiederverwendet werden. Diese früheren Leseschwellenspannungsverschiebungswerte können im Speicher (z.B. in einer Nachschlagetabelle) gespeichert und bei Bedarf abgerufen werden, wodurch die Basiskalibrierung vom Blockmodusumschaltprozess entkoppelt wird. Außerdem beruhen die vorliegend enthaltenen Verfahren nicht auf Schreibhitzetrennung. Dies verringert Ausführungsverzögerungen und spart Datenverarbeitungsleistung, wodurch die Effizienz des Systems erhöht wird. In manchen Situationen kann jedoch ein neuer Schwellenspannungsverschiebungswert für einen bestimmten Block mit Hilfe von Prozessen neu kalibriert werden, die für einen Fachmann nach dem Lesen der vorliegenden Beschreibung offensichtlich sind. Außerdem ist das regelmäßige Austauschen von Blöcken zwischen den Pools vorteilhaft für den Verschleißausgleich. Wenn der Verschleißausgleich nur innerhalb eines Pools durchgeführt wird, wird die Gesamtlebensdauer von dem Pool bestimmt, der zuerst verschleißt. Das periodische Austauschen von Blöcken ermöglicht die Durchführung von Verschleißausgleich wie Health Binning in jedem der Pools unabhängig voneinander, während der Verschleiß zwischen den Pools gleichzeitig durch das periodische Austauschen von Blöcken ausgeglichen wird, so dass die Gesamtlebensdauer auf die durchschnittliche Lebensdauer aller Blöcke erhöht wird.
  • Von Arbeitsschritt 710 geht das Verfahren 700 zu Arbeitsschritt 712 über, der Auswählen eines zweiten Blocks aus dem zweiten Pool umfasst, der in den ersten Pool übertragen werden soll. Auch hier ist es bevorzugt, dass der erste und der zweite Pool ihre jeweilige Größe im Zeitverlauf beibehalten (z.B. wenn sich die Auslastungs- und Arbeitslasteigenschaften nicht oder nur geringfügig ändern). Durch das Übertragen des zweiten Blocks in den ersten Pool wird sichergestellt, dass der zweite Pool nicht größer wird und dass der erste Pool nicht kleiner wird.
  • Üblicherweise kam der ausgewählte erste Block in der Vergangenheit gemäß der Blockwechselmetrik für eine Übertragung in den zweiten Pool in Frage, jedoch war kein ausreichendes Guthaben vorhanden, um den Block vom ersten in den zweiten Pool zu übertragen, wie nachstehend näher erläutert wird. Das in 7 gezeigte Verfahren 700 geht davon aus, dass sich das Guthaben in der Zwischenzeit nicht geändert hat, so dass in Arbeitsschritt 712 ein zweiter Block aus dem zweiten Pool ausgewählt wird. In einer alternativen Ausführungsform kann das Guthaben jedoch in der Zwischenzeit wieder aufgefüllt worden sein (z.B. aufgrund eines anderen Blocks, der in der Zwischenzeit vom zweiten in den ersten Pool verschoben wurde, oder der Notwendigkeit, aufgrund von Änderungen der Nutzungs- und/oder Arbeitslasteigenschaften den ersten Pool zu verkleinern und den zweiten Pool zu vergrößern), wie ein Fachmann beim Lesen der vorliegenden Beschreibung versteht. Folglich kann das Verfahren 700 einen Zähler, der der Wechselrichtung entspricht, dekrementieren, einen Zähler, der der entgegengesetzten Wechselrichtung entspricht, inkrementieren und direkt zum Arbeitsschritt 702 zurückkehren (nicht in 7 dargestellt) (d.h. in diesem Fall die Arbeitsschritte 712, 714, 716 und 718 überspringen).
  • Bei dem in Arbeitsschritt 712 ausgewählten Block kann es sich um einen beliebigen der Blöcke aus dem zweiten Pool handeln. In einigen Ansätzen wird jedoch ein Block aus der Warteschlange für löschbereite Blöcke 610 ausgewählt. In anderen Ansätzen wird ein Block mit der höchsten laufenden Anzahl von P/E-Zyklen ausgewählt, um in den ersten Pool übertragen zu werden. In weiteren Ansätzen wird der Block mit der höchsten Zustandsmetrik ausgewählt, um in den ersten Pool übertragen zu werden. In weiteren Ansätzen kann in Arbeitsschritt 712 aus bestimmten Blöcken ausgewählt werden, die (z.B. mit Flags) markiert sind, um anzuzeigen, dass sie in den anderen Pool übertragen werden sollen.
  • Arbeitsschritt 714 umfasst Verschieben gültiger Daten aus dem ausgewählten zweiten Block, wenn der ausgewählte zweite Block aus dem Pool belegter Blöcke 606 und nicht aus der Warteschlange für löschbereite Blöcke 610 stammt, z.B. gemäß einem der vorliegend enthaltenen Ansätze. Wenn der zweite ausgewählte Block aus der Warteschlange für löschbereite Blöcke 610 stammt, wurden alle gültigen Daten bereits verschoben und der Arbeitsschritt 714 wird übersprungen. Das Verschieben der gültigen Daten aus einem Block kann je nach Ansatz auf beliebige Weise erfolgen. Beispielsweise können in einigen Ansätzen die gültigen Daten vorübergehend in einem Cache gespeichert werden (vgl. z.B. Cachespeicher 510 in 5), bevor sie in einem anderen Speicherblock gespeichert werden. In anderen Ansätzen können die gültigen Daten direkt in einen anderen Speicherblock übertragen werden.
  • Unter weiterer Bezugnahme auf 7 umfasst der Arbeitsschritt 716 Löschen des zweiten Blocks. Des Weiteren umfasst Arbeitsschritt 718 tatsächliches Übertragen des zweiten Blocks aus dem zweiten Pool in die erste RTU-Warteschlange, die dem ersten Pool entspricht.
  • Während dieser Prozess des Übertragens von Blöcken zwischen dem ersten und dem zweiten Pool so durchgeführt wird, dass das Austauschen des ersten und des zweiten Blocks im Wesentlichen gleichzeitig erfolgt, kann der Prozess des Ausgleichens der Größe des ersten und des zweiten Pools in anderen Ansätzen etwas verzögert sein. So kann es beispielsweise wünschenswert sein, die Anzahl gleichzeitiger Blockwechsel zu begrenzen, die im normalen Betrieb des Systems auftreten. Es kann daher sinnvoll sein, unter Verwendung eines guthabenbasierten Schemas nur eine begrenzte Anzahl von Blöcken zuzulassen, die zu einem beliebigen Zeitpunkt in jeder Richtung zwischen den Pools ausgetauscht werden können.
  • Dieses guthabenbasierte System kann beispielsweise Führen von zwei Zählern umfassen, von denen jeder der Anzahl der Blöcke entspricht, die zwischen den Pools in einer der Richtungen übertragen werden können (z.B. vom ersten in den zweiten Pool und vom zweiten in den ersten Pool). Zu Beginn können n1 und n2 Blöcke in jeder Richtung gewechselt werden, wobei die Werte von n1 und n2 gleich oder unterschiedlich sein können. Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, ist [n1, n2] = [1, 0], [1, 1], [5,5] usw. Gemäß einigen Ansätzen können Blöcke nur dann zwischen Pools übertragen werden, wenn der Zähler für die entsprechende Richtung ungleich Null ist. Ist ein Zähler ungleich Null, wird der Zähler vorzugsweise dekrementiert, nachdem ein Block zwischen den Pools in der entsprechenden Richtung übertragen wurde, während der Zähler, der der anderen Richtung entspricht, inkrementiert wird. In einigen Ansätzen können einer oder beide Zähler Sättigungszähler sein. In anderen Ansätzen kann dagegen die Größe der Pools sogar geändert werden, indem ein zweiter Block in Reaktion auf die Übertragung des ersten Blocks absichtlich nicht übertragen wird. Die Größe der Pools kann hierdurch nach Belieben angepasst werden.
  • Unter weiterer Bezugnahme auf 7 kehrt das Verfahren 700 von Arbeitsschritt 718 zu Arbeitsschritt 702 zurück, z.B. derart, dass die Blockwechselmetriken aktualisiert und/oder weiterhin überwacht werden können. Daraus folgt, dass das Verfahren 700 in der Lage ist, den Verschleiß verschiedener Blöcke im Speicher erfolgreich zu regulieren und gleichzeitig Blockpoolgrößen in Echtzeit beizubehalten, wodurch die Langlebigkeit des Speichers und die effiziente Leistung des übergreifenden Speichersystems gewährleistet werden.
  • Um jedoch zur Entscheidung 705zurückzukehren, geht das Verfahren 700 zur Entscheidung 720 über, wenn gemäß der entsprechenden Blockwechselmetrik festgestellt wird, dass der erste Block im ersten Pool nicht in den zweiten Pool übertragen werden muss. Mit anderen Worten: Das Verfahren 700 geht zur Entscheidung 720 über, wenn festgestellt wird, dass die Blockwechselmetrik nicht darauf hindeutet, dass es entscheidend ist, dass der jeweilige Block in den anderen Pool übertragen wird. Die Entscheidung 720 umfasst Ermitteln, ob der erste Block für eine Übertragung in den zweiten Pool in Frage kommt.
  • Wie bereits erwähnt, wird mit zunehmender Menge an ungültig gemachten Daten in einem bestimmten Speicherblock der Block zu einem zunehmend ineffizienter genutzten Speicherplatz, wodurch der Anreiz zur Durchführung einer Speicherbereinigung für den Block steigt. Umgekehrt stellt die Durchführung eines Garbage-Collection-Vorgangs für einen Speicherblock, der nur eine geringe Menge ungültig gemachter Daten enthält, eine ineffiziente Nutzung von Datenverarbeitungsressourcen dar und verringert sogar die Effizienz. Dieser Kompromiss zwischen der Nutzung von Datenverarbeitungsressourcen und der Rückgewinnung von Speicherplatz kann bei der Durchführung der Entscheidung 720 implementiert werden.
  • Daher wird in bevorzugten Ansätzen die Entscheidung 720 nach der dem ersten Block entsprechenden Blockwechselmetrik sowie nach einem der Wechselrichtung entsprechenden Sättigungszähler bestimmt. Mit anderen Worten: Da der ausgewählte Block bevorzugt aus der Warteschlange für löschbereite Blöcke stammt und die Zahl der Blöcke in der Warteschlange für löschbereite Blöcke im Vergleich zur Gesamtzahl der Blöcke im Pool in der Regel gering ist, ist die Wahrscheinlichkeit groß, dass der ausgewählte Block nach der Blockwechselmetrik noch nicht in Frage kommt, während andere Blöcke möglicherweise bereits in Frage kommen. Da die Speicherbereinigung im Hintergrund durchgeführt wird, erreichen ausgewählte Blöcke irgendwann eine Blockwechselmetrik, nach der sie für eine Umkonfigurierung in Frage kommen. Die Blockwechselmetrik, die anzeigt, dass der Block umkonfiguriert und in den anderen Pool gewechselt werden kann, wird erreicht, bevor die Blockwechselmetriken anzeigen, dass der Block umkonfiguriert werden muss. Daher ist die Wahrscheinlichkeit, dass ein Block den Modus wechselt, bevor er gewechselt werden muss, relativ hoch, wodurch die Wahrscheinlichkeit eines erzwungenen Austauschens verringert wird, das dazu führen kann, dass in Arbeitsschritt 712 ein zweiter Block aus dem Pool belegter Blöcke ausgewählt wird, was mit zusätzlichem Overhead verbunden ist, um noch gültige Daten zu verschieben. Beispielsweise kann die Entscheidung 720 umfassen, dass Blockwechselmetriken ermitteln, ob die P/E-Zyklenzählung seit einem Wechsel in den aktuellen Modus in einem vorbestimmten Bereich liegt und/oder die RBER für den gegebenen Block in einem vorbestimmten Bereich liegt, was bedeutet, dass der Block übertragen werden kann, wenn dies gewünscht wird, es aber im Hinblick auf den Verschleißausgleich nicht entscheidend ist, dass die Übertragung erfolgt.
  • In die Entscheidung 720 können auch ein oder mehrere Guthaben einbezogen werden, die der Menge der Blöcke entsprechen, die zwischen den Pools übertragen werden können, um zu ermitteln, ob der Block für eine Übertragung in den zweiten Pool in Frage kommt. Mit anderen Worten: Die Guthaben und die entsprechenden Zähler entsprechen einer bestimmten Richtung, in der die Blockkonfigurationsmodi gewechselt werden. So können beispielsweise jedem der Blöcke Sättigungszähler zugewiesen werden, um zu verfolgen, wie oft der jeweilige Block von einem Pool zum anderen übertragen wurde. Auch hier kann in einigen Ansätzen ein Block nur dann zwischen Pools übertragen werden, wenn der Zähler für die beabsichtigte Übertragungsrichtung ungleich Null ist. Ist ein Zähler ungleich Null, wird der Zähler vorzugsweise dekrementiert, nachdem ein Block zwischen den Pools in der jeweiligen Richtung übertragen wurde, während der Zähler, der der anderen Richtung entspricht, inkrementiert wird.
  • In Reaktion auf das Feststellen, dass der erste Block gemäß der diesem entsprechenden Blockwechselmetrik nicht für eine Übertragung in den zweiten Pool in Frage kommt, fährt das Verfahren 700 mit Arbeitsschritt 724 fort, der Löschen des ersten Blocks umfasst, während Arbeitsschritt 726 Zurückgeben des ersten Blocks an die erste RTU-Warteschlange umfasst. Von Arbeitsschritt 726 kehrt das Verfahren 700 wie dargestellt zu Arbeitsschritt 702 zurück, z.B. derart, dass die Blockwechselmetriken aktualisiert und/oder weiterhin überwacht werden können.
  • In Reaktion auf Feststellen, dass der erste Block gemäß der diesem entsprechenden Blockwechselmetrik für eine Übertragung in den zweiten Pool in Frage kommt, geht das Verfahren 700 zu Arbeitsschritt 730 über, der Löschen des ersten Blocks umfasst. Arbeitsschritt 732 umfasst ferner Übertragen des ersten Blocks aus dem ersten Pool in die zweite RTU-Warteschlange nach einem der vorliegend beschriebenen Ansätze. Bei Ansätzen, die Zähler für jede Wechselrichtung vorsehen, kann auch ein Zähler, der der Wechselrichtung vom ersten zum zweiten Pool entspricht, dekrementiert und ein Zähler, der der entgegengesetzten Wechselrichtung entspricht, inkrementiert werden, wenn der erste Block schließlich vom ersten Pool in die zweite RTU-Warteschlange übertragen wird. Von Arbeitsschritt 732 kehrt das Verfahren zu Arbeitsschritt 702 zurück.
  • Wie bereits erwähnt, können einer oder mehrere der verschiedenen Prozesse, die im Verfahren 700 umfasst sind, im Zusammenhang mit dem Bewerten von Speicherblöcken in einem zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, und einem möglichen Überführen eines oder mehrerer von ihnen in eine SLC-Modus-Konfigurierung angewendet werden. Dementsprechend können einer oder mehrere der im Verfahren 700 umfassten Prozesse und/oder einer der in Verbindung damit beschriebenen Ansätze im Zusammenhang mit einem Bewerten von Speicherblöcken, die im zweiten Pool enthalten sind, und einem Ermitteln, ob sie in den ersten Pool übertragen werden sollen, implementiert werden. Mit anderen Worten: Die im Verfahren 700 umfassten Prozesse können zur Überwachung eines beliebigen Speicherblocks in einem Speichersystem verwendet werden, wie z.B. ein Fachmann nach dem Lesen der vorliegenden Beschreibung versteht.
  • Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, können die im Verfahren 700 umfassten Prozesse verwendet werden, um zu ermitteln, ob ein Block im zweiten Pool gemäß einer dem jeweiligen Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden muss. In Reaktion auf das Feststellen, dass der Block im zweiten Pool gemäß der diesem entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden muss, werden gültige Daten aus dem Block verschoben, wenn der Block nicht aus der Warteschlange für löschbereite Blöcke stammt, bevor der Block gelöscht wird. Der Block wird ferner vom zweiten Pool an die erste RTU-Warteschlange übertragen. Ein zweiter Block im ersten Pool wird ebenfalls ausgewählt, um den aus dem zweiten Pool übertragenen Block zu ersetzen. Gültige Daten im ausgewählten zweiten Block werden, falls vorhanden, verschoben, bevor der ausgewählte zweite Block gelöscht und vom ersten Pool an die zweite RTU-Warteschlange übertragen wird. Ferner können die im Verfahren 700 umfassten Prozesse verwendet werden, um zu ermitteln, ob ein Block im zweiten Pool gemäß einer dem jeweiligen Block entsprechenden Blockwechselmetrik für eine Übertragung in den ersten Pool in Frage kommt. In Reaktion auf das Feststellen, dass der Block im zweiten Pool gemäß der diesem entsprechenden Blockwechselmetrik für eine Übertragung in den ersten Pool in Frage kommt, werden gültige Daten aus dem Block verschoben, wenn der Block nicht aus der Warteschlange für löschbereite Blöcke stammt, bevor der Block gelöscht wird. Der Block wird ferner vom zweiten Pool an die erste RTU-Warteschlange übertragen.
  • Daraus folgt, dass die verschiedenen vorliegend beschriebenen Ansätze in der Lage sind, Charakterisierungen zu verwenden, um die durchschnittliche Blocklebensdauer für Blöcke zu bestimmen, die in verschiedenen Modi konfiguriert sind. Die durchschnittliche Lebensdauer der Blöcke in jedem Modus kann auch zur Ermittlung eines Zielverhältnisses von P/E-Zyklen verwendet werden, die die Blöcke in jedem Modus durchlaufen sollen. So kann beispielsweise ein Verhältnis von 1:9 P/E-Zyklen in jedem Modus als Zielvorgabe festgelegt werden, da Blöcke im SLC-Modus in der Regel eine durchschnittlich neunmal so lange Lebensdauer haben wie Blöcke im QLC-Modus. Einfache Schwellenwerte werden auch verwendet, um das Umschalten zwischen den verschiedenen Blockmodi zu steuern und die Häufigkeit des Umschaltens der Blockmodi und/oder den damit verbundenen Overhead zu verringern. So kann beispielsweise ein erster Schwellenwert verwendet werden, um anzuzeigen, wann ein bestimmter Block für einen Wechsel in Frage kommt, während ein zweiter Schwellenwert verwendet werden kann, um zu bestimmen, wann ein bestimmter Block gewechselt werden muss. Dadurch werden die Speicherblöcke häufig genug zwischen den Pools gewechselt, um die Varianz des Blockverschleißes zwischen den Pools zu verringern, und in Kombination mit dem Verschleißausgleich die Varianz des Blockverschleißes zwischen allen Blöcken zu verringern und Aktualisierungen der Schwellenspannungsverschiebungswerte in beiden Modi und eine genaue Zustandsverfolgung des Blocks zu ermöglichen. Health Binning und/oder Schreib-Strom-Zuordnung können ferner mit jedem der vorliegend umfassten Ansätze implementiert werden, z.B. um die Verschleißausgleichsleistung weiter zu verbessern.
  • Es sollte beachtet werden, dass, auch wenn verschiedene der Ansätze vorliegend im Zusammenhang mit zwei Speicherblockpools beschrieben wurden, jeder dieser Ansätze auf Ausführungsformen mit mehr als zwei Blockpools erweitert werden kann. In solchen Ausführungsformen kann der Zielpool anhand von Prioritäten ermittelt werden, die auf Benutzereingaben beruhen, indem die RTU-Blockebenen jedes jeweiligen Pools verglichen und der Pool mit der geringsten Anzahl von RTU-Blöcken ausgewählt wird usw. Es sollte zudem beachtet werden, dass Ausdrücke wie „in einem Bereich“ und „über einem Schwellenwert“ in keiner Weise dazu gedacht sind, die Erfindung einzuschränken. Anstatt zu ermitteln, ob ein Wert in einem bestimmten Bereich oder oberhalb eines bestimmten Schwellenwerts liegt, können je nach gewünschtem Ansatz auch gleichwertige Ermittlungen vorgenommen werden, z.B. ob ein Wert außerhalb eines vorbestimmten Bereichs liegt, ob ein absoluter Wert oberhalb eines Schwellenwerts liegt, ob ein Wert unterhalb eines Schwellenwerts liegt usw.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt jedes möglichen technisch detaillierten Integrationsgrads handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder-medien) umfassen, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert ist/sind, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder gehobene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. ein Lichtwellenleiterkabel durchlaufende Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern mittels durch einen Computer lesbarer Programmanweisungen ausgeführt werden können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Computers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. So können beispielsweise zwei nacheinander gezeigte Blöcke in Wirklichkeit in einem Schritt, gleichzeitig, im Wesentlichen gleichzeitig, teilweise oder vollständig zeitlich überlappend ausgeführt werden, oder die Blöcke können je nach der betreffenden Funktionalität auch in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
  • Darüber hinaus kann ein System gemäß verschiedenen Ausführungsformen einen Prozessor und Logik enthalten, die mit dem Prozessor integriert und/oder durch diesen ausführbar ist, wobei die Logik so konfiguriert ist, dass sie einen oder mehrere der vorliegend angegebenen Prozessschritte durchführt. „Integriert mit“ bedeutet, dass der Prozessor Logik besitzt, die als Hardware-Logik wie beispielsweise eine anwendungsspezifische integrierte Schaltung (ASIC), eine vor Ort programmierbare Gatter-Anordnung (FPGA) usw. in diesen eingebettet ist. „Durch den Prozessor ausführbar“ bedeutet, dass es sich bei der Logik um Hardware-Logik, Software-Logik wie beispielsweise Firmware, einen Teil eines Betriebssystems, einen Teil eines Anwendungsprogramms usw. oder eine Kombination aus Hardware- und Software-Logik handelt, auf die der Prozessor zugreifen kann und die so konfiguriert ist, dass sie bei Ausführung auf dem Prozessor den Prozessor veranlasst, eine Funktionalität auszuführen. Software-Logik kann auf einem lokalen und/oder entfernt angeordneten Speicher jedes im Fachgebiet bekannten Speichertyps gespeichert sein. Es kann jeder im Fachgebiet bekannte Prozessor verwendet werden, beispielsweise ein Software-Prozessormodul und/oder ein Hardware-Prozessor wie beispielsweise eine ASIC, eine FPGA, eine zentrale Verarbeitungseinheit (CPU), eine integrierte Schaltung (IC), eine Grafikverarbeitungseinheit (GPU) usw.
  • 8 zeigt eine Netzwerkarchitektur 800 gemäß einer Ausführungsform. Wie in 8 gezeigt ist, sind mehrere entfernte Netzwerke 802 vorgesehen, darunter ein erstes entferntes Netzwerk 804 und ein zweites entferntes Netzwerk 806. Ein Gateway 801 kann zwischen die entfernten Netzwerke 802 und ein nahegelegenes Netzwerk 808 geschaltet sein. Im Zusammenhang mit der vorliegenden Netzwerkarchitektur 800 können die Netzwerke 804, 806 jede beliebige Form annehmen, darunter, ohne jedoch hierauf eingeschränkt zu sein, ein LAN, ein WAN wie das Internet, ein öffentliches Telefonnetz (PSTN), ein internes Telefonnetz usw.
  • Im Einsatz dient das Gateway 801 als Zugangspunkt von den entfernten Netzwerken 802 in das nahegelegene Netzwerk 808. Somit kann das Gateway 801 als Router fungieren, der in der Lage ist, ein bestimmtes Datenpaket, das am Gateway 801 ankommt, weiterzuleiten, und als Switch, der den tatsächlichen Pfad in und aus dem Gateway 801 für ein bestimmtes Paket bereitstellt.
  • Darüber ist mindestens ein Datenserver 814 umfasst, der mit dem nahegelegenen Netzwerk 808 verbunden und von den entfernten Netzwerken 802 aus über das Gateway 801zugänglich ist. Es sollte beachtet werden, dass der/die Datenserver 814 jede Art von Datenverarbeitungseinheit/Groupware enthalten können. Mit jedem Datenserver 814 ist eine Mehrzahl von Benutzereinheiten 816 verbunden. Zu solchen Benutzereinheiten 816 können ein Desktop-Computer, ein Laptop-Computer, ein tragbarer Computer, ein Drucker und/oder jede andere Art von Logik enthaltender Einheit zählen. Es sei darauf hingewiesen, dass eine Benutzereinheit 811 in einigen Ausführungsformen auch direkt mit einem der Netzwerke verbunden sein kann.
  • Ein Peripheriegerät 820 oder eine Reihe von Peripheriegeräten 820, z.B. Faxgeräte, Drucker, Scanner, Festplattenlaufwerke, vernetzte und/oder lokale Datenspeichereinheiten oder -systeme usw., können mit einem oder mehreren der Netzwerke 804, 806, 808 verbunden sein. Es ist zu beachten, dass Datenbanken und/oder zusätzliche Komponenten mit jeder Art von Netzwerkelement, das mit den Netzwerken 804, 806, 808verbunden ist, verwendet oder in diese integriert werden können. Im Zusammenhang mit der vorliegenden Beschreibung kann sich ein Netzwerkelement auf jede Komponente eines Netzwerkes beziehen.
  • Gemäß einigen Ausführungsformen können vorliegend beschriebene Verfahren und Systeme mit und/oder auf virtuellen Systemen und/oder Systemen implementiert werden, die ein oder mehrere andere Systeme emulieren, wie z.B. ein UNIX-System, das virtuell eine MICROSOFT WINDOWS-Umgebung hostet, usw. Diese Virtualisierung und/oder Emulation kann in einigen Ausführungsformen durch den Einsatz von VMWARE-Software verbessert werden.
  • In anderen Ausführungsformen können ein oder mehrere Netzwerke 804, 806, 808 einen Cluster aus Systemen darstellen, die gemeinhin als „Cloud“ bezeichnet werden Beim Cloud Computing werden gemeinsam genutzte Ressourcen wie Verarbeitungsleistung, Peripheriegeräte, Software, Daten, Server usw. jedem System in der Cloud auf Abruf zur Verfügung gestellt, wodurch Zugriff und Verteilung von Diensten über viele Datenverarbeitungssysteme hinweg ermöglicht werden. Beim Cloud Computing besteht in der Regel eine Internetverbindung zwischen den in der Cloud betriebenen Systemen, es können aber auch andere Methoden zur Verbindung der Systeme verwendet werden, die im Fachgebiet bekannt sind.
  • 9 zeigt eine repräsentative Hardwareumgebung, die zu einer Benutzereinheit 816 und/oder einem Server 814 aus 8 gehört, gemäß einer Ausführungsform. 9 zeigt eine übliche Hardwarekonfiguration eines Prozessorsystems 900 mit einer zentralen Verarbeitungseinheit 910, z.B. einem Mikroprozessor, und einer Reihe anderer Einheiten, die über einen Systembus 912miteinander verbunden sind, gemäß einer Ausführungsform. In einigen Ausführungsformen kann die zentrale Verarbeitungseinheit 910 jeden der oben in Bezug auf den einen oder die mehreren Prozessoren 210 aus 2 beschriebenen Ansätze umfassen.
  • Das in 9 dargestellte Prozessorsystem 900 umfasst einen Direktzugriffsspeicher (RAM) 914, einen Nur-Lese-Speicher (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 oben unter Bezugnahme auf den E/A-Adapter 218 aus 2 beschriebenen Ansätze umfassen. Unter weiterer Bezugnahme auf das Prozessorsystem 900 aus 9 können die vorstehend erwähnten Komponenten 914, 916, 918 für den Anschluss von Peripheriegeräten wie dem Speicherteilsystem 920 an den Bus 912 verwendet werden. In einigen Ausführungsformen kann das Speicherteilsystem 920 eine ähnliche und/oder dieselbe Konfiguration wie das Datenspeichersystem 220 aus 2 enthalten. Gemäß einem Beispiel, das die Erfindung in keiner Weise einschränken soll, kann das Speicherteilsystem 920 nichtflüchtige Datenspeicherkarten enthalten, z.B. mit NVRAM-Speicherkarten, RAM, ROM und/oder einem anderen bekannten Typ von nichtflüchtigem Speicher, zusätzlich zu RAID-Controllern, wie in 2 dargestellt.
  • Mit fortgesetzter Bezugnahme auf 9 ist ein Benutzerschnittstellenadapter 922 zum Anschließen einer Tastatur 924, einer Maus 926, eines Lautsprechers 928, eines Mikrofons 932und/oder anderer Benutzerschnittstelleneinheiten, wie z.B. eines Touchscreens, einer Digitalkamera (nicht dargestellt) usw., an den Bus 912 vorhanden.
  • Das Prozessorsystem 900 enthält ferner einen Datenübertragungsadapter 934, der das Prozessorsystem 900 mit einem Datenübertragungsnetz 935 (z.B. einem Datenverarbeitungsnetz) verbindet, und einen Anzeigeadapter 936, der den Bus 912 mit einer Anzeigeeinheit 938 verbindet.
  • Auf dem Prozessorsystem 900 kann ein Betriebssystem wie das MICROSOFT WINDOWS Betriebssystem (OS), ein MAC OS, ein UNIX OS usw. installiert sein. Es versteht sich, dass eine bevorzugte Ausführungsform auch auf anderen Plattformen und Betriebssystemen als den genannten implementiert werden kann. Eine bevorzugte Ausführungsform kann unter Verwendung von JAVA, XML, C und/oder C++ oder anderen Programmiersprachen zusammen mit einer objektorientierten Programmiermethodik geschrieben sein. Objektorientierte Programmierung (OOP), die zunehmend zur Entwicklung komplexer Anwendungen eingesetzt wird, kann ebenfalls verwendet werden.
  • Darüber hinaus veranschaulicht 10 ein Speichersystem 1000, das gemäß einer Ausführungsform Speicherstufen höherer Ebene (z.B. SSD) in Kombination mit Speicherstufen niedrigerer Ebene (z.B. Magnetband) implementiert. Es ist zu beachten, dass einige der in 10 gezeigten Elemente gemäß verschiedenen Ausführungsformen als Hardware und/oder Software implementiert werden können. Das Speichersystem 1000 kann einen Speichersystemmanager 1012 zum Datenaustausch mit einer Mehrzahl von Medien auf mindestens einer höheren Speicherstufe 1002 und mindestens einer niedrigeren Speicherstufe 1006 enthalten. In anderen Ansätzen kann ein Speichersystemmanager 1012 jedoch mit einer Mehrzahl von Medien auf mindestens einer höheren Speicherstufe 1002, aber keiner niedrigeren Speicherstufe Daten austauschen. Die höhere(n) Speicherstufe(n) 1002 kann/können bevorzugt ein oder mehrere Wahlzugriffs- und/oder Direktzugriffsmedien 1004 umfassen, wie z.B. Festplatten, nichtflüchtige Speicher (NVM, NVRAM), Halbleiterspeicher in SSDs, Flashspeicher, SSD-Arrays, Flashspeicher-Arrays usw. und/oder andere vorliegend erwähnte oder im Fachgebiet bekannte. Gemäß veranschaulichenden Beispielen zeigen 3 und 4 beispielhafte Architekturen von SSD-Systemen, die je nach gewünschter Ausführungsform als höhere Speicherstufe 1002 verwendet werden können.
  • Unter weiterer Bezugnahme auf 10 umfasst/umfassen untere Speicherstufe(n) 1006vorzugsweise ein oder mehrere Speichermedien 1008 mit geringerer Leistung, einschließlich Medien mit sequenziellem Zugriff, wie z.B. Magnetband in Bandlaufwerken und/oder optische Medien, langsamer zugreifende Festplatten, langsamer zugreifende SSDs usw. und/oder andere vorliegend erwähnte oder im Fachgebiet bekannte Medien. Eine oder mehrere zusätzliche Speicherstufen 1016 können eine beliebige Kombination von Speichermedien enthalten, die von einem Entwickler des Systems 1000 gewünscht wird. Daher können die eine oder mehreren zusätzlichen Speicherstufen 1016 in einigen Ansätzen eine SSD-Systemarchitektur enthalten, die der in 1 und 2 dargestellten ähnlich oder gleich ist. Außerdem kann jede der höheren Speicherstufen 1002 und/oder der unteren Speicherstufen 1006 eine beliebige Kombination von Speichereinheiten und/oder Speichermedien enthalten.
  • Der Speichersystemmanager 1012 kann mit den Speichermedien 1004, 1008 auf der (den) höheren Speicherstufe(n) 1002 und der (den) niedrigeren Speicherstufen (n) 1006 über ein Netzwerk 1010, z.B. ein Storage Area Network (SAN), wie in 2 gezeigt, oder einem anderen geeigneten Netzwerktyp Daten austauschen. Der Speichersystemmanager 1012 kann zudem mit einem oder mehreren Host-Systemen (nicht dargestellt) über eine Host-Schnittstelle 1014 Daten austauschen, die ein Teil des Speichersystemmanagers 1012 sein kann oder auch nicht. Der Speichersystemmanager 1012 und/oder jede andere Komponente des Speichersystems 1000 kann in Hardware und/oder Software implementiert sein und kann einen Prozessor (nicht dargestellt) zur Ausführung von Befehlen eines im Fachgebiet bekannten Typs verwenden, wie z.B. eine Zentralverarbeitungseinheit (CPU), ein frei programmierbares Gate-Array (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC), usw. Natürlich kann jede beliebige Anordnung eines Speichersystems verwendet werden, wie für einen Fachmann beim Lesen der vorliegenden Beschreibung offensichtlich ist.
  • In weiteren Ausführungsformen kann das Speichersystem 1000 eine beliebige Anzahl von Datenspeicherstufen umfassen und innerhalb jeder Speicherstufe die gleichen oder unterschiedliche Speichermedien enthalten. Beispielsweise kann jede Datenspeicherstufe denselben Typ von Speichermedien enthalten, wie HDDs, SSDs, Medien mit sequenziellem Zugriff (Band in Bandlaufwerken, optische Platte in optischen Laufwerken usw.), Direktzugriffsmedien (CD-ROM, DVD-ROM usw.) oder eine beliebige Kombination von Medienspeichertypen. In einer solchen Konfiguration kann eine höhere Speicherstufe 1002 mehrheitlich SSD-Speichermedien zur Speicherung von Daten in einer leistungsfähigeren Speicherumgebung enthalten, während die übrigen Speicherstufen, einschließlich der unteren Speicherstufe 1006 und der zusätzlichen Speicherstufen 1016, eine beliebige Kombination von SSDs, HDDs, Bandlaufwerken usw. zur Speicherung von Daten in einer leistungsschwächeren Speicherumgebung enthalten können. Auf diese Weise können Daten, auf die häufiger zugegriffen wird, Daten mit höherer Priorität, Daten, auf die schneller zugegriffen werden muss, usw. auf der höheren Speicherstufe 1002gespeichert werden, während Daten, die keines dieser Attribute aufweisen, auf den zusätzlichen Speicherstufen 1016, einschließlich der unteren Speicherstufe 1006, gespeichert werden können. Natürlich kann ein Fachmann beim Lesen der vorliegenden Beschreibungen viele andere Kombinationen von Speichermedientypen entwickeln, um sie gemäß den vorliegend vorgestellten Ausführungsformen in verschiedene Speicherschemata zu implementieren.
  • Gemäß einigen Ausführungsformen kann das Speichersystem (z.B. 1000) Logik enthalten, die so konfiguriert ist, dass sie eine Anfrage zum Öffnen eines Datensatzes empfängt, Logik, die so konfiguriert ist, dass sie ermittelt, ob der angefragte Datensatz auf einer niedrigeren Speicherstufe 1006 eines gestuften Datenspeichersystems 1000 in mehreren zugehörigen Teilen gespeichert ist, Logik, die so konfiguriert ist, dass sie jeden zugehörigen Teil des angefragten Datensatzes auf eine höhere Speicherstufe 1002 des gestuften Datenspeichersystems 1000 verschiebt, und Logik, die so konfiguriert ist, dass sie den angefragten Datensatz auf der höheren Speicherstufe 1002 des gestuften Datenspeichersystems 1000 aus den zugehörigen Teilen zusammensetzt.
  • Natürlich kann diese Logik gemäß verschiedenen Ausführungsformen als Verfahren auf einer beliebigen Einheit und/oder einem beliebigen System oder als Computerprogrammprodukt implementiert werden.

Claims (20)

  1. Durch einen Computer implementiertes Verfahren (700) zum Umschalten von Blockmodi in einem Speichersystem, umfassend: Führen (702) einer Blockwechselmetrik für jeden Speicherblock im Speichersystem; Ermitteln (705), ob ein erster Block in einem ersten Pool in einen zweiten Pool übertragen werden soll, gemäß einer Blockwechselmetrik, die dem ersten Block entspricht; in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik in den zweiten Pool übertragen werden soll, Löschen (708) des ersten Blocks; Übertragen (732) des ersten Blocks aus dem ersten Pool in eine zweite Warteschlange für verwendungsbereite Blöcke (RTU), die dem zweiten Pool entspricht; Löschen (716) eines zweiten Blocks; und Übertragen (718) des zweiten Blocks aus dem zweiten Pool in eine erste RTU-Warteschlange, die dem ersten Pool entspricht, wobei die Blöcke (504) im ersten Pool im Einstufenzellen- (SLC-) Modus konfiguriert sind, wobei die Blöcke (506) im zweiten Pool im Multibit-pro-Zelle-Modus konfiguriert sind.
  2. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, wobei die Blockwechselmetrik Informationen enthält, die ausgewählt sind aus der Gruppe, bestehend aus: einer Programmier-/Lösch- (P/E-) Zyklenzählung für den jeweiligen Block, der P/E-Zyklenzählung für den jeweiligen Block im aktuellen Modus seit dem letzten Wechseln des Blocks, einer Rohbitfehlerrate (RBER) für den jeweiligen Block und einer Datenzugriffszeit für den jeweiligen Block.
  3. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 2, wobei die Blockwechselmetrik die P/E-Zyklenzählung für den jeweiligen Block im aktuellen Modus seit dem letzten Wechsel des Blockmodus aufweist.
  4. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, wobei die Blockwechselmetrik nur eine P/E-Zyklenzählung für den jeweiligen Block enthält, während dieser im Multibit-pro-Zelle-Modus konfiguriert ist.
  5. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, wobei das Übertragen des ersten Blocks aus dem ersten Pool an die zweite RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des ersten Blocks vom SLC-Modus in den Multibit-pro-Zelle-Modus.
  6. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 5, wobei das Übertragen des zweiten Blocks aus dem zweiten Pool an die erste RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des zweiten Blocks vom Multibit-pro-Zelle-Modus in den SLC-Modus.
  7. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, umfassend: Ermitteln, ob eine Menge programmierter Seiten im ersten Block in einem vorbestimmten Bereich liegt; und in Reaktion auf Feststellen, dass die Anzahl der programmierten Seiten im ersten Block in dem vorbestimmten Bereich liegt, Ermitteln, ob der erste Block im ersten Pool in den zweiten Pool übertragen werden soll, gemäß der dem ersten Block entsprechenden Blockwechselmetrik.
  8. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, umfassend: in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik nicht in den zweiten Pool übertragen werden muss, Ermitteln, ob der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und gemäß einem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt; in Reaktion auf Feststellen, dass der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und dem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt, Löschen des ersten Blocks; Übertragen des ersten Blocks aus dem ersten Pool an die zweite RTU-Warteschlange; und Dekrementieren des der Wechselrichtung entsprechenden Sättigungszählers.
  9. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 8, umfassend: in Reaktion auf Feststellen, dass der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und dem dem ersten Block entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool nicht in Frage kommt, Löschen des ersten Blocks; und Einstellen des ersten Blocks in die erste RTU-Warteschlange.
  10. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, wobei die Blöcke im zweiten Pool, die im Multibit-pro-Zelle-Modus konfiguriert sind, im Vierstufenzellen- (QLC-) Modus konfiguriert sind.
  11. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 1, umfassend: Ermitteln, ob ein dritter Block in dem zweiten Pool in den ersten Pool übertragen werden soll, gemäß einer Blockwechselmetrik, die dem dritten Block entspricht; In Reaktion auf Feststellen, dass der dritte Block im zweiten Pool gemäß einer dem dritten Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden soll, Löschen des dritten Blocks; Übertragen des dritten Blocks aus dem zweiten Pool an die dem ersten Pool entsprechende erste RTU-Warteschlange; Löschen eines vierten Blocks; und Übertragen des vierten Blocks aus dem ersten Pool an die dem zweiten Pool entsprechende zweite RTU-Warteschlange.
  12. Durch einen Computer implementiertes Verfahren (700) nach Anspruch 11, wobei das Übertragen des dritten Blocks aus dem zweiten Pool an die RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des dritten Blocks vom Multibit-pro-Zelle-Modus in den SLC-Modus, wobei das Übertragen des vierten Blocks aus dem ersten Pool an die zweite RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des vierten Blocks vom SLC-Modus in den Multibit-pro-Zelle-Modus.
  13. Computerprogrammprodukt, das ein durch einen Computer lesbares Speichermedium mit darauf enthaltenen Programmanweisungen aufweist, wobei die Programmanweisungen durch einen Prozessor (210) les- und/oder ausführbar sind, um den Prozessor (210) zu Folgendem zu veranlassen: durch den Prozessor (210) eine Blockwechselmetrik für jeden Speicherblock im Speichersystem zu führen; durch den Prozessor (210) zu ermitteln, ob ein erster Block in einem ersten Pool gemäß einer dem ersten Block entsprechenden Blockwechselmetrik in einen zweiten Pool übertragen werden soll; in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik in den zweiten Pool übertragen werden soll, durch den Prozessor (210) den ersten Block zu löschen; durch den Prozessor (210) den ersten Block aus dem ersten Pool in eine dem zweiten Pool entsprechende zweite Warteschlange für verwendungsbereite Blöcke (RTU) zu übertragen; durch den Prozessor (210) einen zweiten Block zu löschen; und durch den Prozessor (210) den zweiten Block aus dem zweiten Pool in eine dem ersten Pool entsprechende erste RTU-Warteschlange zu übertragen, wobei die Blöcke im ersten Pool im Einstufenzellen- (SLC-) Modus konfiguriert sind, wobei die Blöcke im zweiten Pool im Multibit-pro-Zelle-Modus konfiguriert sind.
  14. Computerprogrammprodukt nach Anspruch 13, wobei die Programmanweisungen durch den Prozessor (210) lesbar und/oder ausführbar sind, um den Prozessor (210) zu Folgendem zu veranlassen: in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik nicht in den zweiten Pool übertragen werden muss, durch den Prozessor (210) zu ermitteln, ob der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und gemäß einem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt; in Reaktion auf Feststellen, dass der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und dem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt, durch den Prozessor (210) den ersten Block zu löschen; durch den Prozessor (210) den ersten Block aus dem ersten Pool an die zweite RTU-Warteschlange zu übertragen; und durch den Prozessor (210) den der Wechselrichtung entsprechenden Sättigungszähler zu dekrementieren.
  15. Computerprogrammprodukt nach Anspruch 13, wobei die Programmanweisungen durch den Prozessor lesbar und/oder ausführbar sind, um den Prozessor (210) zu Folgendem zu veranlassen: durch den Prozessor (210) zu ermitteln, ob ein dritter Block in dem zweiten Pool gemäß einer dem dritten Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden soll; In Reaktion auf Feststellen, dass der dritte Block im zweiten Pool gemäß einer dem dritten Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden soll, durch den Prozessor (210) den dritten Block zu löschen; durch den Prozessor (210) den dritten Block aus dem zweiten Pool in die dem ersten Pool entsprechende erste RTU-Warteschlange einzustellen; durch den Prozessor (210) einen vierten Block zu löschen; und durch den Prozessor (210) den vierten Block aus dem ersten Pool an die dem zweiten Pool entsprechende zweite RTU-Warteschlange zu übertragen.
  16. Computerprogrammprodukt nach Anspruch 15, wobei das Übertragen des dritten Blocks aus dem zweiten Pool an die RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des dritten Blocks vom Multibit-pro-Zelle-Modus in den SLC-Modus, wobei das Übertragen des vierten Blocks aus dem ersten Pool an die zweite RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des vierten Blocks vom SLC-Modus in den Multibit-pro-Zelle-Modus.
  17. System, das Folgendes aufweist: eine Mehrzahl nichtflüchtiger Direktzugriffsspeicher- (NVRAM-) Blöcke, die zum Speichern von Daten konfiguriert sind; und einen Prozessor(210) und in den Prozessor (210) integrierte und/oder von diesem ausführbare Logik, wobei die Logik so konfiguriert ist, dass sie: durch den Prozessor (210) eine Blockwechselmetrik für jeden Speicherblock im Speichersystem führt; durch den Prozessor (210) ermittelt, ob ein erster Block in einem ersten Pool gemäß einer dem ersten Block entsprechenden Blockwechselmetrik in einen zweiten Pool übertragen werden soll; in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik in den zweiten Pool übertragen werden soll, durch den Prozessor (210) den ersten Block löscht; durch den Prozessor (210) den gelöschten ersten Block aus dem ersten Pool in eine dem zweiten Pool entsprechende zweite Warteschlange für verwendungsbereite Blöcke (RTU) überträgt; durch den Prozessor (210) einen zweiten Block in dem zweiten Pool löscht; und durch den Prozessor (210) den gelöschten zweiten Block aus dem zweiten Pool in eine dem ersten Pool entsprechende erste RTU-Warteschlange überträgt, wobei die Blöcke im ersten Pool im Einstufenzellen- (SLC-) Modus konfiguriert sind, wobei die Blöcke im zweiten Pool im Multibit-pro-Zelle-Modus konfiguriert sind.
  18. System nach Anspruch 17, wobei die Logik so konfiguriert ist, dass sie: in Reaktion auf Feststellen, dass der erste Block im ersten Pool gemäß der dem ersten Block entsprechenden Blockwechselmetrik nicht in den zweiten Pool übertragen werden muss, durch den Prozessor (210) ermittelt, ob der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und einem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt; in Reaktion auf Feststellen, dass der erste Block gemäß der dem ersten Block entsprechenden Blockwechselmetrik und dem der Wechselrichtung entsprechenden Sättigungszähler für eine Übertragung in den zweiten Pool in Frage kommt, durch den Prozessor (210) den ersten Block löscht; durch den Prozessor (210) den ersten Block aus dem ersten Pool an die zweite RTU-Warteschlange überträgt; und durch den Prozessor (210) den der Wechselrichtung entsprechenden Sättigungszähler dekrementiert.
  19. System nach Anspruch 17, wobei die Logik so konfiguriert ist, dass sie: durch den Prozessor (210) ermittelt, ob ein dritter Block in dem zweiten Pool gemäß einer dem dritten Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden soll; In Reaktion auf Feststellen, dass der dritte Block im zweiten Pool gemäß einer dem dritten Block entsprechenden Blockwechselmetrik in den ersten Pool übertragen werden soll, durch den Prozessor (210) den dritten Block löscht; durch den Prozessor (210) den dritten Block aus dem zweiten Pool in die dem ersten Pool entsprechende erste RTU-Warteschlange einstellt; durch den Prozessor (210) einen vierten Block löscht; und durch den Prozessor (210) den vierten Block aus dem ersten Pool an die dem zweiten Pool entsprechende zweite RTU-Warteschlange überträgt.
  20. System nach Anspruch 19, wobei das Übertragen des dritten Blocks aus dem zweiten Pool an die RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des dritten Blocks vom Multibit-pro-Zelle-Modus in den SLC-Modus, wobei das Übertragen des vierten Blocks aus dem ersten Pool an die zweite RTU-Warteschlange Folgendes umfasst: Umkonfigurieren des vierten Blocks vom SLC-Modus in den Multibit-pro-Zelle-Modus.
DE112020002526.8T 2019-07-01 2020-06-23 Blockmodusumschaltung in datenspeichersystem Active DE112020002526B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/459,408 2019-07-01
US16/459,408 US11023150B2 (en) 2019-07-01 2019-07-01 Block mode toggling using hybrid controllers
PCT/IB2020/055914 WO2021001725A1 (en) 2019-07-01 2020-06-23 Block mode toggling in data storage system

Publications (2)

Publication Number Publication Date
DE112020002526T5 DE112020002526T5 (de) 2022-04-21
DE112020002526B4 true DE112020002526B4 (de) 2023-11-02

Family

ID=74065739

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112020002526.8T Active DE112020002526B4 (de) 2019-07-01 2020-06-23 Blockmodusumschaltung in datenspeichersystem

Country Status (6)

Country Link
US (1) US11023150B2 (de)
JP (1) JP7448569B2 (de)
CN (1) CN114072774A (de)
DE (1) DE112020002526B4 (de)
GB (1) GB2599061B (de)
WO (1) WO2021001725A1 (de)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020000136A1 (en) 2018-06-25 2020-01-02 Alibaba Group Holding Limited System and method for managing resources of a storage device and quantifying the cost of i/o requests
US11061735B2 (en) 2019-01-02 2021-07-13 Alibaba Group Holding Limited System and method for offloading computation to storage nodes in distributed system
JP2021033423A (ja) * 2019-08-19 2021-03-01 ソニーセミコンダクタソリューションズ株式会社 コントローラ、半導体記憶装置、及び該装置における摩耗平準化処理方法
US11617282B2 (en) 2019-10-01 2023-03-28 Alibaba Group Holding Limited System and method for reshaping power budget of cabinet to facilitate improved deployment density of servers
US11762569B2 (en) * 2019-10-29 2023-09-19 International Business Machines Corporation Workload based relief valve activation for hybrid controller architectures
US11507499B2 (en) 2020-05-19 2022-11-22 Alibaba Group Holding Limited System and method for facilitating mitigation of read/write amplification in data compression
US11556277B2 (en) 2020-05-19 2023-01-17 Alibaba Group Holding Limited System and method for facilitating improved performance in ordering key-value storage with input/output stack simplification
US11422931B2 (en) * 2020-06-17 2022-08-23 Alibaba Group Holding Limited Method and system for facilitating a physically isolated storage unit for multi-tenancy virtualization
US11487465B2 (en) 2020-12-11 2022-11-01 Alibaba Group Holding Limited Method and system for a local storage engine collaborating with a solid state drive controller
US11734115B2 (en) 2020-12-28 2023-08-22 Alibaba Group Holding Limited Method and system for facilitating write latency reduction in a queue depth of one scenario
US11726699B2 (en) 2021-03-30 2023-08-15 Alibaba Singapore Holding Private Limited Method and system for facilitating multi-stream sequential read performance improvement with reduced read amplification
US11907123B2 (en) 2021-04-20 2024-02-20 International Business Machines Corporation Flash memory garbage collection
US20220374216A1 (en) * 2021-05-20 2022-11-24 Lenovo (United States) Inc. Method of manufacturing information processing apparatus and mobile computer
US11797199B2 (en) 2021-07-06 2023-10-24 International Business Machines Corporation Balancing utilization of memory pools of physical blocks of differing storage densities

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948798B1 (en) 2009-07-22 2011-05-24 Marvell International Ltd. Mixed multi-level cell and single level cell storage device
US9176862B2 (en) 2011-12-29 2015-11-03 Sandisk Technologies Inc. SLC-MLC wear balancing

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7865658B2 (en) 2007-12-31 2011-01-04 Sandisk Il Ltd. Method and system for balancing host write operations and cache flushing
US9547589B2 (en) 2008-06-18 2017-01-17 Super Talent Technology, Corp. Endurance translation layer (ETL) and diversion of temp files for reduced flash wear of a super-endurance solid-state drive
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
JP5066241B2 (ja) 2010-09-24 2012-11-07 株式会社東芝 メモリシステム
US8943261B2 (en) 2011-10-28 2015-01-27 International Business Machines Corporation Efficient memory management in software caches
JP6139381B2 (ja) 2013-11-01 2017-05-31 株式会社東芝 メモリシステムおよび方法
US9558107B2 (en) 2013-12-24 2017-01-31 International Business Machines Corporation Extending useful life of a non-volatile memory by health grading
WO2016069031A1 (en) 2014-11-01 2016-05-06 Hewlett Packard Enterprise Development Lp Managing a storage pool
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US10102119B2 (en) * 2015-10-30 2018-10-16 Sandisk Technologies Llc Garbage collection based on queued and/or selected write commands
US10545685B2 (en) 2017-08-30 2020-01-28 Micron Technology, Inc. SLC cache management
JP7030463B2 (ja) 2017-09-22 2022-03-07 キオクシア株式会社 メモリシステム
JP6968016B2 (ja) 2018-03-22 2021-11-17 キオクシア株式会社 ストレージデバイスおよびコンピュータシステム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7948798B1 (en) 2009-07-22 2011-05-24 Marvell International Ltd. Mixed multi-level cell and single level cell storage device
US9176862B2 (en) 2011-12-29 2015-11-03 Sandisk Technologies Inc. SLC-MLC wear balancing

Also Published As

Publication number Publication date
DE112020002526T5 (de) 2022-04-21
WO2021001725A1 (en) 2021-01-07
US11023150B2 (en) 2021-06-01
CN114072774A (zh) 2022-02-18
GB2599061B (en) 2022-07-27
GB2599061A (en) 2022-03-23
JP7448569B2 (ja) 2024-03-12
US20210004159A1 (en) 2021-01-07
JP2022538587A (ja) 2022-09-05

Similar Documents

Publication Publication Date Title
DE112020002526B4 (de) Blockmodusumschaltung in datenspeichersystem
DE112019000146T5 (de) Multivorrichtungsspeichersystem mit verteilter lese-/schreibverarbeitung
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
DE102018105750A1 (de) System und Verfahren für Hybrid-Push-Pull-Datenmanagement in einem nichtflüchtigen Datenspeicher
DE112019000149T5 (de) Multivorrichtungsspeichersystem mit gehosteten diensten auf peer-speichervorrichtungen
DE102020107659A1 (de) Zonenbildung für gezonte namensräume
DE112018004256T5 (de) Redundanzcodierstreifen basierend auf internen adressen von speichervorrichtungen
DE112020003290T5 (de) Datenplatzierung in einer schreib-cache-architektur, die eine lesehitze-datenaufteilung unterstützt
DE112017002941T5 (de) Arbeitslastoptimierte Datendeduplizierung mittels Phantomfingerabdrücken
DE112018004251T5 (de) Adaptive vorrichtungsdienstqualität durch host-speicherpufferbereich
DE102017104150A1 (de) Abnutzungsausgleich in Speichervorrichtungen
DE112020003185T5 (de) Einstellung von block-pool-grössen in einem speichersystem
DE102009026178A1 (de) Mehrstufiger Controller mit intelligentem Speicher-Transfer-Manager zum Verschachteln mehrfacher Ein-Chip-Flash-Speichereinheiten
DE112013006565T5 (de) Speichervorrichtung
DE112020005350T5 (de) Aktualisieren von korrigierenden lesespannung-offsetwerten in nichtflüchtigen direktzugriffsspeichern
DE102013020269A1 (de) Umordnen des Zurückschickens für einen Host-Lesebefehl basierend auf der Zeitschätzung des Abschlusses eines Flash-Lesebefehls
DE112020000139T5 (de) Nicht sequentiell in zonen aufgeteilte namensräume
DE102020116362B3 (de) Dynamische zuweisung von unterblöcken
DE112020005180T5 (de) Kondensieren von logischen zu physischen tabellenzeigern in ssds unter verwendung von gezonten namensräumen
DE102005031525A1 (de) Verfahren und System zur Steuerung eines Flashspeichers und Speichersystem
DE112015005742B4 (de) Lastadaptiver algorithmus zum packen von daten
DE102016009807A1 (de) Korrelieren von physikalischen seitenadressen für soft-decision-dekodierung
DE102021115373A1 (de) Identifizierte zonen für zonen mit optimaler paritätsteilung

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence