DE112018005869T5 - Strukturanpassung einer namensraumzuordnung in nicht flüchtigen speichervorrichtungen - Google Patents

Strukturanpassung einer namensraumzuordnung in nicht flüchtigen speichervorrichtungen Download PDF

Info

Publication number
DE112018005869T5
DE112018005869T5 DE112018005869.7T DE112018005869T DE112018005869T5 DE 112018005869 T5 DE112018005869 T5 DE 112018005869T5 DE 112018005869 T DE112018005869 T DE 112018005869T DE 112018005869 T5 DE112018005869 T5 DE 112018005869T5
Authority
DE
Germany
Prior art keywords
block
namespace
blocks
block size
logical addresses
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112018005869.7T
Other languages
English (en)
Inventor
Alex Frolikov
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Micron Technology Inc
Original Assignee
Micron Technology Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Micron Technology Inc filed Critical Micron Technology Inc
Publication of DE112018005869T5 publication Critical patent/DE112018005869T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/20Employing a main memory using a specific memory technology
    • G06F2212/202Non-volatile memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

Zusammenfassung: Computerspeichervorrichtung mit einer Host-Schnittstelle, einer Steuerung, nicht flüchtigen Datenträgern und Firmware. Die Firmware veranlasst die Steuerung: zum Zuteilen eines namentlich genannten Teils der nicht flüchtigen Speichervorrichtung, zur Erzeugung erster blockweiser Zuordnungsdaten gemäß einer ersten Blockgröße; zum Übertragen im namentlich genannten Teil definierter logischer Adressen anhand der ersten blockweisen Zuordnungsdaten in logische Adressen, die für die gesamten nicht flüchtigen Datenträger definiert sind und weiter auf eine gleiche Art und Weise für alle namentlich genannten Teile in physikalische Adressen übertragen werden können; zum Bestimmen einer zweiten Blockgröße; zur Erzeugung zweiter blockweiser Zuordnungsdaten gemäß der zweiten Blockgröße; zum Übertragen der im namentlich genannten Teil definierten logischen Adressen anhand der zweiten blockweisen Zuordnungsdaten in die für die gesamten nicht flüchtigen Datenträger definierten logischen Adressen.

