23. November 2012
Benchmark: ext4 vs. btrfs (Disk-IO und MySQL-Performance)
Wir haben das Linux-Standard-Dateisystem ext4 und das noch als experimentell gekennzeichnete btrfs, das viele interessante Features wie Live-Snapshots, Online-Resizing, RAID etc. mitbringt, in einem Benchmark mit dem Tool sysbench antreten lassen, um sowohl die Disk-IO-Performance als auch die MySQL-Performance zumessen.
Versuchsaufbau: Wir haben jeweils ein identisches Ubuntu 12.10 x86_64-Server-System mit 1GB RAM herangezogen (genauer gesagt, eine VirtualBox-VM, die immer auf demselben Host-System ausgeführt wurde), das nur eine einzige große /-Partition benutzt, einmal mit ext4, einmal mit btrfs und einmal mit btrfs + LZO-Kompression (mount-Parameter: compress=lzo). Auf diesem System waren jeweils nur MySQL (Pakete: mysql-server und mysql-client in Version 5.5.28-0ubuntu0.12.10.1) sowie sysbench installiert.
Zur Messung der Disk-IO-Performance haben wir 15GB Testdaten mit folgendem Befehl erzeugt:
sysbench --test=fileio --file-total-size=15G prepare
Die Disk-IO-Performance wurde dann mit folgendem Befehl gemessen:
sysbench --test=fileio --file-total-size=15G --file-test-mode=rndrw --init-rng=on --max-time=300 --max-requests=0 run
Zur Messung der MySQL-Performance haben wir 1.000.000 Testdatensätze angelegt...
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=yourrootsqlpassword prepare
... und die Performance dann mit diesem Befehl gemessen (wobei wir erst den dritten Testlauf gemessen haben, damit sich MySQL aufwärmen konnte - Caches, etc.; allerdings haben sich zwischen den Testläufen keine signifikanten Unterschiede ergeben):
sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=yourrootsqlpassword --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
Ergebnisse Disk-IO-Performance:
Hier hinkt btrfs leider deutlich hinterher...
| ext4 | btrfs | btrfs + compress=lzo |
Operationen | 1.413.085 | 376.639 | 374.762 |
Transferrate | 32.281Mb/sec | 8.6032Mb/sec | 8.5613Mb/sec |
Ergebnisse MySQL-Performance:
Bei der MySQL-Performance gibt es keine großen Unterschiede; btrfs ist sogar leicht schneller als ext4.
| ext4 | btrfs | btrfs + compress=lzo |
Transaktionen | 715.56 per sec. | 724.95 per sec. | 718.90 per sec. |