So überprüfen Sie die Festplattenleistung

336

So überprüfen Sie die Leistung einer Festplatte (entweder über ein Terminal oder eine grafische Benutzeroberfläche). Die Schreibgeschwindigkeit. Die Lesegeschwindigkeit. Cache Größe und Geschwindigkeit. Zufällige Geschwindigkeit.

Luis Alvarado
quelle

Antworten:

425

Terminal-Methode

hdparm ist ein guter Ort, um zu beginnen.

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 wird auch Auskunft geben.

dd gibt Auskunft über die Schreibgeschwindigkeit.

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

Andernfalls hängen Sie es in / tmp ein und schreiben und löschen Sie 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.
    • Alternativ können Sie das Gnome-Dienstprogramm von der Befehlszeile aus starten, 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 - Measure Drive Performance“ (Benchmark - Laufwerksleistung messen).
  4. Ein neues Fenster mit Diagrammen wird geöffnet. Sie finden zwei Schaltflächen. Eine ist für "Start Read Only Benchmark" und eine andere für "Start Read / Write Benchmark". Wenn Sie auf eine beliebige Schaltfläche klicken, wird das Benchmarking der Festplatte gestartet.

Prüfung

Benchmarking von Festplatten-E / A

Artikel

Möchtest du noch etwas?

Panther
quelle
10
Ich würde sowohl das Testen /dev/urandomals auch /dev/zeroEingaben ddbeim Testen einer SSD empfehlen, da die Komprimierbarkeit der Daten einen massiven Einfluss auf die Schreibgeschwindigkeit haben kann.
Ian Mackinnon
3
Auf meinem Ubuntu 12.04 Unity gibt es kein solches "System ->". Oder zumindest habe ich es nicht gefunden. Und dieses Festplattentool sehe ich auch nicht in den Systemeinstellungen ... O_o Aber ich habe es endlich geschafft: / usr / bin / palimpsest
Fran Marzoa
6
Beachten Sie, dass es seit 12.10 einfach Disks heißt und über Unity gefunden werden kann.
Paul Lammertsma
1
Auf Gnome ist dies zu Anwendungen -> Systemprogramme -> Einstellungen -> Festplatten-Dienstprogramm gewechselt. Für diejenigen, die Unity hassen.
Ken Sharp
2
Das /tmpDateisystem verwendet heutzutage häufig eine Ramdisk. Das Schreiben auf /tmpscheint also Ihr Gedächtnis zu testen, nicht Ihr Festplattensubsystem.
Zoredache
99

Suominen hat recht, wir sollten eine Art Synchronisation verwenden; Es gibt jedoch eine einfachere Methode: conv = fdatasync erledigt den Job:

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
Tele
quelle
28
Es ist eine Antwort mit einem anderen Befehl / einer anderen Option als die anderen. Ich sehe, es ist eine Antwort, die einen eigenen Beitrag verdient.
Alaa Ali
2
Warum haben Sie 384k als Blockgröße verwendet?
Diego F. Durán
1
@Diego Es gibt keinen Grund. Es war nur ein Beispiel. Sie können alles andere verwenden. (zwischen ca. 4k ... 1M) Größere Blockgrößen ergeben natürlich eine bessere Leistung. 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, da Benchmark-Tools wie iozone und sysbench viel weniger verwenden
MSS
1
Seien Sie vorsichtig bei der Verwendung von Nullen für Ihre Schreibdaten - einige Dateisysteme und Festplatten haben einen speziellen Pfad für die Schreibdaten (und andere komprimierbare Daten), der zu künstlich hohen Benchmark-Zahlen führt ...
Anon
50

Ich würde es nicht empfehlen, /dev/urandomweil es softwarebasiert und langsam wie ein Schwein ist. Es ist besser, zufällige Daten auf einer Ramdisk zu speichern. Beim Testen der Festplatte spielt der Zufall keine Rolle, da jedes Byte so geschrieben wird, wie es ist (auch auf ssd mit dd). Wenn wir jedoch einen deduppierten ZFS-Pool mit reinen Null- oder Zufallsdaten testen, besteht ein großer Leistungsunterschied.

