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.
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.
Antworten:
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
gnome-disks
Möchtest du noch etwas?
/dev/urandom
als auch /dev/zero
Eingaben dd
beim Testen einer SSD empfehlen, da die Komprimierbarkeit der Daten einen massiven Einfluss auf die Schreibgeschwindigkeit haben kann.
/tmp
Dateisystem verwendet heutzutage häufig eine Ramdisk. Das Schreiben auf /tmp
scheint also Ihr Gedächtnis zu testen, nicht Ihr Festplattensubsystem.
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
Ich würde es nicht empfehlen, /dev/urandom
weil 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,
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
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 --size
Argument , 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_size
und --runtime
Parameter. 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 fio
beim 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.dat
in 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 numjobs
eingestellt, 1
dass 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 numjobs
viel (zB 4
sollte ausreichen , um die höchsten spec Zahlen zu erhalten) , aber einige „Enterprise“ SSDs benötigen gehen 32
- 128
die spec Zahlen zu erhalten , da die interne Latenz von denen , Geräte ist höher, aber der Gesamtdurchsatz ist verrückt.
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 fsync
zum Lesen keine Rolle spielt.
iodepth
habe 1
fü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=4
Sie diese Zahlen , aber erwarten Sie nie, dass Sie sie wirklich sehen.
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.
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
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 .
Überprüfen Sie die Integrität, erkennen Sie gefälschte Flash-Laufwerke und testen Sie die Leistung - alles auf einen Schlag.
Mehr zu dieser Antwort .