Linux Festplattengeschwindigkeit prüfen. So messen Sie die Festplattengeschwindigkeit

Original: Testen Sie die Lese-/Schreibgeschwindigkeit von USB- und SSD-Laufwerken mit dem Befehl dd unter Linux
Autor: Silbermond
Erscheinungsdatum: 12. Juli 2014
Übersetzung: N. Romodanov
Übergabedatum: Oktober 2014

Gerätegeschwindigkeit

Die Geschwindigkeit eines Geräts wird in Einheiten dessen gemessen, wie viele Daten es pro Zeiteinheit lesen oder schreiben kann. Der Befehl dd ist ein einfaches Befehlszeilentool, mit dem beliebige Datenblöcke auf einer Festplatte gelesen und geschrieben und die Geschwindigkeit gemessen werden können, mit der eine Datenübertragung stattgefunden hat.

In diesem Artikel verwenden wir den Befehl dd, um die Lese- und Schreibgeschwindigkeit von USB- und SSD-Geräten zu überprüfen.

Die Datenübertragungsgeschwindigkeit hängt nicht nur von der Festplatte ab, sondern auch von der Schnittstelle, über die sie angeschlossen ist. Beispielsweise hat der USB 2.0-Anschluss eine maximale funktionale Geschwindigkeitsbegrenzung von 35 MB/s. Selbst wenn Sie also ein Hochgeschwindigkeits-USB 3-Flash-Laufwerk an den USB 2-Anschluss anschließen, wird die Geschwindigkeit auf einen niedrigeren Wert begrenzt.

Gleiches gilt für das SSD-Gerät. Das SSD-Gerät wird über SATA-Ports angeschlossen, die unterschiedliche Versionen haben. Sata 2.0 hat eine maximale theoretische Geschwindigkeitsbegrenzung von 3 Gbps, was etwa 375 MB/s entspricht. Während SATA 3.0 die doppelte Geschwindigkeit unterstützt.

Testmethode

Mounten Sie das Laufwerk und navigieren Sie von einem Terminalfenster aus dorthin. Verwenden Sie dann den Befehl dd, um zuerst die Datei zu schreiben, die aus Blöcken fester Größe besteht. Lesen Sie dann dieselbe Datei mit derselben Blockgröße.

Die allgemeine Syntax des dd-Befehls lautet wie folgt

Dd if=path/to/input_file of=/path/to/output_file bs=block_size count=number_of_blocks

Beim Schreiben auf die Festplatte lesen wir einfach aus /dev/zero, das die Quelle einer unendlichen Anzahl von Bytes ist. Beim Lesen von der Festplatte lesen wir die zuvor geschriebene Datei und senden sie an /dev/null, das nicht wirklich existiert. Während des gesamten Prozesses überwacht und meldet der Befehl dd die Rate, mit der die Übertragung erfolgt.

SSD-Gerät

Das von uns verwendete SSD-Gerät ist ein "Samsung Evo 120GB" SSD-Laufwerk. Dies ist ein preiswertes SSD-Einstiegsgerät und auch mein erstes SSD-Laufwerk. Es ist auch eine der leistungsstärksten SSDs auf dem Markt.

In diesem Test wird das SSD-Laufwerk an einen SATA-2.0-Port angeschlossen.

Aufnahmegeschwindigkeit

Lassen Sie uns zuerst auf SSD aufnehmen

$ dd if=/dev/zero of=./largefile bs=1M count=1024 1024+0 Datensätze in 1024+0 Datensätze aus 1073741824 Bytes (1,1 GB) kopiert, 4,82364 s, 223 MB/s

Die Blockgröße ist eigentlich ziemlich groß. Sie können versuchen, eine kleinere Größe wie 64 KB oder sogar 4 KB zu verwenden.

Lesegeschwindigkeit

Lesen Sie jetzt im Gegenteil dieselbe Datei. Löschen Sie jedoch zuerst den Speichercache, um sicherzustellen, dass die Datei tatsächlich von der Festplatte gelesen wird.

Führen Sie den folgenden Befehl aus, um den Speichercache zu löschen

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Lesen Sie nun die Datei

$ dd if=./largefile of=/dev/null bs=4k 165118+0 Datensätze in 165118+0 Datensätze aus 676323328 Bytes (676 MB) kopiert, 3,0114 s, 225 MB/s

USB Gerät

