Hallo; vielleicht könnte jemand, der tiefer in der Materie steckt als ich, hier ein wenig Licht ins Dunkel der Arbeitsweise von SSDs bringen - ich lerne gern.
Um ihr Wear-Leveling zu ermöglichen, verfügen moderne SSDs über eine Tabelle, in der sie verzeuichnen, welcher logische Block welchem Block auf der SSD zugeordnet ist (Block hier aus Sicht der SSD als gemeinsam zu löschende/schreibende Einheit, nicht aus Sicht des Filesystems). Bei Schreibzugriffen weist die SSD dem zu schreibenden Block möglicherweise eine neue Adresse zu und vermerkt dies in ihrer Zuordnungstabelle.
So weit, so bekannt.
Geschieht das jedes Mal, oder hat die SSD interne Mechanismen (Use-Counter, Pseudozufall...) um festzustellen, daß ein Block mal wieder 'an der Reihe ist', eine neue Zuordnung zu bekommen'?
Die Zugriffstabelle wird (zumindest in Teilen) im DRAM der SSD ge-cachet; bei Ramlosen NVme bestht die Möglichkeit, einen (kleinen) Teil der Tabelle im Hauptspeicher des Hostsystems abzulegen.
Gehe ich zurecht davon aus, daß dieser Cache als Write-Through ausgeführt ist? Ein Write-Back hätte das Risiko, daß im Falle eines Stromausfalls die noch nicht zurückgeschriebenen Änderungen der Tabelle im RAM verlorengehen; das wäre ein ziemlicher Super-GAU. Ich kann mir ein Write-Back höchstens bei SSDs mit Pufferkondensatoren vorstellen, die dann bei Stromsausfall einen Emergency Shutdown durchführen...
Bei Write-Through (oder bei keinem Cache) wären das bei jeder Änderung der Zuordnungstabelle Schreibzugriffe auf den Flash; wie wird hier der Degradation vorgebeugt? Ich benötige einen Weg, beim Booten die Zuordnungstabelle zu finden, kann also die von ihr belegten Blöcke nicht in ihr selbst verzeigern...
Werden die Blöcke dieser Tabelle 'rollierend' mit Datestamp geschrieben (im reservierten Bereich) und die SSD sucht sich beim Bootvorgang die aktuellsten Blöcke heraus?
Wird diese Tabelle im Flash als Pseudo-SLC geschrieben, um die Lebensdauer der entsprechenden Zellen zu erhöhen?
Gibt es eine Art 'Indextabelle', die die Blöcke der Zuordnungstabelle enthält (wäre deutlich kleiner), und diese wird dann rollierend / als Pseudo-SLC abgelegt?
Bin ich auf einem kompletten Holzweg und mache mir Gedanken in die falsche Richtung?
Um ihr Wear-Leveling zu ermöglichen, verfügen moderne SSDs über eine Tabelle, in der sie verzeuichnen, welcher logische Block welchem Block auf der SSD zugeordnet ist (Block hier aus Sicht der SSD als gemeinsam zu löschende/schreibende Einheit, nicht aus Sicht des Filesystems). Bei Schreibzugriffen weist die SSD dem zu schreibenden Block möglicherweise eine neue Adresse zu und vermerkt dies in ihrer Zuordnungstabelle.
So weit, so bekannt.
Geschieht das jedes Mal, oder hat die SSD interne Mechanismen (Use-Counter, Pseudozufall...) um festzustellen, daß ein Block mal wieder 'an der Reihe ist', eine neue Zuordnung zu bekommen'?
Die Zugriffstabelle wird (zumindest in Teilen) im DRAM der SSD ge-cachet; bei Ramlosen NVme bestht die Möglichkeit, einen (kleinen) Teil der Tabelle im Hauptspeicher des Hostsystems abzulegen.
Gehe ich zurecht davon aus, daß dieser Cache als Write-Through ausgeführt ist? Ein Write-Back hätte das Risiko, daß im Falle eines Stromausfalls die noch nicht zurückgeschriebenen Änderungen der Tabelle im RAM verlorengehen; das wäre ein ziemlicher Super-GAU. Ich kann mir ein Write-Back höchstens bei SSDs mit Pufferkondensatoren vorstellen, die dann bei Stromsausfall einen Emergency Shutdown durchführen...
Bei Write-Through (oder bei keinem Cache) wären das bei jeder Änderung der Zuordnungstabelle Schreibzugriffe auf den Flash; wie wird hier der Degradation vorgebeugt? Ich benötige einen Weg, beim Booten die Zuordnungstabelle zu finden, kann also die von ihr belegten Blöcke nicht in ihr selbst verzeigern...
Werden die Blöcke dieser Tabelle 'rollierend' mit Datestamp geschrieben (im reservierten Bereich) und die SSD sucht sich beim Bootvorgang die aktuellsten Blöcke heraus?
Wird diese Tabelle im Flash als Pseudo-SLC geschrieben, um die Lebensdauer der entsprechenden Zellen zu erhöhen?
Gibt es eine Art 'Indextabelle', die die Blöcke der Zuordnungstabelle enthält (wäre deutlich kleiner), und diese wird dann rollierend / als Pseudo-SLC abgelegt?
Bin ich auf einem kompletten Holzweg und mache mir Gedanken in die falsche Richtung?