SSD an Chipsatz ohne TRIM... Folgen?

  • Ja, wie der Threadname schon aussagt, gehts mir darum, was passiert, wenn man eine SSD an einem Chipsatz betreibt.
    Hintergrund ist folgender:
    Ich bin heute recht günstig an ne Toshiba Q300 SSD gekommen und hab die jetzt spaßeshalber mal verbaut. Das System rennt ja irre fix davon.
    Nun isses ja so, daß der nForce4 kein AHCI unterstützt, bzw. nur einen Teil, wenn man das Ganze auf RAID stellt. Somit gibts gewisse pflegende Befehle nicht. Was könnte man da machen? Gibts Tools, mit denen man das erzwingen kann? Macht die Platte das vielleicht selbstständig?
    Hab schon duckduckgo befragt, aber na ja, so richtig schlau werde ich da auch nicht draus.

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • Simple Info?

    Der Preis ist, daß die Schreibleistung einer SSD massiv degradiert. Weit weniger massiv, wenn die SSD Garbage Collection beherrscht, was deine tut. Gibt's Tools? Nein. Wenn dein Controllertreiber das nicht kann, hilft auch kein Tool, Ende.

    Umfangreiche Info? Siehe hier:

    TRIM ist ein ATA Kommando, das von drei Layern im I/O Stack unterstützt werden muß: Vom Dateisystemtreiber, vom SATA/SAS Controller bzw. dessen Firmware, und von der SSD an sich. Das Kommando *muß* vom Dateisystemtreiber oder einem an ihn gebundenen Dienst angewiesen werden, weil das aus logischen Gründen nicht anders gehen kann, s.u. Die Q300 (in 15nm wie 19nm Ausführung) basiert auf einem Controller der Toshiba Alishan Familie, der Garbage Collection beherrscht, daher brauchst dir wohl nicht wirklich so viele Sorgen zu machen. Details zum GC Algorithmus bzw. dessen Funktionalität kann ich nicht bereitstellen, weil das unter Verschluß liegt. Es "soll funktionieren". Jo.

    Details: Das TRIM Problem resultiert aus einem Auflösungsproblem: Der I/O Scheduler des Betriebssystems löst feiner auf, als das darunter liegende Blockdevice. Der I/O Scheduler will z.B. einen 512 Byte Sektor schreiben, das kleinste adressierbare Atom auf einer SSD ist aber ggf. 512kiB oder 1MiB groß. Sprich: Es kann nichts kleineres adressiert werden. I/O Scheduler basieren aber nach wie vor auf sehr altem Code, der keine derartig riesigen Sektorgrößen unterstützen kann, daher emulieren SSDs 512b oder 4Kn Sektoren.

    Wenn das OS also 512 Bytes schreibt, schreibt die SSD z.B. 1MiB, ohne zu wissen wo genau innerhalb der 1MiB diese "echten" 512b Daten liegen (Die SSD *kann* das nicht wissen, wenn der Controller auf der SSD einfach nichts kleineres als 1MiB ansprechen kann). Wenn du also eine 1GiB SSD hast, besteht die ggf. aus 1024 Blöcken zu je 1MiB. Wenn du jetzt 1024×512 Bytes schreibst (mit großen Zeitabständen), kannst du mit nur 512kiB alle Blöcke der SSD beschrieben haben. Es ist NICHTS mehr frei! Warum? Weil die SSD nicht genau weiß, wo die Daten liegen, und wie groß sie sind. Für das Betriebssystem waren es 1024 Writes mit je 512b Größe. Für die SSD waren das aber 1024 Writes mit je 1MiB Größe, die 1GiB SSD ist jetzt also "voll".

    Das stimmt auf Blockdeviceebene, aber das Dateisystem weiß natürlich, daß das nicht die ganze Wahrheit ist. Leider isses aber nicht so simpel, auf einer hohen Ebene feingranular zu arbeiten, wenn die untere Ebene das nicht kann.

    Jetzt kommt noch ein Schreibrequest rein, das Dateisystem will nochmals 512b schreiben. Das GEHT aber nicht mehr, weil die SSD nicht weiß wohin. Alle für die SSD 1MiB großen Atome sind "voll", sie kann ja nichts feingranulareres ansprechen.

    Nun passiert der Read-Modify-Write Zyklus: Die SSD wählt einen beliebigen 1MiB Block aus, und es kommt zu einem vollständigen Einlesen dieses Blocks. Er wird ans Betriebssystem zurückgereicht. Das Betriebssystem bzw. dessen Dateisystemtreiber weiß, welcher (kleine) Dateisystemblock wie genau zu welchem (logischen, größeren!) Datenträgerblock passt, und wo genau innerhalb des Datenträgerblocks der entsprechende Dateisystemblock liegt. Derartige Infos sind in der $MFT oder in inode Tables oder in FATs hinterlegt. Der Block wird also von der SSD gelesen, dann mit den neuen 512b im System RAM modifiziert, wonach die ganzen 1MiB wieder über den alten Block überschrieben werden.

    Das ist der Preis, den man zahlt, wenn man eine SSD ohne TRIM und GC betreibt. Diese Zyklen sind teuer.

    Was macht TRIM? Es liest die Dateisystemstruktur aus $MFT, inodes, FATs oder was auch immer ein, und sucht SSD Blöcke die nach Löschoperationen* am Dateisystem wieder frei sein müßten. Diese SSD Blöcke werden genullt, und damit als "frei" markiert. Die SSD kann nun wieder volle 1MiB Blöcke schreiben, ohne diese erst vorher einlesen und kompliziert modifizieren zu müssen. Sprich: Die feingranularere Adressierungsebene des Dateisystems wird mit der grobgranulareren der SSD synchronisiert, soweit als möglich.

    The End.

    *Löschoperationen sind reine "Pointer Removals" im Dateisystem. Die SSD kriegt davon nichts mit, die SSD Blöcke bleiben also "schmutzig" ohne TRIM.

    Ich hoffe, ich habe das nicht zu kompliziert oder verwirrend geschrieben...

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Danke für die ausführliche Erläuterung. Also kann eine SSD GC in Hardware und somit selbstständig machen, aber TRIM nicht. Degradieren tut eine SSD ja sowieso, aber wahrscheinlich wird sie das eben etwas schneller als mit TRIM.
    Der nForce4 beherrscht SATA2 und somit 300 MB/s. Ich weiß nicht, wieviel am Ende davon übrig bleiben, aber es ist schon recht gut unterwegs :spitze:
    Vielleicht sollte ich mir dafür nen SATA-Controller für PCIe zulegen, der TRIM auch unterstützt. Ist ja noch ein x16-Slot frei :spitze:

    "Du bist und bleibst a Mensch und du kannst eben net deine menschlichkeit überwinden."

    Dennis_50300

  • Ich hab schon viele SSDs in alte Systeme ohne TRIM verbaut, teilweise mit IDE Adaptern. Geschwindigkeits einbußen gibt es bestimmt, aber diese sind kaum messbar bei den alten Möhren. Die meisten Erfahrungen hab ich mit einer alten Kingstom V100 SSD gesammelt. Diese wurde von mir mal so richtig gequält in einem nForce 3 System.

    Die Garbage Collection hat das alles so sauber geregelt das es keinen Geschwindigkeitsverlust gab. Ich hab die SSD dann in ein SATA3 System gepackt (IDE Mode) und sie nochmal gebencht, sie war genau so schnell wie immer (um die 220MB/sec lesen und 110MB/sec schreiben, mehr kann das Ding eh nich).

  • Ein kurzes Kommentar zur Alternative:
    Ich habe eine 32GB Lexar Compact Flash Karte mit 150MB/s Lesen, 50MB/s Schreiben da.
    Dazu habe ich einen CF zu IDE Adapter.

    Ergebnis: Auch eine schnelle CF Karte ist nicht als SSD Ersatz brauchbar.
    Die Karte ist schnell beim schreiben einzelner großer Dateien, aber bei mehrfachen kleinen Zugriffen wird sie unendlich langsam.
    Deutlich langsamer als eine alte 20GB Festplatte.
    Das geht bei Windows 98 noch ganz passabel, ist aber bei neueren Versionen absolut unbrauchbar.
    Problem: Windows Hintergrundprozesse. :rolleyes:

    Come to the dark side, we have cookies!