Warum sind 4k-Lesevorgänge in hdd / ssd-Benchmarks langsamer als Schreibvorgänge?

8318
mgutt

Zum Testen der Geschwindigkeit eines PC-Laufwerks stehen verschiedene Benchmark-Tools zur Verfügung.

Hier ist ein Benchmark-Beispiel für eine SATA-SSD:

  • Sequenzielles Lesen: 718,498 MB / s
  • Sequenzielles Schreiben: 777,414 MB / s
  • Random Read 512KB: 160.541 MB / s
  • Zufälliges Schreiben 512 KB: 838,930 MB / s
  • Zufälliges Lesen 4 KB (QD = 1): 26,985 MB / s [6588,1 IOPS]
  • Zufälliges Schreiben 4 KB (QD = 1): 135,603 MB / s [33106,2 IOPS]
  • Random Read 4KB (QD = 32): 177.003 MB / s [43213.6 IOPS]
  • Zufälliges Schreiben 4 KB (QD = 32): 178,397 MB / s [43554,0 IOPS]

m 2 SSD:

  • Sequentieller Lesevorgang (Q = 32, T = 1): 829,119 MB / s
  • Sequenzielles Schreiben (Q = 32, T = 1): 677,645 MB / s
  • Zufälliges Lesen 4KiB (Q = 32, T = 1): 744.328 MB / s [181720.7 IOPS]
  • Zufälliges Schreiben 4KiB (Q = 32, T = 1): 144.876 MB / s [35370.1 IOPS]
  • Sequentieller Lesevorgang (T = 1): 785.600 MB / s
  • Sequentielles Schreiben (T = 1): 789,973 MB / s
  • Zufälliges Lesen 4KiB (Q = 1, T = 1): 56,585 MB / s [13814,7 IOPS]
  • Zufälliges Schreiben 4KiB (Q = 1, T = 1): 170.449 MB / s [41613.5 IOPS]

HDD:

  • Sequenzielles Lesen: 114,988 MB / s
  • Sequentielles Schreiben: 111.043 MB / s
  • Random Read 512KB: 39.260 MB / s
  • Zufälliges Schreiben 512 KB: 57.409 MB / s
  • Zufälliges Lesen 4 KB (QD = 1): 0,546 MB / s [133,4 IOPS]
  • Zufälliges Schreiben 4 KB (QD = 1): 0,757 MB / s [184,9 IOPS]
  • Zufälliges Lesen 4 KB (QD = 32): 1,582 MB / s [386,3 IOPS]
  • Zufälliges Schreiben 4 KB (QD = 32): 0,700 MB / s [171,0 IOPS]

In jedem Fall ist "Random Read 4KB Q1" langsamer als das Schreiben und in den meisten Fällen ist es das Gegenteil von "QD32".

In einigen Foren sagen die Leute, es sei eine Einschränkung bezüglich der SSD-Chipstruktur, aber wie üblich zeigen Festplatten das gleiche Verhalten, es scheint ein anderer Grund zu sein ?!

7

1 Antwort auf die Frage

5
Mr Alpha

TL; DR: Dies liegt daran, dass die SSD Sie anlügt und sagt, dass das Schreiben erfolgt, bevor es erfolgt ist. Es kann nicht dasselbe für Lesezugriffe durchkommen.

Die längere Version der Antwort ist das Schreib-Caching.

Beginnen wir mit dem Fall QD1. Die SSD meldet den Schreibvorgang als abgeschlossen, sobald sie die Daten erhalten hat, und speichert sie in einem lokalen Cache des Laufwerks, aber bevor sie tatsächlich in das NAND geschrieben wurde. Dies macht einen großen Unterschied, da das Schreiben von Daten in NAND tatsächlich ziemlich langsam ist. Für Lesevorgänge muss er tatsächlich die Daten von NAND lesen, bevor er sie zurücksenden kann (es sei denn, er hat sie zuvor gelesen und befindet sich noch im Cache, was bei zufälligen Lesevorgängen jedoch sehr unwahrscheinlich ist).

Der Nachteil ist, dass bei plötzlichen Stromausfällen Daten auf die SSD geschrieben werden können, die aber noch nicht zum NAND gelangt sind. Einige Unternehmens-SSDs enthalten einen Superkondensator, der genug Strom speichert, um das Schreiben der Daten im Cache in NAND zu beenden, falls ein plötzlicher Stromausfall auftritt.

Das Gleiche gilt für Festplatten, da diese auch Schreib-Caching ausführen. Sie sind einfach nicht annähernd so aggressiv. Warum ist die SSD so aggressiv? Um dies zu beantworten, müssen wir uns mit dem QD32-Fall befassen, der sowohl komplizierter als auch interessanter ist.

Es stimmt nicht, was Sie sagen, dass zufällige Lesevorgänge im Allgemeinen schneller sind als zufällige Schreibvorgänge bei QD32. Es hängt sehr stark davon ab, welche SSDs Sie sich ansehen.

Betrachtet man 4k QD1-Zufallswerte auf vielen SATA-SSDs, scheinen sie alle im Bereich von 20 bis 30 MB / s zu liegen. Warum das? Dies liegt daran, dass zufällige 4k-QD1-Lesevorgänge hauptsächlich Latenzen und nicht den Durchsatz betreffen. Die Latenz kommt aus drei Teilen:

  1. Die Schnittstellenlatenz von SATA / AHCI, bei der das Laufwerk informiert wird, was zu tun ist, und die Daten gesendet werden.
  2. Der Controller selbst muss herausfinden, was er mit den Daten und Anweisungen tun soll, die er erhalten hat.
  3. Die Zeit, die zum Lesen oder Schreiben der Daten in einen NAND-Die benötigt wird.

Weder 1. noch 3. änderte sich nach langer Zeit sehr, weshalb sich auch die 1k-QD1-Zufallswerte nicht wesentlich verändert haben.

Die kürzlich erfolgte Umstellung von SSDs von SATA / AHCI auf PCIe / NVMe hat die Latenzzeit von 1 erheblich reduziert. Aus diesem Grund haben einige SSDs von m.2 und PCIe hier in letzter Zeit deutliche Verbesserungen erzielt.

Ein SSD-Controller kann bei der Latenz große Hilfe leisten, indem er parallel auf mehrere NAND-Dies liest und schreibt und somit den Großteil der Latenz von 3 maskiert. Wenn Sie QD32 4k-Zufallslesevorgänge mit NCQ ausführen, kann die SSD den Lesevorgang durchführen Anfragen außerhalb der Reihenfolge und stellen Sie sicher, dass so viele NAND-Dies parallel wie möglich gelesen werden.

Bei QD32 4k-Zufallsschreibvorgängen führt die SSD eine so genannte Schreibkombination aus. Wenn viele kleine Schreibanforderungen in den SSD-Controller gestellt werden, speichert der SSD-Controller diese lokal, und wenn sich ein ausreichend großer Schreibpuffer aufgebaut hat, teilt der Controller ihn in recht große Blöcke auf und schreibt die Blöcke in mehrere NAND-Dies parallel, um die Maskierung zu vereinfachen NAND-Latenzzeit Ein weiterer Vorteil des Schreibkombinierens ist, dass die meisten SSDs heutzutage eine Seitengröße (kleinste Menge, die gelesen oder geschrieben werden kann) größer als 4k haben. Durch das Kombinieren von Schreibvorgängen, bis Sie die Seitengröße erreichen, können Sie viel Schreibverstärkung vermeiden. Um diese Dinge zu tun, sind SSDs beim Schreib-Caching so aggressiv.