Frage So überprüfen Sie die Festplattenleistung


So überprüfen Sie die Leistung einer Festplatte (Entweder über Terminal oder GUI). Die Schreibgeschwindigkeit. Die Lesegeschwindigkeit. Cache-Größe und Geschwindigkeit Zufällige Geschwindigkeit.


260
2017-12-12 00:22


Ursprung


Eine ähnliche Frage wurde bereits gestellt unix.stackexchange.com/questions/108838/ ... , stackoverflow.com/questions/1198691/ ... und serverfault.com/questions/219739/... . - Anon


Antworten:


Terminalmethode

hdparm ist ein guter Anfang.

sudo hdparm -Tt /dev/sda

/dev/sda:
Timing cached reads:   12540 MB in  2.00 seconds = 6277.67 MB/sec
Timing buffered disk reads: 234 MB in  3.00 seconds =  77.98 MB/sec

sudo hdparm -v /dev/sda gibt auch Informationen.

dd gibt Ihnen Informationen über die Schreibgeschwindigkeit.

Wenn das Laufwerk kein Dateisystem hat (und nur dann), benutzen of=/dev/sda.

Ansonsten mount es auf / tmp und schreibe dann lösche die Testausgabedatei.

dd if=/dev/zero of=/tmp/output bs=8k count=10k; rm -f /tmp/output

10240+0 records in
10240+0 records out
83886080 bytes (84 MB) copied, 1.08009 s, 77.7 MB/s

Grafische Methode

  1. Gehen Sie zu System -> Administration -> Festplatten-Dienstprogramm.
    • Starten Sie alternativ das Gnome-Festplatten-Dienstprogramm von der Befehlszeile aus, indem Sie es ausführen gnome-disks
  2. Wählen Sie Ihre Festplatte im linken Bereich.
  3. Klicken Sie nun im rechten Bereich auf die Schaltfläche "Benchmark - Drive-Leistung messen".
  4. Ein neues Fenster mit Diagrammen öffnet sich. Sie finden zwei Buttons. Einer ist für "Start Read Only Benchmark" und ein anderer ist "Read / Write Benchmark starten". Wenn Sie auf eine beliebige Schaltfläche klicken, beginnt das Benchmarking der Festplatte.

test

Wie Benchmark-I / O Benchmarks

Artikel

Gibt es etwas mehr, was du willst?


342
2017-12-12 00:34



Ich würde das Testen empfehlen /dev/urandom ebenso gut wie /dev/zero als Eingänge zu dd beim Testen einer SSD, da die Komprimierbarkeit der Daten eine massive Auswirkung auf die Schreibgeschwindigkeit haben kann. - Ian Mackinnon
Es gibt kein solches "System ->" auf meinem Ubuntu 12.04 Unity. Oder zumindest habe ich es nicht gefunden. Und ich sehe dieses Plattenwerkzeug weder in den Systemeinstellungen noch in den Systemeinstellungen ... O_o Aber ich habe es endlich geschafft, es auszuführen: / usr / bin / palimpsest - Fran Marzoa
Beachten Sie, dass seit 12.10 Es heißt einfach Festplatten und kann durch Unity gefunden werden. - Paul Lammertsma
Auf Gnome wurde dies in Anwendungen -> Systemprogramme -> Einstellungen -> Festplatten-Dienstprogramm verschoben. Für diejenigen, die die Einheit hassen. - Ken Sharp
Das /tmp Dateisystem verwendet heutzutage häufig eine Ramdisk. Also schreibe an /tmp scheint Ihren Speicher zu testen, nicht Ihr Festplatten-Subsystem. - Zoredache


Suominen hat recht, wir sollten eine Art Synchronisierung verwenden; aber es gibt eine einfachere Methode, conv = fdatasync wird die Aufgabe erledigen:

dd if=/dev/zero of=/tmp/output conv=fdatasync bs=384k count=1k; rm -f /tmp/output
1024+0records in
1024+0 records out
402653184 bytes (403 MB) copied, 3.19232 s, 126 MB/s

73
2017-08-18 18:31



Es ist eine Antwort mit einem anderen Befehl / Option als die anderen. Ich sehe, es ist eine Antwort, die eines eigenen Postens würdig ist. - Alaa Ali
Warum haben Sie 384k als Blockgröße verwendet? - Diego F. Durán
@Diego Es gibt keinen Grund. Es war nur ein Beispiel. Sie können alles andere verwenden. (zwischen etwa 4k ... 1M) Natürlich wird größere Blockgröße bessere Leistung bringen. Und natürlich verringern Sie die Anzahl, wenn Sie große bs verwenden, oder es wird ein Jahr dauern, bis Sie fertig sind. - Tele
Es ist nicht zuverlässig durch Benchmark-Tools wie iozone und sysbench Zahlen sind viel niedriger - MSS


