DE112015005742B4 - Lastadaptiver algorithmus zum packen von daten - Google Patents

Lastadaptiver algorithmus zum packen von daten Download PDF

Info

Publication number
DE112015005742B4
DE112015005742B4 DE112015005742.0T DE112015005742T DE112015005742B4 DE 112015005742 B4 DE112015005742 B4 DE 112015005742B4 DE 112015005742 T DE112015005742 T DE 112015005742T DE 112015005742 B4 DE112015005742 B4 DE 112015005742B4
Authority
DE
Germany
Prior art keywords
error correction
correction code
compressed
logical pages
compressed logical
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
DE112015005742.0T
Other languages
English (en)
Other versions
DE112015005742T5 (de
Inventor
Thomas Parnell
Charalampos Pozidis
Thomas Mittelholzer
Nikolaos Papandreou
Charles John Camp
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 DE112015005742T5 publication Critical patent/DE112015005742T5/de
Application granted granted Critical
Publication of DE112015005742B4 publication Critical patent/DE112015005742B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1012Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices using codes or arrangements adapted for a specific type of error
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/63Joint error correction and other techniques
    • H03M13/6312Error control coding in combination with data compression
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/63Joint error correction and other techniques
    • H03M13/6312Error control coding in combination with data compression
    • H03M13/6318Error control coding in combination with data compression using variable length codes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1008Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices
    • G06F11/1068Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's in individual solid state devices in sector programmable memories, e.g. flash disk
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • 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/7207Details relating to flash memory management management of metadata or control data
    • 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
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C2029/0411Online error correction
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/52Protection of memory contents; Detection of errors in memory contents
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/13Linear codes
    • H03M13/15Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes
    • H03M13/151Cyclic codes, i.e. cyclic shifts of codewords produce other codewords, e.g. codes defined by a generator polynomial, Bose-Chaudhuri-Hocquenghem [BCH] codes using error location or error correction polynomials
    • H03M13/152Bose-Chaudhuri-Hocquenghem [BCH] codes

Abstract

Verfahren (500), das aufweist:Auswählen (502) einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container (554) auf den größtmöglichen Wert zu bringen;Verarbeiten (504) der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten; undSchreiben (506) der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.

Description

  • HINTERGRUND
  • Die vorliegende Erfindung bezieht sich auf Datenspeichersysteme und insbesondere auf lastadaptive Algorithmen zum Packen von komprimierten logischen Seiten in Fehlerkorrekturcode- (ECC-) Codewörter.
  • Bei der beispielhaften Verwendung von Flash-Speichern unterscheiden sich die Leistungscharakteristiken von herkömmlichen flash-gestützten NAND-Halbleiterdatenträgern (SSDs) grundsätzlich von jenen der traditionellen Festplattenlaufwerke (HDDs). Daten werden in herkömmlichen SSDs üblicherweise in Seiten der Größe 4, 8 oder 16 KB organisiert. Darüber hinaus sind Seiten-Leseoperationen in SSDs üblicherweise eine Größenordnung schneller als Schreiboperationen, und die Latenzzeit hängt weder von der aktuellen noch von der vorhergehenden Position von Operationen ab.
  • Bei flash-gestützten SSDs werden jedoch Speicherpositionen blockweise gelöscht, bevor sie beschrieben werden. Bei der Größe einer Löschblock-Einheit handelt es sich üblicherweise um 256 Seiten, und die Löschoperationen benötigen näherungsweise eine um eine Größenordnung längere Zeit als eine Seiten-Programmoperation. Infolge der intrinsischen Eigenschaften von NAND-Flash-Speichern werden bei flash-gestützten SSDs Daten nicht an der richtigen Stelle geschrieben, wobei eine Zuordnungstabelle logische Adressen der geschriebenen Daten physischen Adressen zuordnet. Diese Zuordnungstabelle wird üblicherweise als logisch-physische Tabelle (LPT) bezeichnet.
  • Da flash-gestützte Speicherzellen Lesefehler und/oder Ausfälle infolge von nachlassender Funktionstüchtigkeit oder anderen Gründen aufweisen, kann eine zusätzliche Redundanz in Speicherseiten sowie über Speicherchips hinweg verwendet werden (z.B. bei RAID-5- und RAID-6-ähnlichen Schemen). Die zusätzliche Redundanz in Speicherseiten kann ECC-Codewörter beinhalten, zu denen beispielsweise Bose-, Chaudhuri- und Hocquenghem- (BHC-) Codes gehören. Logische Seiten des Speichers können in Nutzlasten des ECC gepackt werden, wodurch ECC-Codewörter verwendet werden können, um Daten der entsprechenden logischen Seiten wiederherzustellen.
  • Das Implementieren von ECC-Codewörtern in Bezug auf die logischen Seiten eines Speichers war jedoch bei herkömmlichen Produkten nicht wünschenswert. ECC-Codewörter haben insbesondere eine feste Nutzlastgröße, die die Menge von Daten begrenzt, die das Codewort schützen kann. Die feste Nutzlastgröße der ECC-Codewörter ist darüber hinaus an die Größe von nichtkomprimierten logischen Seiten im Speicher nicht gut angepasst. Des Weiteren implementieren einige nichtflüchtige Speichersysteme das Komprimieren der logischen Seiten im Speicher, wobei eine Komprimierungseinheit jede logische Seite auf eine andere Größe (z.B. Länge) als ihre ursprüngliche Größe komprimiert. Die Länge einer komprimierten logischen Seite variiert jedoch in Abhängigkeit von der jeweiligen logischen Seite, und deswegen sind die Längenwerte von verschiedenen komprimierten logischen Seiten inkonsistent. Diese Vielfalt bei komprimierten Längenwerten vergrößert die Fehlausrichtung, die zwischen der festen Nutzlastgröße von ECC-Codewörtern und den logischen Seiten auftritt, wenn komprimierte logische Seiten in Nutzlasten von ECC-Codewörtern gepackt werden.
  • Herkömmliche Versuche, die gesamte Nutzlast von ECC-Codewörtern zu füllen, haben zur Folge, dass komprimierte logische Seiten in unerwünschter Weise auf ECC-Codewörter aufgeteilt werden (Straddling), was eine Leseverstärkung (read amplification) zur Folge hat, indem gefordert wird, dass zwei vollständige ECC-Codewörter gelesen und vom nichtflüchtigen Speicher zu einer Steuereinheit übertragen werden, um die einzelne aufgeteilte logische Seite zurückzulesen. Aufteilen vergrößert außerdem die Latenzzeit, wenn Aufteilen über eine physische Seitengrenze hinweg auftritt, wodurch es erforderlich wird, dass zusätzlich zum Übertragen von zwei vollständigen ECC-Codewörtern vom Speicher zu einer Steuereinheit zwei physische Seiten gelesen werden.
  • In diesem Zusammenhang gibt es bereits bekannte Technologien: Das Dokument US 2013 / 0 179 752 A1 beschreibt eine Speicherzellen-Array, das einen Benutzerbereich und einen Pufferbereich zum vorrübergehenden Speicher von komprimierten Daten aufweist. Außerdem ist eine Komprimierung-Datenmanagement-Logik vorhanden, welche dazu konfiguriert ist, Daten, die in dem Bufferbereich gespeichert sind, in den Benutzerbereich zu schreien. Darüber hinaus beschreibt das Dokument US 2011 / 0 154 159 A1 einen CRC-Generator-Schaltkreis (cyclic redundancy check), der ein oder mehrere parallele Datenströme empfängt und der wiederholt eine vorher festgelegte Operation zur Berechnung eines CRC-Überprüfungscodes für die parallelen Datenströme berechnet. Dies basiert auf den parallelen Datenströmen und einem Startwert oder einem vorher berechneten CRC- Überprüfungscode. Außerdem beschreibt das Dokument US 2013 / 0 246 721 A1 eine Steuereinheit, die eine Schreibsteuereinheit aufweist, um eine Überprüfung bezüglich einer Umwandlung von Daten, die durch ein externes Gerät als Teile von Clusterdaten mit einer Größe eines Clusters des Speichermediums geschrieben werden sollen, vornimmt. Außerdem sorgt die Schreibsteuereinheit für ein Komprimieren jedes Teils der Clusterdaten und für ein Bestimmen einer entsprechenden physikalischen Schreibadresse auf dem Speichermedium entsprechend einer vorher bestimmten Regel.
  • Daraus folgt, dass ein Verfahren sehr erwünscht ist, bei dem die oben erwähnten herkömmlichen Nachteile von Lösungen des bekannten Standes der Technik überwunden werden, indem ein effizientes Verfahren zum Füllen von Nutzlasten von ECC-Codewörtern bereitgestellt wird.
  • KURZDARSTELLUNG
  • Diese Aufgabe wird durch die Gegenstände der unabhängigen Ansprüche gelöst. Weitere Ausführungsbeispiele sind durch die jeweils abhängigen Ansprüche.
  • Ein Verfahren gemäß einer Ausführungsform beinhaltet Auswählen einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Das Verfahren beinhaltet außerdem vorzugsweise Verarbeiten der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten. Das Verfahren kann des Weiteren beinhalten Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher. Folglich sind Verfahren gemäß der vorliegenden Ausführungsform in wünschenswerter Weise in der Lage, einen wünschenswerten Prozess zum Füllen von Fehlerkorrekturcode-Containern bereitzustellen, indem vorzugsweise Schemen zum angepassten Packen umgesetzt werden, bei denen komprimierte logische Seiten effektiv in Fehlerkorrekturcode-Container gepackt werden.
  • Es ist darüber hinaus vorzuziehen, dass alle komprimierten logischen Seiten in dem Puffer während der Auswahl berücksichtigt werden, die bei derartigen Verfahren erfolgt, wodurch sich die Anzahl von komprimierten logischen Seiten vergrößert, die während der Auswahl festgelegt werden.
  • Gemäß einigen Ansätzen kann das oben beschriebene Auswählen beinhalten gleichzeitiges Auswählen von mehreren Kombinationen von komprimierten logischen Seiten der Daten, um den Umfang von genutztem Raum in mehreren Fehlerkorrekturcode-Containern auf den größtmöglichen Wert zu bringen. Die Fähigkeit zum gleichzeitigen Auswählen von mehreren Kombinationen von komprimierten logischen Seiten von Daten ermöglicht eine erhöhte Effektivität und schnellere Datenverarbeitungsraten, während eine effiziente Nutzung des Raums des Fehlerkorrekturcode-Containers sichergestellt wird, ohne eine unzulässige Leseverstärkung und/oder Latenzzeit einzuführen, die bei herkömmlichen Produkten auftreten.
  • Des Weiteren kann gemäß anderen Ansätzen die Kombination aus komprimierten logischen Seiten lediglich einen Abschnitt des Fehlerkorrekturcode-Containers füllen. Es kann erwünscht sein, ein teilweises Füllen eines ECC-Containers zuzulassen, wenn Schemen für angepasstes Packen verwendet werden und ein Hinzufügen einer zusätzlichen komprimierten logischen Seite, die im Puffer zur Verfügung steht, Aufteilen erfordern würde. Daher kann es in einigen Fällen erwünscht sein, auf eine Effektivität beim Packen eines ECC-Containers zu verzichten, um die Leseverstärkung und/oder Latenzzeit zu vermeiden, die bei herkömmlichen Produkten als Folge von Aufteilen auftreten.
  • Das Verfahren kann gemäß einigen Ausführungsformen außerdem optional beinhalten Ermitteln, ob ein Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container nach Hinzufügen der Kombination von komprimierten logischen Seiten über einem Schwellenwert liegt. In Reaktion auf das Ermitteln, dass ein Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container nach Hinzufügen der Kombination von komprimierten logischen Seiten über dem Schwellenwert liegt, kann ein erster Abschnitt einer zusätzlichen komprimierten logischen Seite dem Fehlerkorrekturcode-Container hinzugefügt werden. Des Weiteren kann ein zweiter Abschnitt der zusätzlichen komprimierten logischen Seite einem zweiten Fehlerkorrekturcode-Container hinzugefügt werden. Darüber hinaus können in den zweiten Fehlercode-Container zuvor komprimierte logische Seiten geschrieben worden sein, wodurch bei einigen Ausführungsformen ermöglicht wird, dass die Kapazität von Fehlerkorrekturcode-Container wunschgemäß vergrößert wird, wenn komprimierte logische Seiten zur Verfügung stehen.
  • Das Verfahren kann gemäß weiteren Ausführungsformen außerdem optional beinhalten, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer nicht wesentlich komprimiert sind. Darüber hinaus können diese optionalen Ausführungsformen beinhalten Auswählen einer der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, und Hinzufügen eines ersten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu dem Fehlerkorrekturcode-Container. Außerdem kann ein zweiter Abschnitt der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, einem zweiten Fehlerkorrekturcode-Container hinzugefügt werden. Dadurch kann optional selektives Aufteilen bei einigen Ausführungsformen ermöglicht werden, um ein Verschwenden eines unerwünschten Umfangs der Kapazität des Fehlerkorrekturcode-Containers zu vermeiden. Durch selektives Implementieren von Aufteilen auf Korrekturcode-Container in bestimmten Situationen können einige Ausführungsformen in der Lage sein, adaptives Packen auszuführen, wodurch sowohl dichtes Packen (z.B. unter Verwendung des Aufteilens) als auch angepasstes Packen untereinander austauschbar umgesetzt werden können, wie später genauer beschrieben wird.
  • Ein Computerprogrammprodukt enthält gemäß einer weiteren Ausführungsform ein computerlesbares Speichermedium mit Programmbefehlen, die darin verkörpert sind. Die Programmbefehle sind vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, damit die Steuereinheit veranlasst wird zum: Auswählen einer Kombination von komprimierten logischen Seiten von Daten durch die Steuereinheit aus einem Puffer, um einen Umfang an genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Die Programmbefehle sind außerdem vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, damit die Steuereinheit veranlasst wird zum: Verarbeiten der Kombination von komprimierten logischen Seiten durch die Steuereinheit zum Erzeugen von Fehlerkorrekturcode-Daten. Des Weiteren sind die Programmbefehle außerdem vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, damit die Steuereinheit veranlasst wird zum: Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten durch die Steuereinheit in einen nichtflüchtigen Direktzugriffsspeicher.
  • Ein System nach einer nochmals weiteren Ausführungsform enthält einen nichtflüchtigen Direktzugriffsspeicher (NVRAM), der zum Speichern von Daten eingerichtet ist; und einen Prozessor und eine Logikschaltung, die in dem Prozessor integriert ist und/oder durch den Prozessor ausgeführt werden kann. Die in dem Prozessor integrierte und/oder durch den Prozessor ausführbare Logikschaltung ist vorzugsweise eingerichtet zum: Auswählen einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Darüber hinaus ist die Logikschaltung außerdem vorzugsweise eingerichtet zum: Verarbeiten der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten. Des Weiteren ist die Logikschaltung außerdem vorzugsweise eingerichtet zum: Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  • Ein Verfahren gemäß einer nochmals weiteren Ausführungsform beinhaltet Ermitteln, ob komprimierte logische Seiten von Daten in einem Puffer wesentlich komprimiert sind. Das Verfahren kann außerdem beinhalten Auswählen einer ersten Kombination von komprimierten logischen Seiten, die wesentlich komprimiert sind, um sie einem Fehlerkorrekturcode-Container hinzuzufügen, um einem Umfang von genutztem Raum in dem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Das Verfahren kann zusätzlich beinhalten Auswählen einer zweiten Kombination von komprimierten logischen Seiten, die nicht wesentlich komprimiert sind, um sie dem Fehlerkorrekturcode-Container hinzuzufügen, um einem Umfang von genutztem Raum in dem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Darüber hinaus können die erste Kombination und/oder die zweite Kombination von komprimierten logischen Seiten verarbeitet werden, um Fehlerkorrekturcode-Daten zu erzeugen. Des Weiteren können die Daten, die der ersten Kombination und/oder der zweiten Kombination von komprimierten logischen Seiten entsprechen, und zugehörige Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher geschrieben werden. Durch Ermöglichen des Auswählens einer ersten und/oder einer zweiten Kombination von komprimierten logischen Seiten zum Hinzufügen zu einem Fehlerkorrekturcode-Container kann das Verfahren in der Lage sein, die Speicherkapazität von ECC-Containern wunschgemäß zu vergrößern. Unterschiedliche Packschemen können in Abhängigkeit vom Ausmaß der Kompression der komprimierten logischen Seiten selektiv ausgeführt werden. Gemäß einigen Ansätzen kann optional selektives Aufteilen ermöglicht werden, um ein Verschwenden eines unerwünschten Umfangs der Kapazität des Fehlerkorrekturcode-Containers zu vermeiden, z.B. wenn die komprimierten logischen Seiten nicht wesentlich komprimiert sind, wie nachfolgend genauer beschrieben wird.
  • Weitere Aspekte und Ausführungsformen der vorliegenden Erfindung werden aus der folgenden genauen Beschreibung deutlich, die bei Betrachtung in Verbindung mit den Zeichnungen die Grundgedanken der Erfindung beispielhaft veranschaulichen.
  • Figurenliste
  • Ausführungsformen der Erfindung werden lediglich beispielhaft unter Bezugnahme auf die angefügten Zeichnungen beschrieben, in denen:
    • 1 eine Darstellung einer nichtflüchtigen Speicherkarte gemäß einer Ausführungsform ist.
    • 2 eine Darstellung einer Architektur eines Datenspeichersystems gemäß einer Ausführungsform ist.
    • 3 eine Systemdarstellung gemäß einer Ausführungsform ist.
    • 4 eine konzeptionelle Darstellung, die einen Block-Stripe und einen Seiten-Stripe enthält, gemäß einer Ausführungsform ist.
    • 5A ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 5B eine repräsentative Darstellung gemäß einer veranschaulichenden Ausführungsform ist.
    • 6A ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 6B ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 7A ein Graph des Kapazitätsgewinns als Funktion der Pufferlänge gemäß einer Ausführungsform ist.
    • 7B ein Graph der Leseverstärkung als Funktion der mittleren Länge von komprimierten logischen Seiten gemäß einer Ausführungsform ist.
    • 7C ein Graph des Kapazitätsgewinns als Funktion der mittleren Länge von komprimierten logischen Seiten gemäß einer Ausführungsform ist.
    • 8 ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 9 ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 10 ein Ablaufplan eines Prozesses gemäß einer Ausführungsform ist.
    • 11A ein Graph des Kapazitätsgewinns als Funktion der mittleren Länge von komprimierten logischen Seiten gemäß einer Ausführungsform ist.
    • 11B ein Graph der Leseverstärkung als Funktion der mittleren Länge von komprimierten logischen Seiten gemäß einer Ausführungsform ist.
    • 12 eine Netzwerk-Architektur gemäß einer Ausführungsform ist.
    • 13 eine repräsentative Hardware-Umgebung gemäß einer Ausführungsform ist.
    • 14 ein gestaffeltes Datenspeichersystem gemäß einer Ausführungsform ist.
  • GENAUE BESCHREIBUNG
  • Zunächst sei darauf hingewiesen, dass die hier beschriebenen bestimmten Merkmale in Kombination mit anderen beschriebenen Merkmalen in jeder von den zahlreichen möglichen Kombinationen und Permutationen verwendet werden.
  • Die folgende Beschreibung offenbart mehrere bevorzugte Ausführungsformen von Datenspeichersystemen sowie deren Funktionsweise und Bestandteile. Es sollte klar sein, dass dabei zahlreiche Ausführungsformen in einem weiten Bereich von Speichermedien umgesetzt werden können, darunter beispielsweise Technologien der nichtflüchtigen Direktzugriffsspeicher (NVRAM) wie z.B. NAND-Flash-Speicher, NOR-Flash-Speicher, Phasenänderungsspeicher (PCM), magnetoresistive RAM (MRAM) und resistive RAM (RRAM). Zum Bereitstellen eines Kontextes und nur zum Unterstützen des Lesers können zahlreiche Ausführungsformen unter Bezugnahme auf einen Typ des nichtflüchtigen Speichers beschrieben werden. Das erfolgt lediglich beispielhaft und sollte nicht als Einschränkung der in den Ansprüchen definierten Erfindung betrachtet werden.
  • Bei einer allgemeinen Ausführungsform beinhaltet ein Verfahren Auswählen einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Das Verfahren beinhaltet außerdem vorzugsweise Verarbeiten der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten. Das Verfahren kann des Weiteren beinhalten Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  • Bei einer weiteren allgemeinen Ausführungsform enthält ein Computerprogrammprodukt ein computerlesbares Speichermedium mit Programmbefehlen, die darin verkörpert sind. Die Programmbefehle sind vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, um die Steuereinheit zu veranlassen, zum: Auswählen einer Kombination von komprimierten logischen Seiten von Daten durch die Steuereinheit aus einem Puffer, um einen Umfang an genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Die Programmbefehle sind außerdem vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, um die Steuereinheit zu veranlassen zum: Verarbeiten der Kombination von komprimierten logischen Seiten durch die Steuereinheit zum Erzeugen von Fehlerkorrekturcode-Daten. Die Programmbefehle sind des Weiteren außerdem vorzugsweise durch eine Steuereinheit lesbar und/oder ausführbar, um die Steuereinheit zu veranlassen, zum: Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten durch die Steuereinheit in einen nichtflüchtigen Direktzugriffsspeicher.
  • Bei einer nochmals weiteren allgemeinen Ausführungsform enthält ein System einen nichtflüchtigen Direktzugriffsspeicher (NVRAM), der eingerichtet ist zum Speichern von Daten; und einen Prozessor und eine Logikschaltung, die in dem Prozessor integriert und/oder durch den Prozessor ausführbar ist. Die in dem Prozessor integrierte und/oder durch den Prozessor ausführbare Logikschaltung ist vorzugsweise eingerichtet zum: Auswählen einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang an genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen. Darüber hinaus ist die Logikschaltung außerdem vorzugsweise eingerichtet zum: Verarbeiten der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten. Die Logikschaltung ist des Weiteren außerdem vorzugsweise eingerichtet zum: Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten durch die Steuereinheit in einen nichtflüchtigen Direktzugriffsspeicher.
  • 1 veranschaulicht einer Speicherkarte 100 gemäß einer Ausführungsform. Zwar ist die Speicherkarte 100 in der vorliegenden Ausführungsform als eine beispielhafte Karte zum Speichern nichtflüchtiger Daten dargestellt, es sollte jedoch beachtet werden, dass zahlreiche andere Typen von Karten zum Speichern nichtflüchtiger Daten gemäß alternativer Ausführungsformen verwendet werden können. Daraus folgt, dass die Architektur und/oder Komponenten der Speicherkarte keinesfalls zum Einschränken der Erfindung vorgesehen sind, sondern als nicht einschränkendes Beispiel dargestellt sind.
  • Darüber hinaus kann die vorliegende Speicherkarte 100 optional in Verbindung mit Merkmalen von jeder anderen hier aufgeführten Ausführungsform umgesetzt sein wie beispielsweise jene, die unter Bezugnahme auf die anderen Figuren beschrieben sind. Diese Speicherkarte 100 und andere, die hier dargestellt sind, können in zahlreichen Anwendungen und/oder bei Permutationen verwendet werden, die möglicherweise in den hier aufgelisteten veranschaulichenden Ausführungsformen spezifiziert sind. Des Weiteren kann die hier dargestellte Speicherkarte 100 in jeder gewünschten Umgebung verwendet werden.
  • Bei weiterer Bezugnahme auf 1 enthält die Speicherkarte 100 ein Gateway 102, einen Universalprozessor (GPP) 112 (wie beispielsweise einen ASIC, FPGA, CPU usw.), der mit einem GPP-Speicher 114 verbunden ist (der einen RAM, ROM, batteriegestützten DRAM, einen Phasenwechselspeicher PC-RAM, MRAM, STT-MRAM usw. oder eine Kombination hiervon aufweisen kann) und mehrere Speichersteuereinheiten 108, zu denen im vorliegenden Beispiel Flash-Steuereinheiten gehören. Jede Flash-Steuereinheit 108 ist über Kanäle 106 mit einer Vielzahl von NVRAM-Speichermodulen 104 verbunden (zu denen NAND-Flash- oder andere nichtflüchtige Speichertypen wie die oben aufgelisteten gehören können).
  • Gemäß verschiedenen Ausführungsformen kann es sich bei einer oder mehreren der Steuereinheiten 108 um einen oder mehrere Prozessoren handeln oder sie können einen oder mehrere Prozessoren und/oder eine Logikschaltung zum Steuern eines Teilsystems der Speicherkarte 100 enthalten. Die Steuereinheiten 108 steuern beispielsweise üblicherweise die Funktionen der NVRAM-Speichermodule 104 wie etwa Schreiben von Daten, Zirkulieren von Daten, Lesen von Daten usw. Die Steuereinheiten 108 können unter Verwendung einer in der Technik bekannten Logikschaltung sowie jeder hier offenbarten Logikschaltung betrieben werden und können daher bei verschiedenen Ausführungsformen als ein Prozessor für jede der Beschreibungen eines hier vorhandenen nichtflüchtigen Speichers betrachtet werden.
  • Die Steuereinheiten 108 können darüber hinaus so eingerichtet und/oder programmierbar sein, dass sie einige oder alle der hier dargestellten Verfahrensweisen ausführen oder steuern können. Somit können die Steuereinheiten 108 so betrachtet werden, dass sie zum Ausführen verschiedener Operationen mittels einer Logikschaltung eingerichtet sind, die in einem oder mehreren Chips, Modulen und/oder Blöcken; Software, Firmware und/oder anderen Befehlen, die dem einen oder den mehreren Prozessoren zur Verfügung stehen; usw. und Kombinationen hiervon programmiert ist.
  • Weiter in 1 ist jede Speichersteuereinheit 108 außerdem mit einem Steuereinheiten-Speicher 110 verbunden, der vorzugsweise einen Cache-Speicher enthält, der eine nichtflüchtige Speicherstruktur gemäß den verschiedenen hier beschriebenen Ausführungsformen repliziert. Je nach gewünschter Ausführungsform kann es sich jedoch bei dem Steuereinheiten-Speicher 110 um einen batteriegestützten DRAM, einen PhasenwechselSpeicher-PC-RAM, MRAM, STT-MRAM usw. oder eine Kombination von diesen handeln.
  • Wie oben erwähnt kann die Speicherkarte 100 je nach gewünschter Ausführungsform in verschiedenen Typen von Datenspeichersystemen umgesetzt sein. 2 veranschaulicht eine Datenspeichersystem-Architektur 200 gemäß einer beispielhaften Ausführungsform, die die Erfindung keinesfalls einschränken soll. Es sollte darüber hinaus beachtet werden, dass das Datenspeichersystem 220 von 2 verschiedene Komponenten enthalten kann, die in der Ausführungsform von 1 vorkommen.
  • In 2 weist das Datenspeichersystem 220 mehrere Schnittstellenkarten 202 auf, die zum Datenaustausch über E/A-Zwischenverbindungen 204 mit einem oder mehreren Prozessorsystemen 201 eingerichtet sind. Das Datenspeichersystem 220 kann außerdem eine oder mehrere RAID-Steuereinheiten 206 aufweisen, die zum Steuern der Datenspeicherung in einer Mehrzahl von nichtflüchtigen Speicherkarten 208 eingerichtet sind. Die nichtflüchtigen Speicherkarten 208 können NVRAM, Flash-Speicherkarten, RAM, ROM und/oder einige andere bekannten Typen des nichtflüchtigen Speichers aufweisen.
  • Die E/A-Zwischenverbindungen 204 können alle bekannten Datenübertragungsprotokolle enthalten wie 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 jede Kombination hiervon.
  • Die RAID-Steuereinheit(en) 206 in dem Datenspeichersystem 220 kann bzw. können ein Paritätsschema ähnlich zu jenem, das von RAID-5, RAID-10 verwendet wird, oder ein anderes geeignetes Paritätsschema ausführen, was für einen Fachmann beim Lesen der Beschreibung klar sein sollte.
  • Jedes Prozessorsystem 201 weist einen oder mehrere Prozessoren 210 (beispielsweise CPUs, Mikroprozessoren usw.), einen lokalen Datenspeicher 211 (z.B. den RAM 1314 von 13, den ROM 1316 von 13 usw.) und einen E/A-Adapter 218 auf, die für einen Datenaustausch mit dem Datenspeichersystem 220 eingerichtet sind.
  • Nochmals in Bezug auf 1 können die Speichersteuereinheiten 108 und/oder andere hier beschriebene Steuereinheiten (z.B. RAID-Steuereinheiten 206 von 2) in der Lage sein, je nach gewünschter Ausführungsform zahlreiche Funktionen an gespeicherten Daten auszuführen. Speichersteuereinheiten können insbesondere eine Logikschaltung enthalten, die zum Ausführen einer oder mehrerer der folgenden Funktionen eingerichtet ist, wobei es sich dabei keinesfalls um eine exklusive Liste handeln soll. Mit anderen Worten, je nach gewünschter Ausführungsform kann eine Logikschaltung eines Speichersystems zum Ausführen von zusätzlichen oder alternativen Funktionen eingerichtet sein, was für einen Fachmann beim Lesen der vorliegenden Beschreibung klar sein sollte.
  • Speicherbereinigung
  • Speicherbereinigung kann im Kontext von SSD-Speichersteuereinheiten der vorliegenden Beschreibung den Prozess zum Kennzeichnen von Datenblöcken, die für eine zukünftige Nutzung wiedergewonnen werden, und zum Verlagern aller Seiten enthalten, die in diesen noch gültig sind. Darüber hinaus können je nach der speziellen Steuereinheit und/oder der entsprechenden Funktionseinheit zur Speicherbereinigung Block-Stripes gekennzeichnet werden, damit sie wiedergewonnen und/oder verlagert werden können.
  • Die Einheit der Speicherbereinigungsoperation wird an dieser Stelle außerdem als Logischer Löschblock (LEB) bezeichnet. Es sollte außerdem angemerkt werden, dass ein LEB jedes beliebige Vielfache des physischen Speicherblocks enthält, wobei es sich dabei um eine Einheit des physischen Löschens handelt. Darüber hinaus ermöglicht die Organisation von Speicherblöcken in LEBs ein Hinzufügen von RAID-ähnlichen Paritäts-Schutzschemen in Speicherblöcken von anderen Speicherchips, Speicherebenen und/oder Kanälen sowie eine beträchtliche Leistungssteigerung durch eine höhere Parallelität.
  • Gemäß einer beispielhaften Ausführungsform, die die Erfindung keinesfalls einschränken soll, können Speichersteuereinheiten (siehe z.B. 108 in 1) eine Speicherbereinigung intern ausführen. Wie oben erwähnt kann die Speicherbereinigung Auswählen eines Block-Stripe enthalten, der verlagert werden soll, woraufhin alle Daten, die in dem ausgewählten Block-Stripe noch gültig sind, verlagert (z.B. verschoben) werden können. Nachdem die noch gültigen Daten verlagert wurden, kann der gesamte Block-Stripe gelöscht und anschließend zum Speichern von neuen Daten verwendet werden. Die Menge von Daten, die aus dem speicherbereinigten Block-Stripe verlagert wurden, bestimmt die Schreibverstärkung. Darüber hinaus beinhaltet eine effektive Art zum Verringern der Schreibverstärkung Implementieren einer Trennung gemäß Aktualität.
  • Trennung gemäß Aktualität
  • Im vorliegenden Kontext bezieht sich die „Aktualität“ von Daten auf die Rate (z.B. Häufigkeit), mit der die Daten aktualisiert (z.B. mit neuen Daten neu beschrieben) werden. Bei Speicherblöcken, die als „heiß“ betrachtet werden, ist die Aktualisierungsrate höher, wohingegen bei Speicherblöcken, die als „kalt“ betrachtet werden, die Aktualisierungsrate geringer ist als bei heißen Blöcken.
  • Es ist zu beachten, dass die Anzahl von Leseanforderungen und/oder Leseoperationen, die an bzw. in einem Speicherblock ausgeführt werden, möglicherweise keine Rolle spielen, wenn bei einigen Ausführungsformen die Aktualität des Speicherblocks ermittelt wird. Wenn beispielsweise Daten von einem bestimmten Speicherblock häufig gelesen werden, bedeutet die hohe Lesehäufigkeit nicht unbedingt, dass der Speicherblock auch eine hohe Aktualisierungsrate hat. Stattdessen kann eine hohe Häufigkeit von Leseoperationen, die an einem vorhandenen Speicherblock ausgeführt werden, eine Wichtigkeit, einen Stellenwert usw. der in dem Speicherblock gespeicherten Daten angeben.
  • Durch Gruppieren von Speicherblöcken mit denselben und/oder ähnlichen Aktualisierungswerten kann eine Trennung gemäß Aktualität erreicht werden. Im Einzelnen können Verfahren zum Trennen gemäß Aktualität heiße Speicherseiten gemeinsam in bestimmten Speicherblöcken gruppieren, während kalte Speicherseiten gemeinsam in separaten Speicherblöcken gruppiert werden. Daher besteht die Tendenz, dass ein gemäß Aktualität getrennter LEB entweder mit heißen Daten oder kalten Daten belegt ist.
  • Der Vorteil aufgrund einer Trennung gemäß Aktualität besteht in zweifacher Hinsicht. Erstens verhindert ein Ausführen eines Prozesses zur Speicherbereinigung an einem heißen Speicherblock auch ein Auslösen der Verlagerung von kalten Daten. Beim Fehlen einer Trennung gemäß Aktualität haben Aktualisierungen bei heißen Daten, die häufig ausgeführt werden, außerdem unerwünschte Verlagerungen aller kalten Daten zur Folge, die sich in demselben LEB befinden, wenn die heißen Daten verlagert werden. Daher ist die Schreibverstärkung, die beim Ausführen einer Speicherbereinigung auftritt, viel geringer für Ausführungsformen, bei denen eine Trennung gemäß Aktualität umgesetzt wird.
  • Zweitens kann die relative Aktualität von Daten für Zwecke des Ausgleichs von nachlassender Funktionstüchtigkeit genutzt werden. Beispielsweise können heiße Daten in jüngeren (z.B. gesünderen) Speicherblöcken platziert werden, während kalte Daten in älteren (z.B. weniger gesunden) Speicherblöcken in Bezug auf diese jüngeren Speicherblöcken platziert werden können. Dadurch wird die Häufigkeit, mit der bei verhältnismäßig älteren Blöcken eine nachlassende Funktionstüchtigkeit auftritt, effektiv verringert, wodurch die Lebensdauer eines vorhandenen Datenspeichersystems, bei dem Trennung gemäß Aktualität umgesetzt ist, verlängert wird.
  • Schreibzuordnung
  • Schreibzuordnung beinhaltet Platzieren von Daten von Schreiboperationen auf freien Positionen von offenen LEBs. Sobald alle Seiten in einer LEB beschrieben wurden, wird der LEB geschlossen und in einem Pool platziert, in dem sich belegte LEBs befinden. Üblicherweise kommen LEBs in dem belegten Pool für eine Speicherbereinigung infrage. Die Anzahl von offenen LEBs ist normalerweise begrenzt, und jeder LEB, der geschlossen wird, kann sofort oder nach einer bestimmten Verzögerung durch einen frischen LEB ersetzt werden, der geöffnet wird.
  • Während der Ausführung kann eine Speicherbereinigung gleichzeitig mit Benutzer-Schreiboperationen erfolgen. Wenn z.B. ein Benutzer (z.B. ein Host) Daten in eine Einheit schreibt, kann die Einheiten-Steuereinheit eine Speicherbereinigung ständig an LEBs mit ungültigen Daten ausführen, um Raum für neu eintreffende Datenseiten zu schaffen. Wie oben erwähnt gibt es bei den LEBs, an denen eine Speicherbereinigung ausgeführt wird, häufig einige Seiten, die zum Zeitpunkt der Operation zur Speicherbereinigung noch gültig sind; daher werden diese Seiten vorzugsweise in einen neuen LEB verschoben (z.B. geschrieben).
  • Die vorhergehenden Funktionen sollen wiederum die Möglichkeiten aller hier beschriebenen und/oder vorgeschlagenen Speichersysteme keinesfalls einschränken. Stattdessen werden die oben erwähnten Funktionen lediglich beispielhaft dargestellt, und je nach gewünschter Ausführungsform kann eine Logikschaltung eines Speichersystems zum Ausführen zusätzlicher oder alternativer Funktionen eingerichtet sein, was einem Fachmann beim Lesen der vorliegenden Beschreibung klar sein sollte.
  • In 3 ist ein System 300 gemäß einer Ausführungsform dargestellt. Optional kann das vorliegende System 300 in Verbindung mit Merkmalen von allen anderen Ausführungsformen umgesetzt werden, die hier aufgelistet sind, wie beispielsweise jene, die unter Bezugnahme auf die anderen FIGUREN beschrieben werden. Dieses System 300 und andere, die hier dargestellt sind, können jedoch in zahlreichen Anwendungen und/oder Permutationen verwendet werden, die möglicherweise in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben sind. Das System 300, das hier dargestellt ist, kann des Weiteren in jeder gewünschten Umgebung, z.B. in Kombination mit einer Steuereinheit verwendet werden.
  • Wie dargestellt enthält das System 300 einen Schreib-Cachespeicher 302, der mit mehreren anderen Komponenten verbunden ist, darunter ein Daten-Müllsammler 304. Wie zuvor erwähnt kann ein Daten-Müllsammler 304 zum Leeren von LEB-Einheiten verwendet werden, indem gültige Daten verlagert werden und nichtflüchtige Speicherblöcke bereitgestellt werden, die für eine spätere Wiederbenutzung gelöscht werden. Somit kann der Daten-Müllsammler 304 je nach gewünschter Ausführungsform Blöcke des fortlaufenden physischen Raums reklamieren. Gemäß einer beispielhaften Ausführungsform können Blocklöscheinheiten verwendet werden, um ein Löschen von nichtflüchtigen Speicherblöcken zu verfolgen und/oder auszuführen, die von dem Daten-Müllsammler 304 übergeben werden.
  • Der Schreib-Cachespeicher 302 ist außerdem mit dem Leerblock-Manager 306 verbunden, der leere nichtflüchtige Speicherblöcke verfolgen kann, nachdem sie gelöscht wurden. Wie es für einen Fachmann beim Lesen der vorliegenden Erfindung klar sein sollte, könnte der Leerblock-Manager 306 darüber hinaus leere Stripes von nichtflüchtigen Speicherblöcken aus unterschiedlichen Spuren (z.B. Block-Stripes) unter Verwendung der gelöschten leeren, nichtflüchtigen Speicherblöcke bilden.
  • In 3 ist der Schreib-Cachespeicher 302 mit dem LPT-Manager 308 und der Speicher-E/A-Einheit 310 verbunden. Der LPT-Manager 308 verwaltet die logisch-physischen Zuordnungen von logischen Adressen auf physische Seiten im Speicher. Gemäß einem Beispiel, das die Erfindung keinesfalls einschränken soll, kann der LPT-Manager 308 die Zuordnungen logisch-physisch von 4 KB logischen Adressen verwalten. Die Speicher-E/A-Einheit 310 tauscht mit den Speicherchips Daten aus, um niederwertige Operationen auszuführen wie beispielsweise Lesen von einer oder mehreren nichtflüchtigen Speicherseiten, Beschreiben einer nichtflüchtigen Speicherseite, Löschen eines nichtflüchtigen Speicherblocks usw.
  • Zum besseren Verständnis des Unterschieds zwischen den hier verwendeten Block-Stripes und Seiten-Stripes handelt es sich bei 4 um eine konzeptionelle Darstellung 400 gemäß einer Ausführungsform. Optional kann die vorliegende konzeptionelle Darstellung 400 in Verbindung mit Merkmalen von jeder anderen hier aufgeführten Ausführungsform umgesetzt werden wie beispielsweise jene, die unter Bezugnahme auf die anderen FIGUREN beschrieben werden. Diese konzeptionelle Darstellung 400 und andere, die hier dargestellt sind, können bei verschiedenen Anwendungen und/oder in Permutationen verwendet werden, die möglicherweise in den hier aufgeführten veranschaulichenden Ausführungsformen speziell beschrieben werden. Des Weiteren kann die hier dargestellte Steuereinheit der konzeptionellen Darstellung 400 bei jeder gewünschten Ausführungsform verwendet werden. Daher kann die beispielhafte Steuereinheit des nichtflüchtigen Speichers der konzeptionellen Darstellung 400 von 4 in einer Cachespeicher-Architektur umgesetzt werden. Je nach gewünschter Ausführungsform kann jedoch die konzeptionelle Darstellung 400 von 4 beim Definieren der Organisation von Daten umgesetzt werden, die in einem nichtflüchtigen Speicher gespeichert werden. Demzufolge werden beide Umsetzungen im Folgenden nacheinander beschrieben.
  • Nichtflüchtiger Speicher
  • In 4 enthält die konzeptionelle Darstellung 400 eine Menge von M+1 Ebenen, die mit „Ebene 0“ bis „Ebene M“ bezeichnet sind. Beim Umsetzen mit Daten, die im nichtflüchtigen Speicher gespeichert sind, kann jede Ebene in einem Kanal eine große Menge von Blöcken üblicherweise in der Größenordnung von 1024, 2048 oder mehr enthalten. Darüber hinaus können eine oder mehr Ebenen außerdem mehrere zusätzliche Blöcke enthalten, die möglicherweise als Ersatzblöcke für schadhafte Blöcke verwendet werden (z.B. leistungsschwache Blöcke, Blöcke, die unerwünschte Eigenschaften haben, usw.)
  • In jeder Ebene des nichtflüchtigen Speichers kann ein einzelner Block von jedem Kanal einen entsprechenden Block-Stripe bilden. Daraus folgt, dass eine Anzahl von Block-Stripes, die bei einer vorgegebenen Ausführungsform unterstützt werden, durch die Anzahl von Blöcken pro Ebene und Kanal ermittelt werden kann.
  • Bei der Explosionsansicht der Ebene 0 veranschaulicht die konzeptionelle Darstellung 400 des Weiteren einen einzelnen Block-Stripe (Block-Stripe 0) aus der Menge von Block-Stripes, die bei den restlichen Ebenen unterstützt werden. Der Block-Stripe 0 von Ebene 0 ist so gezeigt, dass er 11 Blöcke enthält, ein Block von jedem Kanal, die mit „Kanal 0“ bis „Kanal 10“ bezeichnet sind. Es ist zu beachten, dass sich die Zuordnung von Blöcken zu einem Block-Stripe mit der Zeit ändern kann, da Block-Stripes üblicherweise aufgelöst werden, nachdem sie einer Speicherbereinigung unterzogen wurden. Gelöschte Blöcke können in Leerblock-Pools platziert werden, wodurch neue Block-Stripes aus Blöcken in den Leerblock-Pools assembliert werden, wenn durch Schreib-Zuordnung neue Block-Stripes gefordert werden. Beispielsweise sind in der konzeptionellen Darstellung 400 Block 10 von Kanal 0 und Block 41 von Kanal 4 momentan dem dargestellten Block-Stripe 0 der Ebene 0 zugeordnet. Des Weiteren beinhaltet der dargestellte Block-Stripe 0 N+1 Seiten-Stripes, und jeder Block beinhaltet daher N+1 Seiten, die mit „Seite 0“ bis „Seite N“ bezeichnet sind.
  • Cachespeicher-Architektur
  • In 4 kann jeder Block von Seiten, der in der Explosionsdarstellung der Ebene 0 dargestellt ist, einen eindeutigen Block bilden, wenn die Umsetzung in einer Cachespeicher-Architektur erfolgt. In ähnlicher Weise kann jeder Kanal einem einzelnen individuellen Block entsprechen. In der konzeptionellen Darstellung 400 enthält beispielsweise der Block 10 alle Seiten (Seite 0 bis Seite N) im Kanal 0, während der Block 41 allen Seiten im Kanal 4 entspricht usw.
  • Im Kontext einer Speichersteuereinheit, die möglicherweise in der Lage ist, auf der Kanal-Ebene RAID umzusetzen, ist beispielsweise ein Block-Stripe aus mehreren Blöcken gebildet, die einen Stripe von Blöcken umfassen. In 4 bilden die mehreren Blöcke der Ebene 0 den Block-Stripe 0. Während alle Blöcke in einem Block-Stripe üblicherweise zu derselben Ebene gehören, können bei einigen Ausführungsformen ein oder mehrere Blöcke eines Block-Stripe zu unterschiedlichen Ebenen gehören. Daraus folgt, dass jede Ebene einen Block-Stripe enthalten kann. Somit können gemäß einer veranschaulichenden Ausführungsform Block 0 bis Block 10 einen Block-Stripe bilden.
  • Ungeachtet dessen, ob die konzeptionelle Darstellung 400 von 4 mit einem nichtflüchtigen Speicher und/oder einer Cachespeicher-Architektur umgesetzt ist, können bei verschiedenen Ausführungsformen die Anzahl von Seiten in jedem Block und/oder die Anzahl von Kanälen in jeder Ebene je nach gewünschter Ausführungsform variieren. Gemäß einer beispielhaften Ausführungsform, die die Erfindung keinesfalls einschränken soll, kann ein Block 256 Seiten enthalten, könnte jedoch bei verschiedenen Ausführungsformen eine größere oder eine kleinere Anzahl enthalten. Die Anzahl von Kanälen pro Ebene und/oder die Anzahl von Ebenen können analog je nach gewünschter Ausführungsform variieren.
  • In 4 bezeichnen alle Seiten in einem Block-Stripe mit demselben Seitenindex einen Seiten-Stripe. Beispielsweise enthält der Seiten-Stripe 0 die erste Seite (Seite 0) jedes Kanals im Block-Strike 0 der Ebene 0. In ähnlicher Weise enthält der Seiten-Stripe N die letzte Seite (Seite N) jedes Kanals im Block-Stripe 0 der Ebene 0.
  • Da Zellen auf der Grundlage eines nichtflüchtigen Speichers Lesefehler und/oder Ausfälle infolge von nachlassender Funktionstüchtigkeit oder anderen Gründen aufweisen, kann eine zusätzliche Redundanz in Speicherseiten sowie über Speicherchips (z.B. RAID-5- und RAID-6-ähnlich Schemen) verwendet werden. Die zusätzliche Redundanz in Speicherseiten kann ECC-Codewörter enthalten, die beispielsweise BCH-Codes enthalten können.
  • Wie oben erwähnt können logische Seiten eines Speichers in Nutzlasten von ECC-Codewörtern gepackt werden, wodurch die ECC-Codewörter verwendet werden können, um Daten der entsprechenden logischen Seiten wiederherzustellen. Ein Umsetzen von ECC-Codewörtern in Bezug auf die logischen Seiten eines Speichers war jedoch bei herkömmlichen Produkten unerwünscht. Im Einzelnen haben ECC-Codewörter eine feste Nutzlastgröße, die den Umfang von Daten begrenzt, den ein ECC-Codewort einnehmen kann, und die feste Nutzlastgröße der ECC-Codewörter ist an die Größe von nichtkomprimierten logischen Seiten im Speicher nicht gut angepasst. Des Weiteren setzen einige nichtflüchtige Speichersysteme eine Kompression von logischen Seiten im Speicher um, wodurch eine Komprimierungseinheit jede logische Seite auf eine Größe (z.B. Länge) komprimiert, die sich von seiner ursprünglichen Größe unterscheidet. Darüber hinaus variiert die Länge einer komprimierten logischen Seite in Abhängigkeit von der bestimmten logischen Seite und deswegen sind die Längenwerte von verschiedenen komprimierten logischen Seiten inkonsistent. Diese Vielfalt von komprimierten Längenwerten vergrößert die Fehlausrichtung, die zwischen der festen Nutzlastgröße von ECC-Codewörtern und den logischen Seiten auftritt, wenn komprimierte logische Seiten in Nutzlasten von ECC-Codewörtern gepackt werden.
  • Herkömmliche Versuche zum Füllen der gesamten Nutzlast von ECC-Codewörtern (an dieser Stelle auch als „dichtes Packen“ bezeichnet) haben zur Folge, dass komprimierte logische Seiten in unerwünschter Weise auf ECC-Codewörter aufgeteilt werden. Folglich ist die Leseverstärkung vergrößert durch die Forderung, dass zwei vollständige ECC-Codewörter gelesen und vom nichtflüchtigen Speicher (z.B. zu einer Steuereinheit) übertragen werden, damit eine einzige aufgeteilte logische Seite zurückgelesen werden kann. Aufteilen vergrößert außerdem die Latenzzeit, wenn Aufteilen über eine Grenze einer physischen Seite hinweg auftritt, wodurch erforderlich wird, dass zusätzlich zum Übertragen von zwei vollständigen ECC-Codewörtern vom Speicher zwei physische Seiten gelesen werden. Somit besteht der Nachteil des Aufteilens darin, dass mehrere Seiten gelesen werden müssen und es erforderlich ist, einen größeren Umfang an Daten als gewünscht zurückzugeben. Daraus ergibt sich, dass ein Verfahren, das die zuvor erwähnten herkömmlichen Nachteile überwindet, durch Bereitstellen eines wirksamen Verfahrens zum Füllen von Nutzlasten von ECC-Codewörtern sehr erwünscht ist.
  • In scharfem Kontrast zu den vorhergehenden Problemen, die bei Verwendung von herkömmlichen Produkten auftreten, beinhalten zahlreiche Ausführungsformen, die an dieser Stelle beschrieben und/oder vorgeschlagen werden, lastadaptive Algorithmen zum Umsetzen von Schemen zum angepassten Packen, bei denen komprimierte logische Seiten effizient in ECC-Codewörter gepackt werden, z.B. unter Verwendung von dynamischem Programmieren. Somit können bei Speicherumgebungen, die eine große Vielfalt bei der Länge von komprimierten logischen Seiten umsetzen, einige der hier beschriebenen verschiedenen Ausführungsformen umgesetzt werden, um die komprimierten logischen Seiten in Nutzlasten von ECC-Codewörtern (hier auch als ECC-Container bezeichnet) so zu packen, dass die Wahrscheinlichkeit des Auftretens eines Ereignisses Aufteilen so gering wie möglich gehalten wird, während außerdem eine effiziente Nutzung des eigentlichen ECC-Containers, insbesondere im Vergleich zu herkömmlichen Ansätzen, sichergestellt ist.
  • 5A zeigt einen Ablaufplan eines Verfahrens 500 zum Umsetzen eines Schemas zum angepassten Packen gemäß einer Ausführungsform. Das Verfahren 500 kann darüber hinaus gemäß der vorliegenden Erfindung u.a. in verschiedenen Ausführungsformen in jeder der in den 1 bis 4 gezeigten Umgebungen ausgeführt werden. Eine größere oder eine kleinere Anzahl von Operationen als jene, die in 5A speziell beschrieben werden, können im Verfahren 500 enthalten sein, was einem Fachmann beim Lesen der vorliegenden Beschreibungen klar ist.
  • Jeder der Schritte des Verfahrens 500 kann durch eine geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 500 beispielsweise teilweise oder vollständig durch eine Steuereinheit, einen Prozessor usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 500 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 5A dargestellt enthält das Verfahren 500 die Operation 502, bei der eine Kombination von komprimierten logischen Seiten von Daten aus einem Puffer ausgewählt wird, um einen Umfang an ungenutztem Raum in einem ECC-Container (beispielsweise eine ECC-Codewort-Nutzlast) so gering wie möglich zu halten. Zwar ist die Operation 502 so beschrieben wird, dass sie den Umfang von genutztem Raum in einem ECC-Container auf den größtmöglichen Wert bringt, es sollte jedoch berücksichtigt werden, dass bei dem Verfahren 500 gleichfalls versucht werden kann, den Umfang von ungenutztem Raum in dem ECC-Container so gering wie möglich zu halten.
  • Nachdem eine logische Seite komprimiert wurde, kann sie eine andere Länge haben als eine andere komprimierte logische Seite. Gemäß einem Beispiel, das die Erfindung keinesfalls beschränken soll, können die erste und die zweite logische Seite eine nichtkomprimierte Länge von 265 128-Bit-Wörtern haben. Nachdem sowohl die erste als auch die zweite Seite (z.B. durch eine Komprimierungseinheit) komprimiert wurden, kann jedoch die Länge der ersten logischen Seite auf eine komprimierte Länge von 50 128-Bit-Wörtern verringert sein, während die Länge der zweiten logischen Seite lediglich auf eine komprimierte Länge von 200 128-Bit-Wörtern verringert wurde. Gemäß einem weiteren Beispiel, das ebenfalls die Erfindung keinesfalls beschränken soll, kann eine logische Seite mit einer nichtkomprimierten Länge von 265 128-Bit-Wörtern, nachdem sie komprimiert wurde, lediglich auf eine komprimierte Länge von 260 128-Bit-Wörtern verkürzt werden. Des Weiteren können einige logische Seiten überhaupt nicht komprimierbar sein, wenn sie beispielsweise während eines vorhergehenden logischen Prozesses bereits komprimiert wurden. Daraus ergibt sich, dass gemäß verschiedenen Ausführungsformen die Länge einer komprimierten logischen Seite in Abhängigkeit von der bestimmten logischen Seite variiert und deswegen sind die Längenwerte von verschiedenen komprimierten logischen Seiten inkonsistent.
  • Dementsprechend kann in Abhängigkeit von der Größe eines ECC-Containers und/oder der komprimierten Längen von verschiedenen verfügbaren komprimierten logischen Seiten bei bestimmten Kombinationen von komprimierten logischen Seiten der zur Verfügung stehende Raum in einem ECC-Container effektiver genutzt werden als bei anderen Kombinationen, z.B. vorzugsweise ohne Aufteilen auf einen anderen ECC-Container. Daher sind Ausführungsformen, bei denen die in Operation 502 ausgeführte Auswahl umgesetzt wird, in der Lage, die herkömmlichen Nachteile zu überwinden, indem komprimierte logische Seiten gemeinsam gruppiert werden, um die Nutzung von ECC-Containern ohne Aufteilen auf den größtmöglichen Wert zu bringen, wie nachfolgend genauer beschrieben wird.
  • In 5A wird die Kombination von komprimierten logischen Seiten verarbeitet, um Fehlerkorrekturcode-Daten zu erzeugen. Siehe Operation 504. Nachdem eine gewünschte Anzahl von komprimierten logischen Seiten in einen ECC-Codewort-Container gepackt wurden, können die ECC-Container zu einem ECC-Codierer gesendet werden, der dem Container mehrere Paritätsbits hinzufügt. Des Weiteren enthält die Operation 506 Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher. Nachdem die Paritätsbits hinzugefügt wurden, werden die gesamte Folge von komprimierten logischen Seiten und die Paritätsbits in einen nichtflüchtigen Speicher geschrieben, woraufhin der ECC-Container bei nachfolgenden Prozessen wiederverwendet werden kann.
  • Ein visuelles Beispiel, wie das Verfahren 500 umgesetzt werden kann, ist in der repräsentativen Darstellung 550 von 5B gezeigt. Als Voraussetzung sollte beachtet werden, dass die repräsentative Darstellung 550 zwar veranschaulichende Werte für die Längenwerte von komprimierten logischen Seiten 553, Puffer 552 und ECC-Codewort-Container 554 enthält, diese Werte jedoch lediglich beispielhaft dargestellt werden und die Erfindung keinesfalls beschränken sollen.
  • In der repräsentativen Darstellung 550 von 5B haben die komprimierten logischen Seiten 553 im Puffer 552 unterschiedliche Längen, die durch die Größe jeder entsprechenden komprimierten logischen Seite und deren entsprechenden Längenwert repräsentiert werden, der in jeder der komprimierten logischen Seiten 553 dargestellt ist. Darüber hinaus ist der ECC-Container 554 so dargestellt, dass er eine beispielhafte Länge von 458 128-Bit-Wörtern hat, was die Erfindung in keiner Weise beschränken soll. Wie zuvor erwähnt kann in Abhängigkeit von den komprimierten logischen Seiten 553, die im Puffer 552 zur Verfügung stehen, eine Kombination von komprimierten logischen Seiten 553 aus dem Puffer 552 ausgewählt und dem ECC-Container 554 hinzugefügt werden. In Abhängigkeit von der Größe des ECC-Containers 554 und/oder der komprimierten Länge von verschiedenen verfügbaren komprimierten logischen Seiten 553 können bestimmte Kombinationen von komprimierten logischen Seiten 553 den zur Verfügung stehenden Raum in einem ECC-Container effektiver nutzen als andere Kombinationen. Somit können bei der vorliegenden Ausführungsform herkömmliche Nachteile überwunden werden, indem eine Kombination von komprimierten logischen Seiten 553 ausgewählt wird, um sie dem ECC-Container 554 hinzuzufügen, wodurch die Nutzung des ECC-Containers 554 ohne Aufteilen auf den größtmöglichen Wert gebracht wird.
  • Gemäß der veranschaulichenden Ausführungsform, die in der repräsentativen Darstellung 550 dargestellt ist, sind lediglich elf 128-Bit-Wörter des ECC-Containers 554 ungenutzt. Es kann darüber hinaus unerwünscht sein, eine zusätzliche komprimierte logische Seite dem ECC-Container 554 anzufügen im Hinblick auf das Aufteilen, das dabei erforderlich sein würde, da keine der verbleibenden komprimierten logischen Seiten 553, die im Puffer 552 verfügbar sind, eine Länge hat, die kleiner oder gleich elf 128-Bit-Wörter ist.
  • Nachdem die ausgewählte Kombination von komprimierten logischen Seiten 553 dem ECC-Container 554 hinzugefügt wurden, kann der ECC-Container 554 an einen ECC-Codierer gesendet werden und/oder die Daten, die der Kombination von komprimierten logischen Seiten entsprechen, können in einen nichtflüchtigen Direktzugriffsspeicher geschrieben werden. Außerdem können die restlichen komprimierten logischen Seiten in dem Puffer 552 neu angeordnet werden, so dass zusätzliche komprimierte logische Seiten erhalten werden können. Es sollte beachtet werden, dass, wenn eine komprimierte logische Seite in den freien Raum des ECC-Containers 554 passt, hier eine weitere komprimierte logische Seite mit einer Länge von elf oder weniger 128-Bit-Wörtern in dem Puffer 552 erhalten wird, bevor der ECC-Container 554 zum Verarbeiten gesendet wird, wobei die neu erhaltene komprimierte logische Seite dem ECC-Container 554 hinzugefügt werden kann, um den darin verfügbaren restlichen Raum zu nutzen.
  • In 5A wird bevorzugt, dass alle komprimierten logischen Seiten in dem Puffer bei der Auswahl der Operation 502 berücksichtigt werden. Das ermöglicht wunschgemäß, dass die maximale Anzahl von Kombinationen von komprimierten logischen Seiten beim Füllen eines ECC-Containers berücksichtigt wird, wodurch die möglichst effiziente Nutzung des ECC-Containers sichergestellt ist. Gemäß anderen Ansätzen kann jedoch die Auswahl, die in der Operation 502 ausgeführt wird, bei Bedarf variieren. Obwohl es vorzuziehen ist, dass alle komprimierten logischen Seiten in dem Puffer während der Auswahl berücksichtigt werden, kann bei anderen Ansätzen lediglich eine Teilmenge der komprimierten logischen Seiten während der Auswahl berücksichtigt werden. Gemäß einem Beispiel können lediglich komprimierte logische Seiten, die wesentlich komprimiert wurden (z.B. im Unterschied zu Seiten, die nicht wesentlich komprimiert wurden), während der Auswahl berücksichtigt werden, die in der Operation 502 ausgeführt wird, wie in Kürze offensichtlich wird.
  • In Abhängigkeit von der komprimierten Länge einer komprimierten logischen Seite kann die komprimierte logische Seite im Vergleich zu ihrer nichtkomprimierten Länge als wesentlich komprimiert oder nicht wesentlich komprimiert betrachtet werden. Gemäß einem veranschaulichenden Ansatz können komprimierte logische Seiten mit einer komprimierten Länge, die 95 % oder mehr von ihrer nicht komprimierten Länge beträgt, als nicht wesentlich komprimiert betrachtet werden, während komprimierte logische Seiten mit einer komprimierten Länge, die weniger als 95 % ihrer nicht komprimierten Länge beträgt, als wesentlich komprimiert betrachtet werden können. Somit kann gemäß einem Beispiel eine logische Seite mit einer nichtkomprimierten Länge von 265 128-Bit-Wörtern, die auf eine Länge von 255 128-Bit-Wörtern (d.h. auf etwa 96 % ihrer nichtkomprimierten Länge) komprimiert wird, als nicht wesentlich komprimiert festgelegt werden. Gemäß einem anderen Beispiel kann eine logische Seite als wesentlich komprimiert festgelegt werden, wenn sie eine nichtkomprimierte Länge von 265 128-Bit-Wörtern hat, die auf eine Länge von 250 128-Bit-Wörtern (d.h. auf etwa 94 % ihrer nicht komprimierten Länge) komprimiert wird. Je nach der gewünschten Ausführungsform kann es sich jedoch bei dem Schwellenwert, der zum Unterscheiden zwischen komprimierten logischen Seiten, die wesentlich komprimiert sind, und jenen, die nicht wesentlich komprimiert sind, um eine im Voraus festgelegte und/oder ausgewählte komprimierte Länge wie beispielsweise 99 %, 98 %, 97 %, 96 %, 94 %, 93 %, 92 %, 91 %, 90 %, 87 %, 85 % 83 %, 80 % usw. der ursprünglichen nichtkomprimierten Länge der logischen Seite handeln.
  • Es ist vorzuziehen, dass bei der in Operation 502 ausgeführten Auswahl ein ECC-Container möglichst häufig vollständig gefüllt wird, ohne dass ein Aufteilen auf einen anderen ECC-Container erfolgt, wodurch eine maximale Nutzung des zur Verfügung stehenden Raums erreicht wird, ohne eine Leseverstärkung und/oder eine Latenzzeit einzuführen, was bei herkömmlichen Produkten der Fall ist. Bei einigen Ansätzen kann jedoch die Kombination von komprimierten logischen Seiten lediglich einen Teil (d.h. weniger als 100 %) eines ECC-Containers füllen. Es kann erwünscht sein, ein teilweises Füllen eines ECC-Containers zuzulassen, wenn Schemen zum angepassten Packen verwendet werden und ein Hinzufügen jeder zusätzlichen komprimierten logischen Seite, die in dem Puffer zur Verfügung steht, ein Aufteilen erfordern würde. Daher kann es bei einigen Fällen erwünscht sein, dass bei einigen der hier beschriebenen Ansätze ein Wirkungsgrad beim Packen des ECC-Containers geopfert wird, um die Leseverstärkung und/oder Latenzzeit zu verhindern, die bei herkömmlichen Produkten beispielsweise infolge des Aufteilens auftreten.
  • Wie oben erwähnt können je nach Größe eines ECC-Containers und/oder der komprimierten Länge von verschiedenen komprimierten logischen Seiten, die in einem Puffer zur Verfügung stehen, bestimmte Kombination von komprimierten logischen Seiten den verfügbaren Raum in einem ECC-Container z.B. vorzugsweise ohne Aufteilen auf einen anderen ECC-Container effektiver nutzen als andere Kombinationen. Gemäß verschiedenen Ausführungsformen können andere Techniken zum Auswählen einer Kombination von komprimierten logischen Seiten eingesetzt werden, bei denen in wünschenswerter Weise ein Umfang von genutztem Raum in einem ECC-Container auf den größtmöglichen Wert gebracht wird. Gemäß einer beispielhaften Ausführungsform, die die Erfindung keinesfalls beschränken soll, kann Gleichung 1 zum Auswählen einer gewünschten Kombination von komprimierten logischen Seiten verwendet werden, die einem vorgegebenen ECC-Container angefügt werden sollen. Bringe F ( x ) _ = i = 1 L x i l i  auf einen m o ¨ glichst großen Wert ,vorbehaltlich der Einschr a ¨ nkung: F ( x ) _ K
    Figure DE112015005742B4_0001
  • Gleichung 1 repräsentiert eine Formulierung des Problems des Auswählens einer Kombination von komprimierten logischen Seiten in mathematischer Form, wobei es erwünscht ist, dass ein Umfang von genutztem Raum in einem ECC-Container auf den größtmöglichen Wert gebracht wird. Die in Gleichung 1 verwendeten Variablen sind folgendermaßen definiert:
    • L repräsentiert die Anzahl von komprimierten logischen Seiten, die in einem Puffer gehalten werden.
    • K repräsentiert die Länge des ECC-Containers, gemessen in Einheiten von 128-Bit-Wörtern.
    • li repräsentiert die Länge der komprimierten logischen Seite an einer Position „i“ im Puffer, gemessen in Einheiten von 128-Bit-Wörtern, wobei es sich im Wesentlichen um eine Zufallszahl zwischen 1 und 265 handeln kann.
    • xi ist das „i-te“ Element des binären Vektors x, der als 1 definiert ist, wenn die komprimierte logische Seite an der Position „i“ in dem Puffer dem ECC-Container angefügt wird, und ansonsten 0 ist.
  • Unter Verwendung dieser Variablen definiert Gleichung 1 ein Maximierungsproblem für alle möglichen 2L Werte für den binären Vektor x. Durch Implementieren von x als einen binären Vektor ist der Wert von xiLi entweder null oder eins, multipliziert mit der Länge der komprimierten logischen Seite an der i-ten Position in dem Puffer. Daher legt der Wert von xiLi fest, ob die Länge einer vorgegebenen komprimierten logischen Seite zur Gesamtlänge der Daten beiträgt, die in den ECC-Container eingeschlossen werden sollen, und dadurch die Kombination von komprimierten logischen Seiten festlegt, die implementiert wird.
  • Die Funktion F(x) von Gleichung 1 unterliegt außerdem der Einschränkung, dass der resultierende Wert von F(x) gleich der Länge des ECC-Containers (d.h. K) oder kleiner als diese ist, wodurch ein Überlauf verhindert wird. Daher bewertet die Funktion F(x) im Wesentlichen alle verfügbaren Kombinationen von komprimierten logischen Seiten, die in einem Puffer zur Verfügung stehen, und legt diejenige Kombination fest, die am besten in den ECC-Container passt, wodurch in diesem verschwendeter Raum möglichst gering gehalten wird, ohne das Aufteilen zwischen Grenzen des ECC-Containers und/oder Grenzen der physischen Seite implementiert wird. Daher legt das Maximierungsproblem in Gleichung 1 die Kombination von komprimierten logischen Seiten in dem Puffer zu einem vorgegebenen Zeitpunkt fest, bei der der zur Verfügung stehende Raum eines ECC-Containers möglichst effektiv genutzt wird, wodurch Leseverstärkung und Lese-Latenzzeit so gering wie möglich gehalten werden.
  • Ein Fachmann erkennt beim Lesen der vorliegenden Beschreibung, dass es sich bei Gleichung 1 um eine Aussage des 0/1-Knapsack-Problem handelt, bei dem Werte Gewichtungen darstellen. Ein Fachmann erkennt gleichfalls beim Lesen der vorliegenden Beschreibung, dass diese Probleme mit Hilfe der in Gleichung 2.1 angegebenen Funktion gelöst werden können. m i ( w ) = m a x [ j = i i x j l j ]  so dass  j = 1 i x j l j w
    Figure DE112015005742B4_0002
  • Der Wert dieser Funktion kann wie durch Gleichung 2.2 veranschaulicht rekursiv berechnet werden, was für einen Fachmann beim Lesen der vorliegenden Beschreibung klar ist. i = 1, , L , w = 0, , K ,   m i ( w ) = { max ( m i 1 ( w l i ) + l i , m i 1 ( w ) ) l i w m i 1 ( w ) ansonsten
    Figure DE112015005742B4_0003
  • Gleichung 2.1 repräsentiert ebenfalls eine mathematische Formulierung des Problems des Auswählens einer Kombination von komprimierten logischen Seiten, die wünschenswerterweise einen Umfang von genutztem Raum in einem ECC-Container auf den größtmöglichen Wert bringt. Die in den Gleichungen 2.1 und 2.2 verwendeten Variablen sind folgendermaßen definiert:
    • L repräsentiert die Anzahl von komprimierten logischen Seiten, die in einem Puffer gehalten werden.
    • K repräsentiert die Länge des ECC-Containers, gemessen in Einheiten von 128-Bit-Wörtern.
    • i repräsentiert eine Variable, deren Wert im Bereich von 1 bis L liegt.
    • w repräsentiert eine Variable, deren Wert im Bereich von 0 bis K liegt.
    • li repräsentiert die Länge der komprimierten logischen Seite an einer Position „i“ im Puffer, gemessen in Einheiten von 128-Bit-Wörtern, wobei es sich im Wesentlichen um eine Zufallszahl zwischen 1 und 265 handeln kann.
    • Ij repräsentiert die Länge der komprimierten logischen Seite an einer Position „j“ im Puffer, gemessen in Einheiten von 128-Bit-Wörtern, wobei es sich im Wesentlichen um eine Zufallszahl zwischen 1 und 265 handeln kann.
    • x ist ein binärer Vektor, für den das „j-te“ Element (xj) als 1 definiert ist, wenn die komprimierte logische Seite an der Position „j“ in dem Puffer dem ECC-Codewort angefügt wird, und ansonsten 0 ist.
  • Für einen Fachmann ist beim Lesen der vorliegenden Beschreibung klar, dass die Funktion mi(w) von Gleichung 2.1 für alle Werte von i und w gemäß der in Gleichung 2.2 dargestellten Rekursion aktualisiert wird. Daher ist die Funktion mi(w) durch Implementieren der Funktion mi(w) unter Verwendung der komprimierten logischen Seiten eines vorgegebenen Puffers in der Lage, die längste Auswahl der ersten i komprimierten logischen Seiten in dem Puffer zu ermitteln, die in eine vorgegebenen Länge „w“ passen. Die Lösung von Gleichung 1 wird somit durch mL(K) gegeben. Darüber hinaus kann eine Zurückverfolgungs-Prozedur verwendet werden, um den momentan optimalen binären Vektor zu ermitteln, der einer Kombination von komprimierten logischen Seiten für ein optimales Packen entspricht, die einem vorgegebenen ECC-Container angefügt werden sollen, wie nachfolgend genauer beschrieben wird (z.B. siehe 6B).
  • 6A veranschaulicht gemäß einer Ausführungsform eine beispielhafte Umsetzung von Funktionen zur Vorwärts-Rekursion, die in Gleichung 2.2 bereitgestellt werden. Darüber hinaus kann das in 6A veranschaulichte Verfahren 600 gemäß der Erfindung u.a. in jeder der in den 1 bis 5B dargestellten Umgebungen in verschiedenen Ausführungsformen ausgeführt werden. Mehr oder weniger Operationen als jene, die in 6A speziell beschrieben sind, können im Verfahren 600 enthalten sein, was für einen Fachmann beim Lesen der vorliegenden Beschreibungen klar ist.
  • Jeder der Schritte des Verfahrens 600 kann in jeder geeigneten Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 600 beispielsweise teilweise oder vollständig durch eine Steuereinheit, einen Prozessor usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 600 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 6A gezeigt enthält das Verfahren 600 eine Operation 602, bei der der Wert von i auf null eingestellt wird, und der Wert von w wird auf null eingestellt. Daraufhin wird in der Operation 604 der Wert i von seinem vorhergehenden Wert um 1 erhöht. Des Weiteren wird in der Entscheidung 606 ermittelt, ob der erhöhte Wert von i kleiner als der Wert von L oder gleich diesem ist. Wenn bei der Entscheidung 606 festgestellt wird, dass der Wert von i kleiner als der Wert von L oder gleich diesem ist, geht das Verfahren 600 zur Operation 608, wodurch mi(0) auf 0 eingestellt wird.
  • Das Verfahren 600 enthält außerdem Erhöhen des Werts von w von seinem vorhergehenden Wert um 1. Des Weiteren wird in der Entscheidung 612 ermittelt, ob der erhöhte Wert von w kleiner als der Wert von K oder gleich diesem ist. Wenn bei der Entscheidung 612 festgestellt wird, dass der erhöhte Wert von w kleiner als der Wert von K oder gleich diesem ist, geht das Verfahren zur Entscheidung 614. Wenn jedoch bei der Entscheidung festgestellt wird, dass der erhöhte Wert von w größer als der Wert von K ist, kehrt das Verfahren 600 zur Operation 604 zurück, wodurch der Wert von i erneut von seinem vorhergehenden Wert um 1 erhöht wird.
  • Die Entscheidung 614 enthält Ermitteln, ob der Wert von li - 1 kleiner als der Wert von w oder gleich diesem ist. Wenn bei der Entscheidung 614 festgestellt wird, dass der Wert von li - 1 kleiner als der Wert von w oder gleich diesem ist, geht das Verfahren 600 zur Operation 618, die Berechnen von mi(w) = max [mi-1 (w-li-1 )+li-1, mi-1 (w)] enthält. Wenn jedoch bei der Entscheidung 614 festgestellt wird, dass der Wert von li-1 größer als der Wert von w ist, geht das Verfahren zur Operation 616, bei der der Wert von mi(w) gleich dem Wert von mi-1 (w) definiert wird.
  • Nach Ausführen einer Operation 616 oder 618 kehrt das Verfahren zur Operation 610 zurück, wodurch der Wert von w wiederum um 1 erhöht wird. Wenn darüber hinaus bei der Rückkehr zur Entscheidung 606 festgestellt wird, dass der Wert von i größer ist als der Wert von L, geht das Verfahren 600 zur Operation 620, wodurch das Verfahren beendet wird.
  • Wie oben erwähnt kann eine Rückverfolgungs-Prozedur verwendet werden, um den momentanen optimalen binären Vektor zu ermitteln, der einer optimalen Pack-Kombination von komprimierten logischen Seiten zum Anfügen an einen vorgegebenen ECC-Container entspricht. In 6B veranschaulicht das Verfahren 650 einen beispielhaften Ablaufplan, der zum Ausführen einer Rückverfolgungs-Prozedur gemäß einer Ausführungsform verwendet werden kann. Darüber hinaus kann das in 6B veranschaulichte Verfahren gemäß der vorliegenden Erfindung u.a. in verschiedenen Ausführungsformen in jeder der in den 1 bis 5B dargestellten Umgebungen ausgeführt werden. Mehr oder weniger Operationen als jene, die in 6B speziell beschrieben sind, können im Verfahren 650 enthalten sein, was für einen Fachmann beim Lesen der vorliegenden Beschreibungen klar ist.
  • Jeder der Schritte des Verfahrens 650 kann durch eine geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 650 beispielsweise teilweise oder vollständig durch Steuereinheiten, Prozessoren usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 650 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 6B gezeigt enthält das Verfahren 650 die Operation 652, bei der der Wert der Variablen „state“ auf den Wert von K eingestellt wird, und der Wert von i wird auf den Wert von L + 1 eingestellt. Des Weiteren wird bei der Operation 650 der Wert von i um 1 verringert, und bei der Entscheidung 656 wird ermittelt, ob der verringerte Wert von i größer oder gleich 1 ist. Wenn bei der Entscheidung 656 festgestellt wird, dass der Wert von i größer oder gleich 1 ist, geht das Verfahren 650 zur Entscheidung 658, bei der ermittelt wird, ob der Wert von mi(state) gleich dem Wert von mi-1 (state) ist.
  • Wenn bei der Entscheidung 658 festgestellt wird, dass die Werte gleich sind, geht das Verfahren zur Operation 660, bei der der Wert von xi-1 auf 0 eingestellt wird. Wenn jedoch bei der Entscheidung 658 festgestellt wird, dass die Werte verschieden sind, geht das Verfahren zur Operation 662, bei der der Wert von xi-1 auf 1 eingestellt wird. Außerdem enthält die Operation 664 Berechnen von state = state - li-1.
  • Nach Ausführen der Operation 660 oder 664 kehrt das Verfahren 650 zur Operation 654 zurück, wodurch der Wert von i erneut um 1 verringert wird. Wenn darüber hinaus beim Zurückkehren zur Entscheidung 656 festgestellt wird, dass der Wert von i kleiner als 1 ist, geht das Verfahren 650 zur Operation 666, wodurch das Verfahren 650 beendet wird.
  • 7A enthält eine grafische Darstellung 700, die den Kapazitätsgewinn als Funktion der Pufferlänge (Anzahl von logischen Seiten, die in dem Puffer gespeichert werden kann) beispielhaft veranschaulicht. Die gestrichelte Linie repräsentiert einen theoretischen maximalen Kapazitätsgewinn, der durch Füllen des gesamten verfügbaren Raums in ECC-Containern erreicht wird (z.B. durch Verwenden von dichtem Packen). Des Weiteren repräsentieren die Punkte längs der durchgehenden Linie den Kapazitätsgewinn, der unter Verwendung des Algorithmus zum angepassten Packen gemäß verschiedenen Ansätzen, die hier beschrieben werden, als Funktion der entsprechenden Pufferlänge erreicht wird.
  • Obwohl eine Pufferlänge von eins einem geringen Kapazitätsgewinn bei Umsetzungen mit angepasstem Packen entspricht, wenn die Pufferlänge zunimmt, wird der Algorithmus zum angepassten Packen in stärkerem Maße wirkungsvoll. Insbesondere bei Pufferlängen 8, 16 und mehr logischen Seiten ist der Kapazitätsgewinn, der erreicht wird, etwa zwei, d.h. der Kapazitätsverlust infolge von Anpassungsproblemen ist im Wesentlichen 0. Mit anderen Worten, Umsetzungen mit angepasstem Packen, die hier in den verschiedenen Ansätzen beschrieben werden, erreichen wünschenswert keinen Kapazitätsverlust, während außerdem eine gewünschte Anpassung in den ECC-Containern sichergestellt ist, z.B. kein Aufteilen auf Codewörter.
  • 7B enthält eine grafische Darstellung 710, die eine beispielhafte Leseverstärkung veranschaulicht, die unterschiedlichen mittleren Längen von komprimierten logischen Seiten zugehörig ist. Im Einzelnen veranschaulicht die grafische Darstellung 710 die gewünschte Verminderung der Leseverstärkung, die bei Verwendung von Verfahren zum angepassten Packen erreicht wird, wie hier in verschiedenen Ausführungsformen beschrieben wird.
  • Wie gezeigt ist angepasstes Packen bei Verwendung einer Pufferlänge 16 in der Lage, eine konstante Leseverstärkung von etwa 2,1 zu erreichen, wohingegen dichtes Packen viel höhere Werte der Leseverstärkung zur Folge hat, insbesondere wenn die mittlere Länge von komprimierten logischen Seiten zunimmt. Die gestrichelte Linie gibt den Unterschied der Leseverstärkung an, der zwischen dichtem und angepasstem Packen auftritt, wodurch der unerwünschte Umfang von erhöhter Leseverstärkung hervorgehoben wird, der unter Verwendung von Techniken zum dichten Packen im Gegensatz zu Verfahren zum angepassten Packen auftritt.
  • Des Weiteren enthält 7C eine weitere grafische Darstellung 720, die einen beispielhaften Kapazitätsgewinn als Funktion der mittleren Länge einer komprimierten logischen Seite in einem vorhandenen Puffer darstellt. Wie gezeigt sind Kapazitätsgewinne, die unter Verwendung von dichtem Packen erreicht werden (wobei der gesamte ECC-Container gefüllt wird), nahezu dieselben wie die Kapazitätsgewinne, die unter Verwendung von Verfahren zum angepassten Packen (mit einer Pufferlänge von 16) für geringere mittlerer Längen der komprimierten logischen Seiten erreicht werden. Es tritt effektiv kein Kapazitätsverlust auf, wenn die mittlere Länge der komprimierten logischen Seiten kleiner ist als 150 128-Bit-Worte.
  • Größere mittlere Längen der komprimierten logischen Seiten erzeugen jedoch ein anderes Ergebnis in Bezug auf die Leistungsfähigkeit dieser beiden Schemen, die in der grafischen Darstellung 720 gezeigt sind. Insbesondere haben Forderungen, die mit angepasstem Packen für komprimierte logische Seiten verbunden sind, die mittlere Längen haben, die größer sind als etwa 150 128-Bit-Worte, Kapazitätsverluste von bis zu etwa 10 % erzeugt verglichen mit den Kapazitätsgewinnen, die unter Verwendung von dichtem Packen erreicht werden. Somit wird angepasstes Packen vorzugsweise bei Ausführungsformen mit komprimierten logischen Seiten mit einer geringen mittleren Länge umgesetzt.
  • Daraus folgt, dass eine Leistungsfähigkeit außerdem von den statistischen Gegebenheiten der komprimierten logischen Seiten abhängt. Wenn die statistischen Gegebenheiten der komprimierten logischen Seiten derart sind, dass die logischen Seiten nicht stark komprimierbar sind, besteht eine geringere Wahrscheinlichkeit, dass ein Algorithmus zum angepassten Packen in der Lage ist, eine Kombination von komprimierten logischen Seiten aus dem Puffer auszuwählen, die wünschenswert in das ECC-Codewort passt. Daher können bei bestimmten Situationen zusätzliche Maßnahmen umgesetzt werden, um eine effektive Nutzung von ECC-Containern sicherzustellen.
  • Gemäß einigen Ausführungsformen, die die Erfindung keinesfalls beschränken sollen, kann es erwünscht sein, dichtes Packen umzusetzen, was in bestimmten Fällen ein Aufteilen auf ECC-Container zur Folge hat. Es kann jedoch erwünscht sein, das Aufteilen auf Fälle zu beschränken, bei denen ECC-Container beteiligt sind, die auf derselben physischen Seite positioniert sind, beispielsweise im Unterschied zu Fällen, bei denen ECC-Container beteiligt sind, die auf zwei verschiedenen physischen Seiten positioniert sind. Folglich kann die Speicherkapazität in Fällen verbessert werden, bei denen die mittlere Länge von komprimierten logischen Seiten größer ist als erwünscht, wenn beispielsweise die komprimierten logischen Seiten nicht wesentlich komprimiert sind. Dadurch kann durch selektives Einführen des Aufteilens die Vergeudung eines unerwünschten Umfangs an Kapazität des ECC-Containers vermieden werden.
  • Durch selektives Umsetzen des Aufteilens auf ECC-Container in bestimmten Situationen können einige Ausführungsformen in der Lage sein, adaptives Packen auszuführen, wodurch sowohl dichtes Packen (beispielsweise unter Verwendung von Aufteilen) als auch angepasstes Packen austauschbar umgesetzt werden können. Im Einzelnen veranschaulicht 8 ein optionales Verfahren 800 zum Umsetzen eines Schemas zum adaptiven Packen, das nach der Operation 502 des obigen Verfahrens 500 umgesetzt (z.B. ausgeführt) werden kann, um zu ermitteln, ob Aufteilen (dichtes Packen) gemäß einer Ausführungsform umgesetzt werden sollte, die die Erfindung keinesfalls einschränken sollte. Daraus folgt, dass das Verfahren 800 darüber hinaus gemäß der vorliegenden Erfindung u.a. in verschiedenen Ausführungsformen in jeder der in den 1 bis 5B dargestellten Umgebungen ausgeführt werden kann. Mehr oder weniger Operationen als jene, die in 8 speziell beschrieben sind, können im optionalen Verfahren 800 enthalten sein, was für einen Fachmann beim Lesen der vorliegenden Beschreibungen klar ist
  • Jeder der Schritte des optionalen Verfahrens 800 kann durch eine geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 800 beispielsweise teilweise oder vollständig durch eine Steuereinheit, einen Prozessor usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des optionalen Verfahrens 800 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 8 dargestellt beinhaltet das optionale Verfahren 800 die Entscheidung 802, bei der ermittelt wird, ob ein Umfang von ungenutztem Raum in dem ECC-Container über einem Schwellenwert liegt, nachdem die Kombination von komprimierten logischen Seiten (z.B. ausgewählt in Operation 502) hinzugefügt wurde. Der Schwellenwert kann die Vorteile des Verhinderns von ungenutzten Abschnitten des ECC-Containers gegenüber den Vorteilen des Verhinderns von Leseverstärkung und/oder Latenzzeit abwägen. Mit anderen Worten, bei der Entscheidung 802 wird ermittelt, ob es sich bei dem Umfang von ungenutztem Raum in einem vorhandenen ECC-Container um einen annehmbaren Umfang handelt. Bei einigen Ansätzen kann jedoch bei der Entscheidung 802 gleichfalls ermittelt werden, ob ein Abschnitt einer zusätzlichen komprimierten logischen Seite dem ECC-Container auf der Grundlage des Umfangs an genutztem Raum in einem ECC-Container hinzugefügt wird, z.B. in Bezug auf einen Schwellenwert. Je nach gewünschtem Ansatz kann ein hier verwendeter Schwellenwert im Voraus ermittelt, in Echtzeit berechnet, im Speicher gespeichert (z.B. eine Zuordnungstabelle), durch einen Benutzer während einer Operation ausgewählt werden usw.
  • Wenn in der Entscheidung 802 festgestellt wird, dass der Umfang von ungenutztem Raum in dem ECC-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, unter einem Schwellenwert liegt, geht das Verfahren 800 zur Operation 808, wodurch das Verfahren 800 endet.
  • Das Verfahren 800 enthält zusätzlich Hinzufügen eines ersten Abschnitts einer zusätzlichen komprimierten logischen Seite zu dem ECC-Container in Reaktion auf ein Feststellen, dass der Umfang von ungenutztem Raum in dem ECC-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über dem Schwellenwert liegt. Siehe Operation 804. Des Weiteren enthält die Operation 806 Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten ECC-Container. Somit werden dann, wenn ermittelt wird, dass der Umfang von ungenutztem Raum in dem ECC-Container unerwünscht hoch ist, eine oder mehrere zusätzliche komprimierte logische Seiten vorzugsweise dem ECC-Container dicht gepackt hinzugefügt, ungeachtet des Aufteilens, das dafür erforderlich sein kann. Durch selektives Umsetzen des Aufteilens auf ECC-Container kann das Verfahren 800 in bestimmten Situationen in der Lage sein, austauschbar sowohl dichtes Packen (z.B. unter Verwendung von Aufteilen) als auch angepasstes Packen wirksam auszuführen.
  • Nach der Operation 806 geht das Verfahren 800 zur Operation 808, wodurch das Verfahren 800 ausgeführt wird. Wie zuvor erwähnt handelt es sich bei dem Verfahren 800 jedoch um eine optionale Abfolge von Schritten, die gemäß einigen Ansätzen nach der Operation 502 des Verfahrens 500 von 5A ausgeführt werden können. Somit kann bei Ausführungsformen, bei denen das optionale Verfahren 800 zusätzlich zum Verfahren 500 implementiert wird, nachdem das optionale Verfahren 800 vollständig ausgeführt wurde, das Ausführen des Verfahrens 500 bei der Operation 504 wiederaufgenommen werden.
  • Wie oben erwähnt kann der Wert des Schwellenwerts zum Abwägen der Vorteile des Verhinderns von ungenutzten Abschnitten des ECC-Containers gegenüber den Vorteilen des Verhinderns von Leseverstärkung und/oder Latenzzeit verwendet werden. Beispielsweise kann ein geringerer Schwellenwert in Situationen verwendet werden, bei denen die Vorteile von hohen Kapazitätsgewinnen Leseverstärkung und/oder Latenzzeit, die mit Aufteilen verbunden sind, überwiegen. Alternativ kann ein höherer Schwellenwert in Situationen verwendet werden, bei denen die Leseverstärkung und/oder die Latenzzeit, die mit Aufteilen verbunden sind, unannehmbar sind. Daraus folgt, dass der Wert des Schwellenwerts z.B. durch einen Benutzer je nach gewünschter Ausführungsform festgelegt werden kann, indem die Ergebnisse von erhöhter Kapazität und Aufteilen abgewogen werden. Darüber hinaus kann ein Schwellenwert während des Betriebs abgestimmt werden, um sich verändernde Bedingungen, eintreffende komprimierte logische Seiten, die Größe des ECC-Containers usw. zu berücksichtigen. Der Schwellenwert, der bei einer beispielhaften Ausführungsform des adaptiven Packens umgesetzt wird, kann sogar 0 betragen, wobei in diesem Fall das alleinig zugelassene angepasste Packen eine perfekte Ergänzung bilden würde, ohne dass Aufteilen erforderlich ist, wodurch ein Vergeuden von Umfang des ECC-Containers verhindert wird.
  • Es kann wiederum erwünscht sein, das Aufteilen auf Fälle zu beschränken, bei denen ECC-Container beteiligt sind, die auf derselben physischen Seite positioniert sind, z.B. im Unterschied zu Fällen, bei denen ECC-Container beteiligt sind, die auf zwei unterschiedlichen physischen Seiten positioniert sind. Daher kann Aufteilen auf Container derselben Seite zugelassen werden, während das beim Aufteilen auf Container auf unterschiedlichen Seiten nicht der Fall ist. Bei einigen Ansätzen kann es trotzdem erwünscht sein, Aufteilen auf ECC-Container auf verschiedenen physischen Seiten ebenfalls zuzulassen. Einige logische Seiten können nicht komprimierbar sein, beispielsweise wenn sie bei einem vorhergehenden logischen Prozess bereits komprimiert wurden, und deswegen nicht angemessen in einen ECC-Container passen. Folglich kann eine Speicherkapazität in Fällen verbessert werden, bei denen die mittlere Länge einer komprimierten logischen Seite größer ist als gewünscht, beispielsweise wenn die komprimierten logischen Seiten nicht wesentlich komprimiert sind. Daher kann durch selektives Einführen des Aufteilens ein Verlust von Kapazität eines ECC-Containers vermieden werden.
  • Gemäß einigen Ansätzen kann der zweite ECC-Container, dem der zweite Abschnitt der zusätzlichen komprimierten logischen Seite hinzugefügt wird, leer sein. Mit anderen Worten, dem zweiten ECC-Container müssen keine anderen logischen Seiten hinzugefügt werden, sondern er kann stattdessen lediglich als Überlauf verwendet werden. Gemäß anderen Ansätzen kann der zweite ECC-Container jedoch zuvor hinzugefügte (z.B. geschriebene) komprimierte logische Seiten enthalten. Daraus folgt, dass, wenn neue logische Seiten komprimiert und einem Puffer hinzugefügt werden, komprimierte logische Seiten ungenutzten Abschnitten des zuvor gefüllten ECC-Containers hinzugefügt werden können. Das vermindert weiter den Umfang von ungenutztem Raum in ECC-Containern, indem einem fast vollen ECC-Container aufgeteilte (überlaufende) Daten hinzugefügt werden.
  • Aufteilen kann ebenfalls in anderen Situationen zulässig sein. Beispielsweise kann in einigen Fällen durch die Größe der komprimierten logischen Seiten gegeben sein, ob ein Aufteilen ausgeführt werden kann. Wenn die Länge von komprimierten logischen Seiten zu groß ist, um dichtes Packen zuzulassen, wenn beispielsweise zwei komprimierte logische Seiten nicht in einen ECC-Container passen würden und eine einzige komprimierte logische Seite einen unangemessen kleinen Umfang des ECC-Containers füllen würde, können alternative Ansätze bei einem Versuch implementiert werden, den Kapazitätsverlust von ECC-Containern so gering wie möglich zu halten.
  • In 9 ist ein Ablaufplan eines Verfahrens 900 zum Umsetzen eines adaptiven Packschemas gemäß einer Ausführungsform gezeigt. Das Verfahren 900 kann darüber hinaus gemäß der vorliegenden Erfindung u.a. in verschiedenen Ausführungsformen in jeder der in den 1 bis 5B gezeigten Umgebungen ausgeführt werden. Eine größere oder eine kleinere Anzahl von Operationen als jene, die in 9 speziell beschrieben werden, können im Verfahren 500 enthalten sein, was einem Fachmann beim Lesen der vorliegenden Beschreibungen klar ist
  • Jeder der Schritte des Verfahrens 900 kann durch eine geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 900 beispielsweise teilweise oder vollständig durch eine Steuereinheit, einen Prozessor usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 900 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 9 dargestellt enthält das Verfahren 900 Ermitteln, ob wenigstens einige der komprimierten logischen Seiten von Daten in einem Puffer beispielsweise wesentlich komprimiert sind oder gleichbedeutend nicht wesentlich nichtkomprimiert sind. Siehe Operation 902. Darüber hinaus kann gemäß einigen Ansätzen in der Operation außerdem ermittelt werden, ob komprimierte logische Seiten von Daten in dem Puffer nicht wesentlich komprimiert sind. Daher kann je nach Anwendung die Operation 902 in der Lage sein zu ermitteln, ob komprimierte logische Seiten in einem Puffer wesentlich komprimiert und/oder nicht wesentlich komprimiert sind.
  • In 9 kann durch das Verfahren 900 in Reaktion auf ein Feststellen, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer wesentlich komprimiert sind, eine erste Kombination von komprimierten logischen Seiten, die wesentlich komprimiert sind, zum Hinzufügen zu einem ECC-Container ausgewählt werden, um einen Umfang von genutztem Raum in dem ECC-Container auf den größtmöglichen Wert zu bringen. Siehe Operation 904. Es sollte jedoch beachtet werden, dass die Operation 904 zwar so beschrieben wird, dass ein Umfang von genutztem Raum in einem ECC-Container auf den größtmöglichen Wert gebracht wird, bei dem Verfahren 900 jedoch gleichfalls versucht werden kann, einen Umfang von ungenutztem Raum in dem ECC-Container so gering wie möglich zu halten. Es wird außerdem bevorzugt, dass die erste Kombination von wesentlich komprimierten logischen Seiten lediglich einen Abschnitt des ECC-Containers füllt.
  • Des Weiteren enthält die Operation 906 in Reaktion auf ein Feststellen, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer nicht wesentlich komprimiert sind, Auswählen einer zweiten Kombination der komprimierten logischen Seiten, die nicht wesentlich komprimiert sind, zum Hinzufügen zu dem ECC-Container, um einen Umfang von genutztem Raum in dem ECC-Container auf den größtmöglichen Wert zu bringen (oder um gleichbedeutend einen Umfang von ungenutztem Raum in dem ECC-Container so gering wie möglich zu halten).
  • Zwar wurden die Operationen 904 und 906 oben so beschrieben, als ob sie in Reaktion auf einander widersprechende Feststellungen ausgeführt werden, gemäß einigen Ansätzen können beide Operationen 904 und 906 ausgeführt werden, wenn beispielsweise festgestellt wird, dass einige der komprimierten logischen Seiten in dem Puffer wesentlich komprimiert sind, während andere komprimierte logische Seiten in dem Puffer nicht wesentlich komprimiert sind. Somit können je nach Ausführungsform eine oder beide Operationen 904, 906 im Verfahren 900 beispielsweise in Abhängigkeit von der Feststellung ausgeführt werden, die in der Operation 902 getroffen wurde.
  • In 9 enthält die Operation 908 Verarbeiten der ersten Kombination und/oder der zweiten Kombination von komprimierten logischen Seiten, um ECC-Daten zu erzeugen. Des Weiteren enthält die Operation 910 Schreiben der Daten, die der ersten Kombination und/oder der zweiten Kombination von komprimierten logischen Seiten entsprechen, und zugehöriger ECC-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  • Wie oben beschrieben kann Aufteilen ausgeführt werden, um komprimierte logische Seiten, die nicht wesentlich komprimiert sind, dem ECC-Container hinzuzufügen. Daher kann durch Auswählen einer Kombination von komprimierten logischen Seiten, die nicht wesentlich komprimiert sind, zum Hinzufügen zu dem ECC-Container, Aufteilen in der Operation 906 umgesetzt werden, um einen ersten Abschnitt von einer der komprimierten logischen Seiten einem ersten ECC-Container hinzuzufügen, zusätzlich zum Hinzufügen eines zweiten Abschnitts von einer der komprimierten logischen Seiten zu einem zweiten ECC-Container (siehe beispielsweise die Operationen 804, 806 von 8).
  • Es kann wiederum erwünscht sein, das Aufteilen auf Fälle zu beschränken, bei denen ECC-Container beteiligt sind, die auf derselben physischen Seite positioniert sind, z.B. im Unterschied zu Fällen, bei denen ECC-Container beteiligt sind, die auf zwei unterschiedlichen physischen Seiten positioniert sind. Daher kann Aufteilen auf Container derselben Seite zugelassen werden, während das beim Aufteilen auf Container auf unterschiedlichen Seiten nicht der Fall ist. Bei einigen Ansätzen kann es jedoch erwünscht sein, Aufteilen auf ECC-Container auf verschiedenen physischen Seiten ebenfalls zuzulassen
  • Daraus folgt, dass bei Ausführungsformen, bei denen wenigstens einige der komprimierten logischen Seiten, ein Großteil der komprimierten logischen Seiten, alle komprimierten logischen Seiten usw. nicht wesentlich komprimiert sind, Aufteilen umgesetzt wird, um den Schutz von Daten zu ermöglichen, die komprimierten logischen Seiten entsprechen, die nicht wesentlich komprimiert sind.
  • Je nach gewünschter Ausführungsform können verschiedenen Verfahren umgesetzt werden zum Auswählen der komprimierten logischen Seite (die beispielsweise nicht wesentlich komprimiert ist), die auf ECC-Container aufgeteilt wird. Bei einigen Ausführungsformen können beispielsweise komprimierte logische Seiten zum Aufteilen auf ECC-Container zufällig ausgewählt werden. Mit anderen Worten, es ist möglicherweise keine zusätzliche Verarbeitung erforderlich, um eine komprimierte logische Seite auszuwählen, um einen leeren Abschnitt eines ECC-Containers zu füllen und auf einen weiteren ECC-Container aufzuteilen. Bei anderen Ausführungsformen kann es jedoch erwünscht sein, die komprimierte logische Seite mit der größten Länge auszuwählen, die auf zwei ECC-Container aufgeteilt wird. Des Weiteren kann bei einigen Ausführungsformen die Gleichung 3 umgesetzt werden, um eine komprimierte logische Seite auszuwählen, die auf den nächsten ECC-Container in möglichst geringem Umfang aufgeteilt wird. K ' = min w = K + 1, , K + 265 [ w ] ,  so dass:m L ( w ) w = 0
    Figure DE112015005742B4_0004
  • Gleichung 3 repräsentiert wiederum in mathematischer Form eine Formulierung des Problems des Auswählens einer komprimierten logischen Seite, die auf den nächsten ECC-Container in möglichst geringem Umfang aufgeteilt wird. Die in Gleichung 3 verwendeten Variablen können folgendermaßen definiert sein:
    • L repräsentiert die Anzahl von komprimierten logischen Seiten, die in einem Puffer gehalten werden.
    • K repräsentiert die Länge des ECC-Containers, gemessen in Einheiten von 128-Bit-Wörtern.
    • w repräsentiert eine Variable, deren Wert sich von K + 1 bis K + 265 erstreckt.
  • Ein Fachmann wird beim Lesen der vorliegenden Beschreibung erkennen, dass der minimale Wert von w, der die Bedingung mL(w) - w = 0 erfüllt, durch die Funktion K` von Gleichung 3 gegeben ist. Nachdem der Wert von K` berechnet wurde, kann die Auswahl der komprimierten logischen Seiten aus dem Puffer ermittelt werden, die sich auf den nächsten Container des ECC-Codeworts in möglichst geringem Umfang erstreckt, indem eine Zurückverfolgung vom Rekursionszustand mL(K') ausgeführt wird.
  • Ein Fachmann wird beim Lesen der vorliegenden Beschreibung erkennen, dass die Funktion K' von Gleichung 3 für alle Werte von w nach einer Vorwärts-Rekursion aktualisiert werden kann. Gemäß einem beispielhaften Ansatz kann die Prozedur der Vorwärts-Rekursion, die oben in 6A beschrieben ist, zum Aktualisieren der Funktion K` umgesetzt werden.
  • Darüber hinaus kann eine Zurückverfolgungs-Prozedur verwendet werden, um den momentanen optimalen Binärvektor zu ermitteln, der einer ausgewählten komprimierten logischen Seite zum Aufteilen auf zwei vorhandene ECC-Container entspricht. Gemäß einem beispielhaften Ansatz kann die oben in 6B beschriebene Zurückverfolgungs-Prozedur umgesetzt werden, um den momentanen optimalen Binärvektor zu ermitteln, der einer ausgewählten komprimierten logischen Seite zum Aufteilen auf zwei vorhandene ECC-Container entspricht.
  • Wie oben beschrieben kann ein Vergeuden von unerwünschtem Umfang von ECC-Container-Kapazität durch selektives Einführen des Aufteilens vermieden werden. Durch selektives Umsetzen von Aufteilen auf ECC-Container können einige Ausführungsformen in bestimmten Situationen in der Lage sein, dichtes Packen (beispielsweise unter Verwendung von Aufteilen) und angepasstes Packen austauschbar auszuführen. 10 veranschaulicht eine beispielhafte Umsetzung eines Verfahrens 1000 mit Prozessschritten, die verwendet werden können, um zu ermitteln, ob in einer vorgegebenen Situation gemäß einer Ausführungsform angepasstes Packen oder dichtes Packen umgesetzt werden sollte. Bei dem Verfahren 1000 wird der Wert von K` gemäß Gleichung 3 rekursiv berechnet, wobei jeder Überlauf in dem momentanen ECC-Container berücksichtigt wird, der infolge von Aufteilen in den vorhergehenden ECC-Container aufgetreten sein könnte. Das in 10 veranschaulichte Verfahren 1000 kann darüber hinaus gemäß der vorliegenden Erfindung u.a. in verschiedenen Ausführungsformen in jeder der in den 1 bis 9 dargestellten Umgebungen ausgeführt werden. Mehr oder weniger Operationen als jene, die in 10 speziell beschrieben sind, können im Verfahren 1000 enthalten sein, was für einen Fachmann beim Lesen der vorliegenden Beschreibungen klar ist.
  • Jeder der Schritte des Verfahrens 1000 kann durch eine geeignete Komponente der Betriebsumgebung ausgeführt werden. Bei verschiedenen Ausführungsformen kann das Verfahren 1000 beispielsweise teilweise oder vollständig durch eine Steuereinheit, einen Prozessor usw. oder eine andere Einheit ausgeführt werden, in der ein oder mehrere Prozessoren vorhanden sind. Der Prozessor, z.B. Verarbeitungsschaltung(en), Chip(s) und/oder Modul(e), die in Hardware und/oder Software umgesetzt sind und vorzugsweise wenigstens eine Hardware-Komponente haben, kann in jeder Einheit genutzt werden, um einen oder mehrere Schritte des Verfahrens 1000 auszuführen. Zu veranschaulichenden Prozessoren gehören eine Zentraleinheit (CPU), eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw., deren Kombinationen oder jede andere geeignete Datenverarbeitungseinheit, die in der Technik bekannt ist, sie sind jedoch nicht auf diese beschränkt.
  • Wie in 10 gezeigt enthält das Verfahren 1000 die Operation 1002, bei der der Wert von K` auf den Wert von K - overflow eingestellt wird. Wie oben beschrieben repräsentiert K die Länge des ECC-Containers, gemessen in Einheiten von 128-Bit-Wörtern, wobei am Beginn des Verfahrens overflow den Umfang von Daten repräsentiert, der auf das aktuelle ECC-Codewort aufgeteilt wurde. Am Ende des Verfahrens jedoch repräsentiert overflow den Umfang von Daten, der auf das aktuelle ECC-Codewort aufgeteilt wird. Daher ist der verbleibende Raum in einem aktuellen ECC-Container durch den in der Operation 1002 berechneten Differenzwert gegeben.
  • In 10 wird bei der Entscheidung 1004 ermittelt, ob der Wert von K' - mL(K') kleiner ist als thd, wobei es sich bei thd um einen im Voraus definierten Schwellenwert handelt, der einem Umfang von zulässigem vergeudeten Raum in dem ECC-Container entspricht. Die in der Entscheidung 1004 erfolgte Ermittlung entscheidet, ob dichtes Packen oder angepasstes Packen umgesetzt werden sollte. Insbesondere wenn bei der Entscheidung festgestellt wird, dass der Wert von K' - mL(K') kleiner ist als thd, wird im Verfahren 1000 festgestellt, dass angepasstes Packen umgesetzt werden sollte. Das Verfahren 1000 geht dann zur Operation 1006, bei der der Wert von state auf den Wert von K` eingestellt wird und overflow auf 0 gesetzt wird. Das Verfahren 1000 geht dann zur Operation 1008, wodurch das Verfahren 1000 beendet wird.
  • Wenn bei der Entscheidung 1004 festgestellt wird, dass der Wert von K' - mL(K') größer ist als thd, wird im Verfahren 1000 festgestellt, dass dichtes Packen umgesetzt werden sollte. Das Verfahren 1000 geht dann zur Operation 1010, bei der der Wert von i auf den Wert von K' + 1 eingestellt wird. Des Weiteren enthält die Entscheidung 1012 ein Ermitteln, ob der Wert von (mL(i) - i) 0 ist. Wenn bei der Entscheidung 1012 festgestellt wird, dass der Wert nicht 0 ist, geht das Verfahren 1000 zur Operation 1008, und das Verfahren 1000 wird beendet. Wenn alternativ bei der Entscheidung 1012 festgestellt wird, dass der Wert 0 ist, geht das Verfahren 1000 zur Operation 1014, bei der der Wert von i um 1 erhöht wird. Darüber hinaus enthält die Operation 1016 Einstellen des Werts von state auf den erhöhten Wert von i, und die Operation 1018 enthält Einstellen des Werts von overflow auf den Wert von state - K`.
  • 11A enthält eine grafische Darstellung 1100, die einen Kapazitätsgewinn als Funktion der mittleren Länge einer komprimierten logischen Seite in einem vorhandenen Puffer veranschaulicht. Wie gezeigt sind Kapazitätsgewinne, die unter Verwendung von dichtem Packen erreicht werden (das den gesamten ECC-Container füllt), virtuell gleich den Kapazitätsgewinnen, die unter Verwendung von Verfahren des angepassten Packens (mit einer Pufferlänge von 16) und Verfahren des adaptiven Packens (mit einem Schwellenwert von 40) für geringe mittlere Längen der komprimierten logischen Seiten erreicht werden. Wie zuvor gibt es effektiv keinen auftretenden Kapazitätsverlust, wenn die mittlere Länge von komprimierten logischen Seiten unterhalb von 150 128-Bit-Wörtern liegt.
  • Es wird jedoch erneut offensichtlich, dass bei größeren mittleren Längen der komprimierten logischen Seiten in Bezug auf die Leistungsfähigkeitswerte dieser drei gezeichneten Schemen der grafischen Darstellung 1100 andere Ergebnisse erzeugt werden. Obwohl die Daten, die dem angepassten Packen für komprimierte logische Seiten zugehörig sind, die mittlere Längen größer als 150 128-Bit-Wörter haben, einen ähnlichen Kapazitätsverlust erzeugt haben wie jener, der in der obigen 7C zu sehen ist, folgt die Darstellung des adaptiven Packens den Kapazitätsgewinnwerten, die beim dichten Packen auftreten, viel enger. Daraus folgt, dass Ausführungsformen, bei denen Verfahren des adaptiven Packens umgesetzt werden, in der Lage sind, sowohl dichtes Packen als auch angepasstes Packen umzusetzen, wobei selektives Aufteilen einen minimalen Kapazitätsverlust bei allen Arbeitslasten zur Folge hat.
  • Des Weiteren enthält 11B eine grafische Darstellung 1110, die die Leseverstärkung veranschaulicht, die mit unterschiedlichen mittleren Längen von komprimierten logischen Seiten verbunden sind. Im Einzelnen veranschaulicht die grafische Darstellung die gewünschte Verringerung der Leseverstärkung, die unter Verwendung von Verfahren des angepasstes Packens und Verfahren des adaptiven Packens erreicht wird, wie hier in verschiedenen Ausführungsformen beschrieben.
  • Wie gezeigt ist angepasstes Packen in der Lage, eine konstante Leseverstärkung von etwa 2,1 zu erreichen, während dichtes Packen viel höhere Leseverstärkungspegel zur Folge hat, insbesondere wenn die mittlere Länge von komprimierten logischen Seiten zunimmt. Darüber hinaus kommen Schemen des adaptiven Packens nahe an die minimale erreichbare Leseverstärkung von etwa 2,1, unabhängig von der mittleren Länge der komprimierten logischen Seiten. Die gestrichelten Linien geben die Differenz bei der Leseverstärkung, die bei Schemen des dichten Packens und Schemen des adaptiven Packens vorkommen, als Funktion der minimalen Leseverstärkung des angepassten Packens an.
  • Anstelle des Füllens von lediglich einem ECC-Container zu einem Zeitpunkt können einige der hier beschriebenen Ausführungsformen in der Lage sein, komprimierte logische Seiten mehreren ECC-Containern beispielsweise gleichzeitig hinzuzufügen. Gemäß einem beispielhaften Ansatz können 15 ECC-Container aus einem gemeinsamen Puffer parallel gefüllt werden. Daher kann gemäß einem Ansatz Auswählen von komprimierten logischen Seiten aus einem Puffer (siehe beispielsweise Operation 502 von 5A) gleichzeitiges Auswählen mehrerer Kombinationen von komprimierten logischen Seiten von Daten enthalten, um den Umfang von genutztem Raum in mehreren ECC-Containern auf den größtmöglichen Wert zu bringen. Die Fähigkeit zum gleichzeitigen Auswählen mehrerer Kombinationen von komprimierten logischen Seiten von Daten ermöglicht eine erhöhte Effektivität und schnellere Datenverarbeitungsraten, während eine effiziente Nutzung von ECC-Container-Raum sichergestellt ist, ohne unzulässige Lese-Verstärkung und/oder Latenzzeit einzuführen wie das bei herkömmlichen Produkten erfolgt.
  • Ein Fachmann ist beim Lesen der vorliegenden Beschreibung in der Lage, das Problem des Packens mehrerer ECC-Container mit komprimierten logischen Seiten von einem Puffer mit dem „Mehrfach-Knapsack-Problem“ zu erkennen. Dieses Problem kann suboptimal gelöst werden, indem zuerst aus einem Puffer eine Menge von komprimierten logischen Seiten ausgewählt wird, die den ungenutzten Raum in einem ersten ECC-Container so niedrig wie möglich halten. Die ausgewählten komprimierten logischen Seiten werden dann aus dem Puffer entfernt, und eine weitere Menge von komprimierten logischen Seiten wird aus dem Puffer mit verminderter Größe ausgewählt, die den ungenutzten Raum in einem zweiten ECC-Container so niedrig wie möglich halten. Auf diese Weise kann ein einziger Puffer verwendet werden, um mehrere ECC-Container zu packen.
  • Gemäß einer gebräuchlichen Ausführungsform können jede einzelne oder mehrere der Operationen und/oder Ermittlungen, die oben unter Bezugnahme auf die 5A bis 6B, 8 bis 9 beschrieben wurden, durch ein Computerprogrammprodukt ausgeführt werden, das ein computerlesbares Speichermedium mit Programmbefehlen aufweist, die darin verkörpert sind. Die Programmbefehle können im Einzelnen durch eine Steuereinheit lesbar und/oder ausführbar sein, um zu bewirken, dass die Steuereinheit die eine oder die mehreren Operationen und/oder Ermittlungen ausführt, was für einen Fachmann beim Lesen der vorliegenden Beschreibung klar ist.
  • Gemäß einer gebräuchlichen Ausführungsform können jedoch jede einzelne oder mehrere der Operationen und/oder Ermittlungen, die oben unter Bezugnahme auf die 5A bis 6B, 8 bis 9 beschrieben wurden, durch ein System ausgeführt werden, das einen NVRAM, der zum Speichern von Daten eingerichtet ist, zusätzlich zu einem Prozessor und einer Logikschaltung enthält, die in dem Prozessor integriert und/oder durch diesen ausführbar ist, um die eine oder die mehreren Operationen und/oder Ermittlungen auszuführen, was für einen Fachmann beim Lesen der vorliegenden Beschreibung klar ist.
  • Daraus folgt, dass verschiedenen Ausführungsformen, die an dieser Stelle beschrieben und/oder vorgeschlagen wurden, lastadaptive Algorithmen zum effektiven Packen von komprimierten logischen Seiten in ECC-Codewörter enthalten. Algorithmen zum Packen von komprimierten logischen Seiten (z.B. logische Benutzerseiten) in ECC-Container, die an dieser Stelle offenbart werden, sind in der Lage, eine minimale Lese-Latenz und eine minimale Lese-Verstärkerleistung zusätzlich zum Erreichen einer besseren Speicherkapazität für eine ausreichend komprimierbare Arbeitslast zu erreichen. Die Algorithmen können dynamisches Programmieren verwenden, um effektive Kombinationen von komprimierten logischen Seiten eines Puffers zu ermitteln, um Daten in die ECC-Codewort-Container zu packen. Wie oben beschrieben kann angepasstes Packen umgesetzt werden, um effektives Packen von ECC-Containern für komprimierte logische Seiten zu erreichen, die wesentlich komprimiert sind, während adaptive Packschemen umgesetzt werden können, wenn nicht alle komprimierten logischen Seiten wesentlich komprimiert sind, wodurch sichergestellt wird, dass der Kapazitätsverlust so gering wie möglich gehalten wird.
  • Daher sind unterschiedliche Ausführungsformen, die an dieser Stelle beschrieben werden, in der Lage, wunschgemäß Schemen des angepassten Packens und Schemen des adaptiven Packens umzusetzen, um ein effektives Packen von komprimierten logischen Seiten in ein oder mehrere Codewörter in einer Vielfalt von unterschiedlichen Umständen zu erreichen. Darüber hinaus kann jeder der hier beschriebenen Ansätze unter Verwendung von dynamischem Programmieren umgesetzt werden. Daraus folgt, dass bei Speicherumgebungen, die komprimierte logische Seiten mit unterschiedlichen Längenwerten enthalten, einige der verschiedenen Ansätze umgesetzt werden können, die hier beschrieben wurden, um die komprimierten logischen Seiten in ECC-Container in gewünschter Weise zu packen, wodurch eine effektive Nutzung von ECC-Containern insbesondere im Vergleich zu herkömmlichen Ansätzen sichergestellt wird.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt handeln. Das Computerprogrammprodukt kann ein oder mehrere computerlesbare Speichermedien enthalten, auf denen sich computerlesbare Programmbefehle befinden, um zu bewirken, dass ein Prozessor Aspekte der vorliegenden Erfindung ausführt.
  • Bei dem computerlesbaren Speichermedium kann es sich um eine materielle Einheit handeln, die Befehle zum Verwenden durch eine Befehlsausführungseinheit halten und speichern kann. Bei dem computerlesbaren Speichermedium kann es sich beispielsweise um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiter-Speichereinheit oder jede geeignete Kombination der Vorhergehenden handeln, ist jedoch nicht darauf beschränkt. Eine nicht erschöpfende Liste von spezielleren Beispielen des computerlesbaren Speichermediums enthält Folgendes: eine tragbare Computerdiskette, eine Festplatte, einen Direktzugriffsspeicher (RAM), einen Festwertspeicher (ROM), einen löschbaren programmierbaren Festwertspeicher (EPROM oder Flash-Speicher), einen statischen Direktzugriffsspeicher (SRAM), einen tragbaren Compactdisk-Festwertspeicher (CD-ROM), eine digitale Versatile-Disk (DVD), einen Speicherstick, eine Diskette (Floppy Disk), eine mechanisch codierte Einheit wie beispielsweise Lochkarten oder erhabene Strukturen in einer Nut, in denen Befehle aufgezeichnet sind, oder jede geeignete Kombination des Vorhergehenden. Ein hier verwendetes computerlesbares Speichermedium sollte nicht so ausgelegt werden, dass es sich dabei per se um vergängliche Signale handelt wie beispielsweise Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Hohlleiter oder andere Übertragungsmedien ausbreiten (z.B. Lichtimpulse, die ein Lichtwellenleiterkabel durchlaufen) oder elektrische Signale, die durch eine Leitung übertragen werden.
  • Computerlesbare Programmbefehle, die hier beschrieben werden, können von einem computerlesbaren Speichermedium zu betreffenden Datenverarbeitungs/Verarbeitungs-Einheiten oder über ein Netzwerk, z.B. das Internet, ein Lokalbereichsnetz, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk zu einem externen Computer oder einer externen Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupfer-Übertragungskabel, Lichtwellenleiter, drahtlose Übertragungen, Router, Firewalls, Switches, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerk-Adapterkarte oder eine Netzwerk-Schnittstelle in jeder Datenverarbeitungs/Verarbeitungs-Einheit empfängt computerlesbare Programmbefehle von dem Netzwerk und leitet die computerlesbaren Programmbefehle zum Speichern in einem computerlesbaren Speichermedium in der betreffenden Datenverarbeitungs/Verarbeitungs-Einheit weiter.
  • Bei computerlesbaren Programmbefehlen zum Ausführen von Operationen der vorliegenden Erfindung kann es sich um Assembler-Befehle, Befehle mit Befehlssatz-Architektur (ISA), Maschinenbefehle, maschinenabhängige Befehle, Mikrocode, Firmware-Befehle, Zustandseinstellungsdaten oder Quellencode bzw. Objektcode handeln, die in jeder Kombination aus einer oder mehreren Programmiersprachen geschrieben sind, darunter eine objektorientierte Programmiersprache wie Smalltalk, C++ oder dergleichen und herkömmliche prozedurale Programmiersprachen wie etwa die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die computerlesbaren Programmbefehle können nur auf dem Computer eines Benutzers, teilweise auf dem Computer eines Benutzers, als ein eigenständiges Software-Paket, teilweise auf dem Computer eines Benutzers und teilweise auf einem fernen Computer oder nur auf dem fernen Computer oder Server ausgeführt werden. In dem zuletzt genannten Szenario kann der ferne Computer mit dem Computer des Benutzers durch jeden Netzwerktyp verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann zu einem externen Computer (z.B. über das Internet unter Verwendung eines Internet-Dienstanbieters) hergestellt werden. Bei einigen Ausführungsformen können elektronische Schaltungsanordnungen, darunter beispielsweise eine programmierbare logische Schaltungsanordnung, vor Ort programmierbare Gate-Arrays (FPGA) oder programmierbare Logik-Arrays (PLA) die computerlesbaren Programmbefehle ausführen, indem Zustandsinformationen der computerlesbaren Programmbefehle genutzt werden, um die elektronische Schaltungsanordnung zu personalisieren, um Aspekte der vorliegenden Erfindung auszuführen.
  • Aspekte der vorliegenden Erfindung werden hier unter Bezugnahme auf Ablaufplan-Darstellungen und/oder Blockschaltbilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es ist klar, dass jeder Block der Ablaufplan-Darstellungen und/oder Blockschaltbilder und Kombinationen von Blöcken in den Ablaufplan-Darstellungen und/oder Blockschaltbildern durch computerlesbare Programmbefehle umgesetzt werden können.
  • Diese computerlesbaren Programmbefehle können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu bilden, so dass Befehle, die über den Prozessor des Computers oder der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführt werden, Mittel zum Umsetzen der Funktionen/Wirkungen, die in dem Block oder den Blöcken des Ablaufplans und/oder Blockschaltbilds spezifiziert sind, erzeugen. Diese computerlesbaren Programmbefehle können außerdem in einem computerlesbaren Speichermedium gespeichert sein, das einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten anweisen kann, in einer bestimmten Weise zu funktionieren, so dass das computerlesbare Speichermedium mit darin gespeicherten Befehlen einen Herstellungsgegenstand aufweist, der Befehle enthält, die Aspekte der Funktion/Wirkung umsetzen, die in dem Block oder den Blöcken des Ablaufplans und/oder Blockschaltbilds spezifiziert sind.
  • Die computerlesbaren Programmbefehle können außerdem in einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um eine Reihe von Funktionsschritten zu bewirken, die auf dem Computer, der anderen programmierbaren Datenverarbeitungsvorrichtung oder der anderen Einheit ausgeführt werden sollen, um einen durch einen Computer umgesetzten Prozess zu erzeugen, so dass die Befehle, die auf dem Computer, der anderen programmierbaren Vorrichtung oder der anderen Einheit ausgeführt werden, die Funktionen/Wirkungen, die in dem Block oder Blöcken des Ablaufplans und/oder Blockschaltbilds spezifiziert sind, umsetzen.
  • Der Ablaufplan und die Blockdarstellungen in den Figuren veranschaulichen die Architektur, Funktionalität und Operation von möglichen Umsetzungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedener Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in dem Ablaufplan oder in Blockdarstellungen ein Modul, Segment oder Abschnitt von Befehlen repräsentieren, der einen oder mehrere ausführbare Befehle zum Umsetzen der spezifizierten logischen Funktion(en) aufweist. Bei einigen alternativen Umsetzungen können die in dem Block angegebenen Funktionen möglicherweise nicht in der in den Figuren angegebenen Reihenfolge auftreten. Zum Beispiel können zwei Blöcke, die nacheinander gezeigt sind, tatsächlich im Wesentlichen gleichzeitig ausgeführt werden oder die Blöcke können gelegentlich in Abhängigkeit von der beteiligten Funktionalität in der umgekehrten Reihenfolge ausgeführt werden. Es wird außerdem angemerkt, dass jeder Block in den Blockdarstellungen und/oder Ablaufplan-Darstellungen und Kombinationen von Blöcken in den Blockdarstellungen und/oder der Ablaufplan-Darstellung durch Systeme, die auf spezieller Hardware beruhen, die die spezifizierten Funktionen oder Wirkungen ausführen, oder Kombinationen aus spezieller Hardware und Computerbefehlen umgesetzt werden können.
  • Darüber hinaus kann ein System gemäß verschiedenen Ausführungsformen einen Prozessor und eine Logikschaltung enthalten, die in dem Prozessor integriert und/oder durch diesen ausführbar ist, wobei die Logikschaltung so eingerichtet ist, dass sie einen oder mehrere der hier aufgeführten Prozessschritte ausführt. Mit integriert ist gemeint, dass der Prozessor eine darin eingebettete Logikschaltung als Hardware-Logikschaltung hat, wie beispielsweise eine anwendungsspezifische integrierte Schaltung (ASIC), ein vor Ort programmierbares Gate-Array (FPGA) usw. Mit ausführbar durch den Prozessor ist gemeint, dass es sich bei der Logikschaltung um eine Hardware-Logikschaltung; eine Software-Logikschaltung wie beispielsweise Firmware, einen Teil eines Betriebssystems, einen Teil eines Anwendungsprogramms; usw. oder eine bestimmte Kombination aus Hardware- und Software-Logikschaltung handelt, auf die durch den Prozessor zugegriffen werden kann und die so eingerichtet ist, dass sie bewirkt, dass der Prozessor eine bestimmte Funktionalität beim Ausführen durch den Prozessor ausführt. Die Software-Logikschaltung kann in einem lokalen und/oder fernen Speicher jedes Speichertyps gespeichert werden, der in der Technik bekannt ist. Jeder in der Technik bekannte Prozessor kann verwendet werden wie beispielsweise ein Software-Prozessormodul und/oder ein Hardware-Prozessor wie z.B. eine ASIC, ein FPGA, eine Zentraleinheit (CPU), ein integrierter Schaltkreis (IC), eine Grafik-Verarbeitungseinheit (GPU) usw.
  • Es ist klar, dass die verschiedenen Merkmale der vorhergehenden Systeme und/oder Verfahrensweisen auf beliebige Weise verknüpft werden können, wodurch eine Vielzahl von Kombinationen aus den oben dargestellten Beschreibungen erzeugt werden.
  • 12 veranschaulicht eine Netzwerk-Architektur 1200 gemäß einer Ausführungsform. Wie in 12 gezeigt werden eine Mehrzahl von fernen Netzwerken 1202 bereitgestellt, darunter ein erstes fernes Netzwerk 1204 und ein zweites fernes Netzwerk 1206. Ein Gateway 1201 kann zwischen die fernen Netzwerke 1202 und ein nahes Netzwerk 1208 geschaltet sein. Im Kontext der vorliegenden Netzwerk-Architektur 1200 können die Netzwerke 1204, 1206 jede beliebige Form annehmen, darunter ein LAN, ein WAN wie beispielsweise das Internet, ein öffentliches Fernsprechvermittlungsnetz (PSTN), ein internes Telefonnetz usw., sie sind jedoch nicht auf diese beschränkt.
  • Im Gebrauch dient das Gateway 1201 als Eintrittspunkt von den fernen Netzwerken 1202 in das nahe Netzwerk 1208. Daher kann das Gateway 1201 als Router, der in der Lage ist, ein vorhandenes Datenpaket zu lenken, das an dem Gateway 1201 eintrifft, und als Switch funktionieren, der den tatsächlichen Weg in das Gateway 1201 und aus diesem heraus für ein vorhandenes Paket einrichtet.
  • Des Weiteren ist wenigstens ein Datenserver 1214 enthalten, der mit dem nahen Netzwerk 1208 verbunden ist und auf den von den fernen Netzwerken 1202 über das Gateway 1201 zugegriffen werden kann. Es sollte beachtet werden, dass der bzw. die Datenserver 1214 jeden Typ von Datenverarbeitungseinheit/Groupware enthalten können. Mit jedem Datenserver 1214 ist eine Mehrzahl von Benutzereinheiten 1216 verbunden. Zu diesen Benutzereinheiten 1216 können ein Desktop-Computer, ein Laptop-Computer, ein handgehaltener Computer, ein Drucker und/oder jeder andere Typ von Einheit gehören, die eine Logikschaltung enthält. Es sollte beachtet werden, dass eine Benutzereinheit 1211 außerdem bei einigen Ausführungsformen mit jedem der Netzwerke direkt verbunden sein kann.
  • Eine periphere Einheit 1220 oder Reihen von peripheren Einheiten 1220 z.B. Faxmaschinen, Drucker, Scanner, Festplattenlaufwerke, vernetzte und/oder lokale Datenspeichereinheiten oder Systeme usw. können mit einem oder mehreren der Netzwerke 1204, 1206, 1208 verbunden sein. Es sollte beachtet werden, dass Datenbanken und/oder zusätzliche Komponenten mit jedem Typ von Netzwerkelement, der mit jedem Typ von Netzwerkelement, das mit den Netzwerken 1204, 1206, 1208 verbunden ist, genutzt werden oder in dieses integriert sein kann. Im Kontext der vorliegenden Beschreibung kann ein Netzwerkelement jede Komponente eines Netzwerks bezeichnen.
  • Gemäß einigen Ausführungsformen können Verfahren und Systeme, die hier beschrieben werden, mit und/oder in virtuellen Systemen und/oder Systemen, die ein oder mehrere andere Systeme emulieren, umgesetzt werden, wie beispielsweise ein UNIX-System, das virtuell eine Umgebung MICROSOFT WINDOWS beherbergt, usw. Diese Virtualisierung und/oder Emulation kann bei einigen Ausführungsformen durch die Verwendung von Software VMWARE verbessert werden.
  • Bei anderen Ausführungsformen können ein oder mehrere Netzwerke 1204, 1206, 1208 ein Cluster von Systemen repräsentieren, das gewöhnlich als eine „Cloud“ bezeichnet wird. Bei Cloud-Datenverarbeitung werden gemeinsam genutzte Ressourcen wie beispielsweise Verarbeitungsleistung, periphere Einheiten, Software, Datenserver usw. jedem System in der Cloud auf Anforderung bereitgestellt, wodurch der Zugriff auf und die Verteilung von Diensten über viele Datenverarbeitungssysteme hinweg möglich wird. Cloud-Datenverarbeitung beinhaltet üblicherweise eine Internet-Verbindung zwischen den Systemen, die in der Cloud betrieben werden, es können jedoch außerdem andere Techniken zum Verbinden der Systeme verwendet werden, die in der Technik bekannt sind.
  • 13 zeigt eine repräsentative Hardware-Umgebung, die einer Benutzereinheit 1216 und/oder einem Benutzerserver 1214 von 12 gemäß einer Ausführungsform zugehörig sind. 13 veranschaulicht eine übliche Hardware-Konfiguration eines Prozessorsystems 1300 mit einer Zentraleinheit 1310 wie beispielsweise ein Mikroprozessor und mehreren anderen Einheiten, die gemäß einer Ausführungsform untereinander über ein Bussystem 1312 verbunden sind. Bei einigen Ausführungsformen kann die Zentraleinheit 1310 jeden der Ansätze enthalten, die oben unter Bezugnahme auf den einen oder die mehreren Prozessoren 210 von 2 beschrieben wurden.
  • Das in 13 gezeigte Prozessorsystem 1300 enthält einen Direktzugriffsspeicher (RAM) 1314, einen Festwertspeicher (ROM) 1316 und einen E/A-Adapter 1318. Gemäß einigen Ausführungsformen, die die Erfindung keinesfalls beschränken sollen, kann der E/A-Adapter 1318 jeden der Ansätze enthalten, die oben unter Bezugnahme auf den E/A-Adapter 218 von 2 beschrieben wurden. In dem Prozessorsystem 1300 von 13 können die zuvor erwähnten Komponenten 1314, 1316, 1318 zum Verbinden von peripheren Einheiten wie beispielsweise ein Speicher-Teilsystem 1320 mit dem Bus 1312 verwendet werden. Bei einigen Ausführungsformen kann das Speicher-Teilsystem 1320 eine ähnliche und/oder dieselbe Konfiguration wie das Daten-Speichersystem 220 von 2 enthalten. Gemäß einem Beispiel, das die Erfindung keinesfalls beschränken soll, kann das Speicher-Teilsystem 1320 zusätzlich zu RAID-Steuereinheiten, die in 2 veranschaulicht sind, nichtflüchtige Daten-Speicherkarten enthalten, z.B. mit NVRAM-Speicherkarten, RAM, ROM und/oder einige andere bekannte Typen nichtflüchtiger Speicher.
  • In 13 gibt es einen Benutzerschnittstellenadapter 1322 zum Verbinden einer Tastatur 1324, einer Maus 1326, eines Lautsprechers 1328, eines Mikrofons 1332 und/oder anderer Benutzerschnittstelleneinheiten wie beispielsweise einen berührungsempfindlichen Bildschirm, eine digitale Kamera (nicht gezeigt) usw. mit dem Bus 1312.
  • Das Prozessorsystem 1300 enthält des Weiteren einen Datenverarbeitungsadapter 1334, der das Prozessorsystem 1300 mit einem Datenübertragungsnetzwerk 1335 (z.B. ein Datenverarbeitungsnetzwerk) verbindet, und einen Anzeigeadapter 1336, der den Bus 1312 mit einer Anzeigeeinheit 1338 verbindet.
  • Das Prozessorsystem 1300 kann ein residentes Betriebssystem haben, wie etwa das Betriebssystem (BS) MICROSOFT WINDOWS, ein BS MAC, ein BS UNIX usw. Es ist klar, dass eine bevorzugte Ausführungsform außerdem auf anderen als den erwähnten Plattformen und Betriebssystemen umgesetzt werden. Eine bevorzugte Ausführungsform kann unter Verwendung von JAVA, XML, C und/oder der Sprache C++ oder anderen Programmiersprachen zusammen mit einer objektorientierten Verfahrensweise geschrieben werden. Objektorientiertes Programmieren (OOP), das in stärkerem Maße zum Entwickeln komplexer Anwendungen verwendet wird, kann verwendet werden.
  • Darüber hinaus veranschaulicht 14 ein Speichersystem 1400, bei dem gemäß einer Ausführungsform höhere Speicherebenen (z.B. SSD) in Kombination mit niedrigeren Speicherebenen (z.B. Magnetband) implementiert sind. Es ist zu beachten, dass einige der der in 14 gezeigten Elemente gemäß verschiedenen Ausführungsformen als Hardware und/oder Software implementiert sein können. Das Speichersystem 1400 kann einen Speichersystem-Manager 1412 zum Austauschen von Daten mit einer Mehrzahl von Medien auf wenigstens einer höheren Speicherebene 1402 und wenigstens einer niedrigeren Speicherebene 1406 enthalten. Bei einigen Ansätzen kann jedoch ein Speichersystem-Manager 1412 mit einer Mehrzahl von Medien auf wenigstens einer höheren Speicherebene 1402, jedoch keiner niedrigeren Speicherebene Daten austauschen. Die höheren Speicherebene(n) 1402 können vorzugsweise ein oder mehrere Medien 1404 für wahlfreien Zugriff und/oder Direktzugriff enthalten wie beispielsweise Festplatten, nichtflüchtige Speicher (NVM, NVRAM), Halbleiterspeicher in SSDs, Flash-Speicher, Flash-Speicherarrays usw. und/oder andere, die hier angeführt oder in der Technik bekannt sind. Gemäß veranschaulichenden Beispielen zeigen die 3 bis 4 beispielhafte Architekturen von SSD-Systemen, die je nach gewünschter Ausführungsform als höhere Speicherebene 1402 verwendet werden können.
  • In 14 enthalten die niedrigeren Speicherebene(n) 1406 vorzugsweise ein oder mehrere Speichermedien 1408 mit geringerer Leistung, darunter Medien mit sequenziellem Zugriff wie beispielsweise Magnetband in Bandlaufwerken und/oder optische Medien, HDDs mit langsamerem Zugriff, SSDs mit langsamerem Zugriff usw. und/oder andere, die hier angeführt oder in der Technik bekannt sind. Eine oder mehrere zusätzliche Speicherebenen 1416 können entsprechend den Wünschen eines Entwicklers des Systems 1400 jede Kombination von Speichermedien enthalten. Daher können eine oder mehrere zusätzliche Speicherebenen 1416 bei einigen Ansätzen eine SSD-Systemarchitektur enthalten, die den in den 1 bis 2 veranschaulichten Systemarchitekturen ähnlich ist oder dieselbe wie jene ist. Außerdem kann jede der höheren Speicherebenen 1402 und/oder niedrigeren Speicherebenen 1406 jede Kombination von Speichereinheiten und/oder Speichermedien enthalten.
  • Der Speichersystem-Manager 1412 kann mit den Speichermedien 1404, 1408 auf der bzw. den höheren Speicherebene(n) 1402 und niedrigere(n) Speicherebene(n) 1406 über ein Netzwerk 1410 Daten austauschen wie beispielsweise ein Speicherbereich-Netzwerk (SAN) wie in 14 gezeigt oder ein anderer geeignete Netzwerktyp. Der Speichersystem-Manager 1412 kann außerdem mit einem oder mehreren Host-Systemen (nicht gezeigt) über eine Host-Schnittstelle 1414 Daten austauschen, die möglicherweise Teil des Speichersystem-Managers 1412 sind. Der Speichersystem-Manager 1412 und/oder jede andere Komponente des Speichersystems 1400 können in Hardware und/oder Software umgesetzt sein und können einen Prozessor (nicht gezeigt) zum Ausführen von Befehlen eines in der Technik bekannten Typs nutzen, wie beispielsweise eine Zentraleinheit (CPU), ein vor Ort programmierbares Gate-Array (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC) usw. Natürlich kann jede Anordnung eines Speichersystems verwendet werden, was einem Fachmann beim Lesen der vorliegenden Beschreibung klar ist.
  • Bei weiteren Ausführungsformen kann das Speichersystem 1400 jede Anzahl von Daten-Speicherebenen enthalten und kann in jeder Speicherebene dieselben oder unterschiedliche Speichermedien enthalten. Jede Daten-Speicherebene kann z.B. denselben Typ von Speichermedien enthalten wie etwa HHDs, SSDs, Medien für sequenziellen Zugriff (Band in Bandlaufwerken, optische Platte in optischen Plattenlaufwerken usw.), Direktzugriffsmedien (CD-ROM, DVD-RAM usw.) oder jede Kombination von Medienspeichertypen. Bei einer derartigen Konfiguration kann eine höhere Speicherebene 1402 eine Mehrzahl von SSD-Speichermedien zum Speichern von Daten in einer Speicherumgebung mit höherer Leistung und die restlichen Speicherebenen, darunter eine niedrigere Speicherebene 1406 und zusätzliche Speicherebenen 1416 können jede Kombination von SSDs, HDDs, Bandlaufwerke usw. zum Speicher von Daten in einer Speicherumgebung mit niedrigerer Leistung enthalten. Auf diese Weise können Daten, auf die häufiger zugegriffen wird, Daten mit einer höheren Priorität, Daten, auf die schneller zugegriffen werden muss, usw. in der höheren Speicherebene 1402 gespeichert werden, während Daten, die keines dieser Attribute haben, in der zusätzlichen Speicherebene 1416 gespeichert werden, darunter die niedrigere Speicherebene 1406. Ein Fachmann wird beim Lesen der vorliegenden Beschreibungen natürlich viele weitere Kombinationen von Typen der Speichermedien ersinnen, die in verschiedene Speicherschemen gemäß den hier präsentierten Ausführungsformen umgesetzt werden können.
  • Gemäß einigen Ausführungsformen kann das Speichersystem (beispielsweise 1400) eine Logikschaltung enthalten, die eingerichtet ist zum Empfangen einer Anforderung zum Öffnen einer Datenmenge, eine Logikschaltung, die eingerichtet ist zum Ermitteln, ob die angeforderte Datenmenge in einer niedrigeren Speicherebene 1406 eines mehrstufigen Daten-Speichersystems 1400 in mehreren zugehörigen Abschnitten gespeichert ist, eine Logikschaltung, die eingerichtet ist zum Verschieben jedes zugehörigen Abschnitts der angeforderten Datenmenge zu einer höheren Speicherebene 1402 des mehrstufigen Daten-Speichersystems 1400, und eine Logikschaltung, die eingerichtet ist zum Assemblieren der angeforderten Datenmenge auf der höheren Speicherebene 1402 des mehrstufigen Daten-Speichersystems 1400 aus den zugehörigen Abschnitten.
  • Diese Logikschaltung kann natürlich gemäß verschiedenen Ausführungsformen in jeder Einheit oder in jedem System als ein Verfahren oder als ein Computerprogrammprodukt umgesetzt sein.

Claims (25)

  1. Verfahren (500), das aufweist: Auswählen (502) einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container (554) auf den größtmöglichen Wert zu bringen; Verarbeiten (504) der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten; und Schreiben (506) der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  2. Verfahren (500) nach Anspruch 1, wobei während des Auswählens alle komprimierten logischen Seiten in dem Puffer (552) berücksichtigt werden.
  3. Verfahren nach Anspruch 1, wobei das Auswählen (502)ein gleichzeitiges Auswählen von mehreren Kombinationen von komprimierten logischen Seiten von Daten aufweist, um den Umfang von genutztem Raum in mehreren Fehlerkorrekturcode-Containern (554) auf den größtmöglichen Wert zu bringen.
  4. Verfahren (500) nach Anspruch 1, wobei die Kombination von komprimierten logischen Seiten lediglich einen Abschnitt des Fehlerkorrekturcode-Containers (554) füllt.
  5. Verfahren (500) nach Anspruch 1, das aufweist: Ermitteln, ob ein Abschnitt einer zusätzlichen komprimierten logischen Seite dem Fehlerkorrekturcode-Container (554) auf der Grundlage des Umfangs von genutztem Raum in einem Fehlerkorrekturcode-Container hinzugefügt werden soll; Hinzufügen des Abschnitts der zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container (554) in Reaktion auf das Ermitteln; und Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  6. Verfahren (500) nach Anspruch 1, das aufweist: Ermitteln(802), ob ein Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über einem Schwellenwert liegt; Hinzufügen (804) eines ersten Abschnitts einer zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container in Reaktion auf ein Feststellen, dass der Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über dem Schwellenwert liegt; und Hinzufügen (806) eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  7. Verfahren (500) nach Anspruch 6, wobei in den zweiten Fehlerkorrekturcode-Container zuvor komprimierte logische Seiten geschrieben wurden.
  8. Verfahren (500) nach Anspruch 1, das aufweist: Ermitteln, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer (552) nicht wesentlich komprimiert sind; Auswählen von einer der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist; Hinzufügen eines ersten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu dem Fehlerkorrekturcode-Container (554); und Hinzufügen eines zweiten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu einem zweiten Fehlerkorrekturcode-Container (554) .
  9. Computerprogrammprodukt, das ein computerlesbares Speichermedium mit Programmbefehlen aufweist, die darin verkörpert sind, wobei die Programmbefehle durch eine Steuereinheit lesbar und/oder ausführbar sind, um die Steuereinheit zu veranlassen zum: Auswählen (502)einer Kombination von komprimierten logischen Seiten von Daten aus einem Puffer (552) durch die Steuereinheit, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container (554) auf den größtmöglichen Wert zu bringen; Verarbeiten (504) der Kombination von komprimierten logischen Seiten durch die Steuereinheit zum Erzeugen von Fehlerkorrekturcode-Daten; und Schreiben (506) der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher durch die Steuereinheit.
  10. Computerprogrammprodukt nach Anspruch 9, wobei während des Auswählens (502) alle komprimierten logischen Seiten in dem Puffer (552) berücksichtigt werden.
  11. Computerprogrammprodukt nach Anspruch 9, wobei das Auswählen ein gleichzeitiges Auswählen mehrerer Kombination von komprimierten logischen Seiten von Daten aufweist, um den Umfang von genutztem Raum in mehreren Fehlerkorrekturcode-Containern auf den größtmöglichen Wert zu bringen.
  12. Computerprogrammprodukt nach Anspruch 9, wobei die Kombination von komprimierten logischen Seiten lediglich einen Abschnitt des Fehlerkorrekturcode-Containers füllt.
  13. Computerprogrammprodukt nach Anspruch 9, wobei die Programmbefehle durch eine Steuereinheit lesbar und/oder ausführbar sind, um die Steuereinheit zu veranlassen zum: Ermitteln, ob ein Abschnitt einer zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container auf der Grundlage des Umfangs von genutztem Raum in einem Fehlerkorrekturcode-Container hinzugefügt werden soll; Hinzufügen des Abschnitts der zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container in Reaktion auf das Ermitteln; und Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  14. Computerprogrammprodukt nach Anspruch 9, wobei die Programmbefehle durch eine Steuereinheit lesbar und/oder ausführbar sind, um die Steuereinheit zu veranlassen zum: Ermitteln, ob ein Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über einem Schwellenwert liegt; Hinzufügen eines ersten Abschnitts einer zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container in Reaktion auf eine Feststellung, dass der Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über dem Schwellenwert liegt; und Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  15. Computerprogrammprodukt nach Anspruch 9, wobei die Programmbefehle durch eine Steuereinheit lesbar und/oder ausführbar sind, um die Steuereinheit zu veranlassen zum: Ermitteln, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer nicht wesentlich komprimiert sind; Auswählen von einer der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist; Hinzufügen eines ersten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu dem Fehlerkorrekturcode-Container; und Hinzufügen eines zweiten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu einem zweiten Fehlerkorrekturcode-Container.
  16. System, das aufweist: einen nichtflüchtigen Direktzugriffsspeicher (NVRAM), der zum Speichern von Daten eingerichtet ist, einen Prozessor und eine Logikschaltung, die in dem Prozessor integriert und/oder durch diesen ausführbar ist, wobei die Logikschaltung eingerichtet ist zum: Auswählen einer Kombination von komprimierten logischen Seiten aus einem Puffer, um einen Umfang von genutztem Raum in einem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen; Verarbeiten der Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten; und Schreiben der Daten, die der Kombination von komprimierten logischen Seiten entsprechen, und der zugehörigen Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  17. System nach Anspruch 16, wobei während des Auswählens alle komprimierten logischen Seiten in dem Puffer berücksichtigt werden.
  18. System nach Anspruch 16, wobei das Auswählen ein gleichzeitiges Auswählen mehrerer Kombination von komprimierten logischen Seiten von Daten aufweist, um den Umfang von genutztem Raum in mehreren Fehlerkorrekturcode-Containern auf den größtmöglichen Wert zu bringen.
  19. System nach Anspruch 16, wobei die Kombination von komprimierten logischen Seiten lediglich einen Abschnitt des Fehlerkorrekturcode-Containers füllt.
  20. System nach Anspruch 16, wobei die Logikschaltung eingerichtet ist zum: Ermitteln, ob ein Abschnitt einer zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container auf der Grundlage des Umfangs von genutztem Raum in einem Fehlerkorrekturcode-Container hinzugefügt werden soll; Hinzufügen des Abschnitts der zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container in Reaktion auf das Ermitteln; und Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  21. System nach Anspruch 16, wobei die Logikschaltung eingerichtet ist zum: Ermitteln, ob ein Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über einem Schwellenwert liegt; Hinzufügen eines ersten Abschnitts einer zusätzlichen komprimierten logischen Seite zu dem Fehlerkorrekturcode-Container in Reaktion auf ein Feststellen, dass der Umfang von ungenutztem Raum in dem Fehlerkorrekturcode-Container, nachdem diesem die Kombination von komprimierten logischen Seiten hinzugefügt wurde, über dem Schwellenwert liegt; und Hinzufügen eines zweiten Abschnitts der zusätzlichen komprimierten logischen Seite zu einem zweiten Fehlerkorrekturcode-Container.
  22. System nach Anspruch 21, wobei in den zweiten Fehlerkorrekturcode-Container zuvor komprimierte logische Seiten geschrieben wurden.
  23. System nach Anspruch 16, wobei die Logikschaltung eingerichtet ist zum: Ermitteln, dass wenigstens einige der komprimierten logischen Seiten in dem Puffer nicht wesentlich komprimiert sind; Auswählen von einer der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist; Hinzufügen eines ersten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu dem Fehlerkorrekturcode-Container; und Hinzufügen eines zweiten Abschnitts der ausgewählten einen Seite der komprimierten logischen Seiten, die nicht wesentlich komprimiert ist, zu einem zweiten Fehlerkorrekturcode-Container.
  24. Verfahren, das aufweist: Ermitteln (902), ob komprimierte logische Seiten von Daten in einem Puffer (552) wesentlich komprimiert sind; Auswählen (904) einer ersten Kombination von komprimierten logischen Seiten, die wesentlich komprimiert sind, zum Hinzufügen zu einem Fehlerkorrekturcode-Container (554), um einen Umfang von genutztem Raum in dem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen; Auswählen (906) einer zweiten Kombination von komprimierten logischen Seiten, die nicht wesentlich komprimiert sind, zum Hinzufügen zu einem Fehlerkorrekturcode-Container 554), um einen Umfang von genutztem Raum in dem Fehlerkorrekturcode-Container auf den größtmöglichen Wert zu bringen; Verarbeiten (908) der ersten Kombination und/oder der zweiten Kombination von komprimierten logischen Seiten zum Erzeugen von Fehlerkorrekturcode-Daten; und Schreiben (910) der Daten, die der ersten Kombination und/oder der zweiten Kombination von komprimierten logischen Seiten entsprechen, und zugehöriger Fehlerkorrekturcode-Daten in einen nichtflüchtigen Direktzugriffsspeicher.
  25. Verfahren nach Anspruch 24, das aufweist: Hinzufügen eines ersten Abschnitts von einer der komprimierten logischen Seiten in der zweiten Kombination zu dem Fehlerkorrekturcode-Container (554); und Hinzufügen eines zweiten Abschnitts von der einen Seite der komprimierten logischen Seiten in der zweiten Kombination zu einem zweiten Fehlerkorrekturcode-Container (554).
