Linux – Debian Performance Test Raid0 vs Raid1 mit FIO

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.

  1. 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.

FIO Random Read Write Test

FIO Random Read Write Test

—————————————————————————————-

  1. 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

FIO Random Read Test

FIO Random Read Test

—————————————————————————————-

  1. 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

FIO Random Write Test

FIO Random Write Test

—————————————————————————————-

  1. 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

—————————————————————————————-

  1. 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

—————————————————————————————-

  1. 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

  1. 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

  1. 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

Link zum Manual von FIO

Ein weiteres Tool mit mehr Details zum testen der Festplatten (HDD/Disk) Performance ist z.B. Bonnie++

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.