Description

  • VERWANDTE ANMELDUNG
  • Die vorliegende Anwendung beansprucht die Priorität der am 16.11.2017 eingereichten US-Patentanmeldung Nr. 15/814,934 mit dem Titel „NAMESPACE MAPPING STRUCTURAL ADJUSTMENT IN NON-VOLATILE MEMORY DEVICES“, deren Offenbarungsgehalt insgesamt als Bestandteil der vorliegenden Anmeldung gilt.
  • FACHGEBIET DER TECHNOLOGIE
  • Mindestens einige vorliegend beschriebene Ausführungsformen betreffen Computerspeichervorrichtungen allgemein und im Einzelnen insbesondere auch Strukturanpassungen von Namensraumzuordnungen in nicht flüchtigen Speichervorrichtungen.
  • HINTERGRUND
  • Typische Computerspeichervorrichtungen wie z.B. Festplatten (HDDs), Solid-State-Laufwerke (SSDs) und Hybridlaufwerke weisen Steuerungen auf, die Datenzugriffsabfragen von Host-Rechnern empfangen und programmierte Rechenaufgaben ausführen, um die Abfragen auf Arten und Weisen umzusetzen, die für die in den Speichervorrichtungen konfigurierten Datenträger und Struktur spezifisch sein können, so z.B. bei den Festplatten etwa rigide rotierende Platten, die mit magnetischem Material beschichtet sind, integrierte Schaltungen mit Speicherzellen bei SSDs und beides bei Hybridlaufwerken.
  • Ein standardisiertes Schnittstellenprotokoll für logische Geräte ermöglicht es einem Host-Rechner, eine Speichervorrichtung unabhängig von der konkreten Datenträgerausführung der Speichervorrichtung zu adressieren.
  • Zum Beispiel legt die NVMHCI-Vorgabe (Non-Volatile Memory Host Controller Interface Specification), auch NVM Express (NVMe) genannt, das Schnittstellenprotokoll für logische Geräte zum Zugreifen auf nicht flüchtige Speichervorrichtungen über einen PCIe-Bus (Peripheral Component Interconnect Express) fest.
  • Figurenliste
  • Die Ausführungsformen werden rein beispielhaft und ohne Einschränkung in den Zuordnungen der beiliegenden Zeichnungen veranschaulicht, wobei gleiche Bezugszeichen ähnliche Elemente andeuten.
    • zeigt ein Rechensystem, bei dem Ausführungsformen vorliegend offenbarter Erfindungen ausgeführt werden können.
    • zeigt ein Beispiel der unmittelbaren Zuteilung mehrerer Namensräume gemäß den angeforderten Größen der Namensräume.
    • zeigt ein Beispiel der Zuteilung von Namensräumen über Zuordnungsblöcke von logischen Adressen.
    • zeigt ein Beispiel von Datenstrukturen für eine Namensraumzuordnung.
    • zeigt ein System zur Übertragung von Adressen in einer nicht flüchtigen Speichervorrichtung, um die Namensraumverwaltung zu unterstützen.
    • zeigt ein Verfahren zur Verwaltung von Namensräumen aufgrund von Blöcken logischer Adressen.
    • zeigt ein Beispieldiagramm, in dem ein Namensraum an Blockgrenzen nicht orientiert ist und mit den Methoden der - ausgeführt werden kann.
    • zeigt ein beispielhaftes Blockdiagramm einer Namensraumabbildung zur Ausführung eines Namensraums, der mit Blockgrenzen nicht ausgerichtet ist.
    • zeigt ein Beispiel einer teilweisen Blockkennung, die zur Ausführung der Namensraumzuordnung der verwendet werden kann.
    • zeigt eine beispielhafte Datenstruktur zur Verwaltung eines Bestandes an freien Blöcken, die für eine Namensraumzuteilung mit der Methode der zur Verfügung stehen.
    • zeigt ein Beispiel der Zuteilung von Namensräumen unter Verwendung von Teilblöcken.
    • zeigt ein Verfahren zur Zuteilung eines Namensraums auf einer Speichervorrichtung gemäß einer Ausführungsform.
    • - zeigen Beispiele der Größenanpassung von Namensräumen im Wege der Namensraumzuordnung.
    • zeigt die Neuzuordnung eines Namensraums.
    • und zeigen ein sog. Thin Provisioning eines Namensraums im Wege der Namensraumzuordnung.
    • zeigt ein Verfahren zur Anpassung eines Namensraums durch Anpassen einer Namensraumzuordnung.
    • zeigt eine Zuordnung einer Namensraumzuordnung zur Entfernung einer Lücke in zugeordneten logischen Adressen.
    • zeigt eine Anpassung einer Namensraumzuordnung zur Reduzierung der Anzahl der Teilblöcke eines Namensraums.
    • zeigt eine Anpassung einer Namensraumzuordnung zur Reduzierung einer Lücke in den zugeordneten Adressen eines Namensraums und zur Konsolidierung verfügbarer freier Blöcke in einem zusammenhängenden Bereich.
    • zeigt eine Anpassung einer Namensraumzuordnung zur Verbesserung der zusammenhängenden und sequentiellen Zuordnung zwischen logischen Adressen, die in einem auf einer Speichervorrichtung zugeteilten Namensraum definiert sind, und zugeordneten logischen Adressen, die auf der Gesamtkapazität der Speichervorrichtung definiert sind.
    • zeigt ein Verfahren zur Anpassung der Umwandlung von logischen Adressen in physikalische Adressen gemäß einer Ausführungsform.
    • zeigt Blockgrößenänderungen für die Namensraumzuordnung.
    • - zeigen Anpassungen der Namensraumzuordnung bei der Umsetzung von Blockgrößenänderungen.
    • zeigt ein Verfahren zur Anpassung einer Blockgröße zwecks Namensraumzuordnung.
  • AUSFÜHRI,ICHE BESCHREIBUNG
  • Mindestens einige vorliegend offenbarte Ausführungsformen bieten effiziente, flexible Möglichkeiten zur Ausführung logischer Speicherzuteilungen und zur Verwaltung von Speichervorrichtungen.
  • Physikalische Speicherelemente einer Speichervorrichtung können im Wege des LBA-Verfahrens (Logical Block Addressing) als logische Speicherblöcke angeordnet werden. Ein logischer Speicherblock stellt die kleinste im LBA-Verfahren adressierbare Speichereinheit dar, und jede LBA-Adresse kennzeichnet einen einzelnen logischen Speicherblock, der sich einer bestimmten physikalischen Adresse einer Speichereinheit in der Speichervorrichtung zuordnen lässt.
  • Das Konzept des Namensraums bei Speichervorrichtungen ähnelt dem Konzept der Partitionen bei Festplatten zur Schaffung von logischen Speichern. Unterschiedliche Teile einer Speichervorrichtung können unterschiedlichen Namensräumen zugeteilt werden, also können sie LBA-Adressen aufweisen, die unabhängig voneinander in ihren jeweiligen Namensräumen konfiguriert sind. Jeder Namensraum identifiziert eine mittels LBA adressierbare Speichermenge der Speichervorrichtung. Eine gleiche LBA-Adresse kann in unterschiedlichen Namensräumen zur Identifizierung unterschiedlicher Speichereinheiten in unterschiedlichen Teilen der Speichervorrichtung verwendet werden. So kann z.B. ein erster Namensraum, der auf einem ersten Teil der Speichereinheit mit n Speichereinheiten zugeteilt ist, LBA-Adressen im Bereich von 0 bis n-1 aufweisen, und ein zweiter Namensraum, der auf einem zweiten Teil der Speichervorrichtung mit m Speichereinheiten zugeteilt ist, kann LBA-Adressen im Bereich von 0 bis m-1 aufweisen.
  • Ein Host-Rechner der Speichervorrichtung kann eine Abfrage zur Erzeugung, Löschung oder Reservierung eines Namensraums an die Speichervorrichtung richten. Nachdem ein Teil der Speicherkapazität der Speichervorrichtung einem Namensraum zugeteilt worden ist, ist eine LBA-Adresse im jeweiligen Namensraum eine logische Darstellung einer bestimmten Speichereinheit in den Datenträgern, obwohl die von der LBA-Adresse im Namensraum logisch dargestellte konkrete Speichereinheit im physikalischen Sinne zu unterschiedlichen Zeitpunkten unterschiedlichen Speichereinheiten entsprechen kann (z.B. bei SSDs).
  • Es gibt Herausforderungen bei der effizienten Umsetzung der Zuordnung von LBA-Adressen, die in mehreren Namensräumen definiert sind, in physikalische Speicherelemente in der Speichervorrichtung sowie bei der effizienten Nutzung der Speicherkapazität der Speichervorrichtung, und zwar v.a. dann, wenn eine dynamische Zuteilung, Löschung und Neuzuteilung mehrerer Namensräume mit unterschiedlichen, variierenden Größen auf einer Speichervorrichtung wünschenswert ist. So kann der einem gelöschten Namensraum zugeteilte Teil der Speicherkapazität nicht ausreichen, um die Zuteilung eines anschließenden Namensraums, der größer ist als der gelöschte Namensraum, zu ermöglichen, und wiederholte Zuteilungs- und Löschungszyklen können zur Fragmentierung der Speicherkapazität führen, was eine ineffiziente Zuordnung von LBA-Adressen auf physikalische Adressen und/oder eine ineffiziente Nutzung der fragmentierten Speicherkapazität der Speichervorrichtung zur Folge haben kann.
  • Mindestens einige Ausführungsformen der vorliegend offenbarten Erfindungen werden diesen Herausforderungen durch eine Block-für-Block-Zuordnung von LBA-Adressen, die in zugeteilten Namensräumen definiert sind, auf LBA-Adressen, die auf der gesamten Speicherkapazität der Speichervorrichtung definiert sind, gerecht. Nach der Zuordnung der in zugeteilten Namensräumen definierten LBA-Adressen auf die auf der gesamten Speicherkapazität der Speichervorrichtung definierten LBA-Adressen können die auf der gesamten Speicherkapazität der Speichervorrichtung definierten entsprechenden LBA-Adressen weiter unabhängig von der Namensraumzuteilung auf der Vorrichtung den physikalischen Speicherelementen zugeordnet werden. Basiert die Block-für-Block-Zuordnung von LBA-Adressen auf einer vorgegebenen Blockgröße, so kann eine effiziente Datenstruktur zur effizienten Berechnung von LBA-Adressen verwendet werden, die auf der gesamten Speicherkapazität der Speichervorrichtung definiert sind, aus den in den zugeteilten Namensräumen definierten LBA-Adressen verwendet werden.
  • So kann z.B. die gesamte Speicherkapazität der Speichervorrichtung gemäß einer vorgegebenen Blockgröße in Blöcken von LBA-Adressen aufgeteilt werden, um Flexibilität und Effizienz bei der Namensraumverwaltung zu gewährleisten. Die Blockgröße stellt die Anzahl der LBA-Adressen in einem Block dar. Ein Block der vorgegebenen Blockgröße kann i.F. als L-Block, voller L-Block, voller LBA-Block, LBA-Block oder manchmal einfach als voller Block oder Block bezeichnet werden. Die Block-für-Block-Zuordnung von Namensraum von LBA-Adressen, die in zugeteilten Namensräumen definiert sind, zu LBA-Adressen, die auf der gesamten Speicherkapazität der Speichervorrichtung definiert sind, ermöglicht die Zuteilung nicht angrenzender LBA-Adressen, die auf dem Gesamtspeicher definiert sind, an einen Namensraum, was die durch Zyklen der Zuteilung und Löschung von Namensraum verursachte Fragmentierung der Speicherkapazität reduzieren und die Effizienz bei der Nutzung der Speicherkapazität verbessern kann.
  • Vorzugsweise ist die Blockgröße der L-Blöcke vorbestimmt und stellt eine Zweierpotenz (2) dar, um die zur Zuordnung von Adressen für die L-Blöcke gehörenden Berechnungen zu vereinfachen. In anderen Fällen kann eine optimierte Blockgröße mit Methoden der künstlichen Intelligenz, durch maschinelles Lernen anhand der Namensraum-Nutzungsverläufe in der Speichervorrichtung und/oder anderen ähnlich genutzten Speichervorrichtungen vorhergesagt oder berechnet werden.
  • Eine vorliegend offenbarte Ausführungsform umfasst die dynamische Anpassung der Blockgröße der L-Blöcke. Nachdem die Namensraumzuordnung für mindestens einen auf einer Speichervorrichtung gemäß einer aktuellen Blockgröße zugeteilten Namensraum festgelegt worden ist, kann eine verbesserte Blockgröße anhand des Nutzungsverlaufs der Speichervorrichtung und/oder des vorhergesagten Nutzungsverhaltens der Speichervorrichtung bestimmt werden. Die verbesserte Blockgröße kann dabei auf die nächste Zahl abgerundet werden, die einen Bruchteil oder ein Vielfaches der aktuellen Blockgröße darstellt, so dass die dynamische Blockgrößenänderung zwecks Namensraumzuordnung durch Aufteilen oder Fusionieren von L-Blöcken umgesetzt werden kann. So können z.B. die L-Blöcke, die die aktuelle Blockgröße aufweisen und aktuell dem mindestens einen bestehenden Namensraum zugeteilt sind, als neue L-Blöcke der verbesserten Blockgröße aufgespalten oder kombiniert werden, die den gemäß der verbesserten Blockgröße zugeteilten bestehenden Namensräumen zugeteilt werden. Vorzugsweise wird auch die verbesserte Blockgröße auf die nächste Zahl abgerundet, die eine Zweierpotenz (2) darstellt, um die zur Zuordnung von Adressen für die Namensräume gehörenden Berechnungen zu vereinfachen.
  • zeigt ein Rechensystem, bei dem Ausführungsformen vorliegend offenbarter Erfindungen ausgeführt werden können.
  • In kommuniziert ein Host (101) mit einer Speichervorrichtung (103) über einen Kommunikationskanal mit einem vorgegebenen Protokoll. Beim Host (101) kann es sich um einen Rechner mit mindestens einer CPU handeln, an die Peripheriegeräte wie z.B. die Speichervorrichtung (103) über eine Verbindung wie z.B. einen Computer-Bus (z.B. PCI-X, PCIe-Bus), einen Kommunikationsabschnitt und/oder ein Computernetzwerk angeschlossen werden können.
  • Die Speichervorrichtung (103) kann zur Speicherung von Daten für den Host (101) verwendet werden. Als Beispiele von Computerspeichervorrichtungen im Allgemeinen seien insbesondere genannt: HDDs, SSDs, Flash-Speicher, DRAM, Magnetbänder, NAS-Geräte, usw. Die Speichervorrichtung (103) weist eine Host-Schnittstelle (105) auf, die Kommunikationen mit dem Host (101) unter Verwendung des Kommunikationskanals ausführt. So handelt es sich beim Kommunikationskanal zwischen Host (101) und Speichervorrichtung (103) z.B. in einer Ausführungsform um einen PCIe-Bus, und der Host (101) und die Speichervorrichtungen (103) kommunizieren per NVMe-Protokoll miteinander.
  • In einigen Ausführungen umfasst der Kommunikationskanal zwischen Host (101) und Speichervorrichtung (103) ein Computernetzwerk, z.B. ein LAN, ein WLAN, ein WPAN, ein Mobilfunknetz, eine ständig verbundene drahtlose Hochgeschwindigkeits-Kommunikationsverbindung (z.B. eine aktuelle oder zukünftige Generation einer Mobilfunkverbindung), und der Host (101) und die Speichervorrichtung (103) können derart konfiguriert werden, dass sie mit Datenspeicherverwaltungs- und Nutzungsbefehlen miteinander kommunizieren, die denen des NVMe-Protokolls ähnlich sind.
  • Die Speichervorrichtung (103) weist eine Steuerung (107) auf, die eine Firmware (104) ausführt, um als Reaktion auf Kommunikationen vom Host (101) Operationen durchzuführen. Generell handelt es sich bei Firmware um eine Art Computerprogramm, das die Steuerung, Überwachung und Datenbearbeitung bei konstruierten Rechnern gewährleistet. In steuert die Firmware (104) die Operationen der Steuerung (107) bei der Bedienung der Speichervorrichtung (103), so z.B. die Zuteilung von Namensräumen zwecks Datenspeicherung und -zugriff in der Speichervorrichtung (103), wie nachstehend näher erläutert.
  • Die Speichervorrichtung (103) weist nicht flüchtige Datenträger (109) wie z.B. mit magnetischem Material beschichtete rigide Platten und Speicherzellen in einer integrierten Schaltung auf. Die Datenträger (109) sind in dem Sinne nicht flüchtig, dass keine Energie benötigt wird, um die in den nicht flüchtigen Datenträgern (109) gespeicherten Daten/Informationen aufrechtzuerhalten, wobei die Daten/Informationen nach Herunterfahren und erneutem Hochfahren der nicht flüchtigen Datenträger (109) wieder abgerufen werden können. Die Speicherzellen können mit verschiedenen Speichertechnologien ausgeführt werden, so z.B. mit NAND-Gate-Flash-Speicher, PCM, MRAM, RRAM und 3D Xpoint, so dass die Datenträger (109) nicht flüchtig sind und dazu in der Lage sind, die darauf gespeicherten Daten über Tage, Monate und/oder Jahre hinweg ohne Energie aufrechtzuerhalten.
  • Die Speichervorrichtung (103) umfasst DRAM (106) zur Speicherung von Laufzeitdaten und Befehlen, die von der Steuerung (107) zur Verbesserung der Rechenleistung der Steuerung (107) und/oder zur Bereitstellung von Puffern für zwischen Host (101) und Datenträgern (109) übertragene Daten verwendet werden. DRAM (106) ist in dem Sinne flüchtig, dass eine Energieversorgung benötigt wird, um die darin gespeicherten Daten/Informationen aufrechtzuerhalten, die bei einer Unterbrechung der Energieversorgung sofort oder rasch verlorengehen.
  • Flüchtige DRAMs (106) weisen typischerweise kürzere Latenzzeiten auf als nicht flüchtige Datenträger (109), ihre Daten gehen jedoch bei Unterbrechung der Energieversorgung rasch verloren. Deshalb ist es vorteilhaft, den flüchtigen DRAM (106) zur vorübergehenden Speicherung von Befehlen und Daten, die von der Steuerung (107) bei deren aktueller Rechenaufgabe zur Verbesserung der Leistung verwendet werden, zu benutzen. In einigen Fällen wird der flüchtige DRAM (106) durch flüchtigen SRAM ersetzt, der in einigen Anwendungsfällen weniger Energie verbraucht als DRAM. Weisen die nicht flüchtigen Datenträger (109) eine Datenzugriffsleistung (z.B. bzgl. Latenzzeit, Lese-/Schreibgeschwindigkeit) auf, die mit dem flüchtigen DRAM (106) vergleichbar ist, kann auf den flüchtigen DRAM (106) verzichtet werden, und die Steuerung (107) kann Berechnungen durchführen, indem sie die nicht flüchtigen Datenträger (109) für Befehle und Daten nutzt, statt den flüchtigen DRAM (106) zu bedienen.
  • So weisen z.B. Cross-Point-Speicher (z.B. 3DXPoint-Speicher) eine Datenzugriffsleistung auf, die mit dem flüchtigen DRAM (106) vergleichbar ist. Ein Cross-Point-Speicher benutzt transistorfreie Speicherelemente, die jeweils eine Speicherzelle und einen Selektor aufweisen, die als Spalte zusammengestapelt sind. Spalten von Speicherelementen sind über zwei einander senkrecht verlaufende Drahtlagen verbunden, wobei eine Lage über den Spalten von Speicherelementen und die andere Lage unter den Spalten von Speicherelementen liegt. Jedes Speicherelement kann an einer Kreuzung eines Drahts auf jeder der beiden Lagen einzeln ausgewählt werden. Crosspoint-Speichervorrichtungen sind schnell und nicht flüchtig, und können als einheitlicher Speicherpool zwecks Verarbeitung und Speicherung verwendet werden.
  • In einigen Fällen weist die Steuerung (107) einen prozessorinternen Cache-Speicher auf, dessen Datenzugriffsleistung besser ist als die des flüchtigen DRAM (106) und/oder der nicht flüchtigen Datenträger (109). Deshalb wird eine Zwischenspeicherung von Befehls- und Datenteilen, die bei der aktuellen Rechenaufgabe benutzt werden, im prozessorinternen Cache-Speicher der Steuerung (107) bei Rechenoperationen der Steuerung (107) bevorzugt. In einigen Fällen weist die Steuerung (107) mehrere Prozessoren auf, die jeweils einen eigenen prozessorinternen Cache-Speicher aufweisen.
  • Optional führt die Steuerung (107) datenintensive speicherinterne Verarbeitungsaufgaben mit Daten und/oder Befehlen, die in der Speichervorrichtung (103) organisiert sind, durch. So nimmt die Steuerung (107) auf eine Abfrage des Hosts (101) hin eine Echtzeit-Analyse eines in der Speichervorrichtung (103) gespeicherten Datensatzes vor und teilt dem Host (101) einen reduzierten Datensatz als Antwort mit. So z.B. ist die Speichervorrichtung (103) in einigen Anwendungsfällen an Echtzeit-Sensoren angeschlossen, um Sensoreingänge zu speichern, und die Prozessoren der Steuerung (107) sind derart konfiguriert, dass sie anhand der Sensoreingänge maschinelles Lernen und/oder Mustererkennung durchführen, um ein KI-System zu unterstützen, das mindestens teilweise durch die Speichervorrichtung (103) und/oder den Host (101) ausgeführt ist.
  • In einigen Ausführungen werden die Prozessoren der Steuerung (107) mit einem Speicher (z.B. 108 oder 109) bei der Computerchipfertigung integriert, um eine speicherinterne Verarbeitung zu ermöglichen und so den von-Neumann-Flaschenhals zu überwinden, der die Rechenleistung infolge einer durch eine Latenzzeit bei Datenbewegungen zwischen einem in einer von-Neumann-Architektur getrennt konfigurierten Prozessor und Speicher bedingte Durchsatzbegrenzung einschränkt. Durch die Integration von Prozessor und Speicher werden Verarbeitungsgeschwindigkeit und Datendurchsatz verbessert und Latenz und Energieverbrauch reduziert.
  • Die Speichervorrichtung (103) kann in verschiedenen Rechensystemen, so z.B. einem Cloud-Rechensystem, einem Edge-Computing-System, einem Fog-Computing-System und/oder einem eigenständigen Rechner Einsatz finden. In einem Cloud-Computing-System sind dezentrale Server zwecks Datenspeicherung, -verwaltung und - verarbeitung vernetzt. Ein Edge-Computing-System optimiert das Cloud-Computing dadurch, dass die Datenverarbeitung am datenquellnahen Rand des Computernetzes durchgeführt wird, wodurch die Datenkommunikationen mit einem zentralisierten Server und/oder Datenspeicher reduziert werden. Ein Fog-Computing-System verwendet mindestens ein Endgerät oder benutzernahes Edge-Gerät zur Datenspeicherung, wodurch das Erfordernis, Daten in einer zentralisierten Datenbank zu speichern, reduziert oder beseitigt wird.
  • Mindestens einige Ausführungsformen der vorliegend offenbarten Erfindungen können mit von der Steuerung (107) ausgeführten Befehlen, z.B. der Firmware (104), ausgeführt werden. In einigen Fällen können Hardware-Schaltungen zur Ausführung mindestens einiger Funktionen der Firmware (104) verwendet werden. Die Firmware (104) kann zunächst in den nicht flüchtigen Datenträgern (109) oder einer anderen nicht flüchtigen Vorrichtung gespeichert und in den flüchtigen DRAM (106) und/oder den prozessorinternen Cache-Speicher zur Ausführung durch die Steuerung (107) geladen werden.
  • So kann die Firmware (104) z.B. zur Verwendung der nachstehend erläuterten Methoden bei der Namensraumverwaltung konfiguriert werden. Die Verwendungsmöglichkeiten der nachstehend beschriebenen Methoden beschränken sich jedoch nicht auf das Rechensystem der und/oder die vorstehend erläuterten Beispiele.
  • zeigt ein Beispiel der unmittelbaren Zuteilung mehrerer Namensräume gemäß den angeforderten Größen der Namensräume.
  • Das Verfahren der kann z.B. bei der Speichervorrichtung (103) der ausgeführt werden. Die nicht flüchtigen Datenträger (109) der Speichervorrichtung (103) weisen Speichereinheiten auf, die von einem LBA-Adressbereich (222, 224, ...) identifiziert werden können, wobei der Bereich einer Speicherkapazität (220) der nicht flüchtigen Datenträger (109) entspricht.
  • In werden Namensräume (221, 223) unmittelbar aus dem verfügbaren zusammenhängenden Bereich der Kapazität (220) zugeteilt. Wird einer der vorher zugeteilten Namensräume (221, 223) gelöscht, kann es zur Fragmentierung der übrigen zur Zuteilung an einen anderen Namensraum frei stehenden Kapazität (220) kommen, wodurch die Auswahlmöglichkeiten für die Größe eines anschließenden neuen Namensraums eingeschränkt werden.
  • Wenn z.B. der Namensraum (221) der gelöscht wird und der Namensraum (223) in einem in dargestellten Bereich noch zuzuteilen bleibt, sind die freien Teile der Kapazität (220) fragmentiert, was die Auswahlmöglichkeiten bei der Größe des anschließenden neuen Namensraums derart einschränkt, dass dieser nur kleiner oder gleich der Größe des Namensraums (221) sein kann.
  • Zur Verbesserung der Flexibilität bei der dynamischen Namensraumverwaltung und zur Unterstützung von Iterationen der Erzeugung und Löschung von Namensräumen verschiedenerlei Größen kann eine blockweise Zuordnung/Zuteilung logischer Adressen verwendet werden, wie nachstehend näher beschrieben.
  • zeigt ein Beispiel der Zuteilung von Namensräumen über Abbildungsblöcke von logischen Adressen.
  • In ist die Kapazität (220) der Speichervorrichtung (103) in L-Blöcke bzw. Blöcke (231, 233, ..., 237, 239) mit LBA-Adressen geteilt, die auf der Gesamtkapazität der Speichervorrichtung (103) definiert sind. Zur Verbesserung der Effizienz bei der Adressabbildung sind die L-Blöcke (231, 233, ..., 237, 239) gleich groß (133) ausgelegt. Vorzugsweise ist die Blockgröße (133) eine Zweierpotenz (2), so dass Teilungs-, Teilungsrest- und Multiplikationsoperationen, die die Blockgröße (133) betreffen, mittels Verschiebungsoperationen effizient ausführbar sind.
  • Nachdem die Kapazität (220) in L-Blöcke (231,233, ..., 237, 239) aufgeteilt worden ist, wie in gezeigt, braucht ein Namensraum (z.B. 221 oder 223) nicht mehr aus einem zusammenhängenden Bereich der Kapazität (220) zugeteilt zu werden. Ein Satz von L-Blöcken (231, 233, 237, 239) aus nicht zusammenhängenden Bereichen der Kapazität (228) lässt sich aus einem Namensraum (z.B. 221 oder 223) zuteilen. Der Einfluss der Fragmentierung auf die zur Erzeugung neuer Namensräume verfügbaren Größen, der aus der Löschung ausgewählter, bereits erzeugter Namensräume resultieren kann, wird so beseitigt oder reduziert.
  • Bspw. können nicht angrenzende L-Blöcke (233 und 237) in der Kapazität (220) durch blockweise Zuordnung zusammenhängenden Bereichen (241 und 243) des Namensraums (221) zugeteilt werden, und nicht angrenzende L-Blöcke (231 und 239) in der Kapazität (220) können durch blockweise Zuordnung zusammenhängenden Bereichen (245 und 247) des Namensraums (223) zugeteilt werden.
  • Wird die Blockgröße (133) reduziert, wird die Flexibilität des Systems bei der dynamischen Namensraumverwaltung erhöht. Durch eine reduzierte Blockgröße (133) wird aber auch die Anzahl der zuzuordnenden Blöcke erhöht, was die rechnerische Effizienz bei der Adressabbildung reduziert. Eine optimale Blockgröße (133) stellt einen Ausgleich zwischen Flexibilität und Effizienz dar, und eine bestimmte Blockgröße (133) kann für die konkrete Nutzung einer bestimmten Speichervorrichtung (103) in einer konkreten Rechenumgebung ausgewählt werden.
  • zeigt ein Beispiel von Datenstrukturen für eine Namensraumabbildung.
  • Die Datenstrukturen für die Namensraumzuteilung der können z.B. zur Umsetzung der blockweisen Adressabbildung der verwendet werden. Die Datenstruktur der nimmt wenig Speicherressourcen in Anspruch und bietet dafür eine optimale rechnerische Effizienz.
  • In speichert eine Namensraumabbildung (273) ein Array der Kennungen von L-Blöcken (z.B. 231, 233, ..., 237, 239), die einem Satz von Namensräumen (z.B. 221, 223), die in den Namensraumdaten (271) gekennzeichnet sind, zugeteilt worden sind.
  • Beim Array der Namensraumabbildung (273) werden die Kennungen der jedem Namensraum (281, 283, 285 oder 287) zugeteilten L-Blöcke (301, 302; 303, .., 304; 305,... 308; oder 309,.... 310) in einem zusammenhängenden Bereich des Arrays gespeichert. Also können die Teile der Kennungen von L-Blöcken (301, ..., 302; 303, ..., 304; 305, ... 308; und 309, ..., 310), die unterschiedlichen Namensräumen (281, 283, 285 und 287) zugeteilt sind, und die Kennungen der Ausgangsadressen (291, 293, 295 und 297) der Blockkennungen im Array auseinandergehalten werden.
  • Optional machen die Namensraumdaten (271) für jeden der Namensräume (281, 283, 285 oder 287) deutlich, ob die den jeweiligen Namensräumen (281, 283, 285, oder 287) zugeteilten L-Blöcke (301, ..., 302; 303, ..., 304; 308, ... 308; oder 309, ..., 310) auf den logischen Adressen in der Kapazität (220) zusammenhängend ist.
  • Wird die Kapazität (220) z.B. in 80 Blöcke aufgeteilt, können die L-Blöcke als L-Blöcke 0 - 79 gekennzeichnet werden. Da die angrenzenden Blöcke 0 - 19 (301 und 302) dem Namensraum 1 (281) zugeteilt sind, weist der Kontiguitätsindikator (292) des Namensraums 1 (281) einen Wert auf, aus dem hervorgeht, dass die Sequenz der L-Blöcke, die durch die Blockkennungen an einer Ausgangsadresse (291) im Array der Namensraumabbildung (271) gekennzeichnet werden, einen zusammenhängenden Bereich im logischen Adressraum/der Kapazität (220) belegt.
  • Ebenso sind die L-Blöcke 41 - 53 (303 und 304), die dem Namensraum 2 (283) zugeteilt sind, benachbart, also weist ein Kontiguitätsindikator (294) des Namensraums 2 (283) einen Wert auf, aus dem hervorgeht, dass sich die Liste mit L-Blöcken, die durch die Blockkennungen an einer Ausgangsadresse (293) im Array der Namensraumabbildung (273) gekennzeichnet werden, in einem zusammenhängenden Bereich im logischen Adressraum/der Kapazität (220) befindet.
  • Ebenso sind die L-Blöcke 54 - 69 (309 und 310), die dem Namensraum 4 zugeteilt sind, benachbart, also weist ein Kontiguitätsindikator (298) des Namensraums 4 (287) einen Wert auf, aus dem hervorgeht, dass die Liste mit L-Blöcken, die durch die Blockkennungen an einer Ausgangsadresse (297) im Array der Namensraumabbildung (273) gekennzeichnet werden, einen zusammenhängenden Bereich in der logischen Adresskapazität (220) belegt. Es ist zwar bevorzugt, aber nicht erforderlich, dass sich die einem Namensraum zugeteilten L-Blöcke in einem zusammenhängenden Bereich des zugeordneten logischen Adressraums/der zugeordneten Kapazität (220) befinden.
  • zeigt, dass die dem Namensraum 3 (285) zugeteilten Blöcke 22, 25, 30 und 31 (305, 306, 307 und 308) nicht benachbart sind, und ein Kontiguitätsindikator (296) des Namensraums 3 (285) weist einen Wert auf, aus dem hervorgeht, dass die Liste mit Blöcken, die durch die Blockkennungen ab eine Ausgangsadresse (295) im Array der Namensraumabbildung (273) gekennzeichnet sind, aus nicht zusammenhängenden Bereichen des zugeordneten logischen Adressraums/der zugeordneten Kapazität (220) befindet.
  • In einigen Fällen kann eine Speichervorrichtung (103) Namensräume bis zu einer vorgegebenen Anzahl zuteilen. Leere Adressen können als Ausgangsadressen noch nicht zugeteilter Namensräume verwendet werden. Also weisen die Namensraumdaten (271) eine vorgegebene Datengröße auf, die eine Funktion der auf der Speichervorrichtung (103) zuteilbaren vorgegebenen Anzahl Namensräume ist.
  • Optional umfasst die Datenstruktur eine Freiraumliste (275), die ein Array enthält, in dem die Kennungen der L-Blöcke (321 - 325, ..., 326 - 327, ..., 328 - 329, ..., 330) gespeichert sind, die noch keinem der in den Namensraumdaten (271) identifizierten zugeteilten Namensräume (281, 283, 285, 287) zugeteilt worden sind.
  • In einigen Fällen wird die Liste mit Kennungen von L-Blöcken (321 -330) der Freiraumliste (275) dem Ende der Liste mit Kennungen von L-Blöcken (301 - 310) angefügt, die derzeit den in den Namensraumdaten (271) identifizierten Namensräumen (281, 283, 285, 287) zugeteilt sind. Ein Ausgangsadressfeld eines freien Blocks kann den Namensraumdaten hinzugefügt werden, um den Anfang der Liste mit Kennungen der L-Blöcke (321 - 330) auf der Freiraumliste (275) zu kennzeichnen. Also weist die Namensraumabbildung (273) ein Array einer vorgegebenen Größe, das der Anzahl der L-Blöcke auf der Kapazität (220) insgesamt entspricht.
  • zeigt ein System zur Übertragung von Adressen in einer nicht flüchtigen Speichervorrichtung, um die Namensraumverwaltung zu unterstützen. So kann etwa das System der mit einer Speichervorrichtung (103) der , einer in dargestellten Zuteilungsmethode für logische Adressen und einer Datenstruktur, die der in dargestellten Datenstruktur ähnelt, ausgeführt werden.
  • In sind ein Verwaltungsmanager (225), ein Datenmanager (227) auch I/O-Manager genannt) und ein lokaler Manager (229) als Teil der Firmware (z.B. 104) einer Speichervorrichtung (z.B. 103, in dargestellt) ausgeführt.
  • Der Verwaltungsmanager (225) empfängt Befehle (z.B. 261, 263, 265) vom Host (z.B. 101 in ), um einen Namensraum (z.B. 221 oder 223) zu erzeugen (261), zu löschen (263) oder zu ändern (265). Als Reaktion erzeugt/aktualisiert der Verwaltungsmanager (225) eine Namensraumabbildung (255), wie z.B. die Namensraumabbildung (273), um die in oder dargestellte Zuordnung umzusetzen. Ein Namensraum (z.B. 221 oder 223) kann geändert werden, um diesen zu vergrößern bzw. zu verkleinern (z.B. durch Zuteilung von mehr Blöcken zum Namensraum oder Zurückgeben einiger seiner Blöcke zum Bestand der freien Blöcke).
  • Der Datenmanager (227) empfängt Datenzugriffsbefehle. Eine Datenzugriffsabfrage (z.B. Ablesen, Schreiben) vom Host (z.B. 101 in ) identifiziert eine Namensraum-ID (251) und eine LBA-Adresse (253) in der Namensraum-ID (251), um Daten in einer durch die Namensraum-ID (251) und die LBA-Adresse (253) gekennzeichneten Speichereinheit abzulesen, zu schreiben oder daraus zu löschen. Anhand der Namensraumabbildung (255) wandelt der Datenmanager (227) die Kombination aus Namensraum-ID (251) und LBA-Adresse (253) in eine zugeordnete logische Adresse (257) im entsprechenden L-Block (z.B. 231, 233, ..., 237, 239) um.
  • Der lokale Manager (229) überträgt die zugeordnete logische Adresse (257) in eine physikalische Adresse (259). Die logischen Adressen im L-Block (z.B. 231, 233, ..., 237, 239) können den physikalischen Adressen (259) in den Datenträgern (z.B. 109 in ) so zugeordnet werden, als ob die zugeordneten logischen Adressen (257) einem virtuellen Namensraum, der die nicht flüchtigen Datenträger (109) ganz abdeckt, virtuell zugeordnet wären.
  • Also lässt sich sagen, dass die Namensraumabbildung (255) als blockweise Zuordnung von in einem in der Speichervorrichtung (103) erzeugten/zugeteilten aktuellen Satz Namensräume (221, 223) definierten logischen Adressen zu den im virtuellen Namensraum definierten zugeordneten logischen Adressen (257) fungiert. Da sich der virtuelle Namensraum bei Änderungen der aktuellen Zuteilung des aktuellen Satzes von Namensräumen (221, 223) nicht ändert, sind die Einzelheiten der aktuellen Namensräume (221, 223) bei der Übertragung der zugeordneten logischen Adressen (z.B. 257) in physikalische Adressen (z.B. 259) vor dem lokalen Manager (229) komplett abgeschirmt.
  • Vorzugsweise nimmt die Ausführung der Namensraumabbildung (255) wenig Speicherressourcen in Anspruch und weist eine optimale rechnerische Effizienz auf (z.B. unter Verwendung einer Datenstruktur, die der Abbildung in ähnelt).
  • In einigen Fällen kann es sein, dass die Speichervorrichtung (103) eine Speicherkapazität (220) aufweist, die ein Vielfaches einer wünschenswerten Blockgröße (133) ist. Ferner kann es sein, dass eine angeforderte Namensraumgröße kein Vielfaches der wünschenswerten Blockgröße (133) ist. Der Verwaltungsmanager (225) kann die Fehlausrichtung der wünschenswerten Blockgröße (133) mit der Speicherkapazität (220) und/oder die Fehlausrichtung einer angeforderten Namensraumgröße mit der wünschenswerten Blockgröße (133) erkennen, was einen Benutzer dazu veranlasst, die wünschenswerte Blockgröße (133) und/oder die angeforderte Namensraumgröße anzupassen. Alternativ oder zusätzlich kann der Verwaltungsmanager (225) einem Teil eines falsch ausgerichteten Namensraums einen vollen Block zuteilen und/oder auf die Verwendung eines übrigen Teils des zugeteilten vollen Blocks verzichten.
  • zeigt ein Verfahren zur Verwaltung von Namensräumen aufgrund von Blöcken logischer Adressen. Das Verfahren der kann z.B. mit vorstehend im Zusammenhang mit - erläuterten L-Block-Methoden in einer in dargestellten Speichervorrichtung (103) ausgeführt werden.
  • In umfasst das Verfahren: Teilen (341) einer zusammenhängenden logischen Adresskapazität (220) aus nicht flüchtigen Datenträgern (z.B. 109) in Blöcke (z.B. 231, 233, ..., 237, 239) gemäß einer vorgegebenen Blockgröße (133) und Aufrechterhalten (343) einer (z.B. in dargestellten) Datenstruktur, deren Inhalt freie Blöcke (z.B. 312 - 330) und Blöcke (z.B. 301 - 310), die aktuell verwendeten Namensräumen (281 - 285) zugeteilt sind, identifiziert.
  • Als Reaktion auf den Eingang (345) einer Anforderung, von der festgestellt (347) wird, dass sie einen Namensraum erzeugt, umfasst das Verfahren ferner Zuteilen (349) einer Anzahl freier Blöcke zum Namensraum.
  • Als Reaktion auf den Eingang (345) einer Anforderung, von der festgestellt (347) wird, dass sie einen bestehenden Namensraum löscht, umfasst das Verfahren ferner Zurückgeben (351) der Blöcke, die dem Namensraum vorher zugeteilt worden waren, zur Freiblockliste (275) als freie Blöcke.
  • Als Reaktion auf die Aufforderung zur Erzeugung oder Löschung eines Namensraums umfasst das Verfahren ferner Aktualisieren (353) des Inhalts der Datenstruktur, um die derzeit verfügbaren freien Blöcke (z.B. 312 - 330) und die Blöcke (z.B. 301 - 310), die derzeit bestehenden Namensräumen (281 - 285) zugeteilt sind, zu identifizieren.
  • Als Reaktion auf den Eingang (355) einer Zugriffsabfrage auf eine logische Adresse in einem bestimmten Namensraum umfasst das Verfahren ferner Übertragen (357) der logischen Adresse in eine physikalische Adresse anhand des Inhalts der Datenstruktur.
  • So umfasst eine in dargestellte Speichervorrichtung (103) z.B.: eine Host-Schnittstelle (105); eine Steuerung (107); nicht flüchtige Datenträger (109) und Firmware (104), die Befehle enthält, die bei Ausführung durch die Steuerung (107) diese mindestens zur Ausführung folgender Funktionen veranlassen: Speichern einer Blockgröße (133) von logischen Adressen; Aufteilen einer logischen Adresskapazität (220) der nicht flüchtigen Datenträger (109) in L-Blöcke (z.B. 231, 233, ..., 237, 239) gemäß der Blockgröße (133) und Unterhalten einer Datenstruktur, um eine freie Teilmenge der L-Blöcke, die zur Zuteilung an neue Namensräume (z.B. L-Blöcke 312 - 330) zur Verfügung stehen, und eine zugeteilte Teilmenge der L-Blöcke, die bestehenden Namensräumen (z.B. L-Blöcke 301 - 310) zugeteilt worden sind, zu identifizieren. Vorzugsweise ist die Blockgröße (133) eine Zweierpotenz.
  • So kann es sich bei der Speichervorrichtung (103) um eine SSD handeln, die zwecks Namensraumverwaltung und/oder -zugriff gemäß einer NVMHCI-Vorgabe (Non-Volatile Memory Host Controller Interface) mit dem Host (101) kommuniziert.
  • Nachdem die Host-Schnittstelle (105) vom Host (101) eine Aufforderung zur Zuteilung eines bestimmten Namensraums (221) aus einer nicht flüchtigen Speichermenge empfängt, teilt die Steuerung (107), die die Firmware (104) ausführt, dem bestimmten Namensraum (221) einen Satz von Blöcken (233 und 237) aus der freien Teilmenge zu und aktualisiert den Inhalt der Datenstruktur. Der Satz der dem bestimmten Namensraum (221) zugeteilten Blöcke (233 und 237) braucht in der logischen Adresskapazität (220) nicht zusammenhängend zu sein, was die Flexibilität bei der dynamischen Namensraumverwaltung verbessert.
  • Anhand des Inhalts der Datenstruktur überträgt die Steuerung (107), die die Firmware (104) ausführt, im ersten Namensraum definierte logische Adressen (257) in die zugeordneten logischen Adressen (257) und anschließend in physikalische Adressen (259) für die nicht flüchtigen Datenträger (109).
  • Nachdem die Host-Schnittstelle (105) vom Host (101) eine Aufforderung zur Löschung (263) eines bestimmten Namensraums (221) empfängt, aktualisiert die Steuerung (107), die die Firmware (104) ausführt, den Inhalt der Datenstruktur, um den aus der zugeteilten Teilmenge (z.B. 273) in der Datenstruktur dem bestimmten Namensraum (221) zugeteilten Satz Blöcke (233 und 237) zur freien Teilmenge (z.B. 275) in der Datenstruktur zurückzugeben.
  • Vorzugsweise umfasst die Datenstruktur ein Array mit Blockkennungen (301 - 310) in der zugeteilten Teilmenge und Zeigern (291, 293, 295, 297) auf Teile (301 - 302, 303 - 304, 305 - 308, 309 - 310) des Arrays, die entsprechende Blockkennungssätze (301 - 310) enthalten, die jeweiligen der bestehenden Namensräume (281, 283, 285, 287) zugeteilt sind.
  • Optional umfasst die Datenstruktur ferner einen Satz von Indikatoren (292, 294, 296, 298) für die jeweiligen der bestehenden Namensräume (281, 283, 285, 287), wo jeder der Indikatoren (292, 294, 296, 298), die angeben, ob ein jeweiliger Satz Blockkennungen (301 - 302, 303 - 304, 305 - 308, 209 - 310), der dem entsprechenden der bestehenden Namensräume (281, 283, 285, 287) zugeteilt ist, in der logischen Adresskapazität (220) bzw. dem logischen Adressraum zusammenhängend ist.
  • Optional umfasst die Datenstruktur ein Array mit Kennungen freier Blöcke (321 - 330) in der freien Teilmenge.
  • Die logische Adresskapazität (220) braucht kein Vielfaches der Blockgröße (133) zu sein. Ist die logische Adresskapazität (220) kein Vielfaches der Blockgröße (133), kann kein L-Block (z.B. 239), dessen Größe für einen vollen Block nicht ausreicht, verwendet werden.
  • Die zwecks Erzeugung (261) eines Namensraums (z.B. 221) angeforderte nicht flüchtige Speichermenge braucht kein Vielfaches der Blockgröße (133) zu sein. Ist die Menge kein Vielfaches der Blockgröße (133), kann es zur unvollständigen Nutzung eines der dem Namensraum zugeteilten vollen Blöcke kommen.
  • zeigt ein Beispieldiagramm, in dem ein Namensraum an Blockgrenzen nicht orientiert ist und mit den Methoden der - ausgeführt werden kann.
  • Wenn ein Host (z.B. 101 in ) die Erzeugung bzw. Reservierung eines Namensraums (111) mit einer angeforderten Namensraumgröße (131) anfordert, teilt eine Steuerung (z.B: 107 in ) einen Abschnitt ihrer nicht flüchtigen Datenträger (z.B. 109 in ) zur Adressierung über LBA-Adressen unter dem Namensraum (111) zu.
  • In einem in dargestellten Fall ist die angeforderte Namensraumgröße (131) kein Vielfaches der Blockgröße (133). Im Ergebnis, wenn die erste LBA-Adresse im Namensraum (111), die eine im Namensraum (111) befindliche Speichereinheit darstellt, mit der ersten LBA-Adresse eines L-Blocks (z.B. 121) ausgerichtet (z.B. dieser zugeordnet) ist, kann die letzte LBA-Adresse im Namensraum (111) nicht mit der letzten LBA-Adresse eines L-Blocks (z.B. 123) ausgerichtet (z.B dieser zugeordnet) werden, wie in gezeigt. Also ist der Namensraum (111) zwecks Zuteilung nicht mit den Grenzen von L-Blöcken ausgerichtet. Da die angeforderte Namensraumgröße (131) kein Vielfaches der Blockgröße (133) ist, wird die angeforderte Namensraumgröße (131) am besten von einer Anzahl voller Blöcke (121, ..., 123) und einem Teil (113) eines vollen Blocks (127) erfüllt. Der Teil (113) wird auch als Teilblock (113) bezeichnet.
  • In ist der Teil (113) des vollen Blocks (127) (bzw. des Teilblocks (113)) dem Namensraum (111) zugeteilt, und der übrige Teil (115) des vollen Blocks (127) (bzw. Teilblocks (115)) wird dem Namensraum (111) nicht zugeteilt. Der übrige Teil (115), bzw. ein Teil davon, kann anschließend einem anderen Namensraum zugeteilt werden, der ebenfalls einen Teilblock benötigt. Unterschiedliche Namensräume können unterschiedliche Teile (z.B. 113, 115) des vollen Blocks (127) verwenden.
  • zeigt ein beispielhaftes Blockdiagramm einer Namensraumabbildung zur Ausführung eines Namensraums, der mit Blockgrenzen nicht ausgerichtet ist.
  • In ist eine Namensraumabbildung (135) mit dem Namensraum (111) verknüpft, um die dem Namensraum (111) zugeteilten LBA-Adressblöcke zu identifizieren. Die Verknüpfung der Namensraumabbildung (135) mit dem Namensraum (111) kann mit beliebigen Methoden zur Verbindung zweier Gegenstände erfolgen. So kann z.B. eine Kennung der Namensraumabbildung (135) in Assoziation mit einer Kennung des Namensraums (111) gespeichert werden, um die Namensraumabbildung (135) mit dem Namensraum (111) zu verknüpfen. So kann z.B. eine Liste mit Zeigern, die einer Liste mit zugeteilten Namensräumen entsprechen, zur Identifizierung der Ausgangsspeicherorte von Datenstrukturen von Namensraumabbildungen verwendet werden, um die Namensraumabbildungen mit deren Namensräumen zu verknüpfen. Die Adressen in den L-Blöcken (z.B. (121, ..., 123)) können durch eine getrennte Ebene der Firmware (104) (z.B. FTL (Flash Translation Layer) für SSDs) weiter in die entsprechenden Adressen der physikalischen Speicherorte übertragen werden.
  • Die Namensraumabbildung (135) umfasst die Kennungen (141, ..., 143) der dem Namensraum (111) zugeteilten vollen Blöcke (121, ..., 123) und eine Kennung (147) eines dem Namensraum (111) zugeteilten Teilblocks (113).
  • Da die vollen Blöcke (121, ..., 123) die gleiche vorgegebene Blockgröße (133) aufweisen, kann die Liste mit Kennungen voller Blöcke (141, ..., 143) mit einem Array oder einer Liste mit den Kennungen der Ausgangseinheiten (oder Endeinheiten) der vollen Blöcke (121, ..., 123) identifiziert werden. Durch diese Anordung wird die Namensraumabbildung (135) vereinfacht und eine effiziente Adressübertragung ermöglicht. Der Teilblock (113) lässt sich so aber nicht darstellen.
  • zeigt ein Beispiel einer teilweisen Blockkennung, die zur Ausführung der Namensraumabbildung der verwendet werden kann.
  • In umfasst eine Teilblockkennung (151) eine Ausgangseinheitskennung (153) und eine Stückgröße (155). Die Ausgangseinheitskennung (153) ist eine Kennung der von der Teilblockkennung (151) dargestellten ersten logischen Speichereinheit des Teilblocks (z.B. 113 oder 115). Ist der Teilblock (113) einem Stück aus Speichereinheiten zugeteilt, stellt die Stückgröße (155) die Menge der dem Teilblock (113) zugeteilten Speichereinheiten dar. Also kann die Stückgröße (155) der Ausgangseinheitskennung (153) hinzugefügt werden, um die Endeinheitskennung zu berechnen, die die letzte Einheit im von der Teilblockkennung (151) dargestellten Teilblock (z.B. 113 oder 115) ist. In Kombination kennzeichnet die Teilblockkennung (151) einen einzigartigen Teil (z.B. 113 oder 115) eines vollen Blocks (z.B. 127). Ist die Stückgröße (155) gleich der Blockgröße (133), stellt die Teilblockkennung (151) tatsächlich einen vollen Block dar. So kann eine Teilblockkennung (151) zur Darstellung eines vollen Blocks (der anschließend in mehrere Teilblöcke (z.B. 113 oder 115) aufgeteilt werden kann), und mehrere angrenzende Teilblöcke (z.B. 113 oder 115) können zu einem vollen Block (z.B. 127) kombiniert werden.
  • So kann z.B. die Teilblockkennung (151) mit den entsprechenden Daten, die die Ausgangseinheitskennung (153) und die Stückgröße (155) des Teilblocks (113) angeben, als die Teilblockkennung (147) der Namensraumabbildung (135) der verwendet werden, um den in dem Namensraum (111) zugeteilten Teilblock (113) darzustellen.
  • Die Teilblockkennung (151) mit den entsprechenden Daten, die die Ausgangseinheitskennung (153) und die Stückgröße (155) des Teilblocks (115) angeben, kann z.B. zur Darstellung des nicht zugeteilten freien Teilblocks (115) der verwendet werden, der zur Zuteilung zu einem anderen Namensraum verfügbar ist. Eine verknüpfte Liste mit nicht zugeteilten Teilblöcken (z.B. 115) kann zur Verfolgung eines Bestands an freien Teilblöcken verwendet werden.
  • Alternativ kann die Stückgröße (155) in der Teilblockkennung (151) durch die Endeinheitskennung des entsprechenden Teilblocks ersetzt werden. Die Teilblockkennung (151) kann auch gleichwertig durch eine Kombination aus Stückgröße (155) und Endeinheitskennung dargestellt werden.
  • Die von der Firmware (104) programmierte Steuerung (107) speichert Daten (z.B. im flüchtigen DRAM (106) und/oder nicht flüchtigen Datenträgern (109)), um einen Bestand an freien Blöcken anhand einer teilweisen Liste mit Teilblöcken zu verfolgen, wie in gezeigt.
  • Vorzugsweise verwendet jede Namensraumabbildung (135) nur einen Teilblock (113), um eine effiziente Adressübertragung zu gewährleisten. In einigen Fällen kann aber eine Namensraumabbildung (z.B. 135) mehrere Teilblöcke (z.B. 113) umfassen, wenn kein einzelner freier Teilblock (z.B. 113) zur Verfügung steht, um die Anforderung zu erfüllen.
  • zeigt eine beispielhafte Datenstruktur zur Verwaltung eines Bestandes an freien Blöcken, die für eine Namensraumzuteilung mit der Methode der zur Verfügung stehen.
  • Eine Datenstruktur eines Bestandes (160) an freien Blöcken umfasst Kennungen freier Blöcke (161, 163, ..., 165).
  • In einer Ausführung wird der Freiblockbestand (160) zur Verfolgung der verfügbaren freien Teilblöcke (z.B. 115), die neuen Namensräumen zugeteilt werden können, verwendet. Jeder der freien Blöcke (161, 163,.... 165) kann anhand der in dargestellten bzw. in Verbindung damit erläuterten Teilblockkennung (151) identifiziert werden.
  • In einigen Ausführungen verfolgt der Freiblockbestand (160) optional auch die verfügbaren freien vollen Blöcke (161, 163, 165), wobei jeder der vollen Blöcke auf bequeme Weise anhand der Datenstruktur der Teilblockkennung (151) der dargestellt wird, wobei die Stückgröße (155) gleich der Blockgröße (133) ist.
  • In anderen Ausführungen verfolgt der Freiblockbestand (160) die verfügbaren vollen Blöcke (161, 163, ..., 166) anhand einer Liste von Vollblockkennungen unter Verwendung einer Liste mit Vollblockkennungen, die der in der Namensraumabbildung (135) verwendeten Liste von Vollblockkennungen ähnlich ist, wobei jede der Vollblockkennungen durch eine repräsentative Einheitskennung (z.B. Ausgangseinheit oder Endeinheit) in Anbetracht der bekannten einheitlichen Blockgröße (133) der vollen Blöcke dargestellt wird.
  • Zur effizienten Handhabe der Nichtübereinstimmung der angeforderten Namensraumgröße (131) und/oder der Kapazität (220) mit der Blockgröße (133) kann der Verwaltungsmanager (225) die vorstehend in Verbindung mit - beschriebenen Teilblockkennungsmethoden auf flexible Art und mit minimalen Auswirkungen auf die Adressübertragungsleistung verwenden, wie in gezeigt.
  • zeigt ein Beispiel der Zuteilung von Namensräumen unter Verwendung von Teilblöcken.
  • So kann etwa die Methode der zur Unterstützung der dynamischen Namensraumverwaltung auf der Speichervorrichtung (103) der mithilfe der Teilblockkennungsmethoden der - verwendet werden.
  • In ist die Speicherkapazität (220) der nicht flüchtigen Datenträger (109) in Blöcke von LBA-Adressen (L-Blöcke) (231, 233, ..., 237) gleicher Größe (z.B. 133, in dargestellt) aufgeteilt, wobei jedoch der letzte Block (239) kleiner als die vorgegebene Blockgröße (133) ist. In kann der Verwaltungsmanager (225) den letzten Block (239) virtuell erweitern, um eine virtuelle Kapazität (249) einzuschließen, so dass auch der letzte Block (239) als gleich groß (133) betrachtet werden kann. Da die virtuelle Kapazität (249) jedoch zur Zuteilung an einen Namensraum nicht verfügbar ist, legt der Verwaltungsmanager (225) den freien Teil des letzten Blocks (239) in einen Freiblockbestand (160) als verfügbaren Teilblock (z.B. dargestellt durch eine Teilblockkennung (151) der ) ab, als ob der Teil der virtuellen Kapazität (249) bereits einem bestehenden Namensraum zugeteilt worden wäre.
  • Vorzugsweise ist die Blockgröße (133) eine Zweierpotenz, was bei der Optimierung der die Blockgröße (133) betreffenden Berechnungen vorteilhaft ist. Wenn z.B. die Blockgröße (133) eine Zweierpotenz ist, können Teilungs-, Teilungsrest- und Multiplikationsoperationen, die die Blockgröße (133) betreffen, mittels Verschiebungsoperationen vereinfacht werden.
  • Die logischen Adressen in den L-Blöcken (231, 233, ..., 237, 239) können unabhängig von der Namensraumzuteilung (z.B. 221, 223) (z.B. durch eine Flash-Übertragungsebene der Firmware (104) der als SSD konfigurierten Speichervorrichtung (103) in physikalische Adressen der nicht flüchtigen Datenträger (109) übertragen werden.
  • Durch die Aufteilung der Speicherkapazität (220) in die (L-Blöcke) (231, 233, ... 237) evtl. mit einem Teilblock (239) wird die dynamische Namensraumverwaltung auf Blockebene ermöglicht. Die in den Namensräumen (z.B. 221, 223) definierten logischen Adressen sind den auf der Kapazität (220) definierten L-Blöcken (231, 233, 237, 239) zugeordnet, so dass die Einzelheiten der Umsetzung des Namensraums vor der Übertragung aus der zugeordneten logischen Adresse (257) in den L-Blöcken (231, 233, 237, 239) in die physikalischen Adressen (259) der nicht flüchtigen Datenträger (109) abgeschirmt werden.
  • So wird z.B. ein Block (241) voller Größe mit logischen Adressen im Namensraum A (221) den abgebildeten logischen Adressen (257) in einem L-Block (233) linear zugeordnet. Ebenso wird z.B. ein Block (245) voller Größe mit logischen Adressen im Namensraum B (221) den abgebildeten logischen Adressen (257) in einem anderen L-Block (231) linear zugeordnet. Die blockweise Zuordnung der logischen Adressen verbessert die Effizienz bei der Adressübertragung.
  • Sind die Größen der Namensräume (221, 223) keine Vielfachen der Blockgröße (133), so können Teile (243, 247) der Namensräume (221, 223) den Teilblöcken mindestens eines Blocks (z.B. 237) voller Größe zugeordnet werden, wie in - gezeigt. Die Datenstruktur der lässt sich modifizieren, um eine Teilblockkennung (147) eines Teil-L-Blocks (113) aufzunehmen, der einem Namensraum (221) zugeteilt ist, der einen Teil (z.B. 243) aufweist, der kleiner ist als die vorgegebene Blockgröße (133), und um eine Liste mit freien Teilblöcken aufzunehmen.
  • Durch die Unterhaltung einer Namensraumabbildung (z.B. 135 in , in , die sich weiter zur Aufnahme von Teilblockkennungen modifizieren lässt) und eines Freiblockbestands (z.B. 160 der , der , die sich weiter zur Aufnahme von Teilblockkennungen modifizieren lässt) ermöglicht die Steuerung (107) der Speichervorrichtung (103) eine dynamische Namensraumverwaltung, wobei Namensräume bei Bedarf erzeugt/zugeteilt werden können, gelöscht werden können, wenn sie nicht mehr gebraucht werden, und/oder neu dimensioniert werden können, wobei der Einfluss der Fragmentierung reduziert wird oder ganz ausbleibt. Die Zuordnung der logischen Adressen im Namensraum (z.B. 221, 223) zu den logischen Adressen zwecks Übertragung in physikalische Adressen lässt sich auf Befehle vom Host (101) hin dynamisch anpassen, um Namensräume zu erzeugen/zuzuteilen, zu löschen und/oder neu zu dimensionieren (z.B. vergrößern oder verkleinern).
  • Wird vom Host (101) ein Namensraum (z.B. 111, 221 oder 223) angefordert, dessen Größe nicht mit einer Blockgrenze ausgerichtet ist, kann der Host (101) optional dazu aufgefordert werden, die Größe des Namensraums (z.B. 111, 221 oder 223) zwecks Ausrichtung mit einer Blockgrenze zu revidieren.
  • zeigt ein Verfahren zur Zuteilung eines Namensraums auf einer Speichervorrichtung gemäß einer Ausführungsform.
  • So kann z.B. das Verfahren der durch Ausführen der Firmware (104) durch die steuerung (107) der Speichervorrichtung (103) ausgeführt werden.
  • Das Verfahren umfasst Empfangen (201) einer Aufforderung zur Zuteilung eines Teils der nicht flüchtigen Datenträger (109) der Speichervorrichtung (103) an einen Namensraum (111) mit einer angeforderten Namensraumgröße (131), bei der es sich nicht unbedingt um ein Vielfaches der Größe (133) voller L-Blöcke auf der Speichervorrichtung (103) handeln muss.
  • Auf die Aufforderung hin umfasst das Verfahren ferner Zuteilen (203) mindestens eines vollen freien L-Blocks (121 und/oder 123) an den Namensraum (111) solange, bis ein Unterschied zwischen der angeforderten Namensraumgröße (131) und dem zugeteilten mindestens einen vollen freien L-Block (121 und/oder 123) kleiner ist als die Größe (133) eines vollen L-Blocks (z.B. 121, ..., 123 oder 127).
  • Ist der Unterschied kleiner als die volle Blockgröße (133), so umfasst das Verfahren ferner Suchen (205) eines Freiblockbestands (160) für mindestens einen freien Teilblock (161, 163, 165) mit einer verfügbaren Gesamtgröße, die größer oder gleich dem Unterschied (113) ist. Vorzugsweise wird für den Unterschied höchstens ein Teilblock verwendet.
  • Wird mindestens ein Teilblock (z.B. 161), dessen insgesamt verfügbare Speicherkapazität größer oder gleich dem Unterschied (113) ist, aufgefunden (207), so umfasst das Verfahren ferner Zuteilen (209) des Unterschieds (113) aus dem mindestens einen freien Teilblock (z.B. 161). Übersteigt die verfügbare Speicherkapazität den Unterschied (113), so steht der mindestens eine übrige, nicht zugeteilte Teilblock frei und verbleibt im Bestand (160). Ist die verfügbare Speicherkapazität gleich dem Unterschied, wird der mindestens eine freie Teilblock (z.B. 161) ganz dem Namensraum (111) zugeteilt und somit vom Freiblockbestand (160) entfernt.
  • Bei Nichtauffinden (207) mindestens eines Teilblocks, dessen insgesamt verfügbare Speicherkapazität größer oder gleich dem Unterschied ist, umfasst das Verfahren ferner: Identifizieren (211) eines vollen freien Blocks (z.B. 127); Zuteilen (213) des Unterschieds (113) aus dem identifizierten vollen freien Block (z.B. 127) und Hinzufügen (215) des übrigen Teilblocks (115) des identifizierten vollen freien Blocks zum Bestand (160).
  • Wenn kein voller freier Block zur erfolgreichen Ausführung des Vorgangs des Identifizierens (211) eines vollen freien Blocks für den Unterschied verfügbar ist, kann das Verfahren in einigen Ausführungen einen Fehler melden oder einen Warnhinweis anzeigen und/oder versuchen, mindestens einen freien Teilblock (z.B. 161 und 163) zum Ausgleich des Unterschieds zu verwenden.
  • Wird der Namensraum (111) gelöscht, so wird der dem Namensraum (111) zugeteilte Teilblock (113) freigegeben und dem Freiblockbestand (160) hinzugefügt, und die dem Namensraum (111) zugeteilten vollen Blöcke (121, ... 123) werden ebenfalls freigegeben und stehen zwecks Zuteilung an andere Namensräume zur Verfügung. Eine Routine der Firmware (104) erkennt und kombiniert angrenzende freie Teilblöcke (z.B. 113 und 115), um die Anzahl der freien Teilblöcke im Freiblockbestand (160) zu reduzieren. Werden freie Teilblöcke (z.B. 113 und 115) im Bestand (160) zu einem freien vollen Block (127) zusammengefasst, werden die freien Teilblöcke (z.B. 113 und 115) in eine Freiblockdarstellung umgewandelt (dargestellt z.B. durch die Kennzeichnung einer repräsentativen Einheit wie etwa eine Ausgangs- oder Endeinheit).
  • So umfasst eine Speichervorrichtung (103) gemäß einer Ausführungsform: eine Host-Schnittstelle (105); eine Steuerung (107) und nicht flüchtige Datenträger (109). Die Speichervorrichtung (103) weist eine Firmware (104) auf, die Befehle enthält, die bei Ausführung durch die Steuerung (107) die Steuerung (107) mindestens zur Ausführung folgender Funktionen veranlassen: Empfangen einer Aufforderung eines Hosts (101) zur Zuteilung eines Namensraums (111) einer angeforderten Namensraumgröße (131) im nicht flüchtigen Speicher über die Host-Schnittstelle (105); Erzeugen einer Namensraumabbildung (135), die eine Mehrzahl L-Blöcke (121, 123) identifiziert, als Reaktion auf die Aufforderung, wobei jeder die gleiche vorgegebene Blockgröße (133) aufweist und ein Teil-L-Block (113) kleiner ist als die vorgegebene Blockgröße (133) und Umwandeln vom Host (101) mitgeteilter logischer Adressen im Namensraum (111) anhand der Namensraumabbildung (135) in physikalische Adressen (259) für die nicht flüchtige Speichermenge.
  • So kann die Aufforderung zur Zuteilung des Namensraums (111) z.B. mit einem Protokoll erfolgen, das der NVHMCI- oder NVMe-Vorgabe entspricht.
  • Bei der Speichervorrichtung (103) kann es sich z.B. um eine SSD handeln.
  • Ein in der Speichervorrichtung (103) ausgeführtes Verfahren umfasst z.B. Empfangen einer Aufforderung eines Hosts (101) zur Erzeugung oder Reservierung eines Namensraums (111) einer angeforderten Namensraumgröße (131) im nicht flüchtigen Speicher der nicht flüchtigen Datenträger (z.B. 109) der Speichervorrichtung (103) (z.B. gemäß NVMe) in der mit nicht flüchtigen Datenträgern (z.B. 109) gekuppelten Steuerung (107). Auf die Aufforderung hin umfasst das Verfahren ferner Erzeugen einer Namensraumabbildung (135), die Folgendes identifiziert, durch die Steuerung: eine Mehrzahl L-Blöcke (121, ..., 123) mit einer vorgegebenen Blockgröße (133) und ein Teil-L-Block (113), der kleiner ist als die vorgegebene Blockgröße (133). Die L-Blöcke (121, ..., 123, 113) werden weiter in konkrete Teile der nicht flüchtigen Datenträger (z.B. 109) (z.B. über eine Übersetzungsschicht) übersetzt. Nachdem die Namensraumabbildung (135) für den Namensraum (111) erzeugt wird, umfasst das Verfahren ferner Umwandeln vom Host (101) mitgeteilter logischer Adressen im Namensraum (111) durch die Steuerung (107) anhand der Namensraumabbildung (135) in physikalische Adressen für die nicht flüchtige Speichermenge.
  • Vorzugsweise wird jeder der Mehrzahl L-Blöcke (121, ..., 123) durch eine Vollblockkennung (z.B. 141, ... oder 143), die höchstens eine Erkennung einer repräsentativen Einheit (z.B. Ausgangs- oder Endeinheit) umfasst, in Anbetracht der bekannten einheitlichen Blockgröße (133) der vollen Blöcke (121, 123, 127) in der Namensraumabbildung (135) dargestellt. Optional kann eine Vollblockkennung (z.B. 141, ..., oder 143) eine Angabe über die Blockgröße (133) umfassen (z.B. indem sie sowohl die Kennung der Ausgangseinheit als auch die der Endeinheit umfasst).
  • Vorzugsweise wird ein freier Teil-L-Block (113) anhand einer Kennung (153) einer dem Namensraum (111) zugeteilten Ausgangseinheit und einer Stückgröße (155) in der Namensraumabbildung (135) dargestellt. Bei der Ausgangseinheit handelt es sich dabei nicht unbedingt um die erste Einheit im vollen L-Block (127), aus dem der freie Teilblock (113) zugeteilt wird. Wenn z.B. ein anschließender Namensraum einen Teilblock benötigt, der kleiner oder gleich dem übrigen Block (115) ist, kann der dem anschließenden Namensraum zugeteilte Teilblock eine auf die Endeinheit des Teilblocks (113) im L-Block (127) folgende Ausgangseinheit aufweisen.
  • Alternativ kann der Teil-L-Block (113) in der Namensraumabbildung (135) durch eine Kennung einer dem Namensraum (111) zugeteilten Endeinheit (oder einer anderen repräsentativen Einheit) und einer Stückgröße (155) dargestellt werden.
  • Optional umfasst das Verfahren ferner Unterhalten eines Freiblockbestands (160) in der Speichervorrichtung (103), der etwaige zur Zuteilung an einen anderen Namensraum verfügbare Teil-L-Blöcke (z.B. 127) identifiziert.
  • Vorzugsweise speichert die Speichervorrichtung (103) eine Kopie der Namensraumabbildung (135) und des Freiblockbestands (160) in den nicht flüchtigen Datenträgern (z.B. 109) der Speichervorrichtung (103) zwecks dauerhafter Speicherung und verwendet zu Berechnungszwecken eine Kopie der Namensraumabbildung (135) und des Freiblockbestands (160) im flüchtigen DRAM (106).
  • Die Erzeugung der Namensraumabbildung (135) kann bspw. erfolgen durch: Zuteilen der Mehrzahl L-Blöcke (121, ..., 123) an den Namensraum (111), so dass der Größenunterschied zwischen der angeforderten Namensraumgröße (131) des Namensraums (111) und der Mehrzahl L-Blöcke (121, 123) kleiner als die Blockgröße (133) ist. Nach der Ermittlung des Unterschieds zwischen der für den Namensraum (111) angeforderten Menge (133) an nicht flüchtigem Speicher und der Gesamtgröße der Mehrzahl voller L-Blöcke (121, ... 123) umfasst das Verfahren ferner Suchen eines Teil-L-Blocks, der größer oder gleich dem Unterschied ist, im Freiblockbestand (160).
  • Wird ein erster Teil-L-Block (z.B. 161), dessen Größe den Unterschied übersteigt, im Freiblockbestand (160) aufgefunden, so umfasst das Verfahren ferner: Zuteilen eines Teils des ersten Teil-L-Blocks (z.B. 161) an den Namensraum (111) (z.B. durch Erzeugen einer Teilblockkennung (147) für die Namensraumabbildung (135)) und Aktualisieren des ersten Teil-L-Blocks (161) im Freiblockbestand (160), um einen übrigen Teil des ersten Teil-L-Blocks (z.B. 161) darzustellen, der dem Namensraum (111) nicht zugeteilt ist und zur Zuteilung an einen anderen Namensraum frei steht.
  • Wird ein erster Teil-L-Block (z.B. 161), dessen Größe gleich dem Unterschied ist, im Freiblockbestand (160) aufgefunden, so umfasst das Verfahren ferner: Entfernen des ersten Teil-L-Blocks (z.B. 161) aus dem Freiblockbestand (160) und Zuteilen des ersten Teil-L-Blocks (z.B. 161) an den Namensraum (111).
  • Wird im Freiblockbestand (160) kein Teil-L-Block aufgefunden, dessen Größe größer oder gleich dem Unterschied ist, kann ein freier Block (z.B. 127) voller Größe dem Bestand (160) zugeteilt und vorübergehend als freier Teilblock (z.B. 161) behandelt werden. So umfasst das Verfahren ferner z.B.: Hinzufügen eines ersten L-Blocks (z.B: 127) mit der gleichen vorgegebenen Blockgröße (133) zum Freiblockbestand (160) (z.B. als Freiblock (161)); Zuteilen eines Teils (113) des ersten L-Blocks an den Namensraum (111) und Aktualisieren des ersten L-Blocks (161) im Freiblockbestand (160), um einen übrigen Teil (115) des ersten L-Blocks (z.B. 127) darzustellen, der dem Namensraum (111) nicht zugeteilt ist und zur Zuteilung an einen anderen Namensraum frei steht.
  • Optional umfasst das Verfahren ferner Empfangen einer Aufforderung des Hosts (105) zur Löschung des Namensraums (111) in der Steuerung und als Reaktion auf die Aufforderung Hinzufügen des durch die Teilblockkennung (147) identifizierten Teil-L-Blocks (113) in der Namensraumabbildung (135) des Namensraums (111) zum Freiblockbestand (160) durch die Steuerung (107).
  • Enthält der Freiblockbestand (160) mehr als einen freien Teilblock (z.B. 113 und 115), umfasst das Verfahren optional ferner: Identifizieren angrenzender freier Teilblöcke (z.B. 113 und 115) im Freiblockbestand (160) und Kombinieren der angrenzenden freien Teilblöcke (z.B. 113 und 115) im Freiblockbestand (160) zu einem einzelnen freien Teilblock.
  • Optional umfasst das Verfahren ferner: Nach dem Kombinieren der freien Teilblöcke (z.B. 113 und 115) im Freiblockbeestand (160): Ermitteln, ob ein kombinierter freier Teilblock (z.B. 127) ein voller freier Block mit der vorgegebenen Blockgröße (133) ist, und als Reaktion auf eine Feststellung, dass der kombinierte freie Teilblock (z.B. 127) die vorgegebene Blockgröße (133) aufweist: Entfernen des kombinierten freien Teilblocks (z.B: 127) aus dem Freiblockbestand (160), so dass der Freiblockbestand (160) nur die Kennungen freier Teilblöcke enthält und volle freie Blöcke effizienter durch eine Liste mit Vollblockkennungen dargestellt werden können, wobei jeder Block im Freiblockbestand (160) durch eine Teilblockkennung mit einer Kennung einer Einheit im Block und einer Stückgröße dargestellt wird.
  • Die vorstehend in Verbindung mit - beschriebenen Verfahren zur Zuteilung eines Namensraums durch Namensraumabbildung voller und/oder Teil-L-Blöcke können zur Umsetzung einer dynamischen Anpassung der Namensraumgrößen, insbesondere Namensraumerweiterung, -reduzierung und Thin Provisioning von Namensräumen, verwendet werden, wie nachstehend näher erläutert wird.
  • - zeigen Beispiele der Größenanpassung von Namensräumen im Wege der Namensraumabbildung.
  • Die Größe eines Namensraums kann angepasst werden, um einen L-Block der vorgegebenen Blockgröße (133) hinzuzufügen oder zu entfernen.
  • So zeigt etwa einen Namensraum (221) mit Blöcken (241, 243), die L-Blöcken (233, 237) zugeordnet werden, bevor dieser um Blöcke (241, 248, 361) erweitert (363) wird, die jeweils L-Blöcken (233, 237, 239) zugeordnet werden.
  • Zur Erweiterung des Namensraums (221) um einen Block (361) der vorgegebenen Blockgröße (133) wird die Namensraumabbildung (z.B. 273) des Namensraums (221) aktualisiert, um die Kennung des als erweiterte Kapazität des Namensraums (221) zugeteilten L-Blocks (239) aufzunehmen.
  • Um z.B. den Namensraum (221) um einen Block (361) zu erweitern, identifiziert die Steuerung (107), die die Firmware (104) ausführt, einen freien L-Block (239) (z.B. aus einem Freiblockbestand (160) oder der Freiliste (275)), der noch keinem bestehenden Namensraum zugeteilt worden ist, und teilt den L-Block (239) dem Namensraum (221) durch Aufnehmen einer Kennung des L-Blocks (239) in die Namensraumabbildung (z.b. 135 oder 273) des Namensraums (221) und Entfernen der Kennung des L-Blocks (239) aus dem Freiblockbestand und der Liste (160 bzw. 275) zu.
  • Im umgekehrten Sinne zeigt auch einen Namensraum (221) mit Blöcken (241, 243, 361), die L-Blöcken (233, 237, 239) jeweils zugeordnet sind, bevor er derart verkleinert (365) wird, dass er Blöcke (241, 243) aufweist, die jeweils L-Blöcken (233, 237) zugeordnet sind.
  • Zur Verkleinerung des Namensraums (221) um einen Block (361) der vorgegebenen Blockgröße (133) wird die Namensraumabbildung (z.B. 273) des Namensraums (221) aktualisiert, um die Kennung des der entfernten Kapazität des Namensraums (221) entsprechenden L-Blocks (239) zu entfernen.
  • Um den Namensraum (221) z.B. um einen Block (361) zu verkleinern, identifiziert die Steuerung (107), die die Firmware (104) ausführt, den dem letzten Block (361) des Namensraums (221) in der Namensraumabbildung (z.B. 135 oder 273) des Namensraums (221) zugeordneten L-Block (239), entfernt die Kennung des L-Blocks (239) aus der Namensraumabbildung (z.B. 135 oder 273) des Namensraums (221) und fügt die Kennung des L-Blocks (239) einer Freiblockliste (z.B. einem Freiblockbestand (160) oder der Freiliste (275)) hinzu, so dass der L-Block (239) anschließend einem anderen Namensraum (oder im Bedarfsfall, dem Namensraum (221)) zugeteilt werden kann.
  • zeigt ein Beispiel der Erweiterung eines Namensraums um einen Teil-L-Block und/oder der Verkleinerung eines Namensraums um einen Teil-L-Block.
  • So wird etwa ein Namensraum (221) mit Blöcken (241, 243), die L-Blöcken (233, 237) zugeordnet werden in um volle Blöcke (241, 243) und einen Teilblock (367), die L-Blöcken (233, 237) bzw. einem Teil-L-Block (239) zugeordnet werden, erweitert (363).
  • Zur Erweiterung des Namensraums (221) um eine zusätzliche Kapazität eines Teilblocks (367), der kleiner ist als die vorgegebene Blockgröße (133), wird die Namensraumabbildung (z.B. 135 oder 273) des Namensraums (221) aktualisiert, um die Kennung des aus einem vollen Block (239) zugeteilten Teil-L-Blocks (369) als erweiterte Kapazität des Namensraums (221) aufzunehmen.
  • Zur Hinzufügung der Kapazität eines Teilblocks (367) zum Namensraum (221) identifiziert z.B. die Steuerung (107), die die Firmware (104) ausführt, einen freien Teil-L-Block (369) der entsprechenden Größe (der z.B. aus einem freien vollen Block oder einem freien Teilblock aus einem Freiblockbestand (160) oder der Freiliste (275) zugeteilt wird)) und fügt die Kennung (z.B. mit einer in dargestellten Kennung) des Teil-L-Blocks (239) zum Namensraum (221) hinzu (wie z.B. in gezeigt).
  • Vorzugsweise wird der Namensraum (221) höchstens einem Teil-L-Block (239) zugeordnet. Vorzugsweise sind die L-Blöcke voller Größe (231, 233, ..., 237) des Namensraums in der Kapazität (220) zusammenhängend. Eine Neuzuordnungsmethode (wie z.B. in Verbindung mit erläutert) kann zur Optimierung der Namensraumabbildung verwendet werden, indem volle und Teil-L-Blöcke konsolidiert werden, so dass die vollen L-Blöcke (231, 233, ... 237) des Namensraums (221) in der Kapazität (220) zusammenhängend sind und der Namensraum (221) höchstens einen Teil-L-Block (239) aufweist.
  • Im umgekehrten Sinne kann ein Namensraum (221) mit vollen Blöcken (241, 243) und einem Teilblock (367), die vollen L-Blöcken (233, 237) und einem Teil-L-Block (369) zugeordnet sind, derart verkleinert werden, dass er Blöcke (241, 243) aufweist, die jeweils vollen L-Blöcken (233, 237) zugeordnet sind.
  • Zur Verkleinerung des Namensraums (221) durch Entfernen der Kapazität eines Teilblocks (367) wird die Namensraumabbildung (z.B. 273) des Namensraums aktualisiert, um die Teilblockkennung (147) des der entfernten Kapazität des Namensraums (221) entsprechenden L-Blocks (369) zu entfernen. Der entfernte L-Block (369) wird dem Freiblockbestand (160) zurückgegeben, wo er mit einem oder mehreren anderen freien Teilblöcken kombiniert werden kann, um einen freien vollen L-Block (239) zu bilden.
  • zeigt ein Beispiel, in dem der Namensraum (221) einen Teilblock (371/375) aufweist, vor und nach der Größenänderung.
  • So kann z.B. ein Namensraum (221) mit einem vollen Block (241) und einem Teilblock (371), die in einem vollen L-Block (233) und einem Teil-L-Block (373) zugeordnet sind, um volle Blöcke (241, 372) und einen Teilblock (375), die jeweils vollen L-Blöcken (233, 237) bzw. einem Teil-L-Block (377) zugeordnet sind, erweitert (363) werden.
  • In weist der L-Block (237), aus dem der Teil-L-Block (373) zugeteilt wird, eine freie Kapazität auf, die es ermöglicht, den Teil-L-Block (373) zum vollen L-Block (237) zu erweitern, um die erweiterte Kapazität (372) aufzunehmen.
  • Wenn in anderen Fällen der L-Block (237), aus dem der Teil-L-Block (373) zugeteilt wird, keine freie Kapazität aufweist, die eine Erweiterung des Teil-L-Blocks (373) auf den vollen L-Block (237) ermöglicht (wenn z.B. ein anderer Teil des L-Blocks (237) derzeit einem anderen Namensraum zugeteilt ist, analog der Situation, in der der Block (239) in mehrere Teile aufweist, die unterschiedlichen Namensräumen (221 und 223) zugeteilt sind), kann der anfängliche Teil-L-block (371) einem anderen L-Block (z.B. 231) neu zugeordnet werden (z.B. wie in gezeigt), um dessen Erweiterung auf einen vollen L-Block (z.B. 231) zu ermöglichen.
  • Alternativ werden ein oder mehrere Teil-L-Blöcke (z.B. 371, 374), die sich durch Neuzuordnung anschließend zu einem vollen L-Block zusammenfassen lassen, dem erweiterten Block (372) zugeordnet. So können z.B. die Teile (371 und 374) des erweiterten Blocks (372) jeweils als erste Reaktion Teil-L-Blöcken (373 und 376) zugeordnet werden, um den Namensraum (221) zu erweitern, und anschließend kann die Zuordnung zu den Teil-L-Blöcken (376) dem verfügbaren Teil des L-Blocks (237), aus dem der Teil-L-Block (373) zugeordnet wird, neu zugeordnet werden, um einen vollen L-Block (273) zu bilden, der dem Namensraum (221) zugeordnet ist. Alternativ kann die Zuordnung zu den Teil-L-Blöcken (373) dem verfügbaren Teil des L-Blocks (231), aus dem der Teil-L-Block (376) zugeteilt wird, neu zugeordnet werden, um einen vollen L-Block (231) zu bilden, der dem Namensraum (221) zugeordnet ist. Alternativ können die Teil-L-Blöcke (373 und 376) einem anderen freien vollen L-Block neu zugeordnet werden.
  • Um den Namensraum (221) um den Teilblock (375) zu erweitern (363), kann ein Teil-L-Block (377) der Namensraumabbildung (z.B. 135 oder 273) hinzugefügt werden, wie in gezeigt, um einen Teilblock (367) hinzuzufügen.
  • Im umgekehrten Sinne kann ein Namensraum (221) mit vollen Blöcken (241, 372) und einem Teilblock (375), die vollen L-Blöcken (233, 237) und einem Teil-L-Block (377) zugeordnet sind, verkleinert (365) werden, um einen vollen Block (241) und einen Teilblock (371) aufzuweisen, die jeweils einem vollen L-Block (233) bzw. einem Teil-L-Block (237) zugeordnet sind, indem der Teil-L-Block (237) und ein Teil des L-Blocks (237) einem Freiblockbestand (160) und/oder einer Freiliste (275) mit vollen L-Blöcken zurückgegeben werden.
  • zeigt ein Beispiel der Erweiterung eines Teil-L-Blocks auf einen vollen L-Block im Wege der Neuzuordnung.
  • In ist ein Teilblock (371) des Namensraums (221) zunächst einem Teil-L-Block (373) zugeordnet, der aus einem L-Block (239) zugeordnet wird, dessen freie Kapazität nicht ausreicht, um eine Erweiterung zur Aufnahme eines vollen Blocks der vorgegebenen Blockgröße (133) zu ermöglichen.
  • Bei Erweiterung (363) des Teilblocks (371) zu einem vollen Block (372) kann der aus dem L-Block (239) zugeteilte Teil-L-Block (373) infolge der Beschränkung im L-Block (239) nicht an seiner Stelle im L-Block (239) auf einen vollen L-Block erweitert werden. In ist der L-Block (239) beschränkt, weil die Kapazität (220) kein Vielfaches der Blockgröße (133) ist, und der L-Block (239) kann als Teil-L-Block betrachtet werden, der aus einem vollen L-Block zugeteilt ist, der einen Teil (249) einer virtuellen Kapazität enthält, der in den nicht flüchtigen Datenträgern (109) eigentlich nicht zur Verfügung steht. In anderen Fällen kann es sein, dass der Teil (249) in den nicht flüchtigen Datenträgern (109) zwar verfügbar ist, derzeit aber einem anderen Namensraum zugeteilt ist, was eine Erweiterung der Zuordnung des Teilblocks (371) an seiner Stelle verhindert.
  • In , wenn der Teilblock (371) auf den vollen Block (372) erweitert (363) wird, wird der volle Block (372) einem anderen L-Block (237) zugeordnet, statt im Wege einer lokalen Erweiterung dem L-Block (239) zugeordnet zu werden. Der zunächst dem Teilblock (371) zugeordnete Teil-L-Block (373) wird freigegeben, woraus ein Teil-L-Block (377) dem hinzugefügten Teilblock (375) des Namensraums (221) zugeteilt wird.
  • Das L-Block-Zuteilungsbeispiel der lässt sich umsetzen, indem zunächst der Teilblock (371) einem aus dem L-Block (237) zugeteilten Teil-L-Block neu zugeordnet wird und der Namensraum (221) der entsprechend erweitert wird. Alternativ wird die zusätzliche Kapazität des Namensraums (221) zunächst Teil-L-Blöcken zugeordnet, die anschließend im Wege der Neuzuordnung zum vollen L-Block (237) und dem Teil-L-Block (239) konsolidiert werden.
  • Im umgekehrten Sinne kann der Namensraum (221) von vollen Blöcken (241, 372) und einem Teilblock (375), die vollen L-Blöcken (233, 237) und einem Teil-L-Block (377) zugeordnet sind, auf einen vollen Block (241) und einen Teilblock (371), die einem L-Block (233) und einem Teil-L-Block (373) zugeordnet sind, verkleinert (365) werden. Die Verkleinerung kann dadurch erfolgen, dass der Teil-L-Block (377) und ein Teil des L-Blocks (237) freigegeben werden und der dem Block (371) zugeteilte übrige Teil des L-Blocks (237) dem Teil-L-Block (373) im L-Block (239) neu zugeordnet wird (z.B. Neuzuordnung, um die Fragmentierung der Kapazität (220) zu reduzieren).
  • zeigt die Neuzuordnung eines Namensraums.
  • In ist die Neuzuordnung (379) des Teilblocks (371) von einem aus einem Ort in der Kapazität (220) zugeteilten Teil-L-Block (373) zu einem anderen Teil-L-Block (378), der aus einem anderen Ort in der Kapazität (220) zugeteilt ist, zu erkennen.
  • Zur Umsetzung der in dargestellten Neuzuordnung kopiert die Steuerung (107), die die Firmware (104) ausführt, die Daten aus dem Teil-L-Block (373) auf den Teil-L-Block (378) und ersetzt die Kennung des Teil-L-Blocks (373) in der Namensraumabbildung (135 oder 273) des Namensraums (221) durch die Kennung des Teil-L-Blocks (378).
  • zeigt ein Beispiel der Neuzuordnung eines Teilblocks (371) zu unterschiedlichen Orten in der Kapazität (220). Ebenso kann die Methode zur Neuzuordnung (379) voller Blöcke (z.B. 241) verwendet werden.
  • Die Neuzuordnungsmethode kann zur Optimierung von Namensraumabbildungen (z.B. 135, 273) verwendet werden, so dass sich volle L-Blöcke (231, 233, ..., 237), die dem Namensraum (221) zugeteilt sind, in einem zusammenhängenden Abschnitt der Kapazität befinden, und/oder Teil-L-Blöcke (369) kombiniert werden, um die Anzahl der freien Teil-L-Blöcke im System zu reduzieren.
  • Vorzugsweise erfolgt die Neuzuordnung im Hintergrund, um die Auswirkungen auf die Datenzugriffsleistung zu minimieren. Mit der Optimierung der Namensraumabbildungen (z.B. 135, 273) wird der mit der Namensraumzuordnung verbundene Rechenaufwand reduziert und die Datenzugriffsleistung der Speichervorrichtung (103) verbessert.
  • Die vorstehend erläuterten Methoden können zur Ausführung von Befehlen, die vom Host (101) empfangen werden, zur Änderung, Erweiterung oder Verkleinerung der angeforderten Namensraumgröße (131) eines bestehenden Namensraums (221), der den nicht flüchtigen Datenträgern (109) zugeordnet worden ist, verwendet werden.
  • Ferner können die vorstehend erläuterten Methoden zur Umsetzung der Thin Provisioning eines Namensraums (221) verwendet werden.
  • und zeigen ein sog. Thin Provisioning eines Namensraums im Wege der Namensraumzuordnung.
  • In und wird der Namensraum (221) mit einer angeforderten Namensraumgröße (131) erzeugt. Es wird jedoch zunächst nur ein Teil des Namensraums (221) (z.B. Blöcke 241 und 243) dem Namensraum (221) über dessen Namensraumabbildung (z.B. 135, 273) zugeteilt. So werden z.B. die Blöcke (241 und 243) jeweils L-Blöcken (233 bzw. 237) zugeordnet, und die Zuteilung des übrigen Teils (381) des Namensraums (221) bis auf eine spätere Phase verschoben, in der zusätzliche Speicherkapazität im übrigen Teil (381) benötigt wird.
  • Wird der übrige Teil (381) benötigt, wird ein weiterer Teilblock (383) (oder ein voller Block) des Namensraums (221) einem Teil-L-Block (373) (oder einem vollen L-Block) zugeordnet. So wird der übrig bleibende nicht zugeteilte Teil (381) des Namensraums (221) reduziert.
  • Die inkrementelle Bereitstellung des zugeteilten Teils des Namensraums (221) kann von der Steuerung (107) mit oder ohne ausdrückliche Anforderungen des Hosts (101) automatisch verwaltet werden.
  • zeigt ein Verfahren zur Anpassung eines Namensraums (z.B. 221) durch Anpassen einer Namensraumabbildung.
  • So kann z.B. das Verfahren der zur Umsetzung der in - dargestellten Namensraumänderungen in einer Speichervorrichtung (103) der mit Datenstrukturen nach und/oder 8 - 10 verwendet werden. Das Verfahren der kann z.B. über die Firmware (104) programmiert und von der Steuerung (107) ausgeführt werden.
  • In umfasst das Verfahren Speichern (401) einer Namensraumabbildung (z.B. 135 oder 273), die Blöcke (z.B. 241, 383) eines Namensraums (221) Blöcken (z.B. 233, 373) der logischen Adresskapazität (220) nicht flüchtiger Datenträger (109) zuordnet. Die Namensraumabbildung (z.B. 135 oder 273) kann als Reaktion auf die Zuteilung des Namensraums (221) erzeugt werden (z.B. auf die in , oder dargestellt Weise).
  • Nach Eingang (403) einer Aufforderung zur Anpassung einer Größe des bestehenden Namensraums (221), der den nicht flüchtigen Datenträgern (109) zugeordnet ist, ermittelt (405) das Verfahren, ob die Aufforderung auf die Erweiterung oder Verkleinerung der Zuteilung des Namensraums (221) auf den nicht flüchtigen Datenträgern (109) lautet.
  • Auf eine Feststellung (405) hin, dass die Zuteilung des Namensraums (221) auf den nicht flüchtigen Datenträgern (109) zu verkleinern ist, umfasst das Verfahren ferner Entfernen (407) von Kennungen von Blöcken der logischen Adresskapazität, die dem Namensraum (221) nicht mehr zugeordnet/zugeteilt sind, aus der Namensraumabbildung (z.B. 241, 383).
  • Auf eine Feststellung (405) hin, dass die Zuteilung des Namensraums (221) auf den nicht flüchtigen Datenträgern (109) zu erweitern ist, umfasst das Verfahren ferner Hinzufügen (409) von Kennungen von zusätzlichen Blöcken der logischen Adresskapazität zur Namensraumabbildung (z.B. 241, 383).
  • Wie in gezeigt, wird z.B. die Kennung eines vollen L-Blocks (239) der Namensraumabbildung (z.B. 241, 383) des Namensraums (221) hinzugefügt, um den Namensraum (221) um den vollen Block (361) zu erweitern.
  • Wie in gezeigt, wird z.B. die Kennung eines Teil-L-Blocks (369) der Namensraumabbildung (z.B. 241, 383) des Namensraums (221) hinzugefügt, um den Namensraum (221) um einen Teilblock (387) zu erweitern.
  • In einigen Fällen (wie z.B. in gezeigt) wird die Kennung eines vollen L-Blocks (z.B. 237) hinzugefügt, um die Kennung eines bei der Zuteilung auf den vollen L-Block (z.B. 237) erweiterten Teil-L-Blocks (z.B. 373) zu ersetzen.
  • Optional umfasst das Verfahren ferner Optimieren (413) der Namensraumabbildung (z.B. 241, 383) durch Verschieben und/oder Kombinieren zugeordneter Blöcke in der logischen Adresskapazität (220). So kann z.B. die Zuordnung des Teilblocks (371) auf der Kapazität (220) vom Teil-L-Block (373) auf den in dargestellten Teil-L-Block (378) verschoben werden, um die Erweiterung des Teilblocks (371) auf einen vollen Block vorzubereiten oder diesen mit einem aus dem L-Block (237) zugeteilten Teilblock zu kombinieren, um die Erweiterung des Teilblocks (371) zu ermöglichen. So kann z.B. die Zuordnung zu den vollen L-Blöcken auf der Kapazität (220) verschoben werden, um die dem Namensraum (221) zugeteilten vollen L-Blöcke in einem zusammenhängenden Segment zu konsolidieren.
  • Das Verfahren der umfasst Übertragen (415) im Namensraum (221) definierter logischer Adressen in zugeordnete logische Adressen (257), die auf der Gesamtkapazität (220) der Speichervorrichtung (103) definiert sind, und anschließend in phyikalische Adressen (259) mithilfe der Namensraumabbildung (z.B. 241, 383).
  • So kann z.B. eine logische Adresse in einem Block (z.B. 241, 371) des Namensraums der entsprechenden Adresse (257) im L-Block (z.B. 233, 378) der Kapazität (220) linear zugeordnet werden, die dann weiter einer physikalischen Adresse (z.B. 259) namensraumunabhängig (z.B. durch eine FTL einer SSD) zugeordnet werden kann.
  • Die Speichervorrichtung (103) der umfasst bspw. eine Host-Schnittstelle (105), eine Steuerung (107), nicht flüchtige Datenträger (109) und Firmware (104). Die Firmware (104) veranlasst die Steuerung (107): zum Speichern einer Namensraumabbildung (z.B. 135, 273), die Blöcke in einem Namensraum (111 oder 221) definierter logischer Adressen Blöcken einer logischen Adresskapazität (220) der nicht flüchtigen Datenträger (109) zuordnet, die Namensraumabbildung (z.B. 135, 273) anpasst, um eine Größe des Namensraums (111 oder 221) zu ändern, und im Namensraum (111 oder 221) definierte logische Adressen in physikalische Adressen (259) für die nicht flüchtigen Datenträger (109) anhand der Namensraumabbildung (z.B. 135, 273) überträgt, die zunächst die im Namensraum (111 oder 221) definierten logischen Adressen den logischen Adressen in der logischen Adresskaspazität (220) der nicht flüchtigen Datenträger (109) zuordnet.
  • Die Namensraumabbildung (z.B. 135, 273) kann auf eine an einen Host (101) gerichtete Aufforderung zur Vergrößerung (363) des Namensraums (111 oder 221) angepasst werden, wobei die Anpassung durch Hinzufügen einer Kennung eines Blocks der logischen Adresskapazität (220) zwecks Assoziation mit dem Namensraum (111 oder 221) erfolgen kann.
  • Die Namensraumabbildung (z.B. 135, 273) kann auf eine an einen Host (101) gerichtete Aufforderung zur Verkleinerung (365) des Namensraums (111 oder 221) hin angepasst werden, wobei die Anpassung durch Entfernen einer Kennung eines Blocks der logischen Adresskapazität (220) aus der Assoziation mit dem Namensraum (111 oder 221) erfolgen kann.
  • Bei der Umsetzung der Thin Provisioning kann die Namensraumabbildung (z.B. 135, 273) als Reaktion auf einen Anstieg bei der Nachfrage nach zugeteilter Kapazität des Namensraums (111 oder 221) mit oder ohne ausdrückliche Aufforderung durch den Host (101) angepasst werden.
  • Vorzugsweise ist die logische Adresskapazität (220) der nicht flüchtigen Datenträger (109) in vorgegebene Blöcke mit einer gleichen vorgegebenen Blockgröße (133), die eine Zweierpotenz ist, geteilt.
  • In einem Fall weist der Namensraum (111 oder 221) vor der Änderung der Größe des Namensraums (111 oder 221) einen Teilblock (371) auf, der kleiner als die vorgegebene Blockgröße (133) ist, und der Teilblock (371) wird von der Namensraumabbildung (z.B. 135, 273) einem Teil (373) eines ersten konkreten Blocks (239) der vorgegebenen Blöcke zugeordnet. Nach der Änderung der Größe des Namensraums (111 oder 221) wird der Teilblock (371) vergrößert, und der erweiterte erste Block (372) wird von der Namensraumabbildung (z.B. 135, 273) mindestens einem Teil eines zweiten konkreten Blocks (237 oder 239) der vorgegebenen Blöcke zugeordnet, wie in und gezeigt.
  • Der zweite konkrete Block kann sich dabei vom ersten konkreten Block unterscheiden, wie in gezeigt.
  • Zur Umsetzung einer Konstellation nach kann die Namensraumabbildung (z.B. 135, 273) angepasst werden durch: Kopieren von Daten aus dem Teil (373) des ersten konkreten Blocks (239) auf einen entsprechenden Teil (378) des zweiten konkreten Blocks (237) (wie z.B. in gezeigt) und Ersetzen einer Kennung des Teils (373) des ersten konkreten Blocks (239) in der Namensraumabbildung (z.B. 135, 273) durch eine Kennung des entsprechenden Teils (378) des zweiten konkreten Blocks (237). Die Zuteilung des entsprechenden Teils (378) des zweiten konkreten Blocks (237) kann dann auf dem zweiten konkreten Block (237) erweitert werden, um die Erweiterung zu ermöglichen.
  • In einer alternativen Umsetzungsmöglichkeit einer Konstellation nach kann die Namensraumabbildung (z.B. 135, 273) angepasst werden durch: Aufteilen des mindestens einen Teils des zweiten konkreten Blocks (237) in einen ersten Teil und einen zweiten Teil, wobei der zweite Teil (378) zur Aufnahme einer Kopie des Inhalts des Teils (373) des ersten konkreten Blocks (239) reserviert ist, und Hinzufügen einer Kennung des ersten Teils des zweiten konkreten Blocks (237) zur Namensraumabbildung (z.B. 135, 273). Nach der Änderung der Größe des Namensraums (111 oder 221) wird ein Hintergrundprozess dazu benutzt, Daten aus dem Teil (373) des ersten konkreten Blocks (239) auf den zweiten Teil (378) des zweiten konkreten Blocks (237) zu kopieren. Anschließend ersetzt die Steuerung (107) eine Kennung des Teils (373) des ersten konkreten Blocks (239) und die Kennung des ersten Teils des zweiten konkreten Blocks (237) in der Namensraumabbildung (z.B. 135, 273) durch eine Kennung des mindestens einen Teils des zweiten konkreten Blocks (237).
  • Nach der Änderung der Größe des Namensraums (221) kann der erste Block (371) auf die vorgegebene Blockgröße (133) vergrößert werden, und eine Teilblockkennung kann durch eine Vollblockkennung ersetzt werden.
  • Vorzugsweise ist die Speichervorrichtung mit einem Hintergrundprozess konfiguriert, der die Fragmentierung in zugeteilten oder noch nicht zugeteilten logischen Adressen, die auf der Kapazität der Speichervorrichtung definiert sind, reduziert und/oder beseitigt, so dass Lücken in den einem bestehenden Namensraum zugeteilten logischen Adressen reduziert werden und Lücken in den zur Zuteilung an einen neuen Namensraum verfügbaren logischen Adressen reduziert oder gar beseitigt werden. Ferner werden durch den Hintergrundprozess Zuordnungen, die die Sequenz nicht einhalten, reduziert oder gar beseitigt.
  • zeigt eine Zuordnung einer Namensraumzuordnung zur Entfernung einer Lücke in zugeordneten logischen Adressen.
  • Logische Adressen in den L-Blöcken (231-239) werden sequentiell und kontinuierlich über die gesamte Kapazität (220) der Speichervorrichtung definiert. Logische Adressen in jedem Namensraum (z.B. 221) werden ebenfalls sequentiell und kontiuierlich im entsprechenden Namensraum (z.B. 221) definiert. Eine Namensraumabbildung (z.B. 273 in oder in ) ordnet jeden Block (z.B. 241) aus in einem Namensraum (221) definierten angrenzenden logischen Adressen einem entsprechenden L-Block (z.B. 233) aus in der Kapazität (220) definierten angrenzenden logischen Adressen zu. Es kann jedoch sein, dass die zugeordneten logischen Adressen insgesamt keinem Namensraum (221) aus einem zusammenhängenden Bereich der Kapazität (220) zugeordnet werden.
  • So sind z.B. die dem Namensraum (221) in zugeteilten L-Blöcke (223 - 239) durch L-Blöcke (237, ...) getrennt, was auf die Löschung eines Namensraums zurückzuführen sein kann.
  • Zur Optimierung der Datenzugriffsleistung und zur Reduzierung des Rechenaufwands bei der Zuordnung von Adressen aus den im Namensraum definierten logischen Adressen und den in der Kapazität (220) definierten logischen Adresssen unabhängig von zugeteilten Namensräumen ist ein in der Speichervorrichtung (103) laufender Hintergrundprozess derart konfiguriert, dass er die Namensraumzuordnung, wie in gezeigt, durch Beseitigen der Lücken in den dem Namensraum (221) zugeordneten L-Blöcken optimiert.
  • In wird z.B. die Namensraumzuordnung von einer Zuordnung vom Namensraum (221) zu den in getrennten Bereichen der Kapazität (220) befindlichen L-Blöcken (223 und 239) in eine Zuordnung zu L-Blöcken (223 und 237) geändert, die sich in einem zusammenhängenden Bereich der Kapazität (220) der Speichervorrichtung (103) befinden. Nach der Optimierung (421) kann die Berechnung der Zuordnung von logischen Adressen vereinfacht und somit die Datenzugriffsleistung verbessert werden.
  • Die in dargestellte Anpassung kann über Anpassungen bei der Zuordnung der auf der Kapazität (220) definierten logischen Adressen zu physikalischen Adressen in der Speichervorrichtung (103) umgesetzt werden. So kann z.B. eine FTL, die für die Übertragung der logischen Adressen in physikalische Adressen in der Speichervorrichtung (103) zuständig ist, derart konfiguriert werden, dass deren Übertragungsoperationen nach L-Blöcken laufen. So kann z.B. ein Befehl zur Umschaltung der Übertragung für L-Blöcke (237 und 239) an die FTL gerichtet werden, so dass die physikalischen Adressen des L-Blocks (239) vor der Optimierung (421) die physikalischen Adressen des L-Blocks (237) nach der Optimierung (421) werden und die physikalischen Adressen des L-Blocks (237) vor der Optimierung (421) die physikalischen Adressen des L-Blocks (239) nach der Optimierung (421) werden. In Anbetracht der Änderung bei der Adresszuordnung durch die FTL von in der Kapazität (220) definierten logischen Adressen und den physikalischen Adresssen beim Zugreifen auf die zugeteilten Speichereinheiten in der Speichervorrichtung (103) kann die Namensraumabbildung des Namensraums (221) von einer Zuordnung des Blocks (243) zum L-Block in eine Zuordnung des Blocks (243) zum L-Block (237) in einem zusammenhängenden Bereich von logischen Adressen (220), die auf der Kapazität (220) definiert sind, geändert werden. Wird ein derartiges Verfahren zur Optimierung der Namensraumabbildung verwendet, kann die Optimierung (421) erfolgen, ohne dass Daten aus einem Satz physikalischer Speichereinheiten in der Speichervorrichtung (103) auf einen anderen Satz physikalischer Speichereinheiten in der Speichervorrichtung (103) verschoben bzw. kopiert werden.
  • In einigen Fällen ist eine für die Übertragung der logischen Adressen in physikalische Adressen in der Speichervorrichtung (103) zuständige FTL nicht dazu in der Lage, die Zuordnungen der L-Blöcke umzuschalten. In einem solchen Fall kann der Hintergrundprozess einen Spiegelungsvorgang starten, bei dem eine Spiegelkopie des L-Blocks (239) auf dem L-Block (237) erstellt wird. Beim Spiegelungsvorgang werden bestehende Daten, die im L-Block (239) gespeichert sind, auf den L-Block (237) kopiert, und weitere Daten, die auf den L-Block (239) geschrieben worden sind, werden ebenfalls auf die entsprechenden Adressen im L-Block (237) geschrieben. Wenn die durch die logischen Adressen im L-Block (237) gekennzeichneten physikalischen Speichereinheiten dieselben Daten enthalten wie die durch die logischen Adressen im L-Block (239) gekennzeichneten physikalischen Speichereinheiten, kann die Namensraumabbildung des Namensraums (221) von einer Zuteilung zu den L-Blöcken (233 und 239) in eine Zuteilung an die L-Blöcke (233 und 237) geändert werden, wie in gezeigt. Nach der Optimierung (421) ist keine Spiegelung mehr erforderlich. Also kann der Spiegelvorgang nach der Optimierung (421) eingestellt werden. Bei einer derartigen Ausführung wird keine Änderung der FTL benötigt.
  • In einigen Fällen kann die FTL dazu in der Lage sein, einen Teil der Zuordnung von logischen zu physikalischen Adressen vom L-Block (239) auf den L-Block (233) zu verschieben, einen übrigen Teil aber nicht ohne Leistungsverschlechterung zu verschieben. Der verschiebbare Teil umfasst LBA-Adressen im L-Block (239), die derzeit einem ersten Satz physikalischer Adressen zugeordnet sind, und die FTL-Zuordnung kann derart geändert werden, dass die entsprechenden LBA-Adressen im L-Block (233) dem ersten Satz physikalischer Adressen neu zugeordnet werden. Der nicht verschiebbare Teil umfasst LBA-Adressen im L-Block (239), die derzeit einem zweiten Satz physikalischer Adressen zugeordnet sind, und die FTL-Zuordnung kann (ohne Leistungsverschlechterung) nicht derart geändert werden, dass die entsprechenden LBA-Adressen im L-Block (233) dem zweiten Satz physikalischer Adressen neu zugeordnet werden. In solchen Fällen kann zur besseren Effizienz eine Spiegelung an den übrigen nicht verschiebbaren Teilen erfolgen, ohne dass der bewegliche Teil gespiegelt werden muss. Nach der Spiegelung des nicht verschiebbaren Teils und der Neuzuordnung des verschiebbaren Teils kann die in dargestellte Anpassung der Namensraumabbildung durchgeführt werden.
  • Zur Gewährleistung einer verbesserten Effizienz beim Datenzugriff wird bevorzugt, dass ein Namensraum höchstens einen Teil-L-Block aufweist. Ein Namensraum kann jedoch in einigen Fällen mehr als einen Teil-L-Block aufweisen. Vorzugsweise wird ein Hintergrundprozess dazu benutzt, um einem Namensraum zugeteilte Teil-L-Blöcke zu kombinieren, wie in gezeigt.
  • zeigt eine Anpassung einer Namensraumabbildung zur Reduzierung der Anzahl der Teilblöcke eines Namensraums.
  • Der in gezeigte Namensraum (221) umfasst zwei Teil-L-Blöcke (373 und 380), die aus zwei unterschiedlichen vollen L-Blöcken (237 und 239) zugeteilt sind. Die Zuteilung kann aus einer Hinzufügung der logischen Adressen (370) zum Namensraum (221), die den logischen Adressen im Teil-L-Block (377) zugeordnet sind, und einer Löschung eines Namensraums, der einen aus dem L-Block (237) zugeteilten Teil-L-Block enthalten hatte, oder aber aus der Neuzuordnung eines Namensraums, der anfangs einen aus dem L-Block (237) zugeteilten Teil-L-Block enthalten hatte.
  • Nach der Optimierung (421) in wird ein Teil der logischen Adressen im Block (370) mit den Adressen im Block (371) fusioniert, um einen Block (372) voller Größe (133) zu bilden; der volle Block (372) aus logischen Adressen wird dem vollen L-Block (237) zugeordnet, und die übrigen logischen Adressen des Blocks (370) im Namensraum (221) werden einem aus dem L-Block (239) zugeteilten Teil-L-Block (378) zugeordnet. So wird die Anzahl der dem Namensraum (221) zugeteilten Teil-L-Blöcke um eins reduziert.
  • zeigt ein Beispiel, in dem die Anzahl der logischen Adressen in den beiden Teil-L-Blöcken (373 und 380) die vorgegebene Blockgröße (133) übersteigt. So führt die Kombination zur Verwendung eines vollen L-Blocks (237) und eines Teil-L-Blocks (377). Generell kann die Anzahl der logischen Adressen in den beiden Teil-L-Blöcken kleiner als die vorgegebene Blockgröße (133) sein, und die Kombination führt zu einem kombinierten Teil-L-Block, ohne einen vollen Block hinzuzufügen. In anderen Fällen ist die Anzahl der logischen Adressen in den beiden Teil-L-Blöcken gleich der vorgegebenen Blockgröße (133), also führt die Optimierung (421) nach der Zusammenfassung der Teil-L-Blöcke zu einem einzelnen vollen Block zur Beseitigung zweier Teil-L-Blöcke.
  • Die Optimierung (421) der beinhaltet generell die Verschiebung der Zuteilung eines Teils der logischen Adressen des Namensraums (221) von einem Teil eines L-Blocks (z.B. 239) in einen Teil eines anderen L-Blocks (z.B. 237) oder von einem Teil eines L-Blocks (z.B. 239) in einen anderen Teil desselben L-Blocks (z.B. 239).
  • So werden die logischen Adressen im Teil (374) des Namensraums (221) z.B. vor der Optimierung (421) einem Teil des L-Blocks (239) und nach der Optimierung (421) einem Teil des L-Blocks (237) zugeordnet.
  • So werden die logischen Adressen im Teil (375) des Namensraums (221) z.B. vor der Optimierung (421) einem Teil des L-Blocks (239) und nach der Optimierung (421) einem anderen Teil des L-Blocks (239) zugeordnet.
  • Vorzugsweise ist die FTL dazu in der Lage, deren logisch-physikalische Adresszuordnung für Teile von L-Blöcken anzupassen, um derartige Verschiebungen ohne Leistungsverschlechtungen bewirken zu können. Also kann die Optimierung (421) über einen Befehl zur Veranlassung einer Zuordnungsänderung durch die FTL ausgeführt werden.
  • Vor der Optimierung (421) überträgt die FTL z.B. die logischen Adressen im Teil-L-Block (380) in physikalische Adressen in der Speichervorrichtung (103), insbesondere in einen ersten Satz physikalischer Adressen für aus dem Teil (374) des Namensraums (221) übertragene logische Adressen und einen zweiten Satz physikalischer Adressen für aus dem Teil (375) des Namensraums (221) übertragene logische Adressen. Bei der Optimierung (421) (z.B. zu einem Zeitpunkt, wo der Namensraum (221) nicht benutzt wird), wird die FTL-Adresszuordnung aktualisiert, um die Übertragungen auf Teile der L-Blöcke (237) umzuschalten. Nach der Optimierung (421) überträgt die FTL die logischen Adressen im entsprechenden Teil des L-Blocks (237) in den ersten Satz physikalischer Adressen, die den logischen Adressen im Teil (374) des Namensraums (221) entsprechen, und überträgt die logischen Adressen im aus dem L-Block (239) zugeteilten Teil-L-Block (377) in den zweiten Satz physikalischer Adressen, die den logischen Adressen im Teil (375) des Namensraums (221) entsprechen. Also kann die Optimierung (421) durchgeführt werden, ohne Spiegelungsvorgänge durchzuführen oder im Namensraum (221) gespeicherte Daten in der Speichervorrichtung (103) zu kopieren oder zu verschieben.
  • Die FTL ist dazu in der Lage, ihre logisch-physikalische Adresszuordnung ohne Leistungsverschlechterung anzupassen; die zugeteilten Teile von L-Block-Adressen in die Teile (374 und 375) des Namensraums (221) kann durch Kopieren, Verschieben oder Spiegeln von Daten für den Namensraum (221) erreicht werden. In einigen Fällen kann das Kopieren, Verschieben oder Spiegeln von Daten mit sog. Wear-Leveling-Operationen der steuerung (107) kombiniert werden.
  • Die Optimierung der Namensraumabbildungen kann nicht nur dazu durchgeführt werden, um Fragmentierung der jedem Namensraum (z.B. 221) zugeteilten logischen Adressen in der Kapazität (220) zu reduzieren oder zu beseitigen, sondern auch dazu, um Fragmentierung der einem neuen Namensraum zuteilbaren freien logischen Adressen in der Kapazität (220) zu reduzieren oder zu beseitigen.
  • zeigt eine Anpassung einer Namensraumzuordnung zur Reduzierung einer Lücke in den zugeordneten Adressen eines Namensraums und zur Konsolidierung verfügbarer freier Blöcke in einem zusammenhängenden Bereich.
  • Vor der Optimierung (421) in werden logische Adressen in L-Blöcken (233 und 239) auf der Kapazität (220) der Speichervorrichtung (103) dem Namensraum (221) zugeteilt und durch logische Adressen in L-Blöcken (237, ...) getrennt, und die freien Blöcke (231, 237, ...) werden durch zugeteilte logische Adressen in L-Blöcken (z.B. 233) getrennt.
  • Nach der Optimierung (421) in werden logische Adressen aus einem zusammenhängenden Satz logischer Adressen in L-Blöcken (231 und 233) zugeteilt, und logische Adressen, die zur Zuteilung verfügbar sind, befinden sich dabei in den freien L-Blöcken (237, ... , 239). Also wird die Datenzugriffsleistung für den Namensraum (221) verbessert, und ein neuer Namensraum kann bei optimaler Leistung erzeugt werden, ohne dass eine Optimierung durchgeführt werden muss.
  • Die Optimierung von Namensraumabbildungen kann noch weiter verbessert werden, um die Ausgabe von Reihenfolgeabbildungen zwischen den logischen Adressen in einem Namensraum und den logischen Adressen in der Kapazität (220) zu entfernen, wie in gezeigt.
  • zeigt eine Anpassung einer Namensraumzuordnung zur Verbesserung der zusammenhängenden und sequentiellen Zuordnung zwischen logischen Adressen, die in einem auf einer Speichervorrichtung zugeteilten Namensraum definiert sind, und zugeordneten logischen Adressen, die auf der Gesamtkapazität der Speichervorrichtung definiert sind.
  • Vor der Optimierung (421) in können die logischen Adressen in jedem der Blöcke (241, 372, 375) des Namensraums (221) linear und sequentiell einem entsprechenden Block (233, 231 und 377) auf der Kapazität (220) zugeordnet werden. Obwohl die L-Blöcke (231 und 233) aus einem zusammenhängenden Bereich der Kapazität (220) dem Namensraum (221) zugeteilt werden, hält die Zuordnung der Blöcke (241, 372) des Namensraums (221) zu den L-Blöcken (233 und 231) die Reihenfolge nicht ein; also kann die Zuordnung der logischen Adressen im zusammenhängenden Bereich der Blöcke (241 und 372) linear und sequentiell dem zusammenhängenden Bereich der L-Blöcke (233 und 231) auf der Kapazität (220) nicht zugeordnet werden. Ein solches Zuordnungsschema erfordert mehr Verarbeitungszeit beim Datenzugriff im Namensraum (221).
  • Nach der Optimierung (421) in können die logischen Adressen im zusammenhängenden Bereich der Blöcke (241 und 372) linear und sequentiell dem zusammenhängenden Bereich der L-Blöcke (231 und 233) auf der Kapazität (220) zugeordnet werden. So kann ein effizienteres Berechnungsverfahren zur Übertragung der logischen Adressen im Namensraum (221) in die logischen Adressen auf der Kapazität (220) verwendet werden.
  • Im Anschluss an die Optimierung (421) in , können die logischen Adressen im ganzen Namensraum, insbesondere in den Blöcken (241, 372, 375) linear einem zusammenhängenden Bereich von L-Blöcken (233, 231, 377) auf der Kapazität (220) zugeordnet werden. So kann die Berechnung zur logischen Adresszuordnung zwischen dem Namensraum (221) und der Kapazität (220) noch weiter vereinfacht werden, um die Effizienz zu verbessern.
  • Wenn ausreichende freie L-Blöcke zur Zuteilung der bestehenden Namensräume vorliegen, wird evtl. bevorzugt, jeden Namensraum ganz auf einem zusammenhängenden Bereich auf der Kapazität zuzuteilen, wobei der zusammenhängende Bereich generell mindestens null oder mehr volle L-Blöcke und mindestens einen Teil-L-Block umfassen kann. Es können Teil-L-Blöcke unterschiedlicher Namensräume aus unterschiedlichen vollen L-Blöcken zugeteilt werden. Also kann auf jeden der Namensräume mit optimaler Leistung zugegriffen werden.
  • Wird ein zusätzlicher Namensraum angefordert, dem mit den bestehenden freien vollen L-Blöcken und einem freien Teil-L-Block nicht nachzukommen ist, können mehrere zugeteilte Teil-L-Blöcke auf einem L-Block kombiniert werden, um mindestens einen L-Block zwecks Zuteilung des zusätzlichen Namensraums frei zu machen. Alternativ oder in Kombination können mehrere Teil-L-blöcke dem Namensraum zugeteilt werden, und ein Hintergrundprozess kann dazu benutzt werden, um die Leistung des Namensraums zu optimieren, indem die Anzahl der Teilblöcke reduziert wird (z.B. wie in gezeigt).
  • zeigt ein Verfahren zur Anpassung der Umwandlung von logischen Adressen in physikalische Adressen gemäß einer Ausführungsform. So kann z.B. das Verfahren der in der Speichervorrichtung (103) der unter Verwendung einer in gezeigten Namensraumabbildung (273) oder einer in dargestellten Namensraumabbildung (135) ausgeführt werden. Bspw. kann die Speichervorrichtung (103) (z.B. über die Firmware (104) und die Steuerung (107)) zur Ausführung des Verfahrens der konfiguriert werden.
  • Das Verfahren nach umfasst: Aufteilen (431) in der Gesamtkapazität (220) einer Speichervorrichtung (103) definierter erster logischer Adressen in Blöcke (z.B. 231, 233, ..., 237, 239) gemäß einer vorgegebenen Blockgröße (133), Benennen (433) eines Teils der Kapazität (220) der Speichervorrichtung (220), um zweite logische Adressen im benannten Teil (z.B. dem Namensraum (221)) der Kapazität (220) zu definieren; Aufteilen (435) der zweiten logischen Adressen in Blöcke (z.B. 241, 372, 375) gemäß der vorgegebenen Blockgröße (133); Speichern (437) von Daten (z.B. Namensraumabbildung (273 oder 135)), die die Blöcke der zweiten logischen Adressen einer ersten Teilmenge der Blöcke der ersten logischen Adressen zuordnen (wie z.B. in , , , - und/oder 21 - 24) zuordnen; Ändern (439) der Daten (z.B. Namnesraumabbildung (273 oder 135)), ohne die Größe des benannten Teils zu ändern, um die Blöcke der zweiten logischen Adressen einer zweiten Teilmenge der Blöcke der ersten logischen Adressen (wie z.B. in - gezeigt) neu zuzuordnen, und Übertragen (441) der zweiten logischen Adressen in physikalische Adressen durch Zuordnen der zweiten logischen Adressen zu entsprechenden Adressen in den ersten logischen Adressen anhand der Daten (z.B. Namensraumabbildung (273 oder 135)).
  • Vorzugsweise werden die Daten (z.B. Namensraumabbildung (273 oder 135)) in einem Hintergrundprozess geändert, ohne die aktuellen Datenzugriffsabfragen des Hosts (101) zu beeinflussen. Die Änderung (439) erfolgt, um die spätere Datenzugriffsleistung zu verbessern, indem die zur Übertragung (411) der Adressen gehörenden Berechnungen reduziert werden. Bei den Berechnungen kann es sich um die Entfernung von Lücken im Teil der ersten logischen Adressen, dem die zweiten logischen Adressen zugeordnet sind. Ferner, Entfernen von Lücken im Teil der ersten logischen Adressen, zu denen keine Zuordnung aus in bestehenden genannten Teilen (zugeteilten Namensräumen) definierten logischen Adressen der Kapazität erfolgt.
  • So sind z.B. die logischen Adressen in der ersten Teilmenge Blöcke vor der Änderung (439) nicht zusammenhängend, und nach der Änderung (439) sind die logischen Adressen in der zweiten Teilmenge Blöcke zusammenhängend, wie in - gezeigt. Vorzugsweise befindet sich die zweite Teilmenge der Blöcke nach der Änderung (439) in einem zusammenhängenden Bereich der Kapazität (220).
  • Wie in gezeigt, werden vor der Optimierung (421), die die Zuordnung ändert, sequentielle logische Adressen im Namensraum (221) nicht sequentiellen logischen Adressen auf der Kapazität (220) zugeordnet, und nach der Änderung (439) werden die sequentiellen logischen Adressen im Namensraum (221) sequentiellen logischen Adressen auf der Kapazität (220) zugeordnet.
  • Durch die Nutzung von Teil-L-Blöcken (z.B. 373, 380) wird die Berechnung bei der Adressübertragung erhöht. Wie in gezeigt, kann die Änderung (439) derart erfolgen, dass die zweite Teilmenge Blöcke mindestens einen Teilblock weniger enthält als die erste Teilmenge Blöcke.
  • Die Änderung (439) kann im Wege einer Änderung der Zuordnung zwischen den in der Gesamtkapazität (220) der Speichervorrichtung (103) definierten ersten logischen Adressen und den physikalischen Adressen in der Speichervorrichtung (103) erfolgen. So werden die logischen Adressen in der ersten Teilmenge Blöcke vor der Änderung (439) einem Satz physikalischer Adressen zugeordnet, und nach der Änderung (439) werden logische Adressen in der zweiten Teilmenge Blöcke dem Satz physikalischer Adressen zugeordnet.
  • Die Änderung (439) kann durch Kopieren oder Spiegeln von Daten erfolgen, die gemäß den im benannten Teil der Kapazität (220) (z.B. Namensraum (221)) definierten logischen Adressen gespeichert sind. Vor der Änderung (439) werden z.B. logische Adressen in der ersten Teilmenge Blöcke einem ersten Satz physikalischer Adressen zugeordnet, und logische Adressen in der zweiten Teilmenge Blöcke werden dabei einem zweiten Satz physikalischer Adressen zugeordnet. Die im ersten Satz physikalischer Adressen gespeicherten Daten können auf den zweiten Satz physikalischer Adressen kopiert oder gespiegelt werden, so dass nach der Änderung (439) ein Zugriff auf die Daten durch Zuordnen der zweiten logischen Adressen zur zweiten Teilmenge Blöcke anstatt zur ersten Teilmenge Blöcke erfolgen kann.
  • Die Änderung (439) kann durch eine Kombination einer Änderung der Zuordnung zwischen den in der Gesamtkapazität (220) der Speichervorrichtung (103) definierten ersten logischen Adressen und den physikalischen Adressen in der Speichervorrichtung (103) für einen Teil des Speichers, der den zweiten logischen Adressen des benannten Teils entspricht, und Kopieren oder Spiegeln von Daten, die gemäß den im benannten Teil der Kapazität (220) (z.B. Namensraum (221)) definierten logischen Adressen gespeichert sind, für einen anderen Teil des Speichers, der den zweiten logischen Adressen des benannten Teils entspricht, erfolgen.
  • Nachdem eine erste Blockgröße verwendet wird, um L-Blöcke zwecks Namensraumzuordnung zu definieren, kann später eine verbesserte oder optimierte Blockgröße vorhergesehen oder berechnet wird, wozu z.B. eine Methode der künstlichen Intelligenz und/oder maschinelles Lernen anhand der Nutzungsverläufe der Namensräume in der Speichervorrichtung und/oder anderen analog genutzten Speichervorrichtungen verwendet wird.
  • Um zwecks Namnesraumzuordnung eine neue Blockgröße anzuwenden, werden die Namensraumabbildungen der bestehenden Namensräume von der Speichervorrichtung neu erzeugt, um eine blockweise Zuordnung gemäß der neuen Blockgröße durchzuführen. Vorzugsweise werden die Namensraumabbildungen gemäß der neuen Blockgröße neu erzeugt, um eine effiziente Übertragung von den in den Namensräumen definierten logischen Adressen in die für die Gesamtkapazität der Speichervorrichtung namensraumneutral definierten logischen Adressen zu gewährleisten, damit die übertragenen logischen Adressen namensraumunabhängig in physikalische Adressen umgewandelt werden können.
  • Vorzugsweise ist die neue Blockgröße bei Blockvergrößerungen ein Vielfaches der alten Blockgröße und bei Blockverkleinerungen ein Vielfaches der neuen Blockgröße. Besonders bevorzugt ist jede der alten und neuen Blockgrößen eine Zweierpotenz (2), um die zur Zuordnung von Adressen für die L-Blöcke gehörenden Berechnungen zu vereinfachen. Eine den Präferenzen am nächsten kommende Zahl kann als neue Blockgröße ausgewählt werden.
  • Ist die neue Blockgröße ein Vielfaches der alten Blockgröße, so können zwecks Blockvergrößerung mehrere angrenzende volle L-Blöcke der alten Blockgröße zu einem vollen L-Block der neuen Blockgröße zusammengefasst werden.
  • Ist die alte Blockgröße ein Vielfaches der neuen Blockgröße, so kann zwecks Blockverkleinerung jeder volle L-Block der alten Blockgröße in mehrere volle L-Blöcke der neuen Blockgröße aufgeteilt werden.
  • Wird ein L-Block der neuen Blockgröße einem bestehenden Namensraum nur teilweise zugeteilt, so kann ein aus dem L-Block der neuen Blockgröße zugeteilter Teil-L-Block zunächst identifiziert und in der neuen Namensraumabbildung des bestehenden Namensraums verwendet werden. Anschließend kann eine Operation zur Optimierung der Namensraumabbildung im Hintergrund erfolgen, um die Anzahl der dem Namensraum zugeteilten Teil-L-Blöcke zu reduzieren und/oder die dem Namensraum zugeteilten L-Blöcke in einem zusammenhängenden Bereich zu konsolidieren.
  • Generell kann eine Änderung der Blockgröße die Anzahl der Teilblöcke in der aktualisierten Namensraumabbildung eines bestehenden Namensraums von nur einem auf mehr als einen erhöhen. Optional können mithilfe eines Hintergrundprozesses die gemäß der neuen Blockgröße erzeugten aktualisierten Namensraumabbildungen optimiert und die Anzahl der Teilblöcke auf höchstens eins reduziert werden. So kann die Optimierung z.B. mit den vorstehend in Verbindung mit - beschriebenen Methoden, um die Anzahl der Teilblöcke zu reduzieren, die einem Namensraum in einem zusammenhängenden Bereich von logischen Adressen, die in der Kapazität der Speichervorrichtung definiert sind, zugeteilten L-Blöcke zu konsolidieren, und/oder freie L-Blöcke in einem zusammenhängenden Bereich von logischen Adressen, die in der Kapazität der Speichervorrichtung definiert sind, zu konsolidieren.
  • Vorzugsweise erfolgt ein Optimierungsprozess im Hintergrund, bevor die neue Blockgröße auf die Namensraum angewendet wird, um die Lage der einem bestehenden Namensraum zugeteilten vollen und/oder Teil-L-Blöcke in der Kapazität der Speichervorrichtung zu verschieben und die durch die Anwendung der neuen Blockgröße verursachte Zunahme bei der Anzahl der Teilblöcke zumindest zu reduzieren. So können z.B. die einem Namensraum zugeteilten L-Blöcke der alten Blockgröße derart angepasst werden, dass die logischen Adressen in den L-Blöcken die gleichen sind wie die logischen Adressen in L-blöcken der neuen Blockgröße, nachdem die Optimierung auf den neuen Namensraum angewendet worden ist. Die optimierten L-Blöcke der neuen Blockgröße können z.B. vor der Anwendung der neuen Blockgröße berechnet werden, um die bevorzugten L-Blöcke der alten Blockgröße zu bestimmen, und nach der Anpassung der Namensraumabbildung des Namensraums auf die bevorzugten L-Blöcke der alten Blockgröße kann die neue Blockgröße angewendet werden, um den Namensraum den optimierten L-Blöcken der neuen Blockgröße zuzuordnen.
  • zeigt Blockgrößenänderungen für die Namensraumabbildung.
  • In ist eine große Blockgröße (133) ein Vielfaches einer kleinen Blockgröße (132). Die Kapazität (220) der Speichervorrichtung (103) ist gemäß der großen Blockgröße (133) in einen Satz großer L-Blöcke (231, 233, 237, ..., 239) geteilt und gemäß der kleinen Blockgröße (132) in einen weiteren Satz kleiner L-Blöcke (461, 462, 463, 464, 465, 466, ..., 467, 468) geteilt.
  • Bei der Verkleinerung (451) von der großen (133) auf die kleine Blockgröße (132) verbleiben die Blockgrenzen (z.B. 455) zwischen angrenzenden großen L-Blöcken (231, 233, 237, ... 239) als einige der Blockgrenzen von angrenzenden kleinen L-Blöcken (461, ..., 468). Um die großen L-Blöcke 231, 233, 237, ... 239) weiter in die kleinen L-Blöcke (461, ..., 468) zu spalten, werden zusätzlich Blockgrenzen (z.B. 456) hinzugefügt.
  • Bei der Vergrößerung (453) von der kleinen (132) auf die große Blockgröße (133) verbleiben einige der Blockgrenzen angrenzender kleiner L-Blöcke (461, ... 468) als die Blockgrenzen (z.B. 455) zwischen angrenzenden großen L-Blöcken (231, 233, 237, ... 239). Andere Blockgrenzen (z.B. 456) werden entfernt, um angrenzende kleine L-Blöcke (461, .., 468) zu den jeweiligen großen L-Blöcken (231, 233, 237, 239) zusammenzufassen.
  • Wird die Kapazität (220) gemäß der großen Blockgröße (133) aufgeteilt, wird der Namensraum (221) der einem Satz voller großer L-Blöcke (233 und 239) zugeordnet. Da der Satz der logischen Adressen in den vollen großen L-Blöcken (223 und 239) gleich dem Satz der logischen Adressen in den vollen kleinen L-Blöcken (463, 464, 467 und 468) ist, kann die Namensraumabbildung des Namensraums (221) einfach von einer Zuordnung zu vollen großen L-Blöcken (233 und 239) auf eine Zuordnung zu vollen kleinen L-Blöcken (463, 464, 467 und 468) aktualisiert werden, um die Verkleinerung (451) der Blockgröße umzusetzen. Ebenso kann zur Umsetzung der Vergrößerung (453) der Blockgröße die Namensraumabbildung des Namensraums (221) einfach von einer Zuordnung zu vollen kleinen L-Blöcken (463, 464, 467 und 468) auf eine Zuordnung zu vollen großen L-Blöcken (233 und 239) aktualisiert werden.
  • Wenn ein einem Namensraum (z.B. 221) zugeteilter großer L-Block (z.B. 233) in mehrere kleine L-Blöcke (z.B. 463 und 464) aufgeteilt wird, werden generell auch die kleinen L-Blöcke (z.B. 463 und 464) der kleinen Blockgröße (132) dem Namensraum (z.B. 221) zugeordnet. Also wird die Aktualisierung der Namensraumabbildung des Namensraums (z.B. 221) bei der Verkleinerung (451) der Blockgröße für die zugeteilten vollen Blöcke (z.B. 233) vereinfacht.
  • Wenn jedoch mehrere kleine L-Blöcke (z.B. 463 und 464) bei einer Vergrößerung (453) der Blockgröße zu einem großen L-Block (z.B. 233) zusammengefasst werden, kann es sich ergeben, dass einige der mehreren kleinen L-Blöcke (z.B. 463 und 464) dem Namensraum (z.B. 221) zugeteilt werden und einige der mehreren kleinen L-Blöcke (z.B. 463 und 464) dem Namensraum (z.B. 221) nicht zugeteilt werden. Folglich wird der L-Block (z.B. 233) dem Namensraum (z.B. 221) nur teilweise zugeteilt.
  • Wenn z.B. die kleine Blockgröße (132) benutzt wird, kann der Namensraum (221) den L-Blöcken (464 und 465) statt der L-Blöcke (463 und 464) zugeordnet werden. Der L-Block (463) kann ein freier Block sein, oder einem anderen Namensraum (z.B. 223) zugeordnet sein. Wenn in einem solchen Fall nach der Vergrößerung (453) der Blockgröße L-Blöcke (463 und 464) als großer L-Block (233) fusioniert werden und die L-Blöcke (465 und 466) als großer L-Block (237) fusioniert werden, wird der Namensraum (221) einem Teil des großen L-Blocks (233) und einem Teil des großen L-Blocks (237) zugeordnet.
  • Optional wird vor der Vergrößerung (453) der Blockgröße die Namensraumabbildung (221) (z.B. durch einen Hintergrundprozess zwecks Optimierung) angepasst, um den Namensraum (221) derart neu zuzuordnen, dass die vom Namensraum (221) benutzten kleinen vollen L-Blöcke gemäß den gemäß der großen Blockgröße (133) definierten großen L-Blöcken konsolidiert werden. Anstatt kleine L-Blöcke (464 und 465) zu benutzen, die sich in unterschiedlichen großen L-Blöcken (233 und 237) befinden, kann der Namensraum (221) z.B. neu zugeordnet werden, um kleine L-Blöcke (463 und 464) zu benutzen, die sich in einem großen L-Block (233) befinden. Nach der Neuzuordnung (z.B. mit der vorstehend in Verbindung mit - beschriebenen Methode) wird die Anzahl der vom Namensraum (221) teilweise genutzten großen L-Blöcke infolge der Vergrößerung (453) der Blockgröße reduziert.
  • zeigt ein Beispiel, in dem die Größe des Namensraums (221) ein Vielfaches der kleinen Blockgröße (132) und zugleich auch ein Vielfaches der großen Blockgröße (133) ist.
  • Also ist es möglich, den Namensraum (221) den kleinen L-Blöcken (463, 464, 467 und 468) so neu zuzuordnen, dass nach der Vergrößerung (453) der Blockgröße der Namensraum (221) keinem großen L-Block zugeordnet ist, der vom Namensraum (221) nur teilweise genutzt wird.
  • Wenn die Größe des Namensraums (221) jedoch nicht zugleich ein Vielfaches der kleinen Blockgröße (132) und ein Vielfaches der großen Blockgröße (133) ist, benutzt der Namensraum (221) mindestens einen großen L-Block, der vom Namensraum (221) nur teilweise genutzt wird. Aus dem teilweise genutzten großen L-Block kann ein Teil-L-Block zugeteilt und im Namensraum (221) mit der vorstehend in Verbindung mit - beschriebenen Methode verwendet werden.
  • In einigen Ausführungsformen erfolgt vor der Änderung (453) der Blockgröße eine Optimierung der Namensraumabbildung des Namensraums (221) im Hintergrund, so dass nach der Vergrößerung (453) der Blockgröße der Namensraum (221) höchstens einen aus den großen L-Blöcken (231, 233, 237, ..., 239) zugeteilten Teil-L-Block benutzt.
  • Wahlweise oder in Kombination kann die Optimierung nach der Vergrößerung (453) der Blockgröße erfolgen. Wenn z.B. der Namensraum (221) kleine L-Blöcke (464 und 466), die Teile großer L-Blöcke (223 und 227) sind, benutzt, können zwei Teil-L-Blöcke zunächst aus den großen L-Blöcken (223 und 227) dem Namensraum (221) zugeteilt werden, um die Vergrößerung (453) der Blockgröße umzusetzen. Anschließend können die dem Namensraum (221) zugeteilten Teil-L-Blöcke mit einer in Verbindung mit beschriebenen Methode einem großen L-Block (z.B. 223) neu zugeordnet werden. Optional wird die optimierte Namensraumabbildung, die den großen L-Block (z.B. 223) benutzt, schon vor der eigentlichen Vergrößerung (453) der Blockgröße berechnet, um die entsprechende optimierte Namensraumabbildung zu ermitteln, die die durch die Teilung des in der optimierten Namensraumabbildung benutzten großen L-Blocks (z.B. 223) erzeugten kleinen L-Blöcke (z.B. 463 und 464) benutzt. Es kann dann ein Optimierungsprozess im Hintergrund angewendet werden, um vor der Vergrößerung (453) der Blockgröße von der aktuellen Namensraumabbildung des Namensraums (221) auf die optimierte Namensraumabbildung zu wechseln.
  • - zeigen Anpassungen der Namensraumzuordnung bei der Umsetzung von Blockgrößenänderungen.
  • In weist ein großer L-Block (239) einen Teil (373) auf, der vor der Verkleinerung (451) der Blockgröße einem Namensraum (z.B. 221) als Teilblock (373) zugeteilt wird. Da der Teilblock (373) einem vollen kleinen L-Block (471) mit der kleinen Blockgröße (132) entspricht, wird der volle kleine L-Block (471) nach der Verkleinerung (451) der blockgröße dem Namensraum (z.B. 221) zugeteilt. Also entfällt nach der Verkleinerung (451) der Blockgröße die Nutzung eines Teilblocks für den Namensraum (z.B. 221).
  • Wenn die angrenzenden kleinen L-Blöcke (471 und 472) zur Vergrößerung (453) der Blockgröße zum großen L-Block (239) fusioniert werden, kann der große L-Block (239) dem Namensraum (z.B. 221) nur teilweise zugeteilt werden, wie in gezeigt. Wenn z.B. ein kleiner L-Block (471) dem Namensraum (z.B. 221) zugeteilt wird und ein weiterer kleiner L-Block (472) einem anderen Namensraum (z.B. 223) zugeteilt wird oder zur Zuteilung an einen anderen Namensraum (z.B. 223) frei steht, wird ein Teilblock (373) nach der Vergrößerung (453) der Blockgröße dem Namensraum (z.B. 221) aus dem großen L-Block (239) zugeteilt.
  • zeigt einen Fall, in dem ein einem Namensraum (z.B. 221) zugeteilter Teil-L-Block (373) nach der Verkleinerung (451) der Blockgröße in einen vollen kleinen L-Block (471) und einen aus einem angrenzenden kleinen L-Block (472) zugeteilten Teil-L-Block (473) aufgeteilt wird. Zur Umsetzung der Verkleinerung (451) der Blockgröße wird die Namensraumabbildung des Namensraums (z.B. 221) aktualisiert, um den vollen kleinen L-Block (471) und den aus dem angrenzenden vollen kleinen L-Block (472) zugeteilten Teil-L-Block (473) aufzunehmen.
  • Bei einer Vergrößerung (453) der Blockgröße in wird der einem Namensraum (z.B. 221) zugeteilte Teil-L-Block mit dem angrenzenden L-Block (471) fusioniert, um einen Teil-L-Block (373) zu bilden, der aus dem großen L-Block (239) zugeteilt wird und in der aktualisierten Namensraumabbildung des Namensraums (z.B. 221) benutzt wird.
  • zeigt einen Fall, in dem ein einem Namensraum (z.B. 221) zugeteilter Teil-L-Block (373) kleiner als die kleine Blockgröße (132) ist. Nach der Verkleinerung (451) der Blockgröße ist der dem Namensraum (z.B. 221) zugeteilte Teil (373) des großen L-Blocks (239) nach wie vor ein Teil (473) eines kleinen L-Blocks (471). Also wird ein Teil-L-Block (473) nach der Verkleinerung (451) der Blockgröße dem Namensraum (z.B. 221) aus dem kleinen L-Block (471) zugeteilt, und die Namensraumabbildung des Namensraums (z.B. 221) wird entsprechend aktualisiert, um die Verkleinerung (451) der Blockgröße umzusetzen.
  • Bei einer Vergrößerung (453) der Blockgröße in wird ein Teil-L-Block (373) dem Namensraum (z.B. 221) aus dem großen L-Block (239) zugeteilt, nachdem die kleinen L-Blöcke (471 und 472) zum großen L-Block 239) fusioniert worden sind.
  • zeigt einen Fall, in dem ein aus einem großen L-Block (239) zugeteilter Teil-L-Block (373) nach der Verkleinerung (461) der Blockgröße in zwei Teil-L-Blöcke (473 und 474) geteilt wird. In ist keine der Grenzen des einem Namensraum (z.B. 221) zugeteilten Teilblocks (373) mit den Grenzen des großen L-Blocks (239) und den Grenzen der kleinen L-Blöcke (471 und 472) ausgerichtet. Da der Teilblock (373) eine Grenze zwischen den kleinen L-Blöcken (471 und 472) überspannt, werden zwei Teil-L-Blöcke (473 und 474) infolge der Verkleinerung (451) der Blockgröße aus kleinen L-Blöcken (471 und 472) dem Namensraum (z.B. 221) zugeteilt. In kann der Teil (475) des L-Blocks (239) einem anderen Namensraum (z.B. 223) zugeteilt werden oder von einem anderen Namensraum (z.B. 223) freigegeben worden sein. Nach der Verkleinerung (451) der Blockgröße kann eine Optimierung durchgeführt werden, um die Anzahl der dem Namensraum (z.B. 221) zugeteilten Teilblöcke zu reduzieren.
  • Alternativ erfolgt die Optimierung für die Zuteilung des Teilblocks (373) aus dem großen L-Block (239) vor der Verkleinerung (451) der Blockgröße, so dass mindestens eine der Grenzen des dem Namensraum (z.B. 221) zugeteilten Teilblocks ausgerichtet ist mit einigen: der Grenzen des großen L-Blocks (239) und der Grenzen der kleinen L-Blöcke (471 und 472). Wird eine derartige Optimierung durchgeführt, führt die Verkleinerung (451) der Blockgröße nicht dazu, dass der Teil-L-Block (373) des Namensraums (z.B. 221) in mehr als einen aus kleinen L-Blöcken (z.B. 471, 472) zugeteilten Teil-L-Block geteilt wird.
  • zeigt ein Verfahren zur Anpassung einer Blockgröße zwecks Namensraumabbildung. Das Verfahren der kann z.B. mit im Zusammenhang mit - erläuterten Anpassungen der Namensraumabbildung in einer in dargestellten Speichervorrichtung (103) ausgeführt werden.
  • Das Verfahren nach umfasst: Aufteilen (481) eines in der Gesamtkapazität (220) einer Speichervorrichtung (103) definierten Satzes erster logischer Adressen in erste Blöcke (231, 233, 237, ..., 239) gemäß einer ersten Blockgröße (133); Zuteilen (483) eines Namensraums (221) als benannter Teil der Speichervorrichtung (103); Erzeugen (485) einer Namensraumabbildung (z.B. 273, 135) zur blockweisen Übertragung eines im Namensraum (221) definierten Satzes zweiter logischer Adressen in logische Adressen in einer Teilmenge (z.B. 233, 239) der ersten Blöcke (231, 233, 237, ..., 239); Identifizieren (487) einer zweiten Blockgröße (132); Aufteilen (489) des in der Gesamtkapazität (220) der Speichervorrichtung (103) definierten Satzes erster logischer Adressen in zweite Blöcke (461, ..., 468) gemäß der zweiten Blockgröße (132) und Neuerzeugen (491) einer Namensraumabbildung (z.B. 273, 135) zur blockweisen Übertragung der im Namensraum (221) definierten zweiten logischen Adressen in die entsprechenden logischen Adressen in einer Teilmenge (z.B. 463, 464, 467, 468) der zweiten Blöcke (461, ..., 468) der in der Gesamtkapazität (220) der Speichervorrichtung (103) definierten ersten logischen Adressen.
  • Vorzugsweise wird die zweite Blockgröße als Zweierpotenz (2) festgelegt; wenn die zweite Blockgröße kleiner ist als die erste Blockgröße, ist die erste Blockgröße ein Vielfaches der zweiten Blockgröße, und wenn die zweite Blockgröße größer ist als die erste Blockgröße, ist die zweite Blockgröße ein Vielfaches der ersten Blockgröße.
  • Vorzugsweise wird die Namensraumabbildung des Namensraums vor oder nach der Blockgrößenänderung optimiert, um die Anzahl der nach der Blockgrößenänderung in der Namensraumabbildung benutzten Teilblöcke zu reduzieren.
  • Zur Speicherung von Befehlen der Firmware (114) kann ein nicht flüchtiger Datenträger verwendet werden. Wenn die Befehle von der Steuerung (107) der Speichervorrichtung (103) ausgeführt werden, veranlassen die Befehle die Steuerung (107) zur Ausführung eines vorstehend beschriebenen Verfahrens.
  • In der vorliegenden Beschreibung heißt es zur Vereinfachung, dass verschiedene Funktionen und Operationen von Computerbefehlen ausgeführt oder veranlasst werden.
  • Für den Fachmann ist jedoch erkennbar, dass diese Ausdrücke bedeuten, dass die Funktionen aus der Ausführung der Computerbefehle durch mindestens eine Steuerung oder einen Prozessor, z.B. Mikroprozessor, resultieren. Alternativ oder in Kombination damit können die Funktionen und Operationen mit zweckbestimmten Schaltungen mit oder ohne Softwarebefehle, z.B. unter Verwendung einer ASIC oder eines FPGA, ausgeführt werden. Ausführungsformen können unter Verwendung von hartverdrahteten Schaltungen ohne Softwarebefehle oder in Kombination mit Softwarebefehlen ausgeführt werden. Also beschränken sich die Methoden weder auf eine bestimmte Kombination von Hardware-Schaltungen und Software, noch auf eine bestimmte Quelle der vom Datenverarbeitungssystem ausgeführten Befehle.
  • Zwar können einige Ausführungsformen in voll funktionsfähigen Computern und Rechensystemen ausgeführt werden, verschiedene Ausführungsformen sind aber dazu in der Lage, als Computerprodukt in verschiedenerlei Formen verteilt zu werden und ohne Rücksicht auf die konkrete Art der zur Verteilung verwendeten Maschine bzw. Datenträger anwendbar.
  • Mindestens einige erfindungsgemäße Aspekte können mindestens teilweise in Software ausgeführt werden. Mit anderen Worten können die Methoden in einem Rechensystem oder einem sonstigen Datenverarbeitungssystem als Reaktion darauf ausgeführt werden, dass dessen Prozessor, z.B. ein Mikroprozessor oder Mikrocontroller, in einem Speicher, z.B. RDM, flüchtigen RAM, einem nicht flüchtigen Speicher, Cache oder Remote-Speichervorrichtung, enthaltene Befehlsfolgen ausführt.
  • Routinen, die zur Umsetzung der Ausführungsformen ausgeführt werden, können als Teil eines Betriebssystems oder einer konkreten Anwendung, Komponente, eines konkreten Programms, Objektes, Moduls oder einer konkreten Befehlsfolge (insgesamt „Computerprogramme“) ausgeführt werden. Typischerweise umfassen die Computerprogramme einen oder mehrere Befehle, die zu verschiedenen Zeitpunkten in verschiedenen Speichervorrichtungen in einem Computer eingestellt worden sind, und die bei Ablesen und Ausführung durch mindestens einen Prozessor in einem Computer diesen dazu veranlassen, die zur Ausführung von Elementen, die die verschiedenen Aspekte beinhalten, erforderlichen Operationen durchzuführen.
  • Ein greifbarer, nicht flüchtiger Datenträger kann zur Speicherung von Software und Daten verwendet werden, die bei Ausführung durch ein Datenverarbeitungssystem das System zur Ausführung verschiedener Verfahren veranlassen. Die ausführbaren Software und Daten können an verschiedenen Orten, insbesondere z.B. in ROM, flüchtigem RAM, nicht flüchtigem Speicher und/oder Cache-Speicher, gespeichert werden. Teile dieser Software und/oder Daten können in einer beliebigen dieser Speichervorrichtungen gespeichert werden. Ferner können die Daten und Befehle von zentralisierten Servern oder Peer-to-Peer-Netzwerken erhalten werden. Verschiedene Teile der Daten und Befehle können von unterschiedlichen zentralisierten Servern und/oder Peer-to-Peer-Netzwerken zu verschiedenen Zeitpunkten und in unterschiedlichen Kommunikationssitzungen oder in einer Kommunikationssitzung erhalten werden. Die Daten und Befehle können vor der Ausführung der Anwendungen ganz erhalten werden. Alternativ können Teile der Daten und Befehle dynamisch und bedarfsorientiert erhalten werden, wenn sie zur Ausführung benötigt werden. Also ist es nicht erforderlich, dass sich Daten und Befehle zu einem bestimmten Zeitpunkt insgesamt auf einem maschinenlesbaren Datenträger befinden.
  • Als Beispiele computerlesbarer Datenträger seien insbesondere genannt: beschreibbare und nicht beschreibbare Datenträger wie z.B. flüchtige und nicht flüchtige Speichervorrichtungen, ROM, RAM, Flash-Speichervorrichtungen, Disketten und sonstige Wechseldatenträger, Magnetplatten, optische Speichermedien (z.B. CD ROM, DVD usw.) u.a. Die Befehle können dabei in einem flüchtigen Medium, z.B. als elektrische, optische, akustische oder sonstige ausgebreitete Signale wie z.B. Trägerwellen, Infrarotsignale, digitale Signale usw. enthalten sein. Ein flüchtiges Medium wird typischerweise zur Übersendung von Befehlen verwendet, gilt aber nicht als fähig, die Befehle zu speichern.
  • In verschiedenen Ausführungsformen können festverdrahtete Schaltungen in Kombination mit Software-Befehlen zur Ausführung der Methoden verwendet werden. Also beschränken sich die Methoden weder auf eine bestimmte Kombination von Hardware-Schaltungen und Software, noch auf eine bestimmte Quelle der vom Datenverarbeitungssystem ausgeführten Befehle.
  • Obwohl einige der Zeichnungen eine Reihe von Operationen in einer bestimmten Reihenfolge zeigen, können Operationen, die nicht reihenfolgeabhängig sind, neu geordnet werden, und es können andere Operationen kombiniert oder ausgeklammert werden. Obwohl einige Umordnungen oder sonstige Gruppierungen einzeln erwähnt werden, ergeben sich andere für den Fachmann von selbst und stellen somit keine abschließende Aufzählung von Alternativen dar. Ferner ist anzumerken, dass die Phasen in Hardware, Firmware, Software oder einer beliebigen Kombination davon ausführbar wären.
  • Die obige Beschreibung und Zeichnungen dienen lediglich der Veranschaulichung und sind keineswegs als Einschränkung aufzufassen. Zahlreiche Einzelheiten werden beschrieben, um ein besseres Verständnis zu übermitteln. In manchen Fällen wird jedoch auf die Beschreibung allgemein bekannter oder herkömmlicher Details verzichtet, um die Beschreibung nicht unverständlich zu machen. Die Erwähnung einer Ausführungsform bezieht sich vorliegend nicht unbedingt auf dieselbe Ausführungsform, vielmehr ist darunter mindestens eine Ausführungsform zu verstehen.
  • In der obigen Patentschrift ist die Erfindung anhand konkreter Ausführungsbeispiele beschrieben worden. Es versteht sich, dass verschiedene Modifikationen möglich sind, ohne den in den beiliegenden Ansprüchen definierten Schutzumfang zu verlassen. Die Beschreibung und Zeichnungen sind also als beispielhaft und nicht als einschränkend zu betrachten.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 15814934 [0001]

