DE102012216034A1 - Direkte speicheradressierung for solid-state-laufwerke - Google Patents

Direkte speicheradressierung for solid-state-laufwerke Download PDF

Info

Publication number
DE102012216034A1
DE102012216034A1 DE102012216034A DE102012216034A DE102012216034A1 DE 102012216034 A1 DE102012216034 A1 DE 102012216034A1 DE 102012216034 A DE102012216034 A DE 102012216034A DE 102012216034 A DE102012216034 A DE 102012216034A DE 102012216034 A1 DE102012216034 A1 DE 102012216034A1
Authority
DE
Germany
Prior art keywords
memory
buffer
controller
address
memory buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
DE102012216034A
Other languages
English (en)
Other versions
DE102012216034A8 (de
DE102012216034B4 (de
Inventor
Lee D. Cleveland
Andrew D. Walls
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102012216034A1 publication Critical patent/DE102012216034A1/de
Publication of DE102012216034A8 publication Critical patent/DE102012216034A8/de
Application granted granted Critical
Publication of DE102012216034B4 publication Critical patent/DE102012216034B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0689Disk arrays, e.g. RAID, JBOD
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06F3/0688Non-volatile semiconductor memory arrays
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

Es wird eine Speichereinheit für direkten Speicherzugriff bereitgestellt. Ein Controller der Speichereinheit führt eine Abbildung eines Fensters von Speicheradressen auf einen logischen Blockadressierungs-(LBA-)Bereich der Speichereinheit durch. Als Reaktion auf das Empfangen einer Schreibanforderung von einem Host-Computer, die eine Schreibadresse innerhalb des Fensters von Speicheradressen festlegt, initialisiert der Controller einen ersten Speicherpuffer in der Speichereinheit und weist dem ersten Speicherpuffer einen ersten Adressbereich innerhalb des Fensters von Speicheradressen zu, so dass sich die Schreibadresse der Anforderung innerhalb des ersten Adressbereichs befindet. Der Controller schreibt beruhend auf der Schreibadresse in den ersten Speicherpuffer. Als Reaktion darauf, dass der Puffer voll ist, speichert der Controller Inhalte des ersten Speicherpuffers persistent in der Speichereinheit unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung.

Description

  • HINTERGRUND
  • Die vorliegende Erfindung betrifft allgemein eine verbesserte Datenverarbeitungsvorrichtung und ein Verfahren und insbesondere Mechanismen für die direkte Speicheradressierung von Solid-State-Speichereinheiten.
  • Bei einem Solid-State-Laufwerk (SSD, solid-state drive) handelt es sich um eine Datenspeichereinheit, die Halbleiterspeicher zum Speichern von permanenten Daten mit der Absicht verwendet, Zugriff auf dieselbe Weise wie auf ein herkömmliches Block-E/A-Festplattenlaufwerk bereitzustellen. SSDs unterscheiden sich von herkömmlichen Festplattenlaufwerken (HDDs, hard disk drives), bei denen es sich um elektromechanische Einheiten handelt, die sich drehende Platten und bewegliche Lese/Schreib-Köpfe enthalten. Im Gegensatz dazu verwenden SSDs Mikrochips, die Daten in nichtflüchtigen Speicherchips aufbewahren und keinerlei bewegliche Teile enthalten. Im Vergleich zu elektromechanischen HDDs sind SSDs üblicherweise weniger anfällig gegenüber physischen Erschütterungen, sie sind leiser und weisen eine geringere Zugriffs- sowie Latenzzeit auf. Viele SSDs verwenden jedoch dieselbe Schnittstelle wie Festplattenlaufwerke, zum Beispiel Serial-Attached SCSI (SAS), Serial Advanced Technology Attachment (SATA) sowie Fibre Channel, wodurch sie eine gleichzeitige Nutzung von HDDs und SSDs in demselben Gehäuse ermöglichen und es Anwendungen gestatten, nahtlos voneinander zu profitieren. Die Verwendung von für HDDs entwickelten Schnittstellen führt zu zusätzlicher Latenzzeit aus mehreren Quellen. Erstens gibt es Verzögerungen in der SAN-Struktur sowie Verzögerungen durch den externen Speichercontroller auf Grund von Verzeichnissuchen o. ä., wenn sich die SSD in dem SAN befindet. Für sich in der PCI-Express-Verbindung befindliche SSDs ist die nennenswerteste Form von Latenzzeit eigentlich die Software-Latenzzeit beim Durchlaufen des Software-Treibers und dem anschließenden Warten darauf, dass der DMA beendet wird und der Beendigungsstatus verarbeitet wird.
  • Manche SSDs können an Peripheral Component Interconnect Express (PCIe) Schnittstellen angeschlossen sein. Hierbei handelt es sich um eine wirkungsvolle Weise zum Vermindern der Latenzzeit. Da in SSDs verwendete nichtflüchtige Speicher, d. h. Flash-Speicher, blockorientiert sind und Löschvorgänge erfordern, bevor auf sie geschrieben werden kann, wenden Software-Treiber zum Schreiben und Lesen von Daten HDD-Zugriffsverfahren an. Dies geht mit dem Aufbauen einer Streuungsliste (scatter/gather list) und dem Senden von Steuerblöcken an die PCIe-Karte einher, um der SSD mitzuteilen, wo Daten abzurufen sind, und danach muss der Beendigungsstatus darüber, dass der Vorgang beendet ist, an den Treiber gesendet werden. Dieses Schnittstellenverfahren führt zu einer erheblichen zusätzlichen Latenzzeit durch das Aufbauen der Streuungslisten, das Senden des Befehls an die Speichereinheit, das Warten auf das Beenden des DMA und schließlich auf den Beendigungsstatus.
  • ZUSAMMENFASSUNG
  • In einer veranschaulichenden Ausführungsform wird ein Verfahren für einen direkten Speicherzugriff in einer Speichereinheit bereitgestellt. Das Verfahren umfasst das Durchführen einer Abbildung eines Fensters von Speicheradressen auf einen logischen Blockadressierungs-(LBA-)Bereich der Speichereinheit und als Reaktion auf das Empfangen einer Schreibanforderung von einem Host-Computer, die eine Schreibadresse innerhalb des Fensters von Speicheradressen festlegt, das Initialisieren eines ersten Speicherpuffers in der Speichereinheit. Das Verfahren umfasst ferner das Zuweisen eines ersten Adressbereichs innerhalb des Fensters von Speicheradressen zu dem ersten Speicherpuffer, so dass die Schreibadresse der Anforderung innerhalb des ersten Adressbereichs liegt. Das Verfahren umfasst ferner das Schreiben in den ersten Speicherpuffer beruhend auf der Schreibadresse und als Reaktion darauf, dass der Puffer voll ist, das persistente Speichern von Inhalten des ersten Speicherpuffers in der Speichereinheit unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung.
  • In anderen veranschaulichenden Ausführungsformen wird ein Computerprogrammprodukt bereitgestellt, das ein durch einen Computer verwendbares bzw. auf einem Computer lesbares Medium aufweist, auf dem ein durch einen Computer lesbares Programm enthalten ist. Das durch einen Computer lesbare Programm veranlasst bei Ausführung auf einer Datenverarbeitungseinheit die Datenverarbeitungseinheit dazu, verschiedene der oben in Bezug auf die veranschaulichende Ausführungsform des Verfahrens umrissenen Arbeitsschritte und Kombinationen daraus durchzuführen.
  • Gemäß einer Ausführungsform ist das durch einen Computer lesbare Programm in einem durch einen Computer lesbaren Speichermedium in einem Datenverarbeitungssystem gespeichert, wobei das durch einen Computer lesbare Programm über ein Netzwerk von einem fernen Datenverarbeitungssystem heruntergeladen wurde.
  • Gemäß einer weiteren Ausführungsform ist das durch einen Computer lesbare Programm in einem durch einen Computer lesbaren Speichermedium in einem Server-Datenverarbeitungssystem gespeichert, wobei das durch einen Computer lesbare Programm über ein Netzwerk auf ein fernes Datenverarbeitungssystem zur Verwendung in einem durch einen Computer lesbaren Speichermedium mit dem fernen System heruntergeladen wurde.
  • In noch einer weiteren veranschaulichenden Ausführungsform wird ein Solid-State-Laufwerk bereitgestellt. Das Solid-State-Laufwerk weist eine Vielzahl von Speicherpuffern auf, einen Halbleiterspeicher und einen Controller. Der Controller ist so konfiguriert, dass er als Reaktion auf das Empfangen einer Anforderung eines Zugriffs auf Daten an einer Speicheradresse in dem Solid-State-Laufwerk von einer Software-Anwendung die Speicheradresse in eine logische Blockadressierungs-(LBA-)Adresse umwandelt und einen Zugriffsvorgang durchführt, um auf einen Halbleiterspeicher in dem Solid-State-Laufwerk unter Verwendung der LBA-Adresse zuzugreifen.
  • Das Solid-State-Laufwerk kann einen oder mehrere Controller und einen mit dem einen bzw. den mehreren Prozessoren verbundenen Speicher aufweisen. Der Speicher kann Anweisungen aufweisen, die bei Ausführung durch den einen oder die mehreren Prozessoren den einen bzw. die mehreren Prozessoren dazu veranlassen, verschiedene der oben in Bezug auf die veranschaulichende Ausführungsform des Verfahrens umrissenen Arbeitsschritte und Kombinationen daraus durchzuführen.
  • Diese und andere Merkmale und Vorteile der vorliegenden Erfindung werden in der folgenden ausführlichen Beschreibung der beispielhaften Ausführungsformen der vorliegenden Erfindung beschrieben bzw. werden einem Fachmann angesichts dieser Beschreibung ersichtlich.
  • KURZE BESCHREIBUNG DER VERSCHIEDENEN ANSICHTEN DER ZEICHNUNGEN
  • Die Erfindung sowie eine bevorzugte Anwendungsart und weitere Ziele und Vorteile dieser wird man jedoch am besten unter Bezugnahme auf die folgende ausführliche Beschreibung von veranschaulichenden Ausführungsformen verstehen, wenn man diese in Verbindung mit den beigefügten Zeichnungen liest. Es zeigen:
  • 1 ein Blockschaltbild eines beispielhaften Datenverarbeitungssystems, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können;
  • 2 ein Blockschaltbild, das die direkte Speicheradressierung für ein Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 3 einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum direkten Zugreifen auf Speicher in einem Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 4 einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum Initialisieren eines Puffers gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 5 einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum Freigeben eines Puffers gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 6 einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum persistenten Speichern von Daten aus einem Puffer in einem Solid-State-Speicher gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 7 einen Ablaufplan, der den Vorgang eines Controllers zum Umwandeln von Daten in logische Blockadressierung und das Schreiben der Blöcke in ein zum einheitenübergreifenden Lesen und Schreiben von Daten (Striping) konfiguriertes Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 8 einen Ablaufplan, der den Vorgang eines Controllers zum Speichern in einem Zusatzkartenpuffer (companion card buffer) gemäß einer veranschaulichenden Ausführungsform darstellt;
  • 9 einen Ablaufplan, der den Vorgang eines Controllers zum Bewältigen eines Leistungsereignisses gemäß einer veranschaulichenden Ausführungsform darstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Die veranschaulichenden Ausführungsformen stellen einen Mechanismus für die direkte Speicheradressierung für Solid-State-Laufwerke bereit. Der Mechanismus stellt eine Umwandlung von Speicheradressierung in Sektorenadressierung innerhalb eines Solid-State-Laufwerks bereit. Der Mechanismus initialisiert das Solid-State-Laufwerk mit einem Fenster von Adressen, auf die ein Host-Computer zugreifen kann. Der Host-Computer schreibt Datenblöcke direkt in das Fenster von Speicherzugriffen, wodurch er direkt auf das Solid-State-Laufwerk schreibt, anstatt Aufrufe an einen Treiber zu tätigen. Das Solid-State-Laufwerk enthält eine Vielzahl von Speicherpuffern. Der Mechanismus schreibt die von dem Host-Computer geschriebenen Daten in die Speicherpuffer, bildet den Speicheradressenbereich auf Sektoren in dem Solid-State-Laufwerk ab und schreibt die Daten auf das Solid-State-Laufwerk unter Verwendung von logischer Blockadressierung (LBA). Der Host-Computer kann mehrere aktive Threads gleichzeitig aufweisen. Das bedeutet, dass der Host-Computer in eine Adresse bei X schreiben kann, dann später Y adressieren kann und dann zurückkehren kann, um die nächste benachbarte Adresse nach X zu schreiben. Obwohl die Anzahl von Puffern keinen Einfluss auf diese Erfindung hat, weisen moderne symmetrische Multiprozessorsysteme mit logischen Partitionen häufig viele aktive Threads auf, und eine veranschaulichende Ausführungsform dieser Erfindung könnte 32 oder sogar 64 Puffer aufweisen, die jeweils an einer anderen Adresse durch den Host-Computer gestartet werden. Diese Solid-State-Platte kann eine Reihe von Formfaktoren annehmen, darunter die Formfaktoren von Festplattenlaufwerken, PCI-Express-Karten oder jede beliebige Anzahl von speziell angefertigten Formfaktoren mit PCI-Express, Fibre Channel, SAS, SATA, DDR3 oder jeder beliebigen Anzahl von Protokollen.
  • Die veranschaulichenden Ausführungsformen können in vielen verschiedenen Arten von Datenverarbeitungsumgebungen verwendet, darunter eine verteilte Datenverarbeitungsumgebung, eine einzelne Datenverarbeitungseinheit, ein Speichersystem, ein eingebettetes Computersystem o. ä. Um einen Kontext für die Beschreibung von spezifischen Elementen und Funktionalitäten der veranschaulichenden Ausführungsformen bereitzustellen, wird 1 nachfolgend als eine beispielhafte Umgebung bereitgestellt, in der Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. Man sollte sich bewusst sein, dass es sich bei 1 lediglich um ein Beispiel handelt, das keinerlei Einschränkungen in Bezug auf die Umgebungen, in denen Aspekte bzw. Ausführungsformen der vorliegenden Erfindung umgesetzt werden können, anführen oder mit sich bringen soll. Es können viele Abwandlungen an den abgebildeten Umgebungen vorgenommen werden, ohne von dem Gedanken und Umfang der vorliegenden Erfindung abzuweichen.
  • 1 zeigt ein Blockschaltbild eines beispielhaften Datenverarbeitungssystems, in dem Aspekte der veranschaulichenden Ausführungsformen umgesetzt werden können. In dem abgebildeten Beispiel setzt das Datenverarbeitungssystem 100 eine Hub-Architektur ein, die eine North Bridge und einen Speichercontroller-Hub (NB/MCH) 102 sowie eine South Bridge und einen Eingabe/Ausgabe-(E/A-)Controller-Hub (SB/ICH) 104 enthält. Die Verarbeitungseinheit 106, der Hauptspeicher 108 und der Grafikprozessor 110 sind mit dem NB/MCH 102 verbunden. Der Grafikprozessor 110 kann über einen beschleunigten Grafikanschluss (AGP, accelerated graphics port) mit dem NB/MCH 102 verbunden sein.
  • In dem abgebildeten Beispiel ist der lokale Netzwerk-(LAN-)Adapter 112 mit dem SB/ICH 104 verbunden. Der Audio-Adapter 116, der Tastatur- und Mausadapter 120, der Modem 122, der Nur-Lese-Speicher (ROM) 124, das Festplattenlaufwerk (HDD) 126, das CD-ROM-Laufwerk 130, der universelle serielle Bus (USB) und andere Datenübertragungsanschlüsse 132 sowie die PCI/PCIe-Einheiten 134 sind über den Bus 138 bzw. den Bus 140 mit dem SB/ICH 104 verbunden. PCI/PCIe-Einheiten können zum Beispiel Ethernet-Adapter, Zusatz-Einbaukarten sowie PC-Karten für Notebook-Computer beinhalten. PCI verwendet im Gegensatz zu PCIe eine Kartenbussteuereinheit. Bei dem ROM 124 kann es sich zum Beispiel um ein Flash Basic-Input/Output System (BIOS) handeln.
  • Das HDD 126 und das CD-ROM-Laufwerk 130 sind über den Bus 140 mit dem SB/ICH 104 verbunden. Das HDD 126 und das CD-ROM-Laufwerk 130 können zum Beispiel eine IDE-Schnittstelle (Festplatten-Schnittstelle – Integrated Drive Electronics) oder SATA-Schnittstelle (serielle Schnittstelle zwischen Prozessor und Festplatte – Serial Advanced Technology Attachment) verwenden. Die Super-E/A(SIO-)Einheit 136 kann mit dem SB/ICH 104 verbunden sein.
  • Auf der Verarbeitungseinheit 106 läuft ein Betriebssystem. Das Betriebssystem koordiniert und sorgt für die Steuerung verschiedener Komponenten innerhalb des Datenverarbeitungssystems 100 in 1. Bei einem Client-Computer kann es sich bei dem Betriebssystem um ein marktübliches Betriebssystem wie Microsoft Windows 7 (Microsoft und Windows sind Marken von Microsoft Corporation in den USA und/oder anderen Ländern) handeln. Ein objektorientiertes Programmiersystem wie das Java-Programmiersystem kann in Verbindung mit dem Betriebssystem laufen und stellt Aufrufe von auf dem Datenverarbeitungssystem 100 laufenden Java-Programmen oder -Anwendungen für das Betriebssystem bereit (Java ist eine Marke von Oracle und/oder ihren zugehörigen Unternehmen).
  • Als Server kann es sich bei dem Datenverarbeitungssystem 100 zum Beispiel um ein IBM® eServerTM System p® Computersystem handeln, welches das Betriebssystem Advanced Interactive Executive (AIX®) oder das LINUX-Betriebssystem ausführt (IBM, eServer, System p und AIX sind Marken von International Business Machines Corporation in den USA und/oder anderen Ländern, während LINUX eine eingetragene Marke von Linus Torvalds in den USA und/oder anderen Ländern ist). Bei dem Datenverarbeitungssystem 100 kann es sich um ein symmetrisches Multiprozessor-(SMP-)System handeln, das eine Vielzahl von Prozessoren in der Verarbeitungseinheit 106 enthält. Alternativ kann ein Einzelprozessorsystem eingesetzt werden.
  • Auf Speichereinheiten wie dem HDD 126 befinden sich Anweisungen für das Betriebssystem, das objektorientierte Programmiersystem sowie für Anwendungen bzw. Programme, die zur Ausführung durch die Verarbeitungseinheit 106 in den Hauptspeicher 108 geladen werden können.
  • Ein Bussystem wie der in 1 gezeigte Bus 138 bzw. Bus 140 kann aus einem oder mehreren Bussen bestehen. Natürlich kann das Bussystem unter Verwendung eines beliebigen Datenübertragungsnetzes bzw. einer Architektur ausgeführt sein, die eine Übertragung von Daten zwischen verschiedenen an das Netzwerk bzw. die Architektur angeschlossenen Komponenten oder Einheiten gewährleistet. Eine Datenübertragungseinheit wie der Modem 122 oder der Netzwerkadapter 112 aus 1 kann eine oder mehrere für das Senden und Empfangen von Daten verwendete Einheiten enthalten. Bei einem Speicher kann es sich zum Beispiel um den Hauptspeicher 108, den ROM 124 oder einen Cachespeicher wie dem sich in dem NB/MCH 102 in 1 befindlichen handeln.
  • Ein Fachmann wird verstehen, dass die in 1 abgebildete Hardware je nach Umsetzung variieren kann. Zusätzlich oder an Stelle der in der 1 abgebildeten Hardware können andere interne Hardware- oder Peripherie-Einheiten wie Flash-Speicher, gleichwertige nichtflüchtige Speicher bzw. optische Plattenlaufwerke und dergleichen verwendet werden. Das Datenverarbeitungssystem 100 kann die Form eines beliebigen von mehreren unterschiedlichen Datenverarbeitungssystemen annehmen, darunter Client-Datenverarbeitungseinheiten, Server-Datenverarbeitungseinheiten, ein Tablet-Computer, ein Laptop-Computer, ein Telefon oder eine andere Datenübertragungseinheit, ein elektronischer Assistent (PDA, personal digital assistant) o. ä. In einigen veranschaulichenden Beispielen kann es sich bei dem Datenverarbeitungssystem 100 zum Beispiel um eine tragbare Datenverarbeitungseinheit handeln, die allgemein mit Flash-Speichern konfiguriert ist, um einen nichtflüchtigen Speicher zur Speicherung von Betriebssystemdateien und/oder durch einen Benutzer erzeugten Daten bereitzustellen. Im Wesentlichen kann es sich bei dem Datenverarbeitungssystem 100 um jedes beliebige bekannte oder später entwickelte Datenverarbeitungssystem ohne bauliche Einschränkungen handeln. Bei einem wie unten in Bezug auf die veranschaulichenden Ausführungsformen beschriebenen Solid-State-Laufwerk kann es sich um die Platte 126 handeln, es kann mit den PCI/PCIe-Einheiten 134 verbunden sein, oder es kann zum Beispiel direkt mit dem Bus 138 verbunden sein.
  • 2 zeigt ein Blockschaltbild, das die direkte Speicheradressierung für ein Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt. Bei dem Solid-State-Laufwerk (SSD) 220 kann es sich um eine PCIe-Einheit innerhalb der PCI/PCIe-Einheiten 134 in 1 handeln, und die Anwendung 210 kann zum Beispiel auf der Verarbeitungseinheit 106 in 1 ausgeführt werden. Durch die Fähigkeit, Daten in das SSD 220 über PCIe zu schreiben, werden eine einfachere Schnittstelle ermöglicht und die Latenzzeit verringert. Insbesondere kann die Anwendung 210 auf das SSD 220 über direkte Speicheradressierung ohne Verwendung eines Einheitentreibers schreiben. Stattdessen schreibt die Anwendung 210 direkt in ein Fenster von Speicheradressen in dem SSD 220 und liest davon. In einer beispielhaften Ausführungsform weist das Fenster von Speicheradressen 32 GB an Speicherplatz auf. Das SSD 220 initialisiert eine Anfangs-LBA-Adresse, auf die der Controller 224 das Adressfenster abbildet. In einer beispielhaften Ausführungsform bildet der Controller 224 ein 32 GB großes Fenster auf eine Nummer der logischen Einheit (LUN, logical unit number) mit einem LBA-Bereich zwischen 0 und 32 GB/512-1 bzw. 64 MB-1 ab.
  • Das SSD 220 weist eine Vielzahl von Direktzugriffsspeicher-(RAM-)Puffern 222 auf. Bei diesen Puffern handelt es sich entweder um DRAM oder um SRAM. Sie können Teil einer anwendungsspezifischen integrierten Schaltung (ASIC) oder ein Speicher außerhalb der ASIC bzw. des FPGA sein. Diese Puffer 222 ermöglichen es, dass Schreibvorgänge mit RAM-Geschwindigkeit stattfinden, wonach die Anwendung 210 fertig ist. In einer beispielhaften Ausführungsform kann es sich bei den DRAM-Puffer 222 um Seitenspeicherpuffer mit 4 K handeln. Andere Ausführungsformen können 512 Byte große Sektorenpuffer umsetzen. Der Controller 224 behält die Übersicht über verfügbare Puffer in der freien Liste 232. Jedesmal, wenn der Controller 224 einen Puffer zur Verwendung initialisiert, entfernt der Controller 224 den Puffer von der freien Liste 232, bildet den Puffer auf einen Adressbereich innerhalb des Speicheradressraums des SSD 220 ab und setzt eine Zeit 234 für den Puffer fest. In einer beispielhaften Ausführungsform kann es sich bei den Puffern um dynamische Direktzugriffsspeicher (DRAM) handeln; die Aspekte der veranschaulichenden Ausführungsform würden jedoch gleichermaßen gut funktionieren, wenn es sich bei den Puffern um SRAM, einen neuen Phasenwechselspeicher, MRAM oder andere neue Technologien handeln würde, die vermarktet werden können.
  • Für die beste Funktionsweise erwartet das SSD 220, dass die Anwendung 210 ganze Zahlen mit 512 Byte großen Sektoren schreibt. Da die Cachezeilen kleiner als 512 Bytes sind, wird erwartet, dass ein Schreibvorgang in mehrere Cachezeilen-Schreibvorgänge aufgeteilt wird. Das SSD 220 nimmt so lange Schreibvorgänge weiter auf, bis ein Puffer voll ist oder eine gewisse programmatische Zeit abgelaufen ist. Diese Schreibvorgänge können mit anderen von der Anwendung geschriebenen Adressen verschachtelt sein, und auf diese Weise können mehrere Puffer parallel gefüllt werden. Sobald ein Puffer voll ist, wird er auf das nichtflüchtige Medium geschrieben, und er ist nun geleert, um andere Adressen aufzunehmen. Es ist auch der Fall, dass der Controller 224 in dem SSD 220 einen jedem Puffer zugehörigen Zeitgeber 234 initialisiert. Sobald ein Zeitgeber 234 abläuft oder ein Puffer voll ist, wandelt der Controller 224 Daten in den Puffern 222 in eine Reihe von Blöcken logischer Blockadressen (LBA) um. Der Controller 224 wandelt die in den LBA in dem Bereich in dem Flash-Speicher 226 zu schreibende Adresse um. Der Controller 224 würde zum Beispiel die Adresse 512M in dem Fenster in LBA 1M umwandeln. Der Controller 224 kann Puffer freigeben, wenn die Speicherpuffer 222 voll bzw. zumindest zu einem vorbestimmten Prozentsatz voll sind. Der Controller 224 gibt freigegebene Puffer an die freie Liste 232 zurück.
  • Sobald der LBA-Block angeordnet ist, verarbeitet der Controller 224 die Sektoren genau so, als würde er normale Festplattenlaufwerk-(HDD-)Zugriffsverfahren verwenden. Wenn die LUN zum Beispiel lediglich für einen Haufen Platten (JBOD, Just a Bunch of Disks) eingerichtet ist, würde der Controller die Daten einfach in die speziell vorgesehenen LBAs in dem Flash-Speicher 226 schreiben.
  • Wenn die LUN für eine redundante Anordnung unabhängiger Festplatten (RAID, Redundant Array of Independent Disks) 5 bzw. 6 eingerichtet ist, die Striping auf Blockebene mit auf alle zugehörigen Platten verteilten Paritätsdaten verwendet, und wenn die geschriebenen Daten weniger als ein einheitenübergreifend gespeicherter Datenblock (Stripe) sind, liest der Controller 224 die alten Daten sowie die alte Parität aus dem Flash-Speicher 226 aus, fügt die neuen Daten und die alten Daten zusammen und führt mit dem sich ergebenden Stripe eine XOR-Verknüpfung durch, um eine neue Parität zu ermitteln. Der Controller 224 schreibt dann den neuen Stripe mit der neuen Parität in den Flash-Speicher 226.
  • Aus Gründen der Leistungsfähigkeit ist es vorzuziehen, dass die Anwendung 210 auf Sektoren-(512-Byte-)Grenzen schreibt. Wenn die Adresse nicht an einer Sektorengrenze beginnt oder die Daten nicht an einer Sektorengrenze aufhören, liest der Controller 224 den alten Sektor aus dem Flash-Speicher 226 aus, fügt die neuen Daten und die alten Daten zusammen und schreibt die sich ergebenden Sektordaten in den Flash-Speicher 226.
  • Das SSD 220 ist in der Lage, mehrere Threads und Schreibvorgänge an unterschiedlichen Adressen zu verarbeiten. Für einen Lesevorgang wandelt der Controller 224 die Adresse lediglich in LBA um und greift dann gemäß den normalen HDD-Zugriffsverfahren auf den Flash-Speicher 226 zu. Hierdurch werden die Puffer auf ähnliche Weise wie bei Schreibvorgängen verwendet. Der Host-Prozessor führt einen Lesevorgang wahrscheinlich auf eine relativ kleine Cachegranularität wie eine Cachezeile aus. Da Lesevorgänge auf nichtflüchtige Medien lange Latenzzeiten aufweisen, liest der Controller 224 eine gesamte Seite (z. B. 4 KB) und speichert die Seite in einem Puffer. Wenn die Anwendung das Lesen der Seite anfordert, kann der erste Lesevorgang eine relativ lange Latenzzeit zum Füllen des Puffers benötigen, wobei aber nachfolgende Lesevorgänge aus dem Puffer bedient werden können. Sobald die Anwendung die gesamte Seite liest, wird dieser Teil des Puffers freigegeben, um einen anderen Schreib- bzw. Lesevorgang zu ermöglichen. Ähnlich wie bei Schreibvorgängen kann ein Zeitgeber verwendet werden, so dass die Daten ungültig gemacht werden und der Puffer für eine andere Verwendung freigegeben wird, wenn für eine bestimmte Zeit kein Zugriff erfolgt.
  • Im Falle eines Stromausfalls können in die Puffer geschriebene Daten je nach der zum Einsetzen der Puffer verwendeten Technologie verloren gehen. Wenn die Puffer zum Beispiel DRAM bzw. eDRAM bzw. SRAM sind, gehen die Daten verloren, sobald keine Spannung mehr anliegt. Deshalb erzeugt die Stromversorgung bei einem Stromausfall eine frühzeitige Systemabschaltwarnung (EPOW, early power off warning). Der Controller kann eine alternative Energiequelle wie eine Batterie oder eine Kondensatorbank aufweisen, die lange genug Strom für den Controller aufrechterhalten kann, um ein oder mehrere in der Industrie verfügbare Verfahren zum Speichern von wichtigen Daten bei Stromausfall anzuwenden. Dazu können zum Beispiel das Erstellen eines Speicherauszugs der Daten in einem batteriegestützten Schreibcache in dem SSD oder das Schreiben der Daten auf die permanenten Medien während des Aufrechterhaltens von Strom für den Controller durch die alternative Energiequelle zählen.
  • Ein Fachmann wird auch bemerken, dass in Puffern gespeicherte Schreibdaten verloren gehen, wenn die Karte ausfällt oder ein Software-Problem aufweist. Deshalb können Mechanismen zum Senden von Daten an einen Zusatzkartenpuffer durch das SSD hinzugefügt werden. Daten in der Zusatzkarte werden ungültig gemacht, wenn die Daten auf die dauerhaften Medien geschrieben werden. Einfacher kann auch ein Protokoll entwickelt werden, für das der Host-Computer keinen erfolgreichen Beendigungsstatus erhält, bis der Schreibvorgang vollständig verarbeitet ist, das heißt der gesamte Sektor bzw. die gesamte Seite. Der Host-Computer kann dafür zuständig sein, den Vorgang bei einem Ausfall auf eine ähnliche Weise erneut zu versuchen, wie es der Host-Computer unter Verwendung von Streuungsverfahren erneut versuchen würde, wenn ein SSD nicht auf einen Treiber reagiert.
  • Der Fachmann wird verstehen, dass die vorliegende Erfindung als System, Verfahren oder Computerprogrammprodukt ausgeführt werden kann. Entsprechend können Aspekte der vorliegenden Erfindung die Form einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (darunter Firmware, im Speicher befindliche Software, Mikro-Code, etc.) oder einer Software- und Hardware-Aspekte kombinierenden Ausführungsform annehmen, die hierin alle allgemein als „Schaltkreis”, „Modul” oder „System” bezeichnet sein können. Des Weiteren können Aspekte der vorliegenden Erfindung die Form eines auf einem oder mehreren beliebigen durch einen Computer lesbaren Medien enthaltenen Computerprogrammprodukts annehmen, die durch einen Computer verwendbaren Programmcode enthalten.
  • Es kann jede Kombination aus einem oder mehreren durch einen Computer lesbaren Medien verwendet werden. Bei dem durch einen Computer lesbaren Medium kann es sich um ein durch einen Computer lesbares Signalmedium oder ein durch einen Computer lesbares Speichermedium handeln. Bei einem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung oder Einheit oder jede geeignete Kombination daraus handeln, ohne darauf beschränkt zu sein. Zu konkreteren Beispielen (eine nicht erschöpfende Liste) des durch einen Computer lesbaren Speichermediums gehören die folgenden: eine elektrische Verbindung mit einer oder mehreren Leitungen, eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein Lichtwellenleiter, ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CDROM), eine optische Speichereinheit, eine magnetische Speichereinheit oder jede geeignete Kombination daraus. In dem Kontext dieses Dokuments kann es sich bei einem durch einen Computer lesbaren Speichermedium um jedes beliebige physische Medium handeln, das ein Programm enthalten bzw. speichern kann, das von oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Ausführung von Anweisungen verwendet wird.
  • Ein durch einen Computer lesbares Signalmedium kann ein weitergeleitetes Datensignal mit darin enthaltenem durch einen Computer lesbarem Programmcode beinhalten, zum Beispiel in einem Basisband oder als Teil einer Trägerwelle. Ein derartiges weitergeleitetes Signal kann eine beliebige Form aus einer Vielfalt an Formen annehmen, darunter elektromagnetische, optische bzw. jede geeignete Kombination daraus, jedoch nicht darauf beschränkt. Bei einem durch einen Computer lesbaren Signalmedium kann es sich um ein beliebiges durch einen Computer lesbares Medium handeln, das kein durch einen Computer lesbares Speichermedium ist und das ein Programm zur Verwendung durch oder in Verbindung mit einem System, einer Vorrichtung oder Einheit zum Ausführen von Anweisungen übertragen, weiterleiten bzw. transportieren kann.
  • Auf einem durch einen Computer lesbaren Medium enthaltener Computercode kann unter Verwendung eines beliebigen geeigneten Mediums übertragen werden, darunter drahtlos, drahtgebunden, Lichtwellenleiter-Kabel, Hochfrequenz (HF) usw. oder jede geeignete Kombination daraus, jedoch nicht darauf beschränkt.
  • Computerprogrammcode für das Ausführen von Arbeitsschritten für Aspekte der vorliegenden Erfindung kann in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie JavaTM, SmalltalkTM, C++ o. ä. sowie herkömmliche prozedurale Programmiersprachen wie die „C”-Programmiersprache oder ähnliche Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters).
  • Aspekte der vorliegenden Erfindung werden nachfolgend unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß den veranschaulichenden Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern durch Computerprogrammanweisungen ausgeführt werden können. Diese Computerprogrammanweisungen können dem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder festgelegten Funktionen/Schritte erzeugen.
  • Diese Computerprogrammanweisungen können auch auf einem durch einen Computer lesbaren Medium gespeichert sein, das einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung bzw. andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass die auf dem durch einen Computer lesbaren Medium gespeicherten Anweisungen ein Herstellungsprodukt herstellen, darunter Anweisungen, welche die in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder festgelegte Funktion/den Schritt umsetzen.
  • Die Computerprogrammanweisungen können auch auf einen Computer oder eine andere programmierbare Datenverarbeitungsvorrichtung bzw. andere Einheiten geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer, der anderen programmierbaren Vorrichtung bzw. der anderen Einheiten zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführten Anweisungen Verfahren zur Umsetzung der in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder festgelegten Funktionen/Schritte erzeugen.
  • 3 zeigt einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum direkten Zugreifen auf Speicher in einem Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt in Block 300, und der Controller initialisiert Puffer und bildet ein Fenster von Speicheradressen auf einen Bereich von logischen Blockadressierungs-(LBA-)Blöcken ab (Block 301). Der Host-Computer greift so auf das Fenster von Speicheradressen zu, wie er in Arbeitsspeicher liest und schreibt. Der Controller wandelt dann die Speicheradressen in LBA-Blöcke um und speichert im Hintergrund transparent für den Host-Computer die sich in den Puffern befindlichen Daten persistent in dem Speicher des Solid-State-Laufwerks (SSD). Der Controller listet alle verfügbaren Puffer in einer freien Liste auf.
  • Der Controller ermittelt, ob er von dem Host-Computer eine Schreibanforderung empfängt, die auf eine Speicheradresse innerhalb des Fensters von Speicheradressen zugreift (Block 302). Wenn der Controller eine Schreibanforderung empfängt, ermittelt der Controller, ob die Schreibanforderung auf eine Speicheradresse zugreift, die an eine Adresse in einem Puffer angrenzt (Block 303). Wenn die Schreibanforderung auf keine Speicheradresse zugreift, die an eine Adresse in einem Puffer angrenzt, initialisiert der Controller einen Puffer (Block 400). Der Vorgang des Initialisierens eines Puffers wird nachfolgend ausführlicher unter Bezugnahme auf 4 beschrieben.
  • Danach bzw. wenn die Schreibanforderung in Block 303 auf eine Speicheradresse zugreift, die an eine Adresse in einem Puffer angrenzt, schreibt der Controller beruhend auf der Speicheradresse der Schreibanforderung Daten in den Puffer (Block 304). Wie nachfolgend ausführlicher beschrieben wird, hat der Controller beim Initialisieren eines Puffers dem Puffer einen Speicheradressenbereich und einen Zeitgeber zugewiesen. Der Controller bedient die Schreibanforderung durch Schreiben der Schreibdaten in den Puffer gemäß dem Speicheradressenbereich.
  • Der Controller ermittelt dann, ob der Schreibvorgang abgeschlossen ist (Block 305). Wenn der Schreibvorgang nicht abgeschlossen ist, ermittelt der Controller, ob der Puffer voll bzw. zumindest zu einem vorbestimmten Prozentsatz voll ist (Block 306). Wenn der Puffer nicht voll ist, kehrt der Vorgang zu Block 304 zurück und fährt mit dem Schreiben in den Puffer fort. Wenn der Puffer in Block 306 voll ist, gibt der Controller den aktuellen Puffer frei (Block 500), und der Vorgang kehrt zu Block 400 zurück, um einen neuen Puffer zu initialisieren. Der Vorgang des Freigebens eines Puffers wird nachfolgend ausführlicher unter Bezugnahme auf 5 beschrieben. Wenn der Schreibvorgang in Block 305 abgeschlossen ist, startet der Controller den dem Puffer zugehörigen Zeitgeber (Block 307). In diesem Beispiel zeichnet der Zeitgeber den Zeitraum seit dem letzten Zugriff auf den Puffer auf. Danach fährt der Vorgang mit Block 315 fort, um zu ermitteln, ob ein einem Puffer zugehöriger Zeitgeber abläuft.
  • Wenn der Controller in Block 302 keine Schreibanforderung empfängt, ermittelt der Controller, ob er eine Leseanforderung empfängt, die auf eine Speicheradresse innerhalb des Fensters zugreift (Block 308). Wenn der Controller eine Leseanforderung empfängt, ermittelt der Controller, ob sich die Speicheradresse innerhalb eines dem Puffer zugehörigen Adressbereichs befindet (Block 309). Wenn die Speicheradresse keinem Puffer zugehörig ist, initialisiert der Controller einen Puffer (Block 400). Der Controller liest dann eine Seite aus dem SSD-Speicher unter Verwendung von logischer Blockadressierung gemäß der Abbildung (Block 310) und speichert die Seite in dem Puffer (Block 311).
  • Danach, oder wenn sich die Speicheradresse innerhalb des einem Puffer zugehörigen Adressbereichs befindet, gibt der Controller Daten aus dem Puffer aus (Block 312) und startet den dem Puffer zugehörigen Zeitgeber (Block 313). Der Controller ermittelt dann, ob der Lesezugriff das Lesen der ganzen Seite aus dem Puffer abschließt (Block 314). Wenn der Lesezugriff das Lesen der Seite abschließt, gibt der Controller den Puffer frei (Block 500). Danach, oder wenn der Lesezugriff das Lesen der ganzen Seite aus dem Puffer in Block 314 abschließt, fährt der Vorgang mit Block 315 fort, um zu ermitteln, ob ein einem Puffer zugehöriger Zeitgeber abläuft.
  • Als Reaktion darauf, dass der Controller in Block 308 keine Leseanforderung empfängt, ermittelt der Controller in Block 315, ob ein einem Puffer zugehöriger Zeitgeber abläuft. Wenn ein einem Puffer zugehöriger Zeitgeber abläuft, gibt der Controller den Puffer frei (Block 500). Danach, oder wenn der Controller in Block 315 ermittelt, dass kein einem Puffer zugehöriger Zeitgeber abläuft, kehrt der Vorgang zu Block 302 zurück, um zu ermitteln, ob der Controller eine Leseanforderung empfängt.
  • 4 zeigt einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum Initialisieren eines Puffers gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt in Block 400, und der Controller ermittelt, ob ein Puffer verfügbar ist (Block 401). Der Controller ermittelt durch Prüfen einer freien Liste, ob ein Puffer verfügbar ist. Wenn die freie Liste nicht leer ist, ist ein Puffer verfügbar, und der Controller entfernt einen Puffer aus der freien Liste (Block 402). Der Controller weist dann dem Puffer einen Speicheradressenbereich zu (Block 403) und setzt einen dem Puffer zugehörigen Zeitgeber (Block 404). Es können Zeitgeberwerte initialisiert werden, um zwischen dem Minimieren der Häufigkeit des Durchführens von Lesen-Ändern-Schreiben (read modify writes) bzw. mehrfachen Lesevorgängen zum Bedienen einer Anforderung von einem Host-Computer und dem Anhalten von Arbeitsschritten in dem Host-Computer beim Freigeben von Puffern zu optimieren. Danach endet der Vorgang in Block 405.
  • Wenn der Controller in Block 401 ermittelt, dass kein Puffer verfügbar ist, d. h., wenn die freie Liste leer ist, identifiziert der Controller einen am längsten ungenutzten (LRU, least recently used) Puffer (Block 406) und gibt den Puffer frei (Block 500). In dem abgebildeten Beispiel handelt es sich bei dem LRU-Puffer um den Puffer, dessen Zeitgeber sich am kürzesten vor dem Ablaufen befindet. Danach entfernt der Controller den Puffer aus der freien Liste (Block 402), weist dem Puffer einen Speicheradressenbereich (Block 403) zu und setzt einen dem Puffer zugehörigen Zeitgeber (Block 404). Danach endet der Vorgang in Block 405.
  • 5 zeigt einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum Freigeben eines Puffers gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt in Block 500, und der Controller speichert sich in dem Puffer befindliche Daten persistent in einem logischen Blockadressierungs-(LBA-)Bereich in dem Speicher des Solid-State-Laufwerks gemäß der Abbildung (Block 501). Der Controller macht dann die Daten in dem Puffer ungültig (Block 502), stellt den Puffer zurück in die freie Liste (Block 503) und setzt den Zeitgeber für den Puffer zurück (Block 504). Danach endet der Vorgang in Block 505.
  • 6 zeigt einen Ablaufplan, der den Vorgang eines Solid-State-Laufwerk-Controllers zum persistenten Speichern von Daten von einem Puffer in einem Solid-State-Speicher gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt, wenn der Controller in Block 600 einen Schreibvorgang empfängt, wobei der Controller beruhend auf der Abbildung ermittelt, ob der Schreibvorgang an einer Sektorengrenze beginnt (Block 601). Wenn der Controller beruhend auf der Abbildung ermittelt, dass der Schreibvorgang nicht an einer Sektoren- bzw. Seitengrenze beginnt, liest der Controller den Sektor bzw. die Seite von den permanenten Medien (Block 602) und führt die Daten in dem Puffer zusammen (Block 603). Der Controller fährt dann mit dem Schreiben in den Puffer fort (Block 604). Der Vorgang endet in Block 605, und der Controller gibt den Puffer wie oben in Bezug auf 3 beschrieben als Reaktion darauf frei, dass der Puffer voll ist bzw. der dem Puffer zugehörige Zeitgeber abläuft.
  • Wenn der Schreibvorgang an einer Sektorengrenze beginnt, schreibt der Controller Daten in einen Puffer (Block 605). Danach endet der Vorgang in Block 605, und der Controller gibt den Puffer wie oben in Bezug auf 3 beschrieben als Reaktion darauf frei, dass der Puffer voll ist bzw. der dem Puffer zugehörige Zeitgeber abläuft.
  • 7 zeigt einen Ablaufplan, der den Vorgang eines Controllers zum Umwandeln von Daten in logische Blockadressierung und das Schreiben der Blöcke in ein zum einheitenübergreifenden Lesen und Schreiben von Daten (Striping) konfiguriertes Solid-State-Laufwerk gemäß einer veranschaulichenden Ausführungsform darstellt. Die Puffer sind entweder durch den Ablauf eines Zeitgebers und Lesen-Ändern-Schreiben oder durch das Abschließen des Füllens bereit, geschrieben und dann an irgendeine Art von Schreibcache oder Verbindungsspeicher weitergeleitet zu werden, oder der Controller könnte die Puffer direkt verwenden. Der Vorgang beginnt in Block 700 für einen bestimmten Schreibvorgang in eine LUN, die für RAID 5 konfiguriert ist, und der Controller wandelt die Schreibadresse in eine LBA-Adresse um (Block 701). Der Controller ermittelt, ob die Daten weniger als ein Stripe sind (Block 702). Wenn in Block 702 die Daten weniger als ein Stripe sind, liest der Controller die alten Daten und die alte Parität aus dem SSD-Speicher aus (Block 703). Der Controller fügt die Daten mit dem alten Stripe zusammen (Block 704). Dann ermittelt der Controller eine neue Parität für den Stripe (Block 705) und schreibt die neuen Daten und die neue Parität in den LBA-Block in dem SSD-Speicher (Block 706), und der Vorgang endet in Block 707. Wenn in Block 702 die Daten nicht weniger als ein Stripe sind, ermittelt der Controller eine Parität für die Daten (Block 705) und schreibt die Daten und die Parität in den LBA-Block in dem SSD-Speicher (Block 706), und der Vorgang endet in Block 707.
  • Es ist ersichtlich, dass sich diese Erfindung auf andere Arten von RAID wie RAID 6 mit Reed-Solomon-Codes oder RAID 10 oder jeden beliebigen RAID-Code erstrecken kann. Tatsächlich werden die Daten, sobald die Puffer voll sind, an einen Schreibcache oder einen anderen Zwischenspeicherungsbereich gesendet und genauso wie Daten verarbeitet, auf die über normale Streuungszugriffsverfahren zugegriffen wird.
  • 8 zeigt einen Ablaufplan, der den Vorgang eines Controllers zum Speichern in einem Zusatzkartenpuffer gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt in Block 800, und der Controller ermittelt, ob er eine Schreibanforderung von einer Software-Anwendung empfängt (Block 801). Wenn der Controller eine Schreibanforderung empfängt, speichert der Controller die Schreibdaten in einem oder mehreren Speicherpuffern (Block 802). Wie oben beschrieben wurde, besteht das Risiko eines Datenverlusts, falls der Controller auf Grund eines Stromausfalls oder Software-Problems ausfallen sollte, da der Controller Schreibdaten in flüchtigen Speicherpuffern speichert. Folglich speichert der Controller eine Kopie der Daten in den Puffern einer Zusatzkarte bzw. eines Controllers (Block 803).
  • Danach bzw. infolge einer Feststellung in Block 801, dass der Controller keine Schreibanforderung empfängt, ermittelt der Controller, ob die Schreibdaten persistent in einem nichtflüchtigen Speicher gespeichert sind (Block 804). Wenn der Controller ermittelt, dass die Schreibdaten nicht persistent gespeichert sind, kehrt der Vorgang zu Block 801 zurück, um zu ermitteln, ob der Controller eine andere Schreibanforderung empfängt. Wenn der Controller in Block 804 ermittelt, dass die Schreibdaten persistent gespeichert sind, macht der Controller die Kopie in der Zusatzkarte ungültig (Block 805), und der Vorgang endet in Block 806.
  • 9 zeigt einen Ablaufplan, der den Vorgang eines Controllers zum Bewältigen eines Leistungsereignisses gemäß einer veranschaulichenden Ausführungsform darstellt. Der Vorgang beginnt in Block 900, und der Controller ermittelt, ob eine frühzeitige Systemabschaltwarnung (EPOW) empfangen wird (Block 901). Eine frühzeitige Systemabschaltwarnung kann zum Beispiel von einer Stromversorgung als Reaktion auf das Erkennen eines möglichen Stromausfalls ausgegeben werden. Wenn der Controller keine EPOW empfängt, kehrt der Vorgang zu Block 901 zurück, bis eine EPOW empfangen wird. Wenn der Controller in Block 901 eine EPOW empfängt, erstellt der Controller einen Speicherauszug der Schreibdaten von dem Pufferspeicher in einem batteriegestützten Schreibcache bzw. einem permanenten Speicher (Block 902). Danach endet der Vorgang in Block 903.
  • Die Ablaufpläne und die Blockschaltbilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen der Systeme, Verfahren und Computerprogrammprodukte gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern ein Modul, ein Segment oder einen Teil eines Codes darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. Es sei auch angemerkt, dass in einigen alternativen Ausführungen die in dem Block angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden können. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder durch Kombinationen aus Spezial-Hardware und Computeranweisungen.
  • Somit stellen die veranschaulichenden Ausführungsformen einen Mechanismus für die direkte Speicheradressierung für Solid-State-Laufwerke bereit. Der Mechanismus stellt eine Umwandlung von Speicheradressierung in Sektorenadressierung innerhalb eines Solid-State-Laufwerks bereit. Der Mechanismus initialisiert das Solid-State-Laufwerk mit einem Fenster von Adressen, auf die eine Software zugreifen kann. Die Software schreibt Datenblöcke direkt in das Fenster von Speicherzugriffen, wodurch sie direkt auf das Solid-State-Laufwerk schreibt, ohne einen Einheitentreiber zu benutzen. Das Solid-State-Laufwerk enthält eine Vielzahl von Speicherpuffern. Der Mechanismus schreibt die von der Software geschriebenen Blöcke in die Speicherpuffer, wandelt die Blöcke in Sektoren in dem Solid-State-Laufwerk um und schreibt die Sektoren auf das Solid-State-Laufwerk.
  • Wie oben angemerkt, sollte man sich darüber bewusst sein, dass die veranschaulichenden Ausführungsformen als vollständige Hardware-Ausführungsform, als vollständige Software-Ausführungsform oder als Ausführungsform, die sowohl Hardware- als auch Software-Elemente enthält, ausgeführt werden können. In einer beispielhaften Ausführungsform sind die Mechanismen der veranschaulichenden Ausführungsformen als Software oder Programmcode realisiert, darunter Firmware, im Speicher befindliche Software, Mikrocode usw., aber nicht darauf beschränkt.
  • Ein zur Speicherung und/oder Ausführung von Programmcode geeignetes Datenverarbeitungssystem enthält zumindest einen Prozessor, der direkt oder indirekt über einen Systembus mit Speicherelementen verbunden ist. Zu den Speicherelementen können ein lokaler Speicher, der während der eigentlichen Ausführung des Programmcodes eingesetzt wird, Massenspeicher sowie Cachespeicher gehören, die eine vorübergehende Speicherung von zumindest etwas Programmcode bereitstellen, um die Häufigkeit zu verringern, mit der Code während der Ausführung von dem Massenspeicher abgerufen werden muss.
  • Eingabe/Ausgabe- bzw. E/A-Einheiten (darunter Tastaturen, Anzeigen, Zeigegeräte usw., jedoch nicht darauf beschränkt) können entweder direkt oder über mitbeteiligte E/A-Steuereinheiten mit dem System verbunden werden. Es können auch Netzwerkadapter mit dem System verbunden werden, um es dem Datenverarbeitungssystem zu ermöglichen, über mitbeteiligte private oder öffentliche Netzwerke mit anderen Datenverarbeitungssystemen oder entfernt angeordneten Druckern oder Speichervorrichtungen verbunden zu werden. Modems, Kabelmodems sowie Ethernet-Karten sind nur einige wenige der momentan verfügbaren Arten von Netzwerkadaptern.
  • Die Beschreibung der vorliegenden Erfindung wurde zum Zwecke der Veranschaulichung und Beschreibung aufgeführt und soll nicht gesamthaft stehen für bzw. begrenzt sein auf die Erfindung in der offengelegten Form. Für einen Fachmann werden viele Abänderungen und Abweichungen ersichtlich sein. Die Ausführungsform wurde gewählt und beschrieben, um die Grundgedanken der Erfindung und die praktische Anwendung bestmöglich zu erläutern und um es anderen Fachleuten zu ermöglichen, die Erfindung für verschiedene Ausführungsformen mit verschiedenen Abänderungen, die für eine bestimmte vorgesehene Verwendung geeignet sind, zu verstehen.

