LVM2 RAID vs mdadm RAID 0, 5, 10

Ich habe mir 4 neue HGST Ultrastar A7K3000 2TB SATA6 Festplatten für meine Server gegönnt. Zum Vergleichen habe ich ein paar Tests mit LVM und mdadm gemacht.

Dafür habe ich je ein 5GB großes Setup gebaut und mit dd die Volumen erst gelesen und dann beschrieben. Dies habe ich in dieser Reihenfolge gemacht, um sicherzugehen, dass keine Daten aus dem cash gelesen werden.

Dabei bin ich zu folgenden spannenden Ergebnissen gekommen:

5GB READ/s READ/MB WRITE/s WRITE/MB
LVM RAID0 9,97195 s 538 MB/s 9,64365 s 557 MB/s
LVM RAID5 31,1128 s 173 MB/s 67,4213 s 79,7 MB/s
LVM RAID10 18,661 s 288 MB/s 26,5428 s 202 MB/s
MDADM RAID0 9,81575 s 547 MB/s 9,5395 s 563 MB/s
MDADM RAID5 20,528 s 260 MB/s 24,9739 s 214 MB/s
MDADM RAID10 17,5713 s 305 MB/s 19,529 s 275 MB/s

Mein Fazit: LVM ist doch deutlich langsamer als mdadm. Erschrocken hat mich die 2,6 fach schlechtere Schreibperformance bei LVM Raid5. Überrascht hat mich auch, dass ein mdadm raid10 fast die Nativ mögliche Geschmeidigkeit, 1/2 facht von reid0, erreicht hat.

Für die Testbedienungen habe ich ein aktuelles Ubuntu 14.04 LTS mit lvm2 2.02.98-6ubuntu2 und mdadm 3.2.5-5ubuntu4.2 verwendet.

lvs
  LV     VG   Attr      LSize Pool Origin Data%  Move Log         Copy%  Convert
  raid0  vg   -wi-a---- 5,00g                                                   
  raid10 vg   mwi-a-m-- 5,00g                         raid10_mlog 100,00        
  raid5  vg   rwi-a-r-- 5,00g

LVM RAID0 mit 4 Festplatten lesen/schreiben

lvcreate -i4 -I4 -L 5G -n raid0 vg

time dd of=/dev/zero if=/dev/mapper/vg-raid0 bs=4M
1280+0 records in
1280+0 records out
5368709120 bytes (5,4 GB) copied, 9,97195 s, 538 MB/s

real	0m9.975s
user	0m0.008s
sys	0m8.160s

time dd if=/dev/zero of=/dev/mapper/vg-raid0 bs=4M conv=fdatasync
dd: error writing ‘/dev/mapper/vg-raid0’: No space left on device
1281+0 records in
1280+0 records out
5368709120 bytes (5,4 GB) copied, 9,64365 s, 557 MB/s

real	0m9.646s
user	0m0.000s
sys	0m6.964s

lvm raid 5 lesen/schreiben

lvcreate --type raid5 -i3 -I4 -L 5G -n raid5 vg
time dd of=/dev/zero if=/dev/mapper/vg-raid5 bs=4M
1281+0 records in
1281+0 records out
5372903424 bytes (5,4 GB) copied, 31,1128 s, 173 MB/s

real	0m31.115s
user	0m0.000s
sys	0m15.652s

time dd if=/dev/zero of=/dev/mapper/vg-raid5 bs=4M conv=fdatasync
dd: error writing ‘/dev/mapper/vg-raid5’: No space left on device
1282+0 records in
1281+0 records out
5372903424 bytes (5,4 GB) copied, 67,4213 s, 79,7 MB/s

real	1m7.424s
user	0m0.000s
sys	0m8.020s

lvm raid 10

lvcreate -i2 -m1 -I4 -L 5G -n raid10 vg
time dd of=/dev/zero if=/dev/mapper/vg-raid10 bs=4M
1280+0 records in
1280+0 records out
5368709120 bytes (5,4 GB) copied, 18,661 s, 288 MB/s

real	0m18.664s
user	0m0.012s
sys	0m10.916s

time dd if=/dev/zero of=/dev/mapper/vg-raid10 bs=4M conv=fdatasync
dd: error writing ‘/dev/mapper/vg-raid10’: No space left on device
1281+0 records in
1280+0 records out
5368709120 bytes (5,4 GB) copied, 26,5428 s, 202 MB/s

real	0m26.545s
user	0m0.028s
sys	0m8.556s

Für das erstellen des mdadm Raid habe ich auch wieder lvm Volumen genutzt um auf die gleiche Größe von 5GB zu kommen.
mdadm raid0 lesen/schreiben

time dd of=/dev/zero if=/dev/md2 bs=4M 
2559+1 records in
2559+1 records out
10735321088 bytes (11 GB) copied, 19,6315 s, 547 MB/s

real	0m19.634s
user	0m0.012s
sys	0m14.864s

time dd if=/dev/zero of=/dev/md2 bs=4M conv=fdatasync
dd: error writing ‘/dev/md2’: No space left on device
2560+0 records in
2559+0 records out
10735321088 bytes (11 GB) copied, 19,0791 s, 563 MB/s

real	0m19.082s
user	0m0.020s
sys	0m13.520s

mdadm raid5 lesen/schreiben

lvs
  LV     VG   Attr      LSize Pool Origin Data%  Move Log         Copy%  Convert
  lv_sdc vg   -wi-ao--- 1,66g                                                   
  lv_sdd vg   -wi-ao--- 1,66g                                                   
  lv_sde vg   -wi-ao--- 1,66g                                                   
  lv_sdf vg   -wi-ao--- 1,66g  

time dd of=/dev/zero if=/dev/md2 bs=4M 
1273+1 records in
1273+1 records out
5343019008 bytes (5,3 GB) copied, 20,528 s, 260 MB/s

real	0m20.532s
user	0m0.012s
sys	0m10.864s

time dd if=/dev/zero of=/dev/md2 bs=4M conv=fdatasync
dd: error writing ‘/dev/md2’: No space left on device
1274+0 records in
1273+0 records out
5343019008 bytes (5,3 GB) copied, 24,9739 s, 214 MB/s

real	0m24.976s
user	0m0.000s
sys	0m7.432s

mdadm raid10 lesen/schreiben

time dd of=/dev/zero if=/dev/md2 bs=4M 
1278+1 records in
1278+1 records out
5363466240 bytes (5,4 GB) copied, 17,5713 s, 305 MB/s

real	0m17.577s
user	0m0.012s
sys	0m10.068s

time dd if=/dev/zero of=/dev/md2 bs=4M conv=fdatasync
dd: error writing ‘/dev/md2’: No space left on device
1279+0 records in
1278+0 records out
5363466240 bytes (5,4 GB) copied, 19,529 s, 275 MB/s

real	0m19.532s
user	0m0.008s
sys	0m7.772s

Zwischen den einzelnen Test habe ich immer den Cash gelöscht.
free && sync && echo 3 > /proc/sys/vm/drop_caches && free

Tags: ,