fio
---

fio is a tool that will spawn a number of threads or processes doing a
particular type of io action as specified by the user. fio takes a
number of global parameters, each inherited by the thread unless
otherwise parameters given to them overriding that setting is given.
The typical use of fio is to write a job file matching the io load
one wants to simulate.


Source
------

fio resides in a git repo, the canonical place is:

	git://git.kernel.dk/fio.git

When inside a corporate firewall, git:// URL sometimes does not work.
If git:// does not work, use the http protocol instead:

	http://git.kernel.dk/fio.git

Snapshots are frequently generated and include the git meta data as well.
Snapshots can download from:

	http://brick.kernel.dk/snaps/

There are also two official mirrors. Both of these are synced within
an hour of commits landing at git.kernel.dk. So if the main repo is
down for some reason, either one of those is safe to use:

	git://git.kernel.org/pub/scm/linux/kernel/git/axboe/fio.git
	https://git.kernel.org/pub/scm/linux/kernel/git/axboe/fio.git

or

	https://github.com/axboe/fio.git


Binary packages
---------------

Debian:
Starting with Debian "Squeeze", fio packages are part of the official
Debian repository. http://packages.debian.org/search?keywords=fio

Ubuntu:
Starting with Ubuntu 10.04 LTS (aka "Lucid Lynx"), fio packages are part
of the Ubuntu "universe" repository.
http://packages.ubuntu.com/search?keywords=fio

Red Hat, CentOS & Co:
Dag Wieërs has RPMs for Red Hat related distros, find them here:
http://dag.wieers.com/rpm/packages/fio/

Mandriva:
Mandriva has integrated fio into their package repository, so installing
on that distro should be as easy as typing 'urpmi fio'.

