-
Hintergrund
-
Um beim Schreiben von einer Halbleitervorrichtung (SSD) auf eine herkömmliche Speichervorrichtung (z. B. eine Festplatte) das bestmögliche Leistungsverhalten zu erhalten, können Schreibvorgänge entsprechend ihrer logischen Blockadresse (LBA) gereiht werden. Je länger ein kontinuierliches Durchlaufen von Adressen während eines Schreibvorgangs ist, desto besser kann das Leistungsverhalten sein. Die Länge eines Durchlaufens von Adressen, die Schreibvorgänge von einem SSD auf einen herkömmlichen Speicher erfordern, kann allerdings davon abhängen, welche Abschnitte des SSD-Speichers Modifikationen aufweisen, die dem herkömmlichen Speicher noch nicht zugewiesen wurden (z. B. schmutzige Blöcke). Ein effizientes Auffinden solcher schmutzigen Blöcke in einem SSD (z. B. umfassend einen Flash-Speicher), um Blöcke zu identifizieren, die Schreibvorgänge auf einen Speicher erfordern (z. B. Leeren), ist eine Herausforderung.
-
Zusammenfassung
-
Es werden Techniken zur Verbesserung von Flash-Speicher-Leerung offenbart. In einigen Ausführungsformen können die Techniken als ein Verfahren zur Verbesserung von Flash-Speicher-Leerung durchgeführt werden, welches das Empfangen einer Anfrage zum Schreiben auf den Flash-Speicher; das Schreiben von Daten, die der Anfrage zugeordnet sind, auf den Flash-Speicher; das Identifizieren eines Zeigers auf eine Region-Bitmap, die einer Schreibregion für die Anfrage entspricht; das Markieren eines Bits der der Anfrage entsprechenden Region-Bitmap als schmutzig und das Aktualisieren des Zeigers auf die Region-Bitmap unter Verwendung einer Zeigerverwaltungskomponente, sodass er einen Zählwert schmutziger Blöcke enthält, umfasst.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform kann das Aktualisieren des Zeigers auf die Region-Bitmap, sodass er einen Zählwert schmutziger Blöcke enthält, das Aktualisieren von einem oder mehreren Bits höherer Ordnung des Zeigers umfassen, sodass er den Zählwert schmutziger Blöcke enthält.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann der Zeiger einen Zeiger mit 48 signifikanten unteren Bits und 16 Bits höherer Ordnung umfassen, wobei der Zählwert schmutziger Blöcke in den 16 Bits höherer Ordnung gespeichert ist.
-
Gemäß anderen Aspekten dieser Ausführungsform kann das Markieren eines Bits der Region-Bitmap, die der Anfrage entspricht, als schmutzig das Aktualisieren der Bits höherer Ordnung des Zeigers, sodass er einen Wert eines letzten signifikanten Bits des Zeigers umfasst, und das Verwenden des aktualisierten Zeigers zur Identifizierung der Region-Bitmap umfassen.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform kann der Zeiger einen von einem Array von Zeigern umfassen, wobei das Array von Zeigern durch einen Zählwert schmutziger Blöcke in jedem der Zeiger geordnet ist.
-
Gemäß weiteren Aspekten dieser Ausführungsform können die Techniken das Identifizieren einer schmutzigsten Region von einer Vielzahl von Regionen des Flash-Speichers unter Verwendung des geordneten Arrays von Zeigern und das Schreiben von einem oder mehreren Blöcken der schmutzigsten Region auf den herkömmlichen Speicher umfassen.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann das Schreiben von einem oder mehreren Blöcken auf den herkömmlichen Speicher durch Detektion von einem oder mehreren Faktoren getriggert werden.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform können der eine oder die mehreren Faktoren mindestens eines von: einer bestimmten Schwelle von erreichten schmutzigen Blöcken, einem CPU-Nutzungsgrad, einem Netzwerknutzungsgrad, einem Eingangs-/Ausgangswert eines herkömmlichen Speichers, einem zeitbedingten Entfernen von einem oder mehreren Blöcken aus dem Cache und einer vom Benutzer bestimmten Präferenz umfassen.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann das Schreiben eines oder mehrerer Blöcke der schmutzigsten Region auf einen herkömmlichen Speicher das Verwenden einer Basisadresse einer Region-Bitmap und eines Offsets, das einem Bit der Region-Bitmap zugeordnet ist, zur Identifizierung einer logischen Blockadresse, die auf einen herkömmlichen Speicher zu schreibenden Daten zugeordnet ist, umfassen.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform können die Techniken nach dem Schreiben eines oder mehrerer, einer ersten Region zugeordneter Blöcke das Identifizieren eines zweiten Zeigers im Array von Zeigern, der einer zweiten schmutzigsten Region zugeordnet ist, umfassen.
-
Gemäß weiteren Aspekten dieser Ausführungsform wird, wenn einer oder mehrere Blöcke, die einem ersten Zeiger zugeordnet sind, auf einen herkömmlichen Speicher geschrieben werden, ein Offset des zweiten Zeigers zu einem Ausgangspunkt des Arrays.
-
In weiteren Ausführungsformen können die Techniken als Produkt eines nichtflüchtigen Computerprogramms umgesetzt sein, das eine Reihe von auf einem Computer ausführbaren Befehlen umfasst. Das Produkt eines nichtflüchtigen Computerprogramms kann einen Prozess zur Verbesserung von Flash-Memory-Leerung ausführen. Das Computerprogramm kann die Schritte des Empfangens einer Anfrage zum Schreiben auf den Flash-Speicher; des Schreibens von Daten, die der Anfrage zugeordnet sind, auf den Flash-Speicher; des Identifizierens eines Zeigers auf eine Region-Bitmap, die einer Schreibregion für die Anfrage entspricht; des Markierens eines Bits der der Anfrage entsprechenden Region-Bitmap als schmutzig und des Aktualisierens des Zeigers auf die Region-Bitmap, sodass er einen Zählwert schmutziger Blöcke enthält, umfassen.
-
In noch weiteren Ausführungsformen können die Techniken als ein System zur Verbesserung der Flash-Speicher-Leerung umgesetzt sein. Das System kann eine Speichermedienvorrichtung und eine PCIe-basierte Vorrichtungssteuerung, die der Speichermedienvorrichtung zugeordnet ist, umfassen. Die PCIe-basierte Vorrichtungssteuerung kann konfiguriert sein, um eine Anfrage zum Schreiben auf den Flash-Speicher zu empfangen; die Anfrage auf den Flash-Speicher zu schreiben; einen Zeiger auf eine Region-Bitmap, die einer Schreibregion für die Anfrage entspricht, zu identifizieren; ein Bit der der Anfrage entsprechenden Region-Bitmap als schmutzig zu markieren und den Zeiger auf die Region-Bitmap zu aktualisieren, sodass er einen Zählwert schmutziger Blöcke enthält.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform kann das Aktualisieren des Zeigers auf die Region-Bitmap, sodass er einen Zählwert schmutziger Blöcke enthält, das Aktualisieren von einem oder mehreren Bits höherer Ordnung des Zeigers umfassen, sodass er den Zählwert schmutziger Blöcke enthält.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann der Zeiger einen Zeiger mit 48 signifikanten unteren Bits und 16 Bits höherer Ordnung umfassen, wobei der Zählwert schmutziger Blöcke in den 16 Bits höherer Ordnung gespeichert ist.
-
Gemäß anderen Aspekten dieser Ausführungsform kann das Markieren eines Bits der Region-Bitmap, die der Anfrage entspricht, als schmutzig das Aktualisieren der Bits höherer Ordnung des Zeigers, sodass er einen Wert eines letzten signifikanten Bits des Zeigers enthält, und das Verwenden des aktualisierten Zeigers zur Identifizierung der Region-Bitmap umfassen.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform kann der Zeiger einen von einem Array von Zeigern umfassen, wobei das Array von Zeigern durch einen Zählwert schmutziger Blöcke in jedem der Zeiger geordnet ist.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann die PCIe-basierte Vorrichtungssteuerung ferner konfiguriert sein, um eine schmutzigste Region von einer Vielzahl von Regionen des Flash-Speichers unter Verwendung des geordneten Zeigerarrays zu identifizieren und einen oder mehrere Blöcke der schmutzigsten Region auf den herkömmlichen Speicher zu schreiben.
-
Gemäß weiteren Aspekten dieser Ausführungsform kann das Schreiben von einem oder mehreren Blöcken auf den herkömmlichen Speicher durch Detektion von einem oder mehreren Faktoren getriggert werden.
-
Gemäß zusätzlichen Aspekten dieser Ausführungsform können der eine oder die mehreren Faktoren mindestens eines von: einer bestimmten Schwelle von erreichten schmutzigen Blöcken, einem CPU-Nutzungsgrad, einem Netzwerknutzungsgrad, einem Eingangs-/Ausgangswert eines herkömmlichen Speichers, einem zeitbedingten Entfernen von einem oder mehreren Blöcken aus dem Cache und einer vom Benutzer bestimmten Präferenz umfassen.
-
Die vorliegende Offenbarung wird nun in Bezug auf beispielhafte Ausführungsformen derselben in den beigefügten Zeichnungen detaillierter beschrieben. Zwar wird die vorliegende Offenbarung weiter unten in Bezug auf beispielhafte Ausführungsformen beschrieben, doch gilt es zu verstehen, dass die vorliegende Offenbarung nicht darauf beschränkt ist. Fachleute auf dem Gebiet der Technik, die Zugang zu den Erörterungen hierin haben, werden zusätzliche Umsetzungen, Modifikationen und Ausführungsformen sowie weitere Einsatzbereiche erkennen, die innerhalb des Schutzumgangs der vorliegenden Offenbarung wie hier beschrieben liegen und in Bezug auf die die vorliegende Offenbarung von signifikantem Nutzen sein kann.
-
Kurze Beschreibung der Zeichnungen
-
Um ein umfassendes Verständnis der vorliegenden Offenbarung zu erleichtern, wird nun auf die beigefügten Zeichnungen hingewiesen, in denen auf gleiche Elemente mit den gleichen Bezugszeichen verwiesen wird. Diese Zeichnungen sollten nicht als die vorliegende Offenbarung einschränkend ausgelegt werden, sondern sollen nur beispielhaft sein.
-
1 ist ein Blockdiagramm, das eine Vielzahl von PCIe-Vorrichtungen in Kommunikation mit einer Hostvorrichtung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
2A ist ein Blockdiagramm, das ein Modul zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
2B ist ein Flussdiagramm, das ein Verfahren zur Verwendung einer Bitmap zum Speichern von zu schreibenden Blöcken gemäß einer Ausführungsform der vorliegenden Erfindung veranschaulicht.
-
2C ist ein Flussidagramm, das ein Verfahren, um als erstes eine schmutzigste Region zurückzuschreiben, gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
2D ist ein Flussdiagramm, das ein Verfahren zum Sortieren von Regionen gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
3 ist ein Flussdiagramm, das ein Verfahren zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
4 ist ein Flussdiagramm, das ein Verfahren zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
Beschreibung
-
Die vorliegende Erfindung betrifft Techniken zur Verbesserung des Verlegens von modifizierten Daten von SSD (z. B. umfassend Flash-Speicher) auf herkömmliche Speicher (z. B. Platte, Band usw.).
-
Gemäß einigen Ausführungsformen werden die Schreibvorgänge, wenn sie mit einem Satz von Daten präsentiert werden, die in einer zufälligen Reihenfolge geschrieben wurden, zunächst auf einem Direktzugriffs-freundlichen Halbleiterspeicher gespeichert. Datenstrukturen, Algorithmen und/oder Schaltungen (z. B. (Mikro-)Prozessor, Logikschaltungen, Schalter, eine anwendungsspezifische integrierte Schaltung (ASIC), eine programmierbare logische Steuerung (z. B. FPGA) und eine eingebettete Mikrosteuerung), können bereitgestellt sein, um zu ermöglichen, dass diese Schreibvorgänge geordnet, mit einer verbesserten Wahrscheinlichkeit von kontinuierlichem Durchlaufen von logischen Blockadressen, wieder auf einen herkömmlichen Speicher geschrieben werden können.
-
Um zu den Zeichnungen zu kommen, ist 1 ein Blockdiagramm, das eine Vielzahl von PCIe-Vorrichtungen in Kommunikation mit einer Hostvorrichtung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. 1 enthält eine Anzahl von Rechentechnologien, wie ein Hostsystem 102, eine Host-CPU 104 und einen PCI-Express-Root-Complex 106. Ein Schalter 108 kann eine Vielzahl von Zielobjekten (z. B. PCIe-Vorrichtungen, wie einem NVMe-basierten Zielobjekt), wie Zielobjekte 110, 116 und 122, über den PCI-Express-Root-Complex 106 mit dem Hostsystem 102 kommunikativ verbinden.
-
Das Zielobjekt 110 kann eine Steuerung 112 (z. B. eine NVME-Steuerung) und einen nichtflüchtigen Speicher 114 umfassen. Das Zielobjekt 116 kann eine Steuerung 118 (z. B. eine NVMe-Steuerung) und einen nichtflüchtigen Speicher 120 umfassen. Das Zielobjekt 122 kann eine Steuerung 124 (z. B. eine NVMe-Steuerung) und einen nichtflüchtigen Speicher 126 umfassen.
-
Speicherbasierte Ressourcen können für das Hostsystem 102 über eine Speicherschnittstelle (z. B. synchroner dynamischer Direktzugriffspeicher Double-Data-Rate-Type-Three (DDR3 SDRAM)) zugänglich sein. Der Speicher kann jede geeignete Form aufweisen, wie z. B., aber nicht ausschließlich, Halbleiterspeicher (z. B. Flash-Speicher oder Halbleitervorrichtung (SSD)), optischer Speicher und Magnetspeicher.
-
Gemäß einigen Ausführungsformen können andere Schnittstellenstandards als PCIe für einen oder mehrere Abschnitte verwendet werden, darunter, aber nicht ausschließlich, Serial Advanced Technology Attachment (SATA), Advanced Technology Attachment (ATA), Small Computer System Interface (SCSI), PCI-extended (PCI-X), Fibre Channel, Serial Attached SCSI (SAS), Secure Digital (SD), Embedded Multi-Media Card (EMMC) und Universal Flash Storage (UFS).
-
Das Hostsystem 102 kann jede geeignete Form aufweisen, darunter, aber nicht ausschließlich, einen Unternehmensserver, einen Datenbank-Host, einen Arbeitsplatz, einen Personal Computer, ein Mobiltelefon, eine Spielvorrichtung, ein persönlicher digitaler Assistent (PDA), eine E-Mail-/Textnachrichtenvorrichtung, eine Digitalkamera, ein digitaler Medien-(z. B. MP3-)Player, eine GPS-Navigationsvorrichtung und ein TV-System.
-
Das Hostsystem 102 und die Zielvorrichtung können zusätzliche Komponenten umfassen, die in 1 aus Gründen der Vereinfachung der Zeichnung nicht gezeigt sind. Auch sind in einigen Ausführungsformen nicht alle der gezeigten Komponenten vorhanden. Ferner können die verschiedenen Steuerungen, Blöcke und Schnittstellen auf jede geeignete Weise umgesetzt sein. Zum Beispiel kann eine Steuerung die Form von einem oder mehreren von einem Mikroprozessor oder Prozessor und einem computerlesbaren Medium, das computerlesbaren Programmkode (z. B. Software oder Firmware) speichert, der durch den (Mikro-)Prozessor, Logikschaltungen, Schalter, eine anwendungsspezifische integrierte Schaltung (ASIC), eine programmierbare logische Steuerung (z. B. FPGA) und eine eingebettete Mikrosteuerung ausführbar ist, aufweisen.
-
2A ist ein Blockdiagramm, das ein Modul zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Komponenten können Hardware (z. B. dedizierte Schaltung), Firmware, Software oder eine Kombination der genannten sein.
-
In der nachstehenden Beschreibung werden Netzwerkelemente, Computer und/oder Komponenten eines Systems und Verfahrens für Back-up und Wiederherstellung erörtert, die eine oder mehrere Komponenten umfassen können. Der Begriff „Komponente”, wie hier verwendet, bezieht sich auf Rechensoftware, Firmware, Hardware und/oder verschiedene Kombinationen davon. Komponenten sind jedoch nicht als Software zu verstehen, die nicht auf Hardware oder Firmware umgesetzt oder auf einem Prozessor-lesbaren, aufzeichenbaren Speichermedium aufgezeichnet ist (d. h. Komponenten sind nicht Software für sich). Die Komponenten sind beispielhafter Natur. Die Komponenten können kombiniert, integriert, getrennt und/oder dupliziert sein, um verschiedene Anwendungen zu unterstützen. Auch kann eine Funktion, die als in einer bestimmten Komponente durchgeführt beschrieben ist, von einer oder mehreren weiteren Komponenten und/oder von einer oder mehreren weiteren Vorrichtungen anstatt oder zusätzlich zu der in der bestimmten Komponente durchgeführten Funktion durchgeführt werden. Ferner können die Komponenten in zahlreichen Vorrichtungen und/oder sonstigen Komponenten lokal oder entfernt zueinander umgesetzt sein. Darüber hinaus können die Komponenten von einer Vorrichtung verschoben und zu einer weiteren Vorrichtung hinzugefügt werden, und/oder in beiden Vorrichtungen enthalten sein. In einigen Ausführungsformen können eine oder mehrere Komponenten als Teil einer SSD-Steuerung, eines Host-Systems und/oder einer SSD-Optimierungssoftware umgesetzt sein. Wie in 2A gezeigt, können Komponenten 210 zur Verbesserung der SSD-Leerung eine Schreibvorgangsüberwachungskomponente 212, eine Komponente 214 zur Identifizierung schmutziger Regionen, eine Arrayverwaltungskomponente 216 und eine Fehlerprotokollierungs- und Berichterstattungskomponente 218 umfassen.
-
Die Schreibvorgangsüberwachungskomponente 212 kann Daten verfolgen, die auf einen SSD (z. B. Flash-Speicher), aber noch nicht auf einen herkömmlichen Speicher (z. B. schmutziger Speicher) geschrieben wurden. Jeden Block oder jede sonstige Einheit durchzugehen, um ihn/sie mit Sicherungsspeichern (z. B. Platte) zu vergleichen, um veränderte Blöcke zu identifizieren, kann ressourcen- und/oder zeitintensiv sein. In einigen Ausführungsformen kann die Schreibvorgangsüberwachungskomponente 212, wenn ein Abschnitt des SSD-Speichers modifiziert wird, die Schreibvorgänge unter Verwendung von einer oder mehreren Datenstrukturen und/oder Schaltungen auffinden. Zum Beispiel kann die Schreibvorgangsüberwachungskomponente 212 in einigen Ausführungsformen eine Bitmap verwenden, um Blöcke, die für jede Region zu schreiben sind, zu speichern. Herkömmliche Sicherungsspeichervorrichtungen können in Regionen mit fixierter Größe unterteilt sein. Zum Beispiel kann jede Region 32768 Blöcke umfassen, wobei jeder Block vier Kilobytes groß sein kann.
-
2B ist ein Flussdiagramm, das ein beispielhaftes Verfahren 220 zur Verwendung einer Bitmap zum Speichern von zu schreibenden Blöcken veranschaulicht. Gemäß einigen Ausführungsformen kann die Arrayverwaltungskomponente 216, wenn ein System gestartet wird, jeder Region ein Array von Zeigern 222 zuweisen und das Array auf NULL Werte 224 parametrieren. Wenn eine Region erstmals beschrieben wird, kann eine Speicherseite von 4 Kilobyte zugewiesen 226 und ein Zeiger für diese Region aktualisiert werden, um zur neu zugewiesenen Speicherseite zu zeigen 228.
-
In einem Beispiel umfasst eine 4-Kilobyte-Speicherseite 32768 einzelne Speicherbits. Dieser Speicher kann als Bitmap verwendet werden. Wenn ein Block zunächst auf einen temporären Direktzugriffspeicher geschrieben wird, kann seine logische Blockadresse vorerst maskiert und verschoben sein, um die geeignete Region 230 zu bestimmen. Nach der Zuweisung kann von der Schreibvorgangsüberwachungskomponente 212 ein Zeiger verwendet werden, um die Bitmap für eine Region 232 zu lokalisieren. Zum Beispiel kann eine SSD-Speicherstelle, sobald sie zugewiesen ist, einem Zeiger, Wert oder Verweis zugeordnet werden, der eine Stelle einer Bitmap, Hashmap oder sonstigen Datenstruktur anzeigt, die Hinweise darüber speichert, welche Bits im SSD-Speicher noch nicht auf den herkömmlichen Speicher geschrieben wurden. Die Bits niedrigerer Ordnung (z. B. signifikant niedrigere Bits) der logischen Blockadresse für einen Block, der auf den temporären Direktzugriffspeicher geschrieben wurde, kann dann als Offset in die Bitmap verwendet werden, um ein entsprechendes Bit zu lokalisieren. In einigen Ausführungsformen erfordert dies möglicherweise kein Suchen, sondern nur Vorgänge über eine konstante Zeit (d. h. eine Zeit, die zum Abschluss der Vorgänge erforderlich ist, kann von einer Größe der Eingabe unabhängig sein), um einen Block als „schmutzig” (z. B. ein zukünftiges Zurückschreiben auf den herkömmlichen Speicher erfordernd) zu markieren.
-
Die Komponente 214 zur Identifizierung von schmutzigen Regionen kann bestimmen, wann schmutzige Abschnitte eines SSD auf einen herkömmlichen Speicher zu verlegen sind und/oder welche Abschnitte in welcher Reihenfolge zu verlegen sind. In einigen Ausführungsformen sind lange sequenzielle Durchlaufe von Schreibvorgängen auf einem konventionellen Speicher wünschenswert. Um dies zu erreichen, können Schreibvorgänge auf einen herkömmlichen Speicher durchgeführt werden, sobald eine oder mehrere Regionen eines SSD ausreichend schmutzig sind (z. B. eine signifikante Anzahl an sequenziellen schmutzigen Blöcken enthalten). Die Bestimmung, wann eine oder mehrere Regionen ausreichend schmutzig sind, kann von einem oder mehreren Faktoren abhängig und konfigurierbar sein (z. B. eine Anzahl, ein Prozentsatz oder ein sonstiger Indikator einer Menge von schmutzigen Blöcken in einer Region). Um die Wahrscheinlichkeit, dass eine Region ausreichend schmutzig ist, um geleert zu werden, zu verbessern, kann die Komponente 214 zur Identifizierung von schmutzigen Regionen eine schmutzigste Region identifizieren, die als erste zu schreiben ist.
-
2C ist ein Flussidagramm, das ein beispielhaftes Verfahren 234, um als erstes eine schmutzigste Region zurückzuschreiben, gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Wenn es an der Zeit ist, Daten zurück auf den herkömmlichen Speicher zu schreiben, wird die Gruppe von Regionen sortiert 236 und die schmutzigste (am meisten mit Daten, die Schreiben erfordern, belegten) Region wird durch die Komponente 214 zur Identifizierung von schmutzigen Regionen ausgewählt 238. Gemäß einigen Ausführungsformen kann die Arrayverwaltungskomponente 216 die Regionen sortieren.
-
Dem Zeiger für diese Region kann gefolgt werden, um auf die entsprechende Bitmap 240 zuzugreifen. Die Bitmap kann dann vorwärts durchlaufen 242 werden. Die logische Basisblockadresse der Region kann mit dem Offset jedes Bits in der Map kombiniert werden, um die logische Blockadresse auszubilden, die ein Zurückschreiben 244 erfordert.
-
Das Sortieren der Regionen kann herkömmlicher Weise das Zählen aller Bits, die in jeder Bitmap festgelegt sind, umfassen, um einen schmutzigste Region zu identifizieren. Dies kann unvorteilhaft sein, da es eine umfangreiches, CPU-intensives Scannen der Bitmap erfordern kann, um die Anzahl festgelegter Bits zu bestimmen. In einigen Ausführungsformen kann die Schreibvorgangsüberwachungskomponente 212 Platz in einem Zeiger auf eine schmutzige Bitmap einer Region verwenden, um eine Anzahl von Abschnitten schmutzigen Speicherplatzes in einer Region (z. B. eine Anzahl von Bits, die in einem 4-Kilobyte-Bitmapblock festgelegt sind) anzuzeigen. Zum Beispiel können in einer x86_64-Architektur nur 48 Bits von einem 64-Bit-Zeiger signifikant sein. Die Bits höherer Ordnung können Erweiterungen der 48 Bits niedriger Ordnung, z. B. signifikant niedrigeren Bits, sein. Das bedeutet, dass die Bits für die obersten 16 Bits dieselben sein können und dass bei Verlust der Wert von Bit 47 erhalten werden kann. In einigen Ausführungsformen kann die Schreibvorgangsüberwachungskomponente 212 die Anzahl von im Bitmapblock festgelegten Bits in den 16 Bits höherer Ordnung des Zeigers in einem Array von Zeigern speichern. Die Arrayverwaltungskomponente 216 kann eine Bitzahl in jedem Zeiger eines Arrays oder einer sonstigen Datenstruktur von Zeigern (oder sonstigen Referenzstrukturen) verwenden, um ein Array zu sortieren, sodass ein erster Zeiger der schmutzigste ist.
-
2D ist ein Flussdiagramm, das ein beispielhaftes Verfahren 246 zum Sortieren von Regionen gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Die Arrayverwaltungskomponente 216 kann ein kompaktes, sortiertes Array von 4-Byte-Offsets 248 in das Hauptzeigerarray, das einen Zeiger pro Region umfasst, erhalten. Wenn es an der Zeit ist, einige Rückschreibvorgänge auf den herkömmlichen Speicher durchzuführen, kann das Array sortiert werden, ganz ohne den Zeigern zu den Bitmapblöcken zu folgen 250. Dies kann im Wesentlichen den Aufwand verringern, die schmutzigste zurückzuschreibende Region aufzufinden.
-
Um einem Zeiger zu folgen, der modifiziert wurde, um eine Anzahl schmutziger Bits zu speichern, kann der Zeiger wiederhergestellt 252 werden. In einigen Ausführungsformen kann der Zeiger wiederhergestellt werden, indem ein letztes signifikantes Bit in die Bits höherer Ordnung erweitert wird (z. B. durch Kopieren des Werts von Bit 47 in die Bits 48–63). Wenn die Anzahl der in der Bitmap festgelegten Bits angepasst 254 wurde, kann die neue Anzahl in den Bits höherer Ordnung 256 gespeichert werden.
-
In einigen Ausführungsformen kann die Komponente 214 zur Identifizierung von schmutzigen Regionen eine Vielzahl von Regionen ordnen, und einer oder mehrere Faktoren können zusätzlich zu einer Zahl, einem Prozentsatz oder einem sonstigen Indikator einer Menge von schmutzigen Blöcken in einer Region bewertet werden. Zum Beispiel kann das Alter von Daten in einer SSD-Region berücksichtigt werden. Weitere Faktoren können Algorithmen wie Last In First Out (LIFO), First In First Out (FIFO) oder sonstige Techniken zur Bestimmung der zu schreibenden Regionen umfassen. Wenn z. B. eine erste Region schmutziger ist als eine zweite Region, aber die erste Region nach wie vor signifikanten Eingangs-/Ausgangs-(I/O-)Datenverkehr empfängt, kann eine zweite Region in einigen Ausführungsformen zuerst geschrieben werden.
-
Die Arrayverwaltungskomponente 216 kann ein Array oder eine sonstige Datenstruktur, das/die Verweise auf Bitmaps, die schmutzige SSD-Regionen anzeigen, erhalten. Gewisse Sortierungsalgorithmen können ein besseres Leistungsverhalten aufweisen, wenn ein Array im Wesentlichen bereits sortiert ist. Eine oder mehrere der oben beschriebenen Ausführungsformen können eine Gruppe von Regionen sortieren, eine schmutzigste Region hernehmen und diese vollständig bereinigen, und den verbleibenden Teil des Arrays in einem sortierten Zustand belassen. Dies kann gut funktionieren, was das Verlegen von schmutzigen Regionen auf einen herkömmlichen Speicher betrifft, weil es der Komponente zur Identifizierung schmutziger Regionen ermöglichen kann, zur nächsten schmutzigsten Region (die in gleichem Maße schmutzig sein kann) überzugehen. Ein im Wesentlichen sortiertes Array mit einem fehlsortierten Block am Anfang kann fehlerhaftes Verhalten an den Tag legen und viele CPU-Vorgänge erfordern, um zur neuen, richtigen Position am Ende des Arrays überzugehen.
-
Um dies zu beheben, kann die Arrayverwaltungskomponente 216 das sortierte Array als kreisförmiges Array behandeln, bei dem Anfang und Ende versetzbar sind. Der sortierte Anfang eines Arrays kann sich im Offset 0 befinden, und das Ende kann das letzte Element des Speicherblocks, der das Array enthält, sein. Sobald die am höchsten gereihte Region bereinigt ist, kann es nach wie vor im Offset 0 vorhanden, aber inkorrekt sortiert sein. Anstatt das Array auf herkömmliche Weise umzusortieren und die Daten zu verschieben, kann die Arrayverwaltungskomponente 216 die sortierten Anfangs- und Endoffsets anpassen, sodass das gesamte kreisförmige Array um eins versetzt wird. Das sortierte Anfangsoffset kann zu 1 werden, und das 0. Element des Arrays kann nun das letzte Element des Arrays sein. Auf diese Weise wird die Region, die auf 0 schmutzige Blöcke reduziert wurde, in einem Vorgang über konstante Zeit zur richtigen Position am Ende des Arrays umsortiert, wobei das Array ansonsten sortiert bleibt.
-
Die Fehlerprotokollierungs- und Berichterstattungskomponente 218 kann Fehler erkennen und Fehler, die der Überwachung von Schreibanfragen, der Identifizierung von schmutzigen Regionen und/oder der Verwaltung von Datenstrukturen, die schmutzige Regionen (z. B. Zeigerarrays) aufspüren, zugeordnet sind, protokollieren. In einigen Ausführungsformen kann die Fehlerprotokollierungs- und Berichterstattungskomponente 218 Fehlerbenachrichtigungen bereitstellen.
-
3 ist ein Flussdiagramm, das ein Verfahren zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt. Der Prozess 300 hat allerdings nur beispielhaften Charakter. Der Prozess 300 kann verändert werden, z. B. durch Hinzufügen, Ändern, Entfernen oder Umordnen von Schritten. Der Prozess kann mit Schritt 302 beginnen.
-
Bei Schritt 304 kann eine Flash-Speicher-Schreibanfrage empfangen werden. Bei Schritt 306 kann die Schreibanfrage auf eine Flash-Speicher-Region geschrieben werden. Für eine Vielzahl von Regionen eines SSD kann ein Array von Zeigern, einer für jede Region, zugeordnet werden, und jedes Array kann auf NULL Werte parametriert werden.
-
Bei Schritt 308, kann, wenn eine Region zuerst beschrieben wird, eine Speicherseite zugewiesen und ein Zeiger für diese Region aktualisiert werden, um zur neu zugewiesenen Speicherseite zu zeigen.
-
Bei Schritt 310 können, wenn zuvor ein Zeiger zugewiesen und Bits höherer Ordnung des Zeigers überschrieben wurden, um einen Zählwert schmutziger Blöcke zu speichern, die Bits höherer Ordnung wiederhergestellt werden. Zum Beispiel können in einer x86_64-Architektur nur 48 Bits von einem 64-Bit-Zeiger signifikant sein. Die Bits höherer Ordnung können Erweiterungen der 48 Bits niedriger Ordnung, z. B. signifikant niedrigeren Bits, sein. Das bedeutet, dass die Bits für die obersten 16 Bits dieselben sein können und dass bei Verlust der Wert von Bit 47 erhalten werden kann.
-
Bei Schritt 312 kann ein Zeiger nach der Zuweisung verwendet werden, um die Bitmap für eine Region zu finden. Die Bits niedrigerer Ordnung der logischen Blockadresse für einen Block, der auf einen temporären Direktzugriffspeicher geschrieben wurde, kann dann als Offset in die Bitmap verwendet werden, um ein entsprechendes Bit zu lokalisieren. In einigen Ausführungsformen erfordert dies möglicherweise kein Suchen, sondern nur Vorgänge über eine konstante Zeit, um einen Block als „schmutzig” (z. B. ein zukünftiges Zurückschreiben auf den herkömmlichen Speicher erfordernd) zu markieren.
-
Bei Schritt 314 kann Platz in einem Zeiger auf die schmutzige Bitmap der Region verwendet werden, um eine Zahl von Abschnitten schmutzigen Speicherplatzes in einer Region (z. B. eine Anzahl von Bits, die in einem 4-Kilobyte-Bitmapblock festgelegt sind) anzuzeigen. Zum Beispiel können in einer x86_64-Architektur nur 48 Bits von einem 64-Bit-Zeiger signifikant sein. Die Bits höherer Ordnung können Erweiterungen der 48 Bits niedriger Ordnung, z. B. signifikant niedrigeren Bits, sein. Das bedeutet, dass die Bits für die obersten 16 Bits dieselben sein können und dass bei Verlust der Wert von Bit 47 erhalten werden kann. In einigen Ausführungsformen kann die Zahl von Bits, die im Bitmapblock festgelegt sind, in den 16 Bits höherer Ordnung des Zeigers in einem Zeigerarray gespeichert werden.
-
Mit Schritt 316 kann das Verfahren 300 enden.
-
4 ist ein Flussdiagramm, das ein Verfahren zur Verbesserung der Flash-Speicher-Leerung gemäß einer Ausführungsform der vorliegenden Erfindung zeigt.
-
Der Prozess 400 hat allerdings nur beispielhaften Charakter. Der Prozess 400 kann verändert werden, z. B. durch Hinzufügen, Ändern, Entfernen oder Umordnen von Schritten. Der Prozess kann mit Schritt 402 beginnen.
-
Bei Schritt 404 kann ein Array von Zeigern auf schmutzige Region-Bitmaps sortiert werden. Es kann eine Bitzahl in jedem Zeiger eines Arrays oder einer sonstigen Datenstruktur von Zeigern (oder sonstigen Referenzstrukturen) verwenden, um ein Array zu sortieren, sodass ein erster Zeiger der schmutzigste ist.
-
Bei Schritt 406 kann bestimmt werden, ob eine Leerungsschwelle erreicht wurde. Es können einer oder mehrere Faktoren bewertet werden, um zu bestimmen, ob schmutziger SSD-Speicher auf einen herkömmlichen Speicher verlegt werden soll. Die Faktoren können z. B. eines oder mehrere einer spezifizierten Schwelle von erreichten schmutzigen Blöcken, einen CPU-Nutzungsgrad, einen Netzwerknutzungsgrat, einen Eingangs-/Ausgangswert eines herkömmlichen Speichers, ein zeitbedingtes Entfernen von einem oder mehreren Blöcken aus dem Cache und einer vom Benutzer bestimmten Präferenz umfassen. Wenn bestimmt wird, dass ein Leeren durchgeführt werden soll, kann das Verfahren mit Schritt 408 fortgeführt werden. Wenn bestimmt wird, dass kein Leeren durchgeführt werden soll, kann das Verfahren mit Schritt 414 enden.
-
Bei Schritt 408 kann eine schmutzigste Region identifiziert werden. In einigen Ausführungsformen kann Platz in einem Zeiger auf eine schmutzige Bitmap einer Region eine Anzahl von Abschnitten schmutzigen Speicherplatzes in einer Region (z. B. eine Anzahl von Bits, die in einem 4-Kilobyte-Bitmapblock festgelegt sind) anzeigen. Zum Beispiel können in einer x86_64-Architektur nur 48 Bits von einem 64-Bit-Zeiger signifikant sein. Die Bits höherer Ordnung können Erweiterungen der 48 Bits niedriger Ordnung, z. B. signifikant niedrigeren Bits, sein. Das bedeutet, dass die Bits für die obersten 16 Bits dieselben sein können und dass bei Verlust der Wert von Bit 47 erhalten werden kann. Ein Array von Zeigern auf schmutzige Regionen kann eine Bitzahl in jedem Zeiger eines Arrays oder einer sonstigen Datenstruktur von Zeigern (oder sonstigen Referenzstrukturen) verwenden, um ein Array zu sortieren, sodass ein erster Zeiger der schmutzigste ist.
-
Bei Schritt 410 können schmutzige Blöcke, die einer schmutzigsten Region zugeordnet sind, auf den herkömmlichen Speicher (z. B. Platte, Band usw.) geschrieben werden. In einigen Ausführungsformen können schmutzige Blöcke von einer Bitmap schmutziger Blöcke identifiziert werden, indem eine logische Basisblockadresse einer Bitmap schmutziger Regionen und ein Offset, das einem bestimmten schmutzigen Bit entspricht, verwendet werden, um eine logische Blockadresse für einen dem schmutzigen Bit entsprechenden schmutzigen Block bereitzustellen.
-
Bei Schritt 410 kann bestimmt werden, ob in einem Array von Zeigern auf Bitmaps schmutziger Regionen ein weiterer Bitmap-Zeiger existiert. Wenn keine weiteren Zeiger existieren (z. B. wenn alle schmutzigen Bitmaps größer oder gleich einer Leerungsschwelle auf eine Platte verschoben und in einem Array sortiert wurden), kann das Verfahren 400 mit Schritt 414 enden. Wenn ein weiterer Bitmap-Zeiger für eine schmutzige Region existiert, kann das Verfahren 400 mit Schritt 412 fortgeführt werden.
-
Bei Schritt 412 kann ein Zeiger, der einer nächsten schmutzigsten Bitmap entspricht, als Ausgangspunkt des Arrays markiert werden. Der sortierte Anfang eines Arrays kann sich im Offset 0 befinden, und das Ende kann das letzte Element des Speicherblocks, der das Array enthält, sein. Sobald die am höchsten gereihte Region bereinigt ist (z. B. nach Schritt 408), kann der Regionenzeiger im Offset 0 nach wie vor vorhanden, aber inkorrekt sortiert sein. Anstatt das Array auf herkömmliche Weise umzusortieren und die Daten zu verschieben, kann das Verfahren 400 die sortierten Anfangs- und Endoffsets anpassen, sodass das gesamte kreisförmige Array um eins versetzt wird. Das sortierte Anfangsoffset kann zu 1 werden, und das 0. Element des Arrays kann nun das letzte Element des Arrays sein. Auf diese Weise wird die Region, die auf 0 schmutzige Blöcke reduziert wurde, in einem Vorgang über konstante Zeit zur richtigen Position am Ende des Arrays umsortiert, wobei das Array ansonsten sortiert bleibt. Nachdem ein Arrayanfangselement angepasst wurde, kann das Verfahren 400 zu Schritt 406 zurückkehren.
-
Bei Schritt 414 kann das Verfahren 400 enden.
-
Weitere Ausführungsformen liegen innerhalb des Schutzumfangs und des Geistes der Erfindung. Die oben beschriebenen Funktionen können zum Beispiel unter Verwendung von Software, Hardware, Firmware, Festverdrahtung oder Kombinationen davon umgesetzt werden. Einer oder mehrere Computerprozessoren, die gemäß Anweisungen betrieben werden, können die zugeordneten Funktionen umsetzen, um die Flash-Speicher-Leerung gemäß der vorliegenden Offenbarung wie oben beschrieben zu verbessern. Wenn dies der Fall ist, liegt es innerhalb des Schutzumfangs der vorliegenden Erfindung, dass solche Anweisungen auf einem oder mehreren nichtflüchtigen Prozessor-lesbaren Speichermedium/Speichermedien (z. B. einer Magnetplatte oder einem sonstigen Speichermedium) gespeichert werden können. Ferner können Funktionen umsetzende Module auch physisch in verschiedenen Positionen angeordnet sein, was eine Verteilung einschließt, bei der Abschnitte von Funktionen in verschiedenen physischen Positionen ausgeführt werden.
-
Die vorliegende Erfindung wird von den spezifischen, hier beschriebenen Ausführungsformen nicht in ihrem Umfang eingeschränkt. Für Fachleute auf dem Gebiet der Technik werden anhand der obigen Beschreibung und den beigefügten Zeichnungen verschiedene weitere Ausführungsformen und Veränderungen der vorliegenden Offenbarung, zusätzlich zu den hier beschriebenen, ersichtlich sein. Diese weiteren Ausführungsformen und Veränderungen fallen daher in den Schutzumfang der vorliegenden Offenbarung. Obwohl die vorliegende Erfindung hier im Zusammenhang mit einer bestimmten Umsetzung in einem bestimmten Umfeld für einen bestimmten Zweck beschrieben wurde, werden Fachleute ferner erkennen, dass ihr Nutzen nicht darauf beschränkt ist und dass die vorliegende Erfindung in einer Anzahl von Umgebungen für eine beliebige Anzahl von Zwecken vorteilhaft umgesetzt werden kann. Dementsprechend sind die weiter unten angeführten Ansprüche mit Blick auf die volle Bandbreite und den Geist der vorliegenden Offenbarung wie hier beschrieben auszulegen.