How fio works
-------------

The first step in getting fio to simulate a desired I/O workload, is writing a
job file describing that specific setup. A job file may contain any number of
threads and/or files -- the typical contents of the job file is a *global*
section defining shared parameters, and one or more job sections describing the
jobs involved. When run, fio parses this file and sets everything up as
described. If we break down a job from top to bottom, it contains the following
basic parameters:

`I/O type`_

		Defines the I/O pattern issued to the file(s).  We may only be reading
		sequentially from this file(s), or we may be writing randomly. Or even
		mixing reads and writes, sequentially or randomly.
		Should we be doing buffered I/O, or direct/raw I/O?

`Block size`_

		In how large chunks are we issuing I/O? This may be a single value,
		or it may describe a range of block sizes.

`I/O size`_

		How much data are we going to be reading/writing.

`I/O engine`_

		How do we issue I/O? We could be memory mapping the file, we could be
		using regular read/write, we could be using splice, async I/O, or even
		SG (SCSI generic sg).

`I/O depth`_

		If the I/O engine is async, how large a queuing depth do we want to
		maintain?


`Target file/device`_

		How many files are we spreading the workload over.

`Threads, processes and job synchronization`_

		How many threads or processes should we spread this workload over.

The above are the basic parameters defined for a workload, in addition there's a
multitude of parameters that modify other aspects of how this job behaves.


Command line options
--------------------

.. option:: --debug=type

    Enable verbose tracing of various fio actions.  May be ``all`` for all types
    or individual types separated by a comma (e.g. ``--debug=file,mem`` will
    enable file and memory debugging).  Currently, additional logging is
    available for:

    *process*
			Dump info related to processes.
    *file*
			Dump info related to file actions.
    *io*
			Dump info related to I/O queuing.
    *mem*
			Dump info related to memory allocations.
    *blktrace*
			Dump info related to blktrace setup.
    *verify*
			Dump info related to I/O 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 I/O rate switching.
    *compress*
			Dump info related to log compress/decompress.
    *?* or *help*
			Show available debug options.

.. option:: --parse-only

    Parse options only, don\'t start any I/O.

.. option:: --output=filename

	Write output to file `filename`.

.. option:: --bandwidth-log

	Generate aggregate bandwidth logs.

.. option:: --minimal

	Print statistics in a terse, semicolon-delimited format.

.. option:: --append-terse

    Print statistics in selected mode AND terse, semicolon-delimited format.
    **deprecated**, use :option:`--output-format` instead to select multiple
    formats.

.. option:: --output-format=type

	Set the reporting format to `normal`, `terse`, `json`, or `json+`.  Multiple
	formats can be selected, separate by a comma.  `terse` is a CSV based
	format.  `json+` is like `json`, except it adds a full dump of the latency
	buckets.

.. option:: --terse-version=type

	Set terse version output format (default 3, or 2 or 4).

.. option:: --version

	Print version info and exit.

.. option:: --help

	Print this page.

.. option:: --cpuclock-test

	Perform test and validation of internal CPU clock.

.. option:: --crctest=test

    Test the speed of the builtin checksumming functions. If no argument is
    given, all of them are tested. Or a comma separated list can be passed, in
    which case the given ones are tested.

.. option:: --cmdhelp=command

	Print help information for `command`. May be ``all`` for all commands.

.. option:: --enghelp=[ioengine[,command]]

    List all commands defined by :option:`ioengine`, or print help for `command`
    defined by :option:`ioengine`.  If no :option:`ioengine` is given, list all
    available ioengines.

.. option:: --showcmd=jobfile

	Turn a job file into command line options.

.. option:: --readonly

    Turn on safety read-only checks, preventing writes.  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 I/O engine core to prevent writes due to unknown user space bug(s).

.. option:: --eta=when

	When real-time ETA estimate should be printed.  May be `always`, `never` or
	`auto`.

.. option:: --eta-newline=time

	Force a new line for every `time` period passed.

.. option:: --status-interval=time

	Force full status dump every `time` period passed.

.. option:: --section=name

    Only run specified section in job file.  Multiple sections can be specified.
    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.

.. option:: --alloc-size=kb

    Set the internal smalloc pool to this size in kb (def 1024).  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 16M and can grow to 8 pools.

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

.. option:: --warnings-fatal

    All fio parser warnings are fatal, causing fio to exit with an
    error.

.. option:: --max-jobs=nr

	Maximum number of threads/processes to support.

.. option:: --server=args

    Start a backend server, with `args` specifying what to listen to.
    See `Client/Server`_ section.

.. option:: --daemonize=pidfile

    Background a fio server, writing the pid to the given `pidfile` file.

.. option:: --client=hostname

    Instead of running the jobs locally, send and run them on the given host or
    set of hosts.  See `Client/Server`_ section.

.. option:: --remote-config=file

	Tell fio server to load this local file.

.. option:: --idle-prof=option

	Report cpu idleness on a system or percpu basis
	``--idle-prof=system,percpu`` or
	run unit work calibration only ``--idle-prof=calibrate``.

.. option:: --inflate-log=log

	Inflate and output compressed log.

.. option:: --trigger-file=file

	Execute trigger cmd when file exists.

.. option:: --trigger-timeout=t

	Execute trigger at this time.

.. option:: --trigger=cmd

	Set this command as local trigger.

.. option:: --trigger-remote=cmd

	Set this command as remote trigger.

.. option:: --aux-path=path

	Use this path for fio state generated files.

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 :option:`stonewall`
execution between each group.


Job file format
---------------

As previously described, fio accepts one or more job files describing what it is
supposed to do. The job file format is the classic ini file, where the names
enclosed in [] brackets define the job name. You are free to use any ASCII name
you want, except *global* which has special meaning.  Following the job name is
a sequence of zero or more parameters, one per line, that define the behavior of
the job. If the first character in a line is a ';' or a '#', the entire line is
discarded as a comment.

A *global* section sets defaults for the jobs described in that file. A job may
override a *global* section parameter, and a job file may even have several
*global* sections if so desired. A job is only affected by a *global* section
residing above it.

The :option:`--cmdhelp` option also lists all options. If used with an `option`
argument, :option:`--cmdhelp` will detail the given `option`.

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

So let's look at a really simple job file that defines two processes, each
randomly reading from a 128MiB file:

.. code-block:: ini

    ; -- start job file --
    [global]
    rw=randread
    size=128m

    [job1]

    [job2]

    ; -- end job file --

As you can see, the job file sections themselves are empty as all the described
parameters are shared. As no :option:`filename` option is given, fio makes up a
`filename` for each of the jobs as it sees fit. On the command line, this job
would look as follows::

$ fio --name=global --rw=randread --size=128m --name=job1 --name=job2


Let's look at an example that has a number of processes writing randomly to
files:

.. code-block:: ini

    ; -- start job file --
    [random-writers]
    ioengine=libaio
    iodepth=4
    rw=randwrite
    bs=32k
    direct=0
    size=64m
    numjobs=4
    ; -- end job file --

Here we have no *global* section, as we only have one job defined anyway.  We
want to use async I/O here, with a depth of 4 for each file. We also increased
the buffer size used to 32KiB and define numjobs to 4 to fork 4 identical
jobs. The result is 4 processes each randomly writing to their own 64MiB
file. Instead of using the above job file, you could have given the parameters
on the command line. For this case, you would specify::

$ fio --name=random-writers --ioengine=libaio --iodepth=4 --rw=randwrite --bs=32k --direct=0 --size=64m --numjobs=4

When fio is utilized as a basis of any reasonably large test suite, it might be
desirable to share a set of standardized settings across multiple job files.
Instead of copy/pasting such settings, any section may pull in an external
:file:`filename.fio` file with *include filename* directive, as in the following
example::

    ; -- start job file including.fio --
    [global]
    filename=/tmp/test
    filesize=1m
    include glob-include.fio

    [test]
    rw=randread
    bs=4k
    time_based=1
    runtime=10
    include test-include.fio
    ; -- end job file including.fio --

.. code-block:: ini

    ; -- start job file glob-include.fio --
    thread=1
    group_reporting=1
    ; -- end job file glob-include.fio --

.. code-block:: ini

    ; -- start job file test-include.fio --
    ioengine=libaio
    iodepth=4
    ; -- end job file test-include.fio --

Settings pulled into a section apply to that section only (except *global*
section). Include directives may be nested in that any included file may contain
further include directive(s). Include files may not contain [] sections.


Environment variables
~~~~~~~~~~~~~~~~~~~~~

Fio also supports environment variable expansion in job files. Any sub-string of
the form ``${VARNAME}`` as part of an option value (in other words, on the right
of the '='), will be expanded to the value of the environment variable called
`VARNAME`.  If no such environment variable is defined, or `VARNAME` is the
empty string, the empty string will be substituted.

As an example, let's look at a sample fio invocation and job file::

$ SIZE=64m NUMJOBS=4 fio jobfile.fio

.. code-block:: ini

    ; -- start job file --
    [random-writers]
    rw=randwrite
    size=${SIZE}
    numjobs=${NUMJOBS}
    ; -- end job file --

This will expand to the following equivalent job file at runtime:

.. code-block:: ini

    ; -- start job file --
    [random-writers]
    rw=randwrite
    size=64m
    numjobs=4
    ; -- end job file --

Fio ships with a few example job files, you can also look there for inspiration.

Reserved keywords
~~~~~~~~~~~~~~~~~

Additionally, fio has a set of reserved keywords that will be replaced
internally with the appropriate value. Those keywords are:

**$pagesize**

	The architecture page size of the running system.

**$mb_memory**

	Megabytes of total memory in the system.

**$ncpus**

	Number of online available CPUs.

These can be used on the command line or in the job file, and will be
automatically substituted with the current system values when the job is
run. Simple math is also supported on these keywords, so you can perform actions
like::

        size=8*$mb_memory

and get that properly expanded to 8 times the size of memory in the machine.


Job file parameters
-------------------

This section describes in details each parameter associated with a job.  Some
parameters take an option of a given type, such as an integer or a
string. Anywhere a numeric value is required, an arithmetic expression may be
used, provided it is surrounded by parentheses. Supported operators are:

	- addition (+)
	- subtraction (-)
	- multiplication (*)
	- division (/)
	- modulus (%)
	- exponentiation (^)

For time values in expressions, units are microseconds by default. This is
different than for time values not in expressions (not enclosed in
parentheses). The following types are used:


Parameter types
~~~~~~~~~~~~~~~

**str**
    String. This is a sequence of alpha characters.

**time**
	Integer with possible time suffix. In seconds unless otherwise
	specified, use e.g. 10m for 10 minutes. Accepts s/m/h for seconds, minutes,
	and hours, and accepts 'ms' (or 'msec') for milliseconds, and 'us' (or
	'usec') for microseconds.

.. _int:

**int**
	Integer. A whole number value, which may contain an integer prefix
	and an integer suffix:

        [*integer prefix*] **number** [*integer suffix*]

	The optional *integer prefix* specifies the number's base. The default
	is decimal. *0x* specifies hexadecimal.

	The optional *integer suffix* specifies the number's units, and includes an
	optional unit prefix and an optional unit.  For quantities of data, the
	default unit is bytes. For quantities of time, the default unit is seconds.

	With :option:`kb_base` =1000, fio follows international standards for unit
	prefixes.  To specify power-of-10 decimal values defined in the
	International System of Units (SI):

		* *Ki* -- means kilo (K) or 1000
		* *Mi* -- means mega (M) or 1000**2
		* *Gi* -- means giga (G) or 1000**3
		* *Ti* -- means tera (T) or 1000**4
		* *Pi* -- means peta (P) or 1000**5

	To specify power-of-2 binary values defined in IEC 80000-13:

		* *k* -- means kibi (Ki) or 1024
		* *M* -- means mebi (Mi) or 1024**2
		* *G* -- means gibi (Gi) or 1024**3
		* *T* -- means tebi (Ti) or 1024**4
		* *P* -- means pebi (Pi) or 1024**5

	With :option:`kb_base` =1024 (the default), the unit prefixes are opposite
	from those specified in the SI and IEC 80000-13 standards to provide
	compatibility with old scripts.  For example, 4k means 4096.

	For quantities of data, an optional unit of 'B' may be included
	(e.g.,  'kB' is the same as 'k').

	The *integer suffix* is not case sensitive (e.g., m/mi mean mebi/mega,
	not milli). 'b' and 'B' both mean byte, not bit.

	Examples with :option:`kb_base` =1000:

		* *4 KiB*: 4096, 4096b, 4096B, 4ki, 4kib, 4kiB, 4Ki, 4KiB
		* *1 MiB*: 1048576, 1mi, 1024ki
		* *1 MB*: 1000000, 1m, 1000k
		* *1 TiB*: 1099511627776, 1ti, 1024gi, 1048576mi
		* *1 TB*: 1000000000, 1t, 1000m, 1000000k

	Examples with :option:`kb_base` =1024 (default):

		* *4 KiB*: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
		* *1 MiB*: 1048576, 1m, 1024k
		* *1 MB*: 1000000, 1mi, 1000ki
		* *1 TiB*: 1099511627776, 1t, 1024g, 1048576m
		* *1 TB*: 1000000000, 1ti, 1000mi, 1000000ki

	To specify times (units are not case sensitive):

		* *D* -- means days
		* *H* -- means hours
		* *M* -- mean minutes
		* *s* -- or sec means seconds (default)
		* *ms* -- or *msec* means milliseconds
		* *us* -- or *usec* means microseconds

	If the option accepts an upper and lower range, use a colon ':' or
	minus '-' to separate such values. See :ref:`irange <irange>`.
	If the lower value specified happens to be larger than the upper value,
	two values are swapped.