Ein weiterer Gesichtspunkt muss die Einbeziehung der Synchronisationszeit sein. Alle modernen Dateisysteme verwenden Caching für Dateioperationen.

Um die Festplattengeschwindigkeit und nicht den Arbeitsspeicher wirklich zu messen, müssen wir das Dateisystem synchronisieren, um den Caching-Effekt zu beseitigen. Das geht ganz einfach mit:

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 Datenträger-Datenrate beträgt also nur 104857600 / 0,441 = 237772335 B / s -> 237 MB / s

Das sind über 100 MB / s weniger als beim Caching.

Viel Spaß beim Benchmarking,

Pasi Suominen
quelle
3
Seien Sie vorsichtig mit der Verwendung von Nullen für Ihre Schreibdaten - einige Festplatten (wie SSDs) und einige Dateisysteme haben einen speziellen Pfad für Groß- und Kleinschreibung. Dies führt bei Verwendung von Null-Puffern zu künstlich hohen Benchmark-Zahlen. Andere stark komprimierbare Datenmuster können ebenfalls die Ergebnisse verfälschen ...
Anon
36

Wenn Sie die Lese- und Schreibgeschwindigkeit der Festplatte in Echtzeit überwachen möchten, können Sie das iotop- Tool verwenden.

Dies ist nützlich, um genaue Informationen über die Leistung eines Datenträgers für eine bestimmte Anwendung oder Aufgabe zu erhalten. Die Ausgabe zeigt Ihnen die Lese- / Schreibgeschwindigkeit pro Prozess und die gesamte Lese- / Schreibgeschwindigkeit für den Server, ähnlich der top.

So installieren Sie iotop:

sudo apt-get install iotop  

Um es auszuführen:

sudo iotop
Lars
quelle
28

Wenn Sie Genauigkeit wünschen, sollten Sie verwenden fio. Es erfordert das Lesen des Handbuchs ( man fio), aber es gibt Ihnen genaue Ergebnisse. 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 (diese sollte in der Nähe der in den technischen Daten Ihres Laufwerks angegebenen Zahl liegen):

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 (diese sollte in der Nähe der in den technischen Daten Ihres Laufwerks angegebenen Zahl liegen):

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

