Benchmark, Bonnie++, FIO, FreeBSD, GSoC, IOZONE, RTEMS, Software

Comparing IO benchmarks: FIO, IOZONE and BONNIE++

IO benchmarks refer to the computerized test for measuring various properties of an IO device under multiple conditions. Various features include Read/Write speed, IOPS, seek time, etc and various conditions refer to random/sequential reads/writes, block size used by the filesystem, buffer cache size, etc. There are multiple IO benchmarks available online, but the top 3 opensource IO benchmarks, in my view, include FIO, IOZONE, and BONNIE++. There are several pros and cons for each of them, which we will be discussing in this blog post.

Fio (Documentation, Repository)

FIO is an I/O tool meant to be used both for benchmark and stress/hardware verification. It has support for 13 different types of I/O engines (sync, mmap, libaio, posixaio, SG v3, Omega Replica Watches splice, null, network, syslet, guasi, solarisaio, and more), I/O priorities (for newer Linux kernels), rate I/O, forked or threaded jobs, and much more. It supports Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, and Windows.

Example: sudo fio –name=randwrite –ioengine=libaio –iodepth=1 –rw=randwrite –bs=4k –direct=0 –size=512M –numjobs=2 –runtime=240 –group_reporting


Greatly improved disk I/O benchmark based on the code for Bonnie by Tim Bray. Bonnie++, rewritten in C++ by Russell Coker (, adds the facility to test more than 2Gb of storage on 32-bit machines, and tests for file create(), stat(), unlink() operations.

Example: bonnie++ -d /tmp -s 4G -n 0 -m TEST -f -b -u udit

IOzone (Documentation, Repository)

The benchmark generates and measures a variety of file operations. IOzone is useful for performing broad filesystem analysis of a vendor’s computer platform. It can also be used for NFS performance testing and the latest version now supports cluster testing as well. IOzone had been ported to numerous UNIX OSes and Windows NT.

Example: iozone -e -I -a -s 100M -r 4k -r 512k -r 16M -R -i 0 -i 1 -i 2 -f /dev/sdda0s1


Activeness in
High Very High Moderate
I/O buffer types
direct, buffered direct, atomic, buffered Direct, Buffered
IO R/W available Read, write, random read,
random write, reread, rewrite,
strided read/write, Random Mix,
Backwards read, Fread, Fwrite, Freread,
Read, write, random read/write
trim, random trim, readwrite, random
readwrite, trimwrite
Read/write, random
Special type of IO Mmap, Async I/O sync, psync, vsync, pvsync, pvsync2, libaio,
posixaio, solarisaio, windosaio, mmap, sg, net,
netsplice, cpuio, guasi, rdma, falloc, ftruncate,
e4defrag, rados, rbd, gfapi, gfapi_async, and lot more.
Types of random
datasets generated
for random R/W
Uniform Uniform, gaussian, pareto, ziph, zoned,
absolute zoned
Random number
generating engine
Fisher yates algo tausworthe, lfsr, tausworthe64
Flexibility Quite customizable ‘Flexibility’ is in its name! It’s Highly configurable,
with number of available modes.
mostly automatic. Very
less configurable
License type customized GPLv2 GPLv2
Benchmark type Filesystem benchmark that can benchmark
Storage devices too
Specifically built for benchmarking storage device,
but can be used for filesystem benchmarking too
Filesystem benchmark
Statistics available
as output
Amount of I/O generated in KBps Max. Min. Avg latency with standard deviation, Average
bandwidth, IOPS , amount of I/O generated in KBps, average
queue depth
Amount of I/O generated in MBps
available in CSV format
Others Stonewalling to synchronize threads Pattern verification available; user configurable
error handling, clock settings etc;


Although it’s pretty clear from the above comparison that Fio fits perfectly for benchmarking storage devices, IOzone and Bonnie++ are still used for applications that don’t require too many features, just simple read/write. quick benchmarking. Further, for any naive user, getting grip on IOzone is much much easier than struggling with complex features of Fio.

Tagged , , , ,

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.