Dieser Artikel schmorte jetzt länger hier im Zustand „unveröffentlicht“ und eigentlich ist er fertig. Daher ein kleiner Bericht / Vergleich über die Performance unter Debian auf einem Notebook im Raid0 und Raid1
Hardware HP Elitebook 8460p mit i5 2560p, 16GB RAM und 2x Sata Western Digital Black mit 320GB.
System ist Debian Jessi mit Kernel 3.16.0-4-amd64 und Standardinstallation (Tools, SSH-Server) mit Ext4 Dateisystem in automatischer Konfiguration.
Raid0 formatiert mit noatim,nodiratim, Nutzung als News (4k) und ext4
Ziel ist es zu zeigen, wie sich die Performance von einer einzelnen Festplatte gegenüber einem Raid0 bzw. einem Raid1 verändert. Als Einsatzzweck und Grundgedanken der Messung wird ein Webserver mit Datenbankserver gelegt.
Bentuzt wird das Testtool FIO (Flexible IO), das wesent aussagekräftigere Ergebnisse als das an Bord befindliche dd liefert. DD ist im Gegensatz zu FIO Single-Threaded und für sequentielle Writetests sinnvoll. Das Ergebniss ist meistens nicht aussagekräftig zum Einsatzzweck des Rechners / Servers. Aus diesen und weiteren Gründen empfiehlt sich daher das mächtigere FIO.
Blocksize des Dateisystems:
# blockdev –getbsz /dev/sda1
4096
– also 4k groß
Problem: Moderne Systeme versuchen Daten in den Cache / RAM zu speichern um die Performance zu erhöhen. Dies ist bei einem I/O Test der Festplatte bzw. des Raids nicht gewünscht.
- Single Disk I/O – fio Random read/write Performance
# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=fio.tmp –bs=4k –iodepth=64 –size=1G –readwrite=randrw –rwmixread=75
Es wird eine 1Gbyte Datei erzeugt und 4KB reads und writes ausgeführt. Je write wird 3x gelesen und ein Split File erzeugt( 75/25 Prozent). Das Ganze passiert in 64 Operationen zur selben Zeit. Das Verhältnis von 3/1 ist ein typisches Verhalten von Datenbanken.
—————————————————————————————-
- Single Disk I/O – fio Random read Performance
# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=fio.tmp –bs=4k –iodepth=64 –size=1G –readwrite=randread
—————————————————————————————-
- Single Disk I/O – fio Random write Performance
Nun wird der Test leicht verändert und statt random read Operationen, random write Operationen getestet.
# fio –randrepeat=1 –ioengine=libaio –direct=1 –gtod_reduce=1 –name=test –filename=fio.tmp –bs=4k –iodepth=64 –size=1G –readwrite=randwrite
—————————————————————————————-
- Single Disk I/O – fio Medium Load Test
Das Problem bei I/O Festplattentests ist es herauszufinden was die Disk leistet, oder ob die Werte durch die CPU aus dem Cache stammen.
Eine Testdatei die kleiner als der RAM ist, könnte in einem Test des Kernels enden der durch das Limit der CPU Leistung begrenzt ist.
Ist die Testdatei größer als der RAM so wird der Test den RAM meistens missen und der Test wird die Disk I/O messen.
Der näcshte Test soll den Medium Load eines Servers darstellen. Wenn dieser 1GB RAM hat, dann empfiehlt sich ein Test mit 10GB Testdatei, wodurch der Cache Hit Ratio bei über 90 Prozent liegt. Dieses System hat 16GB RAM, also teste ich mit 160GB Testdatei.
# file system random I/O, 160 Gbytes, 1 thread
# fio –runtime=60 –time_based –clocksource=clock_gettime –name=randread –numjobs=1 –group_reporting –rw=randread –random_distribution=pareto:0.9 –bs=4k –size=160g –filename=fio.tmp
4.2 Raid0 Disk I/O – fio Medium Load Test 1 Prozess
# fio –runtime=60 –time_based –clocksource=clock_gettime –name=randread –numjobs=1 –group_reporting –rw=randread –random_distribution=pareto:0.9 –bs=4k –size=160g –filename=fio.tmp
4.2.1 Single Disk I/O – fio Medium Load Test 8 Prozesse
# file system random I/O, 160 Gbytes 8 threads
# fio –runtime=60 –time_based –clocksource=clock_gettime –name=randread –numjobs=8 –group_reporting –rw=randread –random_distribution=pareto:0.9 –bs=4k –size=160g –filename=fio.tmp
4.2.2 Raid0 Disk I/O – fio Medium Load Test 8 Prozesse
# file system random I/O, 160 Gbytes 8 threads
# fio –runtime=60 –time_based –clocksource=clock_gettime –name=randread –numjobs=8 –group_reporting –rw=randread –random_distribution=pareto:0.9 –bs=4k –size=160g –filename=fio.tmp
—————————————————————————————-
- Single Disk IOPing – latency Test
# ioping -c 10 .
4 KiB from . (ext4 /dev/sda1): request=1 time=15.6 ms
4 KiB from . (ext4 /dev/sda1): request=2 time=32.7 ms
4 KiB from . (ext4 /dev/sda1): request=3 time=468 us
4 KiB from . (ext4 /dev/sda1): request=4 time=30.3 ms
4 KiB from . (ext4 /dev/sda1): request=5 time=444 us
4 KiB from . (ext4 /dev/sda1): request=6 time=461 us
4 KiB from . (ext4 /dev/sda1): request=7 time=344 us
4 KiB from . (ext4 /dev/sda1): request=8 time=429 us
4 KiB from . (ext4 /dev/sda1): request=9 time=394 us
4 KiB from . (ext4 /dev/sda1): request=10 time=431 us
— . (ext4 /dev/sda1) ioping statistics —
10 requests completed in 9.08 s, 122 iops, 490.8 KiB/s
min/avg/max/mdev = 344 us / 8.15 ms / 32.7 ms / 12.5 ms
Die Latenz beträgt dieser einen Disk somit im Durchschnitt 8,15ms.
5.1. Raid0 Disk IOPing – latency Test
# ioping -c 10 .
4 KiB from . (ext4 /dev/md0): request=1 time=303 us
4 KiB from . (ext4 /dev/md0): request=2 time=522 us
4 KiB from . (ext4 /dev/md0): request=3 time=459 us
4 KiB from . (ext4 /dev/md0): request=4 time=450 us
4 KiB from . (ext4 /dev/md0): request=5 time=450 us
4 KiB from . (ext4 /dev/md0): request=6 time=433 us
4 KiB from . (ext4 /dev/md0): request=7 time=408 us
4 KiB from . (ext4 /dev/md0): request=8 time=430 us
4 KiB from . (ext4 /dev/md0): request=9 time=422 us
4 KiB from . (ext4 /dev/md0): request=10 time=452 us
— . (ext4 /dev/md0) ioping statistics —
10 requests completed in 9.01 s, 2.31 k iops, 9.02 MiB/s
min/avg/max/mdev = 303 us / 432 us / 522 us / 52 us
—————————————————————————————-
- Single Disk – dd Disk Cache deaktiviert Streaming (1x1GB)
# hdparm -W0 /dev/sda
/dev/sda:
setting drive write-caching to 0 (off)
write-caching = 0 (off)
# dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=direct && rm testfile
1+0 Datensätze ein
1+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 9,88917 s, 109 MB/s
6.1 Raid0 – dd Disk Cache deaktiviert Streaming (1x1GB)
# dd if=/dev/zero of=/root/testfile bs=1G count=1 oflag=direct && rm testfile
1+0 Datensätze ein
1+0 Datensätze aus
1073741824 Bytes (1,1 GB) kopiert, 6,2242 s3, 17 MB/s
- Single Disk – dd Disk Cache deaktiviert Latenz (1.000x512Byte)
# dd if=/dev/zero of=/root/testfile bs=512 count=1000 oflag=direct
1000+0 Datensätze ein
1000+0 Datensätze aus
512000 Bytes (512 kB) kopiert, 9,3694 s, 54,6 kB/s
7.1 Raid0 – dd Disk Cache deaktiviert Latenz (1.000x512Byte)
# hdparm -tT –direct /dev/md0
/dev/md0:
Timing O_DIRECT cached reads: 830 MB in 2.00 seconds = 414.83 MB/sec
Timing O_DIRECT disk reads: 670 MB in 3.01 seconds = 222.96 MB/sec
root@test2disk:~# dd if=/dev/zero of=/root/testfile bs=512 count=1000 oflag=direct
1000+0 Datensätze ein
1000+0 Datensätze aus
512000 Bytes (512 kB) kopiert, 0,248163 s, 2,1 MB/s
- Single Disk – hdparm – sequential
-t direct read
-T cached read
Bei diesem Test werden die Daten vom Anfang der Disk gelesen, von wo am schnellsten gelesen werden kann.
# hdparm -tT /dev/sda
/dev/sda:
Timing cached reads: 10812 MB in 2.00 seconds = 5408.35 MB/sec
Timing buffered disk reads: 336 MB in 3.00 seconds = 111.91 MB/sec
# hdparm -tT –direct /dev/sda
/dev/sda:
Timing O_DIRECT cached reads: 452 MB in 2.01 seconds = 225.09 MB/sec
Timing O_DIRECT disk reads: 336 MB in 3.00 seconds = 111.90 MB/sec
8.1 Raid0 – hdparm – sequential
hdparm -tT –direct /dev/md0
/dev/md0:
Timing O_DIRECT cached reads: 830 MB in 2.00 seconds = 414.83 MB/sec
Timing O_DIRECT disk reads: 670 MB in 3.01 seconds = 222.96 MB/sec
Ein weiteres Tool mit mehr Details zum testen der Festplatten (HDD/Disk) Performance ist z.B. Bonnie++
Interessiert in verschiedenste IT Themen, schreibe ich in diesem Blog über Software, Hardware, Smart Home, Games und vieles mehr. Ich berichte z.B. über die Installation und Konfiguration von Software als auch von Problemen mit dieser. News sind ebenso spannend, sodass ich auch über Updates, Releases und Neuigkeiten aus der IT berichte. Letztendlich nutze ich Taste-of-IT als eigene Dokumentation und Anlaufstelle bei wiederkehrenden Themen. Ich hoffe ich kann dich ebenso informieren und bei Problemen eine schnelle Lösung anbieten. Wer meinen Aufwand unterstützen möchte, kann gerne eine Tasse oder Pod Kaffe per PayPal spenden – vielen Dank.
Hallo!
Könntest du bitte Infos teilen zum Erstellen der Excel-Charts basierend auf den Ergebnissen von fio?
THX
Hallo Thomas,
das Thema ist schon ein paar Jahre her, aber soweit ich mich erinnere, habe ich die Werte von Hand in Excel als Tabelle aufgenommen und dann als Diagramm ausgewertet – also nichts automatisches. Oder meinst du die Diagrammerstellung im allgemeinen?
Hallo,
zunächst möchte ich verstehen, wie ich fio so verwende, dass es Werte schreibt, die händisch in eine Excel-Tabelle kopiert werden können.
Dann könnte man darüber nachdenken, diesen Schritt zu automatisieren.
Die Erstellung von fio-plots habe ich hier gefunden: https://louwrentius.com/creating-storage-benchmark-charts-with-fio-and-gnuplot.html
Der Nachteil dieser fertigen Lösung ist, dass ich vordefinierte Plots verwenden muss; mit Excel wäre ich hier flexibler.
THX