-
Diese Erfindung bezieht sich im Allgemeinen auf eine Datenverwaltung in Halbleiter-Speichereinheiten (Solid State Storage Devices, SSDs) und insbesondere auf Verfahren und Vorrichtungen für das Steuern von Datenspeicher- und Datenlösch-Vorgängen in SSDs.
-
Ein Halbleiterspeicher ist ein nichtflüchtiger Speicher, der anstelle von herkömmlichen magnetischen oder optischen Medien wie Festplatten und Bändern eine elektronische Schaltung, in der Regel in integrierten Schaltungen, verwendet, um Daten zu speichern. SSDs wie z.B. Flash-Speichereinheiten verändern derzeit von Grund auf die Datenspeicherlandschaft. Aufgrund des Fehlens von beweglichen Teilen sind diese Einheiten robuster als herkömmliche Speichereinheiten und bieten eine außergewöhnliche Bandbreite, bedeutende Einsparungen beim Stromverbrauch und eine Leistung bei zufällig verteilten Datenzugriffen, die um Größenordnungen besser ist als diejenige von Festplattenlaufwerken.
-
Bei SSDs ist der Speicher in Speicherbereiche oder „Blöcke“ gegliedert, die jeweils einen Satz von Speicherstellen beinhalten, in die Daten geschrieben werden können. Im Folgenden werden verschiedene Betriebsmerkmale von SSDs beschrieben, wobei besonderer Bezug auf Flash-Speichereinheiten auf der Grundlage von NAND-Gattern genommen wird. Der Fachmann weiß jedoch, dass ähnliche Grundsätze auch auf andere SSD-Arten zutreffen. Ein Flash-Speicher ist z.B. in Speicherblöcke gegliedert, die Datenschreib-Speicherstellen beinhalten, die als „Seiten“ bekannt sind. Eine typische Flash-Seite hat eine Größe von 4 KB, und ein typischer Flash-Block besteht aus 64 Flash-Seiten (d.h. 256 KB). Lese- und Schreibvorgänge können auf der Grundlage von Seiten durchgeführt werden, während Löschvorgänge nur auf Blockbasis erfolgen können. Daten können nur in einen Flash-Block geschrieben werden, nachdem er erfolgreich gelöscht wurde. Üblicherweise dauert es 15 bis 25 µs, um eine Seite aus Flash-Zellen in einen Datenpufferspeicher auf einem Flash-Halbleiterplättchen (die) auszulesen. Das Schreiben einer Seite in Flash-Zellen dauert ca. 200 µs, während das Löschen eines Flash-Blocks in der Regel rund 2 ms in Anspruch nimmt. Da das Löschen eines Blocks sehr viel länger dauert als das Lesen oder Schreiben, wird ein Schreibschema, das als „write-out-of-place“ (externes Schreiben) bekannt ist, verwendet, um den Schreibdurchsatz und die Reaktionszeit zu verbessern. Bei diesem Schema wird eine gespeicherte Datenseite nicht direkt in dem Flash-Speicher aktualisiert. Vielmehr wird die aktualisierte Seite in eine andere freie Flash-Seite geschrieben, und die zugehörige bisherige Flash-Seite wird als ungültig gekennzeichnet, indem eine Gültigkeitsmarkierung in den Metadaten gesetzt wird, die als Bestandteil einer jeden Seite gespeichert werden.
-
Das Write-out-of-place-Schema sowie andere Flash-Speichermerkmale erfordern bestimmte „Organisationsvorgänge“, die für eine interne Verwaltung des Flash-Speichers durchgeführt werden müssen. Wenn z.B. Seiten aktualisiert und bisherige Seiten ungültig gemacht werden, ist ein Folgeprozess erforderlich, um ungültige Daten zu entfernen und Speicherstellen für neue Eingabedaten freizugeben. Dieser interne Verwaltungsprozess ist allgemein als „Speicherbereinigung“ bekannt. Der Speicherbereinigungsprozess beinhaltet das Auswählen eines belegten Flash-Blocks und das Wiederherstellen aller noch gültigen Daten aus diesem Block. Die gültigen Datenseiten werden an eine andere Stelle in dem Flash-Speicher kopiert, und der Block wird dann gelöscht. Blöcke werden üblicherweise ausgehend von der Anzahl der darin enthaltenen ungültigen Seiten für eine Speicherbereinigung ausgewählt. Speicherbereinigung und Blocklöschungen können jedoch auch im Rahmen anderer interner Verwaltungsprozesse stattfinden, zu denen faktisch auch das Verschieben von Daten innerhalb des Halbleiterspeichers gehört. Das Ausgleichen der nachlassenden Leistungsfähigkeit ist ein Beispiel für einen derartigen internen Verwaltungsprozess. Dieser Prozess bezieht sich auf die Merkmale der nachlassenden Leistungsfähigkeit eines Flash-Speichers. Insbesondere ist die Anzahl von Schreib-Lösch-Zyklen bei einem Flash-Speicher begrenzt, bevor die Funktionsfähigkeit des Speichers sich zu verschlechtern beginnt. Verfahren für das Ausgleichen der nachlassenden Leistungsfähigkeit versuchen, Lese-Lösch-Zyklen gleichmäßig auf alle verfügbaren Flash-Blöcke zu verteilen, um ein ungleichmäßiges Nachlassen der Leistungsfähigkeit zu vermeiden und damit die Lebensdauer insgesamt zu verlängern. Insbesondere steuert die Funktionalität für das Ausgleichen der nachlassenden Leistungsfähigkeit das Auswählen von Blöcken, in die neue Daten geschrieben werden sollten, gemäß Schreib-Lese-Zykluszählwerten, sowie das Verschieben gespeicherter Daten innerhalb des Flash-Speichers, um so Blöcke mit niedrigen Zykluszählwerten freizugeben und ein gleichmäßiges Nachlassen der Leistungsfähigkeit zu erreichen.
-
Datenplatzierungs- und interne Verwaltungsvorgänge werden üblicherweise durch eine eigens hierfür vorgesehene, als Flash-Steuereinheit bekannte Steuereinheit durchgeführt, die mit dem Flash-Speicher einhergeht. Die Flash-Steuereinheit verwaltet allgemein Daten in dem Flash-Speicher, indem sie alle internen Verwaltungsvorgänge steuert, und sie verwaltet Adress-Metadaten in dem Steuereinheits-Speicher, um die Speicherstelle von Daten in dem Flash-Speicher zu erfassen.
-
Insbesondere führt die Flash-Steuereinheit eine zwischengeschaltete Software-Ebene aus, die als „LBA-PBA (Logical Block Address - Physical Block Address)-Zuordnung“ (auch als „Flash-Übersetzungsebene (Flash Translation Layer, FTL)“ bezeichnet) oder „LPN-FPN (Logical Page Number - Flash Page Number)-Adresszuordnung“ bezeichnet wird. Sie verwaltet Metadaten in Form einer Adresszuordnung, welche die logischen, den Eingabedatenblöcken von oberen Ebenen zugehörigen Adressen z.B. einem Dateisystem oder Host in einem Speichersystem, auf physische Adressen (Flash-Seitenzahlen) in dem Flash-Speicher abbildet. Diese Software-Ebene verbirgt die „Erase-before-write“-Komplexität von Flash-Speichern und unterstützt transparente Datenschreib- und Datenaktualisierungsvorgänge, ohne dass Löschvorgänge zwischengeschaltet werden müssen.
-
Die in SSDs durchgeführten internen Verwaltungsfunktionen führen zur so genannten „Write Amplification“ (Schreib-Vervielfachung). Sie entsteht, weil Daten intern in dem Speicher verschoben werden, so dass sich die Gesamtzahl der Datenschreibvorgänge im Vergleich zur Ausgangszahl der Datenschreibanforderungen, die von der SSD empfangen wurden, vervielfacht. Die Schreib-Vervielfachung ist eines der größten Probleme, das die Zufalls-Schreibleistung und die Schreibbeständigkeits-Lebensspanne von Halbleiter-Speichereinheiten begrenzt. Ein weiteres Schlüsselproblem ist die Fehlerleistung. Eine Fehlerkorrektur-Codierung in SSDs erfolgt durch Hinzufügen von Redundanz auf Ebene der Schreibeinheit. Konkret wird für die Eingabedaten, die in jede Seite geschrieben werden, ein Fehlerkorrektur-Code berechnet, und dieser Fehlerkorrektur-Code wird zusammen mit den Eingabedaten in der Seite bzw. in dem Sektor aufgezeichnet. Diese Codierung ermöglicht bei Fehlern innerhalb einzelner Datenseiten eine Wiederherstellung. Allerdings können Halbleiter-Speichersysteme als Schutz gegen Ausfälle auf der Einheitenebene eine zusätzliche Fehlerkorrektur-Codierung verwenden. Diese Codierung erfolgt, indem eine Sammlung von Einheiten nach Art einer RAID- (Redundant Array of Independent Devices) Anordnung verwaltet wird, wie sie für gewöhnlich bei Festplatten-Speichersystemen zum Einsatz kommt. SSD-Systeme, die einen RAID-ähnlichen Schutz verwenden, werden in der US-Patentanmeldung mit der Nummer
US 2008/0320214A1 sowie in „SSD Controllers by Start-Up Sandforce“, http://www.storagenewsletter.com/news/flash/sandforce-ssdcontrollers, erörtert. Bei einem Szenario kann ein Speichersystem mehrere SSDs verwenden, die jeweils wie oben beschrieben mit einer Steuereinheit betrieben werden, die ihren eigenen lokalen Speicher verwaltet. Die Sammlung von SSDs kann dann auf einer höheren Ebene wie z.B. einer RAID-Anordnung verwaltet werden. Die grundlegenden Funktionsprinzipien eines derartigen Systems werden im Folgenden mit Blick auf
1 der beigefügten Zeichnungen dargelegt.
-
1 ist eine schematische Darstellung eines beispielhaften RAID-ähnlichen Speichersystems 1 auf der Grundlage von SSds. In diesem System werden mehrere SSDs 2 unter Steuerung durch die Speichersteuereinheit 3 betrieben, die von Hosts empfangene Lese-/Schreibanforderungen verarbeitet. Jede SSD 2 wird in der bereits erläuterten Weise betrieben, um Daten in ihrem internen Speicher 4 zu verwalten. Im Allgemeinen kann der Speicher 4 aus einem oder mehreren Speicherkanälen bestehen, von denen jeder ein oder mehrere Chips oder Chip-Pakete aufweist, wobei jeder Chip ein oder mehrere Halbleiter-Speicherplättchen beinhalten kann. In der Speichersteuereinheit 3 ist der Host-LBA-Speicherplatz logisch untergliedert, und ein Segment eines jeden logischen Blocks wird einer entsprechenden SSD 2 zugeordnet. An dieser Stelle kommt Redundanz hinzu, um RAID-Parität hinzufügen zu können.
-
Konkret führt die Speichersteuereinheit 3 für jeden Eingabe-Host-Datenblock (der einer gegebenen („globalen“) Host-LBA entspricht) eine Fehlerkorrektur-Codierung durch, und die resultierende RAID-Parität wird dem Host-Datenblock hinzugefügt. Der paritätscodierte Block wird anschließend durch die Steuereinheit 3 in „Einheiten-Datenblöcke“ untergliedert. Jeder Einheiten-Datenblock wird unter einer zugewiesenen Einheiten-LBA (unit LBA, uLBA) einer betreffenden SSD 2 zum Speichern bereitgestellt. Die Zuordnung der globalen LBAs (gLBAs) zu uLBAs in dem Satz von SSDs wird durch die Steuereinheit 3 in einer gLBA-uLBA-Abbildungstabelle erfasst. Jede SSD speichert ihren betreffenden Einheiten-Datenblock und vermerkt die physische Speicherstelle wie üblich in einer uLBA-PBA-Abbildungstabelle. Als Ergebnis dieses Prozesses werden RAID-Codewörter auf die Anordnung von SSDs 2 verteilt, wie durch den grau schattierten Teil der Figur schematisch dargestellt wird. Dies stellt eine zusätzliche Ebene der Fehlerkorrektur-Codierung bereit, die gegen Ausfälle auf der SSD-Ebene schützt. Innerhalb einer jeden SSD 2 nimmt eine lokale Steuereinheit eine interne Verwaltung des Speichers 4 vor, wie oben beschrieben wurde, wobei diese Funktionalität und die daraus folgende Neuzuordnung von uLBAs zu PBAs in dieser Architektur für die Speichersteuereinheit 3 transparent ist.
-
1 stellt eine so genannte „äußere RAID“-Konfiguration dar, bei der RAID-Codewörter mehrere SSDs und damit mehrere Steuereinheiten umspannen. Zusätzlich oder alternativ zu einem äußeren RAID-System kann auch ein „inneres RAID“-System verwendet werden. Ein inneres RAID-System wird innerhalb einer SSD-Steuereinheit realisiert. In der Steuereinheit ist der LBA-Speicherplatz logisch untergliedert, und ein Segment eines jeden logischen Blocks wird einer anderen Teileinheit des Gesamt-Speicherplatzes zugewiesen. Erneut kommt Redundanz hinzu, um das Hinzufügen einer inneren RAID-Parität zu ermöglichen, so dass innere RAID-Codewörter untergliedert und auf den Satz von Teileinheiten verteilt werden. Konkret wird ein inneres RAID-Codewort in Teileinheiten-Datenblöcke untergliedert, und jeder Teileinheiten-Datenblock wird einer Teileinheiten-LBA (sub-unit LBA, suLBA) in dem Adressraum einer betreffenden Teileinheit zugewiesen. Die Zuordnung der LBAs zu den suLBAs wird von der Steuereinheit in einer LBAsuLBA-Adressabbildung vermerkt. Danach wird jeder Teileinheiten-Datenblock in der betreffenden Speicherteileinheit an einer physischen Speicherstelle gespeichert, die in einer suLBA-PBA-Abbildungstabelle für diese Einheit vermerkt wird. Dieser Prozess stellt eine Fehlerkorrektur-Codierung bereit, die gegen Ausfälle auf der Teileinheit-Ebene in einer SSD schützt. Wie bei äußeren RAID-Systemen nimmt die Steuereinheit in jeder Speicherteileinheit unabhängig eine interne Verwaltung vor (Speicherbereinigung, Ausgleichen der nachlassenden Leistungsfähigkeit usw.), so dass diese Funktionalität und die daraus folgende Neuzuordnung von suLBAs zu PBAs auf einer niedrigeren logischen Ebene als die RAID-Codierung auf der Logikblock-Ebene stattfindet.
-
Die Druckschrift
US 2008/0201392 A1 offenbart ein Speichersystem mit einer Speichereinheit bestehend aus einer Vielzahl von Flash-Speichereinheiten. Zur Erhöhung der Datensicherheit bildet die Vielzahl von Flash-Speichereinheiten eine RAID Gruppe.
-
Die Druckschrift
US 2009/0125671 A1 offenbart ein System zum Datenmanagement in einem Speichersystem mit nichtflüchtigen Speichermitteln, beispielsweise Flashspeichern. Dabei werden die Speichermittel als RAID-System verwaltet.
-
Die Druckschrift
US 2009/0287956 A1 offenbart ein System zum Detektieren und Ersetzen eines fehlerhaften Datenspeichers. Das System kann mehrere nicht-flüchtige Speichereinheiten umfassen, beispielsweise Flash-Speichereinheiten. Ferner kann ein RAID-Controller vorgesehen sein, der einen Fehlerkorrekturcode für eine Datenredundanz erzeugt.
-
Ein Aspekt der vorliegenden Erfindung stellt eine Steuervorrichtung für eine Halbleiter-Speichereinheit bereit, in welcher der Halbleiterspeicher löschbare Blöcke umfasst, die jeweils eine Vielzahl von Datenschreib-Speicherstellen umfassen. Die Steuervorrichtung umfasst einen Speicher und Steuerlogik, die gestaltet sind, um:
- Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreib-Speicherstellen zu speichern, wobei jede Gruppe Schreib-Speicherstellen in einem Satz von löschbaren Blöcken in jedem aus einer Vielzahl von logischen Teilbereichen des Halbleiterspeichers umfasst;
- die Eingabedaten so für eine Fehlerkorrektur zu codieren, dass eine jede Gruppe einen Fehlerkorrektur-Code für die Eingabedaten in der Gruppe enthält;
- in dem Speicher Metadaten zu verwalten, welche die Speicherstelle von Eingabedaten in dem Halbleiterspeicher angeben;
- eine Angabe für die Gültigkeit von Daten zu verwalten, die in einer jeden Datenschreib-Speicherstelle gespeichert sind; und
- vor dem Löschen eines Blocks gültige Eingabedaten aus der oder aus jeder Gruppe wiederherzustellen, die Schreib-Speicherstellen in dem Block enthält, und die wiederhergestellten Daten als neue Eingabedaten neu zu speichern.
-
Bei Ausführungsformen dieser Erfindung ist der von der Steuervorrichtung verwaltete Speicherplatz daher logisch in eine Vielzahl von logischen Teilbereichen untergliedert, und Eingabedaten werden in Gruppen von Schreib-Speicherstellen geschrieben, die auf diese logischen Teilbereiche verteilt sind. Konkret enthält jede Gruppe in jedem logischen Teilbereich eine oder mehrere Schreib-Speicherstellen in einem Satz von (einem oder mehreren) löschbaren Blöcken in dem Teilbereich. Für die Eingabedaten in jeder Gruppe wird ein Fehlerkorrektur-Code berechnet und in der Gruppe für die Eingabedaten gespeichert. Zusätzlich ist der Prozess des Löschens von Blöcken so gestaltet, dass gültige Daten auf der Grundlage von Gruppen wiederhergestellt werden. Wenn ein Löschen von Blöcken erforderlich ist, z.B. bei der Speicherbereinigung oder anderen internen Verwaltungsfunktionen, werden gültige Daten aus der oder aus jeder Gruppe wiederhergestellt, die Schreib-Speicherstellen in einem gegebenen Block enthält, bevor der Block gelöscht wird. Die so wiederhergestellten gültigen Eingabedaten können dann als neue Eingabedaten in neuen Fehlerkorrektur-codierten Gruppen gespeichert werden. Somit bieten Ausführungsformen dieser Erfindung eine zusätzliche Ebene der Fehlerkorrektur-Codierung (d.h. über eine etwaige herkömmliche Fehlerkorrektur-Codierung, die in Schreib-Speicherstellen durchgeführt wird, wie der oben erläuterten Seiten-internen Codierung, hinausgehend), während gleichzeitig interne Verwaltungsfunktionen für den Speicher als Ganzes durchgeführt werden können. Im Gegensatz zu den oben erläuterten RAID-ähnlichen Systemen, die oberhalb der LBA-auf-PBA-Abbildung realisiert werden, findet die zusätzliche Fehlerkorrektur-Codierung auf der Ebene des physischen Blocks (PBA) anstelle auf der Ebene des logischen Blocks (LBA) statt, und der gesamte Speicherplatz kann zur Verwaltungszwecken als eine einzige Einheit verwaltet werden. Indem sie eine Fehlerkorrektur-Codierung auf der Ebene des physischen Blocks in Abstimmung mit der wesentlichen internen Verwaltungsfunktionalität durchführen, stellen Ausführungsformen der Erfindung auf eine äußerst leistungswirksame Art und Weise einen Schutz gegen Ausfälle von Speicherteilbereichen bereit. Insbesondere stellen die wechselseitigen positiven Effekte von Fehlerkorrektur-Codierung und internen Verwaltungsprozessen höhere Fehlerkorrekturraten mit beträchtlichen Verbesserungen der Gesamtleistung bereit. So kann z.B. ohne Leistungseinbußen in Form einer erhöhten Schreib-Vervielfachung und verringerten Lebensdauer, wie sie durch eine weitere Codierung auf höheren Ebenen verursacht werden würden, ein verbesserter Fehlerschutz erzielt werden. Insgesamt bietet die Steuervorrichtung, welche die Erfindung enthält, somit eine außergewöhnliche Leistung bei Halbleiter-Speichereinheiten.
-
Allgemein gesprochen könnte der Prozess der Fehlerkorrektur-Codierung durch systematisches Codieren (wobei die Eingabedaten für den Codier-Prozess durch das Codieren nicht verändert werden, aber ein Fehlerkorrektur-Code hinzugefügt wird, um das Ausgabe-Code-Wort zu erhalten) oder durch nicht systematisches Codieren (wobei die Eingabedaten für den Codier-Prozess durch das Codierung in das Ausgabe-Codewort eingebettet werden) realisiert werden. Vorzugsweise wird jedoch das systematische Codieren verwendet, wobei die Steuerlogik so gestaltet ist, dass zu den Eingabedaten in einer jeden Gruppe ein Fehlerkorrektur-Code für die Eingabedaten hinzugefügt wird.
-
Bei den Datenschreib-Speicherstellen des Halbleiterspeichers kann es sich um Flash-Seiten in einer Flash-Speichereinheit handeln. Im Allgemeinen könnten die Schreib-Speicherstellen jedoch beliebige Bereiche des Gesamtspeichers sein, in die Daten in einer SSD geschrieben werden können. Der Speicher als Ganzes könnte allgemein eine beliebige gewünschte Konfiguration von Speicherelementen umfassen, von einem einzelnen Element wie einem Chip oder einem Halbleiterplättchen bis hin zu mehreren Gruppen von Elementen. Eine typische SSD verfügt jedoch über eine Vielzahl von Speicherkanälen, die jeweils eine Speicherbank oder einen Speicherplatz bereitstellen, die/der üblicherweise mehrere Pakete aus einem oder mehreren Speicher-Chips beinhalten, von denen jede ein oder mehrere Halbleiterplättchen aufweist. Die Teilbereiche, in die der verfügbare Speicher zum Zwecke der Fehlerkorrektur-Codierung logisch untergliedert ist, könnten beliebige Teilsätze des Gesamtspeicherplatzes sein. So könnte bei einer Ausführungsform, bei der die Halbleiter-Speichereinheit eine Vielzahl von Speicherkanälen aufweist, die jeweils über einen Satz von Halbleiter-Speichereinheiten verfügen (wobei jede Einheit allgemein ein Paket, einen Chip, ein Halbleiterplättchen oder einen beliebigen andere Speicherplatz umfassen kann), jeder logische Teilbereich den Satz von Einheiten in einem betreffenden Kanal umfassen. (Allgemein gilt, dass, wenn hier von einem Satz von Elementen gesprochen wird, der Satz ein oder mehrere Elemente enthalten kann, sofern der Textzusammenhang nichts Anderslautendes nahelegt.) Alternativ könntejeder logische Teilbereich eine entsprechende Speichereinheit umfassen.
-
Zum Zwecke der Fehlerkorrektur-Codierung werden Eingabedaten in Gruppen von Schreib-Speicherstellen geschrieben, wobei eine jede Gruppe in einer jedem logischen Teilbereich eine oder mehrere Schreib-Speicherstellen in einem Satz von löschbaren Blöcken in dem Teilbereich enthält. Bei bevorzugten Ausführungsformen enthält eine Gruppe eine Vielzahl von Schreib-Speicherstellen in dem oder in einem jeden Block in einem jeden Teilbereich, wobei die Schreib-Speicherstellen innerhalb eines jeden Blocks aufeinanderfolgen (d.h. aufeinanderfolgende physische Adressen haben). Allgemein kann der Satz von Schreib-Speicherstellen für eine Gruppe in einem beliebigen einzelnen Teilbereich mehr oder weniger als die Anzahl der Schreib-Speicherstellen in einem löschbaren Block enthalten. Im Interesse einer einfachen Realisierung ist die Anzahl von Schreib-Speicherstellen in einem jeden Teilbereich jedoch vorzugsweise ein ganzzahliger Faktor oder ein ganzzahliges Vielfaches der Anzahl von Schreib-Speicherstellen in einem Block. Wenn die Anzahl von Schreib-Speicherstellen für eine Gruppe in einem jeden Teilbereich weniger als die Blockgröße beträgt, können sich mehrere Gruppen denselben Block teilen. Wenn sich etwaige Gruppen, die sich einen gemeinsamen Block in einem logischen Teilbereich teilen, auch einen gemeinsamen Block in einem jeden logischen Teilbereich teilen, werden die internen Verwaltungsvorgänge erheblich vereinfacht.
-
Wie oben beschrieben, wird der Fehlerkorrektur-Code für Eingabedaten in einer jeden Gruppe in der Gruppe mit den Eingabedaten gespeichert. Bei bevorzugten Ausführungsformen wird jedoch in aufeinanderfolgenden Phasen während der Speicherung von Eingabedaten in den Schreib-Speicherstellen einer jeden Gruppe ein vorübergehender Fehlerkorrektur-Code für die Eingabedaten berechnet und dann in der Gruppe gespeichert. Dieser vorübergehende Fehlerkorrektur-Code kann bei Bedarf zur Wiederherstellung teilweise vervollständigter Gruppen verwendet werden. Zudem ist die Steuervorrichtung vorzugsweise so gestaltet, dass sie den vorübergehenden Fehlerkorrektur-Code in dem Halbleiterspeicher als Reaktion auf eine Unterbrechung der Stromversorgung speichert, wobei der vorübergehende Code bei einem Stromausfall beibehalten werden kann. Dies stellt einen Schutz gegen einen gleichzeitig Ausfall der Stromversorgung und eines Speicherteilbereichs bereit.
-
Ein zweiter Aspekt der Erfindung stellt eine Halbleiter-Speichereinheit, die einen Halbleiterspeicher umfasst, der löschbare Blöcke umfasst, die jeweils einen Satz von Datenschreib-Speicherstellen umfassen, sowie eine Steuervorrichtung gemäß dem ersten Aspekt der Erfindung bereit.
-
Ein dritter Aspekt der Erfindung stellt ein Verfahren für das Steuern einer Halbleiter-Speichereinheit bereit, in welcher der Halbleiterspeicher löschbare Blöcke umfasst, die jeweils eine Vielzahl von Datenschreib-Speicherstellen umfassen. Das Verfahren umfasst:
- das Speichern von Eingabedaten in aufeinanderfolgenden Gruppen von Datenschreib-Speicherstellen, wobei jede Gruppe Schreib-Speicherstellen in einem Satz von löschbaren Blöcken in jeder aus einer Vielzahl von logischen Teilbereichen des Halbleiterspeichers umfasst;
- die Fehlerkorrektur-Codierung der Eingabedaten, so dass eine jede Gruppe einen Fehlerkorrektur-Code für die Eingabedaten in der Gruppe enthält;
- das Verwalten von Metadaten in dem Speicher der Halbleiter-Speichereinheit, welche die Speicherstelle von Eingabedaten in dem Halbleiterspeicher angeben;
- das Verwalten einer Angabe der Gültigkeit von Daten, die in einer jeden Datenschreib-Speicherstelle gespeichert sind; und
- das Wiederherstellen gültiger Eingabedaten aus der oder aus einer jeden Gruppe, die Schreib-Speicherstellen in dem Block enthält, vor dem Löschen eines Blocks und das erneute Speichern der wiederhergestellten Daten als neue Eingabedaten.
-
Die Erfindung stellt außerdem ein Computerprogramm bereit, das ein Programmcodemittel umfasst, um einen Computer dazu zu veranlassen, ein Verfahren gemäß dem dritten Aspekt der Erfindung durchzuführen. Der Fachmann weiß, dass der Begriff „Computer“ hier in einem äußerst allgemeinen Sinn verwendet wird und jede Einheit, Komponente bzw. jedes System beinhaltet, die/das über eine Datenverarbeitungsfähigkeit für das Realisieren eines Computerprogramms verfügt. Zudem kann ein Computerprogramm, das die Erfindung enthält, ein unabhängiges Programm bilden oder ein Element eines größeren Programms sein, und kann z.B. im Gestalt eines computerlesbaren Mediums bereitgestellt werden, wie beispielsweise eines Datenspeichers oder einer elektronischen Übertragung, die in einen Computer geladen wird. Das Programmcodemittel des Computerprogramms kann einen beliebigen Ausdruck in einer beliebigen Sprache, einem beliebigen Code oder einer beliebigen Schreibweise aus einem Satz von Befehlen umfassen, mit denen ein Computer veranlasst werden soll, das betreffende Verfahren durchzuführen, wobei dies entweder direkt oder nach (a) der Umwandlung in eine andere Sprache, einen anderen Code oder eine andere Schreibweise und/oder (b) der Wiedergabe in einer anderen greifbaren Form erfolgen kann.
-
Sofern Merkmale hier mit Bezug auf eine Ausführungsform der Erfindung beschrieben sind, gilt generell, dass entsprechende Merkmale auch in Ausführungsformen eines anderen Aspekts der Erfindung bereitgestellt werden können.
-
Im Folgenden werden beispielhafte und mit Blick auf die beigefügten Zeichnungen bevorzugte Ausführungsformen der Erfindung beschrieben, wobei:
- 1 eine schematische Darstellung eines Speichersystems auf der Grundlage von SSDs mit RAID-ähnlicher Codierung nach dem Stand der Technik ist;
- 2 eine schematische Darstellung einer Halbleiter-Speichereinheit ist, welche die Erfindung enthält;
- 3 das Schreiben von Eingabedaten in eine Gruppe von Schreib-Speicherstellen darstellt, die auf Speicherteilbereiche aus der Ausführungsform aus 2 verteilt sind;
- 4 ein Beispiel für die Konfiguration von Schreib-Speicherstellen in einer Gruppe zeigt;
- 5 ein weiteres Beispiel für die Konfiguration von Schreib-Speicherstellen in einer Gruppe zeigt; und
- 6 einen internen Verwaltungsprozess darstellt, der in der SSD aus 2 durchgeführt wird.
-
2 ist eine schematische Darstellung einer beispielhaften SSD 5, welche die Erfindung verkörpert, und zeigt die Hauptelemente, die an den zu beschreibenden Datenverwaltungsvorgängen beteiligt sind. Die SSD 5 verfügt über einen Halbleiterspeicher 6 und eine Steuervorrichtung, die allgemein mit der Ziffer 7 bezeichnet ist. In diesem Beispiel besteht der Speicher 6 aus n Speicherkanälen, Ch(1) bis Ch(n), von denen jeder eine Bank 8 aus Speichereinheiten, hier die Flash-Speicherplättchen 9, bereitstellt. Der Satz von Flash-Halbleiterplättchen 9 in jeder Bank 8 kann im Allgemeinen auf einem oder mehreren Chips oder Chip-Paketen bereitgestellt werden und könnte SLC- (Single-Level Cell)Halbleiterplättchen, MLC- (Multi-Level Cell)Halbleiterplättchen oder eine Kombination hiervon umfassen. So könnten z.B. ein oder mehrere Kanäle einen MLC-Speicher und der Rest einen SLC-Speicher bereitstellen.
-
Die Steuervorrichtung 7 der SSD 5 beinhaltet Steuerlogik in Form einer Flash-Steuereinheit 10, einer Lese-/Schreibschnittstelle 11 für das Verarbeiten von Datenlese- und Datenschreib-Anforderungen an die Einheit und eine Flash-Verbindungsschnittstelle 12 für das Austauschen von Daten mit den Flash-Speicherkanälen. Die Flash-Steuereinheit 10 steuert die Funktion der Einheit 5 im Allgemeinen, indem sie das Lesen und Schreiben von Daten als Reaktion auf empfangene Anforderungen verwaltet und alle internen Verwaltungsfunktionen für den Flash-Speicher 6 verarbeitet. Die Flash-Steuereinheit 10 führt zudem eine Fehlerkorrektur-Codierung (und entsprechende Decodierung) von Daten durch, wie weiter unten beschrieben wird. Im Allgemeinen könnte die Steuerlogik der Flash-Steuereinheit 10 in Hardware, in Software oder in einer Kombination hiervon realisiert werden. So könnte die Steuerlogik z.B. entweder ganz oder teilweise durch Software realisiert werden, die einen Prozessor der Steuervorrichtung 7 dafür konfiguriert, die beschriebenen Funktionen durchzuführen. Geeignete Software wird für den Fachmann aus der hier darlegten Beschreibung offensichtlich. Die Funktionalität für die Fehlerkorrektur-Codierung/- Decodierung kann durch fest verdrahtete Logikschaltkreise realisiert werden, wobei geeignete Schaltkreise für den Fachmann wiederum offensichtlich sein dürften. Die Steuereinheit 7 enthält ferner zum Speichern verschiedener Metadaten für den Betrieb der Flash-Steuereinheit 10 wie weiter unten beschrieben den Speicher 13, der im Allgemeinen einen oder mehrere Speicherkomponenten umfassen könnte, darunter verschiedene Arten von Speichern wie z.B. ein SDRAM (Synchronous Dynamic Random Access Memory).
-
Im Allgemeinen könnte die Einheit 5 direkt mit Hosts Daten austauschen, um Lese/Schreib-Anforderungen zu verarbeiten, oder sie könnte durch eine übergeordnete Steuereinheit verwaltet werden, die Host-Anforderungen für eine Vielzahl von Einheiten in einem Speichersystem verarbeitet. Die Einheit 5 könnte beispielsweise Teil einer RAID-ähnlichen Anordnung sein, in der mehrere SSDs entsprechend dem System aus 1 von einer Speichersteuereinheit verwaltet werden. Die Logikadressen, die Daten zugehörig sind, welche in Eingabe-Lese-/Schreibanforderungen angegeben werden, können sich somit auf den globalen (Host-) Adressraum oder auf einen logisch niedriger angeordneten Adressraum beziehen. Diese Adressen werden im Folgenden einfach als LBAs bezeichnet.
-
Datenschreibanforderungen, welche die Start-LBA und die Anforderungsgröße angeben, gehen über die Lese-/Schreibschnittstelle 11 asynchron in der Steuervorrichtung 7 ein. Die Flash-Steuereinheit 10 steuert das Schreiben der Eingabedatenblöcke (entsprechend der jeweiligen LBAs) in den Flash-Speicher 6 und führt während des Schreibprozesses zwei Ebenen von Fehlerkorrektur-Codierung durch. Die erste Fehlerkorrektur-Codierungsebene, die im Folgenden als „C1-Codierung“ bezeichnet wird, ist die herkömmliche Codierung auf der Ebene der Schreibeinheit. Während Eingabedaten in die einzelnen Flash-Seiten in dem Speicher 6 geschrieben werden, wird eine Fehlerkorrektur-Codierung für die Eingabedaten durchgeführt, und der sich ergebende Code (der C1-Code) bildet einen Teil der in der Seite gespeicherten Metadaten. Diese Metadaten beinhalten auch eine Gültigkeitsanzeige in Gestalt einer Markierung „Page-Invalid“ (PI, „Seite ungültig“). Im Rahmen der normalen Steuervorgänge der Flash-Steuereinheit 10 kann die PI-Markierung für eine Seite von der Steuereinheit gesetzt werden, falls die Daten in der Seite aus dem einen oder anderen Grund als ungültig betrachtet werden, z.B. aufgrund einer Datenaktualisierung, wie weiter unten erörtert wird. Die Seiten-Metadaten beinhalten üblicherweise auch eine Markierung „Bad-Page“ (BP, „unbrauchbare Seite“), die von der Flash-Steuereinheit 10 gesetzt werden kann, wenn festgestellt wird, dass eine Seite nicht nutzbar ist (z.B. weil sie zu viele C1-Fehler aufweist). Auch dies wird im Rahmen der normalen Steuerfunktionen der Flash-Steuereinheit 10 durchgeführt.
-
Die zweite Ebene der von der Flash-Steuereinheit 10 durchgeführten Fehlerkorrektur-Codierung wird im Folgenden als „C2-Codierung“ bezeichnet. Um die C2-Codierung zu realisieren, wird der Speicherbereich 6 der SSD 5 von der Flash-Steuereinheit 10 in eine Vielzahl von logischen Teilbereichen logisch untergliedert. In diesem Beispiel gibt es n logische Teilbereiche, die den betreffenden Speicherbänken 8 in dem Satz von n Kanälen entsprechen. Die C2-Codierung erfolgt, indem der Strom von Eingabedatenblöcken in eine Abfolge von Gruppen von Flash-Seiten geschrieben wird. Bei dieser Ausführungsform sind die Seiten einer jeden Gruppe über alle logischen Teilbereiche des Speichers 6 verteilt. Konkret enthält jede Gruppe von Seiten, die hier als „Breite“ (stride) bezeichnet wird, einen Satz bzw. „Streifen“ (strip) von Seiten in der Speicheranordnung 8 eines jeden Kanals. Jeder Streifen besteht üblicherweise aus einer vordefinierten Anzahl von aufeinanderfolgenden Seiten, d.h. Seiten mit aufeinanderfolgenden PBAs, in einem oder mehreren Flash-Blöcken des Kanalspeicherbereichs 8. Jeder Streifen verfügt über eine eindeutige Streifen-Kennung innerhalb des Speicherbereichs 8. Der Einfachheit halber kann die Streifen-Kennung aus der PBA der ersten Seite in dem Streifen bestehen.
-
Eingabedaten werden gespeichert, indem abwechselnd in jede Breite geschrieben wird, wodurch in dieser Phase die C2-Codierung um Redundanz ergänzt wird. 3 stellt diesen Schreibprozess für die momentan aktive Breite dar. Eingabedaten werden in jeden Streifen der Breite geschrieben, wobei ein Satz von Seiten in dem letzten Streifen (in Ch(n)) für den C2-Code der Breite reserviert ist. Für die Eingabedaten in einem gegebenen Streifen heißt das, dass die Flash-Steuereinheit 10 einen Fehlerkorrektur-Code für die Eingabedaten berechnet und diesen C2-Code in den letzten Seiten des Streifens speichert. Der bestimmte Fehlerkorrektur-Algorithmus, der für die C2-Codierung verwendet wird, ist für die vorliegende Erfindung nicht von wesentlicher Bedeutung. In diesem Beispiel soll der C2-Code jedoch ein XOR-Paritätscode sein. (Ein anderes C2-Codiersystem, das hier verwendet werden könnte, wird in unserer gleichzeitig anhängigen Patentanmeldung beschrieben, die zeitgleich mit dieser unter der Anmelder-Referenznummer CH9-2009-0046 eingereicht wurde und deren maßgebender Inhalt hier durch Bezugnahme als Bestandteil gelten. Bei diesem System umfasst der C2-Code, der einem Streifen wie oben beschrieben hinzugefügt wird, die gesammelten Paritätscodes einer Vielzahl von C2-Codewörter, welche die Speicherteilbereiche 8 umspannen.) Wenn die Flash-Steuereinheit 10 bei dem Schreibprozess für eine gegebene Breite eine unbrauchbare Seite erkennt (d.h., die BP-Markierung ist gesetzt), wird diese Seite übergangen, und das Schreiben fährt mit der nächsten Seite in der Breite fort. Beim Berechnen der C2-Parität gelten alle etwaigen unbrauchbaren Seiten für die Steuereinheit 10 als Seiten, die ausschließlich den Wert Null enthalten.
-
Abhängig von der Systemarchitektur können die Streifen einer gegebenen Breite im Allgemeinen nacheinander oder parallel gefüllt werden. Da bei der vorliegenden Ausführungsform der Speicher 6 logisch nach Kanälen untergliedert ist, können die Streifen parallel in den n Kanälen beschrieben werden. In diesem Fall überprüft die Flash-Steuereinheit 10 die aktive Breite auf unbrauchbare Seiten, bevor sie die Eingabedaten Streifen zuordnet und die C2-Parität für die Breite berechnet. In jedem Fall dürfte deutlich werden, dass die Auswirkung des Datenschreibprozesses darin besteht, die Eingabedaten in C2-codierten Breiten auf die Speicherkanäle der Einheit 5 zu verteilen. Die Zuordnung von Streifen zu bestimmten Breiten und die Reihenfolge der Breiten-Auswahl bei einem Schreibvorgang kann in der Steuereinheit 10 auf verschiedene Art und Weise umgesetzt werden, wobei für den Fachmann geeignete Umsetzungsformen offensichtlich sein dürften. Diese Merkmale sind für die vorliegende Erfindung nicht wesentlich und müssen hier daher nicht im Einzelnen erörtert werden. Allgemein gilt jedoch, dass jeder Streifen Seiten in einer oder mehreren Flash-Breiten eines gegebenen Kanals enthält. Die 4 und 5 zeigen zwei Beispiele möglicher Breiten-Konfigurationen. In 4 beträgt die Größe des C2-Streifens vier Seiten. Eine einzelne Breite ist durch die Pfeile in der Figur dargestellt. Bei einer Größe der Flash-Breite von 64 Seiten enthält jeder Block Streifen von 16 verschiedenen Breiten. Diese 16 Breiten teilen sich dieselben Blöcke in allen Kanälen. Ein derartiger Satz von Breiten, die sich eine gemeinsame Gruppe von Blöcken teilen, wird im Folgenden als Breiten-Gruppe bezeichnet. Dabei ist zu beachten, dass Blöcke derselben Breiten-Gruppe in verschiedenen Kanalspeicherbereichen 8 physisch nicht aneinander ausgerichtet sein müssen. 5 zeigt ein alternatives Beispiel, in dem die C2-Streifen-Größe zwei Blöcke beträgt. Somit besteht jede Breite aus zwei Blöcken in jedem Speicherkanal, während eine Breiten-Gruppe hier aus einer einzigen Breite besteht. Dabei ist zu beachten, dass Blöcke derselben Breite in jedem Kanalspeicherbereich 8 physisch nicht aufeinanderfolgen müssen.
-
Die Steuereinheit 10 vermerkt die Speicherstelle von Eingabedaten in dem Speicher 6 über Adress-Metadaten, die von der Steuereinheit 10 in dem Speicher 13 verwaltet werden. Die Adress-Metadaten umfassen hier eine LBA/PBA-Adressabbildung, welche die Zuordnung zwischen logischen Adressen (LBAs), die Eingabedatenblöcken zugehörig sind, und physischen Adressen (PBAs) in dem Speicher 6 angibt. Eine derartige Adressabbildung kann im Allgemeinen eine oder mehrere Tabellen oder anderweitige Datenstrukturen umfassen, aus denen die physischen Speicherstellen der Breiten und der darin enthaltenen Streifen, in denen Eingabedatenblöcke gespeichert sind, ermittelt werden können. So könnte die Adressabbildung z.B. die Zuordnung von LBAs zu Breiten-Kennungen in einer Tabelle und die Zuordnung von Breiten-Kennungen zu Streifen-Kennungen in einer anderen Tabelle festlegen, mit einer weiteren Tabelle, welche die PBA in einem Streifen angäbe, in dem sich die einzelnen LBAs befinden. In der Praxis könnte aus Gründen der Einfachheit jedoch eine einzige Referenztabelle mit allen Adress-Metadaten bevorzugt werden.
-
Es ist klar6, dass der C2-Codierungsprozess durch das Verteilen der Eingabedaten auf die Speicherkanäle in Fehlerkorrektur-codierten Breiten einen zusätzlichen Schutz gegen Fehler in einzelnen Kanälen bietet, der über den auf Seitenebene angesiedelten Schutz der C1-Codierung hinausgeht. Die Fehlerprüfung erfolgt in der Regel nach jedem Schreiben von Daten sowie beim Auslesen von Daten als Reaktion auf eine Leseanforderung oder während interner Verwaltungsvorgänge, wie weiter unten erläutert wird. Wenn ein Streifen Seiten- oder Blockfehler enthält, die durch den C1-Fehlerkorrekturprozess nicht behoben werden können, wird von der Flash-Steuereinheit 10 die folgende Prozedur durchgeführt. Dabei wird aus demselben Speicherbereich 8 wie der Streifen, welcher den Fehler enthält, ein neuer Streifen ausgewählt. Dieser Streifen ersetzt den „unbrauchbaren Streifen“ in der betreffenden Breite. Die anderen Streifen in der Breite werden aus den Adress-Metadaten in dem Speicher 13 ermittelt, und der Inhalt dieser Streifen wird gelesen. Der Inhalt des unbrauchbaren Streifens wird gelesen, und der Inhalt der anderen Streifen in der Breite wird verwendet, um fehlerhafte Daten in dem unbrauchbaren Streifen anhand des C2-Codieralgorithmus wiederherzustellen. Die wiederhergestellten (fehlerkorrigierten) Daten werden dann in den Ersatz-Streifen geschrieben, und die Adress-Metadaten werden aktualisiert, um die geänderte Breiten-Struktur widerzuspiegeln. Anschließend wird in jeder Seite des alten, unbrauchbaren Streifens die PI-Markierung gesetzt um anzugeben, dass der Inhalt dieser Seiten ungültig ist. Diese Seiten werden bei einem darauffolgenden Speicherbereinigungsprozess für eine erneute Nutzung rückgewonnen.
-
Neben dem Speichern der C2-Codes als Bestandteil der Breiten in dem Speicher 6 berechnet die Flash-Steuereinheit während des Schreibens einzelner Breiten auch C2-Teilcodes. Diese Teilcodes werden in aufeinanderfolgenden Phasen während des Schreibens von Eingabedaten in die Streifen einer jeden Breite berechnet, wobei dies bevorzugt erfolgt, nachdem jede Seite eines Streifens geschrieben wurde. Konkret wird nach jedem Seiten-Schreibvorgang die C2-Codierung auf die Eingabedaten angewendet, die bis dahin in der Breite gespeichert waren, um so einen vorübergehenden Fehlerkorrektur-Code oder eine „vorübergehende Parität“ für die teilweise vervollständigte Breite zu erhalten. Diese vorübergehende Parität wird von der Steuereinheit 10 gespeichert, wie in dem Speicher 13 aus 2 angegeben. In der Praxis kann die bestimmte Speicherkomponente, welche die vorübergehende Parität speichert, ein Register einer fest verdrahteten C2-Codiereinheit-Schaltung sein. Diese vorübergehende Parität kann bei Bedarf verwendet werden, um bei Fehlern in teilweise vervollständigten Breiten eine Fehlerwiederherstellung zu ermöglichen. Wenn die Flash-Steuereinheit 10 eine Unterbrechung der Stromversorgung der Steuervorrichtung 7 feststellt, kopiert die Steuereinheit zusätzlich den vorübergehenden Fehlerkorrektur-Code (zusammen mit den anderen Metadaten, einschließlich der momentanen Adressabbildung im Speicher 13) vor dem Herunterfahren in eine verfügbare Region des Flash-Speichers 6. Die vorübergehende Parität kann somit bei einem Stromausfall aufrechterhalten werden und bietet damit Schutz gegen gleichzeitige Stromausfall- und Speichereinheit/Speicherkanal-Fehler.
-
Während die Daten nach dem oben erläuterten Write-out-of-place-Schema in dem Flash-Speicher 6 aktualisiert werden, setzt die Flash-Steuereinheit 10 die PI-Markierung für eine beliebige Seite, die durch eine LBA-Überschreibung aktualisiert wurde. Die PI-Markierung wird entsprechend auch für Seiten gesetzt, die Daten enthalten, welche von einem Host gelöscht wurden. Die Speichersteuereinheit 10 verwaltet außerdem für jede Breiten-Gruppe einen Zählwert, der die Anzahl der ungültigen Seiten in der gesamten Breiten-Gruppe angibt. Diese PI-Zählwerte für Breiten-Gruppen werden als Teil der in dem Speicher 13 verwalteten Metadaten aufgezeichnet. Die PI-Zählwerte werden bei internen Verwaltungsvorgängen verwendet, die von der Steuereinheit 10 wie weiter unten beschrieben durchgeführt werden.
-
Obwohl der Speicher 6 für die oben beschriebene C2-Codierung logisch untergliedert ist, werden interne Verwaltungsfunktionen für den gesamten Speicher durchgeführt. Das heißt, die Flash-Steuereinheit 10 behandelt zu internen Verwaltungszwecken alle Teilbereiche (die n Speicherkanäle) als eine einzige Speichereinheit. Hierfür sind interne Verwaltungsfunktionen, die das Löschen von Blöcken beinhalten, wie beispielsweise Speicherbereinigung und Ausgleichen der nachlassenden Leistungsfähigkeit, so gestaltet, dass die teilbereichübergreifende C2-Codierung ermöglicht wird. Konkret erfolgt die Wiederherstellung von gültigen Daten während eines derartigen Prozesses auf der Grundlage einer Breiten-Gruppe anstelle auf der Grundlage von Blöcken. Bevor ein Block gelöscht wird, werden gültige Eingabedaten von der oder von jeder Breite in der Breiten-Gruppe wiederhergestellt, die Schreib-Speicherstellen in dem Block enthält. Dieser Vorgang wird weiter unten mit Blick auf 6 für den Prozess der Speicherbereinigung ausführlicher beschrieben.
-
Der Ablaufplan aus 6 zeigt wichtige Schritte des in der SSD 5 durchgeführten Speicherbereinigungsprozesses. Wenn die Speicherbereinigung aktiviert wird (dargestellt durch Schritt 20 in der Figur), wählt die Flash-Steuereinheit 10 zunächst die zu löschenden Blöcke aus. Diese in Schritt 21 durchgeführte Auswahl beruht auf den PI-Zählwerten, die in dem Speicher 13 für Breiten-Gruppen gespeichert sind. Konkret können die Blöcke in Breiten-Gruppen mit den höchsten PI-Zählwerten zuerst für eine erneute Nutzung ausgewählt werden. Nachdem eine Breiten-Gruppe ausgewählt wurde, stellt die Flash-Steuereinheit in Schritt 22 alle noch gültigen Daten aus den Seiten der Breiten-Gruppe wieder her. Auf diese Weise werden Daten aus allen Seiten in der Breiten-Gruppe ausgelesen, für welche die betreffenden PI-Markierungen nicht gesetzt wurden. Die auf den C1- und C2-Codes beruhende Fehlerkorrektur-Verarbeitung kann bei diesem Prozess nach Bedarf durchgeführt werden. Die damit wiederhergestellten Daten werden dann als Eingabedaten zurückgegeben, um in dem Flash-Speicher 6 erneut gespeichert zu werden. Auf diese Weise werden die wiederhergestellten Daten in neuen Breiten von neuem gespeichert, wie in Schritt 23 dargestellt. In Schritt 24 aktualisiert die Flash-Steuereinheit 10 die Adressabbildung in dem Speicher 13, um die neuen Datenspeicherstellen widerzuspiegeln. Die Blöcke der alten, erneut nutzbar gemachten Breiten-Gruppe können dann von der Flash-Steuereinheit 10 gelöscht werden, wie aus Schritt 25 hervorgeht. Löschvorgänge von Blöcken können sofort oder zu einem beliebigen späteren Zeitpunkt durch die Steuereinheit 10 durchgeführt werden, um diese Blöcke für eine Speicherung neuer Daten freizugeben.
-
Aus dem Vorangegangenen ist zu erkennen, dass während der Speicherbereinigung alle Streifen einer Breiten-Gruppe gemeinsam erneut nutzbar gemacht werden. Dasselbe Prinzip lässt sich auf jeden internen Verwaltungsprozess anwenden, z.B. den Ausgleich der nachlassenden Leistungsfähigkeit, wobei vor dem Löschen von Blöcken Daten innerhalb des Flash-Speichers verschoben werden. Im Rahmen der normalen Überwachungsfunktion der Steuereinheit 10 können Blöcke, bei denen Probleme mit der Lebensdauer auftreten können (zu viele C1-Fehler), während des Prozesses der erneuten Nutzbarmachung erkannt und als „unbrauchbare Blöcke“ markiert werden. Diese Markierung kann auf Grundlage eines Blockfehler-Zählwerts erfolgen, der von der Flash-Steuereinheit 10 als Teil der Metadaten verwaltet wird, die in dem Speicher 13 gespeichert sind. Blöcke, die auf diese Art und Weise als unbrauchbar markiert sind, werden von der Steuereinheit 10 nicht für eine spätere Datenplatzierung verwendet.
-
Aus dem Vorangegangenen ist offensichtlich, dass im Gegensatz zu RAID-ähnlichen Systemen nach dem Stand der Technik die C2-Codierung in der SSD 5 auf Ebene des physischen Blocks erfolgt, wobei der gesamte Speicherbereich zum Zweck der internen Verwaltung als eine einzige Einheit verwaltet wird. Der auf PBA-Ebene durchgeführte C2-Codierungsvorgang ist für die LBA/PBA-Abbildung transparent und bietet Schutz gegen vollständige Ausfälle, die auf Seiten-, Block-, Bank- und Kanal-Ebene stattfinden. Die Verwendung von vorübergehenden C2-Codes wie oben beschrieben stellt auch eine Widerstandsfähigkeit gegen den gleichzeitigen Ausfall von Stromversorgung und Einheit bereit. Indem die C2-Codierung wie oben beschrieben in enger Koppelung mit der internen Verwaltungsfunktion erfolgt, erzielt die SSD 5 verbesserte Fehlerraten mit einer außergewöhnlich hohen Gesamtleistung.
-
Dabei wird die Fehlerleistung insbesondere verbessert, ohne dass es zu den Nachteilen einer Codierung auf höherer Ebene in Form von Schreib-Vervielfachung und Leistungseinbußen kommt. Zur Veranschaulichung lässt sich die SSD 5 mit einem RAID-ähnlichen System auf der Grundlage von SSDs des oben beschriebenen Typs vergleichen, indem angenommen wird, dass in jedem Fall ein Kanal für die Redundanz verwendet wird. Wenn im SSD 5 der Kanal n ausschließlich C2-Codes zugeordnet ist, lässt sich w1 als Schreib-Vervielfachung aufgrund der internen Verwaltung (Speicherbereinigung und Ausgleich der nachlassenden Leistungsfähigkeit) definieren. Wenn aus Gründen der Vereinfachung jeder Streifen nur eine Seite enthält, führt jeder Seiten-Schreibvorgang zu (1+1)/(n-1)w1 Seiten-Schreibvorgängen, da die Steuereinheit eine Paritätsseite für (n-1) Seiten berechnet, d.h. eine Seite aus jedem Kanal. Wenn w2 die Schreib-Vervielfachung aufgrund von Speicherbereinigung und Ausgleichen der nachlassenden Leistungsfähigkeit angibt, dann führt im Gegensatz hierzu bei dem RAID-ähnlichen System jeder Seiten-Schreibvorgang zu 2w2 Seiten-Schreibvorgängen, d.h. zu einer Datenseite und einer RAID-Paritätsseite. Zudem gilt, dass w1< w2 ist, da die interne Verwaltung „global“ erfolgt, indem alle Speicherkanäle als ein einheitlicher Speicherbereich behandelt werden.
-
Die Leistungsfähigkeit lässt sich weiter verbessern, indem die Größe von C2-Breiten und -Streifen sowie die Beziehung zwischen der Streifen-Größe und der LBA-Größe bezogen auf den jeweiligen Fall angemessen ausgewählt werden. Der Fachmann erkennt, dass derartige Überlegungen ähnlich denjenigen bei RAID-Anwendungen sind. Bei einigen Ausführungsformen der Erfindung kann die Flash-Steuereinheit so gestaltet sein, dass die Größe von C2-Streifen und C2-Breiten während des Betriebs dynamisch angepasst wird. So könnte die Flash-Steuereinheit z.B. abhängig von vorgegebenen Kriterien, z.B. abhängig von der Größe einer Schreibanforderung, zwischen verschiedenen Streifen/Breiten-Größen wechseln. Zudem könnte die Breiten-Länge verringert werden, wenn die Blöcke z.B. aufgrund von nachlassender Leistungsfähigkeit und Alterung immer weniger zuverlässig werden. Entsprechende Anpassungen der beschriebenen Ausführungsform sind für den Fachmann offensichtlich.
-
Es dürfte deutlich geworden sein, dass an den obigen Ausführungsformen zahlreiche weitere Änderungen und Anpassungen vorgenommen werden können. So könnten - obwohl die logischen Teilbereiche für die C2-Codierung an den Speicherkanälen in der SSD 5 ausgerichtet sind - diese Teilbereiche generell auch ein beliebiger Teilsatz des verfügbaren Speichers sein. Die Teilbereiche könnten z.B. alternativ aus den entsprechenden Flash-Speicherplättchen 9 aus 2 bestehen. Außerdem könnten die C2-Codes selbstverständlich auch in einem beliebigen Speicherteilbereich gespeichert werden, wobei dieser nicht für alle Breiten identisch sein müsste. Darüber hinaus müssen einzelne C2-Codewörter nicht zwingend alle Teilbereiche umspannen. Bei der Einheit 5 könnten die C2-Breiten z.B. alternativ eine Vielzahl von Kanälen umspannen, die weniger als die Gesamtzahl n beträgt, wobei die Gruppe von Breiten insgesamt auf alle Kanäle verteilt sein könnte. Wenn ein neuer Streifen ausgewählt wird, um einen unbrauchbaren Streifen im Rahmen des C2-Fehlerkorrekturprozesses zu ersetzen, kann der neue Streifen in diesem Fall aus demselben Speicherkanal oder aus einem beliebigen anderen Kanal ausgewählt werden, der nicht bereits einen Streifen derselben Breite enthält. Auch die Breiten-Länge kann verringert werden, so dass Breiten weniger Kanäle umspannen, wenn die Zuverlässigkeit von Blöcken, wie oben beschrieben, nachlässt.
-
Die Bereitstellung einer C1-Codierung ist zwar wünschenswert, für die Funktion der Ausführungsformen der Erfindung jedoch nicht notwendig. Außerdem kann die Erfindung, obwohl konkret eine NAND-Flash-Einheit beschrieben wurde, auch auf andere Arten von SSD angewendet werden.
-
An den oben beschriebenen beispielhaften Ausführungsformen können zahlreiche weitere Änderungen und Anpassungen vorgenommen werden, ohne vom Geltungsumfang der Erfindung abzuweichen.