Wie schnell ist meine Platte?

  Nikolaus Thiel   Lesezeit: 4 Minuten  🗪 1 Kommentar

Ein einfacher Test der Durchsatzrate eines Speichermediums mit der Kommandozeile.

wie schnell ist meine platte?

Die Geschwindigkeit (Durchsatzrate) eines Speichermediums ist neben der Grösse die wohl wichtigste Kennzahl und der grösste Preistreiber. So macht die herstellende Firma für meine SSD folgende Angaben:

  • liest sequenziell: bis zu 7000 MB/s
  • schreibt sequenziell: bis zu 5100 MB/s

Sequenziell bezeichnet hier die Zugriffsart auf den Datenspeicher, bei der die Datensätze aufeinander folgend angeordnet sind bzw. werden (schreiben). Diese Geschwindigkeiten werden in der Praxis selten erreicht, da sie auch von vielen Faktoren des Systems beeinflusst werden.

In diesem Artikel möchte ich eine Möglichkeit zeigen, wie man die Schreib- und Lesegeschwindigkeiten in der Praxis erfahren kann.

Zum Testen der Lese- und Schreibgeschwindigkeit verwende ich den Befehl dd:

dd (disk dump) dient zum bit-genauen Kopieren von Festplatten, Partitionen oder Dateien. "Bit-genaues" Kopieren bedeutet, dass der Datenträger Bit-für-Bit bzw. Byte-für-Byte ausgelesen und beschrieben wird, unabhängig von dessen Inhalt und Belegung. dd ignoriert Dateisysteme und funktioniert mit allen blockorientierten Datenträgern, also auch mit Daten-CDs/DVDs.

Schreibgeschwindigkeit

Mit dd kopiere ich eine bestimmte Menge an Zeros (Ascii Zeichen 0) in eine Text-Datei. Die Zeros werden vom dummy file /dev/zero generiert. Das Liefern der Zeros beeinflusst nur marginal die Schreibdauer. Um zum Beispiel 4 GiB an Zeros zu generieren und in eine Datei zu schreiben, verwende ich folgenden Befehl:

dd if=/dev/zero of=/tmp/speedTest.txt bs=1MiB count=4096

Die Ausgabe liefert auch gleich die Schreibgeschwindigkeit:

4096+0 Datensätze ein
4096+0 Datensätze aus
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 1.86797 s, 2.3 GB/s

Zu den Optionen:

  • if: input file
  • of: output file
  • bs: block size, Datenmenge, die aufs mal gelesen und geschrieben werden
  • count: Anzahl der input blocks, die geschrieben werden

Die geschriebene Datenmenge ergibt sich aus bs * count, hier 1MiB * 4096 = 4GiB

Die block size hat einen grossen Einfluss auf die Geschwindigkeit:

dd if=/dev/zero of=/tmp/speedTest.txt bs=1GiB count=4
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 2.27554 s, 1.9 GB/s

dd if=/dev/zero of=/tmp/speedTest.txt bs=1KiB count=$((2**22))
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 5.97769 s, 718 MB/s

dd if=/dev/zero of=/tmp/speedTest.txt bs=4 count=$((2**30)) ; echo $?
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 1093.24 s, 3.9 MB/s

Lesegeschwindigkeit

Hier kann man die oben erstellte Zero-Datei verwenden und nach /dev/null kopieren:

dd if=/tmp/speedTest.txt of=/dev/null bs=1MiB count=$((2**12))
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 2.15081 s, 2.0 GB/s

Wird der gleiche Test ein zweites Mal oder direkt nach obigem Schreibtest ausgeführt, so erhält man sehr hohe Leseraten:

dd if=/tmp/speedTest.txt of=/dev/null bs=1MiB count=$((2**12))
4294967296 Bytes (4.3 GB, 4.0 GiB) kopiert, 0.226125 s, 19.0 GB/s

Dies liegt am Caching des Dateisystems. Daher sollte man vor jedem Lesetest den Cache leeren:

sudo sysctl vm.drop_caches=3

Übrigens, die obigen Tests wurden auf einer SSD durchgeführt: 500 GB Samsung 980 PRO (NVMe PCIe 4.0)
Zum Vergleich mein USB-Stick aus dem Jahr 2004:

dd if=/dev/zero of=/media/klt/USBSTAB/zeroes.txt bs=1MiB count=1900
1992294400 Bytes (2.0 GB, 1.9 GiB) kopiert, 115.387 s, 17.3 MB/s

Quelle: https://wiki.ubuntuusers.de/dd/

Tags

Tipps, Performance, Hardware, Speichermedien

Florian
Geschrieben von Florian am 16. Februar 2023 um 07:10

Danke für den Artikel. Ich freue mich immer wieder etwas technisches zu lernen und zu erfahren, dass so viele Aufgaben mit Terminal Befehlen erledigt werden können :)