.. _bool:

**bool**
	Boolean. Usually parsed as an integer, however only defined for
	true and false (1 and 0).

.. _irange:

**irange**
	Integer range with suffix. Allows value range to be given, such as
	1024-4096. A colon may also be used as the separator, e.g. 1k:4k. If the
	option allows two sets of ranges, they can be specified with a ',' or '/'
	delimiter: 1k-4k/8k-32k. Also see :ref:`int <int>`.

**float_list**
	A list of floating point numbers, separated by a ':' character.


Units
~~~~~

.. option:: kb_base=int

	Select the interpretation of unit prefixes in input parameters.

		**1000**
			Inputs comply with IEC 80000-13 and the International
			System of Units (SI). Use:

				- power-of-2 values with IEC prefixes (e.g., KiB)
				- power-of-10 values with SI prefixes (e.g., kB)

		**1024**
			Compatibility mode (default).  To avoid breaking old scripts:

				- power-of-2 values with SI prefixes
				- power-of-10 values with IEC prefixes

	See :option:`bs` for more details on input parameters.

	Outputs always use correct prefixes.  Most outputs include both
	side-by-side, like::

		bw=2383.3kB/s (2327.4KiB/s)

	If only one value is reported, then kb_base selects the one to use:

		**1000** -- SI prefixes

		**1024** -- IEC prefixes

.. option:: unit_base=int

	Base unit for reporting.  Allowed values are:

	**0**
		Use auto-detection (default).
	**8**
		Byte based.
	**1**
		Bit based.


With the above in mind, here follows the complete list of fio job parameters.


Job description
~~~~~~~~~~~~~~~

.. option:: name=str

	ASCII name of the job. This may be used to override the name printed by fio
	for this job. Otherwise the job name is used. On the command line this
	parameter has the special purpose of also signaling the start of a new job.

.. option:: description=str

	Text description of the job. Doesn't do anything except dump this text
	description when this job is run. It's not parsed.

.. option:: loops=int

	Run the specified number of iterations of this job. Used to repeat the same
	workload a given number of times. Defaults to 1.

.. option:: numjobs=int

	Create the specified number of clones of this job. Each clone of job
	is spawned as an independent thread or process. May be used to setup a
	larger number of threads/processes doing the same thing. Each thread is
	reported separately; to see statistics for all clones as a whole, use
	:option:`group_reporting` in conjunction with :option:`new_group`.
	See :option:`--max-jobs`.


Time related parameters
~~~~~~~~~~~~~~~~~~~~~~~

.. option:: runtime=time

	Tell fio to terminate processing after the specified period of time.  It
	can be quite hard to determine for how long a specified job will run, so
	this parameter is handy to cap the total runtime to a given time.  When
	the unit is omitted, the value is given in seconds.

.. option:: time_based

	If set, fio will run for the duration of the :option:`runtime` specified
	even if the file(s) are completely read or written. It will simply loop over
	the same workload as many times as the :option:`runtime` allows.

.. option:: startdelay=irange(time)

	Delay start of job for the specified number of seconds. Supports all time
	suffixes to allow specification of hours, minutes, seconds and milliseconds
	-- seconds are the default if a unit is omitted.  Can be given as a range
	which causes each thread to choose randomly out of the range.

.. option:: ramp_time=time

	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 ``ramp_time`` is considered lead in time for a job,
	thus it will increase the total runtime if a special timeout or
	:option:`runtime` is specified.  When the unit is omitted, the value is
	given in seconds.

.. option:: clocksource=str

	Use the given clocksource as the base of timing. The supported options are:

		**gettimeofday**
			:manpage:`gettimeofday(2)`

		**clock_gettime**
			:manpage:`clock_gettime(2)`

		**cpu**
			Internal CPU clock source

	cpu is the preferred clocksource if it is reliable, as it is very fast (and
	fio is heavy on time calls). Fio will automatically use this clocksource if
	it's supported and considered reliable on the system it is running on,
	unless another clocksource is specifically set. For x86/x86-64 CPUs, this
	means supporting TSC Invariant.

.. option:: gtod_reduce=bool

	Enable all of the :manpage:`gettimeofday(2)` reducing options
	(:option:`disable_clat`, :option:`disable_slat`, :option:`disable_bw_measurement`) plus
	reduce precision of the timeout somewhat to really shrink the
	:manpage:`gettimeofday(2)` call count. With this option enabled, we only do
	about 0.4% of the :manpage:`gettimeofday(2)` calls we would have done if all
	time keeping was enabled.

.. option:: gtod_cpu=int

	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 :manpage:`gettimeofday(2)` 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 I/O workloads need only
	copy that segment, instead of entering the kernel with a
	:manpage:`gettimeofday(2)` 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.


Target file/device
~~~~~~~~~~~~~~~~~~

.. option:: directory=str

	Prefix filenames with this directory. Used to place files in a different
	location than :file:`./`.  You can specify a number of directories by
	separating the names with a ':' character. These directories will be
	assigned equally distributed to job clones creates with :option:`numjobs` as
	long as they are using generated filenames. If specific `filename(s)` are
	set fio will use the first listed directory, and thereby matching the
	`filename` semantic which generates a file each clone if not specified, but
	let all clones use the same if set.

	See the :option:`filename` option for escaping certain characters.

.. option:: filename=str

	Fio normally makes up a `filename` based on the job name, thread number, and
	file number. If you want to share files between threads in a job or several
	jobs with fixed file paths, specify a `filename` for each of them to override
	the default. If the ioengine is file based, you can specify a number of files
	by separating the names with a ':' colon. So if you wanted a job to open
	:file:`/dev/sda` and :file:`/dev/sdb` as the two working files, you would use
	``filename=/dev/sda:/dev/sdb``. This also means that whenever this option is
	specified, :option:`nrfiles` is ignored. The size of regular files specified
	by this option will be :option:`size` divided by number of files unless
	explicit size is specified by :option:`filesize`.

	On Windows, disk devices are accessed as :file:`\\\\.\\PhysicalDrive0` for
	the first device, :file:`\\\\.\\PhysicalDrive1` for the second etc.
	Note: Windows and FreeBSD prevent write access to areas
	of the disk containing in-use data (e.g. filesystems).  If the wanted
	`filename` does need to include a colon, then escape that with a ``\``
	character. For instance, if the `filename` is :file:`/dev/dsk/foo@3,0:c`,
	then you would use ``filename="/dev/dsk/foo@3,0\:c"``.  The
	:file:`-` is a reserved name, meaning stdin or stdout.  Which of the two
	depends on the read/write direction set.

.. option:: filename_format=str

	If sharing multiple files between jobs, it is usually necessary to have fio
	generate the exact names that you want. By default, fio will name a file
	based on the default file format specification of
	:file:`jobname.jobnumber.filenumber`. With this option, that can be
	customized. Fio will recognize and replace the following keywords in this
	string:

		**$jobname**
				The name of the worker thread or process.
		**$jobnum**
				The incremental number of the worker thread or process.
		**$filenum**
				The incremental number of the file for that worker thread or
				process.

	To have dependent jobs share a set of files, this option can be set to have
	fio generate filenames that are shared between the two. For instance, if
	:file:`testfiles.$filenum` is specified, file number 4 for any job will be
	named :file:`testfiles.4`. The default of :file:`$jobname.$jobnum.$filenum`
	will be used if no other format specifier is given.

.. option:: unique_filename=bool

	To avoid collisions between networked clients, fio defaults to prefixing any
	generated filenames (with a directory specified) with the source of the
	client connecting. To disable this behavior, set this option to 0.

.. option:: opendir=str

	Recursively open any files below directory `str`.

.. option:: lockfile=str

	Fio defaults to not locking any files before it does I/O to them. If a file
	or file descriptor is shared, fio can serialize I/O to that file to make the
	end result consistent. This is usual for emulating real workloads that share
	files. The lock modes are:

		**none**
			No locking. The default.
		**exclusive**
			Only one thread or process may do I/O at a time, excluding all
			others.
		**readwrite**
			Read-write locking on the file. Many readers may
			access the file at the same time, but writes get exclusive access.

.. option:: nrfiles=int

	Number of files to use for this job. Defaults to 1. The size of files
	will be :option:`size` divided by this unless explicit size is specified by
	:option:`filesize`. Files are created for each thread separately, and each
	file will have a file number within its name by default, as explained in
	:option:`filename` section.


.. option:: openfiles=int

	Number of files to keep open at the same time. Defaults to the same as
	:option:`nrfiles`, can be set smaller to limit the number simultaneous
	opens.

.. option:: file_service_type=str

	Defines how fio decides which file from a job to service next. The following
	types are defined:

		**random**
			Choose a file at random.

		**roundrobin**
			Round robin over opened files. This is the default.

		**sequential**
			Finish one file before moving on to the next. Multiple files can
			still be open depending on 'openfiles'.

		**zipf**
			Use a *Zipf* distribution to decide what file to access.

		**pareto**
			Use a *Pareto* distribution to decide what file to access.

		**gauss**
			Use a *Gaussian* (normal) distribution to decide what file to
			access.

	For *random*, *roundrobin*, and *sequential*, a postfix can be appended to
	tell fio how many I/Os to issue before switching to a new file. For example,
	specifying ``file_service_type=random:8`` would cause fio to issue
	8 I/Os before selecting a new file at random. For the non-uniform
	distributions, a floating point postfix can be given to influence how the
	distribution is skewed. See :option:`random_distribution` for a description
	of how that would work.

.. option:: ioscheduler=str

	Attempt to switch the device hosting the file to the specified I/O scheduler
	before running.

.. option:: create_serialize=bool

	If true, serialize the file creation for the jobs.  This may be handy to
	avoid interleaving of data files, which may greatly depend on the filesystem
	used and even the number of processors in the system.

.. option:: create_fsync=bool

	fsync the data file after creation. This is the default.

.. option:: create_on_open=bool

	Don't pre-setup the files for I/O, just create open() when it's time to do
	I/O to that file.

.. option:: create_only=bool

	If true, fio will only run the setup phase of the job.  If files need to be
	laid out or updated on disk, only that will be done. The actual job contents
	are not executed.

.. option:: allow_file_create=bool

	If true, fio is permitted to create files as part of its workload. This is
	the default behavior. If this option is false, then fio will error out if
	the files it needs to use don't already exist. Default: true.

.. option:: allow_mounted_write=bool

	If this isn't set, fio will abort jobs that are destructive (e.g. that write)
	to what appears to be a mounted device or partition. This should help catch
	creating inadvertently destructive tests, not realizing that the test will
	destroy data on the mounted file system. Note that some platforms don't allow
	writing against a mounted device regardless of this option. Default: false.

.. option:: pre_read=bool

	If this is given, files will be pre-read into memory before starting the
	given I/O operation. This will also clear the :option:`invalidate` flag,
	since it is pointless to pre-read and then drop the cache. This will only
	work for I/O engines that are seek-able, since they allow you to read the
	same data multiple times. Thus it will not work on e.g. network or splice I/O.

.. option:: unlink=bool

	Unlink the job files when done. Not the default, as repeated runs of that
	job would then waste time recreating the file set again and again.

.. option:: unlink_each_loop=bool

	Unlink job files after each iteration or loop.

.. option:: zonesize=int

	Divide a file into zones of the specified size. See :option:`zoneskip`.

.. option:: zonerange=int

	Give size of an I/O zone.  See :option:`zoneskip`.

.. option:: zoneskip=int

	Skip the specified number of bytes when :option:`zonesize` data has been
	read. The two zone options can be used to only do I/O on zones of a file.


I/O type
~~~~~~~~

.. option:: direct=bool

	If value is true, use non-buffered I/O. This is usually O_DIRECT. Note that
	ZFS on Solaris doesn't support direct I/O.  On Windows the synchronous
	ioengines don't support direct I/O.  Default: false.

.. option:: atomic=bool

	If value is true, attempt to use atomic direct I/O. Atomic writes are
	guaranteed to be stable once acknowledged by the operating system. Only
	Linux supports O_ATOMIC right now.

.. option:: buffered=bool

	If value is true, use buffered I/O. This is the opposite of the
	:option:`direct` option. Defaults to true.

.. option:: readwrite=str, rw=str

	Type of I/O pattern. Accepted values are:

		**read**
				Sequential reads.
		**write**
				Sequential writes.
		**trim**
				Sequential trims (Linux block devices only).
		**randwrite**
				Random writes.
		**randread**
				Random reads.
		**randtrim**
				Random trims (Linux block devices only).
		**rw,readwrite**
				Sequential mixed reads and writes.
		**randrw**
				Random mixed reads and writes.
		**trimwrite**
				Sequential trim+write sequences. Blocks will be trimmed first,
				then the same blocks will be written to.

	Fio defaults to read if the option is not specified.  For the mixed I/O
	types, the default is to split them 50/50.  For certain types of I/O the
	result may still be skewed a bit, since the speed may be different. It is
	possible to specify a number of I/O's to do before getting a new offset,
	this is done by appending a ``:<nr>`` to the end of the string given.  For a
	random read, it would look like ``rw=randread:8`` for passing in an offset
	modifier with a value of 8. If the suffix is used with a sequential I/O
	pattern, then the value specified will be added to the generated offset for
	each I/O.  For instance, using ``rw=write:4k`` will skip 4k for every
	write. It turns sequential I/O into sequential I/O with holes.  See the
	:option:`rw_sequencer` option.