Claims (20)

  1. Speichervorrichtung eines Rechners, umfassend: eine Host-Schnittstelle, eine Steuerung, nicht flüchtige Datenträger; und Firmware, die Befehle enthält, die bei Ausführung durch die Steuerung diese mindestens zur Ausführung folgender Funktionen veranlassen: Erzeugen einer ersten Namensraumzuordnung, die gemäß einer ersten Blockgröße Blöcke erster logischer Adressen, die in einem Namensraum definiert sind, ersten Blöcken zweiter logischer Adressen, die für eine Gesamtkapazität der nicht flüchtigen Datenträger definiert sind, zuordnet; Übertragen der im Namensraum definierten ersten logischen Adressen in physikalische Adressen für die nicht flüchtigen Datenträger anhand der ersten Namensraumzuordnung; Bestimmen einer zweiten Blockgröße; Erzeugen einer zweiten Namensraumzuordnung, die gemäß der zweiten Blockgröße Blöcke der im Namensraum definierten ersten logischen Adressen zweiten Blöcken der zweiten logischen Adressen, die für die Gesamtkapazität der nicht flüchtigen Datenträger definiert sind, zuordnet; und Übertragen der im Namensraum definierten ersten logischen Adressen in die physikalischen Adressen für die nicht flüchtigen Datenträger anhand der zweiten Namensraumzuordnung.
  2. Speichervorrichtung nach Anspruch 1, wobei die ersten Blöcke höchstens einen Block aufweisen, dessen Größe sich von der ersten Blockgröße unterscheidet.
  3. Speichervorrichtung nach Anspruch 2, wobei die zweiten Blöcke höchstens einen Block aufweisen, dessen Größe sich von der zweiten Blockgröße unterscheidet.
  4. Speichervorrichtung nach Anspruch 3, wobei die zweite Blockgröße ein Vielfaches der ersten Blockgröße ist.
  5. Speichervorrichtung nach Anspruch 3, wobei die erste Blockgröße ein Vielfaches der zweiten Blockgröße ist.
  6. Speichervorrichtung nach Anspruch 3, wobei die erste Blockgröße eine Zweierpotenz ist und die zweite Blockgröße eine Zweierpotenz ist.
  7. Speichervorrichtung nach Anspruch 3, wobei die Befehle derart konfiguriert sind, dass sie die Steuerung ferner dazu veranlassen: die erste Namensraumzuordnung vor der Erzeugung der zweiten Namensraumzuordnung derart anzupassen, dass die zweite Namensraumzuordnung mit höchstens einem Block erzeugt wird, der eine andere Größe als die zweite Blockgröße aufweist.
  8. Speichervorrichtung nach Anspruch 7, wobei die erste Namensraumzuordnung in einem Hintergrundprozess angepasst wird.
  9. Speichervorrichtung nach Anspruch 2, wobei die zweiten Blöcke mehr als einen Block aufweisen, dessen Größe sich von der zweiten Blockgröße unterscheidet, und die Befehle derart konfiguriert sind, dass sie die Steuerung ferner dazu veranlassen, die zweite Namensraumzuordnung derart anzupassen, dass die zweite Namensraumzuordnung höchstens einen Block aufweist, dessen Größe sich von der zweiten Blockgröße unterscheidet.
  10. Speichervorrichtung nach Anspruch 9, wobei die zweite Namensraumzuordnung in einem Hintergrundprozess angepasst wird.
  11. Speichervorrichtung nach Anspruch 1, wobei die in der Namensraum definierten ersten logischen Adressen in die physikalischen Adressen für die nicht flüchtigen Datenträger übertragen werden durch: Übertragen der ersten logischen Adressen im in entsprechende logische Adresse in den ersten Blöcken und namensraumunabhängiges Übertragen der entsprechenden logischen Adressen in die physikalischen Adressen.
  12. In einer Computerspeichervorrichtung mit einem nicht flüchtigen Datenträger ausgeführtes Verfahren, wobei das Verfahren umfasst: Erzeugen erster Daten, die gemäß einer ersten Blockgröße Blöcke erster logischer Adressen, die in einem namentlich genannten Teil der nicht flüchtigen Datenträger definiert sind, ersten Blöcken zweiter logischer Adressen, die für eine Gesamtkapazität der nicht flüchtigen Datenträger definiert sind, zuordnen; Übertragen der im namentlich genannten Teil der nicht flüchtigen Datenträger definierten ersten logischen Adressen in physikalische Adressen für die nicht flüchtigen Datenträger anhand der ersten Daten; Bestimmen einer zweiten Blockgröße; Erzeugen zweiter Daten, die gemäß der zweiten Blockgröße Blöcke der ersten logischen Adressen, die im namentlich genannten Teil der nicht flüchtigen Datenträger definiert sind, zweiten Blöcken der zweiten logischen Adressen, die für die Gesamtkapazität der nicht flüchtigen Datenträger definiert sind, zuordnen; und Übertragen der im namentlich genannten Teil der nicht flüchtigen Datenträger definierten ersten logischen Adressen in die physikalischen Adressen für die nicht flüchtigen Datenträger anhand der zweiten Daten;
  13. Verfahren nach Anspruch 12, wobei die Speichervorrichtung eine Mehrzahl namentlich genannter Teile der nicht flüchtigen Datenträger aufweist.
  14. Verfahren nach Anspruch 13, wobei die zweite Blockgröße aufgrund eines Nutzungsverlaufs der Speichervorrichtung bestimmt wird.
  15. Verfahren nach Anspruch 13, wobei die zweite Blockgröße aufgrund von Nutzungsverläufe einer Mehrzahl Speichervorrichtungen bestimmt wird.
  16. Speichervorrichtung nach Anspruch 12, wobei die erste Blockgröße ein Vielfaches der zweiten Blockgröße ist und die zweiten Daten dadurch erhalten werden, dass die ersten Blöcke aufgeteilt werden, um die zweiten Blöcke zu identifizieren.
  17. Speichervorrichtung nach Anspruch 12, wobei die zweite Blockgröße ein Vielfaches der ersten Blockgröße ist und die zweiten Daten dadurch erhalten werden, dass die ersten Blöcke kombiniert werden, um die zweiten Blöcke zu identifizieren.
  18. Verfahren nach Anspruch 17, wobei mindestens einer der ersten Blöcke als Teil eines Blocks der zweiten Blockgröße identifiziert wird.
  19. Verfahren nach Anspruch 18, ferner umfassend: Anpassen der ersten Daten, um erste Blöcke in den zweiten Blöcken zu konsolidieren, so dass die zweiten Blöcke nur einen Block aufweisen, der kleiner ist als die zweite Blockgröße.
  20. Nicht flüchtiger Datenträger, auf dem Befehle gespeichert sind, die bei Ausführung durch eine Steuerung einer Computerspeichervorrichtung mit nicht flüchtigen Datenträgern die Steuerung dazu veranlassen, ein Verfahren auszuführen, wobei das Verfahren umfasst: Erzeugen erster Daten, die gemäß einer ersten Blockgröße Blöcke erster logischer Adressen, die in einem namentlich genannten Teil der nicht flüchtigen Datenträger definiert sind, ersten Blöcken zweiter logischer Adressen, die für die nicht flüchtigen Datenträger insgesamt definiert sind, zuordnen; Übertragen der im namentlich genannten Teil der nicht flüchtigen Datenträger definierten ersten logischen Adressen in physikalische Adressen für die nicht flüchtigen Datenträger anhand der ersten Daten; Bestimmen einer zweiten Blockgröße; Erzeugen zweiter Daten, die gemäß der zweiten Blockgröße Blöcke der ersten logischen Adressen, die im namentlich genannten Teil der nicht flüchtigen Datenträger definiert sind, zweiten Blöcken der zweiten logischen Adressen, die für die nicht flüchtigen Datenträger insgesamt definiert sind, zuordnen; und Übertragen der im namentlich genannten Teil der nicht flüchtigen Datenträger definierten ersten logischen Adressen in die physikalischen Adressen für die nicht flüchtigen Datenträger anhand der zweiten Daten.
