Wie man die Lebenserwartung von Flash Speicher bestimmt

 | 1599 Wörter


Ahoi,

Flash Speicher ist heute nicht mehr wegzudenken. Vom USB Stick in deiner Schublade, über die Festplatte in deinem Laptop, bis zum UFS-Speicher in deinem Smartphone. Trotz seiner Allgegenwärtigkeit gibt es zahlreiche Missverständnisse über die Eigenschaften und Grenzen von Flash. Besonders der oft zitierte TBW-Wert (Total Bytes Written) wird häufig falsch interpretiert. In diesem Artikel beleuchten ich die grobe Funktionsweise von NAND-Flash-Speicher, zeige die Wechselwirkungen zwischen P/E-Zyklen, Schreibverstärkung und Speicherdichte auf und erkläre, wie sich daraus die reale Lebensdauer eines Speichermediums ableiten lässt.

Wie funktioniert Flash Speicher?

Wir starten nicht mit der simplen Tatsache, dass NAND Flash keine beweglichen Teile besitzt. Viel spannender ist die grundlegende Architektur des heute gängigen NAND-Flash-Speichers: Er ist hierarchisch in Zellen, Pages und Blöcke organisiert. Die Zelle bildet die kleinste Einheit, mehrere Zellen werden zu einer Page zusammengefasst, und mehrere Pages bilden wiederum einen Block.

Doch hier kommt die erste technische Besonderheit ins Spiel: Flash-Speicher kann immer nur ganze Blöcke adressieren – unabhängig davon, ob du wenige Bytes oder große Dateien schreiben möchtest. Typischerweise sind diese Blöcke zwischen 16 KiB und 128 KiB groß und bestehen aus mehreren tausend Pages.

Aufbau eines NAND Blocks

Wenn es nicht möglich ist, eine einzelne Page oder Zelle direkt anzusprechen, was geschieht dann, wenn nur wenige Bytes geschrieben werden sollen, der Block jedoch deutlich größer ist?

Der Bitverfall – Silent Data Corruption

In solchen Fällen muss der gesamte Block – unabhängig von der tatsächlichen Datenmenge – ausgelesen, gelöscht, mit den neuen Daten ergänzt und vollständig zurückgeschrieben werden.

Diese Vorgehensweise bringt jedoch eine fundamentale Einschränkung mit sich: Jede Speicherzelle hat eine begrenzte Lebensdauer, gemessen in sogenannten Program/Erase-Zyklen (P/E-Zyklen; Schreib/Lese-Zyklen). Je nach Bauweise liegt diese Grenze typischerweise zwischen etwa 1.000 und 100.000 Zyklen. Wird diese Schwelle überschritten, kann die zuverlässige Speicherung von Daten nicht mehr garantiert werden. Elektronische oder physikalische Verschleißerscheinungen führen dazu, dass Zellen „lecken“ oder Daten ungewollt verloren gehen.

Der Verschleißausgleich – Wear Leveling

Um eine gleichmäßige Abnutzung aller Speicherzellen sicherzustellen, überwacht der Controller die Anzahl der P/E-Zyklen jeder einzelnen Speicherzelle. Der Controller fungiert dabei als Schaltzentraler, der nicht nur die Kommunikation zwischen deinem System und dem Speicher organisiert, sondern auch Maßnahmen zur Lebensdaueroptimierung steuert.

Ein typisches Szenario: Wenn du beispielsweise deine SSD zur Hälfte mit deiner Steam-Bibliothek befüllst und die andere Hälfte leer bleibt, würden zunächst nur die freien Blöcke für neue Schreibvorgänge genutzt. Mit der Zeit würden diese Blöcke stark abgenutzt, während die Blöcke mit deiner Bibliothek nahezu unberührt bleiben.

Um ein Ungleichgewicht zu vermeiden, greift der Controller aktiv ein. In Leerlaufphasen analysiert er die P/E-Zyklen aller Blöcke und verschiebt Daten gezielt von weniger belasteten Blöcken zu stärker abgenutzten Blöcken. Dadurch wird die Abnutzung gleichmäßig verteilt, was die Lebensdauer der gesamten SSD optimiert.

Speicherdicht

Abhängig von dem physikalischen Aufbau des Speichers, reden wir hier von

  • Single-Level Cell (SLC): ~100.000 P/E Zyklen, max. Kapazität: ~2 TB
  • Multi-Level Cell (MLC): ~25.000 P/E Zyklen, max. Kapazität: ~8 TB
  • Triple-Level Cell (TLC): ~5000 P/E Zyklen, max. Kapazität: ~30 TB
  • Quad-Level Cell (QLC): ~500 P/E Zyklen, max. Kapazität: ~70 TB
SLC vs MLC vs TLC vs QLC