DE112015005742.0T 2014-12-23 2015-12-15 Lastadaptiver algorithmus zum packen von daten Active DE112015005742B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/581,954 2014-12-23
US14/581,954 US10162700B2 (en) 2014-12-23 2014-12-23 Workload-adaptive data packing algorithm
PCT/IB2015/059624 WO2016103112A1 (en) 2014-12-23 2015-12-15 Workload-adaptive data packing algorithm

Publications (2)

Publication Number Publication Date
DE112015005742T5 DE112015005742T5 (de) 2017-11-30
DE112015005742B4 true DE112015005742B4 (de) 2023-03-23

Family

ID=56129519

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112015005742.0T Active DE112015005742B4 (de) 2014-12-23 2015-12-15 Lastadaptiver algorithmus zum packen von daten

Country Status (5)

Country Link
US (1) US10162700B2 (de)
CN (1) CN107111562B (de)
DE (1) DE112015005742B4 (de)
GB (1) GB2554508B (de)
WO (1) WO2016103112A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9354994B2 (en) 2014-02-18 2016-05-31 International Business Machines Corporation Preemptive relocation of failing data
US9710199B2 (en) 2014-11-07 2017-07-18 International Business Machines Corporation Non-volatile memory data storage with low read amplification
KR102372825B1 (ko) * 2015-07-31 2022-03-14 에스케이하이닉스 주식회사 데이터 저장 장치 및 그것의 동작 방법
US9712190B2 (en) 2015-09-24 2017-07-18 International Business Machines Corporation Data packing for compression-enabled storage systems
US9870285B2 (en) 2015-11-18 2018-01-16 International Business Machines Corporation Selectively de-straddling data pages in non-volatile memory
US10430329B2 (en) * 2017-06-23 2019-10-01 Western Digital Technologies, Inc. Quality of service aware storage class memory/NAND flash hybrid solid state drive
CN108322220A (zh) * 2018-02-08 2018-07-24 华为技术有限公司 编解码方法、装置及编解码设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154159A1 (en) 2009-12-21 2011-06-23 Fujitsu Limited Cyclic redundancy check code generating circuit and cyclic redundancy check code generating method
US20130179752A1 (en) 2012-01-09 2013-07-11 Hojun Shim Storage device and nonvolatile memory device and operating method thereof
US20130246721A1 (en) 2012-02-08 2013-09-19 Kabushiki Kaisha Toshiba Controller, data storage device, and computer program product