Claims (14)

  1. Computerprogrammprodukt, das ein durch einen Computer lesbares Medium aufweist, auf dem ein durch einen Computer lesbares Programm gespeichert ist, wobei das durch einen Computer lesbare Programm bei Ausführung auf einem Controller in einer Speichereinheit den Controller veranlasst: eine Abbildung eines Fensters von Speicheradressen auf einen logischen Blockadressierungs-(LBA-)Bereich der Speichereinheit durchzuführen; als Reaktion auf das Empfangen einer Schreibanforderung von einem Host-Computer, die eine Schreibadresse innerhalb des Fensters von Speicheradressen festlegt, einen ersten Speicherpuffer in der Speichereinheit initialisiert; einen ersten Adressbereich innerhalb des Fensters von Speicheradressen zu dem ersten Speicherpuffer zuweist, so dass die Schreibadresse der Anforderung innerhalb des ersten Adressbereichs liegt; beruhend auf der Schreibadresse in den ersten Speicherpuffer schreibt; und als Reaktion darauf, dass der Puffer voll ist, Inhalte des ersten Speicherpuffers in der Speichereinheit unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung persistent speichert.
  2. Computerprogrammprodukt nach Anspruch 1, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: einen ersten Zeitgeber zu dem ersten Speicherpuffer zuzuweisen; den ersten Zeitgeber als Reaktion auf das Schreiben in den ersten Speicherpuffer erneut zu starten; und als Reaktion auf das Erkennen des Ablaufens des ersten Zeitgebers, Inhalte des ersten Speicherpuffers in der Speichereinheit persistent zu speichern.
  3. Computerprogrammprodukt nach Anspruch 1, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: als Reaktion auf das Empfangen einer Leseanforderung von einem Host-Computer, die eine Leseadresse innerhalb des Fensters von Speicheradressen festlegt, zu ermitteln, ob sich die Leseadresse innerhalb eines Adressbereichs eines bestimmten Speicherpuffers in der Speichereinheit befindet; und als Reaktion auf das Ermitteln, dass sich die Leseadresse innerhalb eines Adressbereichs eines bestimmten Speicherpuffers befindet, von dem bestimmten Speicherpuffer zu lesen.
  4. Computerprogrammprodukt nach Anspruch 3, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: als Reaktion auf das Ermitteln, dass sich die Leseadresse nicht innerhalb eines Adressbereichs eines bestimmten Speicherpuffers befindet, einen zweiten Speicherpuffer in der Speichereinheit zu initialisieren; einen zweiten Adressbereich innerhalb des Fensters von Speicheradressen zu dem zweiten Speicherpuffer zuzuweisen, so dass die Leseadresse der Anforderung innerhalb des zweiten Adressbereichs liegt; einen Teil von Daten von der Speichereinheit in den zweiten Speicherpuffer unter Verwendung von logischer Blockadressierung einzulesen; und einen Lesevorgang von dem zweiten Speicherpuffer beruhend auf der Leseadresse durchzuführen.
  5. Computerprogrammprodukt nach Anspruch 3, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: eine freie Liste von verfügbaren Speicherpuffern in der Speichereinheit zu pflegen; einen zweiten Zeitgeber zu dem zweiten Speicherpuffer zuzuweisen; den zweiten Zeitgeber als Reaktion auf das Lesen von dem zweiten Speicherpuffer erneut zu starten; und als Reaktion auf das Erkennen des Ablaufens des zweiten Zeitgebers, den zweiten Speicherpuffer an die freie Liste zurückzugeben.
  6. Computerprogrammprodukt nach Anspruch 1, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: eine freie Liste von verfügbaren Speicherpuffern in der Speichereinheit zu pflegen; als Reaktion auf das dauerhafte Speichern von Inhalten des ersten Speicherpuffers, die Inhalte des ersten Puffers ungültig zu machen; den ersten Speicherpuffer an die freie Liste zurückzugeben; und den Zeitgeber zurückzusetzen.
  7. Computerprogrammprodukt nach Anspruch 1, bei dem das persistente Speichern des ersten Speicherpuffers das Durchführen eines Lesen-Ändern-Schreiben-Vorgangs unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung aufweist.
  8. Computerprogrammprodukt nach Anspruch 1, bei dem das persistente Speichern des ersten Speicherpuffers aufweist: als Reaktion auf das Ermitteln, dass eine logische Blockadresse, auf die der erste Adressbereich abgebildet ist, nicht an einer Sektorengrenze beginnt oder Daten für den Schreibvorgang nicht an einer Sektoren- oder Seitengrenze aufhören, Lesen eines Sektors bzw. einer Seite an der logischen Blockadresse, auf die der erste Adressbereich abgebildet ist, von der Speichereinheit, Zusammenfügen von Daten von dem ersten Speicherpuffer mit dem Sektor bzw. der Seite, um einen neuen Sektor bzw. eine neue Seite zu bilden, und Schreiben des neuen Sektors bzw. der neuen Seite in die Speichereinheit.
  9. Computerprogrammprodukt nach Anspruch 1, bei dem das persistente Speichern des ersten Speicherpuffers aufweist: als Reaktion auf das Ermitteln, dass eine logische Blockadresse, auf die der erste Adressbereich abgebildet ist, für Striping konfiguriert ist und Daten für den Schreibvorgang weniger als ein Stripe sind, Lesen eines Stripe an der logischen Blockadresse, auf die der erste Adressbereich abgebildet ist, von der Speichereinheit, Zusammenfügen von Daten von dem ersten Speicherpuffer mit dem Stripe, um einen neuen Stripe zu bilden, Ermitteln einer neuen Parität für den neuen Stripe und Schreiben des neuen Stripe mit der neuen Parität in die Speichereinheit.
  10. Computerprogrammprodukt nach Anspruch 1, bei dem das Schreiben in den ersten Speicherpuffer aufweist: Schreiben einer Kopie von Daten der Schreibanforderung in einen Speicherpuffer in einer Zusatzspeichereinheit.
  11. Computerprogrammprodukt nach Anspruch 1, wobei der durch einen Computer lesbare Programmcode darüber hinaus den Controller veranlasst: einen Speicherauszug des ersten Puffers in einem batteriegestützten Schreibcachespeicher als Reaktion auf das Empfangen einer frühzeitigen Systemabschaltwarnung zu erstellen.
  12. Computerprogrammprodukt nach Anspruch 1, bei dem die Speichereinheit ein Solid-State-Laufwerk, eine PCI-(Schnittstelle für periphere Komponenten)Express-Karte, die einen Flash-Speicher-Controller aufweist, und/oder einen RAID-(Redundant Array of Independent Disks)Controller aufweist, wobei eine Vielzahl von Solid-State-Laufwerkern oder eine Vielzahl von PCI-Express-Karten mit dem RAID-Controller verbunden sind.
  13. Solid-State-Laufwerk, aufweisend: eine Vielzahl von Speicherpuffern; einen Halbleiterspeicher; und einen Controller, wobei der Controller so konfiguriert ist, dass er: eine Abbildung eines Fensters von Speicheradressen auf einen logischen Blockadressierungs-(LBA-)Bereich des Halbleiterspeichers durchführt; als Reaktion auf das Empfangen einer Schreibanforderung von einem Host-Computer, die eine Schreibadresse innerhalb des Fensters von Speicheradressen festlegt, einen ersten Speicherpuffer aus der Vielzahl von Speicherpuffern initialisiert; einen ersten Adressbereich innerhalb des Fensters von Speicheradressen zu dem ersten Speicherpuffer zuweist, so dass die Schreibadresse der Anforderung innerhalb des ersten Adressbereichs liegt; beruhend auf der Schreibadresse in den ersten Speicherpuffer schreibt; und als Reaktion darauf, dass der Puffer voll ist, Inhalte des ersten Speicherpuffers in dem Halbleiterspeicher unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung persistent speichert.
  14. Verfahren für einen direkten Speicherzugriff in einer Speichereinheit, wobei das Verfahren aufweist: Durchführen einer Abbildung eines Fensters von Speicheradressen auf einen logischen Blockadressierungs-(LBA-)Bereich der Speichereinheit; als Reaktion auf das Empfangen einer Schreibanforderung von einem Host-Computer, die eine Schreibadresse innerhalb des Fensters von Speicheradressen festlegt, Initialisieren eines ersten Speicherpuffers in der Speichereinheit; Zuweisen eines ersten Adressbereichs innerhalb des Fensters von Speicheradressen zu dem ersten Speicherpuffer, so dass die Schreibadresse der Anforderung innerhalb des ersten Adressbereichs liegt; Schreiben in den ersten Speicherpuffer beruhend auf der Schreibadresse; und als Reaktion darauf, dass der Puffer voll ist, persistentes Speichern von Inhalten des ersten Speicherpuffers in der Speichereinheit unter Verwendung von logischer Blockadressierung beruhend auf der Abbildung.