.. option:: rw_sequencer=str

	If an offset modifier is given by appending a number to the ``rw=<str>``
	line, then this option controls how that number modifies the I/O offset
	being generated. Accepted values are:

		**sequential**
			Generate sequential offset.
		**identical**
			Generate the same offset.

	``sequential`` is only useful for random I/O, where fio would normally
	generate a new random offset for every I/O. If you append e.g. 8 to randread,
	you would get a new random offset for every 8 I/O's. The result would be a
	seek for only every 8 I/O's, instead of for every I/O. Use ``rw=randread:8``
	to specify that. As sequential I/O is already sequential, setting
	``sequential`` for that would not result in any differences.  ``identical``
	behaves in a similar fashion, except it sends the same offset 8 number of
	times before generating a new offset.

.. option:: unified_rw_reporting=bool

	Fio normally reports statistics on a per data direction basis, meaning that
	reads, writes, and trims are accounted and reported separately. If this
	option is set fio sums the results and report them as "mixed" instead.

.. option:: randrepeat=bool

	Seed the random number generator used for random I/O patterns in a
	predictable way so the pattern is repeatable across runs. Default: true.

.. option:: allrandrepeat=bool

	Seed all random number generators in a predictable way so results are
	repeatable across runs.  Default: false.

.. option:: randseed=int

	Seed the random number generators based on this seed value, to be able to
	control what sequence of output is being generated.  If not set, the random
	sequence depends on the :option:`randrepeat` setting.

.. option:: fallocate=str

	Whether pre-allocation is performed when laying down files.
	Accepted values are:

		**none**
			Do not pre-allocate space.

		**posix**
			Pre-allocate via :manpage:`posix_fallocate(3)`.

		**keep**
			Pre-allocate via :manpage:`fallocate(2)` with
			FALLOC_FL_KEEP_SIZE set.

		**0**
			Backward-compatible alias for **none**.

		**1**
			Backward-compatible alias for **posix**.

	May not be available on all supported platforms. **keep** is only available
	on Linux. If using ZFS on Solaris this must be set to **none** because ZFS
	doesn't support it. Default: **posix**.

.. option:: fadvise_hint=str

	Use :manpage:`posix_fadvise(2)` to advise the kernel on what I/O patterns
	are likely to be issued.  Accepted values are:

		**0**
			Backwards-compatible hint for "no hint".

		**1**
			Backwards compatible hint for "advise with fio workload type". This
			uses **FADV_RANDOM** for a random workload, and **FADV_SEQUENTIAL**
			for a sequential workload.

		**sequential**
			Advise using **FADV_SEQUENTIAL**.

		**random**
			Advise using **FADV_RANDOM**.

.. option:: fadvise_stream=int

	Use :manpage:`posix_fadvise(2)` to advise the kernel what stream ID the
	writes issued belong to. Only supported on Linux. Note, this option may
	change going forward.

.. option:: offset=int

	Start I/O at the given offset in the file. The data before the given offset
	will not be touched. This effectively caps the file size at `real_size -
	offset`. Can be combined with :option:`size` to constrain the start and
	end range that I/O will be done within.

.. option:: offset_increment=int

	If this is provided, then the real offset becomes `offset + offset_increment
	* thread_number`, where the thread number is a counter that starts at 0 and
	is incremented for each sub-job (i.e. when :option:`numjobs` option is
	specified). This option is useful if there are several jobs which are
	intended to operate on a file in parallel disjoint segments, with even
	spacing between the starting points.

.. option:: number_ios=int

	Fio will normally perform I/Os until it has exhausted the size of the region
	set by :option:`size`, or if it exhaust the allocated time (or hits an error
	condition). With this setting, the range/size can be set independently of
	the number of I/Os to perform. When fio reaches this number, it will exit
	normally and report status. Note that this does not extend the amount of I/O
	that will be done, it will only stop fio if this condition is met before
	other end-of-job criteria.

.. option:: fsync=int

	If writing to a file, issue a sync of the dirty data for every number of
	blocks given. For example, if you give 32 as a parameter, fio will sync the
	file for every 32 writes issued. If fio is using non-buffered I/O, we may
	not sync the file. The exception is the sg I/O engine, which synchronizes
	the disk cache anyway. Defaults to 0, which means no sync every certain
	number of writes.

.. option:: fdatasync=int

	Like :option:`fsync` but uses :manpage:`fdatasync(2)` to only sync data and
	not metadata blocks.  In Windows, FreeBSD, and DragonFlyBSD there is no
	:manpage:`fdatasync(2)`, this falls back to using :manpage:`fsync(2)`.
	Defaults to 0, which means no sync data every certain number of writes.

.. option:: write_barrier=int

   Make every `N-th` write a barrier write.

.. option:: sync_file_range=str:val

	Use :manpage:`sync_file_range(2)` for every `val` number of write
	operations. Fio will track range of writes that have happened since the last
	:manpage:`sync_file_range(2)` call. `str` can currently be one or more of:

		**wait_before**
			SYNC_FILE_RANGE_WAIT_BEFORE
		**write**
			SYNC_FILE_RANGE_WRITE
		**wait_after**
			SYNC_FILE_RANGE_WAIT_AFTER

	So if you do ``sync_file_range=wait_before,write:8``, fio would use
	``SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE`` for every 8
	writes. Also see the :manpage:`sync_file_range(2)` man page.  This option is
	Linux specific.

.. option:: overwrite=bool

	If true, writes to a file will always overwrite existing data. If the file
	doesn't already exist, it will be created before the write phase begins. If
	the file exists and is large enough for the specified write phase, nothing
	will be done.

.. option:: end_fsync=bool

	If true, fsync file contents when a write stage has completed.

.. option:: fsync_on_close=bool

	If true, fio will :manpage:`fsync(2)` a dirty file on close.  This differs
	from end_fsync in that it will happen on every file close, not just at the
	end of the job.

.. option:: rwmixread=int

	Percentage of a mixed workload that should be reads. Default: 50.

.. option:: rwmixwrite=int

	Percentage of a mixed workload that should be writes. If both
	:option:`rwmixread` and :option:`rwmixwrite` is given and the values do not
	add up to 100%, the latter of the two will be used to override 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.

.. option:: random_distribution=str:float[,str:float][,str:float]

	By default, fio will use a completely uniform random distribution when asked
	to perform random I/O. Sometimes it is useful to skew the distribution in
	specific ways, ensuring that some parts of the data is more hot than others.
	fio includes the following distribution models:

		**random**
				Uniform random distribution

		**zipf**
				Zipf distribution

		**pareto**
				Pareto distribution

		**gauss**
				Normal (Gaussian) distribution

		**zoned**
				Zoned random distribution

	When using a **zipf** or **pareto** distribution, an input value is also
	needed to define the access pattern. For **zipf**, this is the `zipf
	theta`. For **pareto**, it's the `Pareto power`. Fio includes a test
	program, :command:`genzipf`, that can be used visualize what the given input
	values will yield in terms of hit rates.  If you wanted to use **zipf** with
	a `theta` of 1.2, you would use ``random_distribution=zipf:1.2`` as the
	option. If a non-uniform model is used, fio will disable use of the random
	map. For the **gauss** distribution, a normal deviation is supplied as a
	value between 0 and 100.

	For a **zoned** distribution, fio supports specifying percentages of I/O
	access that should fall within what range of the file or device. For
	example, given a criteria of:

	* 60% of accesses should be to the first 10%
	* 30% of accesses should be to the next 20%
	* 8% of accesses should be to to the next 30%
	* 2% of accesses should be to the next 40%

	we can define that through zoning of the random accesses. For the above
	example, the user would do::

		random_distribution=zoned:60/10:30/20:8/30:2/40

	similarly to how :option:`bssplit` works for setting ranges and percentages
	of block sizes. Like :option:`bssplit`, it's possible to specify separate
	zones for reads, writes, and trims. If just one set is given, it'll apply to
	all of them.

.. option:: percentage_random=int[,int][,int]

	For a random workload, set how big a percentage should be random. This
	defaults to 100%, in which case the workload is fully random. It can be set
	from anywhere from 0 to 100.  Setting it to 0 would make the workload fully
	sequential. Any setting in between will result in a random mix of sequential
	and random I/O, at the given percentages.  Comma-separated values may be
	specified for reads, writes, and trims as described in :option:`blocksize`.

.. option:: norandommap

	Normally fio will cover every block of the file when doing random I/O. If
	this option is given, fio will just get a new random offset without looking
	at past I/O history. This means that some blocks may not be read or written,
	and that some blocks may be read/written more than once. If this option is
	used with :option:`verify` and multiple blocksizes (via :option:`bsrange`),
	only intact blocks are verified, i.e., partially-overwritten blocks are
	ignored.

.. option:: softrandommap=bool

	See :option:`norandommap`. 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.

.. option:: random_generator=str

	Fio supports the following engines for generating
	I/O offsets for random I/O:

		**tausworthe**
			Strong 2^88 cycle random number generator
		**lfsr**
			Linear feedback shift register generator
		**tausworthe64**
			Strong 64-bit 2^258 cycle random number generator

	**tausworthe** is a strong random number generator, but it requires tracking
	on the side if we want to ensure that blocks are only read or written
	once. **LFSR** guarantees that we never generate the same offset twice, and
	it's also less computationally expensive. It's not a true random generator,
	however, though for I/O purposes it's typically good enough. **LFSR** only
	works with single block sizes, not with workloads that use multiple block
	sizes. If used with such a workload, fio may read or write some blocks
	multiple times. The default value is **tausworthe**, unless the required
	space exceeds 2^32 blocks. If it does, then **tausworthe64** is
	selected automatically.


Block size
~~~~~~~~~~

.. option:: blocksize=int[,int][,int], bs=int[,int][,int]

	The block size in bytes used for I/O units. Default: 4096.  A single value
	applies to reads, writes, and trims.  Comma-separated values may be
	specified for reads, writes, and trims.  A value not terminated in a comma
	applies to subsequent types.

	Examples:

		**bs=256k**
			means 256k for reads, writes and trims.

		**bs=8k,32k**
			means 8k for reads, 32k for writes and trims.

		**bs=8k,32k,**
			means 8k for reads, 32k for writes, and default for trims.

		**bs=,8k**
			means default for reads, 8k for writes and trims.

		**bs=,8k,**
			means default for reads, 8k for writes, and default for writes.

.. option:: blocksize_range=irange[,irange][,irange], bsrange=irange[,irange][,irange]

	A range of block sizes in bytes for I/O units.  The issued I/O unit will
	always be a multiple of the minimum size, unless
	:option:`blocksize_unaligned` is set.

	Comma-separated ranges may be specified for reads, writes, and trims as
	described in :option:`blocksize`.

	Example: ``bsrange=1k-4k,2k-8k``.

.. option:: bssplit=str[,str][,str]

	Sometimes you want even finer grained control of the block sizes issued, not
	just an even split between them.  This option allows you to weight various
	block sizes, so that you are able to define a specific amount of block sizes
	issued. The format for this option is::

		bssplit=blocksize/percentage:blocksize/percentage

	for as many block sizes as needed. So if you want to define a workload that
	has 50% 64k blocks, 10% 4k blocks, and 40% 32k blocks, you would write::

		bssplit=4k/10:64k/50:32k/40

	Ordering does not matter. If the percentage is left blank, fio will fill in
	the remaining values evenly. So a bssplit option like this one::

		bssplit=4k/50:1k/:32k/

	would have 50% 4k ios, and 25% 1k and 32k ios. The percentages always add up
	to 100, if bssplit is given a range that adds up to more, it will error out.

	Comma-separated values may be specified for reads, writes, and trims as
	described in :option:`blocksize`.

	If you want a workload that has 50% 2k reads and 50% 4k reads, while having
	90% 4k writes and 10% 8k writes, you would specify::

		bssplit=2k/50:4k/50,4k/90,8k/10

.. option:: blocksize_unaligned, bs_unaligned

	If set, fio will issue I/O units with any size within
	:option:`blocksize_range`, not just multiples of the minimum size.  This
	typically won't work with direct I/O, as that normally requires sector
	alignment.

.. option:: bs_is_seq_rand

	If this option is set, fio will use the normal read,write blocksize settings
	as sequential,random blocksize settings instead. Any random read or write
	will use the WRITE blocksize settings, and any sequential read or write will
	use the READ blocksize settings.

.. option:: blockalign=int[,int][,int], ba=int[,int][,int]

	Boundary to which fio will align random I/O units.  Default:
	:option:`blocksize`.  Minimum alignment is typically 512b for using direct
	I/O, 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.  Comma-separated values may be specified for reads, writes, and
	trims as described in :option:`blocksize`.


Buffers and memory
~~~~~~~~~~~~~~~~~~

.. option:: zero_buffers

	Initialize buffers with all zeros. Default: fill buffers with random data.

.. option:: refill_buffers

	If this option is given, fio will refill the I/O 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.

.. option:: scramble_buffers=bool

	If :option:`refill_buffers` is too costly and the target is using data
	deduplication, then setting this option will slightly modify the I/O buffer
	contents to defeat normal de-dupe attempts. This is not enough to defeat
	more clever block compression attempts, but it will stop naive dedupe of
	blocks. Default: true.

.. option:: buffer_compress_percentage=int

	If this is set, then fio will attempt to provide I/O buffer content (on
	WRITEs) that compress to the specified level. Fio does this by providing a
	mix of random data and a fixed pattern. The fixed pattern is either zeroes,
	or the pattern specified by :option:`buffer_pattern`. If the pattern option
	is used, it might skew the compression ratio slightly. Note that this is per
	block size unit, for file/disk wide compression level that matches this
	setting, you'll also want to set :option:`refill_buffers`.

