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, 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 can work on block devices as well as files. fio accepts job descriptions in a simple-to-understand text format. Several example job files are included. fio displays all sorts of I/O performance information, including complete IO latencies and percentiles. Fio is in wide use in many places, for both benchmarking, QA, and verification purposes. It supports Linux, FreeBSD, NetBSD, OS X, OpenSolaris, AIX, HP-UX, and Windows.
| Tags | Benchmark Filesystems |
|---|---|
| Licenses | GPLv2 |
| Operating Systems | POSIX Linux BSD Solaris HP-UX AIX OS X Windows XP/Vista/W7 Android |
| Implementation | C |
Recent releases


Release Notes: Integration of the gfio GTK frontend. Better Android integration. The initial file fill honors data compression settings. An option for controlling randomness of I/O (percentage_random) instead of being fully random or fully sequential. Fixes a bug in uneven pattern sizes for verification. Various other important fixes.


Release Notes: This release adds an --eta-newline option to insert ETA new line at fixed intervals. Fixes for the CPU clock, notably PPC. Fixes for workloads with read/write file locking. A fix for skewed latencies with rated IOPS. Fixes a bug with block sizes varying more than 64x. Improves the LFSR implementation. Fixes missing JSON bandwidth output. Various fixes for the Android platform. Uses ginstall on Solaris. Fixes man page installation. Other bugfixes and improvements.


Release Notes: Autodetect features with a new configure script when building. Improve ETA for some workloads. Support for verify mode that requires no metadata, greatly reducing memory requirements for big device verify workloads. Ensures fsync is always done, even for direct/raw I/O (if asked to). Support for unified read/write/trim reporting. A few axmap and cpuclock bugfixes. Fixes zones and numjobs used together. Adds support for idle profiling, showing idle system CPU when running a workload. Various Windows fixes. FreeBSD now supports CPU affinities. Many other fixes; all users should upgrade.


Release Notes: A few build issues were fixed on a few select platforms, where issues with CC override or missing CPU clock support would break compilation. Setting of size= for zipf/pareto workloads was fixed. Floating math for CPU clock was sped up and improved, further reducing overhead. A potential null pointer dereference on IO verification and requeue events was fixed.


Release Notes: Android platform support was added. Memory consumption on Windows when using many files was reduced. Support for non-uniform random IO was added, using pareto/zipf distributions. A faster LFSR random generator was provided. Various fixes and improvements were made in the network engine. Ping-pong network IO is now supported. The default clock was sped up, and accuracy of the CPU clock was improved. A potential bi-modal performance issue on Linux with multiple processes and O_DIRECT was fixed. A timekeeping race bug with threads was fixed. NUMA job and memory control options were added. A bug in the CPU load engine was fixed. There were various other fixes and improvements.
Recent comments
30 Nov 2012 18:10
Getting 'stat64 already defined' type errors when trying to "make" fio on RedHat/Centos 6.3 (linux kernel 2.6.18-308). Nothing in the www.spinics.net/lists/fio mailing list archives about it. No response to my signup request to the fio@vger.kernel.org mailing list, so I'm posting this problem here.
Has anybody else seen a problem like this?
> make
DEP .depend
CC gettime.o
: Assembler messages:
:354: Error: symbol `fstatat64' is already defined
:388: Error: symbol `fstat64' is already defined
:418: Error: symbol `lstat64' is already defined
:448: Error: symbol `stat64' is already defined
:1704: Error: symbol `pread64' is already defined
make: *** [gettime.o] Error 1
25 Oct 2012 16:44
Id appreciate it if anyone here could let me know how to find that information.
25 Oct 2012 16:43
When was the switch made to version 3 from version 2 of the headers for --minimal output and was something other than the order of the FIO Version/Jobname/Groupid/Error changed?
moving between 1.5.8 and 2.0.10 it went from:
fio 1.50
2 job 0 0
to
3 fio-2.0.10 job 0 0
10 Oct 2012 17:30
I have a couple of test requirements that I would appreciate guidance on how to perform with fio.
1. 80/20 mix of random/sequential IO.
2. 80% Random, 10% '00', & 10% 'FF' mixture of data patterns
11 Jun 2012 12:09
Hi Guys,
I'm having an issue and I'd appreciate if someone could lend a hand.
I am trying to generate latency logs and bandwidth logs with fio, but am having no luck.
The settings I'm using are based off of the 1mbs_clients test :
[global]
size=32m
rw=read
directory=d:/tmp
rate=1250
ratemin=1024
write_lat_log
write_bw_log
[file1]
startdelay=0
filename=file1test
[file2]
startdelay=4
[file3]
startdelay=8
[file4]
startdelay=12
with the following command line (I have tries many other variations) :
fio examples/1mbs_clients --section=file1 --output=d:/tmp/output.log
but whatever I do, I can not generate the latency-log or bandwidth log.
Any help would be greatly appreciated.
Many Thanks,
Adrian.