In diesem Test messen wir die Lesegeschwindigkeit gewöhnlicher USB-Sticks. Die Geräte werden an Standard-USB-2-Ports angeschlossen.Das erste Gerät ist ein Sony-4-GB-USB-Stick und das zweite ein Strontium-16-GB-Stick.

Schließen Sie zuerst das Gerät an und montieren Sie es lesbar. Navigieren Sie dann von der Befehlszeile aus zum gemounteten Verzeichnis.

Sony 4GB-Gerät - Aufnahme

In diesem Test werden mit dem dd-Befehl 10.000 Datenstücke von jeweils 8 KB in eine einzige Datei auf der Festplatte geschrieben.

# dd if=/dev/zero of=./largefile bs=8k count=10000 10000+0 Datensätze in 10000+0 Datensätze aus 81920000 Bytes (82 MB) kopiert, 11,0626 s, 7,4 MB/s

Die Schreibgeschwindigkeit liegt bei etwa 7,5 MB/s. Dies ist eine niedrige Zahl.

Sony 4GB-Gerät - Lesen

Dieselbe Datei wird gelesen, um die Lesegeschwindigkeit zu testen. Führen Sie den folgenden Befehl aus, um den Speichercache zu löschen

$ sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches"

Lesen Sie nun die Datei mit dem dd-Befehl

# dd if=./largefile of=/dev/null bs=8k 8000+0 Datensätze in 8000+0 Datensätze aus 65536000 Bytes (66 MB) kopiert, 2,65218 s, 24,7 MB/s

Die Lesegeschwindigkeit beträgt ca. 25 MB/s, was bei günstigen USB-Sticks mehr oder weniger Standard ist.

USB 2.0 hat eine theoretische maximale Signalisierungsrate von 480 Mbit/s oder 60 Mbit/s. Aufgrund verschiedener Einschränkungen ist der maximale Durchsatz jedoch auf etwa 280 Mbit/s oder 35 Mbit/s begrenzt. Darüber hinaus hängt die tatsächliche Geschwindigkeit von der Qualität des Flash-Laufwerks sowie von anderen Faktoren ab.

Und da oben USB Gerät wurde an einen USB 2.0 Port angeschlossen und es wurde eine Lesegeschwindigkeit von 24,7 MB/s erreicht, was nicht schlecht ist. Aber die Schreibgeschwindigkeit hinkt weit hinterher.

Jetzt machen wir den gleichen Test mit einem Strontium 16gb Stick. Strontium ist eine andere Marke, die sehr billige USB-Sticks herstellt, aber diese Sticks sind zuverlässig.

Schreibgeschwindigkeit für Strontium 16 GB-Gerät

# dd if=/dev/zero of=./largefile bs=64k count=1000 1000+0 Datensätze in 1000+0 Datensätze aus 65536000 Bytes (66 MB) kopiert, 8,3834 s, 7,8 MB/s

Lesegeschwindigkeit für Strontium 16 GB-Gerät

# sudo sh -c "sync && echo 3 > /proc/sys/vm/drop_caches" # dd if=./largefile of=/dev/null bs=8k 8000+0 Datensätze in 8000+0 Datensätze aus 65536000 Bytes (66 MB) kopiert, 2,90366 s, 22,6 MB/s

Die Datenlesegeschwindigkeit ist langsamer als bei Sony-Geräten.

Um die Schreibgeschwindigkeit der Festplatte zu bestimmen, müssen Sie den folgenden Befehl in der Konsole ausführen:

synchronisieren; dd if=/dev/zero of=tempfile bs=1M count=1024; synchronisieren

Der Befehl schreibt 1024 Mal eine temporäre Datei mit einer Größe von 1 MB und das Ergebnis seiner Arbeit ist die Ausgabe solcher Daten

1024+0 Datensätze empfangen 1024+0 Datensätze gesendet kopiert 1073741824 Byte (1,1 GB), 15,4992 s, 69,3 MB/s

Um die Lesegeschwindigkeit der Festplatte zu ermitteln, müssen Sie den folgenden Befehl in der Konsole ausführen:

Die temporäre Datei, die durch den vorherigen Befehl generiert wurde, wird im Puffer zwischengespeichert, was ihre Lesegeschwindigkeit von selbst erhöht und viel höher ist als die tatsächliche Lesegeschwindigkeit direkt von der Festplatte selbst. Um echte Geschwindigkeit zu erreichen, müssen Sie zuerst diesen Cache leeren.