.. option:: buffer_compress_chunk=int

	See :option:`buffer_compress_percentage`. This setting allows fio to manage
	how big the ranges of random data and zeroed data is. Without this set, fio
	will provide :option:`buffer_compress_percentage` of blocksize random data,
	followed by the remaining zeroed. With this set to some chunk size smaller
	than the block size, fio can alternate random and zeroed data throughout the
	I/O buffer.

.. option:: buffer_pattern=str

	If set, fio will fill the I/O buffers with this pattern. If not set, the
	contents of I/O buffers is defined by the other options related to buffer
	contents. The setting can be any pattern of bytes, and can be prefixed with
	0x for hex values. It may also be a string, where the string must then be
	wrapped with ``""``, e.g.::

		buffer_pattern="abcd"

	or::

		buffer_pattern=-12

	or::

		buffer_pattern=0xdeadface

	Also you can combine everything together in any order::

		buffer_pattern=0xdeadface"abcd"-12

.. option:: dedupe_percentage=int

	If set, fio will generate this percentage of identical buffers when
	writing. These buffers will be naturally dedupable. The contents of the
	buffers depend on what other buffer compression settings have been set. It's
	possible to have the individual buffers either fully compressible, or not at
	all. This option only controls the distribution of unique buffers.

.. option:: invalidate=bool

	Invalidate the buffer/page cache parts for this file prior to starting
	I/O if the platform and file type support it. Defaults to true.
	This will be ignored if :option:`pre_read` is also specified for the
	same job.

.. option:: sync=bool

	Use synchronous I/O for buffered writes. For the majority of I/O engines,
	this means using O_SYNC. Default: false.

.. option:: iomem=str, mem=str

	Fio can use various types of memory as the I/O unit buffer.  The allowed
	values are:

		**malloc**
			Use memory from :manpage:`malloc(3)` as the buffers.  Default memory
			type.

		**shm**
			Use shared memory as the buffers. Allocated through
			:manpage:`shmget(2)`.

		**shmhuge**
			Same as shm, but use huge pages as backing.

		**mmap**
			Use mmap to allocate buffers. May either be anonymous memory, or can
			be file backed if a filename is given after the option. The format
			is `mem=mmap:/path/to/file`.

		**mmaphuge**
			Use a memory mapped huge file as the buffer backing. Append filename
			after mmaphuge, ala `mem=mmaphuge:/hugetlbfs/file`.

		**mmapshared**
			Same as mmap, but use a MMAP_SHARED mapping.

		**cudamalloc**
			Use GPU memory as the buffers for GPUDirect RDMA benchmark.

	The area allocated is a function of the maximum allowed bs size for the job,
	multiplied by the I/O depth given. Note that for **shmhuge** and
	**mmaphuge** to work, the system must have free huge pages allocated. This
	can normally be checked and set by reading/writing
	:file:`/proc/sys/vm/nr_hugepages` on a Linux system. Fio assumes a huge page
	is 4MiB in size. So to calculate the number of huge pages you need for a
	given job file, add up the I/O depth of all jobs (normally one unless
	:option:`iodepth` is used) and multiply by the maximum bs set. Then divide
	that number by the huge page size. You can see the size of the huge pages in
	:file:`/proc/meminfo`. If no huge pages are allocated by having a non-zero
	number in `nr_hugepages`, using **mmaphuge** or **shmhuge** will fail. Also
	see :option:`hugepage-size`.

	**mmaphuge** also needs to have hugetlbfs mounted and the file location
	should point there. So if it's mounted in :file:`/huge`, you would use
	`mem=mmaphuge:/huge/somefile`.

.. option:: iomem_align=int

	This indicates the memory alignment of the I/O memory buffers.  Note that
	the given alignment is applied to the first I/O unit buffer, if using
	:option:`iodepth` the alignment of the following buffers are given by the
	:option:`bs` used. In other words, if using a :option:`bs` that is a
	multiple of the page sized in the system, all buffers will be aligned to
	this value. If using a :option:`bs` that is not page aligned, the alignment
	of subsequent I/O memory buffers is the sum of the :option:`iomem_align` and
	:option:`bs` used.

.. option:: hugepage-size=int

	Defines the size of a huge page. Must at least be equal to the system
	setting, see :file:`/proc/meminfo`. Defaults to 4MiB.  Should probably
	always be a multiple of megabytes, so using ``hugepage-size=Xm`` is the
	preferred way to set this to avoid setting a non-pow-2 bad value.

.. option:: lockmem=int

	Pin the specified amount of memory with :manpage:`mlock(2)`. Can be used to
	simulate a smaller amount of memory.  The amount specified is per worker.


I/O size
~~~~~~~~

.. option:: size=int

	The total size of file I/O for each thread of this job. Fio will run until
	this many bytes has been transferred, unless runtime is limited by other options
	(such as :option:`runtime`, for instance, or increased/decreased by :option:`io_size`).
	Fio will divide this size between the available files determined by options
	such as :option:`nrfiles`, :option:`filename`, unless :option:`filesize` is
	specified by the job. If the result of division happens to be 0, the size is
	set to the physical size of the given files or devices if they exist.
	If this option is not specified, fio will use the full size of the given
	files or devices.  If the files do not exist, size must be given. It is also
	possible to give size as a percentage between 1 and 100. If ``size=20%`` is
	given, fio will use 20% of the full size of the given files or devices.
	Can be combined with :option:`offset` to constrain the start and end range
	that I/O will be done within.

.. option:: io_size=int, io_limit=int

	Normally fio operates within the region set by :option:`size`, which means
	that the :option:`size` option sets both the region and size of I/O to be
	performed. Sometimes that is not what you want. With this option, it is
	possible to define just the amount of I/O that fio should do. For instance,
	if :option:`size` is set to 20GiB and :option:`io_size` is set to 5GiB, fio
	will perform I/O within the first 20GiB but exit when 5GiB have been
	done. The opposite is also possible -- if :option:`size` is set to 20GiB,
	and :option:`io_size` is set to 40GiB, then fio will do 40GiB of I/O within
	the 0..20GiB region.

.. option:: filesize=int

	Individual file sizes. May be a range, in which case fio will select sizes
	for files at random within the given range and limited to :option:`size` in
	total (if that is given). If not given, each created file is the same size.
	This option overrides :option:`size` in terms of file size, which means
	this value is used as a fixed size or possible range of each file.

.. option:: file_append=bool

	Perform I/O after the end of the file. Normally fio will operate within the
	size of a file. If this option is set, then fio will append to the file
	instead. This has identical behavior to setting :option:`offset` to the size
	of a file.  This option is ignored on non-regular files.

.. option:: fill_device=bool, fill_fs=bool

	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 I/O
	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.


I/O engine
~~~~~~~~~~

.. option:: ioengine=str

	Defines how the job issues I/O to the file. The following types are defined:

		**sync**
			Basic :manpage:`read(2)` or :manpage:`write(2)`
			I/O. :manpage:`lseek(2)` is used to position the I/O location.
			See :option:`fsync` and :option:`fdatasync` for syncing write I/Os.

		**psync**
			Basic :manpage:`pread(2)` or :manpage:`pwrite(2)` I/O.  Default on
			all supported operating systems except for Windows.

		**vsync**
			Basic :manpage:`readv(2)` or :manpage:`writev(2)` I/O.  Will emulate
			queuing by coalescing adjacent I/Os into a single submission.

		**pvsync**
			Basic :manpage:`preadv(2)` or :manpage:`pwritev(2)` I/O.

		**pvsync2**
			Basic :manpage:`preadv2(2)` or :manpage:`pwritev2(2)` I/O.

		**libaio**
			Linux native asynchronous I/O. Note that Linux may only support
			queued behaviour with non-buffered I/O (set ``direct=1`` or
			``buffered=0``).
			This engine defines engine specific options.

		**posixaio**
			POSIX asynchronous I/O using :manpage:`aio_read(3)` and
			:manpage:`aio_write(3)`.

		**solarisaio**
			Solaris native asynchronous I/O.

		**windowsaio**
			Windows native asynchronous I/O.  Default on Windows.

		**mmap**
			File is memory mapped with :manpage:`mmap(2)` and data copied
			to/from using :manpage:`memcpy(3)`.

		**splice**
			:manpage:`splice(2)` is used to transfer the data and
			:manpage:`vmsplice(2)` to transfer data from user space to the
			kernel.

		**sg**
			SCSI generic sg v3 I/O. May either be synchronous using the SG_IO
			ioctl, or if the target is an sg character device we use
			:manpage:`read(2)` and :manpage:`write(2)` for asynchronous
			I/O. Requires filename option to specify either block or character
			devices.

		**null**
			Doesn't transfer any data, just pretends to.  This is mainly used to
			exercise fio itself and for debugging/testing purposes.

		**net**
			Transfer over the network to given ``host:port``.  Depending on the
			:option:`protocol` used, the :option:`hostname`, :option:`port`,
			:option:`listen` and :option:`filename` options are used to specify
			what sort of connection to make, while the :option:`protocol` option
			determines which protocol will be used.  This engine defines engine
			specific options.

		**netsplice**
			Like **net**, but uses :manpage:`splice(2)` and
			:manpage:`vmsplice(2)` to map data and send/receive.
			This engine defines engine specific options.

		**cpuio**
			Doesn't transfer any data, but burns CPU cycles according to the
			:option:`cpuload` and :option:`cpuchunks` options. Setting
			:option:`cpuload` =85 will cause that job to do nothing but burn 85%
			of the CPU. In case of SMP machines, use :option:`numjobs`
			=<no_of_cpu> to get desired CPU usage, as the cpuload only loads a
			single CPU at the desired rate. A job never finishes unless there is
			at least one non-cpuio job.

		**guasi**
			The GUASI I/O engine is the Generic Userspace Asyncronous Syscall
			Interface approach to async I/O. See

			http://www.xmailserver.org/guasi-lib.html

			for more info on GUASI.

		**rdma**
			The RDMA I/O engine supports both RDMA memory semantics
			(RDMA_WRITE/RDMA_READ) and channel semantics (Send/Recv) for the
			InfiniBand, RoCE and iWARP protocols.

		**falloc**
			I/O engine that does regular fallocate to simulate data transfer as
			fio ioengine.

			DDIR_READ
				does fallocate(,mode = FALLOC_FL_KEEP_SIZE,).

			DDIR_WRITE
				does fallocate(,mode = 0).

			DDIR_TRIM
				does fallocate(,mode = FALLOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE).

		**ftruncate**
			I/O engine that sends :manpage:`ftruncate(2)` operations in response
			to write (DDIR_WRITE) events. Each ftruncate issued sets the file's
			size to the current block offset. Block size is ignored.

		**e4defrag**
			I/O engine that does regular EXT4_IOC_MOVE_EXT ioctls to simulate
			defragment activity in request to DDIR_WRITE event.

		**rbd**
			I/O engine supporting direct access to Ceph Rados Block Devices
			(RBD) via librbd without the need to use the kernel rbd driver. This
			ioengine defines engine specific options.

		**gfapi**
			Using Glusterfs libgfapi sync interface to direct access to
			Glusterfs volumes without having to go through FUSE.  This ioengine
			defines engine specific options.

		**gfapi_async**
			Using Glusterfs libgfapi async interface to direct access to
			Glusterfs volumes without having to go through FUSE. This ioengine
			defines engine specific options.

		**libhdfs**
			Read and write through Hadoop (HDFS).  The :file:`filename` option
			is used to specify host,port of the hdfs name-node to connect.  This
			engine interprets offsets a little differently.  In HDFS, files once
			created cannot be modified.  So random writes are not possible. To
			imitate this, libhdfs engine expects bunch of small files to be
			created over HDFS, and engine will randomly pick a file out of those
			files based on the offset generated by fio backend. (see the example
			job file to create such files, use ``rw=write`` option). Please
			note, you might want to set necessary environment variables to work
			with hdfs/libhdfs properly.  Each job uses its own connection to
			HDFS.

		**mtd**
			Read, write and erase an MTD character device (e.g.,
			:file:`/dev/mtd0`). Discards are treated as erases. Depending on the
			underlying device type, the I/O may have to go in a certain pattern,
			e.g., on NAND, writing sequentially to erase blocks and discarding
			before overwriting. The writetrim mode works well for this
			constraint.

		**pmemblk**
			Read and write using filesystem DAX to a file on a filesystem
			mounted with DAX on a persistent memory device through the NVML
			libpmemblk library.

		**dev-dax**
			Read and write using device DAX to a persistent memory device (e.g.,
			/dev/dax0.0) through the NVML libpmem library.

		**external**
			Prefix to specify loading an external I/O engine object file. Append
			the engine filename, e.g. ``ioengine=external:/tmp/foo.o`` to load
			ioengine :file:`foo.o` in :file:`/tmp`.


I/O engine specific parameters
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

In addition, there are some parameters which are only valid when a specific
ioengine is in use. These are used identically to normal parameters, with the
caveat that when used on the command line, they must come after the
:option:`ioengine` that defines them is selected.

.. option:: userspace_reap : [libaio]

	Normally, with the libaio engine in use, fio will use the
	:manpage:`io_getevents(2)` system call to reap newly returned events.  With
	this flag turned on, the AIO ring will be read directly from user-space to
	reap events. The reaping mode is only enabled when polling for a minimum of
	0 events (e.g. when :option:`iodepth_batch_complete` `=0`).

.. option:: hipri : [pvsync2]

	Set RWF_HIPRI on I/O, indicating to the kernel that it's of higher priority
	than normal.

.. option:: cpuload=int : [cpuio]

	Attempt to use the specified percentage of CPU cycles. This is a mandatory
	option when using cpuio I/O engine.

.. option:: cpuchunks=int : [cpuio]

	Split the load into cycles of the given time. In microseconds.

