.TH fio 1 "September 2007" "User Manual"
.SH NAME
fio \- flexible I/O tester
.SH SYNOPSIS
.B fio
[\fIoptions\fR] [\fIjobfile\fR]...
.SH DESCRIPTION
.B fio
is a tool that will spawn a number of threads or processes doing a
particular type of I/O action as specified by the user.
The typical use of fio is to write a job file matching the I/O load
one wants to simulate.
.SH OPTIONS
.TP
.BI \-\-output \fR=\fPfilename
Write output to \fIfilename\fR.
.TP
.BI \-\-timeout \fR=\fPtimeout
Limit run time to \fItimeout\fR seconds.
.TP
.B \-\-latency\-log
Generate per-job latency logs.
.TP
.B \-\-bandwidth\-log
Generate per-job bandwidth logs.
.TP
.B \-\-minimal
Print statistics in a terse, semicolon-delimited format.
.TP
.BI \-\-showcmd \fR=\fPjobfile
Convert \fIjobfile\fR to a set of command-line options.
.TP
.B \-\-readonly
Enable read-only safety checks.
.TP
.BI \-\-eta \fR=\fPwhen
Specifies when real-time ETA estimate should be printed.  \fIwhen\fR may
be one of `always', `never' or `auto'.
.TP
.BI \-\-section \fR=\fPsec
Only run section \fIsec\fR from job file.
.TP
.BI \-\-cmdhelp \fR=\fPcommand
Print help information for \fIcommand\fR.  May be `all' for all commands.
.TP
.BI \-\-debug \fR=\fPtype
Enable verbose tracing of various fio actions. May be `all' for all types
or individual types seperated by a comma (eg \-\-debug=io,file). `help' will
list all available tracing options.
.TP
.B \-\-help
Display usage information and exit.
.TP
.B \-\-version
Display version information and exit.
.SH "JOB FILE FORMAT"
Job files are in `ini' format. They consist of one or more
job definitions, which begin with a job name in square brackets and
extend to the next job name.  The job name can be any ASCII string
except `global', which has a special meaning.  Following the job name is
a sequence of zero or more parameters, one per line, that define the
behavior of the job.  Any line starting with a `;' or `#' character is
considered a comment and ignored.
.P
If \fIjobfile\fR is specified as `-', the job file will be read from
standard input.
.SS "Global Section"
The global section contains default parameters for jobs specified in the
job file.  A job is only affected by global sections residing above it,
and there may be any number of global sections.  Specific job definitions
may override any parameter set in global sections.
.SH "JOB PARAMETERS"
.SS Types
Some parameters may take arguments of a specific type.  The types used are:
.TP
.I str
String: a sequence of alphanumeric characters.
.TP
.I int
SI integer: a whole number, possibly containing a suffix denoting the base unit
of the value.  Accepted suffixes are `k', 'M', 'G', 'T', and 'P', denoting
kilo (1024), mega (1024^2), giga (1024^3), tera (1024^4), and peta (1024^5)
respectively. The suffix is not case sensitive. If prefixed with '0x', the
value is assumed to be base 16 (hexadecimal). A suffix may include a trailing
'b', for instance 'kb' is identical to 'k'. You can specify a base 10 value
by using 'KiB', 'MiB', 'GiB', etc. This is useful for disk drives where
values are often given in base 10 values. Specifying '30GiB' will get you
30*1000^3 bytes.
.TP
.I bool
Boolean: a true or false value. `0' denotes false, `1' denotes true.
.TP
.I irange
Integer range: a range of integers specified in the format
\fIlower\fR:\fIupper\fR or \fIlower\fR\-\fIupper\fR. \fIlower\fR and
\fIupper\fR may contain a suffix as described above.  If an option allows two
sets of ranges, they are separated with a `,' or `/' character. For example:
`8\-8k/8M\-4G'.
.SS "Parameter List"
.TP
.BI name \fR=\fPstr
May be used to override the job name.  On the command line, this parameter
has the special purpose of signalling the start of a new job.
.TP
.BI description \fR=\fPstr
Human-readable description of the job. It is printed when the job is run, but
otherwise has no special purpose.
.TP
.BI directory \fR=\fPstr
Prefix filenames with this directory.  Used to place files in a location other
than `./'.
.TP
.BI filename \fR=\fPstr
.B fio
normally makes up a file name based on the job name, thread number, and file
number. If you want to share files between threads in a job or several jobs,
specify a \fIfilename\fR for each of them to override the default. If the I/O
engine used is `net', \fIfilename\fR is the host and port to connect to in the
format \fIhost\fR/\fIport\fR. If the I/O engine is file-based, you can specify
a number of files by separating the names with a `:' character. `\-' is a
reserved name, meaning stdin or stdout, depending on the read/write direction
set.
.TP
.BI lockfile \fR=\fPstr
Fio defaults to not locking any files before it does IO to them. If a file or
file descriptor is shared, fio can serialize IO to that file to make the end
result consistent. This is usual for emulating real workloads that share files.
The lock modes are:
.RS
.RS
.TP
.B none
No locking. This is the default.
.TP
.B exclusive
Only one thread or process may do IO at the time, excluding all others.
.TP
.B readwrite
Read-write locking on the file. Many readers may access the file at the same
time, but writes get exclusive access.
.RE
.P
The option may be post-fixed with a lock batch number. If set, then each
thread/process may do that amount of IOs to the file before giving up the lock.
Since lock acquisition is expensive, batching the lock/unlocks will speed up IO.
.RE
.P
.BI opendir \fR=\fPstr
Recursively open any files below directory \fIstr\fR.
.TP
.BI readwrite \fR=\fPstr "\fR,\fP rw" \fR=\fPstr
Type of I/O pattern.  Accepted values are:
.RS
.RS
.TP
.B read
Sequential reads.
.TP
.B write
Sequential writes.
.TP
.B randread
Random reads.
.TP
.B randwrite
Random writes.
.TP
.B rw
Mixed sequential reads and writes.
.TP
.B randrw 
Mixed random reads and writes.
.RE
.P
For mixed I/O, the default split is 50/50. For certain types of io the result
may still be skewed a bit, since the speed may be different. It is possible to
specify a number of IO's to do before getting a new offset, this is one by
appending a `:\fI<nr>\fR to the end of the string given. For a random read, it
would look like \fBrw=randread:8\fR for passing in an offset modifier with a
value of 8. See the \fBrw_sequencer\fR option.
.RE
.TP
.BI rw_sequencer \fR=\fPstr
If an offset modifier is given by appending a number to the \fBrw=<str>\fR line,
then this option controls how that number modifies the IO offset being
generated. Accepted values are:
.RS
.RS
.TP
.B sequential
Generate sequential offset
.TP
.B identical
Generate the same offset
.RE
.P
\fBsequential\fR is only useful for random IO, where fio would normally
generate a new random offset for every IO. If you append eg 8 to randread, you
would get a new random offset for every 8 IO's. The result would be a seek for
only every 8 IO's, instead of for every IO. Use \fBrw=randread:8\fR to specify
that. As sequential IO is already sequential, setting \fBsequential\fR for that
would not result in any differences.  \fBidentical\fR behaves in a similar
fashion, except it sends the same offset 8 number of times before generating a
new offset.
.RE
.P
.TP
.BI kb_base \fR=\fPint
The base unit for a kilobyte. The defacto base is 2^10, 1024.  Storage
manufacturers like to use 10^3 or 1000 as a base ten unit instead, for obvious
reasons. Allow values are 1024 or 1000, with 1024 being the default.
.TP
.BI randrepeat \fR=\fPbool
Seed the random number generator in a predictable way so results are repeatable
across runs.  Default: true.
.TP
.BI use_os_rand \fR=\fPbool
Fio can either use the random generator supplied by the OS to generator random
offsets, or it can use it's own internal generator (based on Tausworthe).
Default is to use the internal generator, which is often of better quality and
faster. Default: false.
.TP
.BI fallocate \fR=\fPbool
By default, fio will use fallocate() to advise the system of the size of the
file we are going to write. This can be turned off with fallocate=0. May not
be available on all supported platforms.
.TP
.BI fadvise_hint \fR=\fPbool
Disable use of \fIposix_fadvise\fR\|(2) to advise the kernel what I/O patterns
are likely to be issued. Default: true.
.TP
.BI size \fR=\fPint
Total size of I/O for this job.  \fBfio\fR will run until this many bytes have
been transfered, unless limited by other options (\fBruntime\fR, for instance).
Unless \fBnrfiles\fR and \fBfilesize\fR options are given, this amount will be
divided between the available files for the job. If not set, fio will use the
full size of the given files or devices. If the the files do not exist, size
must be given.
.TP
.BI fill_device \fR=\fPbool "\fR,\fB fill_fs" \fR=\fPbool
Sets size to something really large and waits for ENOSPC (no space left on
device) as the terminating condition. Only makes sense with sequential write.
For a read workload, the mount point will be filled first then IO started on
the result. This option doesn't make sense if operating on a raw device node,
since the size of that is already known by the file system. Additionally,
writing beyond end-of-device will not return ENOSPC there.
.TP
.BI filesize \fR=\fPirange
Individual file sizes. May be a range, in which case \fBfio\fR will select sizes
for files at random within the given range, limited to \fBsize\fR in total (if
that is given). If \fBfilesize\fR is not specified, each created file is the
same size.
.TP
.BI blocksize \fR=\fPint[,int] "\fR,\fB bs" \fR=\fPint[,int]
Block size for I/O units.  Default: 4k.  Values for reads and writes can be
specified separately in the format \fIread\fR,\fIwrite\fR, either of
which may be empty to leave that value at its default.
.TP
.BI blocksize_range \fR=\fPirange[,irange] "\fR,\fB bsrange" \fR=\fPirange[,irange]
Specify a range of I/O block sizes.  The issued I/O unit will always be a
multiple of the minimum size, unless \fBblocksize_unaligned\fR is set.  Applies
to both reads and writes if only one range is given, but can be specified
separately with a comma seperating the values. Example: bsrange=1k-4k,2k-8k.
Also (see \fBblocksize\fR).
.TP
.BI bssplit \fR=\fPstr
This option allows even finer grained control of the block sizes issued,
not just even splits between them. With this option, you can weight various
block sizes for exact control of the issued IO for a job that has mixed
block sizes. The format of the option is bssplit=blocksize/percentage,
optionally adding as many definitions as needed seperated by a colon.
Example: bssplit=4k/10:64k/50:32k/40 would issue 50% 64k blocks, 10% 4k
blocks and 40% 32k blocks. \fBbssplit\fR also supports giving separate
splits to reads and writes. The format is identical to what the
\fBbs\fR option accepts, the read and write parts are separated with a
comma.
.TP
.B blocksize_unaligned\fR,\fP bs_unaligned
If set, any size in \fBblocksize_range\fR may be used.  This typically won't
work with direct I/O, as that normally requires sector alignment.
.TP
.BI blockalign \fR=\fPint[,int] "\fR,\fB ba" \fR=\fPint[,int]
At what boundary to align random IO offsets. Defaults to the same as 'blocksize'
the minimum blocksize given.  Minimum alignment is typically 512b
for using direct IO, though it usually depends on the hardware block size.
This option is mutually exclusive with using a random map for files, so it
will turn off that option.
.TP
.B zero_buffers
Initialise buffers with all zeros. Default: fill buffers with random data.
.TP
.B refill_buffers
If this option is given, fio will refill the IO buffers on every submit. The
default is to only fill it at init time and reuse that data. Only makes sense
if zero_buffers isn't specified, naturally. If data verification is enabled,
refill_buffers is also automatically enabled.
.TP
.BI nrfiles \fR=\fPint
Number of files to use for this job.  Default: 1.
.TP
.BI openfiles \fR=\fPint
Number of files to keep open at the same time.  Default: \fBnrfiles\fR.
.TP
.BI file_service_type \fR=\fPstr
Defines how files to service are selected.  The following types are defined:
.RS
.RS
.TP
.B random
Choose a file at random
.TP
.B roundrobin
Round robin over open files (default).
.B sequential
Do each file in the set sequentially.
.RE
.P
The number of I/Os to issue before switching a new file can be specified by
appending `:\fIint\fR' to the service type.
.RE
.TP
.BI ioengine \fR=\fPstr
Defines how the job issues I/O.  The following types are defined:
.RS
.RS
.TP
.B sync
Basic \fIread\fR\|(2) or \fIwrite\fR\|(2) I/O.  \fIfseek\fR\|(2) is used to
position the I/O location.
.TP
.B psync
Basic \fIpread\fR\|(2) or \fIpwrite\fR\|(2) I/O.
.TP
.B vsync
Basic \fIreadv\fR\|(2) or \fIwritev\fR\|(2) I/O. Will emulate queuing by
coalescing adjacents IOs into a single submission.
.TP
.B libaio
Linux native asynchronous I/O.
.TP
.B posixaio
POSIX asynchronous I/O using \fIaio_read\fR\|(3) and \fIaio_write\fR\|(3).
.TP
.B solarisaio
Solaris native asynchronous I/O.
.TP
.B windowsaio
Windows native asynchronous I/O.
.TP
.B mmap
File is memory mapped with \fImmap\fR\|(2) and data copied using
\fImemcpy\fR\|(3).
.TP
.B splice
\fIsplice\fR\|(2) is used to transfer the data and \fIvmsplice\fR\|(2) to
transfer data from user-space to the kernel.
.TP
.B syslet-rw
Use the syslet system calls to make regular read/write asynchronous.
.TP
.B sg
SCSI generic sg v3 I/O. May be either synchronous using the SG_IO ioctl, or if
the target is an sg character device, we use \fIread\fR\|(2) and
\fIwrite\fR\|(2) for asynchronous I/O.
.TP
.B null
Doesn't transfer any data, just pretends to.  Mainly used to exercise \fBfio\fR
itself and for debugging and testing purposes.
.TP
.B net
Transfer over the network.  \fBfilename\fR must be set appropriately to
`\fIhost\fR/\fIport\fR' regardless of data direction.  If receiving, only the
\fIport\fR argument is used.
.TP
.B netsplice
Like \fBnet\fR, but uses \fIsplice\fR\|(2) and \fIvmsplice\fR\|(2) to map data
and send/receive.
.TP
.B cpuio
Doesn't transfer any data, but burns CPU cycles according to \fBcpuload\fR and
\fBcpucycles\fR parameters.
.TP
.B guasi
The GUASI I/O engine is the Generic Userspace Asynchronous Syscall Interface
approach to asycnronous I/O.
.br
See <http://www.xmailserver.org/guasi\-lib.html>.
.TP
.B external
Loads an external I/O engine object file.  Append the engine filename as
`:\fIenginepath\fR'.
.RE
.RE
.TP
.BI iodepth \fR=\fPint
Number of I/O units to keep in flight against the file. Note that increasing
iodepth beyond 1 will not affect synchronous ioengines (except for small
degress when verify_async is in use). Even async engines my impose OS
restrictions causing the desired depth not to be achieved.  This may happen on
Linux when using libaio and not setting \fBdirect\fR=1, since buffered IO is
not async on that OS. Keep an eye on the IO depth distribution in the
fio output to verify that the achieved depth is as expected. Default: 1.
.TP
.BI iodepth_batch \fR=\fPint
Number of I/Os to submit at once.  Default: \fBiodepth\fR.
.TP
.BI iodepth_batch_complete \fR=\fPint
This defines how many pieces of IO to retrieve at once. It defaults to 1 which
 means that we'll ask for a minimum of 1 IO in the retrieval process from the
