SLC-Cache in SSD und nicht-formatierte Bereiche

Sbibi

Lt. Junior Grade
Registriert
Juli 2010
Beiträge
487
Hallo zusammen,

das Thema SSD, Cache und SLC-Cache beschäftigt mich und ich habe eine Frage, die eher theoretischer Natur ist.

Ich weiß, dass SSDs, die direkt in ihre Zellen schreiben müssen, langsamer sind, als wenn sie eine Schreiboperation mit dem pseudo-SLC-Cache abfangen und das "Umsortieren" später durchführen können.

Mir ist daher klar, dass sich verschiedene Anforderungen an SSD in unterschiedlich großen SLC-Caches, HMB/DRAM-Cache-Größen und den entsprechend unterschiedlichen Preisen widerspiegeln.

Angenommen, ich habe eine "schlechte" SSD. Beispielsweise die Crucial P3 mit QLC-Speicher.
Wenn ich hier die komplette SSD als Laufwerk formatiere und das Laufwerk fülle, wird der mögliche SLC-Cache natürlich entsprechend immer kleiner und die Leistung (bzw. Dauer, die die SSD die max. Leistung bringen/schreiben kann) nimmt ab.

Meine Frage(n):
Kann ich die Leistung einer solchen SSD besser (aufrecht-)erhalten, wenn ich auf Teile der Kapazität verzichte und nur 90% des Laufwerks formatiere? Bleiben die unformatierten Speicherbereiche damit als SLC-Puffer erhalten?
Quasi ein Trade-Off zwischen Kapazität und Leistung.
 
Nein. Die Partitionierung ist für die SSD nicht erkennbar. Sie weiss nur von nicht benutzten Blöcken.
Wenn Du eine höhere performance benötigst, kauf Dir eine leistungsfähige SSD. Wenn Du glaubst, eine lahme Krücke durch overprovisioning schneller machen zu können, irrst Du.
 
Meines Wissens reine Sache des Controllers und der wird sich durch solche Tricks nicht in seinem Handeln beeinflussen lassen. Ich kann mich irren, aber ich meine es wird eh nicht der ganze Speicher als SLC Cache genutzt, auch wenn dieser noch frei wäre.

Wenn man sich da solche Gedanken macht, dann vielleicht eher eine TLC mit DRAM Cache kaufen?
 
Zur Klarstellung: Das hier soll keine Grundlage für eine Kaufberatung sein. Ich bin mit meinen SSD zufrieden.
Der Gedanke kam mir jedoch beim Kauf der letzten SSD.

Kann man eine billige, "schlechte" SSD durch oben genanntes zumindest etwas verbessern, wenn man genügend Kapazität hat bzw. diese billiger war, als eine höherwertige Technik?
 
Wenn ich das richtig verstehe, dann willst du mit einer kleineren Partition im Grunde nur freien Speicher erzwingen (weil dieser dann ja nicht genutzt werden kann), um dauerhaft mehr freie Zellen für den SLC Cache zu haben, richtig?

Grundsätzlich sollte das funktionieren, solang die SSD aber nicht rappelvoll ist, wird es keinen Unterschied zu einer 100% Partition machen.
 
  • Gefällt mir
Reaktionen: up.whatever und Sbibi
peljotha schrieb:
Die Partitionierung ist für die SSD nicht erkennbar. Sie weiss nur von nicht benutzten Blöcken.
Dann müsste es doch "Ja" sein? Wenn die SSD nur unbenutzte Blöcke als SLC-Cache nutzen kann und ich betriebssystemseitig bestimmte Blöcke des Speichers nie benutze, gibt es doch immer (sofern im Idle wieder bereinigt werden konnte) diese Menge an Zellen als verfügbaren Cache?
Ergänzung ()

cvzone schrieb:
Richtig!
Und nochmal: Das ist eine Verständnisfrage/theoretische Frage. Am besten lässt man die SSD einfach selbst haushalten und versucht, nicht zu 100% zu befüllen.
 