.. option:: exit_on_io_done=bool : [cpuio]

	Detect when I/O threads are done, then exit.

.. option:: hostname=str : [netsplice] [net]

	The host name or IP address to use for TCP or UDP based I/O.  If the job is
	a TCP listener or UDP reader, the host name is not used and must be omitted
	unless it is a valid UDP multicast address.

.. option:: namenode=str : [libhdfs]

	The host name or IP address of a HDFS cluster namenode to contact.

.. option:: port=int

   [netsplice], [net]

		The TCP or UDP port to bind to or connect to. If this is used with
		:option:`numjobs` to spawn multiple instances of the same job type, then
		this will be the starting port number since fio will use a range of
		ports.

   [libhdfs]

		the listening port of the HFDS cluster namenode.

.. option:: interface=str : [netsplice] [net]

	The IP address of the network interface used to send or receive UDP
	multicast.

.. option:: ttl=int : [netsplice] [net]

	Time-to-live value for outgoing UDP multicast packets. Default: 1.

.. option:: nodelay=bool : [netsplice] [net]

	Set TCP_NODELAY on TCP connections.

.. option:: protocol=str : [netsplice] [net]

.. option:: proto=str : [netsplice] [net]

	The network protocol to use. Accepted values are:

	**tcp**
		Transmission control protocol.
	**tcpv6**
		Transmission control protocol V6.
	**udp**
		User datagram protocol.
	**udpv6**
		User datagram protocol V6.
	**unix**
		UNIX domain socket.

	When the protocol is TCP or UDP, the port must also be given, as well as the
	hostname if the job is a TCP listener or UDP reader. For unix sockets, the
	normal filename option should be used and the port is invalid.

.. option:: listen : [net]

	For TCP network connections, tell fio to listen for incoming connections
	rather than initiating an outgoing connection. The :option:`hostname` must
	be omitted if this option is used.

.. option:: pingpong : [net]

	Normally a network writer will just continue writing data, and a network
	reader will just consume packages. If ``pingpong=1`` is set, a writer will
	send its normal payload to the reader, then wait for the reader to send the
	same payload back. This allows fio to measure network latencies. The
	submission and completion latencies then measure local time spent sending or
	receiving, and the completion latency measures how long it took for the
	other end to receive and send back.  For UDP multicast traffic
	``pingpong=1`` should only be set for a single reader when multiple readers
	are listening to the same address.

.. option:: window_size : [net]

	Set the desired socket buffer size for the connection.

.. option:: mss : [net]

	Set the TCP maximum segment size (TCP_MAXSEG).

.. option:: donorname=str : [e4defrag]

	File will be used as a block donor(swap extents between files).

.. option:: inplace=int : [e4defrag]

	Configure donor file blocks allocation strategy:

	**0**
		Default. Preallocate donor's file on init.
	**1**
		Allocate space immediately inside defragment event,	and free right
		after event.

.. option:: clustername=str : [rbd]

	Specifies the name of the Ceph cluster.

.. option:: rbdname=str : [rbd]

	Specifies the name of the RBD.

.. option:: pool=str : [rbd]

	Specifies the name of the Ceph pool containing RBD.

.. option:: clientname=str : [rbd]

	Specifies the username (without the 'client.' prefix) used to access the
	Ceph cluster. If the *clustername* is specified, the *clientname* shall be
	the full *type.id* string. If no type. prefix is given, fio will add
	'client.' by default.

.. option:: skip_bad=bool : [mtd]

	Skip operations against known bad blocks.

.. option:: hdfsdirectory : [libhdfs]

	libhdfs will create chunk in this HDFS directory.

.. option:: chunk_size : [libhdfs]

	the size of the chunk to use for each file.


I/O depth
~~~~~~~~~

.. option:: iodepth=int

	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 degrees when :option:`verify_async` is in use).  Even async
	engines may impose OS restrictions causing the desired depth not to be
	achieved.  This may happen on Linux when using libaio and not setting
	:option:`direct` =1, since buffered I/O is not async on that OS.  Keep an
	eye on the I/O depth distribution in the fio output to verify that the
	achieved depth is as expected. Default: 1.

.. option:: iodepth_batch_submit=int, iodepth_batch=int

	This defines how many pieces of I/O to submit at once.  It defaults to 1
	which means that we submit each I/O as soon as it is available, but can be
	raised to submit bigger batches of I/O at the time. If it is set to 0 the
	:option:`iodepth` value will be used.

.. option:: iodepth_batch_complete_min=int, iodepth_batch_complete=int

	This defines how many pieces of I/O to retrieve at once. It defaults to 1
	which means that we'll ask for a minimum of 1 I/O in the retrieval process
	from the kernel. The I/O retrieval will go on until we hit the limit set by
	:option:`iodepth_low`. If this variable is set to 0, then fio will always
	check for completed events before queuing more I/O. This helps reduce I/O
	latency, at the cost of more retrieval system calls.

.. option:: iodepth_batch_complete_max=int

	This defines maximum pieces of I/O to retrieve at once. This variable should
	be used along with :option:`iodepth_batch_complete_min` =int variable,
	specifying the range of min and max amount of I/O which should be
	retrieved. By default it is equal to :option:`iodepth_batch_complete_min`
	value.

	Example #1::

		iodepth_batch_complete_min=1
		iodepth_batch_complete_max=<iodepth>

	which means that we will retrieve at least 1 I/O and up to the whole
	submitted queue depth. If none of I/O has been completed yet, we will wait.

	Example #2::

		iodepth_batch_complete_min=0
		iodepth_batch_complete_max=<iodepth>

	which means that we can retrieve up to the whole submitted queue depth, but
	if none of I/O has been completed yet, we will NOT wait and immediately exit
	the system call. In this example we simply do polling.

.. option:: iodepth_low=int

	The low water mark indicating when to start filling the queue
	again. Defaults to the same as :option:`iodepth`, meaning that fio will
	attempt to keep the queue full at all times.  If :option:`iodepth` is set to
	e.g. 16 and *iodepth_low* is set to 4, then after fio has filled the queue of
	16 requests, it will let the depth drain down to 4 before starting to fill
	it again.

.. option:: io_submit_mode=str

	This option controls how fio submits the I/O to the I/O engine. The default
	is `inline`, which means that the fio job threads submit and reap I/O
	directly. If set to `offload`, the job threads will offload I/O submission
	to a dedicated pool of I/O threads. This requires some coordination and thus
	has a bit of extra overhead, especially for lower queue depth I/O where it
	can increase latencies. The benefit is that fio can manage submission rates
	independently of the device completion rates. This avoids skewed latency
	reporting if I/O gets back up on the device side (the coordinated omission
	problem).


I/O rate
~~~~~~~~

.. option:: thinktime=time

	Stall the job for the specified period of time after an I/O has completed before issuing the
	next. May be used to simulate processing being done by an application.
	When the unit is omitted, the value is given in microseconds.  See
	:option:`thinktime_blocks` and :option:`thinktime_spin`.

.. option:: thinktime_spin=time

	Only valid if :option:`thinktime` is set - pretend to spend CPU time doing
	something with the data received, before falling back to sleeping for the
	rest of the period specified by :option:`thinktime`.  When the unit is
	omitted, the value is given in microseconds.

.. option:: thinktime_blocks=int

	Only valid if :option:`thinktime` is set - control how many blocks to issue,
	before waiting `thinktime` usecs. If not set, defaults to 1 which will make
	fio wait `thinktime` usecs after every block. This effectively makes any
	queue depth setting redundant, since no more than 1 I/O will be queued
	before we have to complete it and do our thinktime. In other words, this
	setting effectively caps the queue depth if the latter is larger.

.. option:: rate=int[,int][,int]

	Cap the bandwidth used by this job. The number is in bytes/sec, the normal
	suffix rules apply.  Comma-separated values may be specified for reads,
	writes, and trims as described in :option:`blocksize`.

.. option:: rate_min=int[,int][,int]

	Tell fio to do whatever it can to maintain at least this bandwidth. Failing
	to meet this requirement will cause the job to exit.  Comma-separated values
	may be specified for reads, writes, and trims as described in
	:option:`blocksize`.

.. option:: rate_iops=int[,int][,int]

	Cap the bandwidth to this number of IOPS. Basically the same as
	:option:`rate`, just specified independently of bandwidth. If the job is
	given a block size range instead of a fixed value, the smallest block size
	is used as the metric.  Comma-separated values may be specified for reads,
	writes, and trims as described in :option:`blocksize`.

.. option:: rate_iops_min=int[,int][,int]

	If fio doesn't meet this rate of I/O, it will cause the job to exit.
	Comma-separated values may be specified for reads, writes, and trims as
	described in :option:`blocksize`.