Solaris:
Packages for Solaris are available from OpenCSW. Install their pkgutil
tool (http://www.opencsw.org/get-it/pkgutil/) and then install fio via
'pkgutil -i fio'.

Windows:
Bruce Cran <bruce@cran.org.uk> has fio packages for Windows at
http://www.bluestop.org/fio/ .


Mailing list
------------

The fio project mailing list is meant for anything related to fio including
general discussion, bug reporting, questions, and development.

An automated mail detailing recent commits is automatically sent to the
list at most daily. The list address is fio@vger.kernel.org, subscribe
by sending an email to majordomo@vger.kernel.org with

	subscribe fio

in the body of the email. Archives can be found here:

	http://www.spinics.net/lists/fio/

and archives for the old list can be found here:

	http://maillist.kernel.dk/fio-devel/


Building
--------

Just type 'configure', 'make' and 'make install'.

Note that GNU make is required. On BSD it's available from devel/gmake;
on Solaris it's in the SUNWgmake package. On platforms where GNU make
isn't the default, type 'gmake' instead of 'make'.

Configure will print the enabled options. Note that on Linux based
platforms, the libaio development packages must be installed to use
the libaio engine. Depending on distro, it is usually called
libaio-devel or libaio-dev.

For gfio, gtk 2.18 (or newer), associated glib threads, and cairo are required
to be installed.  gfio isn't built automatically and can be enabled
with a --enable-gfio option to configure.

To build FIO with a cross-compiler:
 $ make clean
 $ make CROSS_COMPILE=/path/to/toolchain/prefix
Configure will attempt to determine the target platform automatically.

It's possible to build fio for ESX as well, use the --esx switch to
configure.


Windows
-------

On Windows, Cygwin (http://www.cygwin.com/) is required in order to
build fio. To create an MSI installer package install WiX 3.8 from
http://wixtoolset.org and run dobuild.cmd from the
os/windows directory.

How to compile fio on 64-bit Windows:

 1. Install Cygwin (http://www.cygwin.com/). Install 'make' and all
    packages starting with 'mingw64-i686' and 'mingw64-x86_64'.
 2. Open the Cygwin Terminal.
 3. Go to the fio directory (source files).
 4. Run 'make clean && make -j'.

To build fio on 32-bit Windows, run './configure --build-32bit-win' before 'make'.

It's recommended that once built or installed, fio be run in a Command Prompt
or other 'native' console such as console2, since there are known to be display
and signal issues when running it under a Cygwin shell
(see http://code.google.com/p/mintty/issues/detail?id=56 for details).


Command line
------------

$ fio
	--debug			Enable some debugging options (see below)
	--parse-only		Parse options only, don't start any IO
	--output		Write output to file
	--runtime		Runtime in seconds
	--bandwidth-log		Generate per-job bandwidth logs
	--minimal		Minimal (terse) output
	--output-format=type	Output format (terse,json,normal)
	--terse-version=type	Terse version output format (default 3, or 2 or 4).
	--version		Print version info and exit
	--help			Print this page
	--cpuclock-test		Perform test/validation of CPU clock
	--crctest[=test]	Test speed of checksum functions
	--cmdhelp=cmd		Print command help, "all" for all of them
	--enghelp=engine	Print ioengine help, or list available ioengines
	--enghelp=engine,cmd	Print help for an ioengine cmd
	--showcmd		Turn a job file into command line options
	--readonly		Turn on safety read-only checks, preventing
				writes
	--eta=when		When ETA estimate should be printed
				May be "always", "never" or "auto"
	--eta-newline=time	Force a new line for every 'time' period passed
	--status-interval=t	Force full status dump every 't' period passed
	--section=name		Only run specified section in job file.
				Multiple sections can be specified.
	--alloc-size=kb		Set smalloc pool to this size in kb (def 1024)
	--warnings-fatal	Fio parser warnings are fatal
	--max-jobs		Maximum number of threads/processes to support
	--server=args		Start backend server. See Client/Server section.
	--client=host		Connect to specified backend.
	--remote-config=file	Tell fio server to load this local file
	--idle-prof=option	Report cpu idleness on a system or percpu basis
				(option=system,percpu) or run unit work
				calibration only (option=calibrate).
	--inflate-log=log	Inflate and output compressed log


Any parameters following the options will be assumed to be job files,
unless they match a job file parameter. Multiple job files can be listed 
and each job file will be regarded as a separate group. fio will stonewall
execution between each group.

The --readonly option is an extra safety guard to prevent users from
accidentally starting a write workload when that is not desired.  Fio
will only write if rw=write/randwrite/rw/randrw is given.  This extra
safety net can be used as an extra precaution as --readonly will also
enable a write check in the io engine core to prevent writes due to
unknown user space bug(s).

The --debug option triggers additional logging by fio.
Currently, additional logging is available for:

	process		Dump info related to processes
	file		Dump info related to file actions
	io		Dump info related to IO queuing
	mem		Dump info related to memory allocations
	blktrace	Dump info related to blktrace setup
	verify		Dump info related to IO verification
	all		Enable all debug options
	random		Dump info related to random offset generation
	parse		Dump info related to option matching and parsing
	diskutil	Dump info related to disk utilization updates
	job:x		Dump info only related to job number x
	mutex		Dump info only related to mutex up/down ops
	profile		Dump info related to profile extensions
	time		Dump info related to internal time keeping
	net		Dump info related to networking connections
	rate		Dump info related to IO rate switching
	compress	Dump info related to log compress/decompress
	? or help	Show available debug options.

One can specify multiple debug options: e.g. --debug=file,mem will enable
file and memory debugging.

The --section option allows one to combine related jobs into one file.
E.g. one job file could define light, moderate, and heavy sections. Tell fio to
run only the "heavy" section by giving --section=heavy command line option.
One can also specify the "write" operations in one section and "verify"
operation in another section.  The --section option only applies to job
sections.  The reserved 'global' section is always parsed and used.

The --alloc-size switch allows one to use a larger pool size for smalloc.
If running large jobs with randommap enabled, fio can run out of memory.
Smalloc is an internal allocator for shared structures from a fixed size
memory pool. The pool size defaults to 1024k and can grow to 128 pools.

NOTE: While running .fio_smalloc.* backing store files are visible in /tmp.


Job file
--------

See the HOWTO file for a complete description of job file syntax and
parameters.  The --cmdhelp option also lists all options. If used with
an option argument, --cmdhelp will detail the given option.  The job file
format is in the ini style format, as that is easy for the user to review
and modify.

This README contains the terse version. Job files can describe big and
complex setups that are not possible with the command line.  Job files
are a good practice even for simple jobs since the file provides an
easily accessed record of the workload and can include comments.

See the examples/ directory for inspiration on how to write job files.  Note
the copyright and license requirements currently apply to examples/ files.


Client/server
------------

Normally fio is invoked as a stand-alone application on the machine
where the IO workload should be generated. However, the frontend and
backend of fio can be run separately. Ie the fio server can generate
an IO workload on the "Device Under Test" while being controlled from
another machine.

Start the server on the machine which has access to the storage DUT:

fio --server=args

where args defines what fio listens to. The arguments are of the form
'type,hostname or IP,port'. 'type' is either 'ip' (or ip4) for TCP/IP v4,
'ip6' for TCP/IP v6, or 'sock' for a local unix domain socket.
'hostname' is either a hostname or IP address, and 'port' is the port to
listen to (only valid for TCP/IP, not a local socket). Some examples:

1) fio --server

   Start a fio server, listening on all interfaces on the default port (8765).

2) fio --server=ip:hostname,4444

   Start a fio server, listening on IP belonging to hostname and on port 4444.

3) fio --server=ip6:::1,4444

   Start a fio server, listening on IPv6 localhost ::1 and on port 4444.

4) fio --server=,4444

   Start a fio server, listening on all interfaces on port 4444.

