NVMe ssd: Warum schreibt 4k schneller als liest?

51

Ich habe eine Samsung 960 Pro 512 GB SSD auf NVMe mit PCIe Gen.3x4. Ich benutze den Samsung NVMe Driver 2.0.0.1607. Die SSD läuft einwandfrei. Ich verstehe jedoch nicht, warum das Schreiben von 4k schneller ist als das Lesen von 4k. Ich benutze AS Benchmark:

Bildbeschreibung hier eingeben

Es ist ein Faktor von 3! Stimmt etwas nicht (mit meinem System oder AS Benchmark) oder ist das normal?

musbach
quelle
Und trotzdem so viel schneller als eine rotierende Festplatte!
Zan Lynx

Antworten:

76

Bei 4k-Lesevorgängen geht es um das Schwierigste, was das Laufwerk tun kann. Sie gehören zu den kleinsten Blockgrößen, die das Laufwerk verarbeiten kann, und das Laufwerk kann keine großen Datenmengen vorab laden. Wahrscheinlich sind sie sogar ineffizient, wenn die Load-Ahead-Logik des Laufwerks etwas lesen möchte größer als 4kb.

"Normale" Laufwerkslesevorgänge sind mit größerer Wahrscheinlichkeit größer als 4 KB, da nur sehr wenige Dateien so klein sind und sogar die Auslagerungsdatei mit großer Wahrscheinlichkeit in großen Blöcken gelesen wird, da es für ein Programm ungewöhnlich wäre, "nur" Dateien zu haben. 4 KB Speicher ausgelagert. Dies bedeutet, dass jedes Vorladen, das das Laufwerk versucht, den Durchsatz des Laufwerks beeinträchtigt.

4K-Lesevorgänge passieren möglicherweise den Laufwerkspuffer, aber der "zufällige" Teil des Tests macht sie völlig unvorhersehbar. Der Controller weiß nicht, wann das Laufwerk möglicherweise wieder die üblichen "großen" Lesevorgänge benötigt.

Andererseits können 4K-Schreibvorgänge auf effiziente Weise nacheinander gepuffert, in eine Warteschlange gestellt und ausgeschrieben werden. Der Laufwerkspuffer kann einen Großteil der Catch-and-Write-Arbeit erledigen, für die er entwickelt wurde, und der Wear Leveler kann sogar alle diese 4-KB-Schreibvorgänge demselben Laufwerkslöschblock zuweisen, wobei gelegentlich ein 4-KB-Zufallsschreibvorgang erstellt wird Etwas näher an einem sequentiellen Schreiben.

Tatsächlich vermute ich, dass dies bei den "4K-64Thrd" -Schreibvorgängen der Fall ist, da "64-Thrd" offenbar eine große Warteschlangentiefe verwendet und damit dem Laufwerk signalisiert, dass es eine große Datenmenge zum Lesen oder Schreiben hat . Dies löst eine große Anzahl von Schreibclustern aus und nähert sich so der sequentiellen Schreibgeschwindigkeit des Laufwerks an. Das Ausführen eines 4-KB-Schreibvorgangs ist immer noch mit einem Mehraufwand verbunden, aber jetzt können Sie das Potenzial des Puffers voll ausschöpfen. In der Leseversion des Tests stoppt der Antriebsregler das Vorladen von Daten, umgeht möglicherweise den Puffer und wechselt stattdessen in einen "unformatierten" Lesemodus, wobei er sich wieder der sequentiellen Lesegeschwindigkeit nähert.

Grundsätzlich ist der Antriebsregler kann tun , was einen 4K Schreib effizienter zu machen, vor allem , wenn ein Cluster von ihnen zu einem ähnlichen Zeitpunkt ankommen, während sie nichts tun können , eine machen einziger 4K las effizienter zu gestalten , vor allem , wenn es zu optimieren versucht Datenfluss durch Vorabladen von Daten in den Cache.

Mokubai
quelle
5
Kein Teil der Antwort selbst, aber ich vermute, dass das "4K-Lesen" (keine 64Thrd-Version) tatsächlich die Standard-Leseblockgröße des Laufwerks als 32K oder 64K anzeigt. Dies wäre entweder 2600/50 = 52 (64K mit etwas Overhead + dem ursprünglichen 4K-Lesevorgang) oder 1200/50 = 24 (32K mit etwas Overhead + dem 4K-Lesevorgang, der ihn reduziert).
Mokubai
16
Insgesamt eine gute Antwort, aber ich glaube nicht, dass "es sehr wenige Dateien gibt, die so klein sind". Tatsächlich vermute ich, dass auf den meisten Systemen die meisten Dateien 4 KB oder kleiner sind. Sie nehmen nicht den größten Teil des Platzes ein , aber das ist eine andere Sache.
Hobbs
3
Die einfachste Antwort lautet wahrscheinlich: Wenn Sie sie einzeln ausführen, können Sie die Lesevorgänge überhaupt nicht überlappen, da Sie nicht einmal herausfinden, für welchen Block der nächste Lesevorgang bestimmt ist, bis Sie die Daten des vorherigen Lesevorgangs zurückgeben. Sie können die Schreibvorgänge jedoch vollständig überlappen, da Sie alle Daten für den nächsten Schreibvorgang abrufen können, während Sie noch an dem vorherigen arbeiten.
David Schwartz
2
@hobbs Wenn Sie beispielsweise NTFS verwenden, ist die Standardclustergröße 4 KB (oder ein Vielfaches davon), was bedeutet, dass das NTFS-Dateisystem selbst in 4-KB-Blöcken arbeitet, obwohl die Dateien und / oder Metadaten selbst kleiner sind. Kleinere Dateien machen also keinen Unterschied. Für alle Zwecke und Zwecke liest / schreibt ein Windows-System in 4K-Blöcken oder einem Vielfachen davon.
Tonny
1
@hobbs: Mit NTFS können Sie solche kleinen Dateien wahrscheinlich kostenlos (!) lesen. Kleine Dateien werden im Verzeichniseintrag selbst neben dem Dateinamen gespeichert. Sie müssen eine bestimmte Dateigröße nahe 4 KB erreichen, um eine tatsächliche 4-KB-Datei auf der Festplatte zu haben.
MSalters
16

