Flash-Controller
Ein Flash-Controller ist der Teil des Solid-State-Flash-Memorys, der mit dem Host-Gerät kommuniziert und das Flash-Dateisystemverzeichnis verwaltet.
Der Controller ist auch für Wear Leveling, Fehlerkorrektur (ECC) und Garbage Collection zuständig. Die in den Flash-Memory-Controller eingebaute Intelligenz ist ein wichtiger Faktor, der bei der Auswahl der richtigen Solid-State-Laufwerke (SSDs) zu berücksichtigen ist.
Einsatzzweck von Flash-Controllern
Flash-Controller verwalten die auf NOR- und NAND-Flash-Speichern gespeicherten Daten, und sie kommunizieren mit dem Computer oder Gerät.
Nachdem ein Flash-Gerät hergestellt wurde, formatiert der Controller den Flash-Speicher, um sicherzustellen, dass das Gerät ordnungsgemäß funktioniert. Er ordnet die Flash-Zellen zu und bestimmt, welche Ersatzzellen ausgefallene Zellen ersetzen sollen. Ein Teil der Ersatzzellen enthält auch die Firmware für den Controller und das Speichergerät.
Wenn ein Gerät lesen oder in das Flash-Memory schreiben muss, spricht es mit dem Flash-Controller. Bei einfachen Geräten wie SD-Karten und USB-Flash-Laufwerken sind nur wenige Flash-Memory-Dies gleichzeitig angeschlossen, was die Geschwindigkeit des Speichers begrenzt. Leistungsstarke SSDs können Hunderte von Dies haben, wodurch sie viel schneller als Flash-Speicher für Verbraucher sind.
SSDs der Verbraucherklasse werden im Allgemeinen mit generischen Flash-Controllern gebaut, die kostengünstig sind und keine häufigen Programm-/Löschzyklen (P/E Cycles) unterstützen sollen. SSDs der Unternehmensklasse, die schreibintensive Anwendungen unterstützen müssen, verfügen oft über proprietäre Controller, die speziell dafür ausgelegt sind, die Lebensdauer des Laufwerks zu verlängern und die Leistung zu verbessern. Ein Enterprise-Flash-Controller kann NAND-Flash-Beschränkungen durch hochentwickelte Wear-Leveling-Techniken und fortschrittliche Fehlerkorrektur-Algorithmen ausgleichen.
Wear Leveling und Block Picking
Flash kann eine endliche Anzahl von Schreib-/Löschzyklen verarbeiten. Wenn ein Flash-Block programmiert und gelöscht wird, ohne dass auf andere Blöcke geschrieben wird, würde dieser Block viel schneller abgenutzt sein als die anderen und das Gerät vorzeitig beenden. Um dies zu vermeiden, verteilen Flash-Controller die Lese- und Schreibvorgänge gleichmäßig auf die Blöcke in einem Prozess, der als Wear Leveling bezeichnet wird.
Es gibt drei Optionen für das Wear Leveling: dynamisches Wear-Leveling, statisches oder globales Wear Leveling und kein Wear Leveling.
Beim dynamischen Wear Leveling ordnet (mapping) der Flash-Controller die logische Blockadressierung (Logical Block Addressing, LBAs) dem physischen Flash zu. Das bedeutet, dass ein Block jedes Mal, wenn er neu geschrieben wird, eine neue physische Adresse erhält. Die Daten werden wiederverwertet, so dass das Gerät länger hält, als er es ohne Wear Leveling würde.
Statisches Wear Leveling bildet LBAs auf physische Standorte ab und recycelt Daten wie beim dynamischen Wear Leveling. Aber das statische Wear Leveling bewegt gelegentlich auch unveränderte Blöcke, so dass sie verwendet werden können. Bei diesem Ansatz werden fast alle Blöcke verschlissen, bevor das Laufwerk betriebsunfähig wird.
Ein NAND-Flash-Speichersystem ohne Wear Leveling hat eine kurze Lebensdauer. Wenn ein Gerät kein Wear Leveling nutzt, müssen die Flash-Speicher-Controller den physischen Adressen permanente LBAs zuweisen, so dass jeder beschriebene Block gelesen, gelöscht und wieder beschrieben werden muss. In diesem Szenario nutzen sich Blöcke, auf die häufig geschrieben wird, ab, während andere nie verwendet werden. Wenn ein paar Blöcke ausfallen, fällt das gesamte Gerät aus.
FTL und Mapping
Der Flash Transition Layer (FTL) ist in der Regel ebenfalls in Flash-Controllern enthalten. FTL ist eine Schicht, die unterhalb des Dateisystems liegt und LBAs auf physische Adressen abbildet. LBAs definieren die Größe, die das Dateisystem sehen und verwalten kann, und sie werden auf einer Block-ID, Seiten-ID und Sektor-ID des Flash-Geräts abgebildet.
Der physische Standort eines LBAs kann sich im Rahmen des Wear Leveling und anderer Flash-Verwaltungstechniken, wie Bad-Block-Management und Safe Flash Handling, häufig ändern. Auch die Mapping-Einheiten einer FTL können sich ändern, so dass LBAs auf der Basis von Pages oder Sub-Pages zugeordnet werden. Granulares Mapping kann die Abnutzung des Flash-Speichers reduzieren und die Lebensdauer des Flash-Speichers verbessern.
Wenn jeder Block einer SSD einmal beschrieben wurde, muss der Flash-Controller in einem Prozess, der als Garbage Collection bezeichnet wird, veraltete Blöcke oder Blöcke mit veralteten Daten zurückgeben. Alle Flash-Medien enthalten eine gewisse Garbage Collection, aber die Geschwindigkeiten variieren je nach Controller.