DE112018005869.7T 2017-11-16 2018-11-06 Strukturanpassung einer namensraumzuordnung in nicht flüchtigen speichervorrichtungen Pending DE112018005869T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/814,934 2017-11-16
US15/814,934 US10678703B2 (en) 2017-11-16 2017-11-16 Namespace mapping structual adjustment in non-volatile memory devices
PCT/US2018/059377 WO2019099238A1 (en) 2017-11-16 2018-11-06 Namespace mapping structural adjustment in non-volatile memory devices

Publications (1)

Publication Number Publication Date
DE112018005869T5 true DE112018005869T5 (de) 2020-10-29

Family

ID=66432046

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018005869.7T Pending DE112018005869T5 (de) 2017-11-16 2018-11-06 Strukturanpassung einer namensraumzuordnung in nicht flüchtigen speichervorrichtungen

Country Status (4)

Country Link
US (4) US10678703B2 (de)
CN (1) CN111356990A (de)
DE (1) DE112018005869T5 (de)
WO (1) WO2019099238A1 (de)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109656833B (zh) * 2017-10-12 2022-11-11 慧荣科技股份有限公司 数据储存装置
US10503404B2 (en) 2017-10-23 2019-12-10 Micron Technology, Inc. Namespace management in non-volatile memory devices
US10642488B2 (en) 2017-10-23 2020-05-05 Micron Technology, Inc. Namespace size adjustment in non-volatile memory devices
US10437476B2 (en) 2017-10-23 2019-10-08 Micron Technology, Inc. Namespaces allocation in non-volatile memory devices
US10223254B1 (en) 2017-11-16 2019-03-05 Micron Technology, Inc. Namespace change propagation in non-volatile memory devices
US10678703B2 (en) 2017-11-16 2020-06-09 Micron Technology, Inc. Namespace mapping structual adjustment in non-volatile memory devices
US10915440B2 (en) 2017-11-16 2021-02-09 Micron Technology, Inc. Namespace mapping optimization in non-volatile memory devices
US11580034B2 (en) 2017-11-16 2023-02-14 Micron Technology, Inc. Namespace encryption in non-volatile memory devices
US10552145B2 (en) * 2017-12-12 2020-02-04 Cypress Semiconductor Corporation Memory devices, systems, and methods for updating firmware with single memory device
US10691592B2 (en) * 2018-10-30 2020-06-23 Micron Technology, Inc. Error-checking in namespaces on storage devices using a namespace table and metadata
US11494311B2 (en) 2019-09-17 2022-11-08 Micron Technology, Inc. Page table hooks to memory types
US11269780B2 (en) 2019-09-17 2022-03-08 Micron Technology, Inc. Mapping non-typed memory access to typed memory access
US11650742B2 (en) 2019-09-17 2023-05-16 Micron Technology, Inc. Accessing stored metadata to identify memory devices in which data is stored
US10963396B1 (en) 2019-09-17 2021-03-30 Micron Technology, Inc. Memory system for binding data to a memory namespace
US11797433B2 (en) 2019-12-20 2023-10-24 Sk Hynix Nand Product Solutions Corp. Zoned namespace with zone grouping
KR20210081088A (ko) * 2019-12-23 2021-07-01 에스케이하이닉스 주식회사 메모리 컨트롤러를 포함하는 스토리지 장치
US11249988B2 (en) 2020-05-20 2022-02-15 Snowflake Inc. Account-level namespaces for database platforms
US11501010B2 (en) * 2020-05-20 2022-11-15 Snowflake Inc. Application-provisioning framework for database platforms
US11593354B2 (en) 2020-05-20 2023-02-28 Snowflake Inc. Namespace-based system-user access of database platforms
US11675695B2 (en) * 2020-06-29 2023-06-13 Micron Technology, Inc. Namespace management for memory sub-systems
US11262923B2 (en) * 2020-07-08 2022-03-01 Samsung Electronics Co., Ltd. Method for managing namespaces in a storage device using an over-provisioning pool and storage device employing the same
US11467777B1 (en) * 2020-10-12 2022-10-11 iodyne, LLC Method and system for storing data in portable storage devices
KR20220049329A (ko) * 2020-10-14 2022-04-21 삼성전자주식회사 스토리지 컨트롤러, 스토리지 장치, 및 스토리지 장치의 동작 방법
US11656778B2 (en) * 2021-08-17 2023-05-23 Micron Technology, Inc. Selection of block size for namespace management in non-volatile memory devices