DE102012216034.5A 2011-09-30 2012-09-11 Direkte Speicheradressierung für Solid-State-Laufwerke Active DE102012216034B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/250,343 US8635407B2 (en) 2011-09-30 2011-09-30 Direct memory address for solid-state drives
US13/250,343 2011-09-30

Publications (3)

Publication Number Publication Date
DE102012216034A1 true DE102012216034A1 (de) 2013-04-04
DE102012216034A8 DE102012216034A8 (de) 2013-06-06
DE102012216034B4 DE102012216034B4 (de) 2021-11-25

Family

ID=47137384

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012216034.5A Active DE102012216034B4 (de) 2011-09-30 2012-09-11 Direkte Speicheradressierung für Solid-State-Laufwerke

Country Status (5)

Country Link
US (2) US8635407B2 (de)
CN (1) CN103034590B (de)
DE (1) DE102012216034B4 (de)
GB (1) GB2495188B (de)
TW (1) TWI515565B (de)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103425438B (zh) * 2013-07-15 2016-08-10 记忆科技(深圳)有限公司 优化固态硬盘写请求的方法及其固态硬盘
US9304709B2 (en) 2013-09-06 2016-04-05 Western Digital Technologies, Inc. High performance system providing selective merging of dataframe segments in hardware
WO2015116173A2 (en) 2014-01-31 2015-08-06 Hewlett-Packard Development Company, L.P. Unifying memory controller
KR102214511B1 (ko) 2014-02-17 2021-02-09 삼성전자 주식회사 두 단계로 페이지를 필터링하는 데이터 저장 장치, 이를 포함하는 시스템, 및 상기 데이터 저장 장치의 동작 방법
JP6142860B2 (ja) * 2014-11-05 2017-06-07 日本電気株式会社 ディスクアレイ装置、ディスク制御装置、ソリッドステートドライブ、ディスク制御方法、及びそのためのプログラム
US9921750B2 (en) * 2014-11-20 2018-03-20 Samsung Electronics Co., Ltd. Solid state drive (SSD) memory cache occupancy prediction
US10359941B1 (en) * 2014-12-22 2019-07-23 Emc Corporation Multi-tier data storage using burst buffer appliance for workload transformation based on performance characteristics of at least one tier
CA2938242C (en) * 2015-12-03 2017-10-31 Huawei Technologies Co., Ltd. Array controller, solid state disk, and method for controlling solid state disk to write data
US9965419B1 (en) 2016-02-04 2018-05-08 Ampere Computing Llc Multiple-queue integer coalescing mapping algorithm with shared based time
US10255213B1 (en) * 2016-03-28 2019-04-09 Amazon Technologies, Inc. Adapter device for large address spaces
EP3920018B1 (de) * 2016-10-04 2024-04-10 Pure Storage, Inc. Optimierung der datenspeicherung unter verwendung eines nichtflüchtigen direktzugriffsspeichers eines speichersystems
KR20180041037A (ko) * 2016-10-13 2018-04-23 삼성전자주식회사 멀티 코어 솔리드 스테이트 드라이브의 공유 분산 메모리 관리 방법
US20180210846A1 (en) * 2017-01-25 2018-07-26 Hewlett Packard Enterprise Development Lp Files access from a nvm to external devices through an external ram
TWI645286B (zh) * 2017-08-31 2018-12-21 慧榮科技股份有限公司 記憶體控制裝置和方法
US11137919B2 (en) * 2017-10-30 2021-10-05 Arm Ltd. Initialisation of a storage device
US10884662B2 (en) 2018-08-06 2021-01-05 Silicon Motion, Inc. Method for performing storage control in a storage server, associated memory device and memory controller thereof, and associated storage server
US10838661B1 (en) 2019-04-29 2020-11-17 Western Digital Technologies, Inc. Fast storage class memory using write once memory coding
CN113326212B (zh) * 2020-02-28 2023-11-03 加特兰微电子科技(上海)有限公司 数据处理方法、装置及相关设备
CN111625188B (zh) * 2020-05-19 2023-08-08 合肥康芯威存储技术有限公司 一种存储器及其数据写入方法与存储系统
CN112083881B (zh) * 2020-08-24 2022-10-18 云南财经大学 一种基于持久化内存的一体化天文数据采集与存储系统
CN112540732B (zh) * 2020-12-23 2022-11-11 展讯半导体(成都)有限公司 数据处理方法及相关产品
CN116745744A (zh) * 2021-04-30 2023-09-12 华为技术有限公司 应用于固态硬盘的存储方法及存储控制器

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6173385B1 (en) 1993-11-19 2001-01-09 Disk Emulation Systems, Inc. Address generator for solid state disk drive
GB9326499D0 (en) 1993-12-24 1994-03-02 Deas Alexander R Flash memory system with arbitrary block size
TW504694B (en) 2000-01-12 2002-10-01 Hitachi Ltd Non-volatile semiconductor memory device and semiconductor disk device
US7200696B2 (en) 2001-04-06 2007-04-03 International Business Machines Corporation System method structure in network processor that indicates last data buffer of frame packet by last flag bit that is either in first or second position
TW556077B (en) 2001-06-05 2003-10-01 Via Tech Inc Controller for improving buffer management efficiency and the buffer management method
US6892267B2 (en) 2002-04-15 2005-05-10 Relax Technology, Inc. Method for message transmission exploiting unused device addresses
US7653777B2 (en) 2004-01-19 2010-01-26 Trek Technology (Singapore) Pte Ltd. Portable data storage device using a memory address mapping table
US8060670B2 (en) 2004-03-17 2011-11-15 Super Talent Electronics, Inc. Method and systems for storing and accessing data in USB attached-SCSI (UAS) and bulk-only-transfer (BOT) based flash-memory device
US7447831B2 (en) 2006-05-18 2008-11-04 International Business Machines Corporation Memory systems for automated computing machinery
US8489817B2 (en) * 2007-12-06 2013-07-16 Fusion-Io, Inc. Apparatus, system, and method for caching data
KR100794312B1 (ko) 2006-12-27 2008-01-11 삼성전자주식회사 명령어 자동 처리 유니트를 포함한 메모리 컨트롤러 및그를 포함한 메모리 시스템
US7564722B2 (en) 2007-01-22 2009-07-21 Micron Technology, Inc. Memory system and method having volatile and non-volatile memory devices at same hierarchical level
TW200841355A (en) 2007-04-03 2008-10-16 Apacer Technology Inc Two-dimensional writing data method for flash memory and the corresponding storage device
JP2009003569A (ja) 2007-06-19 2009-01-08 Toshiba Corp 半導体記憶装置
CN100511122C (zh) 2007-10-19 2009-07-08 华为技术有限公司 固态硬盘控制器电路及固态硬盘
US8775717B2 (en) 2007-12-27 2014-07-08 Sandisk Enterprise Ip Llc Storage controller for flash memory including a crossbar switch connecting a plurality of processors with a plurality of internal memories
US8068365B2 (en) 2008-02-04 2011-11-29 Mosaid Technologies Incorporated Non-volatile memory device having configurable page size
US20090222613A1 (en) 2008-02-29 2009-09-03 Kabushiki Kaisha Toshiba Information processing apparatus and nonvolatile semiconductor memory drive
US8843691B2 (en) * 2008-06-25 2014-09-23 Stec, Inc. Prioritized erasure of data blocks in a flash storage device
US20100057976A1 (en) 2008-08-26 2010-03-04 Menahem Lasser Multiple performance mode memory system
US8645617B2 (en) 2008-12-09 2014-02-04 Rambus Inc. Memory device for concurrent and pipelined memory operations
KR101581679B1 (ko) 2009-03-18 2015-12-31 삼성전자주식회사 저장 장치 및 저장 장치의 버퍼 메모리 관리 방법