.. option:: rate_process=str

	This option controls how fio manages rated I/O submissions. The default is
	`linear`, which submits I/O in a linear fashion with fixed delays between
	I/Os that gets adjusted based on I/O completion rates. If this is set to
	`poisson`, fio will submit I/O based on a more real world random request
	flow, known as the Poisson process
	(https://en.wikipedia.org/wiki/Poisson_point_process). The lambda will be
	10^6 / IOPS for the given workload.


I/O latency
~~~~~~~~~~~

.. option:: latency_target=time

	If set, fio will attempt to find the max performance point that the given
	workload will run at while maintaining a latency below this target.  When
	the unit is omitted, the value is given in microseconds.  See
	:option:`latency_window` and :option:`latency_percentile`.

.. option:: latency_window=time

	Used with :option:`latency_target` to specify the sample window that the job
	is run at varying queue depths to test the performance.  When the unit is
	omitted, the value is given in microseconds.

.. option:: latency_percentile=float

	The percentage of I/Os that must fall within the criteria specified by
	:option:`latency_target` and :option:`latency_window`. If not set, this
	defaults to 100.0, meaning that all I/Os must be equal or below to the value
	set by :option:`latency_target`.

.. option:: max_latency=time

	If set, fio will exit the job with an ETIMEDOUT error if it exceeds this
	maximum latency. When the unit is omitted, the value is given in
	microseconds.

.. option:: rate_cycle=int

	Average bandwidth for :option:`rate` and :option:`rate_min` over this number
	of milliseconds.


I/O replay
~~~~~~~~~~

.. option:: write_iolog=str

	Write the issued I/O patterns to the specified file. See
	:option:`read_iolog`.  Specify a separate file for each job, otherwise the
	iologs will be interspersed and the file may be corrupt.

.. option:: read_iolog=str

	Open an iolog with the specified file name and replay the I/O patterns it
	contains. This can be used to store a workload and replay it sometime
	later. The iolog given may also be a blktrace binary file, which allows fio
	to replay a workload captured by :command:`blktrace`. See
	:manpage:`blktrace(8)` for how to capture such logging data. For blktrace
	replay, the file needs to be turned into a blkparse binary data file first
	(``blkparse <device> -o /dev/null -d file_for_fio.bin``).

.. option:: replay_no_stall=int

	When replaying I/O with :option:`read_iolog` the default behavior is to
	attempt to respect the time stamps within the log and replay them with the
	appropriate delay between IOPS. By setting this variable fio will not
	respect the timestamps and attempt to replay them as fast as possible while
	still respecting ordering. The result is the same I/O pattern to a given
	device, but different timings.

.. option:: replay_redirect=str

	While replaying I/O patterns using :option:`read_iolog` the default behavior
	is to replay the IOPS onto the major/minor device that each IOP was recorded
	from.  This is sometimes undesirable because on a different machine those
	major/minor numbers can map to a different device.  Changing hardware on the
	same system can also result in a different major/minor mapping.
	``replay_redirect`` causes all IOPS to be replayed onto the single specified
	device regardless of the device it was recorded
	from. i.e. :option:`replay_redirect` = :file:`/dev/sdc` would cause all I/O
	in the blktrace or iolog to be replayed onto :file:`/dev/sdc`.  This means
	multiple devices will be replayed onto a single device, if the trace
	contains multiple devices. If you want multiple devices to be replayed
	concurrently to multiple redirected devices you must blkparse your trace
	into separate traces and replay them with independent fio invocations.
	Unfortunately this also breaks the strict time ordering between multiple
	device accesses.

.. option:: replay_align=int

	Force alignment of I/O offsets and lengths in a trace to this power of 2
	value.

.. option:: replay_scale=int

	Scale sector offsets down by this factor when replaying traces.


Threads, processes and job synchronization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: thread

	Fio defaults to forking jobs, however if this option is given, fio will use
	POSIX Threads function :manpage:`pthread_create(3)` to create threads instead
	of forking processes.

.. option:: wait_for=str

	Specifies the name of the already defined job to wait for. Single waitee
	name only may be specified. If set, the job won't be started until all
	workers of the waitee job are done.

	``wait_for`` operates on the job name basis, so there are a few
	limitations. First, the waitee must be defined prior to the waiter job
	(meaning no forward references). Second, if a job is being referenced as a
	waitee, it must have a unique name (no duplicate waitees).

.. option:: nice=int

	Run the job with the given nice value. See man :manpage:`nice(2)`.

	On Windows, values less than -15 set the process class to "High"; -1 through
	-15 set "Above Normal"; 1 through 15 "Below Normal"; and above 15 "Idle"
	priority class.

.. option:: prio=int

	Set the I/O priority value of this job. Linux limits us to a positive value
	between 0 and 7, with 0 being the highest.  See man
	:manpage:`ionice(1)`. Refer to an appropriate manpage for other operating
	systems since meaning of priority may differ.

.. option:: prioclass=int

	Set the I/O priority class. See man :manpage:`ionice(1)`.

.. option:: cpumask=int

	Set the CPU affinity of this job. The parameter given is a bitmask of
	allowed CPU's the job may run on. So if you want the allowed CPUs to be 1
	and 5, you would pass the decimal value of (1 << 1 | 1 << 5), or 34. See man
	:manpage:`sched_setaffinity(2)`. This may not work on all supported
	operating systems or kernel versions. This option doesn't work well for a
	higher CPU count than what you can store in an integer mask, so it can only
	control cpus 1-32. For boxes with larger CPU counts, use
	:option:`cpus_allowed`.

.. option:: cpus_allowed=str

	Controls the same options as :option:`cpumask`, but it allows a text setting
	of the permitted CPUs instead. So to use CPUs 1 and 5, you would specify
	``cpus_allowed=1,5``. This options also allows a range of CPUs. Say you
	wanted a binding to CPUs 1, 5, and 8-15, you would set
	``cpus_allowed=1,5,8-15``.

.. option:: cpus_allowed_policy=str

	Set the policy of how fio distributes the CPUs specified by
	:option:`cpus_allowed` or cpumask. Two policies are supported:

		**shared**
			All jobs will share the CPU set specified.
		**split**
			Each job will get a unique CPU from the CPU set.

	**shared** is the default behaviour, if the option isn't specified. If
	**split** is specified, then fio will will assign one cpu per job. If not
	enough CPUs are given for the jobs listed, then fio will roundrobin the CPUs
	in the set.

.. option:: numa_cpu_nodes=str

	Set this job running on specified NUMA nodes' CPUs. The arguments allow
	comma delimited list of cpu numbers, A-B ranges, or `all`. Note, to enable
	numa options support, fio must be built on a system with libnuma-dev(el)
	installed.

.. option:: numa_mem_policy=str

	Set this job's memory policy and corresponding NUMA nodes. Format of the
	arguments::

		<mode>[:<nodelist>]

	``mode`` is one of the following memory policy: ``default``, ``prefer``,
	``bind``, ``interleave``, ``local`` For ``default`` and ``local`` memory
	policy, no node is needed to be specified.  For ``prefer``, only one node is
	allowed.  For ``bind`` and ``interleave``, it allow comma delimited list of
	numbers, A-B ranges, or `all`.

.. option:: cgroup=str

	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

.. option:: cgroup_weight=int

	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.

.. option:: cgroup_nodelete=bool

	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.

.. option:: flow_id=int

	The ID of the flow. If not specified, it defaults to being a global
	flow. See :option:`flow`.

.. option:: flow=int

	Weight in token-based flow control. If this value is used, then there is a
	'flow counter' which is used to regulate the proportion of activity between
	two or more jobs. Fio attempts to keep this flow counter near zero. The
	``flow`` parameter stands for how much should be added or subtracted to the
	flow counter on each iteration of the main I/O loop. That is, if one job has
	``flow=8`` and another job has ``flow=-1``, then there will be a roughly 1:8
	ratio in how much one runs vs the other.

.. option:: flow_watermark=int

	The maximum value that the absolute value of the flow counter is allowed to
	reach before the job must wait for a lower value of the counter.

.. option:: flow_sleep=int

	The period of time, in microseconds, to wait after the flow watermark has
	been exceeded before retrying operations.

.. option:: stonewall, wait_for_previous

	Wait for preceding jobs in the job file to exit, before starting this
	one. Can be used to insert serialization points in the job file. A stone
	wall also implies starting a new reporting group, see
	:option:`group_reporting`.

.. option:: exitall

	When one job finishes, terminate the rest. The default is to wait for each
	job to finish, sometimes that is not the desired action.

.. option:: exec_prerun=str

	Before running this job, issue the command specified through
	:manpage:`system(3)`. Output is redirected in a file called
	:file:`jobname.prerun.txt`.

.. option:: exec_postrun=str

	After the job completes, issue the command specified though
	:manpage:`system(3)`. Output is redirected in a file called
	:file:`jobname.postrun.txt`.

.. option:: uid=int

	Instead of running as the invoking user, set the user ID to this value
	before the thread/process does any work.

.. option:: gid=int

	Set group ID, see :option:`uid`.


Verification
~~~~~~~~~~~~

.. option:: verify_only

	Do not perform specified workload, only verify data still matches previous
	invocation of this workload. This option allows one to check data multiple
	times at a later date without overwriting it. This option makes sense only
	for workloads that write data, and does not support workloads with the
	:option:`time_based` option set.

.. option:: do_verify=bool

	Run the verify phase after a write phase. Only valid if :option:`verify` is
	set. Default: true.

.. option:: verify=str

	If writing to a file, fio can verify the file contents after each iteration
	of the job. Each verification method also implies verification of special
	header, which is written to the beginning of each block. This header also
	includes meta information, like offset of the block, block number, timestamp
	when block was written, etc.  :option:`verify` can be combined with
	:option:`verify_pattern` option.  The allowed values are:

		**md5**
			Use an md5 sum of the data area and store it in the header of
			each block.

		**crc64**
			Use an experimental crc64 sum of the data area and store it in the
			header of each block.

		**crc32c**
			Use a crc32c sum of the data area and store it in the header of each
			block.

		**crc32c-intel**
			Use hardware assisted crc32c calculation provided on SSE4.2 enabled
			processors. Falls back to regular software crc32c, if not supported
			by the system.

		**crc32**
			Use a crc32 sum of the data area and store it in the header of each
			block.

		**crc16**
			Use a crc16 sum of the data area and store it in the header of each
			block.

		**crc7**
			Use a crc7 sum of the data area and store it in the header of each
			block.

		**xxhash**
			Use xxhash as the checksum function. Generally the fastest software
			checksum that fio supports.

		**sha512**
			Use sha512 as the checksum function.

		**sha256**
			Use sha256 as the checksum function.

		**sha1**
			Use optimized sha1 as the checksum function.

		**sha3-224**
			Use optimized sha3-224 as the checksum function.

		**sha3-256**
			Use optimized sha3-256 as the checksum function.

		**sha3-384**
			Use optimized sha3-384 as the checksum function.

		**sha3-512**
			Use optimized sha3-512 as the checksum function.

		**meta**
			This option is deprecated, since now meta information is included in
			generic verification header and meta verification happens by
			default. For detailed information see the description of the
			:option:`verify` setting. This option is kept because of
			compatibility's sake with old configurations. Do not use it.

		**pattern**
			Verify a strict pattern. Normally fio includes a header with some
			basic information and checksumming, but if this option is set, only
			the specific pattern set with :option:`verify_pattern` is verified.

		**null**
			Only pretend to verify. Useful for testing internals with
			:option:`ioengine` `=null`, not for much else.

	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.

.. option:: verifysort=bool

	If true, fio will sort written verify blocks when it deems it faster to read
	them back in a sorted manner. This is often the case when overwriting an
	existing file, since the blocks are already laid out in the file system. You
	can ignore this option unless doing huge amounts of really fast I/O where
	the red-black tree sorting CPU time becomes significant. Default: true.

.. option:: verifysort_nr=int

   Pre-load and sort verify blocks for a read workload.

.. option:: verify_offset=int

	Swap the verification header with data somewhere else in the block before
	writing. It is swapped back before verifying.

.. option:: verify_interval=int

	Write the verification header at a finer granularity than the
	:option:`blocksize`. It will be written for chunks the size of
	``verify_interval``. :option:`blocksize` should divide this evenly.

.. option:: verify_pattern=str

	If set, fio will fill the I/O buffers with this pattern. Fio defaults to
	filling with totally random bytes, but sometimes it's interesting to fill
	with a known pattern for I/O 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 :option:`verify`. Also, ``verify_pattern`` supports %o
	format, which means that for each block offset will be written and then
	verified back, e.g.::

		verify_pattern=%o

	Or use combination of everything::

		verify_pattern=0xff%o"abcd"-12

.. option:: verify_fatal=bool

	Normally fio will keep checking the entire contents before quitting on a
	block verification failure. If this option is set, fio will exit the job on
	the first observed failure. Default: false.

.. option:: verify_dump=bool

	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. Off by default.

.. option:: verify_async=int

	Fio will normally verify I/O inline from the submitting thread. This option
	takes an integer describing how many async offload threads to create for I/O
	verification instead, causing fio to offload the duty of verifying I/O
	contents to one or more separate threads. If using this offload option, even
	sync I/O engines can benefit from using an :option:`iodepth` setting higher
	than 1, as it allows them to have I/O in flight while verifies are running.

.. option:: verify_async_cpus=str

	Tell fio to set the given CPU affinity on the async I/O verification
	threads. See :option:`cpus_allowed` for the format used.

.. option:: verify_backlog=int

	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 I/O 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.

.. option:: verify_backlog_batch=int

	Control how many blocks fio will verify if :option:`verify_backlog` is
	set. If not set, will default to the value of :option:`verify_backlog`
	(meaning the entire queue is read back and verified).  If
	``verify_backlog_batch`` is less than :option:`verify_backlog` then not all
	blocks will be verified, if ``verify_backlog_batch`` is larger than
	:option:`verify_backlog`, some blocks will be verified more than once.

.. option:: verify_state_save=bool

	When a job exits during the write phase of a verify workload, save its
	current state. This allows fio to replay up until that point, if the verify
	state is loaded for the verify read phase. The format of the filename is,
	roughly::

	<type>-<jobname>-<jobindex>-verify.state.

	<type> is "local" for a local run, "sock" for a client/server socket
	connection, and "ip" (192.168.0.1, for instance) for a networked
	client/server connection.

.. option:: verify_state_load=bool

	If a verify termination trigger was used, fio stores the current write state
	of each thread. This can be used at verification time so that fio knows how
	far it should verify.  Without this information, fio will run a full
	verification pass, according to the settings in the job file used.

.. option:: trim_percentage=int

	Number of verify blocks to discard/trim.

.. option:: trim_verify_zero=bool

	Verify that trim/discarded blocks are returned as zeroes.

.. option:: trim_backlog=int

	Verify that trim/discarded blocks are returned as zeroes.

.. option:: trim_backlog_batch=int

	Trim this number of I/O blocks.

.. option:: experimental_verify=bool

	Enable experimental verification.


Steady state
~~~~~~~~~~~~

.. option:: steadystate=str:float, ss=str:float

	Define the criterion and limit for assessing steady state performance. The
	first parameter designates the criterion whereas the second parameter sets
	the threshold. When the criterion falls below the threshold for the
	specified duration, the job will stop. For example, `iops_slope:0.1%` will
	direct fio to terminate the job when the least squares regression slope
	falls below 0.1% of the mean IOPS. If :option:`group_reporting` is enabled
	this will apply to all jobs in the group. Below is the list of available
	steady state assessment criteria. All assessments are carried out using only
	data from the rolling collection window. Threshold limits can be expressed
	as a fixed value or as a percentage of the mean in the collection window.

		**iops**
			Collect IOPS data. Stop the job if all individual IOPS measurements
			are within the specified limit of the mean IOPS (e.g., ``iops:2``
			means that all individual IOPS values must be within 2 of the mean,
			whereas ``iops:0.2%`` means that all individual IOPS values must be
			within 0.2% of the mean IOPS to terminate the job).

		**iops_slope**
			Collect IOPS data and calculate the least squares regression
			slope. Stop the job if the slope falls below the specified limit.

		**bw**
			Collect bandwidth data. Stop the job if all individual bandwidth
			measurements are within the specified limit of the mean bandwidth.

		**bw_slope**
			Collect bandwidth data and calculate the least squares regression
			slope. Stop the job if the slope falls below the specified limit.

.. option:: steadystate_duration=time, ss_dur=time

	A rolling window of this duration will be used to judge whether steady state
	has been reached. Data will be collected once per second. The default is 0
	which disables steady state detection.  When the unit is omitted, the
	value is given in seconds.

.. option:: steadystate_ramp_time=time, ss_ramp=time

	Allow the job to run for the specified duration before beginning data
	collection for checking the steady state job termination criterion. The
	default is 0.  When the unit is omitted, the value is given in seconds.


Measurements and reporting
~~~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: per_job_logs=bool

	If set, this generates bw/clat/iops log with per file private filenames. If
	not set, jobs with identical names will share the log filename. Default:
	true.

.. option:: group_reporting

	It may sometimes be interesting to display statistics for groups of jobs as
	a whole instead of for each individual job.  This is especially true if
	:option:`numjobs` is used; looking at individual thread/process output
	quickly becomes unwieldy.  To see the final report per-group instead of
	per-job, use :option:`group_reporting`. Jobs in a file will be part of the
	same reporting group, unless if separated by a :option:`stonewall`, or by
	using :option:`new_group`.

.. option:: new_group

	Start a new reporting group. See: :option:`group_reporting`.  If not given,
	all jobs in a file will be part of the same reporting group, unless
	separated by a :option:`stonewall`.

.. option:: stats

	By default, fio collects and shows final output results for all jobs
	that run. If this option is set to 0, then fio will ignore it in
	the final stat output.

.. option:: write_bw_log=str

	If given, write a bandwidth log for this job. Can be used to store data of
	the bandwidth of the jobs in their lifetime. The included
	:command:`fio_generate_plots` script uses :command:`gnuplot` to turn these
	text files into nice graphs. See :option:`write_lat_log` for behaviour of
	given filename. For this option, the postfix is :file:`_bw.x.log`, where `x`
	is the index of the job (`1..N`, where `N` is the number of jobs). If
	:option:`per_job_logs` is false, then the filename will not include the job
	index.  See `Log File Formats`_.

.. option:: write_lat_log=str

	Same as :option:`write_bw_log`, except that this option stores I/O
	submission, completion, and total latencies instead. If no filename is given
	with this option, the default filename of :file:`jobname_type.log` is
	used. Even if the filename is given, fio will still append the type of
	log. So if one specifies::

		write_lat_log=foo

	The actual log names will be :file:`foo_slat.x.log`, :file:`foo_clat.x.log`,
	and :file:`foo_lat.x.log`, where `x` is the index of the job (1..N, where N
	is the number of jobs). This helps :command:`fio_generate_plot` find the
	logs automatically. If :option:`per_job_logs` is false, then the filename
	will not include the job index.  See `Log File Formats`_.

.. option:: write_hist_log=str

	Same as :option:`write_lat_log`, but writes I/O completion latency
	histograms. If no filename is given with this option, the default filename
	of :file:`jobname_clat_hist.x.log` is used, where `x` is the index of the
	job (1..N, where `N` is the number of jobs). Even if the filename is given,
	fio will still append the type of log.  If :option:`per_job_logs` is false,
	then the filename will not include the job index. See `Log File Formats`_.

.. option:: write_iops_log=str

	Same as :option:`write_bw_log`, but writes IOPS. If no filename is given
	with this option, the default filename of :file:`jobname_type.x.log` is
	used,where `x` is the index of the job (1..N, where `N` is the number of
	jobs). Even if the filename is given, fio will still append the type of
	log. If :option:`per_job_logs` is false, then the filename will not include
	the job index. See `Log File Formats`_.

.. option:: log_avg_msec=int

	By default, fio will log an entry in the iops, latency, or bw log for every
	I/O that completes. When writing to the disk log, that can quickly grow to a
	very large size. Setting this option makes fio average the each log entry
	over the specified period of time, reducing the resolution of the log.  See
	:option:`log_max_value` as well. Defaults to 0, logging all entries.

.. option:: log_hist_msec=int

	Same as :option:`log_avg_msec`, but logs entries for completion latency
	histograms. Computing latency percentiles from averages of intervals using
	:option:`log_avg_msec` is inaccurate. Setting this option makes fio log
	histogram entries over the specified period of time, reducing log sizes for
	high IOPS devices while retaining percentile accuracy.  See
	:option:`log_hist_coarseness` as well. Defaults to 0, meaning histogram
	logging is disabled.

.. option:: log_hist_coarseness=int

	Integer ranging from 0 to 6, defining the coarseness of the resolution of
	the histogram logs enabled with :option:`log_hist_msec`. For each increment
	in coarseness, fio outputs half as many bins. Defaults to 0, for which
	histogram logs contain 1216 latency bins. See `Log File Formats`_.

.. option:: log_max_value=bool

	If :option:`log_avg_msec` is set, fio logs the average over that window. If
	you instead want to log the maximum value, set this option to 1. Defaults to
	0, meaning that averaged values are logged.

.. option:: log_offset=int

	If this is set, the iolog options will include the byte offset for the I/O
	entry as well as the other data values.

.. option:: log_compression=int

	If this is set, fio will compress the I/O logs as it goes, to keep the
	memory footprint lower. When a log reaches the specified size, that chunk is
	removed and compressed in the background. Given that I/O logs are fairly
	highly compressible, this yields a nice memory savings for longer runs. The
	downside is that the compression will consume some background CPU cycles, so
	it may impact the run. This, however, is also true if the logging ends up
	consuming most of the system memory.  So pick your poison. The I/O logs are
	saved normally at the end of a run, by decompressing the chunks and storing
	them in the specified log file. This feature depends on the availability of
	zlib.

.. option:: log_compression_cpus=str

	Define the set of CPUs that are allowed to handle online log compression for
	the I/O jobs. This can provide better isolation between performance
	sensitive jobs, and background compression work.

.. option:: log_store_compressed=bool

	If set, fio will store the log files in a compressed format. They can be
	decompressed with fio, using the :option:`--inflate-log` command line
	parameter. The files will be stored with a :file:`.fz` suffix.

.. option:: log_unix_epoch=bool

	If set, fio will log Unix timestamps to the log files produced by enabling
	write_type_log for each log type, instead of the default zero-based
	timestamps.

.. option:: block_error_percentiles=bool

	If set, record errors in trim block-sized units from writes and trims and
	output a histogram of how many trims it took to get to errors, and what kind
	of error was encountered.

.. option:: bwavgtime=int

	Average the calculated bandwidth over the given time. Value is specified in
	milliseconds. If the job also does bandwidth logging through
	:option:`write_bw_log`, then the minimum of this option and
	:option:`log_avg_msec` will be used.  Default: 500ms.

.. option:: iopsavgtime=int

	Average the calculated IOPS over the given time. Value is specified in
	milliseconds. If the job also does IOPS logging through
	:option:`write_iops_log`, then the minimum of this option and
	:option:`log_avg_msec` will be used.  Default: 500ms.

.. option:: disk_util=bool

	Generate disk utilization statistics, if the platform supports it.
	Default: true.

.. option:: disable_lat=bool

	Disable measurements of total latency numbers. Useful only for cutting back
	the number of calls to :manpage:`gettimeofday(2)`, 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
	:option:`disable_slat` and :option:`disable_bw_measurement` as well.

.. option:: disable_clat=bool

	Disable measurements of completion latency numbers. See
	:option:`disable_lat`.

.. option:: disable_slat=bool

	Disable measurements of submission latency numbers. See
	:option:`disable_slat`.

.. option:: disable_bw_measurement=bool, disable_bw=bool

	Disable measurements of throughput/bandwidth numbers. See
	:option:`disable_lat`.

.. option:: clat_percentiles=bool

	Enable the reporting of percentiles of completion latencies.

.. option:: percentile_list=float_list

	Overwrite the default list of percentiles for completion latencies and the
	block error histogram.  Each number is a floating number in the range
	(0,100], and the maximum length of the list is 20. Use ``:`` to separate the
	numbers, and list the numbers in ascending order. For example,
	``--percentile_list=99.5:99.9`` will cause fio to report the values of
	completion latency below which 99.5% and 99.9% of the observed latencies
	fell, respectively.


Error handling
~~~~~~~~~~~~~~

.. option:: exitall_on_error

	When one job finishes in error, terminate the rest. The default is to wait
	for each job to finish.

.. option:: continue_on_error=str

	Normally fio will exit the job on the first observed failure. If this option
	is set, fio will continue the job when there is a 'non-fatal error' (EIO or
	EILSEQ) until the runtime is exceeded or the I/O size specified is
	completed. If this option is used, there are two more stats that are
	appended, the total error count and the first error. The error field given
	in the stats is the first error that was hit during the run.

	The allowed values are:

		**none**
			Exit on any I/O or verify errors.

		**read**
			Continue on read errors, exit on all others.

		**write**
			Continue on write errors, exit on all others.

		**io**
			Continue on any I/O error, exit on all others.

		**verify**
			Continue on verify errors, exit on all others.

		**all**
			Continue on all errors.

		**0**
			Backward-compatible alias for 'none'.

		**1**
			Backward-compatible alias for 'all'.

.. option:: ignore_error=str

	Sometimes you want to ignore some errors during test in that case you can
	specify error list for each error type.
	``ignore_error=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST`` errors for
	given error type is separated with ':'. Error may be symbol ('ENOSPC',
	'ENOMEM') or integer.  Example::

		ignore_error=EAGAIN,ENOSPC:122

	This option will ignore EAGAIN from READ, and ENOSPC and 122(EDQUOT) from
	WRITE.

.. option:: error_dump=bool

	If set dump every error even if it is non fatal, true by default. If
	disabled only fatal error will be dumped.

Running predefined workloads
----------------------------

Fio includes predefined profiles that mimic the I/O workloads generated by
other tools.

.. option:: profile=str

	The predefined workload to run.  Current profiles are:

		**tiobench**
			Threaded I/O bench (tiotest/tiobench) like workload.

		**act**
			Aerospike Certification Tool (ACT) like workload.

To view a profile's additional options use :option:`--cmdhelp` after specifying
the profile.  For example::

$ fio --profile=act --cmdhelp

Act profile options
~~~~~~~~~~~~~~~~~~~

.. option:: device-names=str
	:noindex:

	Devices to use.

.. option:: load=int
	:noindex:

	ACT load multiplier.  Default: 1.

.. option:: test-duration=time
	:noindex:

	How long the entire test takes to run.  Default: 24h.

.. option:: threads-per-queue=int
	:noindex:

	Number of read IO threads per device.  Default: 8.

.. option:: read-req-num-512-blocks=int
	:noindex:

	Number of 512B blocks to read at the time.  Default: 3.

.. option:: large-block-op-kbytes=int
	:noindex:

	Size of large block ops in KiB (writes).  Default: 131072.

.. option:: prep
	:noindex:

	Set to run ACT prep phase.

Tiobench profile options
~~~~~~~~~~~~~~~~~~~~~~~~

.. option:: size=str
	:noindex:

	Size in MiB

.. option:: block=int
	:noindex:

	Block size in bytes.  Default: 4096.

.. option:: numruns=int
	:noindex:

	Number of runs.

.. option:: dir=str
	:noindex:

	Test directory.

.. option:: threads=int
	:noindex:

	Number of threads.

Interpreting the output
-----------------------

Fio spits out a lot of output. While running, fio will display the status of the
jobs created. An example of that would be::

    Jobs: 1 (f=1): [_(1),M(1)][24.8%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 01m:31s]

The characters inside the square brackets denote the current status of each
thread. The possible values (in typical life cycle order) are:

+------+-----+-----------------------------------------------------------+
| Idle | Run |                                                           |
+======+=====+===========================================================+
| P    |     | Thread setup, but not started.                            |
+------+-----+-----------------------------------------------------------+
| C    |     | Thread created.                                           |
+------+-----+-----------------------------------------------------------+
| I    |     | Thread initialized, waiting or generating necessary data. |
+------+-----+-----------------------------------------------------------+
|      |  p  | Thread running pre-reading file(s).                       |
+------+-----+-----------------------------------------------------------+
|      |  R  | Running, doing sequential reads.                          |
+------+-----+-----------------------------------------------------------+
|      |  r  | Running, doing random reads.                              |
+------+-----+-----------------------------------------------------------+
|      |  W  | Running, doing sequential writes.                         |
+------+-----+-----------------------------------------------------------+
|      |  w  | Running, doing random writes.                             |
+------+-----+-----------------------------------------------------------+
|      |  M  | Running, doing mixed sequential reads/writes.             |
+------+-----+-----------------------------------------------------------+
|      |  m  | Running, doing mixed random reads/writes.                 |
+------+-----+-----------------------------------------------------------+
|      |  F  | Running, currently waiting for :manpage:`fsync(2)`        |
+------+-----+-----------------------------------------------------------+
|      |  V  | Running, doing verification of written data.              |
+------+-----+-----------------------------------------------------------+
| E    |     | Thread exited, not reaped by main thread yet.             |
+------+-----+-----------------------------------------------------------+
| _    |     | Thread reaped, or                                         |
+------+-----+-----------------------------------------------------------+
| X    |     | Thread reaped, exited with an error.                      |
+------+-----+-----------------------------------------------------------+
| K    |     | Thread reaped, exited due to signal.                      |
+------+-----+-----------------------------------------------------------+

Fio will condense the thread string as not to take up more space on the command
line as is needed. For instance, if you have 10 readers and 10 writers running,
the output would look like this::

    Jobs: 20 (f=20): [R(10),W(10)][4.0%][r=20.5MiB/s,w=23.5MiB/s][r=82,w=94 IOPS][eta 57m:36s]

Fio will still maintain the ordering, though. So the above means that jobs 1..10
are readers, and 11..20 are writers.

The other values are fairly self explanatory -- number of threads currently
running and doing I/O, the number of currently open files (f=), the rate of I/O
since last check (read speed listed first, then write speed and optionally trim
speed), and the estimated completion percentage and time for the current
running group. It's impossible to estimate runtime of the following groups (if
any). Note that the string is displayed in order, so it's possible to tell which
of the jobs are currently doing what. The first character is the first job
defined in the job file, and so forth.