Zuletzt bearbeitet: (Rechtschreibung)
Ob Du nun durch eine Partitionierung Blöcke für Dich nicht erreichbar machst, oder ob Du einfach von Deiner Partition die selbe Menge GB frei lässt, macht keinen Unterschied. Der Kontroller der SSD kann den Unterschied nicht erkennen.
Es gibt SSDs, die nur eine feste Größe und Zuordnung an SLC cache besitzen. Z. B. eine Crucial BX300 (obwohl sie den als MLC überhaupt nicht nötig hat). Es gibt SSDs wie die Toshiba Qpro, die keinen festgelegten SLC Cache haben und z. B. immer die freie Hälfte als SLC nutzen. Oder die Mischung aus beidem, wie die Samsung 970evo plus. Die hat einen kleinen Bereich festgelegter Menge als SLC und eine größere Menge an pseudo SLC, wobei eben der TLC erst mal nur mit einem bit beschrieben wird.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sbibi
Das würde im Umkehrschluss ja auch bedeuten, wenn du 100% partitionierst, hat der Controller keinen Cache mehr. Aber der Cache Bereich ist völlig unsichtbar für dich, du kannst ihn weder sehen noch erreichen. Nur der Controller kann das und nutzt ihn so, wie er es für richtig hält. Der braucht also keinen freien Platz, der hat den eh.
Ich kann mir schwer vorstellen, dass der Controller einfach jeden freien Speicher als Cache nimmt, den er bekommen kann. Der wird sich auf seinen zugewiesenen beschränken.

Aber wissen tue ich das nicht!
 
Von Crucial gibt es ein eigenes Programm wo man diesen Bereich einstellen kann. Die SSD nimmt unbenutzte Bereich um nur ein 1 Bit zu speichern. Je voller die SSD beschrieben ist desto eher knickt dieser Cache ein.
 
Die Partition ist für den Kontroller nicht erkennbar. Das sind auch nur bits und bytes, die Bereiche abgrenzen für das Betriebssystem.
Ergänzung ()

Slayn schrieb:
Von Crucial gibt es ein eigenes Programm wo man diesen Bereich einstellen kann. Die SSD nimmt unbenutzte Bereich um nur ein 1 Bit zu speichern. Je voller die SSD beschrieben ist desto eher knickt dieser Cache ein.
Bitte zwischen Overprovisioning von Werk aus und dem durch eine App eingerichteten unterscheiden!
Du verwechselst da etwas. Overprovisioning und Größe des SLC Cache haben nichts miteinander zu tun. In meinem vorigen Post habe ich erklärt, welche Strategien es für SLC Cache gibt. Nur wenn ein pseudo SLC verwendet wird (alle TLC oder QLC Zellen werden mit nur einem Bit beschrieben), wird der zur Verfügung stehende Bereich bei höherer Füllung kleiner. Die BX300 hat einen festen SLC Bereich, der sich in der Größe nie ändert.
Man kann das also nicht auf jede SSD verallgemeinern.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Xero261286
pseudo SLC kann statisch oder dynamisch sein. SSDs stellen ja nicht den gesamten Speicherplatz für den Nutzer zur Verfügung (quasi immer eine 2er Potenz). Der Rest kann pseudo-SLC sein oder auch nur Reserve für defekte Speicherzellen / Wear-Leveling, so dass Schreibzugriffe über mehr Blöcke verteilt werden können.
Der dynamische Teil, wenn er existiert muss natürlich mit Füllstand der SSD kleiner werden.

Als frei für alle oben genannten Zwecke betrachtet die SSD komplett unbenutzte Zellen. Damit eine Zelle die schon jemals mit irgendwas beschrieben wurde wieder als unbenutzt gilt, muss das der SSD explizit gesagt werden (TRIM). Nur wenn du einen Bereich unpartitioniert lässt, fühlt sich das OS normalerweise nicht zuständig der SSD diesen Bereich auch zu Trimmen. Das klappt also klassischerweise nur, wenn man die SSD vorher auf Werkszustand zurücksetzt (mit SSD-spezifischen Befehlen, nicht formatieren), weil dabei alle Zellen als ungenutzt markiert werden. Und danach diesen "freigelassenen Teil" mit nichts anfasst.

