[[Vorlage(Getestet, general )]] {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:mit Root-Rechten arbeiten:mit Rootrechten arbeiten] }}} {{{#!vorlage 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. }}} [[Inhaltsverzeichnis()]] [[Bild(Wiki/Icons/hd.png, 64, align=left)]] 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. {{{#!vorlage Warnung Eine Ermittlung der [#Lesegeschwindigkeit Lesegeschwindigkeit] nach den in diesem Artikel beschriebenen Methoden ist harmlos, dagegen kann eine Ermittlung der [#Schreibgeschwindigkeit Schreibgeschwindigkeit] insbesondere bei SSDs diese nachhaltig beschädigen. }}} Zur Geschwindigkeitsmessung kann man beispielsweise das GUI-Programm [#Laufwerksverwaltung Laufwerksverwaltung] oder auf der Kommandozeile das Programm [:bonnie++:] oder wie unten beschrieben die Befehle [#hdparm hdparm] bzw. [#dd 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#Vergleichstest:Laufwerksverwaltung - Vergleichstests]. {{{#!vorlage Hinweis Diese Tests sind __unabhängig__ vom (korrekten) [:SSD/Grundlagen#Alignment:Partitions-Alignment] der [:SSD:]. }}} [[Anker(hdparm) ]] = 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`. {{{#!vorlage Hinweis Das Tool `hdparm` ist __unabhängig__ vom (korrekten) [:SSD/Grundlagen#Alignment:Partitions-Alignment]. Wer Tests vor und nach dem Alignment durchführen möchte, kann die Geschwindigkeiten mit [#dd 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. {{{#!vorlage befehl 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 [#Links 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. {{{#!vorlage befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage 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 [[Vorlage(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. [[Anker(dd) ]] = 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: 1. Es gibt die für den Kopiervorgang benötigte Zeit aus. 1. 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 [#hdparm 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. {{{#!vorlage Hinweis Im Gegensatz zu [#hdparm hdparm] ist dd __abhängig__ von einem korrekten [:SSD/Grundlagen#Alignment: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. }}} [[Anker(Page-Cache-leeren) ]] {{{#!vorlage Hinweis Bei den folgenden Messmethoden gibt es einen systematischen Fehler, der die Ergebnisse verfälschen kann: \\ || <: cellstyle="width:100%">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: [[Vorlage(Befehl, "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: {{{#!vorlage Befehl sudo dd if=/dev/sda99 of=/dev/null }}} Fortgeschrittene Varianten dieses Grundbefehls sind z.B.: {{{#!vorlage Befehl 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: {{{#!vorlage Befehl sudo dd if=/dev/sda99 bs=8k count=256 of=/dev/null # ergibt 1MiB }}} == Schreiben auf das Gerät == Dafür lautet der Grundbefehl: {{{#!vorlage Befehl sudo dd if=/dev/zero of=/dev/sda99 }}} Diesen Grundbefehl kann man sinngemäß wie [#Lesen-vom-Geraet vorstehend] beschrieben modifizieren. == Schreiben ins Dateisystem == Hierfür muss man in der Partition ein Dateisystem errichten („die Partition formatieren“). Der Typ des Dateisystems ([:ext:ext4], [:exFAT:], [:Windows-Partitionen unter Linux: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/''': {{{#!vorlage Befehl sudo mount -v /dev/sda99 /mnt/Nur-zum-Test/ }}} Nach diesen Vorbereitungen testet man die Schreibgeschwindigkeit mit diesem Grundbefehl oder seinen bekannten Varianten: {{{#!vorlage Befehl sudo dd if=/dev/zero of=/mnt/Nur-zum-Test/Speedtest }}} Diese fortgeschrittene Variante wird gerne verwendet: {{{#!vorlage befehl 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 [#Page-Cache-leeren Zwischenspeicher löschen]. Befehl für den Lesetest: {{{#!vorlage befehl 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: {{{#!vorlage 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: * [#Schreiben-auf-das-Geraet Schreiben auf das Gerät] * [#Schreiben-ins-Dateisystem Schreiben ins Dateisystem] 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 [:SSD/TRIM: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 * [:bonnie++:] -- Alternatives Benchmarkprogramm * [:SSD:] {Übersicht} -- Startseite zum Thema SSD ## * [:Archiv/SSD/Alignment:] -- Hinweise zur korrekten Partitionierung von SSD * [:Tuning:] -- Allgemeiner Artikel zum Thema Geschwindigkeitsoptimierung * [:hdparm:] * [:dd:] * Extern * [https://www.thomas-krenn.com/de/wiki/Linux_Page_Cache Linux Page Cache] {de} bei Thomas Krenn * [wikipedia:Cache:] * [wikipedia:Puffer_(Informatik):Buffer] * Externe Benchmarks mit SSD * [archwiki:SSD_Benchmarking:wiki.archlinux.org: SSD Benchmarking] {en} * [http://people.redhat.com/jmoyer/discard/ext4_batched_discard/ people.redhat.com: Test results presentation page] {en} #tag: Hardware, System