Windows WriteFile-Leistung (SSD vs. HDD)?

525
Gregory Kontadakis

Diese Frage ist an folgende Beobachtung gebunden:

https://social.technet.microsoft.com/Forums/exchange/en-US/09dd046e-8127-4550-8e26-5fba7a5a0743/performance-flaw-in-file-in-file-system-decreases-writefile-throughput-towards-0? forum = winserverfiles

Dies bezieht sich auf das Schreiben einer einzelnen großen Datei mit hoher Geschwindigkeit auf die Festplatte.

Ich versuche, etwas Ähnliches zu tun, indem ich einen Benchmark darüber verfasse, wie sich das Schreiben einer großen Datei (mindestens 30 GB) auf einer SSD (Betriebssystem ist Windows 7) verhält. Die Basis des Testcodes finden Sie unter dem Link oben (Verknüpfung hier: http://www.quicklz.com/write.c ).

Die Ergebnisse zum Erstellen einer einzelnen 30 GB-Datei finden Sie in der folgenden Tabelle. Die Chunk-Größe (auf Platte geschrieben) ist 256 KiB (mit _aligned_malloc bei 4096 KiB physischer Seitengröße unter NTFS) ausgerichtet. Es wurden auch größere Chunk-Größen (z. B. 1 GB) ausprobiert, die Ergebnisse waren jedoch ähnlich. Die erste Spalte ist die Dateigröße, die in jeder Iteration erstellt wird (in der Nähe von jeweils 1 GB), und die Spalten 2-5 sind die für HDD / SSD mit "Caching / Pufferung" (Standardoption in WriteFile ) festgestellten Schreibgeschwindigkeiten im Vergleich zu "No Buffering" / caching "case (Siehe CreateFile- Flag FILE_FLAG_NO_BUFFERING). Im Windows-Caching-Fall entscheidet das Betriebssystem, wann FlushFileBuffers (nicht explizit) aufgerufen wird.

+-----------+---------------+--------------+---------------+--------------+ | File Size | Win cache HDD | No cache HDD | Win cache SSD | No cache SSD | +-----------+---------------+--------------+---------------+--------------+ | 1024 MiB | 3282 MiB/s | 205 MiB/s | 2626 MiB/s | 187 MiB/s | | 2048 MiB | 2853 MiB/s | 203 MiB/s | 2626 MiB/s | 383 MiB/s | | 3072 MiB | 2861 MiB/s | 207 MiB/s | 3132 MiB/s | 388 MiB/s | | 4097 MiB | 2977 MiB/s | 198 MiB/s | 2626 MiB/s | 393 MiB/s | | 5121 MiB | 2986 MiB/s | 206 MiB/s | 2731 MiB/s | 388 MiB/s | | 6145 MiB | 3282 MiB/s | 200 MiB/s | 2626 MiB/s | 199 MiB/s | | 7169 MiB | 33 MiB/s | 201 MiB/s | 215 MiB/s | 377 MiB/s | | 8194 MiB | 2626 MiB/s | 201 MiB/s | 287 MiB/s | 197 MiB/s | | 9218 MiB | 2626 MiB/s | 207 MiB/s | 317 MiB/s | 345 MiB/s | | 10242 MiB | 2853 MiB/s | 197 MiB/s | 215 MiB/s | 181 MiB/s | | 11266 MiB | 3122 MiB/s | 202 MiB/s | 375 MiB/s | 343 MiB/s | | 12291 MiB | 3282 MiB/s | 202 MiB/s | 368 MiB/s | 209 MiB/s | | 13315 MiB | 187 MiB/s | 199 MiB/s | 194 MiB/s | 362 MiB/s | | 14339 MiB | 145 MiB/s | 201 MiB/s | 329 MiB/s | 356 MiB/s | | 15363 MiB | 140 MiB/s | 205 MiB/s | 125 MiB/s | 195 MiB/s | | 16388 MiB | 135 MiB/s | 195 MiB/s | 220 MiB/s | 360 MiB/s | | 17412 MiB | 126 MiB/s | 204 MiB/s | 279 MiB/s | 196 MiB/s | | 18436 MiB | 124 MiB/s | 195 MiB/s | 269 MiB/s | 103 MiB/s | | 19460 MiB | 129 MiB/s | 199 MiB/s | 242 MiB/s | 104 MiB/s | | 20485 MiB | 137 MiB/s | 203 MiB/s | 189 MiB/s | 107 MiB/s | | 21509 MiB | 128 MiB/s | 198 MiB/s | 120 MiB/s | 116 MiB/s | | 22533 MiB | 134 MiB/s | 202 MiB/s | 109 MiB/s | 107 MiB/s | | 23557 MiB | 137 MiB/s | 194 MiB/s | 112 MiB/s | 113 MiB/s | | 24582 MiB | 135 MiB/s | 204 MiB/s | 107 MiB/s | 102 MiB/s | | 25606 MiB | 131 MiB/s | 194 MiB/s | 122 MiB/s | 101 MiB/s | | 26630 MiB | 130 MiB/s | 200 MiB/s | 151 MiB/s | 108 MiB/s | | 27654 MiB | 139 MiB/s | 199 MiB/s | 108 MiB/s | 117 MiB/s | | 28679 MiB | 130 MiB/s | 206 MiB/s | 104 MiB/s | 103 MiB/s | | 29703 MiB | 121 MiB/s | 195 MiB/s | 105 MiB/s | 107 MiB/s | | 30727 MiB | 132 MiB/s | 203 MiB/s | 102 MiB/s | 104 MiB/s | +-----------+---------------+--------------+---------------+--------------+ 

Einige Beobachtungen hier:

Beide Win-Cache-Fälle (SSD und HDD) sind aufgrund des Windows-Cachings zunächst sehr schnell. Dann sinkt die Rate.

Auf dem Festplattengehäuse ohne Zwischenspeicherung sehen wir eine stabile Rate (und eine ok Rate für meine Festplatte, da sie etwa 207 MB / s beträgt).

Im SSD-Fall ohne Zwischenspeicherung können wir sogar die schlechteste Rate im Vergleich zum HDD-Fall feststellen.

Also endlich zu meiner Frage:

Warum?

Warum bekomme ich die schlechtesten Raten, wenn ich auf einer SSD keine Pufferung verwende? Wo ist der Engpass? Windows-Betriebssystembehandlung Eigenes SSD-Verhalten? Oder sowohl Software als auch Hardware?

Kann ich eine konstantere Übertragungsrate als bei der Festplatte erreichen (aber höher)? Wenn meine SSD eine Schreibgeschwindigkeit von 340 MB / s hat, kann ich dies mit einer konstanten Rate erreichen?

Bitte lassen Sie mich verstehen, was ich hier ignoriere.

1
Neuere TLC-NAND-SSDs verwenden einen Cache aus schnellerem MLC oder SLC-NAND, um Schreibvorgänge in den langsameren TLC-Speicher zu puffern. Ich vermute, dass der Puffer in Ihrem Laufwerksfall etwa 16 GB beträgt. Mokubai vor 5 Jahren 0
Danke für die Info @Mokubai. Ich war nicht gut informiert über die verschiedenen Arten von NAND. Ich schätze, ich kann keine andere konstante Rate erreichen, als der langsame TLC meines Laufwerks bieten kann (selbst wenn ich die Blockgröße in ein Vielfaches von 3 oder etwas ändere). Gregory Kontadakis vor 5 Jahren 0

1 Antwort auf die Frage

0
Mokubai

Grundsätzlich verwenden die meisten modernen billigen SSDs TLC-NAND-Flash, was im Vergleich zu MLC- oder SLC-NAND-Flash-Speichern relativ langsam ist.

Es bietet jedoch eine viel höhere Kapazität, und die Lesegeschwindigkeit ist mit den anderen Typen vergleichbar, was für das "normale" System zufällige Lese- / Schreibprofile durchaus akzeptabel sein kann.

Im Allgemeinen erhöhen sie diese langsame Schreibgeschwindigkeit durch Hinzufügen eines Schreibpuffers aus schnellerem NAND, der die Leistung auf fast normale Werte bringen kann, bis der Puffer gefüllt ist.

Sobald der Puffer gefüllt ist, werden alle Schreibvorgänge auf das Laufwerk dadurch eingeschränkt, wie schnell Daten in das langsamere NAND geschrieben werden können.

Weitere Informationen finden Sie unter TLC-NAND-SSDs

Sie können sich nur die Spezifikationen für die von Ihnen gekauften Laufwerke genau ansehen und sicherstellen, dass Sie eines erwerben, das TLC NAND nicht verwendet. Diese Informationen sind möglicherweise schwer zu finden und die "konstant schnellen" Laufwerke werden wahrscheinlich erheblich teurer sein.