Family Cites Families (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4958351A (en) 1986-02-03 1990-09-18 Unisys Corp. High capacity multiple-disk storage method and apparatus having unusually high fault tolerance level and high bandpass
US5386531A (en) 1991-05-15 1995-01-31 International Business Machines Corporation Computer system accelerator for multi-word cross-boundary storage access
GB9606927D0 (en) 1996-04-02 1996-06-05 Memory Corp Plc Data storage devices
JP4079506B2 (ja) 1997-08-08 2008-04-23 株式会社東芝 不揮発性半導体メモリシステムの制御方法
US6105109A (en) 1998-02-19 2000-08-15 International Business Machines Corporation System speed loading of a writable cache code array
US6128623A (en) 1998-04-15 2000-10-03 Inktomi Corporation High performance object cache
US6529040B1 (en) 2000-05-05 2003-03-04 Xilinx, Inc. FPGA lookup table with speed read decoder
CA2390096C (en) 2001-06-11 2007-12-18 Stewart N. Crozier High-performance low-memory interleaver banks for turbo-codes
US7437492B2 (en) 2003-05-14 2008-10-14 Netapp, Inc Method and system for data compression and compression estimation in a virtual tape library environment
US8447931B1 (en) 2004-08-27 2013-05-21 Oracle America, Inc. Processor with a register file that supports multiple-issue execution
US8055979B2 (en) 2006-01-20 2011-11-08 Marvell World Trade Ltd. Flash memory with coding and signal processing
US7324389B2 (en) 2006-03-24 2008-01-29 Sandisk Corporation Non-volatile memory with redundancy data buffered in remote buffer circuits
US8028148B2 (en) 2006-09-06 2011-09-27 Microsoft Corporation Safe and efficient allocation of memory
TWI375953B (en) 2008-02-21 2012-11-01 Phison Electronics Corp Data reading method for flash memory, controller and system therof
JP4498426B2 (ja) 2008-03-01 2010-07-07 株式会社東芝 メモリシステム
US8176381B2 (en) 2008-05-08 2012-05-08 Nec Laboratories America, Inc. Multidimensional turbo product codes and generalized low-density parity-check codes with component reed-solomon codes for optical transmission
US9063874B2 (en) 2008-11-10 2015-06-23 SanDisk Technologies, Inc. Apparatus, system, and method for wear management
US8370520B2 (en) 2008-11-24 2013-02-05 Juniper Networks, Inc. Adaptive network content delivery system
DE112010004863B4 (de) 2009-12-17 2019-10-10 International Business Machines Corporation Datenverwaltung in Festkörperspeichersystemen
US8533564B2 (en) * 2009-12-23 2013-09-10 Sandisk Technologies Inc. System and method of error correction of control data at a memory device
GB2492708B (en) 2010-03-30 2017-01-25 Ibm Data encoding in solid state storage devices
US8533550B2 (en) 2010-06-29 2013-09-10 Intel Corporation Method and system to improve the performance and/or reliability of a solid-state drive
TWI455144B (zh) 2010-07-22 2014-10-01 Silicon Motion Inc 使用於快閃記憶體的控制方法與控制器
JP5553309B2 (ja) 2010-08-11 2014-07-16 国立大学法人 東京大学 データ処理装置
US8537919B2 (en) 2010-09-10 2013-09-17 Trellis Phase Communications, Lp Encoding and decoding using constrained interleaving
CN101958720B (zh) 2010-09-24 2013-03-20 西安电子科技大学 缩短Turbo乘积码的编译码方法
WO2012056491A1 (en) 2010-10-26 2012-05-03 Hitachi, Ltd. Storage apparatus and data control method
EP2666091A2 (de) * 2011-01-18 2013-11-27 LSI Corporation Berechnung von informationen mit übergeordneter redundanz
CN102136296B (zh) * 2011-02-21 2013-08-21 北京理工大学 一种NAND Flash存储芯片的元数据格式识别方法
US8601210B2 (en) 2011-03-28 2013-12-03 Lsi Corporation Cache memory allocation process based on TCPIP network and/or storage area network array parameters
US8799745B2 (en) 2011-04-12 2014-08-05 Hitachi, Ltd. Storage control apparatus and error correction method
TWI459197B (zh) 2011-04-21 2014-11-01 Phison Electronics Corp 資料寫入方法、記憶體控制器與記憶體儲存裝置
US9703796B2 (en) 2011-12-06 2017-07-11 Brocade Communications Systems, Inc. Shared dictionary between devices
US8775759B2 (en) 2011-12-07 2014-07-08 Jeffrey Tofano Frequency and migration based re-parsing
KR101862341B1 (ko) 2012-01-09 2018-05-30 삼성전자주식회사 데이터 압축 기능을 갖는 데이터 저장 장치
US20130238832A1 (en) 2012-03-07 2013-09-12 Netapp, Inc. Deduplicating hybrid storage aggregate
US9251060B2 (en) 2012-03-29 2016-02-02 Intel Corporation Compression-enabled blending of data in non-volatile memory
US9152325B2 (en) 2012-07-26 2015-10-06 International Business Machines Corporation Logical and physical block addressing for efficiently storing data
KR101379883B1 (ko) 2012-11-06 2014-04-01 한국과학기술원 플래시 메모리의 소모 전력 감소 방법 및 그 장치
US20140258628A1 (en) 2013-03-11 2014-09-11 Lsi Corporation System, method and computer-readable medium for managing a cache store to achieve improved cache ramp-up across system reboots
CN103200467B (zh) 2013-03-14 2016-03-23 烽火通信科技股份有限公司 光网络设备中的网元协议报文传递装置及方法
US9170938B1 (en) * 2013-05-17 2015-10-27 Western Digital Technologies, Inc. Method and system for atomically writing scattered information in a solid state storage device
US9514057B2 (en) * 2013-12-04 2016-12-06 Sandisk Technologies Llc Storage module and method for managing logical-to-physical address mapping
US9927998B2 (en) * 2014-02-05 2018-03-27 Tidal Systems, Inc. Flash memory compression
US9785499B2 (en) 2014-02-12 2017-10-10 Seagate Technology Llc Hot-read data aggregation and code selection
CN103941116A (zh) 2014-03-12 2014-07-23 珠海创能科世摩电气科技有限公司 故障录波指示器的数据压缩方法
CN104123238A (zh) 2014-06-30 2014-10-29 海视云(北京)科技有限公司 数据存储方法及装置
US9720821B2 (en) * 2014-09-17 2017-08-01 Storart Technology Co. Ltd. Adaptive compression data storing method for non-volatile memories and system using the same
US9710199B2 (en) 2014-11-07 2017-07-18 International Business Machines Corporation Non-volatile memory data storage with low read amplification

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110154159A1 (en) 2009-12-21 2011-06-23 Fujitsu Limited Cyclic redundancy check code generating circuit and cyclic redundancy check code generating method
US20130179752A1 (en) 2012-01-09 2013-07-11 Hojun Shim Storage device and nonvolatile memory device and operating method thereof
US20130246721A1 (en) 2012-02-08 2013-09-19 Kabushiki Kaisha Toshiba Controller, data storage device, and computer program product

Also Published As

Publication number Publication date
GB2554508B (en) 2019-01-16
DE112015005742T5 (de) 2017-11-30
WO2016103112A1 (en) 2016-06-30
CN107111562A (zh) 2017-08-29
US10162700B2 (en) 2018-12-25
US20160179614A1 (en) 2016-06-23
GB201711253D0 (en) 2017-08-30
CN107111562B (zh) 2020-07-14
GB2554508A (en) 2018-04-04

Similar Documents

Publication Publication Date Title
DE112015005742B4 (de) Lastadaptiver algorithmus zum packen von daten
DE112020002526B4 (de) Blockmodusumschaltung in datenspeichersystem
DE112020000178T5 (de) Verwaltung von in zonen unterteilten namensräumen nichtflüchtiger speicherungsvorrichtungen
DE112013000900B4 (de) Bewahren von Redundanz in Datendeduplizierungssystemen unter Verwendung eines Anzeigers
DE102012214324B4 (de) Verfahren und Vorrichtung zur Erleichterung der Datenüberprüfung mithilfe einer Prüfsumme in Verbindung mit einem Sidefile
DE112013001905B4 (de) Erhöhte Inline-Deduplizierungseffizienz
DE112018004256T5 (de) Redundanzcodierstreifen basierend auf internen adressen von speichervorrichtungen
DE102020116362B3 (de) Dynamische zuweisung von unterblöcken
DE112014000251T5 (de) Echtzeitklassifizierung von Daten in Datenkomprimierungsdomänen
DE112018004251T5 (de) Adaptive vorrichtungsdienstqualität durch host-speicherpufferbereich
DE112017004577T5 (de) Mechanismus für disaggregierten speicher der datenspeicherklasse über fabric
DE102018105943A1 (de) Kontextbewusste dynamische Befehlsplanung für ein Datenspeichersystem
DE112020002792B4 (de) Verschleissorientierte blockmodusumwandlung in nichtflüchtigen speichern
DE112018000485T5 (de) Komprimierer/Dekomprimierer für nicht binäre Kontextmischung
DE112012005222T5 (de) Halbleiter-Datenspeicherverwaltung
DE112020004591T5 (de) L2P-Übersetzungstechniken in begrenzten RAM-Systemen
DE102013211071A1 (de) Mit geringem Mehraufwand verbundene Verbesserung der Zuverlässigkeit eines Journaling-Dateisystems unter Verwendung von Halbleiterspeicherung und Deduplizierung
DE112020005350T5 (de) Aktualisieren von korrigierenden lesespannung-offsetwerten in nichtflüchtigen direktzugriffsspeichern
DE102018123670A1 (de) Speicherungssystem, Rechensystem und Verfahren dafür
DE112018004252T5 (de) Redundanzcodierstreifen auf der basis eines koordinierten internen adressschemas über mehrere vorrichtungen
DE102017104073B4 (de) Verallgemeinertes Verifikationsverfahren für Schreiboperationen
DE102015008923A1 (de) Vielfache ECC-Codewortgrössen in einem SSD
DE112012002452T5 (de) Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten
DE112015003569B4 (de) Verfahren und System zum Verwenden von NAND-Seitenpuffern, um die Übertragungspuffernutzung eines Festkörperlaufwerks zu verbessern
DE112020004840B4 (de) Speicherbereinigung in datenspeichersystemen

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
R020 Patent grant now final