Testbed and methods
When benchmarking filesystems through virtual guest instances, extreme care should be put to avoid benchmarking the wrong thing (eg: host-side pagecache vs real disk access speed). In order to put a focus on filesystem speed and less on hypervisor-specific configuration, I kept KVM guest machine configuration very simple, with:
- a 32 GB RAW virtual HD image file, with and without block prealloaction (fallocate)
- IDE controller with cache policy set to none or writeback (see below)
- 2048 MB guest RAM
- Windows 7 x64 as guest OS
- all other things were kept at default settings.
A note about the cache settings: as it seems that BTRFS is especially bad with direct (non-cached) access, I run some test with cache=writeback also.
The host system was a Dell D620 laptop. While I understand that this is not your typical virtualizer platform, remember that we are testing filesystems performance here, not hardware by itself. The detailed host specifications are:
- Core2 T7200 CPU @ 2.0 GHz
- 4 GB of DDR2-667 RAM
- Quadro NVS110 videocard (used in text-only mode)
- a Seagate ST980825AS 7200 RPM 80 GB SATA hard disk drive (in IDE compatibility mode, as the D620's BIOS does not support AHCI operation)
- O.S. Fedora 17 amd64 with kernel version 3.5.4-2.fc17.x86_64
The internal hard disk was partitioned into three slices: a first ~9 GB ext4 partition for the root directory, a second ~4 GB partition for the swap file and a third ~60 GB partition (mounted on /opt) for testing purposes (HD images were kept here). To see as BTRFS's CoW behavior affects performance, I mounted it with and without the “nodatacow” option.
Guest performances were measured by different means:
- Windows 7 (first-phase) install time
- Random read / write speed
- Sequential read / write speed
Random / Sequential speed where measured using the latest IOMeter stable build (2006.07.27).