Family Cites Families (82)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH05165715A (ja) 1991-12-12 1993-07-02 Nec Corp 情報処理装置
US6529921B1 (en) 1999-06-29 2003-03-04 Microsoft Corporation Dynamic synchronization of tables
TWI240861B (en) * 2002-01-11 2005-10-01 Integrated Circuit Solution In Data access method and architecture of flash memory
PL351779A1 (en) 2002-01-18 2003-07-28 Advanced Digital Broadcast Ltd Apparatus for storing data and method of subdividing te data storage area
US7058768B2 (en) 2002-04-17 2006-06-06 Microsoft Corporation Memory isolation through address translation data edit control
US7181588B2 (en) * 2003-05-22 2007-02-20 International Business Machines Corporation Computer apparatus and method for autonomic adjustment of block transfer size
US7509473B2 (en) * 2003-08-27 2009-03-24 Adaptec, Inc. Segmented storage system mapping
WO2005094281A2 (en) 2004-03-25 2005-10-13 Riverstone Networks, Inc. Device-level address translation within a programmable non-volatile memory device
US8607016B2 (en) * 2004-07-21 2013-12-10 Sandisk Technologies Inc. FAT analysis for optimized sequential cluster management
US7769709B2 (en) 2004-09-09 2010-08-03 Microsoft Corporation Method, system, and apparatus for creating an archive routine for protecting data in a data protection system
US20080010449A1 (en) 2006-07-07 2008-01-10 Michael Holtzman Content Control System Using Certificate Chains
US8190919B2 (en) 2006-11-07 2012-05-29 Spansion Llc Multiple stakeholder secure memory partitioning and access control
US8489817B2 (en) 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
US8935302B2 (en) 2006-12-06 2015-01-13 Intelligent Intellectual Property Holdings 2 Llc Apparatus, system, and method for data block usage information synchronization for a non-volatile storage volume
US20090092252A1 (en) 2007-04-12 2009-04-09 Landon Curt Noll Method and System for Identifying and Managing Keys
US8862590B2 (en) 2007-06-29 2014-10-14 Microsoft Corporation Flexible namespace prioritization
US8498417B1 (en) 2007-12-27 2013-07-30 Emc Corporation Automation of coordination of encryption keys in a SAN based environment where an encryption engine, device management, and key management are not co-located
US20100318760A1 (en) 2008-01-30 2010-12-16 Hirokazu So Memory controller, nonvolatile storage device, and nonvolatile storage system
WO2009097586A1 (en) 2008-01-31 2009-08-06 Bea Systems, Inc. System and method for transactional cache
US8392361B2 (en) * 2008-08-11 2013-03-05 Vmware, Inc. Centralized management of virtual machines
US8650355B2 (en) 2008-10-15 2014-02-11 Seagate Technology Llc Non-volatile resistive sense memory on-chip cache
US8738621B2 (en) 2009-01-27 2014-05-27 EchoStar Technologies, L.L.C. Systems and methods for managing files on a storage device
KR20100115583A (ko) * 2009-04-20 2010-10-28 삼성전자주식회사 데이터 저장 시스템
US8478799B2 (en) 2009-06-26 2013-07-02 Simplivity Corporation Namespace file system accessing an object store
KR101769883B1 (ko) * 2009-09-09 2017-08-21 샌디스크 테크놀로지스 엘엘씨 저장부 할당 장치, 시스템, 및 방법
CN102576333B (zh) * 2009-10-05 2016-01-13 马维尔国际贸易有限公司 非易失性存储器中的数据高速缓存
US8533161B2 (en) 2009-10-30 2013-09-10 Hitachi Data Systems Corporation Fixed content storage within a partitioned content platform, with disposition service
US20120079229A1 (en) 2010-09-28 2012-03-29 Craig Jensen Data storage optimization for a virtual platform
US8996842B2 (en) 2010-12-09 2015-03-31 Seagate Technology Llc Memory stacks management
US9355031B2 (en) 2011-04-21 2016-05-31 International Business Machines Corporation Techniques for mapping device addresses to physical memory addresses
US9501392B1 (en) 2011-05-12 2016-11-22 Avago Technologies General Ip (Singapore) Pte. Ltd. Management of a non-volatile memory module
US9727570B2 (en) 2011-06-03 2017-08-08 Apple Inc. Mount-time unmapping of unused logical addresses in non-volatile memory systems
KR20120134919A (ko) 2011-06-03 2012-12-12 삼성전자주식회사 메모리 장치
US20130019057A1 (en) 2011-07-15 2013-01-17 Violin Memory, Inc. Flash disk array and controller
US9690694B2 (en) 2011-09-27 2017-06-27 Sandisk Technologies, Llc Apparatus, system, and method for an address translation layer
KR102015053B1 (ko) * 2013-02-20 2019-08-27 삼성전자주식회사 불휘발성 메모리 장치 및 그것의 데이터 처리 방법
US9003071B2 (en) 2013-03-13 2015-04-07 Futurewei Technologies, Inc. Namespace access control in NVM express PCIe NVM with SR-IOV
US9804960B2 (en) 2013-03-14 2017-10-31 Western Digital Technologies, Inc. Overprovision capacity in a data storage device
US9116904B2 (en) * 2013-03-14 2015-08-25 Microsoft Technology Licensing, Llc File system operation on multi-tiered volume
US10102144B2 (en) * 2013-04-16 2018-10-16 Sandisk Technologies Llc Systems, methods and interfaces for data virtualization
US9245140B2 (en) 2013-11-15 2016-01-26 Kabushiki Kaisha Toshiba Secure data encryption in shared storage using namespaces
US9430480B1 (en) 2013-12-31 2016-08-30 Emc Corporation Active-active metro-cluster scale-out for unified data path architecture
KR20150081635A (ko) 2014-01-06 2015-07-15 삼성전자주식회사 불휘발성 반도체 메모리를 포함하는 저장 장치 및 그것의 관리 방법
US9875180B2 (en) * 2014-02-24 2018-01-23 Sandisk Technologies Llc Systems and methods for managing storage compression operations
US9495478B2 (en) 2014-03-31 2016-11-15 Amazon Technologies, Inc. Namespace management in distributed storage systems
US9294567B2 (en) 2014-05-02 2016-03-22 Cavium, Inc. Systems and methods for enabling access to extensible storage devices over a network as local storage via NVME controller
KR20160027805A (ko) * 2014-09-02 2016-03-10 삼성전자주식회사 비휘발성 메모리 장치를 위한 가비지 컬렉션 방법
US10102118B2 (en) * 2014-10-30 2018-10-16 Toshiba Memory Corporation Memory system and non-transitory computer readable recording medium
US20160210241A1 (en) 2015-01-21 2016-07-21 HGST Netherlands B.V. Reducing a size of a logical to physical data address translation table
US10268355B2 (en) 2015-01-30 2019-04-23 Target Brands Inc. User interface design system
US20160283125A1 (en) 2015-03-25 2016-09-29 Kabushiki Kaisha Toshiba Multi-streamed solid state drive
US20160342463A1 (en) 2015-05-20 2016-11-24 Kabushiki Kaisha Toshiba Data protection in a namespace
JP6403162B2 (ja) 2015-07-23 2018-10-10 東芝メモリ株式会社 メモリシステム
US9990304B2 (en) 2015-11-13 2018-06-05 Samsung Electronics Co., Ltd Multimode storage management system
US10291739B2 (en) * 2015-11-19 2019-05-14 Dell Products L.P. Systems and methods for tracking of cache sector status
US20170153843A1 (en) 2015-11-27 2017-06-01 Western Digital Technologies, Inc. Monitoring and managing elastic data storage devices
US9916110B2 (en) 2016-02-23 2018-03-13 Red Hat, Inc. Size adjustable volumes for containers
JP6523193B2 (ja) 2016-03-08 2019-05-29 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法
JP6448571B2 (ja) * 2016-03-08 2019-01-09 東芝メモリ株式会社 ストレージシステム、情報処理システムおよび制御方法
US20170344430A1 (en) * 2016-05-24 2017-11-30 Intel Corporation Method and apparatus for data checkpointing and restoration in a storage device
US10402092B2 (en) 2016-06-01 2019-09-03 Western Digital Technologies, Inc. Resizing namespaces for storage devices
KR102523377B1 (ko) 2016-07-15 2023-04-20 삼성디스플레이 주식회사 유기 발광 표시 장치 및 이를 포함하는 두부 장착 표시 시스템
US9921956B2 (en) * 2016-07-20 2018-03-20 Sandisk Technologies Llc System and method for tracking block level mapping overhead in a non-volatile memory
JP6524039B2 (ja) * 2016-09-23 2019-06-05 東芝メモリ株式会社 メモリシステム及び制御方法
JP6553566B2 (ja) * 2016-09-23 2019-07-31 東芝メモリ株式会社 メモリシステムおよび制御方法
US10176116B2 (en) * 2016-09-28 2019-01-08 Intel Corporation Computer product, method, and system to provide discovery services to discover target storage resources and register a configuration of virtual target storage resources mapping to the target storage resources and an access control list of host nodes allowed to access the virtual target storage resources
KR20180047402A (ko) 2016-10-31 2018-05-10 삼성전자주식회사 멀티 네임스페이스를 관리하는 스토리지 장치 및 상기 스토리지 장치의 동작 방법
TWI602074B (zh) * 2016-12-29 2017-10-11 慧榮科技股份有限公司 建立多重命名空間方法與存取多重命名空間的資料的方法
US20180239697A1 (en) * 2017-02-22 2018-08-23 CNEXLABS, Inc. a Delaware Corporation Method and apparatus for providing multi-namespace using mapping memory
US10866732B2 (en) * 2017-03-10 2020-12-15 Toshiba Memory Corporation Namespace re-sizing
US20180260319A1 (en) 2017-03-10 2018-09-13 Toshiba Memory Corporation Writing ssd system data
US10296454B2 (en) 2017-03-14 2019-05-21 Vmware, Inc. Granular unmapping with variable addressing in a data store
US20180275871A1 (en) * 2017-03-22 2018-09-27 Intel Corporation Simulation of a plurality of storage devices from a single storage device coupled to a computational device
US10459636B2 (en) 2017-03-24 2019-10-29 Sandisk Technologies Llc System and method for managing data in non-volatile memory systems having multiple mapping layers
US10503404B2 (en) 2017-10-23 2019-12-10 Micron Technology, Inc. Namespace management in non-volatile memory devices
US10437476B2 (en) 2017-10-23 2019-10-08 Micron Technology, Inc. Namespaces allocation in non-volatile memory devices
US10642488B2 (en) 2017-10-23 2020-05-05 Micron Technology, Inc. Namespace size adjustment in non-volatile memory devices
KR102411290B1 (ko) 2017-10-24 2022-06-22 삼성전자주식회사 선택적으로 퍼지 동작을 수행하도록 구성되는 호스트 장치 및 스토리지 장치를 포함하는 스토리지 시스템
US10678703B2 (en) 2017-11-16 2020-06-09 Micron Technology, Inc. Namespace mapping structual adjustment in non-volatile memory devices
US10223254B1 (en) 2017-11-16 2019-03-05 Micron Technology, Inc. Namespace change propagation in non-volatile memory devices
US11580034B2 (en) 2017-11-16 2023-02-14 Micron Technology, Inc. Namespace encryption in non-volatile memory devices
US10915440B2 (en) 2017-11-16 2021-02-09 Micron Technology, Inc. Namespace mapping optimization in non-volatile memory devices