kernel. The IO retrieval will go on until we hit the limit set by
\fBiodepth_low\fR. If this variable is set to 0, then fio will always check for
completed events before queuing more IO. This helps reduce IO latency, at the
cost of more retrieval system calls.
.TP
.BI iodepth_low \fR=\fPint
Low watermark indicating when to start filling the queue again.  Default:
\fBiodepth\fR. 
.TP
.BI direct \fR=\fPbool
If true, use non-buffered I/O (usually O_DIRECT).  Default: false.
.TP
.BI buffered \fR=\fPbool
If true, use buffered I/O.  This is the opposite of the \fBdirect\fR parameter.
Default: true.
.TP
.BI offset \fR=\fPint
Offset in the file to start I/O. Data before the offset will not be touched.
.TP
.BI fsync \fR=\fPint
How many I/Os to perform before issuing an \fBfsync\fR\|(2) of dirty data.  If
0, don't sync.  Default: 0.
.TP
.BI fdatasync \fR=\fPint
Like \fBfsync\fR, but uses \fBfdatasync\fR\|(2) instead to only sync the
data parts of the file. Default: 0.
.TP
.BI sync_file_range \fR=\fPstr:int
Use sync_file_range() for every \fRval\fP number of write operations. Fio will
track range of writes that have happened since the last sync_file_range() call.
\fRstr\fP can currently be one or more of:
.RS
.TP
.B wait_before
SYNC_FILE_RANGE_WAIT_BEFORE
.TP
.B write
SYNC_FILE_RANGE_WRITE
.TP
.B wait_after
SYNC_FILE_RANGE_WRITE
.TP
.RE
.P
So if you do sync_file_range=wait_before,write:8, fio would use
\fBSYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE\fP for every 8 writes.
Also see the sync_file_range(2) man page.  This option is Linux specific.
.TP
.BI overwrite \fR=\fPbool
If writing, setup the file first and do overwrites.  Default: false.
.TP
.BI end_fsync \fR=\fPbool
Sync file contents when job exits.  Default: false.
.TP
.BI fsync_on_close \fR=\fPbool
If true, sync file contents on close.  This differs from \fBend_fsync\fR in that
it will happen on every close, not just at the end of the job.  Default: false.
.TP
.BI rwmixcycle \fR=\fPint
How many milliseconds before switching between reads and writes for a mixed
workload. Default: 500ms.
.TP
.BI rwmixread \fR=\fPint
Percentage of a mixed workload that should be reads. Default: 50.
.TP
.BI rwmixwrite \fR=\fPint
Percentage of a mixed workload that should be writes.  If \fBrwmixread\fR and
\fBrwmixwrite\fR are given and do not sum to 100%, the latter of the two
overrides the first. This may interfere with a given rate setting, if fio is
asked to limit reads or writes to a certain rate. If that is the case, then
the distribution may be skewed. Default: 50.
.TP
.B norandommap
Normally \fBfio\fR will cover every block of the file when doing random I/O. If
this parameter is given, a new offset will be chosen without looking at past
I/O history.  This parameter is mutually exclusive with \fBverify\fR.
.TP
.B softrandommap
See \fBnorandommap\fR. If fio runs with the random block map enabled and it
fails to allocate the map, if this option is set it will continue without a
random block map. As coverage will not be as complete as with random maps, this
option is disabled by default.
.TP
.BI nice \fR=\fPint
Run job with given nice value.  See \fInice\fR\|(2).
.TP
.BI prio \fR=\fPint
Set I/O priority value of this job between 0 (highest) and 7 (lowest).  See
\fIionice\fR\|(1).
.TP
.BI prioclass \fR=\fPint
Set I/O priority class.  See \fIionice\fR\|(1).
.TP
.BI thinktime \fR=\fPint
Stall job for given number of microseconds between issuing I/Os.
.TP
.BI thinktime_spin \fR=\fPint
Pretend to spend CPU time for given number of microseconds, sleeping the rest
of the time specified by \fBthinktime\fR.  Only valid if \fBthinktime\fR is set.
.TP
.BI thinktime_blocks \fR=\fPint
Number of blocks to issue before waiting \fBthinktime\fR microseconds.
Default: 1.
.TP
.BI rate \fR=\fPint
Cap bandwidth used by this job. The number is in bytes/sec, the normal postfix
rules apply. You can use \fBrate\fR=500k to limit reads and writes to 500k each,
or you can specify read and writes separately. Using \fBrate\fR=1m,500k would
limit reads to 1MB/sec and writes to 500KB/sec. Capping only reads or writes
can be done with \fBrate\fR=,500k or \fBrate\fR=500k,. The former will only
limit writes (to 500KB/sec), the latter will only limit reads.
.TP
.BI ratemin \fR=\fPint
Tell \fBfio\fR to do whatever it can to maintain at least the given bandwidth.
Failing to meet this requirement will cause the job to exit. The same format
as \fBrate\fR is used for read vs write separation.
.TP
.BI rate_iops \fR=\fPint
Cap the bandwidth to this number of IOPS. Basically the same as rate, just
specified independently of bandwidth. The same format as \fBrate\fR is used for
read vs write seperation. If \fBblocksize\fR is a range, the smallest block
size is used as the metric.
.TP
.BI rate_iops_min \fR=\fPint
If this rate of I/O is not met, the job will exit. The same format as \fBrate\fR
is used for read vs write seperation.
.TP
.BI ratecycle \fR=\fPint
Average bandwidth for \fBrate\fR and \fBratemin\fR over this number of
milliseconds.  Default: 1000ms.
.TP
.BI cpumask \fR=\fPint
Set CPU affinity for this job. \fIint\fR is a bitmask of allowed CPUs the job
may run on.  See \fBsched_setaffinity\fR\|(2).
.TP
.BI cpus_allowed \fR=\fPstr
Same as \fBcpumask\fR, but allows a comma-delimited list of CPU numbers.
.TP
.BI startdelay \fR=\fPint
Delay start of job for the specified number of seconds.
.TP
.BI runtime \fR=\fPint
Terminate processing after the specified number of seconds.
.TP
.B time_based
If given, run for the specified \fBruntime\fR duration even if the files are
completely read or written. The same workload will be repeated as many times
as \fBruntime\fR allows.
.TP
.BI ramp_time \fR=\fPint
If set, fio will run the specified workload for this amount of time before
logging any performance numbers. Useful for letting performance settle before
logging results, thus minimizing the runtime required for stable results. Note
that the \fBramp_time\fR is considered lead in time for a job, thus it will
increase the total runtime if a special timeout or runtime is specified.
.TP
.BI invalidate \fR=\fPbool
Invalidate buffer-cache for the file prior to starting I/O.  Default: true.
.TP
.BI sync \fR=\fPbool
Use synchronous I/O for buffered writes.  For the majority of I/O engines,
this means using O_SYNC.  Default: false.
.TP
.BI iomem \fR=\fPstr "\fR,\fP mem" \fR=\fPstr
Allocation method for I/O unit buffer.  Allowed values are:
.RS
.RS
.TP
.B malloc
Allocate memory with \fImalloc\fR\|(3).
.TP
.B shm
Use shared memory buffers allocated through \fIshmget\fR\|(2).
.TP
.B shmhuge
Same as \fBshm\fR, but use huge pages as backing.
.TP
.B mmap
Use \fImmap\fR\|(2) for allocation.  Uses anonymous memory unless a filename
is given after the option in the format `:\fIfile\fR'.
.TP
.B mmaphuge
Same as \fBmmap\fR, but use huge files as backing.
.RE
.P
The amount of memory allocated is the maximum allowed \fBblocksize\fR for the
job multiplied by \fBiodepth\fR.  For \fBshmhuge\fR or \fBmmaphuge\fR to work,
the system must have free huge pages allocated.  \fBmmaphuge\fR also needs to
have hugetlbfs mounted, and \fIfile\fR must point there. At least on Linux,
huge pages must be manually allocated. See \fB/proc/sys/vm/nr_hugehages\fR
and the documentation for that. Normally you just need to echo an appropriate
number, eg echoing 8 will ensure that the OS has 8 huge pages ready for
use.
.RE
.TP
.BI iomem_align \fR=\fPint
This indiciates the memory alignment of the IO memory buffers. Note that the
given alignment is applied to the first IO unit buffer, if using \fBiodepth\fR
the alignment of the following buffers are given by the \fBbs\fR used. In
other words, if using a \fBbs\fR that is a multiple of the page sized in the
system, all buffers will be aligned to this value. If using a \fBbs\fR that
is not page aligned, the alignment of subsequent IO memory buffers is the
sum of the \fBiomem_align\fR and \fBbs\fR used.
.TP
.BI hugepage\-size \fR=\fPint
Defines the size of a huge page.  Must be at least equal to the system setting.
Should be a multiple of 1MB. Default: 4MB.
.TP
.B exitall
Terminate all jobs when one finishes.  Default: wait for each job to finish.
.TP
.BI bwavgtime \fR=\fPint
Average bandwidth calculations over the given time in milliseconds.  Default:
500ms.
.TP
.BI create_serialize \fR=\fPbool
If true, serialize file creation for the jobs.  Default: true.
.TP
.BI create_fsync \fR=\fPbool
\fIfsync\fR\|(2) data file after creation.  Default: true.
.TP
.BI create_on_open \fR=\fPbool
If true, the files are not created until they are opened for IO by the job.
.TP
.BI pre_read \fR=\fPbool
If this is given, files will be pre-read into memory before starting the given
IO operation. This will also clear the \fR \fBinvalidate\fR flag, since it is
pointless to pre-read and then drop the cache. This will only work for IO
engines that are seekable, since they allow you to read the same data
multiple times. Thus it will not work on eg network or splice IO.
.TP
.BI unlink \fR=\fPbool
Unlink job files when done.  Default: false.
.TP
.BI loops \fR=\fPint
Specifies the number of iterations (runs of the same workload) of this job.
Default: 1.
.TP
.BI do_verify \fR=\fPbool
Run the verify phase after a write phase.  Only valid if \fBverify\fR is set.
Default: true.
.TP
.BI verify \fR=\fPstr
Method of verifying file contents after each iteration of the job.  Allowed
values are:
.RS
.RS
.TP
.B md5 crc16 crc32 crc32c crc32c-intel crc64 crc7 sha256 sha512 sha1
Store appropriate checksum in the header of each block. crc32c-intel is
hardware accelerated SSE4.2 driven, falls back to regular crc32c if
not supported by the system.
.TP
.B meta
Write extra information about each I/O (timestamp, block number, etc.). The
block number is verified. See \fBverify_pattern\fR as well.
.TP
.B null
Pretend to verify.  Used for testing internals.
.RE

This option can be used for repeated burn-in tests of a system to make sure
that the written data is also correctly read back. If the data direction given
is a read or random read, fio will assume that it should verify a previously
written file. If the data direction includes any form of write, the verify will
be of the newly written data.
.RE
.TP
.BI verify_sort \fR=\fPbool
If true, written verify blocks are sorted if \fBfio\fR deems it to be faster to
read them back in a sorted manner.  Default: true.
.TP
.BI verify_offset \fR=\fPint
Swap the verification header with data somewhere else in the block before
writing.  It is swapped back before verifying.
.TP
.BI verify_interval \fR=\fPint
Write the verification header for this number of bytes, which should divide
\fBblocksize\fR.  Default: \fBblocksize\fR.
.TP
.BI verify_pattern \fR=\fPstr
If set, fio will fill the io buffers with this pattern. Fio defaults to filling
with totally random bytes, but sometimes it's interesting to fill with a known
pattern for io verification purposes. Depending on the width of the pattern,
fio will fill 1/2/3/4 bytes of the buffer at the time(it can be either a
decimal or a hex number). The verify_pattern if larger than a 32-bit quantity
has to be a hex number that starts with either "0x" or "0X". Use with
\fBverify\fP=meta.
.TP
.BI verify_fatal \fR=\fPbool
If true, exit the job on the first observed verification failure.  Default:
false.
.TP
.BI verify_dump \fR=\fPbool
If set, dump the contents of both the original data block and the data block we
read off disk to files. This allows later analysis to inspect just what kind of
data corruption occurred. On by default.
.TP
.BI verify_async \fR=\fPint
Fio will normally verify IO inline from the submitting thread. This option
takes an integer describing how many async offload threads to create for IO
verification instead, causing fio to offload the duty of verifying IO contents
to one or more separate threads.  If using this offload option, even sync IO
engines can benefit from using an \fBiodepth\fR setting higher than 1, as it
allows them to have IO in flight while verifies are running.
.TP
.BI verify_async_cpus \fR=\fPstr
Tell fio to set the given CPU affinity on the async IO verification threads.
See \fBcpus_allowed\fP for the format used.
.TP
.BI verify_backlog \fR=\fPint
Fio will normally verify the written contents of a job that utilizes verify
once that job has completed. In other words, everything is written then
everything is read back and verified. You may want to verify continually
instead for a variety of reasons. Fio stores the meta data associated with an
IO block in memory, so for large verify workloads, quite a bit of memory would
be used up holding this meta data. If this option is enabled, fio will write
only N blocks before verifying these blocks.
.TP
.BI verify_backlog_batch \fR=\fPint
Control how many blocks fio will verify if verify_backlog is set. If not set,
will default to the value of \fBverify_backlog\fR (meaning the entire queue is
read back and verified).  If \fBverify_backlog_batch\fR is less than 
\fBverify_backlog\fR then not all blocks will be verified,  if 
\fBverify_backlog_batch\fR is larger than \fBverify_backlog\fR,  some blocks
will be verified more than once.
.TP
.B stonewall
Wait for preceeding jobs in the job file to exit before starting this one.
\fBstonewall\fR implies \fBnew_group\fR.
.TP
.B new_group
Start a new reporting group.  If not given, all jobs in a file will be part
of the same reporting group, unless separated by a stonewall.
.TP
.BI numjobs \fR=\fPint
Number of clones (processes/threads performing the same workload) of this job.  
Default: 1.
.TP
.B group_reporting
If set, display per-group reports instead of per-job when \fBnumjobs\fR is
specified.
.TP
.B thread
Use threads created with \fBpthread_create\fR\|(3) instead of processes created
with \fBfork\fR\|(2).
.TP
.BI zonesize \fR=\fPint
Divide file into zones of the specified size in bytes.  See \fBzoneskip\fR.
.TP
.BI zoneskip \fR=\fPint
Skip the specified number of bytes when \fBzonesize\fR bytes of data have been
read.
.TP
.BI write_iolog \fR=\fPstr
Write the issued I/O patterns to the specified file.  Specify a separate file
for each job, otherwise the iologs will be interspersed and the file may be
corrupt.
.TP
.BI read_iolog \fR=\fPstr
Replay the I/O patterns contained in the specified file generated by
\fBwrite_iolog\fR, or may be a \fBblktrace\fR binary file.
.TP
.BI replay_no_stall \fR=\fPint
While replaying I/O patterns using \fBread_iolog\fR the default behavior
attempts to respect timing information between I/Os.  Enabling
\fBreplay_no_stall\fR causes I/Os to be replayed as fast as possible while
still respecting ordering.
.TP
.BI replay_redirect \fR=\fPstr
While replaying I/O patterns using \fBread_iolog\fR the default behavior
is to replay the IOPS onto the major/minor device that each IOP was recorded
from.  Setting \fBreplay_redirect\fR causes all IOPS to be replayed onto the
single specified device regardless of the device it was recorded from.
.TP
.B write_bw_log \fR=\fPstr
If given, write a bandwidth log of the jobs in this job file. Can be used to
store data of the bandwidth of the jobs in their lifetime. The included
fio_generate_plots script uses gnuplot to turn these text files into nice
graphs. See \fBwrite_log_log\fR for behaviour of given filename. For this
option, the postfix is _bw.log.
.TP
.B write_lat_log \fR=\fPstr
Same as \fBwrite_bw_log\fR, but writes I/O completion latencies.  If no
filename is given with this option, the default filename of "jobname_type.log"
is used. Even if the filename is given, fio will still append the type of log.
.TP
.B disable_lat \fR=\fPbool
Disable measurements of total latency numbers. Useful only for cutting
back the number of calls to gettimeofday, as that does impact performance at
really high IOPS rates.  Note that to really get rid of a large amount of these
calls, this option must be used with disable_slat and disable_bw as well.
.TP
.B disable_clat \fR=\fPbool
Disable measurements of submission latency numbers. See \fBdisable_lat\fR.
.TP
.B disable_slat \fR=\fPbool
Disable measurements of submission latency numbers. See \fBdisable_lat\fR.
.TP
.B disable_bw_measurement \fR=\fPbool
Disable measurements of throughput/bandwidth numbers. See \fBdisable_lat\fR.
.TP
.BI lockmem \fR=\fPint
Pin the specified amount of memory with \fBmlock\fR\|(2).  Can be used to
simulate a smaller amount of memory.
.TP
.BI exec_prerun \fR=\fPstr
Before running the job, execute the specified command with \fBsystem\fR\|(3).
.TP
.BI exec_postrun \fR=\fPstr
Same as \fBexec_prerun\fR, but the command is executed after the job completes.
.TP
.BI ioscheduler \fR=\fPstr
Attempt to switch the device hosting the file to the specified I/O scheduler.
.TP
.BI cpuload \fR=\fPint
If the job is a CPU cycle-eater, attempt to use the specified percentage of
CPU cycles.
.TP
.BI cpuchunks \fR=\fPint
If the job is a CPU cycle-eater, split the load into cycles of the
given time in milliseconds.
.TP
.BI disk_util \fR=\fPbool
Generate disk utilization statistics if the platform supports it. Default: true.
.TP
.BI gtod_reduce \fR=\fPbool
Enable all of the gettimeofday() reducing options (disable_clat, disable_slat,
disable_bw) plus reduce precision of the timeout somewhat to really shrink the
gettimeofday() call count. With this option enabled, we only do about 0.4% of
the gtod() calls we would have done if all time keeping was enabled.
.TP
.BI gtod_cpu \fR=\fPint
Sometimes it's cheaper to dedicate a single thread of execution to just getting
the current time. Fio (and databases, for instance) are very intensive on
gettimeofday() calls. With this option, you can set one CPU aside for doing
nothing but logging current time to a shared memory location. Then the other
threads/processes that run IO workloads need only copy that segment, instead of
entering the kernel with a gettimeofday() call. The CPU set aside for doing
these time calls will be excluded from other uses. Fio will manually clear it
from the CPU mask of other jobs.
.TP
.BI cgroup \fR=\fPstr
Add job to this control group. If it doesn't exist, it will be created.
The system must have a mounted cgroup blkio mount point for this to work. If
your system doesn't have it mounted, you can do so with:

# mount -t cgroup -o blkio none /cgroup
.TP
.BI cgroup_weight \fR=\fPint
Set the weight of the cgroup to this value. See the documentation that comes
with the kernel, allowed values are in the range of 100..1000.
.TP
.BI cgroup_nodelete \fR=\fPbool
Normally fio will delete the cgroups it has created after the job completion.
To override this behavior and to leave cgroups around after the job completion,
set cgroup_nodelete=1. This can be useful if one wants to inspect various
cgroup files after job completion. Default: false
.TP
.BI uid \fR=\fPint
Instead of running as the invoking user, set the user ID to this value before
the thread/process does any work.
.TP
.BI gid \fR=\fPint
Set group ID, see \fBuid\fR.
.SH OUTPUT
While running, \fBfio\fR will display the status of the created jobs.  For
example:
.RS
.P
Threads: 1: [_r] [24.8% done] [ 13509/  8334 kb/s] [eta 00h:01m:31s]
.RE
.P
The characters in the first set of brackets denote the current status of each
threads.  The possible values are:
.P
.PD 0
.RS
.TP
.B P
Setup but not started.
.TP
.B C
Thread created.
.TP
.B I
Initialized, waiting.
.TP
.B R
Running, doing sequential reads.
.TP
.B r
Running, doing random reads.
.TP
.B W
Running, doing sequential writes.
.TP
.B w
Running, doing random writes.
.TP
.B M
Running, doing mixed sequential reads/writes.
.TP
.B m
Running, doing mixed random reads/writes.
.TP
.B F
Running, currently waiting for \fBfsync\fR\|(2).
.TP
.B V
Running, verifying written data.
.TP
.B E
Exited, not reaped by main thread.
.TP
.B \-
Exited, thread reaped.
.RE
.PD
.P
The second set of brackets shows the estimated completion percentage of
the current group.  The third set shows the read and write I/O rate,
respectively. Finally, the estimated run time of the job is displayed.
.P
When \fBfio\fR completes (or is interrupted by Ctrl-C), it will show data
for each thread, each group of threads, and each disk, in that order.
.P
Per-thread statistics first show the threads client number, group-id, and
error code.  The remaining figures are as follows:
.RS
.TP
.B io
Number of megabytes of I/O performed.
.TP
.B bw
Average data rate (bandwidth).
.TP
.B runt
Threads run time.
.TP
.B slat
Submission latency minimum, maximum, average and standard deviation. This is
the time it took to submit the I/O.
.TP
.B clat
Completion latency minimum, maximum, average and standard deviation.  This
is the time between submission and completion.
.TP
.B bw
Bandwidth minimum, maximum, percentage of aggregate bandwidth received, average
and standard deviation.
.TP
.B cpu
CPU usage statistics. Includes user and system time, number of context switches
this thread went through and number of major and minor page faults.
.TP
.B IO depths
Distribution of I/O depths.  Each depth includes everything less than (or equal)
to it, but greater than the previous depth.
.TP
.B IO issued
Number of read/write requests issued, and number of short read/write requests.
.TP
.B IO latencies
Distribution of I/O completion latencies.  The numbers follow the same pattern
as \fBIO depths\fR.
.RE
.P
The group statistics show:
.PD 0
.RS
.TP
.B io
Number of megabytes I/O performed.
.TP
.B aggrb
Aggregate bandwidth of threads in the group.
.TP
.B minb
Minimum average bandwidth a thread saw.
.TP
.B maxb
Maximum average bandwidth a thread saw.
.TP
.B mint
Shortest runtime of threads in the group.
.TP
.B maxt
Longest runtime of threads in the group.
.RE
.PD
.P
Finally, disk statistics are printed with reads first:
.PD 0
.RS
.TP
.B ios
Number of I/Os performed by all groups.
.TP
.B merge
Number of merges in the I/O scheduler.
.TP
.B ticks
Number of ticks we kept the disk busy.
.TP
.B io_queue
Total time spent in the disk queue.
.TP
.B util
Disk utilization.
.RE
.PD
.SH TERSE OUTPUT
If the \fB\-\-minimal\fR option is given, the results will be printed in a
semicolon-delimited format suitable for scripted use - a job description
(if provided) follows on a new line.  Note that the first
number in the line is the version number. If the output has to be changed
for some reason, this number will be incremented by 1 to signify that
change.  The fields are:
.P
.RS
.B version, jobname, groupid, error
.P
Read status:
.RS
.B KB I/O, bandwidth \fR(KB/s)\fP, runtime \fR(ms)\fP
.P
Submission latency:
.RS
.B min, max, mean, standard deviation
.RE
Completion latency:
.RS
.B min, max, mean, standard deviation
.RE
Total latency:
.RS
.B min, max, mean, standard deviation
.RE
Bandwidth:
.RS
.B min, max, aggregate percentage of total, mean, standard deviation
.RE
.RE
.P
Write status:
.RS
.B KB I/O, bandwidth \fR(KB/s)\fP, runtime \fR(ms)\fP
.P
Submission latency:
.RS
.B min, max, mean, standard deviation
.RE
Completion latency:
.RS
.B min, max, mean, standard deviation
.RE
Total latency:
.RS
.B min, max, mean, standard deviation
.RE
Bandwidth:
.RS
.B min, max, aggregate percentage of total, mean, standard deviation
.RE
.RE
.P
CPU usage:
.RS
.B user, system, context switches, major page faults, minor page faults
.RE
.P
IO depth distribution:
.RS
.B <=1, 2, 4, 8, 16, 32, >=64
.RE
.P
IO latency distribution:
.RS
Microseconds:
.RS
.B <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000
.RE
Milliseconds:
.RS
.B <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000
.RE
.RE
.P
Error Info (dependant on continue_on_error, default off):
.RS
.B total # errors, first error code 
.RE
.P
.B text description (if provided in config - appears on newline)
.RE
.SH AUTHORS
.B fio
was written by Jens Axboe <jens.axboe@oracle.com>,
now Jens Axboe <jaxboe@fusionio.com>.
.br
This man page was written by Aaron Carroll <aaronc@cse.unsw.edu.au> based
on documentation by Jens Axboe.
.SH "REPORTING BUGS"
Report bugs to the \fBfio\fR mailing list <fio@vger.kernel.org>.
See \fBREADME\fR.
.SH "SEE ALSO"
For further documentation see \fBHOWTO\fR and \fBREADME\fR.
.br
Sample jobfiles are available in the \fBexamples\fR directory.