Um die Lesegeschwindigkeit von einer Festplatte aus einem Puffer zu bestimmen, müssen Sie den folgenden Befehl in der Konsole ausführen:

Dd if=tempfile of=/dev/null bs=1M count=1024

Ausgabe des vorherigen Befehls:

1024+0 Datensätze empfangen 1024+0 Datensätze gesendet kopiert 1073741824 Bytes (1,1 GB), 15,446 s, 69,5 MB/s

Löschen Sie den Cache, um die tatsächliche Lesegeschwindigkeit von der Festplatte zu messen:

sudo /sbin/sysctl -w vm.drop_caches=3

Befehlsausgabe:

vm.drop_caches = 3

Wir führen einen Lesegeschwindigkeitstest durch, nachdem wir den Cache geleert haben:

Dd if=tempfile of=/dev/null bs=1M count=1024 1024+0 Datensätze empfangen 1024+0 Datensätze gesendet kopiert 1073741824 Bytes (1,1 GB), 16,5786 s, 64,8 MB/s

Durchführen eines Lese-/Schreibgeschwindigkeitstests auf einem externen Laufwerk

Um die Geschwindigkeit einer externen Festplatte, eines USB-Flash-Laufwerks oder eines anderen Wechselmediums oder Dateisystems eines Remote-Computers (vps / vds) zu testen, müssen Sie zum Einhängepunkt gehen und die obigen Befehle ausführen.

Oder Sie können statt tempfile natürlich auch den Pfad zum Einhängepunkt wie folgt schreiben:

synchronisieren; dd if=/dev/zero of=/media/user/USBFlash/tempfile bs=1M count=1024; synchronisieren

Sie sollten auch angeben, dass die obigen Befehle die temporäre Datei tempfile verwenden. Vergessen Sie nicht, es nach Abschluss der Tests zu löschen.

HDD-Geschwindigkeitstest mit dem Dienstprogramm hdparm

hdparm ist Linux-Dienstprogramm, mit dem Sie schnell die Lesegeschwindigkeit Ihrer Festplatte ermitteln können.

Um die Lesegeschwindigkeit von Ihrer Festplatte zu messen, müssen Sie den folgenden Befehl in der Konsole ausführen:

sudo hdparm -Tt /dev/sda

Befehlsausgabe in der Konsole:

/dev/sda: Timing zwischengespeicherter Lesevorgänge: 6630 MB in 2,00 Sekunden = 3315,66 MB/s Timing gepufferter Festplattenlesevorgänge: 236 MB in 3,02 Sekunden = 78,17 MB/s

Das ist alles. So konnten wir die Leistungsfähigkeit unserer Festplatte ermitteln und deren Leistungsfähigkeit grob einschätzen.

Es erfordert das Lesen des Handbuchs (man fio), aber es wird Ihnen genaue Ergebnisse liefern. Beachten Sie, dass Sie für jede Genauigkeit genau angeben müssen, was Sie messen möchten. Einige Beispiele:

Sequentielle Lesegeschwindigkeit mit großen Blöcken

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=read --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync= 10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Sequentielle Schreibgeschwindigkeit mit großen Blöcken(Dies sollte in der Nähe der Nummer sein, die Sie in den Spezifikationen für Ihr Laufwerk sehen):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=write --size=500m --io_size=10g --blocksize=1024k --ioengine=libaio --fsync= 10000 --iodepth=32 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Zufälliges 4K-Lesen von QD1(Dies ist die Zahl, die für die Leistung in der realen Welt wirklich wichtig ist, es sei denn, Sie wissen es genau):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randread --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync= 1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Gemischtes zufälliges 4K-Lesen und Schreiben QD1 mit Synchronisierung(Dies ist die Worst-Case-Zahl, die Sie jemals von Ihrem Laufwerk erwarten sollten, normalerweise weniger als 1 % der im Datenblatt aufgeführten Zahlen):

Fio --name TEST --eta-newline=5s --filename=fio-tempfile.dat --rw=randrw --size=500m --io_size=10g --blocksize=4k --ioengine=libaio --fsync= 1 --iodepth=1 --direct=1 --numjobs=1 --runtime=60 --group_reporting