Also Published As

Publication number Publication date
US11983119B2 (en) 2024-05-14
US20240296127A1 (en) 2024-09-05
US20190146927A1 (en) 2019-05-16
WO2019099238A1 (en) 2019-05-23
US20200278933A1 (en) 2020-09-03
US10678703B2 (en) 2020-06-09
CN111356990A (zh) 2020-06-30
US20220129387A1 (en) 2022-04-28
US11249922B2 (en) 2022-02-15

Similar Documents

Publication Publication Date Title
DE112018005869T5 (de) Strukturanpassung einer namensraumzuordnung in nicht flüchtigen speichervorrichtungen
DE112011102487B4 (de) Zuordnen von logischen zu physischen Adressen in Halbleiterspeichereinheiten aufweisenden Speichersystemen
DE112016001075B4 (de) Verteiltes speichern und abrufen von datensätzen
US10915440B2 (en) Namespace mapping optimization in non-volatile memory devices
DE112014000254B4 (de) Mehrstufiges Zwischenspeichern und Migrieren in unterschiedlichen Granularitäten
DE102019132371A1 (de) Zuordnungsverwaltung logisch zu physisch unter Verwendung von nichtflüchtigem Speicher
DE102020106971A1 (de) Datenschreibverwaltung im nichtflüchtigen speicher
DE112017005868T5 (de) Verwaltung von e/a-abläufen für datenobjekte in einem speichersystem
DE102012218269B4 (de) Schnittstelle zur Verwaltung von Datenverschiebung in einem Speichersystem mit thin provisioning
DE112015004536T5 (de) Hardware-Automatisierung für Speicherverwaltung
DE112018003524T5 (de) Dynamische datenverlagerung unter verwendung von speicherbänken auf cloud-grundlage
DE102013215009A1 (de) Verfahren und System zur Optimierung der Datenübertragung
DE102017118341B4 (de) Neuaufteilen von Daten in einem verteilten Computersystem
DE112010003788T5 (de) Datenspeicherung
DE202010017613U1 (de) Datenspeichervorrichtung mit host-gesteuerter Speicherbereinigung
DE202010017665U1 (de) Datenverteilung bei einer Datenspeichervorrichtung mit Flash-Speicherchips
DE112013006565T5 (de) Speichervorrichtung
DE102006003261A1 (de) Speichersystem und Verfahren zur Datenzusammenführung
DE102006005877A1 (de) Adresszuordnungstabelle und Verfahren zum Erzeugen einer Adresszuordnungstabelle
DE112020003290B4 (de) Datenplatzierung in einer schreib-cache-architektur, die eine lesehitze-datenaufteilung unterstützt
DE112012002452T5 (de) Anpassungsfähiges Zwischenspeichern von Datensätzen für Halbleiterplatten
DE112013006646B4 (de) Computer, System und computerlesbares Ablagemedium zum Identifizieren von Arbeitslast und Dimensionierung von Puffern zum Zweck der Volumenreplikation
DE112018006769T5 (de) Erweiterte zwischenspeicherzuweisung basierend auf virtuellen knotenressourcen
DE102013205571B4 (de) Verfahren, Computerprogrammprodukt und Vorrichtung zum Migrieren von Datenträgern mit schlanker Speicherzuweisung in mehrschichtigen Speicherarchitekturen
DE112017005782T5 (de) Warteschlange für Speichervorgänge

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: PROCK, THOMAS, DR., GB