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:
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.
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
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt
onli am :
Dirk Deimeke am :
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 :
Dirk Deimeke am :
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 :
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
Dirk Deimeke am :