Quelle: https://www.integralmemory.com/articles/the-pros-and-cons-of-qlc-nand-flash/

Wie die Bezeichnungen schon vermuten lassen, speichert eine SLC-Zelle nur ein Bit an Daten, während QLC-Zellen bis zu 4 Bit speichern können. Der größte Nachteil dieser höheren Speicherdichte ist die stark verringerte Lebensdauer der Zellen.

Aus diesem Grund kommen TLC- und QLC-Speicher vorwiegend im Endkundenbereich zum Einsatz. Ihre höhere Speicherdichte senkt die Produktionskosten erheblich, was sie besonders für kostensensitive Anwendungen attraktiv macht.

TBW – Total Bytes Written

Um eine grobe Einschätzung der Lebensdauer von Flash-Speicher zu erhalten, geben Hersteller den sogenannten TBW-Wert (Total Bytes Written) an. Dieser beschreibt, mit wie viele Terabyte der Speicher voraussichtlich insgesamt beschrieben werden kann. Aber wie wird dieser Wert eigentlich ermittelt?

Die Testverfahren für TBW sind in den Standards JESD218 und JESD219A-01 spezifiziert. Diese definieren verschiedene Einsatzszenarien sowie Testbedingungen wie Füllstand, Temperatur und weitere Faktoren. Dabei wird zwischen Consumer- und Enterprise-Tests unterschieden: Consumer-Tests berücksichtigen typische Anwendungen in PCs oder Laptops, während Enterprise-Tests auf professionelle Einsätze, etwa in Servern, ausgerichtet sind.

Aus meinem Arbeitsalltag werfen wir einen Blick ins Datenblatt der KINGSTON DC600M. In den Fußnoten findet sich der Hinweis:

Total bytes written (TBW) is derived from the JEDEC Enterprise Workload (JESD219A).

Das bedeutet, dass die TBW anhand des Enterprise-Tests gemäß JESD219A ermittelt wurden.

WAF – Write Amplification Factor

Moderne Festplatten sind mit sogenannten SMART-Attributen ausgestattet, die sich per Software auslesen lassen. Diese Attribute liefern vielfältige Informationen über den aktuellen Zustand der Festplatte, darunter:

  • Betriebstemperatur
  • Betriebsstunden
  • Fehlerstatistiken
  • LBAs Written GB: Anzahl der geschriebenen logischen Blöcke in Gigabyte
  • NAND Flash Writes GB: Anzahl der geschriebenen physischen Blöcke in Gigabyte

Dank dieser Attribute lässt sich jederzeit nachvollziehen, wie viele Daten insgesamt auf die Festplatte geschrieben wurden. Diese Informationen sind essenziell, um die Lebensdauer und die Effizienz des Speichers zu bewerten.

Da wir bereits wissen, dass ein Schreibvorgang von wenigen Daten potenziell viele P/E-Zyklen verbraucht, wäre es nun wichtig, die Differenz zwischen der Menge an Daten die wir schreiben wollten und der Menge die tatsächlich geschrieben wurde zu bestimmen. Das ist der Write Amplification Factor (WAF; dt. Schreibverstärkungsfaktor).

WAF = NAND Flash Writes GB / LBAs Written GB

Daraus können wir nun die erwartbare Lebensdauer (TBW) für das Testszenario berechnen:

TBW = Größe GB * P/E Zyklen / WAF

Die Anzahl an P/E-Zyklen findet sich bei Enterprise-Festplatten im Datenblatt. Im Consumer-Bereich fehlt die Angabe oft.

SLC-Cache

Einen Faktor haben wir bisher ausgelassen. Die Lese- und Schreibgeschwindigkeit. Aufgrund der Komplexität möchte ich das Thema nur anreißen und für Details auf andere Quellen verweisen. Die erhöhung der Speicherdichte durch MLC, TLC und QLC-Flash hat leider den Nachteil, wesentlich langsamer zu sein als SLC-Flash. Ursache ist das Verfahren zum Auslesen und Beschreiben der Zellen. Je mehr Zustände eine Zelle haben kann, desto zeitaufwändiger ist die genau Bestimmung, welchen Zustand (Wert) die Zelle hat.

  • SLC: 2 Zustände (0, 1)
  • MLC: 4 Zustände (00, 01, 10, 11)
  • TLC: 8 Zustände (000, 001, 010, 100, 100, 101, 110, 111)
  • QLC: 16 Zustände (0000, 0001, 0010, 0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111)

