DE112010004863T5 - Datenverwaltung in Festkörperspeichersystemen - Google Patents

Datenverwaltung in Festkörperspeichersystemen Download PDF

Info

Publication number
DE112010004863T5
DE112010004863T5 DE112010004863T DE112010004863T DE112010004863T5 DE 112010004863 T5 DE112010004863 T5 DE 112010004863T5 DE 112010004863 T DE112010004863 T DE 112010004863T DE 112010004863 T DE112010004863 T DE 112010004863T DE 112010004863 T5 DE112010004863 T5 DE 112010004863T5
Authority
DE
Germany
Prior art keywords
data
solid state
code
state memory
codewords
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.)
Granted
Application number
DE112010004863T
Other languages
English (en)
Other versions
DE112010004863B4 (de
Inventor
Roy Cideciyan
Evangelos S. Eleftheriou
Robert Haas
Xiao-Yu Hu
Ilias Iliadis
Thomas Mittelholzer
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 DE112010004863T5 publication Critical patent/DE112010004863T5/de
Application granted granted Critical
Publication of DE112010004863B4 publication Critical patent/DE112010004863B4/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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • 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
    • 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
    • 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
    • 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/1076Parity data used in redundant arrays of independent storages, e.g. in RAID systems
    • G06F11/108Parity data distribution in semiconductor storages, e.g. in SSD

Abstract

Verfahren und Vorrichtungen zum Steuern von Datenverwaltungsoperationen wie unter anderem der Speicherung von Daten in einem Festkörperspeicher (6) eines Festkörper-Speichersystems (5) werden bereitgestellt. Eingabedaten werden in aufeinanderfolgenden Gruppen von Datenschreiborten im Festkörperspeicher (6) gespeichert. Jede Gruppe umfasst eine Menge von Schreiborten in jeder einer Vielzahl logischer Unterteilungen des Festkörperspeichers (6). Die in jeder Gruppe zu speichernden Eingabedaten werden gemäß einem ersten und einem zweiten linearen Fehlerkorrekturcode codiert. Die Codierung wird durchgeführt, indem aus den in jeder Gruppe zu speichernden Eingabedaten ein logisches Feld von Zeilen und Spalten mit Datensymbolen aufgebaut wird. Die Zeilen und Spalten werden gemäß dem ersten bzw. zweiten linearen Fehlerkorrekturcode codiert und ergeben ein codiertes Feld, in dem alle Zeilen den jeweiligen ersten Codewörtern entsprechen und in dem Spalten den jeweiligen zweiten Codewörtern entsprechen. Die Codier- und Speicheroperation wird so durchgeführt, dass in jeder der Gruppen die codierten Eingabedaten eine Vielzahl erster Codewörter in jeder einer Vielzahl der logischen Unterteilungen umfassen und jede logische Unterteilung einen Abschnitt jedes der zweiten Codewörter für diese Gruppe enthält.

Description

  • Die vorliegende Erfindung bezieht sich im Allgemeinen auf die Datenverwaltung in Festkörperspeichersystemen. Es werden Verfahren und Vorrichtungen zum Steuern von Datenspeicherprozeduren vorgestellt, insbesondere zum Speichern von fehlerkorrekturcodierten (EC) Daten, sowie andere Datenverwaltungsoperationen.
  • Ein Festkörperspeicher ist ein nichtflüchtiger Speicher, der elektronische Schaltkreise, typischerweise in integrierten Schaltkreisen (ICs), anstatt herkömmlicher magnetischer oder optischer Medien wie z. B. Platten und Bänder zur Datenspeicherung verwendet. Festkörperspeichereinrichtungen (SSDs) wie z. B. Flash-Speichereinrichtungen revolutionieren derzeit die Welt der Datenspeicher. Diese Einrichtungen sind aufgrund des Fehlens beweglicher Teile belastbarer als herkömmliche Speichereinrichtungen und bieten eine außergewöhnlich große Bandbreite, beträchtliche Einsparungen beim Energieverbrauch und eine Eingabe-/Ausgabeleistung bei wahlfreiem Zugriff, die um mehrere Größenordnungen besser ist als die von Festplattenlaufwerken (HDDs).
  • In SSDs ist der Speicher in Speicherbereichen oder ”Blöcken” organisiert, von denen jeder eine Menge von Speicherplätzen enthält, in die Daten hineingeschrieben werden können. (Nachfolgend werden verschiedene Funktionseigenschaften von SSDs beschrieben, wobei insbesondere auf NAND-basierte Flash-Speichereinrichtungen Bezug genommen wird. Es wird jedoch darauf hingewiesen, dass ähnliche Grundsätze auf andere SSD-Typen anwendbar sind). Zum Beispiel ist ein Flash-Speicher in Speicherblöcken organisiert, die Datenspeicherplätze enthalten, die als ”Seiten” bezeichnet werden. Eine typische Flash-Seite hat eine Größe von 4 kB, und ein typischer Flash-Block besteht aus 64 Flash-Seiten (was zusammen 256 kB ergibt). Lese- und Schreiboperationen können auf Seitenbasis erfolgen, während Löschoperationen nur auf Blockbasis möglich sind. Daten können erst in einen Flash-Block geschrieben werden, nachdem dieser erfolgreich gelöscht wurde. Es erfordert typischerweise eine Dauer von 15 bis 25 μs, um eine Seite aus den Flash-Zellen in einen Datenpuffer in einem Flash-Einzelschaltkreis (flash die) einzulesen. Das Schreiben einer Seite in die Flash-Zellen dauert etwa 200 μs, während das Löschen eines Flash-Blocks normalerweise etwa 2 ms dauert. Da das Löschen eines Blocks wesentlich länger dauert als das Lesen oder Schreiben einer Seite, wird ein Schreibschema namens „write-out-of-place” verwendet, um den Durchsatz und die Latenz des Schreibvorgangs zu verbessern. Bei diesem Schema wird eine gespeicherte Datenseite nicht am richtigen Platz im Flash-Speicher aktualisiert. Stattdessen wird die aktualisierte Seite in eine andere freie Flash-Seite hineingeschrieben, und die entsprechende alte Flash-Seite wird als ungültig markiert, indem in den Metadaten, die als Teil jeder Seite mitgespeichert werden, ein Gültigkeits-Flag gesetzt wird.
  • Dieses Schreibschema namens „write-out-of-place” sowie andere Flash-Speichereigenschaften erfordern bestimmte interne Operationen, damit die interne Verwaltung des Flash-Speichers stattfinden kann. Beispielsweise wird, wenn Seiten aktualisiert und alte Seiten ungültig gemacht werden, ein nachfolgender Prozess benötigt, in dem ungültige Daten entfernt und Speicherplätze für neue Eingabedaten freigegeben werden müssen. Dieser interne Verwaltungsprozess ist üblicherweise unter der Bezeichnung „Speicherbereinigung” (garbage collection) bekannt. Der Speicherbereinigungsprozess umfasst die Auswahl eines belegten Flash-Blocks und die Wiederherstellung aller noch gültigen Daten dieses Blocks. Die gültigen Datenseiten werden an einen anderen Ort im Flash-Speicher kopiert, und der Block wird daraufhin gelöscht. Typischerweise werden Blöcke abhängig davon, wie viele ungültige Seiten sie enthalten, für die Speicherbereinigung ausgewählt. Die Speicherbereinigung sowie das Löschen von Blöcken können jedoch auch als Bestandteile anderer interner Verwaltungsprozesse durchgeführt werden, die effektiv das Verschieben von Daten innerhalb des Festkörperspeichers beinhalten. Der Verschleißausgleich (wear-leveling) ist ein Beispiel für einen solchen internen Verwaltungsprozess. Dieser Prozess berücksichtigt die Verschleißeigenschaften des Flash-Speichers. Flash-Speicher hat eine endliche Anzahl an Schreib-Lösch-Zyklen, bevor sich die Speicherintegrität zu verschlechtern beginnt. Verschleißausgleichsprozeduren verfolgen das Ziel, die Schreib-Lösch-Zyklen gleichmäßig über alle verfügbaren Flash-Blöcken zu verteilen, um so einen ungleichen Verschleiß zu vermeiden, wodurch die Gesamtlebensdauer verlängert wird. Im Einzelnen bedeutet das, dass die Verschleißausgleichsfunktion die Auswahl von Blöcken, in die neue Daten hineinzuschreiben sind, entsprechend einem Zählstand der Schreib-Lösch-Zyklen steuert, und dass außerdem gespeicherte Daten innerhalb des Flash-Speichers verschoben werden, um Blöcke mit einem niedrigen Zählstand der Schreib-Lösch-Zyklen freizugeben und Verschleiß auszugleichen.
  • Die Datenanordnung im Speicher sowie die internen Verwaltungsoperationen werden typischerweise von dedizierten Steuereinrichtungen durchgeführt, die als Flash-Steuereinheiten bezeichnet werden und sich ebenfalls im Flash-Speicher befinden. Die Flash-Steuereinheit verwaltet allgemein Daten im Flash-Speicher, sie verwaltet alle internen Verwaltungsoperationen und hält Adressmetadaten im Speicher der Steuereinheit vor, um den Datenort im Flash-Speicher bestimmen zu können. Im Einzelnen führt die Flash-Steuereinheit eine Software-Zwischenstufe aus, die als „LBA-PBA-Abbildung” (logical block address – physical block address mapping) bezeichnet wird und auch als „Flash Translation Lager” (FTL) oder „LPN-FPN-Adressabbildung” (logical page number – flash page number address mapping) bekannt ist. Dabei werden Metadaten in Form eines Adressenabbilds bereitgehalten, das die logischen Adressen der eingegebenen Datenblöcke in oberen Ebenen, z. B. ein Dateisystem oder ein Host in einem Speichersystem, auf physikalische Adressen (Flash-Seitennummern) im Flash-Speicher abbildet. Diese Softwareebene verbirgt bei Flash-Speicher die mit dem vor dem Schreiben erforderlichen Löschen verbundene Komplexität und unterstützt transparente Datenschreiboperationen und -aktualisierungen, ohne dass Löschoperationen eingefügt werden müssen.
  • Die in SSDs durchgeführten internen Verwaltungsfunktionen führen zu einer sogenannten ”Schreibverstärkung”. Dies geschieht, weil Daten im Speicher verschoben werden; daher wird die gesamte Anzahl an Schreiboperationen im Vergleich zur ursprünglichen durch die SSD empfangenen Anzahl an Datenschreibanforderungen erhöht (verstärkt). Die Schreibverstärkung ist einer der wichtigsten Faktoren, der die Leistung beim wahlfreien Schreibzugriff und die Schreiblebensdauer in Festkörperspeichereinrichtungen beschränkt. Ein weiterer wichtiger Faktor ist die Fehlerkorrekturleistung. In SSDs wird eine Fehlerkorrekturcodierung (error correction coding, ECC bzw. EC-Codierung) durchgeführt, indem auf der Ebene der Schreibeinheit Redundanz hinzugefügt wird. Im engeren Sinne heißt das, dass für die Eingabedaten, die in jede Seite geschrieben werden, bzw. für jeden Sektor einer Seite ein EC-Code berechnet wird, und dieser EC-Code wird in dieser Seite bzw. in diesem Sektor zusammen mit den Eingabedaten gespeichert. Eine solche Codierung ermöglicht bei Fehlern in einzelnen Datenseiten eine Wiederherstellung. Auf diese anfängliche Codierebene kann jedoch noch eine weitere EC-Codierung aufgesetzt werden. Festkörperspeichersysteme können zum Beispiel eine zusätzliche EC-Codierung verwenden, die gegen Fehler auf der Ebene der Einrichtung schützt. Diese Codierung wird durchgeführt, indem eine Ansammlung von Einrichtungen wie ein RAID-Array (redundant array of independent devices) verwaltet wird, wie es häufig in HDD-Speichersystemen eingesetzt wird. SSD-Systeme, die einen RAIDartigen Schutz einsetzen, werden in der US-Patentanmeldung Nummer US 2008/0320214A1 und in „SSD Controllers by Start-Up Sandforce”, http://www.storagenewsletter.com/news/flash/sandforce-ssd-controllers beschrieben. In einem ersten Szenario kann ein Speichersystem mehrere SSDs verwenden, von denen jede, wie oben beschrieben, eine Steuereinheit einsetzt, die jeweils den eigenen lokalen Speicher verwaltet. Die Ansammlung von SSDs kann dann auf einer höheren Ebene wie ein RAID-Array verwaltet werden. Die grundlegenden Funktionsprinzipien eines solchen Systems werden nachfolgend in Bezug auf 1 der beigefügten Zeichnungen veranschaulicht.
  • 1 ist ein schematisches Blockschaltbild eines beispielhaften RAID-artigen SSD-basierten Speichersystems 1. In diesem System werden mehrere SSDs 2 unter der Speichersteuereinheit 3 betrieben, die die von den Hosts empfangenen Schreib-/Leseanforderungen bedient. Jede SSD 2 verwaltet, wie bereits beschrieben, Daten in ihrem internen Speicher 4. Im Allgemeinen kann der Speicher 4 aus einem oder mehreren Speicherkanälen bestehen, von denen jeder einen oder mehrere Chips oder Chips-Pakete enthält, wobei jeder Chip eine oder mehrere Festkörperspeicher-Einzelschaltkreise enthalten kann. Der Host-LBA-Bereich (logical block address) ist in der Speichersteuereinheit 3 logisch partitioniert, und ein Segment jedes logischen Blocks ist einer jeweiligen SSD 2 zugeordnet. In diesem Stadium wird Redundanz hinzugefügt, um zusätzlich eine RAID-Parität zu ermöglichen. Im Einzelnen fehlercodiert die Speichersteuereinheit 3 jeden Eingabe-Host-Datenblock (entsprechend einem gegebenen (”globalen”) Host-LBA), und die resultierende RAID-Parität wird dem Host-Datenblock hinzugefügt. Der Parität-codierte Block wird daraufhin von Steuereinheit 3 in „Einheitsdatenblöcke” partitioniert. Jeder Einheitsdatenblock wird unter einem zugewiesenen Einheits-LBA (uLBA) an eine entsprechende SSD 2 zur Speicherung geliefert. Die Abbildung globaler LBAs (gLBAs) auf uLBAs in der Menge von SSDs wird von Steuereinheit 3 in einer Abbildungstabelle gLBA-uLBA gespeichert. Jede SSD speichert ihren dazugehörigen Einheitsdatenblock und zeichnet wie gewöhnlich den physikalischen Speicherort in einer Abbildungstabelle uLBA-PBA auf. Als Ergebnis dieses Prozesses werden RAID-Codewörter über das Array aus SSDs 2 verteilt, wie dies schematisch durch den schattierten Bereich in der Figur veranschaulicht wird. Dadurch wird eine zusätzliche EC-Codierungs-Ebene bereitgestellt, die auf SSD-Ebene gegen Fehler schützt. Innerhalb jeder SSD 2 führt gemäß obiger Beschreibung eine lokale Steuereinheit die interne Verwaltung von Speicher 4 durch, aber diese Funktionalität und die resultierende Neuabbildung von uLBAs auf PBAs ist für die Speichersteuereinheit 3 in dieser Architektur transparent.
  • 1 veranschaulicht eine sogenannte „äußere RAID”-Konfiguration, bei der sich die RAID-Codewörter über mehrere SSDs und somit mehrere Steuereinheiten hinweg erstrecken. Ein „inneres RAID”-System kann ebenfalls verwendet werden, entweder zusätzlich zum oder anstelle des äußeren RAID. Das innere RAID wird innerhalb einer SSD-Steuereinheit implementiert. In der Steuereinheit ist der LBA-Speicherbereich logisch partitioniert, und ein Segment jedes logischen Blocks ist einer anderen Untereinheit des gesamten Speicherbereichs zugeordnet. Auch hier wird Redundanz hinzugefügt, um zusätzlich eine innere RAID-Parität zu ermöglichen, so dass die inneren RAID-Codewörter partitioniert und über die Menge von Untereinheiten verteilt werden. Im Einzelnen wird ein inneres RAID-Codewort in Untereinheit-Datenblöcke partitioniert, und jedem Untereinheit-Datenblock wird ein Untereinheit-LBA (suLBA) im Adressbereich einer jeweiligen Untereinheit zugeordnet. Die Abbildung von LBAs auf suLBAs wird von der Steuereinheit in einer Adressabbildung LBA-suLBA aufgezeichnet. Jeder Untereinheit-Datenblock wird daraufhin in der dazugehörigen Speicher-Untereinheit an einem physikalischen Speicherort gespeichert, der in einer Abbildungstabelle suLBA-PBA für diese Einheit aufgezeichnet wird. Dieser Prozess stellt eine EC-Codierung bereit, die gegen Fehler auf der Ebene der Untereinheit in einer SSD schützt. Wie auch in äußeren RAID-Systemen führt die Steuereinheit eine interne Verwaltung (Speicherbereinigung, Verschleißausgleich usw.) unabhängig in jeder Untereinheit des Speichers durch, so dass diese Funktionalität sowie die resultierende Neuabbildung von suLBAs auf PBAs auf einer niedrigeren logischen Ebene stattfinden als die RAID-Codierung auf der logischen Blockebene.
  • Der erste und der zweite EC-Codierprozess können ebenfalls innerhalb eines Festkörper-Speicherbereichs angewandt werden, um die Wiederherstellung nach einem Fehler zu verbessern, wobei die zweite EC-Codierung Codewörter verarbeitet, die im ersten EC-Codierprozess erzeugt wurden. Hersteller von NAND-Flash-Speichern gehen immer mehr dazu über, Mehrfachebenenzellen (multi-level cells – MLC) zu verwenden, die pro Zelle mehr als ein Bit speichern, um auf diese Weise die Kosten pro Bit zu senken und die Speicherkapazität zu erhöhen. MLC sind inhärent weniger zuverlässig als Einfachebenenzellen (single-level cells – SLC). Infolge dieser Entwicklung ist die Lebensdauer von MLC-NAND-Flash-Speichern von etwa 100000 Schreib-/Löschzyklen auf etwa 10000 Schreib-/Löschzyklen abgesunken. Unter diesen Umständen ist die Fehlerkorrekturfähigkeit der ersten EC-Codierung von Sektoren oder Seiten nicht mehr ausreichend, da die zum MLC-NAND gehörige Rohbitfehlerrate sich schneller verschlechtert als die zum SLC-NAND gehörige Rohbitfehlerrate. Eine zusätzliche Codierung ist daher erforderlich, um die Lebensdauer/Beständigkeit des MLC-NAND zu verlängern und die niedrigen Benutzer-Bitfehlerraten (BER, bit error rate) von 1e-11 bis 1e-19 bereitzustellen, die typischerweise für Anwendungen erforderlich sind. Die Internationale Patentanmeldung Nr. WO 2007/084751A2 beispielsweise beschreibt EC-Codier- und EC-Verarbeitungssysteme mit einem oder zwei EC-Codierern. Verschiedene Codes, darunter lineare Codes wie beispielsweise RS (Reed-Solomon) und BCH (Bose Chaudhuri Hocquenghem), werden im Allgemeinen erwähnt, jedoch werden im Allgemeinen keine Einzelheiten zur Anordnung von Code-Wörtern im Speicher betrachtet. Erwähnt wird die Verwendung einer RS-Codierung in einem Speicherstapel, so wie sie im oben beschriebenen inneren RAID-System verwendet wird. Eine andere Ausführungsform stellt die Verwendung einer TCM-Codierung (trellis code modulation) auf Datenreihen und einer RS-Codierung auf Datenspalten vor, wobei die resultierenden rechtwinkligen Datenblöcke als vollständige Blöcke in einen Speicherbereich geschrieben werden sollen. Diese Codierung ähnelt den in anderen Datenspeichertypen verwendeten RS-Produktcodes, insbesondere wie sie für die CD (Compact Disc), die DVD (Digital Video Disc) und Bandspeichersysteme verwendet werden. Hier sind Eingabedaten in logische Felder aus Zeilen und Spalten von Datensymbolen eingeteilt, und die Zeilen und Spalten sind gemäß einem entsprechenden ersten und zweiten RS-Code so codiert, dass jede Zeile des resultierenden codierten Feldes ein RS-Codewort und jede Spalte ebenfalls ein RS-Codewort ist. Das Hauptaugenmerk von WO 2007/084751A2 liegt jedoch auf dem Zusammenspiel zwischen dem ersten Code und einem Modulator/Demodulator des beschriebenen Verarbeitungssystems.
  • Ein Aspekt der vorliegenden Erfindung stellt ein Verfahren zum Speichern von Daten in einem Festkörperspeicher eines Festkörperspeichersystems bereit. Das Verfahren umfasst Folgendes:
    Speichern von Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreiborten im Festkörperspeicher, wobei jede Gruppe eine Menge von Schreiborten in jeder einer Vielzahl an logischen Unterteilungen des Festkörperspeichers umfasst, und
    Codieren der in jeder Gruppe zu speichernden Eingabedaten durch Aufbauen eines logischen Feldes von Zeilen und Spalten mit Datensymbolen aus diesen Eingabedaten und Codieren der Zeilen und Spalten gemäß einem ersten und einem zweiten linearen Fehlerkorrekturcode, um ein codiertes Feld zu erzeugen, in dem alle Zeilen den jeweiligen ersten Codewörtern und alle Spalten den jeweiligen zweiten Codewörtern entsprechen,
    wobei das Verfahren derart gestaltet ist, dass in jeder der Gruppen die codierten Eingabedaten eine Vielzahl erster Codewörtern in jeder einzelnen einer Vielzahl der logischen Unterteilungen umfassen und jede logische Unterteilung einen Abschnitt jedes der zweiten Codewörter für die betreffende Gruppe enthält.
  • Daher ist in Ausführungsformen der vorliegenden Erfindung der Speicherplatz in einem Festkörperspeichersystem logisch in eine Vielzahl logischer Unterteilungen partitioniert, und Eingabedaten werden in Gruppen von Schreiborten geschrieben, die über diese logischen Unterteilungen verteilt sind. Insbesondere enthält jede Gruppe eine Menge von (einem oder mehreren) Schreiborten in jeder der Vielzahl an logischen Unterteilungen. Die in jeder Gruppe zu speichernden Eingabedaten werden unter Verwendung eines ersten und eines zweiten linearen EC-Codes codiert. Aus den Eingabedaten für die Gruppe wird ein logisches Feld von Zeilen und Spalten mit Datensymbolen aufgebaut. Die Zeilen und Spalten des Feldes werden gemäß einem ersten bzw. einem zweiten Fehlerkorrekturcode codiert, wodurch ein (logisches) codiertes Feld erzeugt wird, in dem alle Zeilen jeweiligen ersten Codewörtern und alle Spalten jeweiligen zweiten Codewörtern entsprechen. Die resultierenden Codewörter werden daraufhin über eine Vielzahl an Speicherunterteilungen verteilt, wodurch sowohl in den einzelnen Unterteilungen als auch in der Gruppe an Unterteilungen als Ganzes eine bestimmte Anordnung der ersten und der zweiten Codewörter entsteht. Insbesondere ist der Codier- und Datenspeicherprozess so ausgelegt, dass in jeder Gruppe von Speicherorten eine Vielzahl an ersten Codewörtern in jeder der Vielzahl an Speicherunterteilungen gespeichert wird und jede Unterteilung einen Abschnitt von jedem der zweiten Codewörter für diese Gruppe enthält. Dadurch wird eine außergewöhnlich gute Leistung in Festkörperspeichersystemen gewährleistet, wobei gleichzeitig durch den Codierprozess, der sowohl innerhalb der Speicherunterteilungen als auch im Speicher als Ganzes stattfindet, ein besserer Schutz vor Fehlern sichergestellt ist und außerdem ein Schutz gegen Fehler in einzelnen Speicherunterteilungen im System gegeben ist. Überdies gestattet die Verwendung linearer Codes in der beschriebenen Codierarchitektur die Realisierung der Codierung auf besonders einfache und effiziente Weise und schafft gleichzeitig die Grundlage für weitere Optimierungen durch die Nutzung der „transienten” EC-Codes, die nachfolgend näher beschrieben werden. Ausführungsformen der vorliegenden Erfindung liefern auf diese Weise effiziente, zuverlässige und robuste Festkörperspeichersysteme mit einer außergewöhnlich guten Gesamtleistung.
  • Wie weiter oben beschrieben wurde, erfolgt der EC-Codierprozess für Eingabedaten in einer Gruppe durch Aufbauen eines logischen Feldes von Zeilen und Spalten mit Datensymbolen aus diesen Eingabedaten. Diese Feldstruktur ist natürlich nur eine logische Konstruktion zum Zweck der EC-Codierung und muss nicht physikalisch ausgebildet werden. Die Zeilen dieses logischen Feldes werden gemäß dem ersten EC-Code, und die Spalten werden gemäß dem zweiten EC-Code codiert. (Was in diesem Prozess als „Zeile” und was als „Spalte” gilt, ist davon abhängig, welche Feldausrichtung festgelegt wird, wobei „Zeilen” und „Spalten” in der vorliegenden Beschreibung gegeneinander austauschbar sind). Die Reihenfolge, in der der erste und der zweite Codierprozess durchgeführt werden (d. h., ob Zeilen oder Spalten zuerst codiert werden) kann je nach Ausführungsform unterschiedlich sein. Derjenige Code, der zuletzt angewandt wird, verarbeitet natürlich die vom zuerst angewandten Code erzeugten Codewörter. Wenn beispielsweise zuerst eine Zeilencodierung durchgeführt wird, dann wird die Spaltencodierung an den codierten Zeilen der Eingabedaten durchgeführt, d. h. den ersten Codewörtern. Es wird darauf hingewiesen, dass die Symbolgröße für die Zeilen- und für die Spaltencodierung nicht die gleiche sein muss, d. h., die Symbole des ersten und zweiten Codeworts können eine unterschiedliche Bitanzahl aufweisen. Im resultierenden codierten Feld (wiederum nur eine logische Konstruktion) entsprechen Zeilen und Spalten den ersten bzw. den zweiten Codewörtern. Während alle Zeilen jeweiligen ersten Codewörtern entsprechen, ist es nicht notwendigerweise so, dass alle Spalten jeweiligen zweiten Codewörtern entsprechen. Dies wird in der nachfolgenden Beschreibung näher erläutert.
  • Im Allgemeinen könnten die ersten und zweiten Codierprozesse durch systematische Codierung (wobei die Eingabedaten für den Codierprozess durch die Codierung unverändert bleiben, jedoch den uncodierten Symbolen ein Paritätscode hinzugefügt wird, um das Ausgabecodewort zu erhalten) oder durch nicht-systematische Codierung realisiert werden (wobei die Eingabedaten für den Codierprozess durch die Codierung im Ausgabecodewort eingebettet werden). Vorzugsweise wird jedoch eine systematische Codierung eingesetzt. Im Einzelnen werden die zweiten Codewörter vorzugsweise durch einen systematischen Codierprozess, bei dem für jedes zweite Codewort ein Paritätscode zu der Menge uncodierter Symbole hinzugefügt wird, erzeugt. Bevorzugte Ausführungsformen der vorliegenden Erfindung machen sich daraufhin die Linearität der ersten und zweiten EC-Codes zunutze, um nicht nur die Codierer einfach und effizient zu realisieren, sondern auch einen zusätzlichen Fehlerwiederherstellungsmechanismus bereitzustellen. Dieser Mechanismus verwendet das, was im vorliegenden Dokument als „transiente Paritätscodes” bezeichnet wird. Im Einzelnen wird für jedes zweite Codewort in aufeinanderfolgenden Phasen während der Speicherung der Menge von uncodierten Symbolen für das betreffende Codewort ein transienter Paritätscode für die Symbole erzeugt, die bislang für dieses Codewort gespeichert worden sind. Dieser transiente Paritätscode ermöglicht die Wiederherstellung nach Fehlern in partiell geschriebenen Gruppen, z. B. aufgrund eines Fehlers während des Schreibprozesses für eine Gruppe. Überdies wird der transiente Paritätscode vorteilhaft in den Festkörperspeicher kopiert, sobald die Energiezufuhr zum Speichersystem unterbrochen wird, wodurch der transiente Code bei Auftreten eines Stromausfalls beibehalten wird. Dies schützt gegen das gleichzeitige Auftreten eines Stromausfalls und eines Ausfalls eines Speicherunterbereichs.
  • Der transiente Paritätscode wird in aufeinanderfolgenden Phasen während der Speicherung der Menge uncodierter Symbole für ein zweites Codewort erzeugt, vorzugsweise bei der Speicherung jedes der aufeinanderfolgenden Symbole. Durch Nutzung der linearen Eigenschaft der EC-Codes kann die transiente Parität in jeder Phase auf einfache Weise erzeugt werden, indem für jedes neu gespeicherte Symbol ein „Paritätsvektor” berechnet und einfach der transienten Parität hinzugefügt wird, die für das zuvor gespeicherte Symbol erzeugt wurde. Der transiente Paritätscode für das letzte Symbol umfasst dann den Paritätscode für dieses Codewort. Dies lässt sich wirkungsvoll über eine einfache Rückmelderegisterschaltung realisieren, die nachfolgend noch näher beschrieben wird. Überdies verwenden besonders bevorzugte Ausführungsformen einen zyklischen Code als zweiten Fehlerkorrekturcode, der die zyklische Eigenschaft zu einem weiteren Vorteil nutzt. Dies wird nachfolgend ausführlich beschrieben. Diese Ausführungsformen bieten außergewöhnlich einfache und wirksame Realisierungen von Codierern mit transienter Paritätserzeugung.
  • Die Datenschreiborte des Festkörperspeichers können Flash-Seiten in einem Flash-Speichersystem sein. Im Allgemeinen könnten die Schreiborte jedoch beliebige Regionen im Gesamtspeicher in einem Festkörperspeichersystem sein, in die Daten hineingeschrieben werden können. Einige Verfahren, die die vorliegende Erfindung ausführen, können in einem System mit einer Vielzahl an SSDs angewandt werden, z. B. auf der Ebene der Speichersteuereinheit in 1, wobei Eingabedaten in Gruppen von Schreiborten geschrieben werden, die sich über eine Vielzahl an SSDs hinweg erstrecken. Hier z. B. könnte jede logische Unterteilung des Gesamtsystemspeichers der Speicher in einer bestimmten SSD sein. Andere Ausführungsformen sind innerhalb einer einzelnen SSD implementiert, wobei die Gruppen von Schreiborten sich über Unterteilungen des Speichers dieser Einrichtung hinweg erstrecken. Der Speicher insgesamt könnte im Allgemeinen jede gewünschte Konfiguration von Speicherelementen umfassen, d. h. von einem einzelnen Element wie z. B. einem Chip oder einem Einzelschaltkreis bis hin zu einer Vielzahl an Mengen von Elementen. Eine typische SSD weist jedoch eine Vielzahl an Speicherkanälen auf, von denen jeder eine Speicherbank bzw. eine Speicherstelle bereitstellt, die typischerweise mehrere Pakete mit einem oder mehreren Speicherchips enthält, von denen jeder mit einem oder mehreren Festkörper-Einzelschaltkreisen ausgestattet ist. Die Unterteilungen, in die der verfügbare Speicher in einer SSD logisch partitioniert ist, könnten beliebige Teilmengen des Gesamtspeicherbereichs sein. Beispielsweise könnte in einer Ausführungsform, in der die SSD eine Vielzahl an Speicherkanälen aufweist, von denen jeder eine Menge von Festkörperspeichereinheiten aufweist (wobei jede Einheit im Allgemeinen ein Paket, einen Chip, einen Einzelschaltkreis oder einen beliebigen anderen Speicherbereich umfassen kann), jede logische Unterteilung die Menge von Einheiten in einem entsprechenden Kanal umfassen. (Wenn im vorliegenden Dokument von einer Menge von Elementen die Rede ist, kann die Menge grundsätzlich ein Element oder mehrere Elemente enthalten, es sei denn, der Kontext bedingt etwas Anderes). Alternativ hierzu könnte beispielsweise jede logische Unterteilung eine jeweilige Speichereinheit umfassen.
  • In den oben beschriebenen RAID-Systemen, bei denen die EC-Codierung über mehrere Untereinheiten des Gesamtspeichers hinweg durchgeführt wird, erfolgt diese Codierung auf der Ebene der logischen Blöcke (LBA). Die interne Verwaltungsfunktion (Speicherbereinigung, Verschleißausgleich usw.), zu der das Verschieben von Daten innerhalb des Speicherbereichs und das Löschen von Blöcken von Schreiborten gehören, ist für das Codiersystem transparent. Im Einzelnen wird die interne Verwaltung unabhängig in jeder Speicheruntereinheit durchgeführt, so dass diese Funktionalität und die darauf folgende Neuabbildung von suLBAs auf PBAs auf einer niedrigeren logischen Ebene als die RAID-Codierung erfolgt. Ein alternatives System wird in unserer gleichzeitig anhängigen Europäischen Patentanmeldung beschrieben, die gleichzeitig mit dem vorliegenden Dokument unter der Antragstellerreferenznummer CH9-2009-0006 eingereicht wurde. Diese Anmeldung (deren relevanter Inhalt durch Verweis einbezogen ist) offenbart ein System, bei dem die EC-Codierung auf der Ebene der physikalischen Blöcke (PBA) durchgeführt wird und bei dem die interne Verwaltungsfunktion für den Speicherbereich als Ganzes durchgeführt werden kann. Entsprechend stellt ein zweiter Gesichtspunkt der vorliegenden Erfindung ein Verfahren zur Verwaltung von Daten in einer Festkörperspeichereinrichtung bereit, in der der Festkörperspeicher löschbare Blöcke umfasst, von denen jeder eine Vielzahl an Datenschreiborten umfasst. Das Verfahren umfasst Folgendes:
    Speichern von Eingabedaten nach einem Verfahren gemäß dem ersten Gesichtspunkt der vorliegenden Erfindung, wobei jede Gruppe Schreiborte in einer Menge löschbarer Blöcke in jeder der logischen Unterteilungen umfasst;
    Bereithalten von Metadaten, die den Ort der Eingabedaten im Festkörperspeicher angeben,
    Bereithalten einer Anzeige der an jedem Datenspeicherort gespeicherten Daten und
    vor dem Löschen eines der Blöcke: Wiederherstellen gültiger Eingabedaten aus der bzw. jeder der Gruppen, die Schreiborte in dem betreffenden Block enthält, und erneutes Speichern der wiederhergestellten Daten als neue Eingabedaten.
  • In Ausführungsformen dieses Gesichtspunkts der vorliegenden Erfindung ist der Blocklöschprozess so gestaltet, dass die Wiederherstellung gültiger Daten auf Gruppenbasis erfolgt. Wenn eine Blocklöschung erforderlich ist, beispielsweise während der Speicherbereinigung oder während anderer interner Verwaltungsfunktionen, werden vor dem Löschen des betreffenden Blocks gültige Daten aus der bzw. jeder Gruppe wiederhergestellt, die Schreiborte in dem Block enthält. Die gültigen Eingabedaten, die auf diese Weise wiederhergestellt wurden, können daraufhin als neue Eingabedaten in den neuen EC-codierten Gruppen neu gespeichert werden. Auf diese Weise bieten Ausführungsformen dieses Gesichtspunkts der vorliegenden Erfindung die Vorteile des Codier- und Speichersystems des ersten Gesichtspunkts und ermöglichen gleichzeitig die Durchführung von internen Verwaltungsfunktionen für den Speicher als Ganzes. Im Gegensatz zu den oben beschriebenen RAID-artigen Systemen, die über der LBA-auf-PBA-Abbildung implementiert werden, erfolgt die EC-Codierung auf der Ebene der physikalischen Blöcke (PBA) und nicht auf der Ebene der logischen Blöcke (LBA), und der gesamte Speicherbereich kann zu internen Verwaltungszwecken als eine Einheit verwaltet werden. Wenn die EC-Codierung auf der Ebene der physikalischen Blöcke in Abstimmung mit der wesentlichen internen Verwaltungsfunktionalität durchgeführt wird, bieten diese Ausführungsformen einen besseren und hochgradig effizienten Fehlerschutz. Im Einzelnen bietet die Synergie zwischen der EC-Codierung und den internen Verwaltungsprozessen eine bessere Fehlerkorrektur bei gleichzeitig höherer Gesamtleistung. Zum Beispiel wird ein besserer Fehlerschutz ohne die aus einer größeren Schreibverstärkung und einer niedrigeren Lebensdauer bei einer EC-Codierung auf höheren Ebenen erwachsenden Leistungseinbußen erreicht. Insgesamt gesehen bieten daher diese Ausführungsformen eine außergewöhnlich hohe Leistung in Festkörperspeichereinrichtungen.
  • Ein dritter Gesichtspunkt der vorliegenden Erfindung stellt ein Computerprogramm bereit, das ein Programmcodemittel umfasst, das dazu dient, einen Computer zum Durchführen eines Verfahrens gemäß dem ersten oder dem zweiten Gesichtspunkt der vorliegenden Erfindung zu veranlassen. Es wird darauf hingewiesen, dass der Begriff „Computer” im allgemeinsten Sinne zu verstehen ist und jede Einrichtung, jede Komponente oder jedes System umfasst, das/die eine Fähigkeit zur Datenverarbeitung zur Realisierung eines Computerprogramms aufweist. Überdies kann ein Computerprogramm, das eine Ausführung der Erfindung darstellt, ein unabhängiges Programm oder ein Element eines größeren Programms sein und kann z. B. in einem durch einen Computer lesbaren Medium wie einer Platte oder in einer elektronische Datenübertragung zum Laden von Daten in einen Computer ausgeführt sein und bereitgestellt werden. Das Programmcodemittel des Computerprogramms kann beliebige Ausdrücke in einer beliebigen Sprache, in einem beliebigen Code oder in einer beliebigen Notation eines Befehlssatzes umfassen, die dazu dienen, einen Computer zur Durchführung des fraglichen Verfahrens zu veranlassen, und zwar entweder direkt oder nach (a) Umwandlung in eine andere Sprache, einen anderen Code oder eine andere Notation und/oder (b) nach Reproduktion in einer anderen materiellen Form.
  • Ein vierter Gesichtspunkt der vorliegenden Erfindung stellt eine Vorrichtung zum Steuern einer Datenspeicherung in einem Festkörperspeicher eines Festkörperspeichersystems bereit. Die Vorrichtung umfasst Folgendes:
    Steuerlogik zum Steuern der Speicherung von Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreiborten in dem Festkörperspeicher, wobei jede Gruppe eine Menge von Schreiborten in jeder einer Vielzahl an logischen Unterteilungen des Festkörperspeichers umfasst,
    einen ersten und einen zweiten Codierer zum Codieren der in jeder Gruppe zu speichernden Eingabedaten gemäß dem ersten bzw. zweiten linearen Fehlerkorrekturcode;
    wobei die Steuerlogik so gestaltet ist, dass sie aus den in jeder Gruppe zu speichernden Eingabedaten ein logisches Feld von Zeilen und. Spalten mit Datensymbolen aufbaut, und wobei der erste und der zweite Codierer so gestaltet sind, dass sie die Zeilen bzw. Spalten so codieren, dass sich ein codiertes Feld ergibt, in dem alle Zeilen jeweiligen ersten Codewörtern entsprechen und Spalten jeweiligen zweiten Codewörtern entsprechen,
    wobei die Vorrichtung so gestaltet ist, dass in jeder Gruppe die codierten Eingabedaten eine Vielzahl erster Codewörter in jeder einer Vielzahl der logischen Unterteilungen für diese Gruppe umfassen und jede logische Unterteilung einen Abschnitt jedes der zweiten Codewörter für diese Gruppe enthält.
  • Ein fünfter Gesichtspunkt der vorliegenden Erfindung stellt eine Festkörperspeichereinrichtung bereit, die eine Vielzahl an Festkörperspeichereinheiten und eine Vorrichtung gemäß dem vierten Gesichtspunkt der vorliegenden Erfindung zum Steuern der Datenspeicherung in den Speichereinheiten umfasst.
  • Merkmale, die in diesem Dokument in Bezug auf eine Ausführungsform eines Gesichtspunkts der vorliegenden Erfindung beschrieben werden, können grundsätzlich auch in Ausführungsformen eines anderen Gesichtspunkts der vorliegenden Erfindung vorgesehen sein.
  • Es folgt eine beispielhafte Beschreibung bevorzugter Ausführungsformen der vorliegenden Erfindung, wobei auf die begleitenden Zeichnungen Bezug genommen wird.
  • 1 ist eine schematische Darstellung eines SSD-basierten Speichersystems nach Stand der Technik mit einer RAID-ähnlichen Codierung;
  • 2 ist eine schematische Darstellung einer Festkörperspeichereinrichtung, die die vorliegende Erfindung ausführt;
  • 3 veranschaulicht das Schreiben von Eingabedaten in eine Gruppe von Schreiborten, die in der Ausführungsform von 2 über Speicherunterteilungen hinweg verteilt sind;
  • 4 veranschaulicht die EC-Codierung von Eingabedaten in der SSD von 2;
  • 5 zeigt eine Anordnung von ersten und zweiten Codewörtern in Speicherunterteilungen der Einrichtung von 2;
  • 6 zeigt eine Ausführungsform einer Schaltung zur Erzeugung einer transienten Parität in einem zweiten Codierer der Einheit von 2;
  • 7a und 7b zeigen zwei verschiedene Darstellungen einer weiteren Ausführungsform einer Schaltung zur Erzeugung einer transienten Parität für einen zweiten Codierer der Einrichtung von 2;
  • 8 zeigt ein Beispiel der Konfiguration von Schreiborten in einer Gruppe von Schreiborten, die über die den Speicherunterteilungen von 2 verteilt sind;
  • 9 zeigt ein weiteres Beispiel der Konfiguration von Schreiborten in einer Gruppe;
  • 10 veranschaulicht einen internen Verwaltungsprozess, der in der SSD von 2 durchgeführt wird; und
  • 11 und 12 sind Tabellen, die die Verbesserung der Fehlerkorrekturleistung anhand zweier unterschiedlicher Codierschemata in der Einrichtung von 2 veranschaulichen.
  • 2 ist ein Blockschaltbild einer beispielhaften SSD 5, die die Erfindung ausführt, und zeigt die wesentlichen Elemente, die in die zu beschreibenden Datenverwaltungsoperationen involviert sind. Die SSD 5 weist einen Festkörperspeicher 6 und eine Steuervorrichtung auf, die im Allgemeinen mit dem Bezugszeichen 7 angegeben wird. In diesem Beispiel besteht der Speicher 6 aus N Speicherkanälen, Ch(1) bis Ch(N), von denen jeder eine Bank 8 von Speichereinheiten umfasst, hier die Flashspeicher-Einzelschaltkreise 9. Die Mengen von Flashspeicher-Einzelschaltkreisen 9 in jeder Bank 8 können im Allgemeinen in einem oder mehreren Chips oder Chippaketen bereitgestellt werden und könnten SLC-Einzelschaltkreise (single-level cell dies), MLC-Einzelschaltkreise (multi-level cell dies) oder eine Kombination daraus umfassen. Zum Beispiel kann ein Kanal oder können mehrere Kanäle MLC-Speicher bereitstellen, während der Rest SLC-Speicher bereitstellt.
  • Die Steuervorrichtung 7 von SSD 5 umfasst Steuerlogik in Form einer Flash-Steuereinheit 10, einer Schreib-/Lese-Schnittstelle 11 (R/W I/F – read/write interface) zur Bedienung von Datenlese- und Datenschreibanforderungen für die Einrichtung und eine Flash-Link-Schnittstelle 12 zum Datenaustausch mit den Flash-Speicherkanälen. Die Flash-Steuereinheit 10 steuert im Allgemeinen den Betrieb der Einrichtung 5, verwaltet das Lesen und Schreiben von Daten als Reaktion auf eingehende Anforderungen und wickelt alle internen Verwaltungsfunktionen für den Flash-Speicher 6 ab. Die Flash-Steuereinheit 10 führt außerdem die EC-Codierung/-Decodierung von Daten durch. Im Einzelnen umfasst die Steuerlogik von Steuereinheit 10 ein erstes EC-Codier/-Decodiermodul EC1, das in der Figur schematisch durch Block 13 dargestellt wird und zur Codierung/Decodierung gemäß einem ersten linearen EC-Code dient, der nachfolgend als „C1-Code” bezeichnet wird. Die Steuereinheit 10 weist außerdem ein zweites EC-Codier/-Decodiermodul EC2 auf, das in der Figur schematisch durch Block 14 dargestellt wird und zur Codierung/Decodierung gemäß einem zweiten linearen EC-Code dient, der nachfolgend als „C2-Code” bezeichnet wird. In diesem speziellen Beispiel wird die EC-Codierung als Produktcode implementiert, wobei sowohl der C1-Code als auch der C2-Code RS-Codes sind. Alternativen dazu werden nachfolgend beschrieben. Das zweite Codiermodul 14 dient auch zur Erzeugung transienter Paritätscodes, was anschließend ausführlicher beschrieben wird. Die Steuervorrichtung 7 enthält weiterhin den Speicher 15 zur Speicherung verschiedener Metadaten während des Betriebs der Flash-Steuereinheit 10, was nachfolgend näher beschrieben wird. Der Speicher 15 kann zum Beispiel einen SDRAM (synchronous dynamic random access memory) umfassen.
  • Im Allgemeinen könnte die Steuerlogik der Flash-Steuereinheit 10, unter anderem die EC-Module 13 und 14, in Hardware, Software oder einer Kombination daraus realisiert sein. Zum Beispiel könnte die Steuerlogik vollständig oder teilweise durch Software realisiert sein, die einen Prozessor der Steuervorrichtung 7 so konfiguriert, dass die beschriebenen Funktionen durchgeführt werden. Anhand der Beschreibung im vorliegenden Dokument erkennt der Fachmann geeignete Software. Im vorliegenden Beispiel werden die EC-Module 13 und 14 durch nachfolgend beschriebene festverdrahtete logische Schaltungen implementiert, die die Codier-/Decodier-Operationen unter der allgemeinen Steuerung der Flash-Steuerlogik durchführen.
  • Die Einrichtung 5 könnte direkt mit Hosts kommunizieren, um Schreib-/Leseanforderungen zu bedienen, oder sie könnte von einer Steuereinheit auf höherer Ebene verwaltet werden, die Host-Anforderungen für eine Vielzahl an Einrichtungen in einem Speichersystem bedient. Die Einrichtung 5 könnte zum Beispiel einen Bestandteil eines RAID-artigen Feldes bilden, wobei mehrere SSDs von einer Speichersteuereinheit verwaltet werden, analog zu dem in 1 dargestellten System. Die logischen Adressen der in Eingabe-Schreib-/Lese-Anforderungen spezifizierten Daten könnten sich daher auf den globalen (Host-)Adressbereich oder einen logischen Adressbereich auf niedrigerer Ebene beziehen. Diese Adressen werden nachfolgend einfach als LBAs bezeichnet.
  • Datenschreibanforderungen, die die Anfangs-LBA und die Größe der Anforderung spezifizieren, kommen über die Schreib-/Lese-Schnittstelle 11 asynchron an der Steuervorrichtung 7 an. Die Flash-Steuereinheit 10 steuert das Schreiben der Eingabedatenblöcke (entsprechend den betreffenden LBAs) in den Flash-Speicher 6; während des Schreibprozesses wird die C1- und die C2-Codierung durchgeführt. In diesem Beispiel wird die C1-Codierung zuerst durchgeführt. (Da in diesem Beispiel ein Produktcode verwendet wird, ist die Reihenfolge der C1- und der C2-Codierung unerheblich, da in jedem Fall das gleiche Ergebnis erreicht wird, wie der Fachmann versteht. Die Reihenfolge der Codierung könnte daher auf Wunsch auch umgekehrt werden.) Die C1-Codierung wird auf der Ebene der Schreibeinheiten durchgeführt. Das heißt, dass, während Eingabedaten in einzelne Flash-Seiten in Speicher 6 geschrieben werden, die C1-Codierung von EC1-Modul 13 an diesen Eingabedaten durchgeführt wird, wobei für jede Seite erstellt ein oder mehrere C1-Codewörter werden. Diese C1-Codewörter werden daraufhin durch das EC2-Modul 14 weiter codiert, was nachfolgend näher beschrieben wird. In jeder Seite werden von der Flash-Steuereinheit 10 auch Metadaten gespeichert. Diese Metadaten umfassen eine Gültigkeitsanzeige in Form eines Flags (Kennzeichens) „Seite ungültig” (page-invalid – PI). Als Bestandteil der normalen Steueroperationen der Flash-Steuereinheit 10 kann das PI-Flag für eine Seite von der Steuereinheit gesetzt werden, wenn die Daten in dieser Seite aus irgendeinem Grund für ungültig angesehen werden, z. B. wegen einer Datenaktualisierung, wie an späterer Stelle ausführlich beschrieben wird.
  • Zum Zweck des Schreibens codierter Daten in den Speicherbereich 6 von SSD 5 wird der Speicher 6 von der Flash-Steuereinheit 10 logisch in eine Vielzahl logischer Unterteilungen partitioniert. In diesem Beispiel gibt es N logische Unterteilungen, die jeweiligen Speicherbänken auf der Menge von N Kanälen entsprechen. Der Strom an (codierten) Eingabedatenblöcken wird in eine Folge von Gruppen von Flash-Seiten geschrieben. In dieser Ausführungsform werden die Seiten jeder Gruppe über alle logischen Unterteilungen des Speichers 6 verteilt. Im Einzelnen bedeutet das, dass jede Gruppe von Seiten, die nachfolgend als „Stride” (Zug, Sprung) bezeichnet wird, eine Menge bzw. einen „Streifen” (strip) von Seiten im Speicherbereich 8 jedes Kanals enthält. Jeder Streifen besteht typischerweise aus einer vordefinierten Anzahl aufeinanderfolgender Seiten, d.h. Seiten mit aufeinanderfolgenden PBAs, in einem oder mehreren Flash-Blöcken des Kanalspeicherbereichs 8. Jeder Streifen hat eine eigene Streifenkennung im Speicherbereich 8. Der Einfachheit halber kann es sich bei der Streifenkennung um die PBA der ersten Seite im Streifen handeln.
  • Die Speichersteuereinheit 10 zeichnet den Ort der Eingabedaten im Speicher 6 anhand von Adress-Metadaten auf, die die Steuereinheit 10 im Speicher 15 bereithält. Die Adress-Metadaten umfassen hier eine LBA/PBA-Adressabbildung, die die Abbildung zwischen logischen Adressen (LBAs), die zu Eingabedatenblöcken gehören, und physikalischen Adressen (PBAs) in Speicher 6 angeben. Eine solche Adressabbildung kann im Allgemeinen eine oder mehrere Tabellen oder andere Datenstrukturen umfassen, anhand derer die physikalischen Orte der Strides und der darin enthaltenen Streifen, in denen Eingabedatenblöcke gespeichert werden, bestimmt werden können. Zum Beispiel könnte die Adressabbildung die Abbildung von LBAs auf Stride-Kennungen in einer Tabelle und die Abbildung von Stride-Kennungen auf Streifenkennungen in einer anderen Tabelle angeben, wobei eine weitere Tabelle die PBA in einem Streifen angibt, an dem jede LBA gefunden werden kann. In der Praxis kann jedoch einer einzigen Nachschlagtabelle, die alle Adressmetadaten enthält, der Einfachheit halber der Vorzug gegeben werden.
  • Die codierten Eingabedaten werden gespeichert, indem abwechselnd in jeden Stride hineingeschrieben wird. 3 veranschaulicht diesen Schreibprozess für den derzeit aktiven Stride. Die Eingabedaten werden in jeden Streifen des Stride geschrieben, wobei eine Menge von Seiten in einem Streifen (z. B. im letzten Streifen, in Ch(N)) die Redundanz für den C2-Codierprozess für diesen Stride liefert. Das heißt, die Codierung und der Speicherprozess werden so durchgeführt, dass die Eingabedaten in C2-codierten Strides über die N Speicherkanäle von Einrichtung 5 verteilt werden. Dies wird anschließend ausführlich unter Verweis auf die 4 und 5 erläutert.
  • 4 ist eine schematische Darstellung der C1- und C2-Codierprozesse, die von den Modulen 13 und 14 der Flash-Steuereinheit 10 ausgeführt werden, um einen C1-/C2-Produktcode zu codieren. Die in jedem Stride zu speichernden Eingabedaten werden von der Flash-Steuereinheit 10 so organisiert, dass aus diesen Eingabedaten ein logisches Feld von Zeilen und Spalten mit Datensymbolen aufgebaut wird. Die EC1- und EC2-Codierer (13, 14) sind so gestaltet, dass sie die Zeilen bzw. Spalten dieses Feldes codieren. Da im vorliegenden Beispiel die C1-Codierung zuerst durchgeführt wird, wirkt die C2-Codierung auf Spalten der resultierenden C1-codierten Zeilen. Hier wird in beiden Codierermodulen 13 eine systematische Codierung und 14 verwendet, wodurch jedes Codewort durch Hinzufügen von Paritätssymbolen zu den uncodierten Daten erzeugt wird und die Daten selbst durch den Codierprozess unverändert bleiben. 4 veranschaulicht diesen Prozess etwas genauer. Die zu codierenden Eingabedaten werden von der Steuereinheit 10 in aufeinanderfolgende logische Blöcke partitioniert, von denen jeder ein logisches Feld von k2 Zeilen und k1 Spalten mit Datensymbolen umfasst, wie aus der Darstellung in der Figur hervorgeht. Der EC1-Codierer 13 codiert systematisch jede Zeile gemäß dem C1-Code, um (n1 – k1) Paritätssymbole für diese Zeile zu erzeugen. Dieser C1-Paritätscode wird den k1-Eingabedatensymbolen hinzugefügt, so dass ein C1-Codewort mit n1 Symbolen erzeugt wird. Wenn alle k2 Zeilen vom EC1-Codierer codiert worden sind, bildet die resultierende Menge von k2 C1-Codewörtern ein logisches Feld mit k2 mal n1 C1-codierten Symbolen. Die durch den EC2-Codierer 14 durchgeführte C2-Codierung verarbeitet Spalten dieses Feldes. Der EC2-Codierer 14 codiert systematisch jede Spalte gemäß dem C2-Code und erzeugt für diese Spalte (n2 – k2) Paritätssymbole. Dieser C2-Paritätscode wird den k2 Spaltensymbolen hinzugefügt, wodurch ein C2-Codewort mit n2 Symbolen entsteht. Wenn alle n1 Spalten vom EC2-Codierer codiert worden sind, bildet die resultierende Menge von n1 C2-Codewörtern ein logisches Feld mit (n2 mal n1) Symbolen, wie es in der Figur dargestellt ist.
  • Das in 4 dargestellte Feld codierter Symbole wird in einen einzigen Stride hineingeschrieben, wie oben unter Verweis auf 3 beschrieben wird. Der Prozess ist so ausgelegt, dass er eine bestimmte Konfiguration von C1 und C1-Codewörtern in einzelnen logischen Unterteilungen (hier Speicherkanälen 8) und über die Menge von Unterteilungen als Ganzes hinweg ergibt. Diese Konfiguration wird durch das schematische Schaubild von 5 veranschaulicht. Im dargestellten Beispiel wird der Einfachheit halber angenommen, dass ein Stride in jedem der N Kanäle eine Seite enthält und jede Seite eine Vielzahl an C1-Codewörtern speichert. Die wichtigsten Merkmale der Codewortanordnung bestehen hier darin, dass: (1) jede Speicherunterteilung des Stride eine Vielzahl an C1-Codewörtern enthält; und (2) jede dieser Speicherunterteilungen einen Abschnitt jedes der zweiten Codewörter im Stride enthält. In dem in 5 dargestellten Stride werden die verschiedenen C2-Codewörter durch unterschiedlich schattierte vertikale Leisten angezeigt. Der erste Kanal enthält den ersten Abschnitt jedes der n1 C2-Codewörter. Der zweite Kanal enthält den zweiten Abschnitt jedes der C2-Codewörter usw. Der letzte Kanal, Kanal N, enthält die C2-Paritätscodes für jedes C2-Codewort aus diesem Beispiel.
  • Die „orthogonale” Anordnung der C1- und C2-Codewörter, die aus dem oben beschriebenen Prozess resultiert, ergibt eine außergewöhnlich gute Fehlerkorrekturleistung in der SSD 5. Dies wird anhand der nachfolgenden Beispiele veranschaulicht. Es wird jedoch darauf hingewiesen, dass, obwohl das beschriebene einfache Beispiel das allgemeine Prinzip der Codewortkonfiguration in einem Stride veranschaulicht, die C1-Codewortgröße kleiner als, gleich wie oder größer als die Seitengröße sein könnte, und ein Stride mehr als eine Seite in jeder Speicherunterteilung enthalten kann. C2-codierte Seiten brauchen in den verschiedenen Kanälen natürlich nicht ausgerichtet zu sein, und die Reihenfolge der C2-Codewortteile muss nicht der Kanalreihenfolge entsprechen. Zwar werden hier die C2-Paritätscodes im N-ten Kanal gespeichert, doch könnte je nach Bedarf ein beliebiger anderer Kanal für die Parität und könnten sogar verschiedene Kanäle für unterschiedliche Strides verwendet werden.
  • Je nach Systemarchitektur können die Streifen eines gegebenen Stride im Allgemeinen sequenziell oder parallel gefüllt werden. In der vorliegenden Ausführungsform, in der der Speicher 6 logisch nach Kanal unterteilt ist, können Streifen parallel zu den N Kanälen beschrieben werden. In jedem Fall ist der C2-Codierer 14 so ausgelegt, dass er die Linearität der C1- und C2-RS-Codes nutzt, wodurch eine einfache und wirksame Realisierung und außerdem eine weitere Fehlerschutzfunktion gewährleistet werden. Im Einzelnen berechnet der C2-Codierer, während die C1-Codewörter eines Stride nacheinander in den Streifen in jeder Speicherunterteilung gespeichert werden, wiederholt einen transienten Paritätscode für die Symbole, die bisher für jedes C2-Codewort gespeichert worden sind. Es folgt eine Beschreibung bevorzugter Codiererausführungen unter Verweis auf die 6, 7a und 7b. (Entsprechende Decodiererausführungen kann der Fachmann einfach aus der Beschreibung des Codierers ableiten.)
  • Der Codierer eines linearen Fehlerkorrekturcodes bildet k-Tupel aus dem Vektorraum GF(q)k eins zu eins auf Codewörter ab, wobei k die Dimension des Codes und GF(q)k die Menge aller k-Tupel mit Elementen aus dem endlichen Feld (Galois-Feld) mit q Elementen (q ist eine Potenz einer Primzahl) ist, die als GF(q) notiert wird. Der systematische Codierer für einen linearen Blockcode C lässt sich durch die k×n-Generatormatrix G = [I P] charakterisieren, wobei I die k×k-Identitätsmatrix und P eine k×(n – k)-Matrix ist. Der Codierprozess zur Erzeugung eines Codeworts c (Zeilenvektor) mit n Komponenten lässt sich durch Multiplikation eines Eingabedaten-Zeilenvektors a, der k Komponenten hat, mit der Generatormatrix G beschreiben, d. h. c = a G. Der Codierprozess ist eine lineare Eins-zu-eins-Abbildung eines k-dimensionalen Vektorraums auf den k-dimensionalen Unterraum, der durch den Code C definiert ist.
  • Ein systematischer Codierer für den linearen C2-Code lässt sich durch die Generatormatrix G = [I P] charakterisieren, wobei I die k2×k2-Identitätsmatrix und P eine k2×(n2 – k2)-Matrix ist. Die i-te Zeile der Matrix P wird als p i notiert, wobei 1 ≤ i ≤ k2. Darüber hinaus ist der Datenvektor a ein k2-Tupel (Zeilenvektor) mit Elementen, die als ai notiert werden, wobei 1 ≤ i ≤ k2 ist. Der symbolweise transiente Paritätscode t i, der von diesem Codierer erzeugt wird, wird durch die rekursive Gleichung t i = t i-1 + ai p i definiert, wobei t 0 = 0 und 1 ≤ i ≤ k2 ist. Das C2-Codewort, das als Ergebnis des systematischen Codierprozesses des Datenvektors a erzeugt wird, ist dann der Zeilenvektor [a p], wobei der Paritätszeilenvektor p der transiente Paritätsvektor t i am Ende des Codierprozesses ist, d. h., zum Zeitpunkt i = k2. In der Folge wird davon ausgegangen, dass die Anzahl an C1-Codewörtern in einer Seite durch eine Ganzzahl M gegeben ist, die durch k2 teilbar ist. In anderen Worten, jedes C2-Codewort hat M Elemente aus GF(q) in einer Seite. Der transiente Paritätscode, der nach der Verarbeitung der ersten Seite erzeugt wird, ist dann t M, und der transiente Paritätscode, der nach der Verarbeitung der zweiten Seite erzeugt wird, ist dann t 2M usw. Das Codewort, das nach der Verarbeitung der letzten (k2/M)-ten Seite erzeugt wird, ist [a p], wobei, wie oben erläutert wurde, der Paritätszeilenvektor p der transiente Paritätscode t i am Ende des Codierprozesses ist.
  • 6 veranschaulicht, wie die transienten Paritätscodes für die C2-Codewörter im C2-Codierer 14 erzeugt werden können. Für jedes C2-Codewort enthält der Codierer eine einfache Rückmelderegisterschaltung 20, wie sie in der Figur dargestellt ist. Für jedes aufeinanderfolgende Symbol ai (aus der Menge uncodierter Symbole für dieses C2-Codewort), das zur Speicherung bereitgestellt wird, erzeugt die Schaltung 20 einen Paritätsvektor ai p i für das betreffende Symbol. Der Paritätsvektor ai p i wird daraufhin dem transienten Paritätscode t i-1 hinzugefügt, der für das vorherige Symbol erzeugt wurde, welches durch das Register 21 ausgegeben wird. (An dieser Stelle ist zu beachten, dass der transiente Paritätscode t i für das erste Symbol ganz einfach der Paritätsvektor a1 p 1 für dieses Symbol ist.) Das Ergebnis dieser Vektoraddition ist der aktuelle transiente Paritätscode t i für die bisher für das C2-Codewort gespeicherten Symbole. Der transiente Paritätscode t i wird dann in Register 21 gespeichert. Wenn das letzte Symbol ai zum Zeitpunkt i = k2 gespeichert wird, ist der von der Schaltung 20 ausgegebene transiente Paritätscode der Paritätscode p für das Codewort.
  • Aus der bisherigen Beschreibung wird ersichtlich, dass der transiente Paritätscode t i bei der Speicherung der aufeinanderfolgenden Symbole ai auf besonders einfache Weise unter Verwendung eines Registers 21, das t i mit (n2 – k2) Symbolen aus GF(q) speichert, und einer einfachen Rückmeldeschaltung erzeugt wird. Die C2-Parität kann in (n2 – k2)/M Seiten oder Chips gespeichert werden. Wenn (n2 – k2)/M = 1, wird nur ein „zusätzlicher” Chip benötigt, um die C2-Parität zu speichern, und dieses Schema kann aufgrund des Ausfalls einzelner Chips fehlende Daten wiederherstellen. Wenn (n2-k2)/M = 2, werden zwei zusätzliche Chips zur Speicherung der C2-Parität benötigt, und dieses Schema kann Daten wiederherstellen, die aufgrund des Ausfalls zweier Chips während des Wiederherstellungsprozesses fehlen. Darüber hinaus kann die in Register 21 gespeicherte transiente Parität von der Flash-Steuereinheit 10 bei Bedarf zur Wiederherstellung nach Fehlern in nicht vollständig abgeschlossenen Strides verwendet werden. Wenn überdies die Flash-Steuereinheit eine Unterbrechung der Stromversorgung für die Steuervorrichtung 7 erkennt, kopiert die Steuereinheit den aktuellen transienten Paritätscode (zusammen mit den anderen Metadaten, z. B. auch der aktuellen Adressabbildung, in Speicher 15) vor dem Herunterfahren in einen verfügbaren Bereich des Flash-Speichers 6. Die transiente Parität kann daher auch im Falle eines Stromausfalls beibehalten werden, wodurch ein Schutz gegen Stromausfall bei gleichzeitig auftretenden Fehlern in der Speichereinheit/den Kanälen gegeben ist.
  • Es wird darauf hingewiesen, dass, obwohl sich die obige Beschreibung auf den C2-Codierer 14 bezieht, um den Mechanismus der transienten Parität zu beschreiben, der C1-Codierer 13 auf ähnliche Weise auch durch eine einfache Rückmelderegisterschaltung gemäß den oben beschriebenen Grundsätzen realisiert werden kann.
  • In besonders bevorzugten Ausführungsformen ist der in C2-Codierer 14 verwendete C2-Code ein zyklischer Code, und die Auslegung des Codierers nutzt die Merkmale solcher Codes für eine besonders einfache und effiziente Realisierung. Bei zyklischen Codes bietet es sich an, die Polynomnotation einzuführen. Nachfolgend wird ein Codewort c = (c0, c1, ..., cn-1) durch das Codewort-Polynom
    Figure 00310001
    dargestellt. Auf ähnliche Weise werden auch alle Zeilenvektoren durch Polynome dargestellt. Ein zyklischer Code ist durch das eindeutige monische Generatorpolynom
    Figure 00310002
    charakterisiert, wobei alle Koeffizienten des Generatorpolynoms aus GF(q) stammen, und der führende Koeffizient des Generatorpolynoms ist eins, d. h. gn-k = 1. Alle Codewörter eines zyklischen Codes sind Vielfache des Generatorpolynoms g(x). In anderen Worten heißt das, dass sich jedes Codewort in einem zyklischen Code als Produkt des Generatorpolynoms und eines Polynoms des Grades (k – 1) oder weniger darstellen lässt.
  • Einen systematischen Codierer für einen zyklischen Code erhält man wie folgt. Angenommen, das Datenpolynom am Eingang des systematischen Codierers sei
    Figure 00320001
    Das entsprechende Codewort für einen zyklischen Code, der durch das Generatorpolynom g(x) charakterisiert ist, ist dann durch c(x) = xn-ka(x) + p(x) gegeben, wobei das Paritätspolynom p(x) des Grads (n – k – 1) oder weniger so ausgewählt wird, dass c(x) durch g(x) teilbar ist.
  • 7a veranschaulicht, wie die transienten Paritätscodes für einen zyklischen C2-Code mit Generatorpolynom g(x) im C2-Codierer 14 erzeugt werden können. Für jedes C2-Codewort c(x) enthält der Codierer eine lineare Rückmelde-Schieberegisterschaltung 25 (linear feedback shift register circuit – LFSR) gemäß Darstellung in der Figur. Bei der Bereitstellung zur Speicherung der einzelnen aufeinanderfolgenden Symbole aus der Menge uncodierter Symbole für das C2-Codewort erzeugt die Schaltung 25 einen transienten Paritätscode, der durch das Polynom
    Figure 00320002
    dargestellt wird. Die Rückmeldekoeffizienten der Schieberegisterschaltung ergeben sich durch die Koeffizienten gj, alle 0 ≤ j ≤ n2 – k2 – 1, des Generatorpolynoms. Bei dem Inhalt des Schieberegisters handelt es sich um die Koeffizienten des transienten Paritätspolynoms t i / j zum Zeitpunkt i. Am Anfang werden die Register auf null initialisiert, d. h. t 0 / j = 0 für alle 0 ≤ j ≤ n2 – k2 – 1. Das C2-Codewort, das als Ergebnis des systematischen Codierprozesses des Datenpolynoms a(x) erzeugt wird, ist dann das Codewortpolynom
    Figure 00320003
    wobei das Paritätspolynom p(x) das transiente Paritätspolynom ti(x) am Ende des Codierprozesses ist, d. h. zum Zeitpunkt i = k2. Das transiente Paritätspolynom ti(x) wird berechnet, nachdem i Symbole
    Figure 00330001
    in die Rückmelde-Schieberegisterschaltung geschoben wurden. Nachfolgend wird angenommen, dass die Anzahl an C1-Codewörtern in einer Seite durch eine Ganzzahl M gegeben ist, die durch k2 teilbar ist. In anderen Worten hat jedes C2-Codewort M Elemente aus GF(q) in einer Seite. Das transiente Paritätspolynom ti(x), das nach der Verarbeitung der ersten Seite erzeugt wird, lautet dann tM(x), und das transiente Paritätspolynom, das nach der Verarbeitung der zweiten Seite erzeugt wurde, lautet dann t2M(x) usw. Schließlich lautet das Codewort, das nach der Verarbeitung der letzten (k2/M)-ten Seite erzeugt wird,
    Figure 00330002
    wobei das Paritätspolynom p(x) der Paritätscode für das C2-Codewort ist und, wie oben bereits beschrieben wurde, dem transienten Paritätspolynom ti(x) am Ende des Codierprozesses entspricht. Wie auch zuvor kann der transiente Paritätscode aus der Registerschaltung 25 bei einem Stromausfall in den Flash-Speicher 6 kopiert werden.
  • Die LFSR-Schaltung 25 in 7a ist ein endlicher Automat, bei dem der Status zum Zeitpunkt i durch das transiente Paritätspolynom ti(x) definiert ist und das Eingabesymbol ak₂-i ist. Daher lässt sich die LFSR-Schaltung durch die Statusaktualisierungsgleichung
    Figure 00330003
    1 ≤ i ≤ k2, beschreiben, wie aus der Darstellung in 7b hervorgeht. Die Anfangsbedingung ist durch t0(x) = 0 gegeben.
  • Während des Betriebs der SSD 5 wird die Fehlerprüfung typischerweise nach jedem Datenschreibvorgang sowie beim Auslesen von Daten als Reaktion auf einer Leseanforderung oder während interner Verwaltungsoperationen, die nachfolgend erörtert werden, durchgeführt. Ein C1-Codewort wird immer dann als „gelöscht” (fehlerhaft) betrachtet, wenn der C1-Decodierer des EC1-Moduls 13 nicht in der Lage ist, das C1-Codewort zu decodieren. Diese C1-Löschungen können dann vom C2-Decodierer des EC2-Moduls 14 korrigiert werden. Wenn sich die C2-Parität in einem Stride nur auf einem Kanal befindet, ist die Fehlerkorrekturfähigkeit des C2-RS-Decoders die Anzahl C1-Codewörter pro Seite geteilt durch zwei, und die die Löschungskorrekturfähigkeit des C2-RS-Decoders ist die Anzahl C1-Codewörter pro Seite. C1-Codewörter können auch einen zyklischen Redundanzprüfcode (cyclic redundancy check code – CRC) enthalten, der verwendet werden kann, um das C1-Codewort am Ausgang des C1-Decoders als gelöscht zu deklarieren, wenn die CRC-Prüfung fehlschlägt. Immer, wenn ein Streifen Seiten- oder Blockfehler enthält, die nicht vom C1-Fehlerkorrekturprozess korrigiert werden können, wird von der Flash-Steuereinheit 10 die folgende Prozedur durchgeführt. Ein neuer Streifen aus dem gleichen Speicherbereich 8 wie der Streifen, der den Fehler enthält, wird ausgewählt. Dieser Streifen ersetzt den „schlechten Streifen” im betreffenden Stride. Die anderen Streifen im Stride werden anhand der Adressmetadaten im Speicher 15 identifiziert, und der Inhalt dieser Streifen wird gelesen. Der Inhalt des schlechten Streifens wird gelesen, und der Inhalt der anderen Streifen im Stride wird verwendet, fehlerhafte Daten im schlechten Streifen über den C2-Decodieralgorithmus zu rekonstruieren. Die rekonstruierten (fehlerkorrigierten) Daten werden daraufhin in den Ersatzstreifen geschrieben, und die Adressmetadaten werden aktualisiert, um der geänderten Stride-Struktur Rechnung zu tragen. Das Flag „Seite ungültig” (page-invalid – PI) wird danach in jeder Seite des alten schlechten Streifens gesetzt, um anzuzeigen, dass der Inhalt dieser Seiten ungültig ist. Diese Seiten werden in einem nachfolgenden Speicherbereinigungsprozess, der unten beschrieben wird, einem Recycling unterzogen.
  • Die Zuordnung von Streifen zu bestimmten Strides und die Reihenfolge der Stride-Auswahl in einer Schreiboperation lässt sich in der Steuereinheit 10 auf verschiedene Arten realisieren, und der Fachmann erkennt geeignete Realisierungen. Diese Merkmale stehen nicht im Mittelpunkt der vorliegenden Erfindung und brauchen an dieser Stelle nicht ausführlich beschrieben zu werden. Im Allgemeinen enthält jeder Streifen jedoch Seiten in einem oder mehreren Flash-Blöcken in einem gegebenen Kanal. Die 8 und 9 zeigen zwei Beispiele möglicher Stride-Kombinationen. In 8 beträgt die Größe des C2-Streifens vier Seiten. Ein einzelner Stride wird durch die Pfeile in der Figur angegeben. Wenn wir eine Flash-Blockgröße von 64 Seiten annehmen, dann enthält jeder Block Streifen von 16 verschiedenen Strides. Diese 16 Strides verwenden gemeinsam die gleichen Blöcke in allen Kanälen. Eine solche Menge von Strides, die eine gemeinsame Menge von Blöcken gemeinsam nutzen, wird nachfolgend als Stride-Gruppe bezeichnet. Es wird darauf hingewiesen, dass Blöcke aus derselben Stride-Gruppe in unterschiedlichen Kanalspeicherbereichen 8 nicht physikalisch ausgerichtet zu sein brauchen. 9 zeigt ein Alternativbeispiel, in dem die C2-Streifengröße zwei Blöcke beträgt. Jeder Stride besteht somit aus zwei Blöcken in jedem Speicherkanal, und eine Stride-Gruppe besteht hier aus einem einzigen Stride. Es wird darauf hingewiesen, dass Blöcke aus demselben Stride in jedem Kanalspeicherbereich 8 nicht physikalisch aufeinanderfolgen müssen.
  • Bei der Aktualisierung von Daten im Flash-Speicher 6 unter Verwendung des oben beschriebenen „write-out-of-place”-Schreibschemas setzt die Flash-Steuereinheit 10 das Flag „Seite ungültig” (page-invalid – PI) für jede Seite, die durch eine LBA-Überschreibung aktualisiert wurde. Dieses PI-Flag wird auf ähnliche Weise für jede Seite gesetzt, die Daten enthält, die von einem Host gelöscht wurden. Die Flash-Steuereinheit 10 führt außerdem einen Zählstand für jede Stride-Gruppe durch, der die Anzahl an ungültigen Seiten in dieser Stride-Gruppe insgesamt angibt. Diese PI-Zählstände für Stride-Gruppen werden als Bestandteil der Metadaten aufgezeichnet, die im Speicher 15 bereitgehalten werden. Die PI-Zählstände werden bei internen Verwaltungsoperationen verwendet, die von der Flash-Steuereinheit 10 wie nachfolgend beschrieben durchgeführt werden.
  • Zwar ist der Speicher 6 für die oben beschriebene C2-Codierung logisch unterteilt, doch interne Verwaltungsfunktionen werden für den Speicher als Ganzes durchgeführt. Das bedeutet, dass die Flash-Steuereinheit 10 alle Unterteilungen (die N Speicherkanäle) für interne Verwaltungsfunktionen als einzelne Speicherentität behandelt. Zu diesem Zweck sind interne Verwaltungsfunktionen, die das Löschen von Blöcken umfassen, z. B. Speicherbereinigung und Verschleißausgleich, so gestaltet, dass sie die C2-Codierung über Unterteilungen hinweg berücksichtigen. Im Einzelnen wird die Wiederherstellung gültiger Daten während solcher Prozesse auf der Grundlage einer Stride-Gruppe und nicht eines Blocks durchgeführt. Bevor ein Block gelöscht wird, werden aus dem bzw. jedem Stride der Stride-Gruppe, der Schreiborte in diesem Block enthält, gültige Eingabedaten wiederhergestellt. Diese Operation wird in Bezug auf 10 für den Speicherbereinigungsprozess nachfolgend ausführlicher beschrieben.
  • Das Blockdiagramm von 10 zeigt die wesentlichen Schritte des Speicherbereinigungsprozesses, der in der SSD 5 durchgeführt wird. Sobald die Speicherbereinigung gestartet wird, (was in der Figur durch Schritt 30 dargestellt wird), wählt die Flash-Steuereinheit 10 zuerst die zu löschenden Blöcke aus. Diese Auswahl, die bei Schritt 31 durchgeführt wird, basiert auf den im Speicher 15 für Stride-Gruppen gespeicherten PI-Zählständen. Im Einzelnen können die Blöcke in Stride-Gruppen mit den höchsten PI-Zählständen zuerst für das Recycling ausgewählt werden. Nachdem eine Stride-Gruppe ausgewählt worden ist, stellt die Flash-Steuereinheit in Schritt 32 alle noch gültigen Daten aus den Seiten der betreffenden Stride-Gruppe wieder her. Auf diese Weise werden Daten aus allen Seiten in der Stride-Gruppe gelesen, für die die entsprechenden PI-Flags nicht gesetzt sind. Eine Fehlerkorrekturverarbeitung auf der Grundlage der oben beschriebenen C1- und C2-Codes kann in diesem Prozess je nach Bedarf durchgeführt werden. Die auf diese Weise wiederhergestellten gültigen Daten werden daraufhin als erneut im Flash-Speicher 6 zu speichernde Eingabedaten zurückgeführt. So werden wiederhergestellte Daten erneut in neuen Strides gespeichert, wie bei Schritt 33 angezeigt wird. In Schritt 34 aktualisiert die Flash-Steuereinheit 10 die Adressabbildung im Speicher 15 entsprechend den neuen Datenspeicherorten. Die Blöcke der alten, einer Recycling-Operation unterzogenen, Stride-Gruppe können anschließend von der Flash-Steuereinheit 10 in Schritt 35 gelöscht werden. Blocklöschungen können von der Flash-Steuereinheit 10 sofort oder zu einem beliebigen späteren Zeitpunkt durchgeführt werden, um diese Blöcke für die Speicherung neuer Daten freizugeben.
  • Daher ist ersichtlich, dass alle Streifen einer Stride-Gruppe während der Speicherbereinigung gemeinsam einer Recycling-Operation unterzogen werden. Das gleiche Prinzip lässt sich in jedem beliebigen internen Verwaltungsprozess anwenden, z. B. beim Verschleißausgleich, bei dem vor dem Löschen von Blocks Daten innerhalb des Flash-Speichers verschoben werden. Als Teil der normalen Überwachungsfunktion der Steuereinheit 10 können Blöcke, bei denen die Zuverlässigkeit nachlässt (zu viele C1-Fehler), während der Recycling-Operation ermittelt und als „schlechte Blöcke” gekennzeichnet werden. Diese Kennzeichnung kann auf der Grundlage eines Blockfehlerzählerstands erfolgen, den die Flash-Steuereinheit 10 als Bestandteil der in Speicher 15 gespeicherten Metadaten bereithält. Blöcke, die auf diese Weise als schlecht gekennzeichnet sind, werden von der Steuereinheit 10 nicht zur nachfolgenden Datenspeicherung verwendet.
  • Aus der obigen Beschreibung wird ersichtlich, dass im Gegensatz zu RAID-artigen Systemen nach Stand der Technik die C2-Codierung auf der physikalischen Blockebene in der SSD 5 durchgeführt wird, wobei der gesamte Speicherbereich zu internen Verwaltungszwecken als eine einzige Entität verwaltet wird. Die C2-Codierungsoperation ist für die LBA/PBA-Abbildung transparent und bietet einen Schutz gegen einen Totalausfall auf Seiten-, Block-, Chip-, Bank- und Kanalebene. Die Verwendung transienter Paritätscodes, wie sie oben beschrieben ist, bietet außerdem einen Schutz gegen einen gleichzeitigen Ausfall von Strom und Einheit. Wenn die C2-Codierung auf synergistische Weise mit der oben beschriebenen internen Verwaltung durchgeführt wird, erreicht die SSD 5 bessere Fehlerkorrekturquoten bei einer außergewöhnlich guten Gesamtleistung. Zum Beispiel wird die Fehlerkorrekturleistung ohne die bei einer Codierung auf höherer Ebene erwachsenden Nachteile hinsichtlich Schreibverstärkung und Schreiblebensdauer verbessert. Zur Veranschaulichung kann die SSD 5 mit einem RAID-artigen SSD-basierten System des zuvor beschriebenen Typs verglichen werden, indem man davon ausgeht, dass in jedem Fall ein Kanal für die Redundanz verwendet wird. Angenommen, in der SSD 5 sei der Kanal N vollständig für C2-Codes reserviert, so definieren wir w1 als die Schreibverstärkung aufgrund der internen Verwaltung (Speicherbereinigung und Verschleißausgleich). Der Einfachheit halber sei angenommen, dass jeder Streifen nur eine Seite enthält; in diesem Fall führt jeder Seitenschreibvorgang zu (1 + 1/(N – 1))w1 Seitenschreibvorgängen, da die Steuereinheit eine Paritätsseite für (N – 1) Seiten berechnet, eine aus jedem Kanal. Sei dagegen beim RAID-artigen System w2 die Schreibverstärkung aufgrund der Speicherbereinigung und des Verschleißausgleichs, so führt jeder Seitenschreibvorgang zu 2w2 Seitenschreibvorgängen, nämlich einer Datenseite und einer RAID-Paritätsseite. Darüber hinaus gilt w1 < w2, da die interne Verwaltung „global” durchgeführt wird, so dass alle Speicherkanäle als einheitlicher Speicherbereich behandelt werden.
  • Die oben ausführlich beschriebenen Merkmale führen in Festkörper-Speichersystemen zu einer außerordentlich guten Leistung. Die Tabelle von 11 vergleicht beispielhaft Ergebnisse unter Verwendung des oben beschriebenen RS-basierten C2-Codeschemas mit Ergebnissen, bei denen kein C2-Code verwendet wurde, und mit einem einfachen XOR-basierten C2-Code. Die Tabelle führt die Ergebnisse für eine rohe NAND-Bitfehlerrate von 1e-3 unter Verwendung eines Gilbert-Burstfehlerkanals mit einer durchschnittlichen Burstlänge von 5 Bits auf. Die Spalten führen für jedes der drei Codiersysteme („kein C2”, XOR und „RS”) und für die verschiedenen C1-Datenwortgrößen von 512 Bytes (512 B), 1 KB, 2 KB und 4 KB die erforderlichen C1-Mengen in Bits auf. (Es ist zu beachten, dass die C1-Codewortgröße in Bits die Summe aus der C1-Datenwortgröße in Bits und der C1-Paritätsgröße in Bits ist. Darüber hinaus steht 1 KB für 1024 B, 2 KB steht für 2048 B, und 4 KB steht für 4096 B). Jede Zeile gibt die Ergebnisse für eine andere Benutzerbitfehlerrate (BER) an. Es wird von 8 + 1 Kanälen (Seiten) (8 Kanälen und einem Paritätskanal) ausgegangen. Als Seitengröße werden 4096 Bytes angenommen. Es ist eindeutig ersichtlich, dass der RS-basierte C2-Code den erforderlichen C1-RS-Überhang beträchtlich vermindert. Alle Fälle liegen nun im Bereich ausreichenden Überhangs, der weniger als oder höchstens [218, 436, 872 bzw. 1744] Bits Überhang für die Fälle [512 B, 1 KB, 2 KB bzw. 4 KB] erfordert. Hier wird ein MLC-Flash-Speicher der Größe 4 KB + 218 B angenommen, d. h., eine Seite enthält (4096 + 218) Bytes. Mit der neuen 40-nm-NAND-Flash-Technologie ist bereits eine Seitengröße von 8 KB verfügbar. Bei einer Seitengröße von 8 KB sind die Vorteile mit dem RS-basierten C2-Code aufgrund der längeren RS-basierten C2-Codewörter für die gleiche C2-Coderate sogar noch größer.
  • Es wird darauf hingewiesen, dass auch andere lineare Codes wie z. B. BCH-Codes für den C1- und/oder C2-Code verwendet werden können, vorausgesetzt die Codierarchitektur gewährleistet die erforderliche Anordnung von C1- und C2-Codewörtern über Speicherunterteilungen hinweg gemäß obiger Beschreibung. Die Tabelle von 12 gibt beispielsweise den C1-Überhang in Bits für einen 3-Bit-MLC-Flash-Speicher und einen 8-adischen BCH-Code als C1-Code an. Die Überhanggrößen in Bits sind hier eine Obergrenze, weil die BCH-Grenze verwendet wird. Der C2-Code ist ein RS-Code, und wie in der Tabelle von 11 wird von 8 + 1 Kanälen (Seiten) (8 Kanäle + 1 Paritätskanal) ausgegangen. Die rohe NAND-Bit-Fehlerrate ist erneut 1e-3. Es wird angenommen, dass unabhängige 8-adische Symbolfehler im Kanal auftreten, und als Seitengröße werden wie auch zuvor 4096 Bytes angenommen.
  • Aus der obigen Beschreibung geht hervor, dass die Ausführungsformen der vorliegenden Erfindung eine deutliche Verringerung des Seiten-EC-Überhangs (des C1-Überhangs) bereitstellen. Bei festem C1-Überhang bedeutet dies eine wesentlich bessere Integrität der gespeicherten Daten. Überdies werden die transienten Paritätscodes so berechnet, dass die Rechen- und Speicherressourcen effizient genutzt werden und ein zusätzlicher Fehlerkorrekturmechanisums angeboten wird.
  • Durch eine geeignete Auswahl von C2-Stride- und -Streifengrößen sowie des Verhältnisses von Streifengröße zu LBA-Größe lässt sich für konkrete Fälle die Effizienz noch weiter erhöhen. Der Fachmann sieht, dass solche Erwägungen denen in RAID-Anwendungen ähneln. In einigen Ausführungsformen der Erfindung kann die Flash-Steuereinheit so gestaltet sein, dass die C2-Stride- und -Streifengröße während des Betriebs dynamisch eingestellt wird. Die Flash-Steuereinheit könnte beispielsweise nach vorbestimmten Kriterien zwischen unterschiedlichen Stride- und Streifengrößen hin- und herschalten, z. B. je nach Größe einer Schreibanforderung. Die Stride-Länge könnte ebenfalls verringert werden, wenn die Blöcke aufgrund von Abnutzung und Alterung zunehmend unzuverlässig werden. Der Fachmann sieht geeignete Änderung an der beschriebenen Ausführungsform.
  • Da im obigen Beispiel ein Produktcode verwendet wird, ist die Symbolgröße für die C1- und die C2-Codierung gleich. Somit stellt jedes kleine Rechteck in 4 ein Symbol sowohl eines C1-Codeworts als auch eines C2-Codeworts dar. Auch entsprechen alle Zeilen im resultierenden codierten Feld den jeweiligen C1-Codewörtern, und alle Spalten entsprechen den jeweiligen C2-Codewörtern. Die Verwendung eines Produktcodes ist jedoch nicht wesentlich. Grundsätzlich können beliebige lineare Codes für die C1- und C2-Codes des verketteten Codierschemas verwendet werden, und die Symbolgrößen für diese C1- und C2-Codes (und somit die Zeilen- und Spaltencodierung) brauchen nicht gleich zu sein. Für solche allgemeinere Verkettungscodes wird die C2-Codierung im Allgemeinen zuerst durchgeführt. Bezug nehmend auf 4 (und wenn der Einfachheit halber die gleiche C1- und C2-Symbolgröße angenommen wird), werden die Spalten des k2 mal k1 großen Eingabedatenfeldes zuerst codiert, um die k1 C2-Codewörter zu erzeugen. Anschließend werden Zeilen des resultierenden Feldes codiert, um n2 C1-Codewörter zu erzeugen. In diesem Fall sind alle Zeilen des resultierenden codierten Feldes C1-Codewörter. Die letzten paar (hier n1 – k1) Spalten des codierten Feldes, die die C1-Paritätssymbole enthalten, brauchen jedoch keine C2-Codewörter zu sein. In der entsprechenden Anordnung von 5 brauchen daher die letzten paar (hier n1 – k1) vertikalen Leisten in jedem Kanal keine Abschnitte der C2-Codewörter zu sein, sondern können einfach die C1-Paritätssymbole enthalten.
  • Es versteht sich, dass zahlreiche weitere Änderungen und Modifikationen an den obigen Ausführungsformen vorgenommen werden können. Obwohl beispielsweise die logischen Unterteilungen von Speicher 6 für die C2-Codierung an den Speicherkanälen in der SSD 5 ausgerichtet sind, könnten diese Unterteilungen grundsätzlich alternativ auch eine beliebige Teilmenge des verfügbaren Speichers bilden. Zum Beispiel können die Unterteilungen alternativ auch jeweils aus Flash-Einzelschaltkreisen 9 aus 2 bestehen. Die beschriebene Codierarchitektur könnte auch auf eine Menge von SSDs in einem Speichersystem angewandt werden, wobei jede Speicherunterteilung dem Speicher in einer bestimmten SSD entspricht. Auch müssen sich einzelne C2-Codewörter nicht notwendigerweise über alle Unterteilungen hinweg erstrecken. In der Einrichtung 5 könnten sich die C2-Strides beispielsweise alternativ auch über eine Vielzahl an Kanälen erstrecken, die geringer ist als die Gesamtanzahl N, wobei die Ansammlung an Strides als Ganzes über alle Kanäle verteilt wird. Wenn in diesem Fall im C2-Fehlerkorrekturprozess ein neuer Streifen ausgewählt wird, um einen schlechten Streifen zu ersetzen, kann der neue Streifen aus demselben Speicherkanal oder einem beliebigen anderen Kanal, der nicht bereits einen Streifen desselben Stride enthält, ausgewählt werden. Die Stride-Länge könnte außerdem verringert werden, so dass sich Strides über weniger Kanäle hinweg erstrecken, wenn Blöcke wie oben beschrieben unzuverlässig werden.
  • In den oben beschriebenen Ausführungsformen enthält ein Stride eine Vielzahl an Seiten im bzw. in jedem Block in jeder Speicherunterteilung, wobei die Seiten innerhalb jedes Blocks aufeinanderfolgen (d. h., sie haben aufeinanderfolgende physikalische Adressen). Im Allgemeinen jedoch kann die Menge von Seiten für einen Stride in jeder beliebigen Unterteilung mehr oder weniger als die Anzahl von Seiten in einem Block enthalten. Zur einfacheren Realisierbarkeit ist die Anzahl an Seiten in jeder Unterteilung vorzugsweise ein ganzzahliger Teiler oder ein ganzzahliges Vielfaches der Anzahl Seiten in einem Block. Wenn die Anzahl Seiten für eine Gruppe in jeder Unterteilung geringer als die Blockgröße ist, können sich mehrere Gruppen denselben Block teilen. In diesem Fall werden interne Verwaltungsoperationen erheblich vereinfacht, wenn Gruppen, die sich einen gemeinsamen Block in einer logischen Unterteilung teilen, sich außerdem in jeder logischen Unterteilung einen gemeinsamen Block teilen.
  • In manchen Ausführungsformen kann das System von einem Modus, in dem nur eine C1-Decodierung durchgeführt wird, in einen Modus umschalten, in dem zusätzlich die Decodierung von C2-Codewörtern durchgeführt wird. Zum Beispiel wird in einer frühen Phase der Lebensdauer eines Speichers möglicherweise nur die C1-Decodierung routinemäßig durchgeführt, sofern kein Ausfall einer Einrichtung eine C2-Decodierung erfordert. Mit steigender roher Fehlerrate bei zunehmendem Verschleiß könnte jedoch die C2-Decodierung routinemäßig durchgeführt werden, um die Datenzuverlässigkeit und die Lebensdauer der Einrichtung zu erhöhen.
  • Zwar wurde speziell eine NAND-Flash-Einrichtung beschrieben, doch lässt sich die Erfindung natürlich auch auf andere Arten von Festkörper-Speichersystemen anwenden. Darüber hinaus kann der konkrete verwendete C1-Code je nach verwendetem Flash-Speichertyp und den konkreten Fehlermechanismen in einem gegebenen System ausgewählt werden. Im Allgemeinen kann es sich beim C1-Code um jeden beliebigen linearen Code handeln, z. B. um einen binären BCH-Code oder einen q-adischen BCH-Code sowie einen RS-Code. Zwar wird ein RS-C2-Code bevorzugt, doch kann auf ähnliche Weise auch der C2-Code im Allgemeinen ein beliebiger linearer und vorzugsweise ebenfalls zyklischer Code sein.
  • Zahlreiche weitere Änderungen und Modifikationen sind an den beschriebenen beispielhaften Ausführungsformen möglich, ohne vom Schutzumfang der Erfindung abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • WO 2007/084751 A2 [0009, 0009]
  • Zitierte Nicht-Patentliteratur
    • http://www.storagenewsletter.com/news/flash/sandforce-ssd-controllers [0006]

Claims (15)

  1. Verfahren zum Speichern von Daten in einem Festkörperspeicher (6) eines Festkörperspeichersystems (5), wobei das Verfahren Folgendes umfasst: Speichern von Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreiborten im Festkörperspeicher (6), wobei jede Gruppe eine Menge von Schreiborten in jeder einer Vielzahl logischer Unterteilungen des Festkörperspeichers (6) umfasst, und Codieren der in jeder Gruppe zu speichernden Eingabedaten durch Aufbauen eines logischen Feldes von Zeilen und Spalten mit Datensymbolen aus diesen Eingabedaten und Codieren der Zeilen und Spalten gemäß einem ersten und einem zweiten linearen Fehlerkorrekturcode, um ein codiertes Feld zu erzeugen, in dem alle Zeilen den jeweiligen ersten Codewörtern und alle Spalten den jeweiligen zweiten Codewörtern entsprechen, wobei das Verfahren derart gestaltet ist, dass in jeder der Gruppen die codierten Eingabedaten eine Vielzahl erster Codewörter in jeder einer Vielzahl der logischen Unterteilungen umfassen und jede logische Unterteilung einen Abschnitt jedes der zweiten Codewörter für die betreffende Gruppe enthält.
  2. Verfahren nach Anspruch 1, wobei der zweite Fehlerkorrekturcode ein zyklischer Code ist.
  3. Verfahren nach Anspruch 1 oder 2, das Folgendes umfasst: Erzeugen der zweiten Codewörter durch einen systematischen Codierprozess, in dem der Menge uncodierter Symbole für jedes zweite Codewort ein Paritätscode hinzugefügt wird, und für jedes zweite Codewort, in aufeinanderfolgenden Phasen während der Speicherung der Menge uncodierter Symbole für das betreffende Codewort: Erzeugen eines transienten Paritätscodes für die für das betreffende Codewort bisher gespeicherten Symbole.
  4. Verfahren nach Anspruch 3, das als Reaktion auf eine Unterbrechung der Stromversorgung des Speichersystems (5) das Speichern des transienten Paritätscodes im Festkörperspeicher (6) umfasst.
  5. Verfahren nach einem der vorhergehenden Ansprüche, bei dem der erste und der zweite Code jeweils ein Reed-Solomon-Code ist.
  6. Verfahren nach einem der vorhergehenden Ansprüche zum Speichern von Daten in einer Festkörper-Speichereinrichtung (5) mit einer Vielzahl an Speicherkanälen, von denen jeder eine Menge (8) von Festkörper-Speichereinheiten (9) aufweist, wobei jede der genannten logischen Unterteilungen die Menge (8) von Einheiten in einem jeweiligen Kanal umfasst.
  7. Verfahren nach einem der Ansprüche 1 bis 5 zum Speichern von Daten in einer Festkörper-Speichereinrichtung (5) mit einer Vielzahl an Festkörper-Speichereinheiten (9), wobei jede der logischen Unterteilungen eine jeweilige Festkörper-Speichereinheit (9) umfasst.
  8. Verfahren zum Verwalten von Daten in einer Festkörper-Speichereinrichtung (5), in der der Festkörperspeicher (6) löschbare Blöcke umfasst, von denen jeder eine Vielzahl an Datenschreiborten umfasst, wobei das Verfahren Folgendes umfasst: Speichern von Eingabedaten nach einem Verfahren nach einem der vorhergehenden Ansprüche, wobei jede der Gruppen Datenschreiborte in einer Menge löschbarer Blöcke in jeder der logischen Unterteilungen umfasst, Bereithalten von Metadaten, die den Speicherort der Eingabedaten im Festkörperspeicher (6) angeben; Bereithalten einer Anzeige der Gültigkeit der an jedem Datenschreibort gespeicherten Daten und vor dem Löschen eines der Blöcke: Wiederherstellen gültiger Eingabedaten aus der bzw. jeder der Gruppen, die Schreiborte in dem betreffenden Block enthält, und erneutes Speichern der wiederhergestellten Daten als neue Eingabedaten.
  9. Computerprogramm, das ein Programmcodemittel umfasst, das dazu dient, einen Computer zum Durchführen eines Verfahren nach einem der vorhergehenden Ansprüche zu veranlassen.
  10. Vorrichtung (7) zum Steuern einer Datenspeicherung in einem Festkörperspeicher (6) eines Festkörperspeichersystems (5), wobei die Vorrichtung Folgendes umfasst: Steuerlogik (10) zum Steuern der Speicherung von Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreiborten in dem Festkörperspeicher (6), wobei jede Gruppe eine Menge von Schreiborten in jeder einer Vielzahl an logischen Unterteilungen des Festkörperspeichers (6) umfasst, und einen ersten und einen zweiten Codierer (13, 14) zum Codieren der in jeder Gruppe zu speichernden Eingabedaten gemäß dem ersten bzw. zweiten linearen Fehlerkorrekturcode, wobei die Steuerlogik so gestaltet ist, dass sie aus den in jeder Gruppe zu speichernden Eingabedaten ein logisches Feld von Zeilen und Spalten mit Datensymbolen aufbaut, und wobei der erste und der zweite Codierer (13, 14) so gestaltet sind, dass sie die Zeilen bzw. Spalten so codieren, dass sich ein codiertes Feld ergibt, in dem alle Zeilen jeweiligen ersten Codewörtern entsprechen und Spalten jeweiligen zweiten Codewörtern entsprechen; wobei die Vorrichtung (7) so gestaltet ist, dass in jeder der Gruppen die codierten Eingabedaten eine Vielzahl erster Codewörter in jeder einer Vielzahl der logischen Unterteilungen für diese Gruppe umfassen und jede logische Unterteilung einen Abschnitt jedes der zweiten Codewörter für die betreffende Gruppe enthält.
  11. Vorrichtung nach Anspruch 10, wobei der zweite Codierer (14) ein systematischer Codierer für das Hinzufügen eines Paritätscodes zu der Menge uncodierter Symbole für jedes zweite Codewort ist, wobei der zweite Codierer (14) für jedes zweite Codewort eine Rückmelderegisterschaltung (20) zum Empfangen aufeinanderfolgender Symbole aus der Menge uncodierter Symbole für dieses Codewort bei der Speicherung jedes Symbols aus der Menge umfasst, wobei die Rückmelderegisterschaltung (20) so gestaltet ist, dass sie: bei der Speicherung jedes der Symbole einen Paritätsvektors für das betreffende Symbol erzeugt und bei der Speicherung jedes der auf das erste Symbol folgenden Symbole durch Addieren des Paritätsvektors für das betreffende Symbol zu dem für das vorhergehende Symbol erzeugten transienten Paritätscode einen transienten Paritätscode erzeugt, wobei der transiente Paritätscode für das erste Symbol der Paritätsvektor für dieses Symbol ist; wobei der bei der Speicherung des letzten Symbols der genannten Menge erzeugte transiente Paritätscode den Paritätscode für das zweite Codewort umfasst.
  12. Vorrichtung nach Anspruch 10, wobei: der zweite Fehlerkorrekturcode ein zyklischer Code ist, der zweite Codierer (14) ein systematischer Codierer zum Hinzufügen eines Paritätscodes zu der Menge uncodierter Symbole für jedes zweite Codewort ist und der zweite Codierer (14) für jedes zweite Codewort eine lineare Rückmelde-Schieberegisterschaltung (25) zum Empfangen aufeinanderfolgender Symbole aus der Menge uncodierter Symbole für das betreffende Codewort bei der Speicherung jedes Symbols aus der Menge umfasst, wobei die Schaltung (25) so gestaltet ist, dass sie bei der Speicherung jedes Symbols einen transienten Paritätscode für die bisher für dieses Codewort gespeicherten Symbole erzeugt, wobei der bei der Speicherung des letzten Symbols der Menge erzeugte transiente Paritätscode den Paritätscode für das zweite Codewort umfasst.
  13. Vorrichtung nach Anspruch 11 oder Anspruch 12, wobei die Steuerlogik (10) so gestaltet ist, dass sie als Reaktion auf eine Unterbrechung der Stromversorgung der Vorrichtung die Speicherung des transienten Paritätscodes im Festkörperspeicher (6) steuert.
  14. Vorrichtung nach einem der Ansprüche 10 bis 13 zum Steuern der Speicherung von Daten in einer Festkörper-Speichereinrichtung (5) mit einer Vielzahl an Festkörper-Speichereinheiten (9), wobei jede der logischen Unterteilungen eine jeweilige Menge (8) der Speichereinheiten (9) umfasst.
  15. Festkörper-Speichereinrichtung (5), die eine Vielzahl an Festkörper-Speichereinheiten (9) und eine Vorrichtung nach Anspruch 14 zum Steuern der Speicherung von Daten in den Speichereinheiten (9) umfasst.
DE112010004863.0T 2009-12-17 2010-12-16 Datenverwaltung in Festkörperspeichersystemen Active DE112010004863B4 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP09179741 2009-12-17
EP091797415 2009-12-17
PCT/IB2010/055875 WO2011073940A1 (en) 2009-12-17 2010-12-16 Data management in solid state storage systems

Publications (2)

Publication Number Publication Date
DE112010004863T5 true DE112010004863T5 (de) 2012-12-06
DE112010004863B4 DE112010004863B4 (de) 2019-10-10

Family

ID=43799567

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112010004863.0T Active DE112010004863B4 (de) 2009-12-17 2010-12-16 Datenverwaltung in Festkörperspeichersystemen

Country Status (5)

Country Link
US (1) US9037951B2 (de)
CN (1) CN102656566B (de)
DE (1) DE112010004863B4 (de)
GB (1) GB2488462B (de)
WO (1) WO2011073940A1 (de)

Families Citing this family (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI497293B (zh) 2009-12-17 2015-08-21 Ibm 固態儲存裝置內之資料管理
JP5367686B2 (ja) * 2010-12-24 2013-12-11 株式会社東芝 データ記憶装置、メモリ制御装置及びメモリ制御方法
KR101778782B1 (ko) * 2011-04-08 2017-09-27 삼성전자주식회사 데이터 저장 장치 및 그것의 동작 방법
US8832506B2 (en) * 2012-01-20 2014-09-09 International Business Machines Corporation Bit error rate based wear leveling for solid state drive memory
US20130262942A1 (en) * 2012-03-27 2013-10-03 Yung-Chiang Chu Flash memory lifetime evaluation method
WO2014041638A1 (ja) * 2012-09-12 2014-03-20 株式会社 東芝 アレイにおける誤り訂正符号ブロック配置位置を管理するストレージ装置、ストレージコントローラ及び方法
US10445229B1 (en) 2013-01-28 2019-10-15 Radian Memory Systems, Inc. Memory controller with at least one address segment defined for which data is striped across flash memory dies, with a common address offset being used to obtain physical addresses for the data in each of the dies
US11249652B1 (en) * 2013-01-28 2022-02-15 Radian Memory Systems, Inc. Maintenance of nonvolatile memory on host selected namespaces by a common memory controller
GB2513377A (en) * 2013-04-25 2014-10-29 Ibm Controlling data storage in an array of storage devices
US10263783B2 (en) * 2013-08-23 2019-04-16 Nec Corporation Method and system for authenticating a data stream
US20150095747A1 (en) * 2013-09-30 2015-04-02 Itzhak Tamo Method for data recovery
KR101550762B1 (ko) * 2013-11-29 2015-09-08 한국과학기술원 연접 오류 정정 장치
CN103838608B (zh) * 2014-03-05 2019-05-24 深圳市中兴物联科技有限公司 NAND Flash页面自适应的方法及装置
GB2525430B (en) * 2014-04-25 2016-07-13 Ibm Error-correction encoding and decoding
US9430326B2 (en) * 2014-07-22 2016-08-30 HGST Netherlands B.V. Multiple ECC codeword sizes in an SSD
US9529672B2 (en) * 2014-09-25 2016-12-27 Everspin Technologies Inc. ECC word configuration for system-level ECC compatibility
WO2016051512A1 (ja) 2014-09-30 2016-04-07 株式会社日立製作所 分散型ストレージシステム
US9710199B2 (en) 2014-11-07 2017-07-18 International Business Machines Corporation Non-volatile memory data storage with low read amplification
CN105701021B (zh) * 2014-12-10 2021-03-02 慧荣科技股份有限公司 数据储存装置及其数据写入方法
US10162700B2 (en) 2014-12-23 2018-12-25 International Business Machines Corporation Workload-adaptive data packing algorithm
US9647694B2 (en) 2014-12-28 2017-05-09 International Business Machines Corporation Diagonal anti-diagonal memory structure
US20160269046A1 (en) * 2015-03-10 2016-09-15 Kabushiki Kaisha Toshiba Memory controller, memory system, and decoding method
US9733870B2 (en) 2015-05-06 2017-08-15 International Business Machines Corporation Error vector readout from a memory device
JP2017010600A (ja) * 2015-06-19 2017-01-12 株式会社日立エルジーデータストレージ 記録再生装置、再生装置、再生データの復元方法、書込みデータ生成方法
US9712190B2 (en) 2015-09-24 2017-07-18 International Business Machines Corporation Data packing for compression-enabled storage systems
TWI569279B (zh) * 2015-10-15 2017-02-01 財團法人工業技術研究院 記憶體保護裝置與方法
US10063257B1 (en) * 2015-11-03 2018-08-28 Western Digital Technologies, Inc. Data storage device encoding and interleaving codewords to improve trellis sequence detection
US10056920B1 (en) 2015-11-03 2018-08-21 Western Digital Technologies, Inc. Data storage device encoding and interleaving codewords to improve trellis sequence detection
US9761273B1 (en) * 2015-11-03 2017-09-12 Western Digital Technologies, Inc. Data storage device encoding and interleaving codewords to improve trellis sequence detection
US9870285B2 (en) 2015-11-18 2018-01-16 International Business Machines Corporation Selectively de-straddling data pages in non-volatile memory
US10101939B2 (en) 2016-03-09 2018-10-16 Toshiba Memory Corporation Storage system having a host that manages physical data locations of a storage device
US10423500B2 (en) * 2016-06-01 2019-09-24 Seagate Technology Llc Technologies for limiting performance variation in a storage device
KR20180030329A (ko) * 2016-09-13 2018-03-22 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작방법
CN108281160B (zh) * 2018-01-12 2020-06-19 南阳师范学院 Dvd纠错码的设计方法
CN110471788B (zh) * 2018-05-08 2024-03-15 美光科技公司 异步功率损耗影响的数据结构
TWI712268B (zh) * 2018-11-14 2020-12-01 慧榮科技股份有限公司 快閃記憶體控制器及其中的編碼電路與解碼電路
US10748606B2 (en) * 2018-12-14 2020-08-18 Western Digital Technologies, Inc. Multi-state programming for memory devices
KR20200078830A (ko) * 2018-12-24 2020-07-02 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 모듈
US11038533B2 (en) * 2019-04-25 2021-06-15 International Business Machines Corporation Expansion for generalized EVENODD codes
CN111177075B (zh) * 2019-12-26 2022-04-22 浪潮电子信息产业股份有限公司 一种垃圾数据的识别方法、系统、电子设备及存储介质
CN112910451B (zh) * 2021-01-18 2023-07-14 北京中科芯蕊科技有限公司 一种异步行波状态机
CN115016981B (zh) * 2022-06-16 2023-05-09 海光信息技术股份有限公司 存储区域的设置方法、数据读取、写入方法及相关装置

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4653051A (en) * 1983-09-14 1987-03-24 Matsushita Electric Industrial Co., Ltd. Apparatus for detecting and correcting errors on product codes
JP3328093B2 (ja) * 1994-07-12 2002-09-24 三菱電機株式会社 エラー訂正装置
US20080282128A1 (en) * 1999-08-04 2008-11-13 Super Talent Electronics, Inc. Method of Error Correction Code on Solid State Disk to Gain Data Security and Higher Performance
US8341332B2 (en) 2003-12-02 2012-12-25 Super Talent Electronics, Inc. Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices
US7036068B2 (en) 2001-07-25 2006-04-25 Hewlett-Packard Development Company, L.P. Error correction coding and decoding in a solid-state storage device
US20030061558A1 (en) * 2001-09-25 2003-03-27 Fackenthal Richard E. Double error correcting code system
US7076606B2 (en) * 2002-09-20 2006-07-11 Quantum Corporation Accelerated RAID with rewind capability
US20060256615A1 (en) * 2005-05-10 2006-11-16 Larson Thane M Horizontal and vertical error correction coding (ECC) system and method
CA2672100A1 (en) * 2006-12-06 2008-06-12 Fusion Multisystems, Inc. Apparatus, system, and method for solid-state storage as cache for high-capacity, non-volatile storage
US9116823B2 (en) * 2006-12-06 2015-08-25 Intelligent Intellectual Property Holdings 2 Llc Systems and methods for adaptive error-correction coding
US20090172335A1 (en) * 2007-12-31 2009-07-02 Anand Krishnamurthi Kulkarni Flash devices with raid
JP5166074B2 (ja) * 2008-02-29 2013-03-21 株式会社東芝 半導体記憶装置、その制御方法、および誤り訂正システム
US20100180182A1 (en) * 2009-01-09 2010-07-15 Seagate Technology Llc Data memory device and controller with interface error detection and handling logic
CN101477481A (zh) * 2009-02-06 2009-07-08 中国科学院计算技术研究所 一种自动纠错系统及方法
US8307258B2 (en) * 2009-05-18 2012-11-06 Fusion-10, Inc Apparatus, system, and method for reconfiguring an array to operate with less storage elements
US8468292B2 (en) * 2009-07-13 2013-06-18 Compellent Technologies Solid state drive data storage system and method
US8463983B2 (en) * 2009-09-15 2013-06-11 International Business Machines Corporation Container marker scheme for reducing write amplification in solid state devices
US8055942B2 (en) * 2009-12-03 2011-11-08 Seagate Technology Llc Data storage devices and methods for power-on initialization
TWI497293B (zh) * 2009-12-17 2015-08-21 Ibm 固態儲存裝置內之資料管理

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007084751A2 (en) 2006-01-20 2007-07-26 Marvell World Trade Ltd. Flash memory with coding and signal processing

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
http://www.storagenewsletter.com/news/flash/sandforce-ssd-controllers

Also Published As

Publication number Publication date
US20120260150A1 (en) 2012-10-11
DE112010004863B4 (de) 2019-10-10
CN102656566A (zh) 2012-09-05
GB2488462A (en) 2012-08-29
GB2488462B (en) 2018-01-17
US9037951B2 (en) 2015-05-19
GB201208241D0 (en) 2012-06-20
CN102656566B (zh) 2015-12-16
WO2011073940A1 (en) 2011-06-23

Similar Documents

Publication Publication Date Title
DE112010004863B4 (de) Datenverwaltung in Festkörperspeichersystemen
DE112010003887B4 (de) Datenverwaltung in Halbleiter-Speichereinheiten
DE112011103295B4 (de) Decodieren in Solid-State-Speichereinheiten
DE112018004275T5 (de) Raid-array-wiederherstellungsunterstützung anhand einer externen array-kopie
DE112012000385B4 (de) Korrigieren von Auslöschungen in Speicher-Arrays
DE112014001305B4 (de) Auswahl einer redundanten Datenspeicherkonfiguration auf der Grundlage verfügbaren Speicherplatzes
JP5944941B2 (ja) クロス・ページ・セクタ、マルチ・ページ符号化およびパー・ページ符号化を使用して多重レベル・セル・フラッシュ・メモリ・デバイスにデータを記憶するための方法および装置
DE112010003645B4 (de) Festkörper-Speichersystem mit Parallelem Zugriff aus Mehreren Flash/PCM-Einrichtungen
DE112014004778B4 (de) Vorrichtung und Verfahren zum Verwalten von Chipgruppen
DE112015000378T5 (de) Selektives Rückkopieren für einen auf einem Chipplättchen gepufferten nichtflüchtigen Speicher
DE112016005869T5 (de) Vorausschauende Arbeitsspeicherinstandhaltung
DE102019123709A1 (de) Verwendung verschachtelter schreibvorgänge zur trennung von die-ebenen
DE112011101116T5 (de) Two-Level BCH-Codes für Solid-State-Speichereinheiten
DE112020005180T5 (de) Kondensieren von logischen zu physischen tabellenzeigern in ssds unter verwendung von gezonten namensräumen
DE102012112354A1 (de) Speichervorrichtung und nichtflüchtige Speichervorrichtung sowie Betriebsverfahren davon
DE102008003113A1 (de) ECC-Steuereinheit, Speichersystem und Verfahren zur Korrektur eines Fehlers
DE102021115858A1 (de) Tlc-datenprogrammierung mit hybrid-parität
DE202008018572U1 (de) Speichersystem
DE102018123880A1 (de) Adaptive Verwaltung von Zwischenspeichern
DE102017114078A1 (de) Fehlerabschwächung für 3d-nand-flash-speicher
DE112018000485T5 (de) Komprimierer/Dekomprimierer für nicht binäre Kontextmischung
DE102013112195A1 (de) Speichercontroller, der Teildaten in einer Speichervorrichtung ändert, sowie Verfahren zum Ändern von Teildaten davon
DE102019133156A1 (de) Ldpc-code-längeneinstellung
DE102021107436A1 (de) Speichersystem und Verfahren zum direkten Quad-Level-Cell-Programmieren (QLC-Programmieren)
DE112020003489T5 (de) Speichersteuerung und verfahren zum decodieren von speichervorrichtungen mit vorzeitigem hartdecodierabbruch

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