5) fio --server=1.2.3.4

   Start a fio server, listening on IP 1.2.3.4 on the default port.

6) fio --server=sock:/tmp/fio.sock

   Start a fio server, listening on the local socket /tmp/fio.sock.

Once a server is running, a "client" can connect to the fio server with:

fio --local-args --client=<server> --remote-args <job file(s)>

where --local-args are arguments for the client where it is
running, 'server' is the connect string, and --remote-args and <job file(s)>
are sent to the server. The 'server' string follows the same format as it
does on the server side, to allow IP/hostname/socket and port strings.

Fio can connect to multiple servers this way:

fio --client=<server1> <job file(s)> --client=<server2> <job file(s)>

If the job file is located on the fio server, then you can tell the server
to load a local file as well. This is done by using --remote-config:

fio --client=server --remote-config /path/to/file.fio

Then the fio serer will open this local (to the server) job file instead
of being passed one from the client.


Platforms
---------

Fio works on (at least) Linux, Solaris, AIX, HP-UX, OSX, NetBSD, OpenBSD,
Windows and FreeBSD.  Some features and/or options may only be available on
some of the platforms, typically because those features only apply to that
platform (like the solarisaio engine, or the splice engine on Linux).

Some features are not available on FreeBSD/Solaris even if they could be
implemented, I'd be happy to take patches for that. An example of that is
disk utility statistics and (I think) huge page support, support for that
does exist in FreeBSD/Solaris.

Fio uses pthread mutexes for signalling and locking and FreeBSD does not
support process shared pthread mutexes. As a result, only threads are
supported on FreeBSD. This could be fixed with sysv ipc locking or
other locking alternatives.

Other *BSD platforms are untested, but fio should work there almost out
of the box. Since I don't do test runs or even compiles on those platforms,
your mileage may vary. Sending me patches for other platforms is greatly
appreciated. There's a lot of value in having the same test/benchmark tool
available on all platforms.

Note that POSIX aio is not enabled by default on AIX. Messages like these:

    Symbol resolution failed for /usr/lib/libc.a(posix_aio.o) because:
        Symbol _posix_kaio_rdwr (number 2) is not exported from dependent module /unix.

indicate one needs to enable POSIX aio. Run the following commands as root:

    # lsdev -C -l posix_aio0
        posix_aio0 Defined  Posix Asynchronous I/O
    # cfgmgr -l posix_aio0
    # lsdev -C -l posix_aio0
        posix_aio0 Available  Posix Asynchronous I/O

POSIX aio should work now. To make the change permanent:

    # chdev -l posix_aio0 -P -a autoconfig='available'
        posix_aio0 changed


Author
------

Fio was written by Jens Axboe <axboe@kernel.dk> to enable flexible testing
of the Linux IO subsystem and schedulers. He got tired of writing
specific test applications to simulate a given workload, and found that
the existing io benchmark/test tools out there weren't flexible enough
to do what he wanted.

Jens Axboe <axboe@kernel.dk> 20060905

