Festplatten-Geschwindigkeitstest
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Hinweis:
Dieser Artikel geht in allen Beschreibungen davon aus, dass die Festplatte als /dev/sda im System eingebunden ist. Die Befehle müssen bei davon abweichenden Systemen daher gegebenenfalls angepasst werden.
Auf dieser Seite werden Möglichkeiten genannt, die Geschwindigkeit von Festplatten zu messen. Insbesondere bei SSD kann durch geeignete Konfiguration die Geschwindigkeit bei Lese- und Schreibvorgängen verbessert werden. Um nachvollziehen zu können, ob eine Optimierung etwas gebracht oder das Gegenteil bewirkt hat, kann es helfen, die Festplatte einem Geschwindigkeitstest („Benchmark“) zu unterziehen.
Achtung!
Eine Ermittlung der Lesegeschwindigkeit nach den in diesem Artikel beschriebenen Methoden ist harmlos, dagegen kann eine Ermittlung der Schreibgeschwindigkeit insbesondere bei SSDs diese nachhaltig beschädigen.
Zur Geschwindigkeitsmessung kann man beispielsweise das GUI-Programm Laufwerksverwaltung oder auf der Kommandozeile das Programm bonnie++ oder wie unten beschrieben die Befehle hdparm bzw. dd verwenden.
Laufwerksverwaltung¶
Das grafische Werkzeug Laufwerksverwaltung beinhaltet unter anderem auch einen Vergleichstest für Lese- und Schreibgeschwindigkeit. Näheres dazu steht im Abschnitt Laufwerksverwaltung - Vergleichstests.
Hinweis:
Diese Tests sind unabhängig vom (korrekten) Partitions-Alignment der SSD.
Lesegeschwindigkeit¶
Das Programm hdparm wird zum Lesen und Setzen von Parametern für ATA-Laufwerke genutzt. Es hat aber auch die angenehme Eigenschaft, die Lesegeschwindigkeit von Laufwerken testen zu können. Durch die hier beschriebenen Tests werden Datenbestände auf dem Datenträger nicht beeinträchtigt, d.h. es handelt sich um zerstörungsfreie Tests.
Dazu nutzt man in einem Terminal[1] mit Rootrechten[2] den Befehl hdparm
mit den Optionen -T
bzw. -t
.
Hinweis:
Das Tool hdparm
ist unabhängig vom (korrekten) Partitions-Alignment. Wer Tests vor und nach dem Alignment durchführen möchte, kann die Geschwindigkeiten mit dd messen.
Geschwindigkeit des Systems¶
Dieser Test ermittelt die maximale Lesegeschwindigkeit des Systems (CPU, RAM, Software) ohne Beteiligung des Datenspeichers. Man muss zwar eine Gerätedatei für eine Festplatte oder SSD angeben, das Ergebnis hat aber nichts mit diesem Gerät zu tun.
sudo hdparm -T /dev/sda
Die Ausgabe sieht dann in etwa so aus:
/dev/sda: Timing cached reads: 6286 MB in 2.00 seconds = 3143.78 MB/sec
Aus dem Page Cache liest das System also mit etwa 3140 Megabyte pro Sekunde. Dies ist eine Schranke, welche keine Festplatte und keine SSD an diesem System überschreiten kann.
Der einzelne Wert variiert mit der momentanen Systemlast, daher sollte man die Messung in Ruhe durchführen und mehrmals wiederholen.
Geschwindigkeit des Gerätes¶
Dieser Test ermittelt die maximale Lesegeschwindigkeit des Systems (CPU, RAM, Software) mit Beteiligung des Datenspeichers.
sudo hdparm -t /dev/sda
Beispielausgabe:
/dev/sda: Timing buffered disk reads: 838 MB in 3.00 seconds = 279.12 MB/sec
"Buffer" ist hier nur ein veralteter Name für Page Cache, über den das System ca. 280 Megabyte pro Sekunde von der Festplatte lesen kann. Auch diese Messung sollte man einige Male wiederholen.
Bei rotierenden Platten (nicht bei SSDs) variiert die Geschwindigkeit mit dem Ort auf der Platte. Die bisherigen Test messen die Geschwindigkeit auf Spur 0 am Außenrand der Scheibe. Man kann mit der zusätzlichen Option --offset
auch im Inneren messen, wo in der Regel die Geschwindigkeit geringer als am Außenrand ist. Den Abstand vom Außenrand (hier beispielhaft 250) gibt man in GiB an.
sudo hdparm -t --offset 250 /dev/sda
Tests ohne Cache¶
Zusätzlich kann man noch mit der Option --direct
(„Use O_DIRECT to bypass page cache for timings“) eine Messung der Lesegeschwindigkeit unter Umgehung des Page Caches anfordern.
Hinweis:
Prominente Entwickler raten von der Verwendung der Option O_DIRECT
ab. Details dazu lese im Artikel hdparm.
Der in einem Terminal[1] mit Rootrechten[2] ausgeführte Befehl
sudo hdparm -tT --direct /dev/sda
macht nicht das, was man naiv erwartet und sollte daher besser nicht verendet werden.
Beispielausgabe:
/dev/sda: Timing O_DIRECT cached reads: 550 MB in 2.00 seconds = 275.01 MB/sec Timing O_DIRECT disk reads: 810 MB in 3.01 seconds = 269.24 MB/sec
Da man nicht weiß und auch nicht einfach ermitteln kann, was O_DIRECT
bei diesem Aufruf im vorliegenden System macht, sind die Ergebnisse nicht interpretierbar.
Datei kopieren¶
Eine andere Methode zur Messung der Lese- oder der Schreibgeschwindigkeit beruht auf dem Kopieren einer Datei bekannter Größe mit Hilfe eines Kopierprogramms (dessen Eigenheiten natürlich die Ergebnisse beeinflussen) und Messung der dafür benötigten Zeit. Man kann dafür im Grunde jedes Kopierprogramm (z.B. cat, cp, rsync) einsetzen, in diesem Artikel wird dd (d.h. "convert and copy a file") verwendet, weil es zusätzlich zwei für Geschwindigkeitsmessungen praktische Features mitbringt:
Es gibt die für den Kopiervorgang benötigte Zeit aus.
Die mit diesem Programm möglichen Konvertierungen ermöglichen eine bequeme Vorgabe der Menge der zu übertragenen Information. Bei den anderen Programmen müsste man dafür Dateien mit bekannten Größen vorbereiten.
Im Gegensatz zu den oben beschriebenen Messung mit hdparm
sind die folgenden Verfahren nicht zerstörungsfrei, d.h. man kann nicht auf einfache Weise nach dem Test den vorherigen Zustand wieder herstellen.
Man kann sowohl Tests ohne wie auch mit einem Dateisystem (welches ebenfalls die Ergebnisse beeinflusst) durchführen.
Hinweis:
Im Gegensatz zu hdparm ist dd abhängig von einem korrekten Partitions-Alignment der SSD. Hat man die SSD falsch oder schlecht ausgerichtet, so wirkt sich das auf die Tests aus, welche dann schlechter (also langsamer) ausfallen.
Hinweis:
Bei den folgenden Messmethoden gibt es einen systematischen Fehler, der die Ergebnisse verfälschen kann:
Teile der zu übertragenen Datei befinden sich noch im Page Cache. |
Zur Abhilfe kann man vor jedem Messbefehl den Page Cache mit diesen Befehlen leeren:
sudo sync ; echo 3 | sudo tee /proc/sys/vm/drop_caches
Lesen vom Gerät¶
Man legt auf dem Datenträger eine Partition (in diesem Artikel sda99
genannt) an. Dafür gibt es viele Möglichkeiten, man kann z.B. gdisk verwenden.
Die Messung der Geschwindigkeit erfolgt dann durch Kopieren der Datei /dev/sda99 ins Nirvana:
sudo dd if=/dev/sda99 of=/dev/null
Fortgeschrittene Varianten dieses Grundbefehls sind z.B.:
sudo dd if=/dev/sda99 bs=8k of=/dev/null sudo dd if=/dev/sda99 bs=8k status=progress of=/dev/null
Eigene Experimente ergeben schnell, dass man mit dd
geschickt und weniger geschickt arbeiten kann. Man wähle für den eigenen Bedarf zweckmäßige Parameter.
Die Abhängigkeit der Ergebnisse vom Ort auf der Scheibe kann man durch Wahl des Anfangs der Partition untersuchen, die Abhängigkeit von der Menge der zu kopierenden Daten durch Wahl der Größe der Partition oder Beschneiden beim Kopieren:
sudo dd if=/dev/sda99 bs=8k count=256 of=/dev/null # ergibt 1MiB
Schreiben auf das Gerät¶
Dafür lautet der Grundbefehl:
sudo dd if=/dev/zero of=/dev/sda99
Diesen Grundbefehl kann man sinngemäß wie vorstehend beschrieben modifizieren.
Schreiben ins Dateisystem¶
Hierfür muss man in der Partition ein Dateisystem errichten („die Partition formatieren“). Der Typ des Dateisystems (ext4, exFAT, ein anderes Windows-Dateisystem, Btrfs owai.) wähle man gemäß eigenen Bedürfnissen. Dieses Dateisystem muss man einbinden (mount), z.B. nach /mnt/Nur-zum-Test/:
sudo mount -v /dev/sda99 /mnt/Nur-zum-Test/
Nach diesen Vorbereitungen testet man die Schreibgeschwindigkeit mit diesem Grundbefehl oder seinen bekannten Varianten:
sudo dd if=/dev/zero of=/mnt/Nur-zum-Test/Speedtest
Diese fortgeschrittene Variante wird gerne verwendet:
dd if=/dev/zero of=/mnt/Nur-zum-Test/Speedtest bs=1M count=1024 conv=fdatasync,notrunc
Beispielausgabe:
1024+0 Datensätze ein 1024+0 Datensätze aus 1073741824 Bytes (1,1 GB) kopiert, 4,9835 s, 361 MB/s
Der Dateiname ist beliebig innerhalb der vom Dateisystemtyp gesetzten Möglichkeiten. Natürlich muss im Dateisystem genügend Speicherplatz frei sein.
Lesen aus dem Dateisystem¶
Die gerade angelegte Datei kann man auch zur Ermittlung der Lesegeschwindigkeit verwenden. Dabei ist eine Besonderheit zu beachten:
Die gerade geschriebene Datei befindet sich noch im Page Cache und würde gar nicht vom der Festplatte, sondern aus dem Arbeitsspeicher gelesen werden. Man zuerst diesen Zwischenspeicher löschen.
Befehl für den Lesetest:
dd if=/mnt/Nur-zum-Test/Speedtest of=/dev/null bs=1M count=1024
Beispielausgabe:
1024+0 Datensätze ein 1024+0 Datensätze aus 1073741824 Bytes (1,1 GB) kopiert, 0,276268 s, 428 MB/s
Bei einer direkten Wiederholung des Befehls erhält man dagegen eine solche Beispielausgabe mit erheblich höherer Lesegeschwindigkeit:
1024+0 Datensätze ein 1024+0 Datensätze aus 1073741824 Bytes (1,1 GB) kopiert, 0,277148 s, 3,9 GB/s
Man sollte dieses Experiment vier bis fünf Mal durchführen, um ein einigermaßen aussagekräftiges Ergebnis zu erhalten.
Zum Abschluss löscht man die temporär erstellte Datei mit dem Befehl:
sudo rm /mnt/Nur-zum-Test/Speedtest sudo umount -v /mnt/Nur-zum-Test/
Schreibgeschwindigkeit¶
Zur Messung der Schreibgeschwindigkeit kann man bei rotierenden magnetischen Festplatten die Messung mit dd
wie oben beschrieben verwenden:
Bei SSDs sind diese Methoden zwar technisch möglich, aber von ihrer Verwendung wird abgeraten. Sie verbrauchen Speicherblöcke auf der SSD, die nur durch TRIM wieder verwendbar gemacht können, was wiederum die SSD altern lässt. Schreibgeschwindigkeiten bei SSDs sollte man nicht aus Neugier, sondern höchstens in gut begründeten Fällen selbst ermitteln.
Links¶
Intern
Extern
Linux Page Cache 🇩🇪 bei Thomas Krenn
Externe Benchmarks mit SSD