Maildir Filesystem Benchmark

This benchmark is based on fsbench, a set of perl scripts to simulate delivery and reading files on Maildir system.

The goal is compare delivering and reading performance on Maildir using the four most popular journaling filesystems on Linux: EXT3 (Ordered and Writeback), ReiserFS 3.6, XFS and JFS.

As the tests of the fsbench author's were performed on an older version of the kernel, this benchmark shows the results in an operating system with an updated kernel. The OS that I chose was the CentOS 5.0, a popular enterprise Linux distribution, with kernel 2.6.18-8.1.15.

What is Maildir?

Wikipedia says: “Maildir is a widely-used format for storing e-mail that does not require application-level file locking to maintain message integrity as messages are added, moved and deleted. Each message is kept in a separate file with a unique name. All changes are made using atomic filesystem operations so that the filesystem handles file locking concurrency issues. A Maildir is a directory (often named Maildir) with three subdirectories named tmp, new, and cur.”

Benchmark scripts:

The details of fsbench can be found on author’s Website: http://untroubled.org/benchmarking/2004-04/

System Configuration:

  • CPU: 2 Xeon Quad Core 2.33 GHz

  • RAM: 4 GB DDR2 667

  • Storage: RAID 10 with 8 Drives SATA2 on 3ware 9650SE-8LP

  • OS: CentOS 5.0

  • Kernel: 2.6.18-8.1.15

    Filesystems:

    The filesystems was formatted and mounted with specified options to increase performance on maildir, like noatime and dir_index (ext3).

    Ext3 Ordered

  • mkfs: mke2fs -j -J size=400 -i 8192 -O dir_index

  • mount: ext3 -o noatime,data=ordered

    Ext3 Writeback

  • mkfs: mke2fs -j -J size=400 -i 8192 -O dir_index

  • mount: ext3 -o noatime,data=writeback

    XFS

  • mkfs: mkfs.xfs -f -l size=32768b,version=2

  • mount: xfs -o noatime,logbufs=8,logbsize=131072

    ReiserFS

  • mkfs: mkreiserfs --journal-size 32749 --format 3.6

  • mount: reiserfs -o noatime,notail

    JFS

  • mkfs: jfs_mkfs

  • mount: jfs -o noatime

    Results:

    Three tests were done for each filesystem. The amount of time of first two have been configured for 2 minutes and the last for 10 minutes.

    The result log for three tests can be downloaded here: log.tar.gz

    The charts were based on average values of the loop counts, that represents a message delivery/read, and number of writers, which is the number of concurrent delivery process. (bigger is better)


    Last updated Sun Dec 2 14:14:55 BRST 2007.