Ich würde es nicht empfehlen /dev/urandom weil es softwarebasiert und langsam wie ein Schwein ist. Lieber Zufallsdaten auf der Ramdisk. Beim Testen der Festplatte spielt das Zufallsprinzip keine Rolle, weil jedes Byte so geschrieben wird, wie es ist (auch bei ssd mit dd). Aber wenn wir den dedizierten zfs-Pool mit reinen Null- oder Zufallsdaten testen, gibt es einen enormen Leistungsunterschied.

Ein anderer Gesichtspunkt muss der Synchronisationszeiteinschluss sein; Alle modernen Dateisysteme verwenden Caching bei Dateioperationen.

Um die Plattengeschwindigkeit und nicht den Arbeitsspeicher wirklich zu messen, müssen wir das Dateisystem synchronisieren, um den Cache-Effekt loszuwerden. Das kann leicht gemacht werden durch:

time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k && sync"

Mit dieser Methode erhalten Sie die Ausgabe:

sync ; time sh -c "dd if=/dev/zero of=testfile bs=100k count=1k  && sync" ; rm testfile 
1024+0 records in
1024+0 records out
104857600 bytes (105 MB) copied, 0.270684 s, 387 MB/s

real    0m0.441s
user    0m0.004s
sys 0m0.124s

Die Datenrate der Festplatte beträgt also nur 104857600 / 0,441 = 237772335 B / s -> 237 MB / s

Das sind mehr als 100 MB / s weniger als beim Caching.

Glückliches Benchmarking,


42
2017-12-06 23:18





Wenn Sie die Lese- und Schreibgeschwindigkeit der Festplatte in Echtzeit überwachen möchten, können Sie die Iotop Werkzeug.

Dies ist nützlich, um genaue Informationen darüber zu erhalten, wie eine Festplatte für eine bestimmte Anwendung oder Aufgabe ausgeführt wird. Die Ausgabe zeigt Ihnen die Lese- / Schreibgeschwindigkeit pro Prozess und die gesamte Lese- / Schreibgeschwindigkeit für den Server, ähnlich wie bei top.

So installieren Sie iotop:

sudo apt-get install iotop  

Um es auszuführen:

sudo iotop

30
2017-09-17 14:24





Bonnie ++ ist das ultimative Benchmark-Programm, das ich für Linux kenne.

(Ich bereite gerade eine Linux Livecd bei der Arbeit mit Bonnie ++ vor, um unsere Windows-basierte Maschine damit zu testen!)

Es kümmert sich um das Caching, Synchronisieren, zufällige Daten, zufälligen Speicherort auf der Festplatte, kleine Updates, große Updates, liest, schreibt, etc. Vergleicht einen USB-Schlüssel, eine Festplatte (rotary), ein Solid-State-Laufwerk und ein RAM-basierte Dateisystem kann für den Neuling sehr informativ sein.

Ich habe keine Ahnung, ob es in Ubuntu enthalten ist, aber Sie können es leicht von der Quelle kompilieren.

http://www.coker.com.au/bonnie++/


23
2018-02-03 16:13





Schreibgeschwindigkeit

$ dd if=/dev/zero of=./largefile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 4.82364 s, 223 MB/s

Die Blockgröße ist eigentlich ziemlich groß. Sie können mit kleineren Größen wie 64k oder sogar 4k versuchen.


Geschwindigkeit lesen

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, die im Schreibtest erstellt wurde:

$ dd if=./largefile of=/dev/null bs=4k
165118+0 records in
165118+0 records out
676323328 bytes (676 MB) copied, 3.0114 s, 225 MB/s

17
2018-05-05 22:12





einige Hinweise zur Verwendung von bonnie ++

bonnie++ -d [TEST_LOCATION] -s [TEST_SIZE] -n 0 -m [TEST_NAME] -f -b -u [TEST_USER] 
bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u james

Ein bisschen mehr unter: EINFACHES BONNIE ++ BEISPIEL.


12
2017-09-28 19:02





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

Sequentielle LESE-Geschwindigkeit 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=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 gelesen QD1 (Dies ist die Zahl, die wirklich wichtig für die reale Welt ist, es sei denn, Sie wissen es besser):

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