When fio is done (or interrupted by :kbd:`ctrl-c`), it will show the data for
each thread, group of threads, and disks in that order. For each data direction,
the output looks like::

    Client1 (g=0): err= 0:
      write: io=    32MiB, bw=   666KiB/s, iops=89 , runt= 50320msec
        slat (msec): min=    0, max=  136, avg= 0.03, stdev= 1.92
        clat (msec): min=    0, max=  631, avg=48.50, stdev=86.82
        bw (KiB/s) : min=    0, max= 1196, per=51.00%, avg=664.02, stdev=681.68
      cpu        : usr=1.49%, sys=0.25%, ctx=7969, majf=0, minf=17
      IO depths    : 1=0.1%, 2=0.3%, 4=0.5%, 8=99.0%, 16=0.0%, 32=0.0%, >32=0.0%
         submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
         issued r/w: total=0/32768, short=0/0
         lat (msec): 2=1.6%, 4=0.0%, 10=3.2%, 20=12.8%, 50=38.4%, 100=24.8%,
         lat (msec): 250=15.2%, 500=0.0%, 750=0.0%, 1000=0.0%, >=2048=0.0%

The client number is printed, along with the group id and error of that
thread. Below is the I/O statistics, here for writes. In the order listed, they
denote:

**io**
		Number of megabytes I/O performed.

**bw**
		Average bandwidth rate.

**iops**
		Average I/Os performed per second.

**runt**
		The runtime of that thread.

**slat**
		Submission latency (avg being the average, stdev being the standard
		deviation). This is the time it took to submit the I/O. For sync I/O,
		the slat is really the completion latency, since queue/complete is one
		operation there. This value can be in milliseconds or microseconds, fio
		will choose the most appropriate base and print that. In the example
		above, milliseconds is the best scale. Note: in :option:`--minimal` mode
		latencies are always expressed in microseconds.