Erhöhen Sie das Argument --size, um die Dateigröße zu erhöhen. Die Verwendung größerer Dateien kann die Anzahl, die Sie erhalten, je nach Laufwerkstechnologie und Firmware reduzieren. Kleine Dateien liefern "zu gute" Ergebnisse für Rotationsmedien, da sich der Lesekopf nicht so stark bewegen muss. Wenn Ihr Gerät fast leer ist, erhalten Sie mit einer Datei, die groß genug ist, um das Laufwerk fast zu füllen, das Worst-Case-Verhalten für jeden Test. Bei SSD spielt die Dateigröße keine so große Rolle.

Beachten Sie jedoch, dass bei einigen Speichermedien die Größe der Datei nicht so wichtig ist wie die Gesamtzahl der in kurzer Zeit geschriebenen Bytes. Beispielsweise können einige SSDs eine deutlich schnellere Leistung mit vorgelöschten Blöcken haben oder einen kleinen SLC-Flash-Bereich haben, der als Schreib-Cache verwendet wird, und die Leistung ändert sich, sobald der SLC-Cache voll ist. Als weiteres Beispiel haben Seagate SMR-Festplatten etwa 20 GB PMR-Cache-Bereich, der eine ziemlich hohe Leistung hat, aber sobald er voll ist, kann das direkte Schreiben in den SMR-Bereich die Leistung so weit wie möglich auf 10 % des Originals reduzieren Natürlich hängt dies alles von Ihrer Arbeitslast ab: ob Ihr Schreibzugriff ist burst mit längeren Verzögerungen, die es dem Gerät ermöglichen, den internen Cache zu bereinigen, kürzere Testsequenzen spiegeln Ihre Leistung in der realen Welt besser wider. IO, Sie müssen sowohl die Parameter --io_size als auch --runtime erhöhen. Beachten Sie, dass einige Medien (z. B. die meisten Flash-Geräte ) werden durch solche Tests zusätzlich abgenutzt. Meiner Meinung nach sollte ein Gerät, das schlecht genug ist, um diese Art von Tests nicht zu bewältigen, auf keinen Fall verwendet werden, um wertvolle Daten zu speichern.

Darüber hinaus verfügen einige hochwertige SSD-Geräte möglicherweise über noch intelligentere Verschleißausgleichsalgorithmen, bei denen der interne SLC-Cache über genügend Intelligenz verfügt, um Daten zu ersetzen, die während des Tests neu geschrieben werden, wenn sie auf denselben Adressraum (d. h. Testdatei) treffen ist kleiner als der gesamte SLC-Cache). Bei solchen Geräten spielt die Dateigröße wieder eine Rolle. Wenn Sie Ihre tatsächliche Arbeitslast benötigen, testen Sie am besten mit Dateigrößen, die Sie tatsächlich im wirklichen Leben sehen werden. Andernfalls sehen Ihre Zahlen möglicherweise zu gut aus.

Beachten Sie, dass fio die erforderliche temporäre Datei beim ersten Start erstellt. Es wird mit zufälligen Daten gefüllt, um zu vermeiden, dass Geräte, die schummeln, indem sie die Daten komprimieren, bevor sie in den permanenten Speicher geschrieben werden, zu gute Zahlen erhalten. Die temporäre Datei heißt in den obigen Beispielen fio-tempfile.dat und wird im aktuellen Arbeitsverzeichnis gespeichert. Sie sollten also zunächst in das Verzeichnis wechseln, das auf dem zu testenden Gerät gemountet ist.

Wenn Sie eine gute SSD haben und noch höhere Zahlen sehen möchten, erhöhen Sie --numjobs oben. Das definiert die Parallelität für die Lese- und Schreibvorgänge. In den obigen Beispielen ist numjobs alle auf 1 gesetzt, sodass es beim Test um das Lesen und Schreiben von Single-Thread-Prozessen geht (möglicherweise mit einer Warteschlange, die mit iodepth festgelegt ist). High-End-SSDs (z. B. Intel Optane) sollten hohe Zahlen erhalten, auch ohne die numjobs stark zu erhöhen (z. B. 4 sollte ausreichen, um die höchsten Spezifikationsnummern zu erhalten), aber einige "Enterprise" -SSDs müssen auf 32 - 128 gehen, um die Spezifikationsnummern zu erhalten weil die Die interne Latenz dieser Geräte ist höher, aber der Gesamtdurchsatz ist verrückt.

mob_info