Andere Antworten haben bereits erklärt, warum das Schreiben möglicherweise schneller ist als das Lesen. Ich möchte hinzufügen, dass dies für dieses Laufwerk absolut normal ist, da es durch Benchmarks bestätigt wird, die Sie in Bewertungen finden.

Die Rezension von ArsTecnica

ArsTechnica hat das Laufwerk überprüft, sowohl Ihre Version (512 GB) als auch die mit 2 TB:

ArsTechnica (Diese Grafik ist in der Rezension nicht sofort sichtbar, es ist die 5. in der ersten Galerie, Sie müssen darauf klicken.)

Die Leistung dieser beiden Modelle ist sehr ähnlich, und ihre Anzahl entspricht Ihrer: Das Laufwerk kann mit 37 MB / s lesen und mit 151 MB / s schreiben.

AnandTechs Bewertung

AnandTech hat auch das Laufwerk überprüft: Es verwendete das 2-TB-Modell und ermittelte die Testergebnisse mit einer Warteschlangentiefe von 1, 2 und 4. Dies sind die Diagramme:

AnandTech 4K lesen AnandTech 4K schreiben

Das Laufwerk liest mit 137 MB / s und schreibt mit 437 MB / s. Die Anzahl ist viel höher als Ihre, aber wahrscheinlich liegt es an den höheren Warteschlangentiefen. Wie in Ihrem Fall ist die Schreibgeschwindigkeit dreimal so hoch wie die Lesegeschwindigkeit.

PC Worlds Rückblick

Noch eine Bewertung von PC World : Sie haben die 1-TB-Version getestet, und die Ergebnisse für 4K lauten 30 MB / s zum Lesen und 155 MB / s zum Schreiben: PC-Weltdiagramm Die Schreibgeschwindigkeit stimmt mit Ihrer überein, aber hier ist das Laufwerk noch langsamer beim Lesen. Das Ergebnis ist ein Verhältnis von fünf zu eins und nicht von drei zu eins.

Fazit

Überprüfungen bestätigen, dass es bei diesem Laufwerk normal ist, dass die Schreibgeschwindigkeit für zufällige 4K-Dateien viel höher ist als die Lesegeschwindigkeit: Je nach Test kann sie sogar fünfmal höher sein.

Ihre Fahrt ist in Ordnung. Es gibt keinen Grund zu der Annahme, dass es fehlerhaft ist oder dass Ihr System ein Problem hat.

Fabio sagt Reinstate Monica
quelle
8

SSD-Controller speichert Schreibvorgänge im integrierten NVRAM und speichert sie zu geeigneten Zeiten auf Flash-Medien. Die Schreiblatenz ist somit die Cache-Zugriffslatenz, typischerweise 20us. Lesevorgänge werden dagegen medienfern mit einer Zugriffszeit von höchstens 120-150us bereitgestellt.

Andrey Kuzmin
quelle
1

Um die Antwort von Andrey zu erweitern, müssen Sie sich den damit verbundenen Overhead ansehen, bevor die SSD dem Computer signalisieren kann, dass der Vorgang abgeschlossen ist.

Zum Schreiben müssen die Daten lediglich in einen internen RAM-Cache geschrieben werden. Später wird es zusammen mit anderen 4k-Blöcken und Metadaten, die zur Überprüfung, Fehlerkorrektur und Lokalisierung benötigt werden, in den Flash-Speicher geschrieben.

Zum Lesen muss die SSD zuerst die Daten lokalisieren. Der Speicherort, den der Computer lesen möchte, wird als logische Adresse bezeichnet und hat keine direkte Beziehung zum physischen Speicherort der Daten im Flash-Speicher. Die SSD wandelt die logische Adresse in eine physikalische Adresse um, basierend auf der Geometrie des Flash-Speichers (der Art und Weise, wie die Zellen angeordnet sind), der Neuzuordnung von fehlerhaften Blöcken, dem Wear Leveling und verschiedenen anderen Faktoren. Es muss dann warten, bis alle anderen Vorgänge abgeschlossen sind, bevor es die Daten aus dem Flash abruft, sie überprüft und gegebenenfalls erneut liest und die Fehlerkorrektur anwendet, möglicherweise sogar den gesamten Block an einer anderen Stelle neu schreibt.

Während die Gesamtzeit für eine Schreiboperation länger sein kann als für eine typische Leseoperation, ist die Zeit, die die SSD benötigt, um zu melden, dass die Operation abgeschlossen ist, soweit sie weitere Befehle verarbeiten kann, geringer. Bei großen Blöcken ist der Overhead nicht der begrenzende Faktor, aber bei vielen kleinen Blöcken beginnt er, die Lese- / Schreibgeschwindigkeit zu begrenzen.

user3241
quelle