**clat**
		Completion latency. Same names as slat, this denotes the time from
		submission to completion of the I/O pieces. For sync I/O, clat will
		usually be equal (or very close) to 0, as the time from submit to
		complete is basically just CPU time (I/O has already been done, see slat
		explanation).

**bw**
		Bandwidth. Same names as the xlat stats, but also includes an
		approximate percentage of total aggregate bandwidth this thread received
		in this group. This last value is only really useful if the threads in
		this group are on the same disk, since they are then competing for disk
		access.

**cpu**
		CPU usage. User and system time, along with the number of context
		switches this thread went through, usage of system and user time, and
		finally the number of major and minor page faults. The CPU utilization
		numbers are averages for the jobs in that reporting group, while the
		context and fault counters are summed.

**IO depths**
		The distribution of I/O depths over the job life time. The numbers are
		divided into powers of 2, so for example the 16= entries includes depths
		up to that value but higher than the previous entry. In other words, it
		covers the range from 16 to 31.

**IO submit**
		How many pieces of I/O were submitting in a single submit call. Each
		entry denotes that amount and below, until the previous entry -- e.g.,
		8=100% mean that we submitted anywhere in between 5-8 I/Os per submit
		call.

**IO complete**
		Like the above submit number, but for completions instead.

**IO issued**
		The number of read/write requests issued, and how many of them were
		short.

**IO latencies**
		The distribution of I/O completion latencies. This is the time from when
		I/O leaves fio and when it gets completed.  The numbers follow the same
		pattern as the I/O depths, meaning that 2=1.6% means that 1.6% of the
		I/O completed within 2 msecs, 20=12.8% means that 12.8% of the I/O took
		more than 10 msecs, but less than (or equal to) 20 msecs.

After each client has been listed, the group statistics are printed. They
will look like this::

    Run status group 0 (all jobs):
       READ: io=64MB, aggrb=22178, minb=11355, maxb=11814, mint=2840msec, maxt=2955msec
      WRITE: io=64MB, aggrb=1302, minb=666, maxb=669, mint=50093msec, maxt=50320msec

For each data direction, it prints:

**io**
		Number of megabytes I/O performed.
**aggrb**
		Aggregate bandwidth of threads in this group.
**minb**
		The minimum average bandwidth a thread saw.
**maxb**
		The maximum average bandwidth a thread saw.
**mint**
		The smallest runtime of the threads in that group.
**maxt**
		The longest runtime of the threads in that group.

And finally, the disk statistics are printed. They will look like this::

  Disk stats (read/write):
    sda: ios=16398/16511, merge=30/162, ticks=6853/819634, in_queue=826487, util=100.00%

Each value is printed for both reads and writes, with reads first. The
numbers denote:

**ios**
		Number of I/Os performed by all groups.
**merge**
		Number of merges I/O the I/O scheduler.
**ticks**
		Number of ticks we kept the disk busy.
**io_queue**
		Total time spent in the disk queue.
**util**
		The disk utilization. A value of 100% means we kept the disk
		busy constantly, 50% would be a disk idling half of the time.

It is also possible to get fio to dump the current output while it is running,
without terminating the job. To do that, send fio the **USR1** signal.  You can
also get regularly timed dumps by using the :option:`--status-interval`
parameter, or by creating a file in :file:`/tmp` named
:file:`fio-dump-status`. If fio sees this file, it will unlink it and dump the
current output status.


Terse output
------------

For scripted usage where you typically want to generate tables or graphs of the
results, fio can output the results in a semicolon separated format.  The format
is one long line of values, such as::

    2;card0;0;0;7139336;121836;60004;1;10109;27.932460;116.933948;220;126861;3495.446807;1085.368601;226;126864;3523.635629;1089.012448;24063;99944;50.275485%;59818.274627;5540.657370;7155060;122104;60004;1;8338;29.086342;117.839068;388;128077;5032.488518;1234.785715;391;128085;5061.839412;1236.909129;23436;100928;50.287926%;59964.832030;5644.844189;14.595833%;19.394167%;123706;0;7313;0.1%;0.1%;0.1%;0.1%;0.1%;0.1%;100.0%;0.00%;0.00%;0.00%;0.00%;0.00%;0.00%;0.01%;0.02%;0.05%;0.16%;6.04%;40.40%;52.68%;0.64%;0.01%;0.00%;0.01%;0.00%;0.00%;0.00%;0.00%;0.00%
    A description of this job goes here.

The job description (if provided) follows on a second line.

To enable terse output, use the :option:`--minimal` command line option. The
first value is the version of the terse output format. If the output has to be
changed for some reason, this number will be incremented by 1 to signify that
change.

Split up, the format is as follows:

    ::

        terse version, fio version, jobname, groupid, error

    READ status::

        Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
        Submission latency: min, max, mean, stdev (usec)
        Completion latency: min, max, mean, stdev (usec)
        Completion latency percentiles: 20 fields (see below)
        Total latency: min, max, mean, stdev (usec)
        Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev

    WRITE status:

    ::

        Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
        Submission latency: min, max, mean, stdev (usec)
        Completion latency: min, max, mean, stdev(usec)
        Completion latency percentiles: 20 fields (see below)
        Total latency: min, max, mean, stdev (usec)
        Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev

    CPU usage::

        user, system, context switches, major faults, minor faults

    I/O depths::

        <=1, 2, 4, 8, 16, 32, >=64

    I/O latencies microseconds::

        <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000

    I/O latencies milliseconds::

        <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000

    Disk utilization::

        Disk name, Read ios, write ios,
        Read merges, write merges,
        Read ticks, write ticks,
        Time spent in queue, disk utilization percentage

    Additional Info (dependent on continue_on_error, default off)::

        total # errors, first error code

    Additional Info (dependent on description being set)::

        Text description

Completion latency percentiles can be a grouping of up to 20 sets, so for the
terse output fio writes all of them. Each field will look like this::

	1.00%=6112

which is the Xth percentile, and the `usec` latency associated with it.

For disk utilization, all disks used by fio are shown. So for each disk there
will be a disk utilization section.


Trace file format
-----------------

There are two trace file format that you can encounter. The older (v1) format is
unsupported since version 1.20-rc3 (March 2008). It will still be described
below in case that you get an old trace and want to understand it.

In any case the trace is a simple text file with a single action per line.


Trace file format v1
~~~~~~~~~~~~~~~~~~~~

Each line represents a single I/O action in the following format::

	rw, offset, length

where `rw=0/1` for read/write, and the offset and length entries being in bytes.

This format is not supported in fio versions => 1.20-rc3.


Trace file format v2
~~~~~~~~~~~~~~~~~~~~

The second version of the trace file format was added in fio version 1.17.  It
allows to access more then one file per trace and has a bigger set of possible
file actions.

The first line of the trace file has to be::

    fio version 2 iolog

Following this can be lines in two different formats, which are described below.

The file management format::

    filename action

The filename is given as an absolute path. The action can be one of these:

**add**
		Add the given filename to the trace.
**open**
		Open the file with the given filename. The filename has to have
		been added with the **add** action before.
**close**
		Close the file with the given filename. The file has to have been
		opened before.


The file I/O action format::

    filename action offset length

The `filename` is given as an absolute path, and has to have been added and
opened before it can be used with this format. The `offset` and `length` are
given in bytes. The `action` can be one of these:

**wait**
	   Wait for `offset` microseconds. Everything below 100 is discarded.
	   The time is relative to the previous `wait` statement.
**read**
	   Read `length` bytes beginning from `offset`.
**write**
	   Write `length` bytes beginning from `offset`.
**sync**
	   :manpage:`fsync(2)` the file.
**datasync**
	   :manpage:`fdatasync(2)` the file.
**trim**
	   Trim the given file from the given `offset` for `length` bytes.

CPU idleness profiling
----------------------

In some cases, we want to understand CPU overhead in a test. For example, we
test patches for the specific goodness of whether they reduce CPU usage.
Fio implements a balloon approach to create a thread per CPU that runs at idle
priority, meaning that it only runs when nobody else needs the cpu.
By measuring the amount of work completed by the thread, idleness of each CPU
can be derived accordingly.

An unit work is defined as touching a full page of unsigned characters. Mean and
standard deviation of time to complete an unit work is reported in "unit work"
section. Options can be chosen to report detailed percpu idleness or overall
system idleness by aggregating percpu stats.


Verification and triggers
-------------------------

Fio is usually run in one of two ways, when data verification is done. The first
is a normal write job of some sort with verify enabled. When the write phase has
completed, fio switches to reads and verifies everything it wrote. The second
model is running just the write phase, and then later on running the same job
(but with reads instead of writes) to repeat the same I/O patterns and verify
the contents. Both of these methods depend on the write phase being completed,
as fio otherwise has no idea how much data was written.

With verification triggers, fio supports dumping the current write state to
local files. Then a subsequent read verify workload can load this state and know
exactly where to stop. This is useful for testing cases where power is cut to a
server in a managed fashion, for instance.

A verification trigger consists of two things:

1) Storing the write state of each job.
2) Executing a trigger command.

The write state is relatively small, on the order of hundreds of bytes to single
kilobytes. It contains information on the number of completions done, the last X
completions, etc.

A trigger is invoked either through creation ('touch') of a specified file in
the system, or through a timeout setting. If fio is run with
:option:`--trigger-file` = :file:`/tmp/trigger-file`, then it will continually
check for the existence of :file:`/tmp/trigger-file`. When it sees this file, it
will fire off the trigger (thus saving state, and executing the trigger
command).

For client/server runs, there's both a local and remote trigger. If fio is
running as a server backend, it will send the job states back to the client for
safe storage, then execute the remote trigger, if specified. If a local trigger
is specified, the server will still send back the write state, but the client
will then execute the trigger.

Verification trigger example
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Lets say we want to run a powercut test on the remote machine 'server'.  Our
write workload is in :file:`write-test.fio`. We want to cut power to 'server' at
some point during the run, and we'll run this test from the safety or our local
machine, 'localbox'. On the server, we'll start the fio backend normally::

	server# fio --server

and on the client, we'll fire off the workload::

	localbox$ fio --client=server --trigger-file=/tmp/my-trigger --trigger-remote="bash -c \"echo b > /proc/sysrq-triger\""

We set :file:`/tmp/my-trigger` as the trigger file, and we tell fio to execute::

	echo b > /proc/sysrq-trigger

on the server once it has received the trigger and sent us the write state. This
will work, but it's not **really** cutting power to the server, it's merely
abruptly rebooting it. If we have a remote way of cutting power to the server
through IPMI or similar, we could do that through a local trigger command
instead. Lets assume we have a script that does IPMI reboot of a given hostname,
ipmi-reboot. On localbox, we could then have run fio with a local trigger
instead::

	localbox$ fio --client=server --trigger-file=/tmp/my-trigger --trigger="ipmi-reboot server"

For this case, fio would wait for the server to send us the write state, then
execute ``ipmi-reboot server`` when that happened.

Loading verify state
~~~~~~~~~~~~~~~~~~~~

To load store write state, read verification job file must contain the
:option:`verify_state_load` option. If that is set, fio will load the previously
stored state. For a local fio run this is done by loading the files directly,
and on a client/server run, the server backend will ask the client to send the
files over and load them from there.


Log File Formats
----------------

Fio supports a variety of log file formats, for logging latencies, bandwidth,
and IOPS. The logs share a common format, which looks like this:

    *time* (`msec`), *value*, *data direction*, *offset*

Time for the log entry is always in milliseconds. The *value* logged depends
on the type of log, it will be one of the following:

    **Latency log**
		Value is latency in usecs
    **Bandwidth log**
		Value is in KiB/sec
    **IOPS log**
		Value is IOPS

*Data direction* is one of the following:

	**0**
		I/O is a READ
	**1**
		I/O is a WRITE
	**2**
		I/O is a TRIM

The *offset* is the offset, in bytes, from the start of the file, for that
particular I/O. The logging of the offset can be toggled with
:option:`log_offset`.

If windowed logging is enabled through :option:`log_avg_msec` then fio doesn't
log individual I/Os. Instead of logs the average values over the specified period
of time. Since 'data direction' and 'offset' are per-I/O values, they aren't
applicable if windowed logging is enabled. If windowed logging is enabled and
:option:`log_max_value` is set, then fio logs maximum values in that window
instead of averages.


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

Normally fio is invoked as a stand-alone application on the machine where the
I/O workload should be generated. However, the frontend and backend of fio can
be run separately. Ie the fio server can generate an I/O 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 :option:`--remote-config` ::

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

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

If you have many servers (example: 100 VMs/containers), you can input a pathname
of a file containing host IPs/names as the parameter value for the
:option:`--client` option.  For example, here is an example :file:`host.list`
file containing 2 hostnames::

	host1.your.dns.domain
	host2.your.dns.domain

The fio command would then be::

    fio --client=host.list <job file(s)>

In this mode, you cannot input server-specific parameters or job files -- all
servers receive the same job file.

In order to let ``fio --client`` runs use a shared filesystem from multiple
hosts, ``fio --client`` now prepends the IP address of the server to the
filename.  For example, if fio is using directory :file:`/mnt/nfs/fio` and is
writing filename :file:`fileio.tmp`, with a :option:`--client` `hostfile`
containing two hostnames ``h1`` and ``h2`` with IP addresses 192.168.10.120 and
192.168.10.121, then fio will create two files::

	/mnt/nfs/fio/192.168.10.120.fileio.tmp
	/mnt/nfs/fio/192.168.10.121.fileio.tmp
