randread Random reads
rw,readwrite Sequential mixed reads and writes
randrw Random mixed reads and writes
+ trimwrite Mixed trims and writes. Blocks will be
+ trimmed first, then written to.
For the mixed io types, the default is to split them 50/50.
For certain types of io the result may still be skewed a bit,
randrepeat=bool For random IO workloads, seed the generator in a predictable
way so that results are repeatable across repetitions.
+ Defaults to true.
randseed=int Seed the random number generators based on this seed value, to
be able to control what sequence of output is being generated.
necessary environment variables to work with
hdfs/libhdfs properly.
+ mtd Read, write and erase an MTD character device
+ (e.g., /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.
+
external Prefix to specify loading an external
IO engine object file. Append the engine
filename, eg ioengine=external:/tmp/foo.o
after fio has filled the queue of 16 requests, it will let
the depth drain down to 4 before starting to fill it again.
+io_submit_mode=str This option controls how fio submits the IO to
+ the IO engine. The default is 'inline', which means that the
+ fio job threads submit and reap IO directly. If set to
+ 'offload', the job threads will offload IO submission to a
+ dedicated pool of IO threads. This requires some coordination
+ and thus has a bit of extra overhead, especially for lower
+ queue depth IO 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 IO gets back up on the device side (the
+ coordinated omission problem).
+
direct=bool If value is true, use non-buffered io. This is usually
O_DIRECT. Note that ZFS on Solaris doesn't support direct io.
On Windows the synchronous ioengines don't support direct io.
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
that will be done. The actual job contents are not
executed.
+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.
+
+allow_mounted_write=bool If this isn't set, fio will abort jobs that
+ are destructive (eg 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. Default: false.
+
pre_read=bool If this is given, files will be pre-read into memory before
starting the given IO operation. This will also clear
the 'invalidate' flag, since it is pointless to pre-read
verified for workloads that write data.
See also verify_pattern.
+ 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 'verify_pattern'
+ is verified.
+
null Only pretend to verify. Useful for testing
internals with ioengine=null, not for much
else.
independent fio invocations. Unfortuantely this also breaks
the strict time ordering between multiple device accesses.
+replay_align=int Force alignment of IO offsets and lengths in a trace
+ to this power of 2 value.
+
+replay_scale=int Scale sector offsets down by this factor when
+ replaying traces.
+
+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.
+
write_bw_log=str If given, write a bandwidth log of the jobs in this job
file. Can be used to store data of the bandwidth of the
jobs in their lifetime. The included fio_generate_plots
graphs. See write_lat_log for behaviour of given
filename. For this option, the suffix is _bw.x.log, where
x is the index of the job (1..N, where N is the number of
- jobs).
+ jobs). If 'per_job_logs' is false, then the filename will not
+ include the job index.
write_lat_log=str Same as write_bw_log, except that this option stores io
submission, completion, and total latencies instead. If no
The actual log names will be foo_slat.x.log, foo_clat.x.log,
and foo_lat.x.log, where x is the index of the job (1..N,
where N is the number of jobs). This helps fio_generate_plot
- fine the logs automatically.
+ fine the logs automatically. If 'per_job_logs' is false, then
+ the filename will not include the job index.
+
write_iops_log=str Same as write_bw_log, but writes IOPS. If no filename is
given with this option, the default filename of
"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.
+ is given, fio will still append the type of log. If
+ 'per_job_logs' is false, then the filename will not include
+ the job index.
log_avg_msec=int By default, fio will log an entry in the iops, latency,
or bw log for every IO that completes. When writing to the
1 : allocate space immidietly inside defragment event,
and free right after event
+[mtd] skip_bad=bool Skip operations against known bad blocks.
6.0 Interpreting the output
terse version, fio version, jobname, groupid, error
READ status:
Total IO (KB), bandwidth (KB/sec), IOPS, runtime (msec)
- Submission latency: min, max, mean, deviation (usec)
- Completion latency: min, max, mean, deviation (usec)
+ 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, deviation (usec)
- Bw (KB/s): min, max, aggregate percentage of total, mean, deviation
+ Total latency: min, max, mean, stdev (usec)
+ Bw (KB/s): min, max, aggregate percentage of total, mean, stdev
WRITE status:
Total IO (KB), bandwidth (KB/sec), IOPS, runtime (msec)
- Submission latency: min, max, mean, deviation (usec)
- Completion latency: min, max, mean, deviation (usec)
+ 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, deviation (usec)
- Bw (KB/s): min, max, aggregate percentage of total, mean, deviation
+ Total latency: min, max, mean, stdev (usec)
+ Bw (KB/s): min, max, aggregate percentage of total, mean, stdev
CPU usage: user, system, context switches, major faults, minor faults
IO depths: <=1, 2, 4, 8, 16, 32, >=64
IO latencies microseconds: <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000
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 fsync() the file