-
Hintergrund
-
Die Non-Volatile Memory Express(NVMe)-Spezifikation ist eine Spezifikation für den Zugriff auf Solid-State-Vorrichtungen (SSDs, Solid-State Devices) und andere Zielvorrichtungen über einen Peripheral Component Interconnect Express(PCIe)-Bus. Die NVMe-SSD-PCIe-Host-Schnittstelle definiert ein Konzept von Namespaces, welche analog zu von SAS-RAID(Redundant Array of Independent Disks)-Adaptern unterstützten logischen Volumen sind. Copy-on-Write-Funktionalität in einer SSD kann unter Verwendung von Namespaces implementiert werden. Namespaces werden typischerweise als eine Abstraktion über dem globalen Logical Block Address(LBA)-Raum implementiert, verfolgt im Indirektionssystem einer SSD.
-
LBA-Metadaten zeigen nur eine Host-LBA an und umfassen keine Referenzzählung. Das Einschließen oder Anhängen einer Referenzzählung in den Metadaten würde zusätzliche Schreibungen verursachen, um die Daten mit neuen Metadaten umzuschreiben, was eine schlechte Lösung ist. Ohne solche Referenzzählungen in den LBA-Metadaten gibt es keinen Mechanismus zum Bestimmen, ob zusätzliche Klon-Kopien existieren (z. B. dass zusätzliche LBAs auf die gleichen Daten zeigen). Ein Verwalten mehrerer Klon-Kopien von Daten auf einer SSD steht somit besonderen Herausforderungen in Bezug auf die Speicherbereinigung gegenüber. Wenn ein Host beispielsweise die „Quellen”-LBA nach einer Kopieroperation modifiziert, können Speicherbereinigungsherausforderungen erzeugt werden. Die Quellenkopie kann effektiv die „Master”-Kopie sein, welche geschrieben wurde, bevor die Kopieroperation durchgeführt wurde, um die Daten zu einer oder mehreren zusätzlichen Host-LBAs zu duplizieren. Wenn diese Master-LBA modifiziert wird, kann ein Non-Copy-Aware-Speicherbereinigungsalgorithmus die physischen Daten bei der nächsten Gelegenheit freigeben, da kein Verfahren existiert, um Metadaten solcher Daten effizient zu modifizieren, um anzuzeigen, dass mehrere Host-LBAs auf diese Daten zeigen.
-
Kurzfassung der Offenbarung
-
Techniken für verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD werden offenbart. In einigen Ausführungsformen können die Techniken als Verfahren zum Bereitstellen von verbesserter Copy-on-Write-Funktionalität innerhalb einer SSD realisiert werden, einschließlich Bereitstellen einer Indirektionsdatenstruktur im Speicher einer PCIe-Vorrichtung. Die Datenstruktur kann einen Master-Eintrag für eine Original- oder Quellenkopie der geklonten Daten umfassen, wobei der Master-Eintrag eine Referenz zu einem Master-Index und eine Referenz zu einem Next-Index aufweist, und einen Klon-Eintrag für die geklonten Daten, wobei der geklonte Eintrag eine Referenz zum Master-Index und eine Referenz zu einem Next-Index aufweist. Die Techniken können das Traversieren unter Verwendung eines Computerprozessors von einer oder mehreren Kopien der geklonten Daten unter Verwendung einer oder mehrerer der Referenzen umfassen.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Host-Vorrichtung wenigstens eines der Folgenden umfassen: einen Unternehmensserver, einen Datenbankserver, eine Workstation und einen Computer.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur eine Mehrzahl von physischen Adressen umfassen.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer zirkulär verknüpften Liste sein, wobei der Master-Eintrag für geklonte Daten eine Referenz zu einem Master-Index und eine Referenz zu einem Next-Index umfasst.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer zirkulär verknüpften Liste sein, wobei der Klon-Eintrag für die geklonten Daten eine Referenz zum Master-Index und eine Referenz zu einem Next-Index umfasst.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer single-ended-verknüpften Liste sein, wobei ein Eintrag in einem Index eine Anzeige bereitstellt, dass der Index ein Master-Index ist.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform können die Referenzen Einträge in einer flachen Indirektionstabelle zur Adressierung logischer Blöcke umfassen.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform können die Referenzen Einträge in einer Baumdatenstruktur zur Adressierung logischer Blöcke umfassen.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die verbesserte Copy-on-Write-Funktionalität eine verbesserte Namespace-Kopierfunktionalität umfassen.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform können die Techniken das Festlegen eines Indikators für einen oder mehrere gepackte logische Blöcke umfassen, um anzuzeigen, dass der eine oder die mehreren gepackten logischen Blöcke geklont sind.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform kann ein Master-Index des Master-Eintrags auf den Master-Eintrag zeigen.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann der Master-Index des geklonten Eintrags auf den Master-Eintrag zeigen.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform kann der Next-Index eines letzten geklonten Eintrags in einer Datenstruktur auf den Master-Eintrag zeigen.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform können die Techniken das Bestimmen umfassen, dass der Klon-Eintrag für die geklonten Daten ein einziger Klon-Eintrag ist, wobei die Bestimmung das Bestimmen, dass der Next-Index des geklonten Eintrags mit dem Master-Index des geklonten Eintrags übereinstimmt, Bestimmen, dass der Next-Index des Master-Eintrags auf den Klon-Eintrag zeigt, Entklonen des Klon-Eintrags der geklonten Daten durch Festlegen des Next-Index des Klon-Eintrags auf einen Indirektionseintrag, welcher einen gepackten logischen Block anzeigt, und Festlegen des Master-Indexeintrags auf einen Indirektionseintrag, welcher einen gepackten logischen Block anzeigt, und Entklonen des Master-Eintrags der geklonten Daten durch Festlegen des Next-Index des Master-Eintrags auf einen ersten Indirektionseintrag, welcher einen ersten gepackten logischen Block eines Original-Master-Eintrags anzeigt, und Festlegen des Master-Index des Master-Eintrags auf einen zweiten Indirektionseintrag, welcher einen zweiten gepackten logischen Block des Original-Master-Eintrags anzeigt, umfasst.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform können die Techniken das Bestimmen umfassen, dass der Klon-Eintrag für die geklonten Daten einer von einer Mehrzahl von Klon-Einträgen ist, wobei die Bestimmung das Bestimmen von wenigstens eines der Folgenden umfasst: dass der Next-Index des geklonten Eintrags nicht mit dem Master-Index des geklonten Eintrags übereinstimmt, und dass der Next-Index des Master-Eintrags nicht auf den Klon-Eintrag zeigt, und Entklonen des Klon-Eintrags der geklonten Daten durch Festlegen des Next-Index eines vorherigen Eintrags, um auf einen Eintrag zu zeigen, welcher vom Next-Index des Klon-Eintrags angezeigt wird.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform können die Techniken das Überprüfen eines Eintrags während eines Speicherbereinigungsprozesses, Bestimmen, dass der Eintrag einen geklonten Indikator enthält, und Bestimmen, dass der Eintrag im Speicherbereinigungsprozess ein gültiger Eintrag ist, welcher basierend auf der Bestimmung, dass der Eintrag den geklonten Indikator enthält, nicht gelöscht werden soll, umfassen.
-
In anderen Ausführungsformen können die Techniken als ein Computerprogrammprodukt bestehend aus einer Reihe von Anweisungen, welche auf einem Computer ausführbar sind, realisiert werden. Das Computerprogrammprodukt kann einen Prozess zum Bereitstellen von verbesserter Copy-on-Write-Funktionalität innerhalb einer SSD durchführen. Das Computerprogramm kann die Schritte zum Bereitstellen einer Indirektionsdatenstruktur im Speicher einer Vorrichtung implementieren, umfassend einen Master-Eintrag für geklonte Daten, wobei der Master-Eintrag eine Referenz zu einem oder mehreren Indizes aufweist, einen Klon-Eintrag für die geklonten Daten, wobei der geklonte Eintrag wenigstens eines der Folgenden aufweist: eine Referenz zu einem Master-Index, eine Referenz zu einem Next-Index und einen Wert, welcher ein Ende einer Datenstruktur anzeigt, und Traversieren unter Verwendung eines Computerprozessors von einer oder mehreren Kopien der geklonten Daten unter Verwendung einer oder mehrerer der Referenzen.
-
In noch weiteren Ausführungsformen können die Techniken als System zum Bereitstellen von verbesserter Copy-on-Write-Funktionalität innerhalb einer SSD realisiert werden. Das System kann eine erste Vorrichtung umfassen, wobei die erste Vorrichtung im Speicher gespeicherte Anweisungen umfasst. Die Anweisungen können eine Anweisung zum Bereitstellen im Speicher der ersten Vorrichtung einer Indirektionsdatenstruktur umfassen, umfassend einen Master-Eintrag für geklonte Daten, wobei der Master-Eintrag eine Referenz zu einem oder mehreren Indizes aufweist, einen Klon-Eintrag für die geklonten Daten, wobei der geklonte Eintrag wenigstens eines der Folgenden aufweist: eine Referenz zu einem Master-Index, eine Referenz zu einem Next-Index und einen Wert, welcher ein Ende einer Datenstruktur anzeigt, und Traversieren unter Verwendung eines Computerprozessors von einer oder mehreren Kopien der geklonten Daten unter Verwendung einer oder mehrerer der Referenzen.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur eine Mehrzahl von physischen Adressen umfassen.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer zirkulär verknüpften Liste sein, wobei der Master-Eintrag für geklonte Daten eine Referenz zu einem Master-Index und eine Referenz zu einem Next-Index umfasst.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer zirkulär verknüpften Liste sein, wobei der Klon-Eintrag für die geklonten Daten eine Referenz zum Master-Index und eine Referenz zu einem Next-Index umfasst.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Indirektionsdatenstruktur Teil einer single-ended-verknüpften Liste sein, wobei ein Eintrag in einem Index eine Anzeige bereitstellt, dass der Index ein Master-Index ist.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform können die Referenzen Einträge in einer flachen Indirektionstabelle zur Adressierung logischer Blöcke umfassen.
-
Gemäß anderen Aspekten dieser beispielhaften Ausführungsform kann die erste Vorrichtung eine Peripheral Component Interconnect Express(PCIe)-Vorrichtung umfassen.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform können die Techniken ferner eine Anweisung zum Festlegen eines Indikators für einen oder mehrere gepackte logische Blöcke umfassen, um anzuzeigen, dass der eine oder die mehreren gepackten logischen Blöcke geklont sind.
-
Gemäß weiteren Aspekten dieser beispielhaften Ausführungsform können der Master-Index des Master-Eintrags und der Master-Index des geklonten Eintrags auf den Master-Eintrag zeigen und der Next-Index eines letzten geklonten Eintrags in einer Datenstruktur zeigt auf den Master-Eintrag.
-
Gemäß zusätzlichen Aspekten dieser beispielhaften Ausführungsform kann die Zielvorrichtung (z. B. eine PCIe-Vorrichtung) wenigstens eines der Folgenden umfassen: eine Grafikverarbeitungseinheit, eine Audio-/Video-Capture-Karte, eine Festplatte, einen Host-Busadapter und eine Non-Volatile Memory Express(NVMe)-Steuerung. Gemäß einigen Ausführungsformen kann die Zielvorrichtung eine NVMe-kompatible Vorrichtung sein.
-
Die vorliegende Offenbarung wird nun detaillierter unter Bezugnahme auf beispielhafte Ausführungsformen davon beschrieben, wie in den beigefügten Zeichnungen gezeigt. Obgleich die vorliegende Offenbarung nachfolgend unter Bezugnahme auf beispielhafte Ausführungsformen beschrieben wird, sollte verstanden werden, dass die vorliegende Offenbarung nicht darauf beschränkt ist. Durchschnittsfachleute auf diesem Gebiet mit Zugang zu den Lehren hierin werden zusätzliche Implementierungen, Modifikationen und Ausführungsformen sowie andere Einsatzgebiete erkennen, welche innerhalb des Schutzbereichs der vorliegenden Offenbarung liegen, wie hierin beschrieben, und in Bezug auf welche die vorliegende Offenbarung von signifikanter Nützlichkeit sein kann.
-
Kurze Beschreibung der Zeichnungen
-
Um ein besseres Verständnis der vorliegenden Offenbarung zu erleichtern, wird nun auf die beigefügten Zeichnungen Bezug genommen, in denen gleiche Elemente mit gleichen Bezugszeichen gekennzeichnet sind. Diese Zeichnungen sollten nicht ausgelegt werden, dass sie die vorliegende Offenbarung beschränken, sondern sollen lediglich beispielhaft sein.
-
1 zeigt ein beispielhaftes Blockschaltbild, welches eine Mehrzahl von PCIe-Vorrichtungen in Kommunikation mit einer Host-Vorrichtung darstellt, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
2 stellt eine Datenstruktur dar, welche ungeklonte gepackte logische Blöcke repräsentiert, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
3 stellt Tabellen dar, welche Master- und Klon-Indirektionsdatenstruktureinträge repräsentieren, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
4 stellt ein beispielhaftes Modul für verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD dar, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
5 stellt ein Flussdiagramm dar, welches eine verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD veranschaulicht, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
6A stellt eine Datenstruktur von Master-C-Chunk-Datenstruktureintragsformaten dar, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
6B stellt eine Datenstruktur von Klon-C-Chunk-Datenstruktureintragsformaten dar, gemäß einer Ausführungsform der vorliegenden Offenbarung.
-
Beschreibung
-
Die vorliegende Offenbarung betrifft verbesserte Copy-on-Write-Funktionalität. In einigen Ausführungsformen kann diese Copy-on-Write-Funktionalität Namespace-Kopien umfassen. Die NVMe-SSD-PCIe-Host-Schnittstelle definiert ein Konzept von Namespaces, welche analog zu von SAS-RAID(Redundant Array of Independent Disks)-Adaptern unterstützten logischen Volumen sind. Ein Namespace kann einer virtuellen Maschine (VM) dediziert sein. Innerhalb einer SSD können Namespaces logisch voneinander isoliert sein und können ohne Auswirkungen auf andere Namespaces sicher gelöscht und umfunktioniert werden.
-
Eine Namespace-Kennung kann in einem Medienzugriffsbefehl, welcher vom Host ausgegeben wird, zusammen mit der LBA innerhalb dieses Namespace eingeschlossen sein. Die SSD kann eine Datenstruktur (z. B. eine Lookup-Tabelle, einen Baum, eine Hash-Tabelle, eine Bitmap usw.) verwenden, um diese Kombination von Namespace und LBA in eine globale LBA zu übersetzen, welche intern in der SSD verwendet wird. Gemäß einigen Ausführungsformen können Referenzen zu einer LBA auf diese globale LBA verweisen.
-
Ausführungsformen der vorliegenden Offenbarung beschreiben ein System und Verfahren zum Implementieren einer effizienten „Namespace-Kopierfunktion”, welche Duplizieren der Daten auf der SSD vermeidet. Dies reduziert die Schreibverstärkung innerhalb des SSD, wodurch die Lebensdauer der SSD verlängert und gleichzeitig eine höhere Leistung bereitgestellt wird.
-
Namespace-Kopien sind eine Form von „Copy-on-Write”-Funktionalität. Auf der Kopierfunktion wird ein Zeiger erzeugt, welcher auf die einzelne Kopie auf dem Medium zeigt. Eine neue Kopie auf dem Medium wird bei einer Schreibung erzeugt und aktualisiert. Eine Namespace-Kopierfunktion erfordert eine effiziente Implementierung von „Copy-on-Write” auf einer SSD. Ausführungsformen der vorliegenden Offenbarung können auf Namespace-Kopien angewendet werden. Ausführungsformen der vorliegenden Offenbarung können auch auf andere „Copy-on-Write”-Implementierungen für eine SSD angewendet werden. Beispielsweise kann eine „Snapshot”-Kopie verwendet werden, um Point-in-Time-Bilder von einem Namespace zu erstellen und Implementierungen der vorliegenden Ausführungsform können verwendet werden, um Snapshot-Kopien zu verfolgen.
-
Ausführungsformen der vorliegenden Offenbarung stellen ein SSD-Indirektionssystem (z. B. flache LBA-Tabelle) oder ein Verfahren bereit, um mehrere Einträge einzuschließen, welche auf den gleichen physischen Speicherort zeigen. Eine solche Implementierung kann eine effiziente Speicherbereinigung ermöglichen, wenn mehrere Referenzen vorhanden sind. Eine Verfolgung mehrerer Referenzen oder Handhabung mehrerer Zeiger (z. B. auf NAND-Flash-Daten) kann eine Speicherbereinigung verbessern. Eine Speicherbereinigung kann unter Verwendung von Metadaten auf dem nicht-flüchtigen Speicher (z. B. NAND-Flash-Speicher, NOR-Flash-Speicher usw.) durchgeführt werden, welcher die Host-LBA für die Daten umfasst. Der Speicherbereinigungsalgorithmus kann bestimmen, welche Host-Sektoren nach wie vor gültig sind, indem diese LBAs in der Indirektionsdatenstruktur (z. B. einer Tabelle, einem Baum, einer Hash-Tabelle, einer Bitmap usw.) nachgeschlagen werden, um zu sehen, ob die Datenstruktur immer noch auf den physischen Speicherort zeigt. Falls nicht, gibt der Algorithmus den Block frei.
-
Eine oder mehrere der hierin beschriebenen Ausführungsformen stellen eine effiziente Darstellung eines duplizierten Indirektionseintrags unter Verwendung eines einzelnen Flags und eines alternativen Indirektionseintragsformats bereit, welches eine oder mehrere duplizierte Host-LBAs verfolgt. Eine oder mehrere Ausführungsformen können eine flache Indirektions-Lookup-Datenstruktur zum Verfolgen von mehreren logischen Blockadressen verwenden, welche auf eine gleiche physische Adresse zeigen. Andere Ausführungsformen können unter Verwendung einer Hash-Tabelle, eines Baums oder eines zusammensetzungsbasierten Systems zum Verfolgen von duplizierten LBAs implementiert werden.
-
Eine verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD und Techniken werden nachstehend detaillierter erörtert.
-
Wendet man sich nun den Zeichnungen zu, ist 1 ein beispielhaftes Blockschaltbild, welches eine PCIe-Vorrichtung in Kommunikation mit einer Host-Vorrichtung darstellt, gemäß einer Ausführungsform der vorliegenden Offenbarung. Copy-on-Write-Funktionalitätsverbesserungen können in einer oder mehreren Rechentechnologien, wie beispielsweise einem Host-System 102, einer Host-CPU 104 und einem PCI-Express-Root-Complex 106, implementiert werden. Der PCI-Express-Schalter 108 kann eine Mehrzahl von Zielen (z. B. PCIe-Vorrichtungen wie beispielsweise NVMe-basierte Ziele), wie beispielsweise die Ziele 110, 116 und 122, mit dem Host-System 102 über den PCI-Express-Root-Complex 106 kommunikativ koppeln.
-
Das Ziel 110 kann die NVMe-Steuerung 112 und den nicht-flüchtigen Speicher 114 enthalten. Das Ziel 116 kann die NVMe-Steuerung 118 und den nicht-flüchtigen Speicher 120 enthalten. Das Ziel 122 kann die NVMe-Steuerung 124 und den nicht-flüchtigen Speicher 126 enthalten.
-
Ein Systemspeicher 128 kann speicherbasierte Ressourcen enthalten, welche dem Host-System 102 über eine Speicherschnittstelle (z. B. Double Data Rate Type Three Synchronous Dynamic Random Access Memory (DDR3 SDRAM)) zugänglich sind. Der Systemspeicher 128 kann eine beliebige geeignete Form annehmen, wie beispielsweise, aber nicht darauf beschränkt, ein Solid-State-Speicher (z. B. Flash-Speicher oder Solid-State-Vorrichtung (SSD, Solid-State Device)), optischer Speicher und magnetischer Speicher. Der Systemspeicher 128 kann ein flüchtiger oder nicht-flüchtiger Speicher sein. Der Systemspeicher 128 kann eine oder mehrere Datenstrukturen enthalten.
-
Gemäß einigen Ausführungsformen können andere Schnittstellenstandards als PCIe für einen oder mehrere Teile verwendet werden, einschließlich, aber nicht darauf beschränkt, 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 Host-System 102 kann eine beliebige geeignete Form annehmen, wie beispielsweise, aber nicht darauf beschränkt, ein Unternehmensserver, ein Datenbank-Host, eine Workstation, ein Personal Computer, ein Mobiltelefon, eine Spielvorrichtung, ein Personal Digital Assistant (PDA), eine E-Mail-/SMS-Vorrichtung, eine Digitalkamera, ein Digitalmedien(z. B. MP3)-Player, ein GPS-Navigationsgerät und ein TV-System.
-
Das Host-System 102 und die Zielvorrichtung können zusätzliche Komponenten umfassen, welche nicht in 1 gezeigt sind, um die Zeichnung zu vereinfachen. Auch sind in einigen Ausführungsformen nicht alle der gezeigten Komponenten vorhanden. Ferner können die verschiedenen Steuerungen, Blöcke und Schnittstellen in einer beliebigen geeigneten Art und Weise implementiert sein. Beispielsweise kann eine Steuerung die Form von einem oder mehreren von einem Mikroprozessor oder Prozessor und einem computerlesbaren Medium annehmen, welches computerlesbaren Programmcode (z. B. Software oder Firmware) speichert, der beispielsweise durch den (Mikro-)Prozessor, logische Gates, Schalter, eine anwendungsspezifische integrierte Schaltung (ASIC, Application Specific Integrated Circuit), eine programmierbare Logiksteuerung und einen eingebetteten Mikrocontroller ausführbar ist.
-
Bezug nehmend auf 2 ist eine Datenstruktur veranschaulicht, welche ungeklonte gepackte logische Blöcke repräsentiert, gemäß einer Ausführungsform der vorliegenden Offenbarung. Acht 4 Kilobyte gepackte logische Blockeinträge sind in dieser Ausführungsform veranschaulicht. Diese ungeklonten gepackten logischen Blöcke (PLBs, Packed Logical Blocks) können logische Blockadressen (LBAs, Logical Block Addresses) auf eine physische Adresse abbilden. Wie dargestellt können LBAs 0–7 auf den Physical Address Block 0, LBAs 7–15 auf den Physical Address Block 1, LBAs 16–23 auf den Physical Address Block 2, LBAs 24–31 auf den Physical Address Block 3, LBAs 32–39 auf den Physical Address Block 4, LBAs 40–47 auf den Physical Address Block 5, LBAs 48–55 auf den Physical Address Block 6 and LBAs 56–63 auf den Physical Address Block 7 abgebildet werden.
-
3 stellt Tabellen dar, welche Master- und Klon-Indirektionsdatenstruktureinträge repräsentieren, gemäß einer Ausführungsform der vorliegenden Offenbarung. Wie unter Bezugnahme auf 3 beschrieben, können in einigen Ausführungsformen Copy-on-Write-Verbesserungen in einem flachen Indirektionssystem implementiert sein. Ein PLB kann ein „gepackter logischer Block” in einer Lookup-Datenstruktur (z. B. flache Indirektions-Lookup-Tabelle) sein. Ein Satz von 8 aufeinander folgenden 8-PLB-ausgerichteten PLBs, welche an einer Klon-Operation beteiligt sind, kann als „C-Chunk” bezeichnet werden. Ein C-Chunk, dessen Daten auf dem Medium mit den für diesen C-Chunk geeigneten PLBs getaggt sind (d. h. die Originalkopie), kann als „Master-C-Chunk” bezeichnet werden. Die Indirektionsdatenstruktureinträge für alle PLBs in einem C-Chunk können in Gruppen zusammengefasst sein, um einen einzelnen „C-Entry” auszubilden. Ein C-Entry, welcher einem C-Chunk entspricht, dessen Daten sich auf dem Medium befinden, kann als „Master-C-Entry” bezeichnet werden. C-Entries, welche LBA-Bereiche beschreiben, die Kopien des Master-LBA-Bereichs sind, können als „Klon-C-Entries” bezeichnet werden. Eine oder mehrere SSDs können einen PLB definieren, um 4 KB von Kundendaten plus Metadaten (z. B. 8 × 512B Sektoren) zu verfolgen. In nachstehend erörterten Ausführungsformen kann ein PLB lediglich ein Eintrag in einer Tabelle sein. Ein Indirektionsdatenstruktureintrag kann erweitert werden (z. B. um ein Bit), um ein Copy-on-Write zu ermöglichen. Ein zusätzliches Bit kann ein „Klonverfolgungs”-Bit sein, welches auf 1 gesetzt werden kann, um anzuzeigen, dass entweder andere PLBs vorhanden sind, für die dieser PLB als Master-Kopie fungiert, oder dass dies ein Klon ist, welcher einen anderen PLB als seine Master-Kopie hat. Die restlichen Bits des Indirektionsdatenstruktureintrags mit dem Klonverfolgungs-Bitsatz können eine NAND-Speicheradresse enthalten oder nicht (z. B. wie es ein Eintrag ohne den Bitsatz kann). Die alternative Datenstruktur für „Klonverfolgung = 1” wird mit einer gröberen Granularität als der typische PLB-Eintrag verfolgt und umfasst Felder, um eine verknüpfte Liste von geklonten Einträgen und einen Zeiger auf den Master-Eintrag zu erstellen. Platz für diese zusätzlichen Felder kann gewonnen werden, indem ein einzelner C-Entry verwendet wird, um einen größeren (z. B. 2×) Chunk von LBAs als einen entklonten Indirektionseintrag zu beschreiben. Dieser Kompromiss ist angemessen, da geklonte Daten dazu neigen, große Partitionen oder Dateisätze und nicht einzelne Host-LBAs zu involvieren.
-
Die physischen Adressen der einzelnen Host-LBAs sind verteilt, so dass ein zusätzliches Lookup für einige LBAs erforderlich ist. Dies kann Platz für das Einschließen der Master- und Klon-Zeiger in jedem Master- und Klon-Eintrag schaffen. Die Anzahl der DRAM-Zugriffe, um die physischen Adressen abzurufen, wird jedoch nicht signifikant erhöht. Wie in 3 veranschaulicht, kann der Master-C-Entry LBAs enthalten, welche auf alle physischen Adressen 8–15 abgebildet werden, enthält aber nur tatsächliche Mappings auf die physischen Adressen 8–11, 14 und 15 (das Mapping auf die physischen Adressen 12 und 13 kann vom Klon-C-Entry erhalten werden). Wie im Klon-C-Entry aus 3 veranschaulicht, können Mappings für LBAs, welche den physischen Adressen 8–13 entsprechen, bereitgestellt werden. Die beiden physischen Blöcke, welche nicht im Master-C-Entry abgebildet werden (physische Adressen 12 und 13), stellen Platz für einen Master-Index und einen Next-Index bereit. Die beiden physischen Blöcke, welche nicht im Klon-C-Entry abgebildet werden (physische Adressen 14 und 15), stellen Platz für einen Master-Index und einen Next-Index bereit. Ein Master-Index in einem Master-C-Entry zeigt immer auf sich selbst. Ein Master-Index in einem Klon-C-Entry zeigt immer auf den Master-C-Entry. Ein Next-Index des Master-C-Entry zeigt auf einen ersten Klon-C-Entry in einer Kette. Ein Next-Index eines Klon-C-Entry zeigt auf einen nächsten Klon-C-Entry, falls mehr als ein Klon-C-Entry vorhanden ist. Falls es nur einen Klon-C-Entry gibt oder dies der letzte Klon-C-Entry ist, kann der Next-Index zurück zum Master-C-Index zeigen (oder er kann auf einen speziellen Wert zeigen, welcher ein Ende der Liste anzeigt, wie beispielsweise ein Null-Zeiger). Dies kann ein Traversieren von einem Master-C-Entry und einem oder mehreren Klon-C-Entries ermöglichen.
-
In Ausführungsformen mit einer flachen Indirektionsdatenstruktur bezieht sich ein PLB (Physical Location Block) auf einen einzelnen Eintrag, welcher eine physische NAND-Speicheradresse in einer einzelnen Lookup-Tabelle enthält. Eine typische PLB-Granularität dediziert 4 KB (z. B. 8·512B Sektoren) zu einem einzelnen Datenstruktureintrag. Als Beispiel betrachte man eine Klon-Chunk-Größe von 8 PLBs – die durchschnittliche Anzahl von DRAM-Zugriffen, welche für rein zufällige einzelne Sektorzugriffe auf einen geklonten Bereich erforderlich sind, beträgt 1,25. Diese Anzahl kann bei einer größeren Klon-Chunk-Größe niedriger sein, mit einem Kompromiss von weniger granulären Klon-Grenzen und mehr NAND-Zugriffen, welche zum „Entklonen” eines Chunk von PLBs erforderlich sind.
-
Falls ein Host-Lese-PLB-Lookup auf einen geklonten Eintrag zeigt, benötigt die SSD 1) die physische Adresse und 2) die LBA, welche verwendet wurde, als die Daten geschrieben wurden. Die physische Adresse wird zwischen den Master- und Klon-Einträgen verteilt, wobei alle verfügbaren PLB-Einträge optional mit doppelten Daten ausgefüllt werden, um die Wahrscheinlichkeit zu reduzieren, dass die anvisierte LBA eine zweite DRAM-Lesung erfordert. Für Nr. 2 kann die Master-LBA basierend auf dem Master-Zeiger in jedem Klon-Eintrag berechnet werden – dies erfordert gemäß Design keinen zusätzlichen DRAM-Zugriff und dieser Master-Zeiger (zusammen mit dem nächsten Klon-Zeiger) kann vom Original-PLB-Lookup zwischengespeichert sein.
-
In einigen Ausführungsformen kann, um zusätzliche Informationen in eine bestehende Indirektionsdatenstruktur zu passen, das Klonen nur bei einer Granularität verfolgt werden, welche ein Vielfaches der PLB-Größe ist. In einigen Ausführungsformen kann die Granularität als Zweierpotenz-Vielfaches der PLB-Größe ausgewählt werden, um eine effiziente Berechnung des Index des C-Chunk, welcher einer gegebenen LBA entspricht, zu ermöglichen. Als Beispiel kann der Multiplikator 8 betragen, aber größere Klon-Granularitäten können verwendet werden. Das Klonen kann ein Klonen jeweils großer Bereiche von LBAs (wie beispielsweise einen gesamten Namespace) involvieren, so dass die Strafe für die Verwendung einer größeren Granularität minimal sein kann.
-
In einigen Ausführungsformen kann die Indirektionsdatenstruktur in sich eine zirkulär verknüpfte Liste von einem oder mehreren C-Chunks, welche auf die gleichen Daten verweisen, eingebettet haben. In anderen Ausführungsformen können andere Formen von verknüpften Listen (z. B. eine Single-Ended-Verknüpfungsliste) verwendet werden. Die physischen Adressen, welche die Daten des C-Chunk beschreiben, können unter Indirektionseinträgen für diese C-Chunk-Liste verteilt werden.
-
Ein C-Chunk, dessen Daten sich physisch auf dem Medium befinden, getaggt mit den für diesen C-Chunk geeigneten PLBs (d. h. die Originalkopie), kann als „Master-C-Chunk” bezeichnet werden. Andere C-Chunks, welche aktuell auf die gleichen Daten ohne Speichern einer Kopie auf dem Medium verweisen, können mit „Klon-C-Chunks” bezeichnet werden.
-
Die Indirektionsdatenstruktureinträge für alle PLBs in einem C-Chunk sind in Gruppen zusammengefasst, um einen einzelnen „C-Entry” auszubilden. Für einen Master-C-Chunk kann der C-Entry im Format sein, welches in 6A veranschaulicht ist. Wie veranschaulicht, kann ein Master-C-Chunk die physischen Adressen 0–3 (die ersten vier physischen Adressen in einem Bereich) enthalten, gefolgt von den physischen Adressen 6 und 7. Die fehlenden zwei physischen Adressen können in einem Klon-C-Entry abgebildet werden und die zwei zusätzlichen Slots können verwendet werden, um einen Master-Index und einen Next-Index bereitzustellen. Wie veranschaulicht, kann ein „Klonverfolgungs”-Indikator auf 1 gesetzt werden. Dies kann einem Speicherbereinigungsprozess anzeigen, dass der C-Entry ignoriert werden soll.
-
Für einen Klon-C-Chunk kann der C-Entry im Format sein, welches in 6B veranschaulicht ist. Wie veranschaulicht, können die physischen Adressen 0–5 abgebildet werden und die physischen Adressen 6 und 7 können fehlen. Die fehlenden zwei physischen Adressen können im Master-C-Entry abgebildet werden und die zwei zusätzlichen Slots können verwendet werden, um einen Master-Index und einen Next-Index bereitzustellen. Wie veranschaulicht, kann ein „Klonverfolgungs”-Indikator auf 1 gesetzt werden. Dies kann einem Speicherbereinigungsprozess anzeigen, dass der C-Entry ignoriert werden soll.
-
In einer oder mehreren Ausführungsformen kann NAND Addressi die NAND-Adresse für einen i-ten PLB des Master-C-Chunk sein (wobei i = 0 den ersten PLB repräsentiert). Ein Master-Index kann ein Indirektionsdatenstrukturindex des Master-C-Entry sein (geteilt durch 8, da er den Platz von 8 PLB-Einträgen verbraucht). Ein Next-Index kann ein Indirektionsdatenstrukturindex für den nächsten Klon-C-Entry sein, welcher auf die gleichen Daten zeigt (geteilt durch 8, da er den Platz von 8 PLB-Einträgen verbraucht). Falls es keine weiteren Klon-C-Entries mehr zum Repräsentieren gibt, kann dieser Next-Index zurück zum Master-C-Entry zeigen. In einigen Ausführungsformen kann dieser Next-Index auf einen Wert zeigen, welcher die Beendigung der Liste anzeigt (z. B. ein Null-Zeiger).
-
In einigen Ausführungsformen können ein oder mehrere Tests verwendet werden, um zu bestimmen, ob ein C-Chunk ein Master-Eintrag ist. Beispielsweise kann ein C-Chunk genau dann der Master sein, wenn der Master-Index seines C-Entry auf den C-Entry selbst zeigt.
-
Die Beziehung zwischen einem Master-C-Entry und einem Klon-C-Entry über Master-Indizes und Next-Indizes kann die effiziente Durchführung von einer oder mehreren der nachfolgenden Operationen ermöglichen.
-
Um einen Satz von 8 aufeinander folgenden 8-PLB-ausgerichteten PLBs zu klonen, können ein oder mehrere Verfahren verwendet werden. Beispielsweise kann das Klonen eines Satzes von PLBs in einer oder mehreren Ausführungsformen umfassen:
- 1. Lesen der 8 NAND-Adressen für die PLBs der Originalkopie, auf die beim Erstellen der Master- und Klon-C-Entries verwiesen wird;
- 2. Erstellen eines Master-C-Entry anstelle der Indirektionseinträge der 8 Original-PLBs; Der Next-Index kann auf den neuen Klon-C-Entry zeigen; und
- 3. Erstellen eines Klon-C-Entry anstelle der Indirektionseinträge der 8 PLBs, welche jetzt als Klon wirken. Der Next-Index kann auf den neuen Master-C-Entry zeigen.
-
Um einen C-Chunk in einen neuen C-Chunk zu klonen, können ein oder mehrere Verfahren verwendet werden. Beispielsweise kann das Klonen eines C-Chunk in einen neuen C-Chunk in einer oder mehreren Ausführungsformen umfassen:
- 1. Falls der Quellen-C-Chunk ein Master ist, Folgen des Next-Index eines Quellen-C-Entry, um einen Klon-C-Entry zu finden und ihn zum Speicherort des neuen C-Entry zu kopieren. Falls der Quellen-C-Chunk kein Master ist, Kopieren des Quellen-C-Entry zum Speicherort des neuen C-Entry;
- 2. Aktualisieren des Next-Index des neuen C-Entry mit dem aktuellen Next-Index des Master-C-Entry;
- 3. Aktualisieren des Next-Index des Master-C-Entry, um auf den neuen C-Entry zu zeigen.
-
Um ein Lese-Lookup bei einem PLB durchzuführen, dessen Indirektionseintrag ein Klonverfolgungs-Bit gesetzt hat, können ein oder mehrere Verfahren verwendet werden. Beispielsweise kann das Durchführen eines Lese-Lookups bei einem PLB mit einem Indirektions-Bitsatz in einer oder mehreren Ausführungsformen umfassen:
- 1. Betrachten des C-Entry, welcher den Indirektionseintrag dieses PLB enthält. Bestimmen, ob dieser C-Entry ein Master-C-Entry ist oder nicht. Basierend auf der Bestimmung ferner Bestimmen, ob die NAND-Adresse für den gewünschten Master-PLB in diesem C-Entry gespeichert ist;
- 2. Falls die NAND-Adresse in der ersten C-Entry-Lesung gespeichert ist, können diese NAND-Adresse und der Master-Index zurückgegeben werden. Der Master-Index kann verwendet werden, um zu bestimmen, mit welcher PLB-Nummer die Daten getaggt werden, ohne irgendwelche zusätzlichen Indirektions-Lookups durchzuführen;
- 3. Falls die NAND-Adresse nicht in der ersten C-Entry-Lesung gespeichert ist und die erste C-Entry-Lesung ein Master-C-Entry ist, kann dem Next-Index gefolgt werden, um einen Klon-C-Entry zu finden, welcher die erforderliche NAND-Adresse enthält. Diese NAND-Adresse und der Master-Index können zurückgegeben werden;
- 4. Falls die NAND-Adresse nicht in der C-Entry-Lesung gespeichert ist und es ein Klon-C-Entry ist, kann dem Master-Index gefolgt werden, um einen Master-C-Entry zu finden, welcher die erforderliche NAND-Adresse enthält. Diese NAND-Adresse und der Master-Index können zurückgegeben werden.
-
Zum „Entklonen” eines Klon-C-Chunk können eine oder mehrere Techniken verwendet werden. Beispielsweise können die Techniken in einigen Ausführungsformen umfassen:
- 1. Bestimmen, ob nur ein Klon vorhanden ist. Falls beispielsweise der Next-Index des C-Entry des Ziels mit seinem Master-Index übereinstimmt und der Next-Index des Master-C-Entry auf den Ziel-C-Entry zeigt, dann gibt es nur einen Klon. Die C-Entries sowohl für den Master- als auch den Klon lesen und den Master-C-Entry mit „normalen” Indirektionseinträgen für diese PLBs überschreiben;
- 2. Falls beispielsweise der Next-Index des C-Entry des Ziels nicht mit seinem Master-Index übereinstimmt oder der Next-Index des Master-C-Entry nicht auf den Ziel-C-Entry zeigt, dann gibt es andere Klons. Diesen C-Entry aus seiner zirkulären Liste entfernen;
- 3. In jedem Fall Lesen der Daten für den Master-C-Chunk und Kopieren zum Klon-C-Chunk, Überschreiben der Klon-C-Entries mit normalen Indirektionseinträgen, welche die NAND-Adressen der neuen Kopie anzeigen.
-
Zum „Entklonen” eines Master-C-Chunk können eine oder mehrere Techniken verwendet werden. Beispielsweise können die Techniken in einigen Ausführungsformen umfassen:
- 1. Lesen des Master-C-Entry und des ersten Klon-C-Entry; und
- 2. Lesen der Daten von einem Speichermedium für den Master-C-Chunk und Kopieren zu den PLBs des ersten Klon-C-Chunk, indem sie zu einem neuen Speichermediumspeicherplatz geschrieben werden und die Host-LBA-Metadaten mit dem entsprechenden Klon-C-Chunk assoziiert werden;
- 3. Falls dieser erste Klon der einzige Klon ist (d. h. sein Next-Index zeigt auf den Master zurück), dann Überschreiben des ersten Klon-C-Entry mit normalen Indirektionseinträgen, welche auf die NAND-Adressen für die gerade erstellte Kopie zeigen. Den Master-C-Entry mit normalen Indirektionseinträgen überschreiben, welche auf PLBs des Original-Master-C-Chunk zeigen;
- 4. Falls der erste Klon nicht der einzige Klon war, den Master von der zirkulär verknüpften Liste entfernen. Den ersten Klon-C-Entry mit einem neuen Master-C-Entry für die gerade erstellte Kopie überschreiben. Andere Klon-C-Entries mit einem neuen Klon-C-Entry für die gerade erstellte Kopie überschreiben. Dies kann fördern, dass der erste Klon-C-Entry des alten Master-C-Entry der neue Master-C-Entry für sich selbst und die restlichen Klon-C-Entries wird.
-
Wenn eine Indirektionsaktualisierung für einen Ziel-PLB, welcher das Klonverfolgungs-Bit gesetzt hat, erforderlich ist, können die Techniken automatisch umfassen:
- 1. Entklonen des C-Chunk der PLBs; und
- 2. Normales Durchführen der Indirektionsaktualisierung.
-
Die Speicherbereinigung kann implementiert sein, so dass der Speicherbereinigungsalgorithmus die Daten für alle physischen Daten, deren PLB mit dem Klonverfolgungs-Bit im Indirektionssystem markiert ist, nie verwirft. Das heißt, der Speicherbereinigungsalgorithmus kann alle mit einem Klonverfolgungs-Bit markierten PLBs als „gültige” Daten betrachten, welche Verlagern statt Löschen erfordern.
-
In einer oder mehreren Ausführungsformen könnte ein kleiner zählender Bloom-Filter im SRAM gespeichert werden, um im System vorhandene C-Chunks zu verfolgen. Falls der Bloom-Filter bei einer Schreibung anzeigen kann, dass es keine Möglichkeit gibt, dass der PLB Teil eines C-Chunk ist, dann kann eine direkte Aktualisierung des Indirektionssystem sicher durchgeführt werden, ohne den aktuellen Datenstruktureintrag zuerst zu lesen. Da Klone in der Regel große sequentielle Bereiche sind, kann die für einen Bloom-Filter verwendete Hash-Funktion etwa wie folgt sein: f(C-Entry-Index) = C-Entry-Index/Filtergröße statt einer Zufallsfunktion.
-
4 stellt ein beispielhaftes Modul für verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD dar, gemäß einer Ausführungsform der vorliegenden Offenbarung. Wie in 4 veranschaulicht, kann das Copy-on-Write-Modul 410 ein Indirektionserstellungsmodul 412, ein Indirektionsmanagementmodul 414 und ein Fehlerhandhabungsmodul 416 enthalten.
-
Das Indirektionserstellungsmodul 412 kann eine oder mehrere Datenstrukturen zum Verfolgen von Copy-on-Write-Kopien erstellen. Ein PLB kann einfach ein Eintrag in einer Tabelle sein. Ein Indirektionsdatenstruktureintrag kann erweitert werden (z. B. um ein Bit), um ein Copy-on-Write zu ermöglichen. Ein zusätzliches Bit kann ein „Klonverfolgungs”-Bit sein, welches auf 1 gesetzt werden kann, um anzuzeigen, dass entweder andere PLBs vorhanden sind, für die dieser PLB als Master-Kopie fungiert, oder dass dies ein Klon ist, welcher einen anderen PLB als seine Master-Kopie hat. Die restlichen Bits des Indirektionsdatenstruktureintrags mit dem Klonverfolgungs-Bitsatz können eine NAND-Adresse enthalten oder nicht (z. B. wie es ein Eintrag ohne den Bitsatz kann). Die alternative Datenstruktur für „Klonverfolgung = 1” umfasst Felder, um eine verknüpfte Liste von geklonten Einträgen und einen Zeiger auf den Master-Eintrag zu erstellen. Platz für diese zusätzlichen Felder wird gewonnen, indem ein einzelner Eintrag verwendet wird, um einen größeren (z. B. 2×) Chunk von LBAs als einen entklonten Indirektionseintrag zu beschreiben.
-
Das Indirektionsmanagementmodul 414 kann eine oder mehrere Operationen unter Verwendung einer Indirektionsdatenstruktur durchführen. Das Indirektionsmanagementmodul 414 kann das Klonen von Daten, Lesen von geklonten Daten und Entklonen von Daten ermöglichen und eine sichere und effiziente Speicherbereinigung unter Verwendung eines oder mehrerer der Verfahren, wie sie oben unter Bezugnahme auf 3 erörtert sind, ermöglichen.
-
Das Fehlerhandhabungsmodul 416 kann einen oder mehrere Fehler, welche mit dem Management von geklonten Daten assoziiert sind, einfangen, protokollieren, berichten und/oder handhaben.
-
5 stellt ein Flussdiagramm dar, welches eine verbesserte Copy-on-Write-Funktionalität innerhalb einer SSD veranschaulicht, gemäß einer Ausführungsform der vorliegenden Offenbarung. Der Prozess 500 ist jedoch lediglich beispielhaft. Der Prozess 500 kann verändert werden, z. B. indem Stufen hinzugefügt, geändert, entfernt oder umgeordnet werden. Bei Stufe 502 kann der Prozess beginnen.
-
Bei Stufe 504 kann ein Master-C-Entry erstellt werden. Ein C-Chunk, dessen Daten sich physisch auf dem Medium befinden, getaggt mit den für diesen C-Chunk geeigneten PLBs (d. h. die Originalkopie), kann als „Master-C-Chunk” bezeichnet werden. Andere C-Chunks, welche aktuell auf die gleichen Daten ohne Speichern einer Kopie auf dem Medium verweisen, können mit „Klon-C-Chunks” bezeichnet werden.
-
Die Indirektionsdatenstruktureinträge für alle PLBs in einem C-Chunk sind in Gruppen zusammengefasst, um einen einzelnen „C-Entry” auszubilden. Für einen Master-C-Chunk kann der C-Entry im Format sein, welches in 6A veranschaulicht ist.
-
Bei Stufe 506 kann ein Klon-C-Entry erstellt werden. Für einen Klon-C-Chunk kann der C-Entry im Format sein, welches in 6B veranschaulicht ist.
-
In einer oder mehreren Ausführungsformen kann NAND Addressi die NAND-Adresse für einen i-ten PLB des Master-C-Chunk sein (wobei i = 0 den ersten PLB repräsentiert).
-
Bei Stufe 508 kann ein Block zugeordnet werden, um einen Master-Index anzuzeigen. Ein Master-Index kann ein Indirektionsdatenstrukturindex des Master-C-Entry sein (geteilt durch 8, da er den Platz von 8 PLB-Einträgen verbraucht). Master-Indizes sowohl eines Master-C-Entry als auch eines Klon-C-Entry können auf einen Master-C-Entry zeigen.
-
Bei Stufe 510 kann ein Block zugeordnet werden, um einen Next-Index anzuzeigen. Ein Next-Index kann ein Indirektionsdatenstrukturindex für den nächsten Klon-C-Entry sein, welcher auf die gleichen Daten zeigt (geteilt durch 8, da er den Platz von 8 PLB-Einträgen verbraucht). Falls es keine weiteren Klon-C-Entries mehr zum Repräsentieren gibt, kann dieser Next-Index zurück zum Master-C-Entry zeigen.
-
In einigen Ausführungsformen können ein oder mehrere Tests verwendet werden, um zu bestimmen, ob ein C-Chunk ein Master-Eintrag ist. Beispielsweise kann ein C-Chunk genau dann der Master sein, wenn der Master-Index seines C-Entry auf den C-Entry selbst zeigt.
-
Bei Stufe 512 kann das Verfahren 500 enden.
-
Andere Ausführungsformen liegen innerhalb des Schutzbereichs und Wesens der Erfindung. Beispielsweise kann die oben beschriebene Funktionalität unter Verwendung von Software, Hardware, Firmware, Festverdrahtung oder Kombinationen von beliebigen von diesen implementiert werden. Ein oder mehrere Computerprozessoren, welche gemäß Anweisungen operieren, können die Funktionen implementieren, die mit verbesserter Copy-on-Write-Funktionalität innerhalb einer SSD gemäß der oben beschriebenen vorliegenden Offenbarung assoziiert sind. Falls dem so ist, liegt es innerhalb des Schutzbereichs der vorliegenden Offenbarung, dass solche Anweisungen auf einem oder mehreren nicht-transitorischen prozessorlesbaren Medien (z. B. eine Magnetplatte oder anderes Speichermedium) gespeichert sein können. Zusätzlich können Module, welche Funktionen implementieren, auch an verschiedenen Positionen physisch angeordnet sein, einschließlich so verteilt sein, dass Teile von Funktionen an verschiedenen physischen Orten implementiert werden.
-
Die vorliegende Offenbarung soll in ihrem Schutzbereich nicht durch die hierin beschriebenen speziellen Ausführungsformen beschränkt werden. Tatsächlich sind verschiedene andere Ausführungsformen und Modifikationen der vorliegenden Offenbarung zusätzlich zu denjenigen, die hierin beschrieben sind, für Durchschnittsfachleute auf dem Gebiet aus der vorhergehenden Beschreibung und den beigefügten Zeichnungen ersichtlich. Somit sollen derartige andere Ausführungsformen und Modifikationen in den Schutzbereich der vorliegenden Offenbarung fallen. Auch wenn die vorliegende Offenbarung hierin im Kontext einer bestimmten Implementierung in einer bestimmten Umgebung für einen bestimmten Zweck beschrieben worden ist, werden Durchschnittsfachleute auf dem Gebiet ferner erkennen, dass ihre Nützlichkeit nicht darauf beschränkt ist und dass die vorliegende Offenbarung in vorteilhafter Weise in jeder Anzahl von Umgebungen für jede Anzahl von Zwecken implementiert werden kann. Dementsprechend sollten die nachfolgend dargelegten Ansprüche in Anbetracht der vollen Breite und dem Wesen der vorliegenden Offenbarung interpretiert werden, wie hierin beschrieben.