Random 4K read QD1 (das 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

Mixed Random 4K Read und Write QD1 mit Sync (dies ist der schlechteste Fall, den Sie jemals von Ihrem Laufwerk erwarten sollten, normalerweise weniger als 1% der im Datenblatt aufgelisteten 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 --sizeArgument , um die Dateigröße zu erhöhen. Die Verwendung größerer Dateien kann die Anzahl verringern, die Sie je nach Laufwerkstechnologie und Firmware erhalten. Kleine Dateien liefern für Rotationsmedien "zu gute" Ergebnisse, da der Lesekopf nicht so viel bewegen muss. Wenn Ihr Gerät fast leer ist und Sie eine Datei verwenden, die groß genug ist, um das Laufwerk fast zu füllen, wird bei jedem Test das Worst-Case-Verhalten festgestellt. Bei einer SSD spielt die Dateigröße keine Rolle.

Beachten Sie jedoch, dass für einige Speichermedien die Größe der Datei nicht so wichtig ist wie die Gesamtzahl der während eines kurzen Zeitraums geschriebenen Bytes. Beispielsweise können einige SSDs mit vorgelöschten Blöcken eine erheblich schnellere Leistung aufweisen, oder sie verfügen über einen kleinen SLC-Flash-Bereich, der als Schreibcache verwendet wird, und die Leistung ändert sich, sobald der SLC-Cache voll ist. Ein weiteres Beispiel: SMR-Festplatten von Seagate verfügen über einen PMR-Cache-Bereich von etwa 20 GB, der eine recht hohe Leistung aufweist. Sobald er jedoch voll ist, kann das direkte Schreiben in den SMR-Bereich die Leistung um 10% gegenüber dem Original verringern. Die einzige Möglichkeit, diese Leistungsverschlechterung zu erkennen, besteht darin, zunächst so schnell wie möglich über 20 GB zu schreiben. Dies hängt natürlich alles von Ihrer Arbeitsbelastung ab: Wenn Ihr Schreibzugriff mit längeren Verzögerungen überlastet ist, die es dem Gerät ermöglichen, den internen Cache zu bereinigen, Kürzere Testsequenzen spiegeln Ihre reale Leistung besser wider. Wenn Sie viele E / A-Vorgänge ausführen müssen, müssen Sie beide erhöhen--io_sizeund --runtimeParameter. Beachten Sie, dass einige Medien (z. B. die meisten Flash-Geräte) durch solche Tests zusätzlichen Verschleiß erfahren. Meiner Meinung nach sollte ein Gerät, das nicht für diese Art von Tests geeignet ist, auf keinen Fall zur Speicherung wertvoller Daten verwendet werden.

Darüber hinaus verfügen einige hochwertige SSD-Geräte möglicherweise über noch intelligentere Algorithmen zur Abnutzungskorrektur, bei denen der interne SLC-Cache über genügend intelligente Funktionen verfügt, um Daten zu ersetzen, die während des Tests neu geschrieben werden, wenn sie denselben Adressraum (dh dieselbe Testdatei) erreichen 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 diese am besten mit Dateigrößen, die Sie im realen Leben sehen werden. Andernfalls sehen Ihre Zahlen möglicherweise zu gut aus.

Beachten Sie, dass fiobeim ersten Start die erforderliche temporäre Datei erstellt wird. Es wird mit zufälligen Daten gefüllt, um zu vermeiden, dass Geräte, die durch Komprimieren der Daten betrügen, zu viele Zahlen erhalten, bevor sie in den permanenten Speicher geschrieben werden. Die temporäre Datei wird fio-tempfile.datin den obigen Beispielen aufgerufen und im aktuellen Arbeitsverzeichnis gespeichert. Wechseln Sie daher zuerst in das Verzeichnis, das auf dem Gerät bereitgestellt ist, das Sie testen möchten.

Wenn Sie eine gute SSD haben und noch höhere Zahlen sehen möchten, erhöhen Sie diese --numjobs. Das definiert die Parallelität für die Lese- und Schreibvorgänge. Die obigen Beispiele sind alle so numjobseingestellt, 1dass es sich bei dem Test um das Lesen und Schreiben von Prozessen mit einem Thread handelt (möglicherweise mit einer Warteschlange, die mit gesetzt ist iodepth). High - End - SSDs (zB Intel Optane) sollten hohe Zahlen erhalten , auch ohne Erhöhung numjobsviel (zB 4sollte ausreichen , um die höchsten spec Zahlen zu erhalten) , aber einige „Enterprise“ SSDs benötigen gehen 32- 128die spec Zahlen zu erhalten , da die interne Latenz von denen , Geräte ist höher, aber der Gesamtdurchsatz ist verrückt.

Mikko Rantalainen
quelle
1
Ich habe gerade einige Geräte erneut getestet. Unter Verwendung des obigen sequentiellen Lesetests (2 MB Blockgröße) erhielt ich 280 MB / s von der Samsung SSD 850 EVO und 1070 MB / s von der Intel 910 SSD. Mit 64k Blockgröße und ansonsten identischer Kommandozeile bekam ich 268 MB / s von 850 EVO und 1055 MB / s von 910 SSD. Zumindest für diese Art von Geräten scheint die Verwendung einer Blockgröße von 2 MB die Ergebnisse um 1 bis 5% zu verbessern, obwohl dies dazu führt, dass der Kernel Anforderungen an die Hardware aufteilt. Selbst bei Kernel-Optimierungen ist der Aufwand für die Übermittlung von mehr Systemaufrufen wahrscheinlich schlimmer als die Aufteilung innerhalb des Kernels.
Mikko Rantalainen
1
Bei weiteren Tests scheint es, dass ich den höchsten sequentiellen Durchsatz bei einer Potenz von 2 erhalte, die kleiner als ist max_sectors_kb. Ich habe die obigen Beispielbefehle geändert, um eine Blockgröße von 1 MB zu verwenden, da dies mit Hardware aus der realen Welt zu funktionieren scheint. Und ich habe auch getestet, dass fsynczum Lesen keine Rolle spielt.
Mikko Rantalainen
1
Abhängig davon, wie das Laufwerk angeschlossen ist, wurde möglicherweise eine zu geringe Jodtiefe festgestellt. Sie müssten sehen, was Linux tatsächlich an das Gerät sendet und in welcher Tiefe es es tut ...
Anon
1
Ich iodepthhabe 1für den wahlfreien Zugriff genau festgelegt, weil in Programmen der realen Welt häufig Algorithmen / Logik ausgeführt werden, die nicht mit einer Tiefe von mehr als 1 funktionieren. Wenn diese Tiefe "zu niedrig" ist, ist Ihr E / A-Gerät daher fehlerhaft. Es ist wahr, dass einige SSD-Geräte von einer höheren Tiefe als 32 profitieren. Können Sie jedoch auf eine reale Arbeitslast verweisen, die Lesezugriff erfordert und eine höhere Jodrate als 32 aufweist? TL; DR: Wenn Sie mit einem Gerät mit hoher Latenz eine unglaublich hohe Lese-Benchmark-Zahl reproduzieren möchten, verwenden iodepth=256 --numjobs=4Sie diese Zahlen , aber erwarten Sie nie, dass Sie sie wirklich sehen.
Mikko Rantalainen
1
Die meisten "realen" Programme senden I / O (o_) nicht direkt, geschweige denn asynchron, sodass alle unsere Beispiele ungewöhnlich ausgelastet sind, um die Grenzen des Benchmark-Bereichs zu überschreiten (wie sie sagen, der beste Benchmark ist Ihre reale Auslastung). Wenn Sie jedoch beispielsweise mehrere ausgelastete virtuelle Maschinen ausführen, können Sie problemlos Workloads mit verrückten Tiefen erzeugen, bei denen die E / A-Vorgänge jedoch aus Sicht des Datenträgers häufig zufällig aussehen, und dies ist ein einfaches Beispiel für eine enorme Geschwindigkeitssteigerung NVMe. PS: Wenn Sie zu hohe Werte einstellen, wird der Durchsatz verringert, sodass es einen Sweet Spot gibt ...
Anon
25

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

(Ich bereite gerade eine Linux-Live-CD mit Bonnie ++ vor, um unsere Windows-basierte Maschine damit zu testen!)

Es kümmert sich um Caching, Synchronisierung, zufällige Daten, zufälligen Speicherort auf der Festplatte, kleine Updates, große Updates, Lese- und Schreibvorgänge usw. Vergleichen eines USB-Schlüssels, einer Festplatte (Rotary), eines Solid-State-Laufwerks und eines RAM-basierten Laufwerks Dateisystem kann für den Neuling sehr informativ sein.

Ich habe keine Ahnung, ob es in Ubuntu enthalten ist, aber Sie können es einfach aus dem Quellcode kompilieren.

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

Corto
quelle
Bonnie weist Fehler beim Festplatten-Benchmarking auf und kann problemlos Zahlen generieren, die die Nicht-Festplatten-Aspekte Ihres Systems widerspiegeln. Daher ist bei der Verwendung ein hohes Maß an Sorgfalt erforderlich. Weitere Informationen finden Sie in Brendan Greggs Active Benchmarking: Bonnie ++ .
Anon
22

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

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


Lesegeschwindigkeit

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 im Schreibtest erstellte Datei:

$ 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
Limon Monte
quelle
Seien Sie vorsichtig mit der Verwendung von Nullen für Ihre Schreibdaten - einige Dateisysteme und Festplatten haben einen speziellen Pfad für diese (und andere komprimierbare Daten), was zu künstlich hohen Benchmark-Zahlen führt ...
Anon
14

einige tipps 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: SIMPLE BONNIE ++ BEISPIEL .

Nyxee
quelle