Edit:
Auch Speicher der den Inhalt 0 hat, ist ja genutzt. Die SSD kann die Zelle nicht einfach anderweitig nutzen, denn evtl. will irgendjemand beim Lesen genau diese nullen wieder sehen. Das macht das ganze halt nur kompliziert, welche Zelle den nun wirklich ungenutzt ist und welche nicht. Und im Zweifel muss eine Zelle halt als genutzt gelten, damit die SSD keine Daten verliert.
/Edit

NVMe SSDs haben per Definition sogenannte Namespaces. Speicher der nicht in einem Namespace ist, kann gar nicht addressiert werden und ist daher dauerhaft unbenutzt. Der ordentliche Weg wäre also den "Namespace" zu verkleinern um der SSD unmissverständlich mitzuteilen, dass sie den übrigen Speicher für sich nutzen kann. Das ist auch was die Herstellertools großteilig machen, wenn die eine Overprovisionfunktion haben. Oder die ändern einfach die Partitionierung und Trimmen einmal manuell den übrig gebliebenen Bereich (und hoffen dass der danach nie von irgendwem auch nur zu Testzwecken beschrieben und danach nicht mehr getrimmt wird, sonst hat man deutlich weniger unbenutzten Speicher als man denkt)...

Edit: Linux ermöglicht es die Namespaces zu sehen, auf der Kommandozeile zu ändern und auch manuell zu trimmen. Allerdings meine ich das Namespaceänderungen einen vollständigen Datenverlust nach sich ziehen um der SSD die Gelegenheit zu geben, sich an die neuen Anforderungen optimal anzupassen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Sbibi
Smily schrieb:
100% partitionierst, hat der Controller keinen Cache mehr.
Nein. Unbenutzter, aber partitionierter Speicher wird sehr wohl als Cache benutzt.
Mir geht es darum, einen bestimmten Bereich "einzuzäunen", sodass ich als Benutzer nicht darauf zugreifen kann (Edit: ), um den "Cache-Bereich" möglicht freizuhalten.
Aber ich glaube, die Antwort ist schon gegeben worden:
Ja, müsste funktionieren. Nein, sinnvoll ist es nicht.
 
  • Gefällt mir
Reaktionen: Smily
Ja, es funktioniert, dass der pseudoSLC größer bleibt. Aber für jedes GB mehr an pseudoSLC, musst Du bei TLC 3GB und bei QLC 4GB frei halten, wenn die SSD diesen ausschließlich dynamischen verwendet.

Die ganze Diskussion mündet in die Frage nach einer flexiblen Einstellmöglichkeit der Größe des pseudoSLC.

Du hättest Dir z. B. statt der NV2 eine 970pro kaufen können. Die schreibt über den gesamten Bereich gleich schnell mit über 2GB/s. Aber die 1TB davon kosten mehr als die 4TB NV2.
 
peljotha schrieb:
Habe ich.
Ich habe meine 2TB 970 Evo Plus durch die NV2 ersetzt, weil Steam "write once, read many" ist.
Aber das tut nichts zur Sache. Das hier ist keine Grundlage für einen Kauf, sondern Neugier/Verständnis.
 
Ich meinte die 1TB 970pro mit MLC um 270 Euro. Die 970evo plus gibt es in der Größe um 43 Euro.
 
  • Gefällt mir
Reaktionen: Sbibi
peljotha schrieb:
Ich meinte die 1TB 970pro mit MLC
Ach, ok. Entschuldige!
Hatte das 970 Pro für einen Tippfehler gehalten! :)
 
Zurück
Oben