SSD Funktionsweise

Squicky

Lt. Commander
Registriert
Sep. 2002
Beiträge
1.433
Hallo

Bei normalen HDDs kann ich nachvollziehen, dass das sequenzielle Lesen sehr viel schneller möglich ist, wie das Lesen von zufälligen verteilten Speicheradressen. (Der Lese/Schreibkopf muss nicht hin und her springen. Bei HDDs sind beim Lesen/Schreiben von verteilten Adressen viele mechanische Bewegungen nötig, die viel Zeit benötigen (Zugriffszeit). Beim sequenzielle Lesen/Schreiben muss sich der Kopf kaum bewegen und muss nur die „Spur halten“).

Aber warum sind SSDs beim sequenziellen Lesen viel schnell wie beim zufälligen?
Warum sollte ein SSD für das Lesen der vier Adressen 0x08, 0x09, 0x0A und 0x0B weniger Zeit brauchen, wie für die Adressen 0xB0, 0x0A, 0xC3 und 0x0B?
Der Controller muss doch in beiden Fällen, vier Mal eine Adresse „einstellen“ und diese dann auslesen.

P.S. Einfachheitshalber sollten vier TRIM nicht beachten.

Danke
 
Zuletzt bearbeitet:
Um es kurz zu machen - weil auch SSDs Zugriffszeiten haben, die beim sequentiellen Lesen entfallen? Und bei 64 Threads/4 k-Lesen ~200 MB/s als Langsam zu bezeichnen, weiß ich nicht, wa sich davon halten soll...
 
Nunja ich könnte mir vorstellen, dass das Sequentielle lesen schneller ist, weil der Speichercontroller nicht immer eine neue Adresse laden muss, sondern einfach die aktuelle Adresse um eins erhöhen kann.
So nach dem Motto: X-Increments ist schneller als X-Mal eine Addresse neu zu laden ???

Ich kenne z.B. Speicherbaustein (I²C-Elemente) die erhöhen den Adresspointer nach dem lesen einer Adresse automatisch um eins. Somit muss man beim Sequentiellen lesen nur einmal eine Adresse angeben.
 
Zuletzt bearbeitet:
Auch beim Speicher einer SSD gibt es Speicherblöcke, die zusammenhängend gelesen und beschrieben werden.
Wenn man manche Schreibbenchmarks sieht, könnte man denken, dass diese Blöcke so zwischen 16 und 32 KB groß sind.
Wenn Du nun sagen wir mal alle 32 KB ein Byte schreibst und dass 1000 mal, werden nicht 1000 Bytes geschrieben, sondern 32 MB.
Und diese werden vorher auch noch ausgelesen, dann im Ram geändert und wieder der ganze Block geschrieben. da ja die restlichen alten Daten bestehen bleiben sollen. (es wird nicht nur die Differenz geschrieben).

Selbst bei "normalen" Arbeitsspeicher ist es ähnlich:
Stell Dir vor, Du hast Ram im Dualchannel-Betrieb.
Das heisst, dass immer 128 Bit an einem Stück gelesen und geschrieben werden.
Es macht da keinen Unterschied, ob Du 1 Bit, 1 Byte, oder gleich 16 Byte am Stück schreibst (solange es dieser 128 Bit Block ist).
Aber wehe, Du schreibst 16 Byte über mehrere Adressgrenzen verteilt. Dann ist es nicht ein Schreibzugriff, sondern soviele wie es Adressgrenzen gibt.
 
Die Organisation in Seiten ist der eine Grund.

Zudem müssen natürlich zu jeder Speicheradresse vor dem Laden Adressberechnungen durchgeführt werden, sequentielles Lesen geht vom TLB, Random Access verursacht häufig Seitenfehler, um es kurz zu machen.

Es gibt haufenweise Literatur dazu.
 
Lies mal hier, vielleicht bringt Dir das was. Eaglslake, die Translation Table liegt bei guten SSD im Cache und nur bei schlechten muss diese immer wieder aus dem NAND gelesen werden. Das sind dann SSDs bei denen die IOPS stark vom Adressbereich abhängen über den getestet wird.
 
Alternate 1
Zurück
Oben