Also Published As

Publication number Publication date
DE102012216034A8 (de) 2013-06-06
DE102012216034B4 (de) 2021-11-25
US20130086301A1 (en) 2013-04-04
TWI515565B (zh) 2016-01-01
GB2495188B (en) 2013-08-14
CN103034590B (zh) 2015-09-16
US8683131B2 (en) 2014-03-25
GB2495188A (en) 2013-04-03
CN103034590A (zh) 2013-04-10
TW201333699A (zh) 2013-08-16
US20130191594A1 (en) 2013-07-25
GB201216336D0 (en) 2012-10-24
US8635407B2 (en) 2014-01-21

Similar Documents

Publication Publication Date Title
DE102012216034B4 (de) Direkte Speicheradressierung für Solid-State-Laufwerke
US10275162B2 (en) Methods and systems for managing data migration in solid state non-volatile memory
US10318324B2 (en) Virtualization support for storage devices
US9342256B2 (en) Epoch based storage management for a storage device
US9996435B2 (en) Reliability scheme using hybrid SSD/HDD replication with log structured management
DE112013004250B4 (de) Vorrichtung, Verfahren und Computerprogrammprodukt für adaptive Persistenz
DE112019000149T5 (de) Multivorrichtungsspeichersystem mit gehosteten diensten auf peer-speichervorrichtungen
US9037787B2 (en) Computer system with physically-addressable solid state disk (SSD) and a method of addressing the same
DE102018105427A1 (de) Beibehalten von Daten bei einer Stromabschaltung
DE102017113439A1 (de) Abbildungstabellen für Speichervorrichtungen
DE102017124079A1 (de) Speichervorrichtung zum Verarbeiten von beschädigten Metadaten und Verfahren zum Betreiben derselben
DE112016004527T5 (de) Implementieren eines Hardware-Beschleunigers für das Management eines Speicher-Schreibcachespeichers
US9558108B2 (en) Half block management for flash storage devices
DE112014005570T5 (de) Deaktivieren von Seiten in einem Nand-Flash-Speicher-System
DE102017104073B4 (de) Verallgemeinertes Verifikationsverfahren für Schreiboperationen
DE112020005787T5 (de) Verbesserte dateisystem-unterstützung für zonen-namespace-speicher
US10049042B2 (en) Storage device, semiconductor memory device, and method for controlling same
US11340829B1 (en) Techniques for log space management involving storing a plurality of page descriptor (PDESC) page block (PB) pairs in the log
CN113126907A (zh) 用于存储器装置的异步电力损失恢复
DE102018123670A1 (de) Speicherungssystem, Rechensystem und Verfahren dafür
WO2013089680A1 (en) Storage controller with host collaboration for initialization of a logical volume
US9239679B2 (en) System for efficient caching of swap I/O and/or similar I/O pattern(s)
Wu et al. Selfie: co-locating metadata and data to enable fast virtual block devices
US20140372672A1 (en) System and method for providing improved system performance by moving pinned data to open nand flash interface working group modules while the system is in a running state
US10853257B1 (en) Zero detection within sub-track compression domains

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06F0012020000

Ipc: G06F0012060000

R016 Response to examination communication
R018 Grant decision by examination section/examining division
R084 Declaration of willingness to licence
R020 Patent grant now final