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