Skip to content

Disk Performance

Der neue Rechner ("terrania") ist mittlerweile da und läuft.

Die Performance NVMe vs. SSD beim fünf Jahre alten Notebook ("crest") ist schon beeindruckend:

$ grep IOPS crest.rand*
crest.randread.txt:  read: IOPS=94.5k, BW=369MiB/s (387MB/s)(4096MiB/11096msec)
crest.randrw.txt:  read: IOPS=63.4k, BW=248MiB/s (260MB/s)(3070MiB/12391msec)
crest.randrw.txt:  write: IOPS=21.2k, BW=82.8MiB/s (86.8MB/s)(1026MiB/12391msec); 0 zone resets
crest.randwrite.txt:  write: IOPS=66.6k, BW=260MiB/s (273MB/s)(4096MiB/15734msec); 0 zone resets

$ grep IOPS terrania.rand*
terrania.randread.txt:  read: IOPS=391k, BW=1528MiB/s (1602MB/s)(4096MiB/2681msec)
terrania.randrw.txt:  read: IOPS=254k, BW=992MiB/s (1040MB/s)(3070MiB/3094msec)
terrania.randrw.txt:  write: IOPS=84.9k, BW=332MiB/s (348MB/s)(1026MiB/3094msec); 0 zone resets
terrania.randwrite.txt:  write: IOPS=117k, BW=458MiB/s (480MB/s)(4096MiB/8939msec); 0 zone resets

Es werden drei Tests durchgeführt: "random read", "random read/write" (75% read, 25% write) und "random write". Spannend ist, dass das Lesen generell vier Mal schneller ist, vom alten zum neuen Rechner. Im Mix ist auch das Schreiben vier Mal schneller. Beim ausschliesslichen Schreiben ist der Neue aber "nur" noch knapp doppelt so schnell.

Als Tool kommt fio - Flexible IO Tester zum Einsatz. Wenn jemand eine bessere URL kennt, nur her damit. FIO ist in den meisten Distributionen enthalten.

Über synthetische Tests kann man natürlich geteilter Meinung sein, die Werte geben aber einen guten Anhaltspunkt für Vergleiche.

Ich benutze dieses kleine Skript, um die Daten zu sammeln.

#!/bin/bash

echo randrw
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75 --output=$(hostname --short).randrw.txt --output-format=normal
[[ -r test ]] && rm test
echo

echo randread
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randread  --output=$(hostname --short).randread.txt --output-format=normal
[[ -r test ]] && rm test
echo

echo randwrite
fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randwrite --output=$(hostname --short).randwrite.txt --output-format=normal
[[ -r test ]] && rm test
echo

Trackbacks

Dirks Logbuch am : Monitoring Zwischenintermezzo

Vorschau anzeigen
Jetzt habe ich schon einen neuen Rechner, kann aber natürlich nicht sagen, wie ich ihn im Normalbetrieb auslaste. Dass die NVMe-Performance sehr gut ist, habe ich ja bereits geschrieben. Um es vorweg zu nehmen: Gar nicht! Mehr über den neuen Re

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

onli am :

*Und, spürst du den Unterschied im Alltag? Wobei das wohl schwer an der SSD festzumachen wäre, wenn sich auch die ganze restliche Hardware geändert hat.

Dirk Deimeke am :

*Ich merke den Unterscheid vor allem beim Kopieren und beim Arbeiten mit virtuellen Maschinen.

Bei der alltäglichen Arbeit merke ich es kaum, Firefox läuft "fluffiger".

Die Übersetzungszeit des Buchs (1300 Seiten LaTeX mit Layout) hat sich um ein Drittel verkürzt.

Donnervogel am :

*Welcher Rechner ist es denn nun geworden? :-)

Dirk Deimeke am :

*Ich habe ganz vergessen zu antworten:

Es ist ein Tuxedo Core One (AMD Ryzen 9 3900, 64GB, 1 TB NVMe) geworden. Ein Selbstbau wäre günstiger geworden, aber, da ich zwei linke Hände habe und ich auch guten Support wollte, habe ich mich für Tuxedo entschieden.

Wolfgang am :

*Ich muss da jetzt ein wenig nickelig sein: Du schreibst eingangs "Performance NVMe vs. SSD". Was Du aber meinst ist, dass Du die Performance einer SSD die per SATA oder SAS angebunden ist (kenne Deine genaue Hardware nicht) mit der Performance einer SSD vergleichst, die per NVMe angebunden ist.

SSD ist ein Device bzw. ein Stück Hardware, NVMe ist ein Übertragungsprotokoll für Daten.

Ein wesentlicher Unterschied von SAS/SATA zu NVMe ist, dass SAS/SATA-Devices nur eine Command Queue haben und da auch nur vergleichsweise wenig Kommandos rein passen (SATA 32, SAS 256 Commands). Eine NVMe hat 64k Queues und Platz für 64k Commands je Queue. Für eine drehende Platte reicht diese eine Queue, es gibt ja auch nur einen Arm mit den Schreib-Lese-Köpfen dran in der Platte. Der Zugriff in einer SSD ist sehr viel komplexer, was z. B. auch die Controller-Firmware eines NVMe-Flash-Moduls deutlich komplexer macht, als die Firmware einer drehenden Platte.

Bei Platten wurde die Command Queue eingeführt, damit Kommandos innerhalb der Queue so sortiert werden können, dass der Arm sich beim Abarbeiten nur einmal über die Platte bewegt, und nicht dauernd hin und her springen muss. Bei NVMe haben die vielen Queues insbesondere die Aufgabe, intensiv parallelen Workload auch parallel auf das Flash zu bringen, z. B. bei VM-Hosts mit vielen laufenden VMs. Und weil in einem Flash-Modul die einzelnen Kommandos auch sehr viel schneller abgearbeitet werden können, als bei drehenden Platten, hat man die Queue-Length drastisch erhöht. Auch bei NVMe werden Kommandos sortiert, weil bestimmte Abfolgen schneller erfolgen können, als andere. Details weiß nur der Hersteller und schweigt sich darüber normalerweise aus. Weil eine Differenzierung der verschiedenen Hersteller im wesentlichen über Firmware erfolgt, und deshalb solche Mechanismen als Betriebsgeheimnis behandelt werden.

Grüße
wolfgang

Kommentar schreiben

Gravatar, Favatar, Pavatar, Identica, Twitter, MyBlogLog Autoren-Bilder werden unterstützt.
BBCode-Formatierung erlaubt
Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
:'(  :-)  :-|  :-O  :-(  8-)  :-D  :-P  ;-) 
Formular-Optionen