Testing Out The Btrfs Mount Options On Linux 3.2
Earlier this month I benchmarked all the major Linux file-systems of Ubuntu 12.04: ReiserFS, JFS, EXT2, EXT3, EXT4, Btrfs, and XFS. While Btrfs performed well with Ubuntu 12.04 LTS, it was not always the fastest although it does offer the most advanced feature-set. For those looking to tune a Btrfs file-system for performance, published now are some reference benchmarks showing the Linux Btrfs performance with varying mount options.
For this Btrfs mount option testing I used the Intel Core i5 "Sandy Bridge" notebook from the earlier Ubuntu 12.04 LTS article with the Intel X-25 SSD and Ubuntu 12.04 x86_64 operating system with Linux 3.2 kernel. The Btrfs file-system was tested with its default mount options as found from the Ubuntu 12.04 installation (nospacecache,relatime,rw,ssd) and then testing a variety of well-known mount options. The tested Btrfs mount options included space caching, no data copy-on-write, Zlib compression, LZO compression, auto-defrag, and free inode cache.
Below are the relevant mount option descriptions from the Btrfs web-page.
space_cache - Btrfs stores the free space data ondisk to make the caching of a block group much quicker (Kernel 2.6.37+). It's a persistent change and is safe to boot into old kernels.
nodatacow - Do not copy-on-write data. datacow is used to ensure the user either has access to the old version of a file, or to the newer version of the file. datacow makes sure we never have partially updated files written to disk. nodatacow gives slight performance boost by directly overwriting data (like ext), at the expense of potentially getting partially updated files on system failures. Performance gain is usually < 5% unless the workload is random writes to large database files, where the difference can become very large
compress=zlib - Better compression ratio. It's the default and safe for olders kernels.
compress=lzo - Fastest compression. btrfs-progs 0.19 or olders will fail with this option. The default in the kernel 2.6.39 and newer.
autodefrag - will detect random writes into existing files and kick off background defragging. It is well suited to bdb or sqlite databases, but not virtualization images or big databases (yet). Once the developers make sure it doesn't defrag files over and over again, they'll move this toward the default. (Kernel 3.0+)
inode_cache - enable the new free inode cache. This option maybe slowdown your system at first run. (Kernel 3.0+)
This testing is quite straightforward so we can move directly to the results from this Ubuntu 12.04 Btrfs benchmarking.