Bei SLC muss lediglich festgestellt werden ob überhaupt eine Spannung an der Zelle anliegt. Das entspricht dann dem Wert 1. Alles andere entspricht dem Wert 0. Bei den anderen Speicherdichten muss nicht nur festgestellt werden ob eine Spannung anliegt, sondern auch welche. Der Wert 0 entspricht dabei der niedrigsten Spannung und der Maximalwert (MLC: 11, TLC: 111, QLC: 1111) der höchsten Spannung. Um diesen Nachteil auszugleichen, haben die meisten SSDs den SLC-Cache. Dabei handelt es sich im Grunde nur um eine spezielle Firmware des Controllers, welche ein paar Prozent aller Speicherzellen nur noch als SLC-Zellen behandelt. Dabei ist es egal, ob es sich tatsächlich um MLC-, TLC- oder QLC-Zellen handelt. Der Controller erlaubt in diesem Bereich nur noch das Schreiben von 0 oder 1. Dadurch verlieren wir in diesem Bereich bis zu 75% der Speicherdichte (bspw. von QLC zu SLC), aber gewinnen enorm an Lese- und Schreibgeschwindigkeit. Wenn jetzt ein Schreibbefehl kommt, leitet der Controller die Daten auf den SLC-Cache Bereich um. In einem Moment der Ruhe, wenn längere Zeit keine Last anliegt, verschiebt der Controller die Daten aus dem SLC-Cache in den normalen Bereich. Sollte es zu weiteren Schreibvorgängen kommen, welche insgesamt die Speicherkapazität des SLC-Caches überschreiten, wird wieder direkt in den normalen Bereich geschrieben. Damit fällt dann die Schreibgeschwindigkeit wieder ab, bis der Cache wieder frei geworden ist.

Zusammenfassung

Flash-Speicher unterscheidet sich grundlegend von herkömmlichen Festplatten, was vor allem auf seine Bauweise zurückzuführen ist. Einzelne Speicherzellen können nicht direkt adressiert werden, sondern immer nur ganze Blöcke. Das ist jedoch nur ein Aspekt seiner Funktionsweise. Neben den Speicherzellen selbst spielen der integrierte Controller und oft auch ein DRAM-Puffer eine zentrale Rolle.

Der Controller fungiert als Schaltzentrale: Er koordiniert die Zugriffe auf den Speicher und die Kommunikation mit dem Computer. Zudem verwaltet er eine Tabelle mit Verweisen auf die geschriebenen Daten, sowie über die Abnutzung der Zellen und einen SLC-Cache.

Bei einem Schreibbefehl ermittelt der Controller, welcher Block beschrieben werden soll. Dieser Block wird ausgelesen, sein Inhalt zwischengespeichert, gegebenenfalls mit den neuen Daten kombiniert und vollständig zurückgeschrieben.

Die Programmierung des Controllers (Firmware) sowie der Aufbau der Speicherzellen beeinflussen maßgeblich das Verhältnis zwischen den geschriebenen logischen Blöcken (gewünschte Datenmenge) und den physisch geschriebenen Blöcken (tatsächlich geschriebene Datenmenge).

Dieses Verhältnis variiert stark je nach Einsatzzweck des Speichers. Anwendungen mit vielen kleinen Schreibvorgängen, wie Datenbanken oder Log-Dateien, belasten die Speicherzellen wesentlich stärker (mehr P/E-Zyklen) als Anwendungen mit großen zusammenhängenden Daten wie Videos.

Aus meinem beruflichen Alltag habe ich ein konkretes Beispiel, an dem wir nachvollziehen können, wie sich dieses Verhältnis und die TBW im Vergleich zu den Herstellerangaben verhält.

Beispiel einer 2TB KINGSTON DC600M

Nach etwa einem Jahr in einem Proxmox-Cluster weist die SSD laut SMART-Attributen folgende Werte auf:

  • Größe: 1920 GB (2 TB)
  • NAND Flash Writes GB: 28686
  • LBAs Written GB: 20149

Wir erinnern uns an die beiden Formeln:

WAF = NAND Flash Writes GB / LBAs Written GB

TBW = Größe GB * P/E Zyklen / WAF

Im Datenblatt sind die verwendeten Speicherzellen mit 3000 P/E Zyklen angegeben. Nun alles einsetzen:

WAF = 28686 / 20149

TBW = 1920 * 3000 / WAF

TBW = 5760000 / 1,43

TBW = 4027972 GB = 4027 TB = 4,03 PB


Aus dem Datenblatt entnehmen wir, dass die SSD für 35004 TBW (3,5 PB) im JEDEC Enterprise Workload spezifiziert ist. D.h. für uns nun, dass die SSD im aktuellen Workload gut 15% länger "überlebt". Der aktuelle Workload ist demnach nicht so anspruchsvoll, wie der JEDEC Enterprise.

Gut für uns :)

Quellen

#ssd #flash speicher #sysadmin #hardware #nvme #usb #sd karte