Mixed Random 4K lesen und schreiben QD1 mit Sync (Dies ist die Worst-Case-Nummer, die Sie von Ihrem Laufwerk erwarten sollten, normalerweise 1-10% der im Datenblatt aufgeführten Anzahl):

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 die --size Argument, um die Dateigröße zu erhöhen. Wenn Sie größere Dateien verwenden, können sich die Zahlen je nach Laufwerkstechnologie und Firmware verringern. Kleine Dateien ergeben für Rotationsmedien "zu gute" Ergebnisse, da sich der Lesekopf nicht so stark bewegen muss. Wenn das Gerät fast leer ist, wird mit einer Datei, die groß genug ist, um das Laufwerk fast zu füllen, das Worst-Case-Verhalten für jeden Test erhalten. Bei SSD spielt die Dateigröße keine Rolle.

Beachten Sie, dass fio erstellt die erforderliche temporäre Datei beim ersten Start. Es wird mit zufälligen Daten gefüllt, um zu vermeiden, dass zu viele Zahlen von Geräten erhalten werden, die die Daten komprimieren, bevor sie in den permanenten Speicher geschrieben werden. Die temporäre Datei wird aufgerufen fio-tempfile.dat in obigen Beispielen und im aktuellen Arbeitsverzeichnis gespeichert. Sie sollten also zuerst in das Verzeichnis wechseln, das auf dem Gerät, das Sie testen möchten, installiert ist.


9
2018-01-01 18:14



Einige der fio-Einstellungen sind ein bisschen seltsam und möglicherweise nicht optimal. Wenn Sie zum Beispiel eine so große Blockgröße (2 MByte) beim direkten I / O mit einer asynchronen I / O-Engine haben, führt dies wahrscheinlich zu einer großen Aufsplittung im Kernel, wodurch Overhead entsteht. Sende periodisch fsyncs wenn du nur lesest, sieht das auch ungewöhnlich aus. Ich stimme zu, dass fio nützlich ist, aber ich würde empfehlen, dass die Leser sorgfältig untersuchen, welche Parameter sie verwenden möchten, anstatt sie wörtlich aus der 20180102-Version der obigen Antwort zu kopieren ... - Anon
@Anon: Du hast recht, das Optimum für sequentielles Lesen wäre das passende /sys/block/sd?/queue/max_sectors_kb weil es niedriger als das tatsächliche Hardware-Limit sein kann, das normalerweise weit mehr ist als die 2MB im obigen Beispiel. Ich nehme jedoch an, dass der geringe Overhead, der von der CPU verursacht wird, im Vergleich zur Geschwindigkeit des tatsächlichen E / A-Geräts keine Rolle spielt. Das fsync ist ein No-Operation für Lesevorgänge, so dass es die Ergebnisse nicht beeinflusst - ich behielt es so, dass es einfacher ist, die Unterschiede zwischen verschiedenen Befehlszeilen zu verstehen. Haben Sie Probleme, die Ergebnisse zu erhalten, die den Herstellerspezifikationen entsprechen? - Mikko Rantalainen
Nicht genau, ich habe (einige) Erfahrung mit fio und Linux. Eigentlich, wenn Sie die beste Blockgröße erraten, wäre es ratsam, mit optimal_io_size zu starten, wenn es verfügbar ist (aber Sie können 64Kbytes annehmen, wenn es 0 ist - das ist was der Kernel tut). Nicht genau, ich habe nur (einige) Erfahrung damit fio und Linux. Eigentlich, wenn Sie die beste Blockgröße erraten, wäre es ratsam, mit optimal_io_size zu starten, wenn es verfügbar ist (aber Sie können 64Kbytes annehmen, wenn es 0 ist - das ist, was der Kernel tut). - Anon
Ich habe gerade einige Geräte erneut getestet. Mit dem obigen sequentiellen Lesetest (2 MB Blockgröße) habe ich 280 MB / s von Samsung SSD 850 EVO und 1070 MB / s von Intel 910 SSD bekommen. Mit 64k Blockgröße und ansonsten identischer Kommandozeile habe ich 268 MB / s von 850 EVO und 1055 MB / s von 910 SSD bekommen. Zumindest für diese Art von Geräten scheint die Verwendung von 2 MB Blockgröße die Ergebnisse um 1-5% zu verbessern, obwohl es den Kernel veranlasst, Anforderungen auf Hardware aufzuteilen. Ich denke, selbst bei Kernel-Optimierungen ist der Aufwand, mehr syscalls zu übermitteln, schlimmer als das Teilen innerhalb des Kernels. - Mikko Rantalainen
Nach weiteren Tests scheint es, dass ich den höchsten sequenziellen Durchsatz unter Verwendung des Werts der Potenz 2 erhalte, der kleiner ist als max_sectors_kb. Ich habe die obigen Beispielbefehle so geändert, dass sie 1 MB Blockgröße verwenden, weil das mit echter Hardware zu funktionieren scheint. Das habe ich auch getestet fsync spielt keine Rolle zum Lesen. - Mikko Rantalainen