Durchgeführt wurde der Test unter Proxmox 5, die Btrfs Version entspricht 4.7.3.
Im Btrfs Wiki wird unter dem aktuellen Status die Performance von RAID1 als noch optimierbar beschrieben.
Vermutlich wird nicht von beiden Platten parallel gelesen, sondern wohl nur von einer. Zusätzlich wollte ich den Schreibperformanceverlust testen, welcher technisch bedingt auftreten muss. Da die Schreiboperation erst auf beiden Platten abgeschlossen sein muss, eh die Operation erfolgreich zurückgegeben wird.
Beide Platten sind mit ca 1,5Jahren im Versatz gekauft und die WD40EFRX-68WT0N0
lief auch schon produktiv.
Um die durchschnittliche Geschwindigkeit zu testen habe ich dd
genommen, welche 10 mal 1GB in eine Datei schreiben sollte. dd if=/dev/zero of=/[Mountpoint]/testfile bs=1G count=10 oflag=direct
dies hat zusätzlich noch die Zeit gemessen und auch gleich die Datenrate ausgerechnet
Um das Verhalten bei kleinen Dateien zu messen habe ich den Befehl abgeändert, dd if=/dev/zero of=/[Mountpoint]/testfile bs=4KB count=1000 oflag=direct
hier werden nun 1000 mal 4Kilobyte geschrieben, was der Sektorgröße der Festplatten entspricht.
Um einen Lesetest zu machen habe ich hdparm -t --direct /dev/disk/by-label/[Btrfs Pool]
genutzt.
Platten einzeln als Single Pool
Device Model: WDC WD40EFRX-68N32N0
Firmware Version: 82.00A82
schreiben großer Dateien:
10000000000 bytes (10 GB, 9.3 GiB) copied, 88.2098 s, 113 MB/s
10000000000 bytes (10 GB, 9.3 GiB) copied, 83.5089 s, 120 MB/s
10000000000 bytes (10 GB, 9.3 GiB) copied, 85.4703 s, 117 MB/s
schreiben kleiner Dateien:
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.610423 s, 6.6 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.709546 s, 5.6 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.792174 s, 5.0 MB/s
Lesegeschwindigkeit:
Timing O_DIRECT disk reads: 528 MB in 3.01 seconds = 175.57 MB/sec
Timing O_DIRECT disk reads: 526 MB in 3.01 seconds = 174.70 MB/sec
Timing O_DIRECT disk reads: 530 MB in 3.01 seconds = 176.10 MB/sec
Device Model: WDC WD40EFRX-68WT0N0
Firmware Version: 82.00A82
schreiben großer Dateien:
10000000000 bytes (10 GB, 9.3 GiB) copied, 98.4907 s, 102 MB/s
10000000000 bytes (10 GB, 9.3 GiB) copied, 98.1773 s, 102 MB/s
10000000000 bytes (10 GB, 9.3 GiB) copied, 98.6131 s, 101 MB/s
schreiben kleiner Dateien:
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.695181 s, 5.8 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.648665 s, 6.2 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.72071 s, 5.6 MB/s
Lesegeschwindigkeit:
Timing O_DIRECT disk reads: 470 MB in 3.00 seconds = 156.58 MB/sec
Timing O_DIRECT disk reads: 470 MB in 3.00 seconds = 156.61 MB/sec
Timing O_DIRECT disk reads: 476 MB in 3.01 seconds = 158.05 MB/sec
RAID1
schreiben großer Dateien:
10737418240 bytes (11 GB, 10 GiB) copied, 102.968 s, 104 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 97.5477 s, 110 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 97.6364 s, 110 MB/s
schreiben kleiner Dateien:
4000000 bytes (4.0 MB, 3.8 MiB) copied, 1.02438 s, 3.9 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 0.678252 s, 5.9 MB/s
4000000 bytes (4.0 MB, 3.8 MiB) copied, 1.26067 s, 3.2 MB/s
Lesegeschwindigkeit:
Timing O_DIRECT disk reads: 472 MB in 3.01 seconds = 156.81 MB/sec
Timing O_DIRECT disk reads: 470 MB in 3.00 seconds = 156.66 MB/sec
Timing O_DIRECT disk reads: 476 MB in 3.00 seconds = 158.62 MB/sec
Cache
Um die Auswirkungen des Schreibecaches zu testen, habe ich bei einer anderen Platte diesen mit hdparm -W1 /dev/[Disk]
aktiviert und mit hdparm -W0 /dev/[Disk]
deaktiviert.
Der Test für kleine Daten wurde hier von 4KB auf 512Byte angepasst, da die Platte 512Byte Sektoren besitzt.
Um folgende Festplatte handelt es sich:
Model Family: Seagate Barracuda 7200.12
Device Model: ST3500418AS
aktiver Cache
/dev/disk/by-label/realdevice:
setting drive write-caching to 1 (on)
write-caching = 1 (on)
10737418240 bytes (11 GB, 10 GiB) copied, 85.3319 s, 126 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 85.5178 s, 126 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 85.0154 s, 126 MB/s
512000 bytes (512 kB, 500 KiB) copied, 0.623735 s, 821 kB/s
512000 bytes (512 kB, 500 KiB) copied, 0.599911 s, 853 kB/s
512000 bytes (512 kB, 500 KiB) copied, 0.625576 s, 818 kB/s
deaktiver Cache
/dev/disk/by-label/realdevice:
setting drive write-caching to 0 (off)
write-caching = 0 (off)
10737418240 bytes (11 GB, 10 GiB) copied, 85.4688 s, 126 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 85.3202 s, 126 MB/s
10737418240 bytes (11 GB, 10 GiB) copied, 85.5215 s, 126 MB/s
512000 bytes (512 kB, 500 KiB) copied, 12.1159 s, 42.3 kB/s
512000 bytes (512 kB, 500 KiB) copied, 12.1652 s, 42.1 kB/s
512000 bytes (512 kB, 500 KiB) copied, 12.1403 s, 42.2 kB/s
Fazit
Die Schreibgeschwindigkeit orientiert sich notwendigerweise an der langsamsten Festplatte, wird durch den Cache des Softwareraid von Btrfs aber leicht gesteigert.
Die Lesegeschwindigkeit ist wie im Btrfs Wiki steht, noch ausbaufähig, es hierbei nur von einer Fesplatte gelesen. Dies wird auch von atop
bestätigt.
Der Schreibcache zeigt vor allem bei kleinen Daten einen deutlichen Vorteil, große Datenmengen werden durch die Datenrate gebremst weniger durch die Zugriffszeiten.
Trivia
Es ist bei einem Btrfs RAID1 problemlos möglich, die einzelnen Platten zu mounten, statt den Btrfs Pool. Wenn hier auch Dateien bearbeitet werden, werden die auch auf die 2. Platte übernommen und sind auch im Pool sichtbar.
Um die Konsistenz der Dateien nicht zu gefährden, empfehle ich dies nicht zu tun und normal den Pool zu mounten.