1fio(1)                      General Commands Manual                     fio(1)
2
3
4

NAME

6       fio - flexible I/O tester
7

SYNOPSIS

9       fio [options] [jobfile]...
10

DESCRIPTION

12       fio  is a tool that will spawn a number of threads or processes doing a
13       particular type of I/O action as specified by the  user.   The  typical
14       use  of  fio  is to write a job file matching the I/O load one wants to
15       simulate.
16

OPTIONS

18       --debug=type
19              Enable verbose tracing type of various fio actions. May be `all'
20              for  all  types  or  individual types separated by a comma (e.g.
21              `--debug=file,mem'  will  enable  file  and  memory  debugging).
22              `help' will list all available tracing options.
23
24       --parse-only
25              Parse options only, don't start any I/O.
26
27       --merge-blktrace-only
28              Merge blktraces only, don't start any I/O.
29
30       --output=filename
31              Write output to filename.
32
33       --output-format=format
34              Set  the  reporting  format  to  `normal',  `terse',  `json', or
35              `json+'. Multiple formats can be selected, separate by a  comma.
36              `terse' is a CSV based format. `json+' is like `json', except it
37              adds a full dump of the latency buckets.
38
39       --bandwidth-log
40              Generate aggregate bandwidth logs.
41
42       --minimal
43              Print statistics in a terse, semicolon-delimited format.
44
45       --append-terse
46              Print statistics in selected mode AND terse, semicolon-delimited
47              format.   Deprecated, use --output-format instead to select mul‐
48              tiple formats.
49
50       --terse-version=version
51              Set terse version output format (default `3', or `2', `4', `5').
52
53       --version
54              Print version information and exit.
55
56       --help Print a summary of the command line options and exit.
57
58       --cpuclock-test
59              Perform test and validation of internal CPU clock.
60
61       --crctest=[test]
62              Test the speed of the built-in checksumming functions. If no ar‐
63              gument  is given, all of them are tested. Alternatively, a comma
64              separated list can be passed, in which case the given  ones  are
65              tested.
66
67       --cmdhelp=command
68              Print  help  information  for command. May be `all' for all com‐
69              mands.
70
71       --enghelp=[ioengine[,command]]
72              List all commands defined by ioengine, or print help for command
73              defined by ioengine. If no ioengine is given, list all available
74              ioengines.
75
76       --showcmd=jobfile
77              Convert jobfile to a set of command-line options.
78
79       --readonly
80              Turn on safety read-only checks, preventing  writes  and  trims.
81              The  --readonly option is an extra safety guard to prevent users
82              from accidentally starting a write or trim workload when that is
83              not  desired.  Fio  will  only  modify  the device under test if
84              `rw=write/randwrite/rw/randrw/trim/randtrim/trimwrite' is given.
85              This safety net can be used as an extra precaution.
86
87       --eta=when
88              Specifies  when  real-time  ETA estimate should be printed. when
89              may be `always', `never' or `auto'. `auto' is  the  default,  it
90              prints  ETA when requested if the output is a TTY. `always' dis‐
91              regards the output type, and prints ETA when requested.  `never'
92              never prints ETA.
93
94       --eta-interval=time
95              By default, fio requests client ETA status roughly every second.
96              With this option, the interval is configurable.  Fio  imposes  a
97              minimum  allowed  time  to avoid flooding the console, less than
98              250 msec is not supported.
99
100       --eta-newline=time
101              Force a new line for every time period passed. When the unit  is
102              omitted, the value is interpreted in seconds.
103
104       --status-interval=time
105              Force  a  full status dump of cumulative (from job start) values
106              at time intervals. This option  does  *not*  provide  per-period
107              measurements.  So values such as bandwidth are running averages.
108              When the time unit is omitted, time is interpreted  in  seconds.
109              Note  that  using  this  option with `--output-format=json' will
110              yield output that technically isn't valid json, since the output
111              will  be  collated  sets of valid json. It will need to be split
112              into valid sets of json after the run.
113
114       --section=name
115              Only run specified section name in job file.  Multiple  sections
116              can  be  specified.   The --section option allows one to combine
117              related jobs into one file.  E.g.  one  job  file  could  define
118              light,  moderate,  and  heavy sections. Tell fio to run only the
119              "heavy" section by giving `--section=heavy' command line option.
120              One  can  also specify the "write" operations in one section and
121              "verify" operation in another section. The --section option only
122              applies to job sections. The reserved *global* section is always
123              parsed and used.
124
125       --alloc-size=kb
126              Allocate additional internal smalloc pools of size  kb  in  KiB.
127              The  --alloc-size  option  increases shared memory set aside for
128              use by fio.  If running large jobs with randommap  enabled,  fio
129              can  run  out  of  memory.  Smalloc is an internal allocator for
130              shared structures from a fixed size memory pool and can grow  to
131              16  pools. The pool size defaults to 16MiB.  NOTE: While running
132              `.fio_smalloc.*' backing store files are visible in `/tmp'.
133
134       --warnings-fatal
135              All fio parser warnings are fatal, causing fio to exit  with  an
136              error.
137
138       --max-jobs=nr
139              Set  the  maximum  number of threads/processes to support to nr.
140              NOTE: On Linux, it may be necessary to increase the  shared-mem‐
141              ory  limit  (`/proc/sys/kernel/shmmax')  if fio runs into errors
142              while creating jobs.
143
144       --server=args
145              Start a backend server, with args specifying what to listen  to.
146              See CLIENT/SERVER section.
147
148       --daemonize=pidfile
149              Background  a  fio  server, writing the pid to the given pidfile
150              file.
151
152       --client=hostname
153              Instead of running the jobs locally, send and run  them  on  the
154              given hostname or set of hostnames. See CLIENT/SERVER section.
155
156       --remote-config=file
157              Tell fio server to load this local file.
158
159       --idle-prof=option
160              Report CPU idleness. option is one of the following:
161
162                     calibrate
163                            Run unit work calibration only and exit.
164
165                     system Show aggregate system idleness and unit work.
166
167                     percpu As system but also show per CPU idleness.
168
169       --inflate-log=log
170              Inflate and output compressed log.
171
172       --trigger-file=file
173              Execute trigger command when file exists.
174
175       --trigger-timeout=time
176              Execute trigger at this time.
177
178       --trigger=command
179              Set this command as local trigger.
180
181       --trigger-remote=command
182              Set this command as remote trigger.
183
184       --aux-path=path
185              Use  the  directory  specified by path for generated state files
186              instead of the current working directory.
187

JOB FILE FORMAT

189       Any parameters following the options will be assumed to be  job  files,
190       unless  they  match  a  job  file  parameter. Multiple job files can be
191       listed and each job file will be regarded as a separate group. Fio will
192       stonewall execution between each group.
193
194       Fio accepts one or more job files describing what it is supposed to do.
195       The job file format is the classic ini file, where the  names  enclosed
196       in  [] brackets define the job name. You are free to use any ASCII name
197       you want, except *global* which has special meaning. Following the  job
198       name  is  a sequence of zero or more parameters, one per line, that de‐
199       fine the behavior of the job. If the first character in a line is a ';'
200       or a '#', the entire line is discarded as a comment.
201
202       A *global* section sets defaults for the jobs described in that file. A
203       job may override a *global* section parameter, and a job file may  even
204       have several *global* sections if so desired. A job is only affected by
205       a *global* section residing above it.
206
207       The --cmdhelp option also lists all options. If used  with  an  command
208       argument, --cmdhelp will detail the given command.
209
210       See  the  `examples/'  directory  for  inspiration  on how to write job
211       files. Note the copyright and license requirements currently  apply  to
212       `examples/' files.
213
214       Note that the maximum length of a line in the job file is 8192 bytes.
215

JOB FILE PARAMETERS

217       Some parameters take an option of a given type, such as an integer or a
218       string. Anywhere a numeric value is required, an arithmetic  expression
219       may be used, provided it is surrounded by parentheses. Supported opera‐
220       tors are:
221
222              addition (+)
223
224              subtraction (-)
225
226              multiplication (*)
227
228              division (/)
229
230              modulus (%)
231
232              exponentiation (^)
233
234       For time values in expressions, units are microseconds by default. This
235       is  different  than for time values not in expressions (not enclosed in
236       parentheses).
237

PARAMETER TYPES

239       The following parameter types are used.
240
241       str    String. A sequence of alphanumeric characters.
242
243       time   Integer with possible time suffix. Without a unit value  is  in‐
244              terpreted  as seconds unless otherwise specified. Accepts a suf‐
245              fix of 'd' for days, 'h' for hours, 'm'  for  minutes,  's'  for
246              seconds,  'ms' (or 'msec') for milliseconds and 'us' (or 'usec')
247              for microseconds. For example, use 10m for 10 minutes.
248
249       int    Integer. A whole number value, which may contain an integer pre‐
250              fix and an integer suffix.
251
252                     [*integer prefix*] **number** [*integer suffix*]
253
254              The  optional  *integer prefix* specifies the number's base. The
255              default is decimal. *0x* specifies hexadecimal.
256
257              The optional *integer suffix* specifies the number's units,  and
258              includes an optional unit prefix and an optional unit. For quan‐
259              tities of data, the default unit is  bytes.  For  quantities  of
260              time, the default unit is seconds unless otherwise specified.
261
262              With  `kb_base=1000',  fio  follows  international standards for
263              unit prefixes. To specify power-of-10 decimal values defined  in
264              the International System of Units (SI):
265
266                     K means kilo (K) or 1000
267                     M means mega (M) or 1000**2
268                     G means giga (G) or 1000**3
269                     T means tera (T) or 1000**4
270                     P means peta (P) or 1000**5
271
272              To specify power-of-2 binary values defined in IEC 80000-13:
273
274                     Ki means kibi (Ki) or 1024
275                     Mi means mebi (Mi) or 1024**2
276                     Gi means gibi (Gi) or 1024**3
277                     Ti means tebi (Ti) or 1024**4
278                     Pi means pebi (Pi) or 1024**5
279
280              For Zone Block Device Mode:
281
282                     z means Zone
283              With  `kb_base=1024'  (the default), the unit prefixes are oppo‐
284              site from those specified in the SI and IEC  80000-13  standards
285              to provide compatibility with old scripts. For example, 4k means
286              4096.
287
288              For quantities of data, an optional unit of 'B' may be  included
289              (e.g., 'kB' is the same as 'k').
290
291              The  *integer  suffix*  is  not  case sensitive (e.g., m/mi mean
292              mebi/mega, not milli). 'b' and 'B' both mean byte, not bit.
293
294              Examples with `kb_base=1000':
295
296                     4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
297                     1 MiB: 1048576, 1m, 1024k
298                     1 MB: 1000000, 1mi, 1000ki
299                     1 TiB: 1073741824, 1t, 1024m, 1048576k
300                     1 TB: 1000000000, 1ti, 1000mi, 1000000ki
301
302              Examples with `kb_base=1024' (default):
303
304                     4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
305                     1 MiB: 1048576, 1m, 1024k
306                     1 MB: 1000000, 1mi, 1000ki
307                     1 TiB: 1073741824, 1t, 1024m, 1048576k
308                     1 TB: 1000000000, 1ti, 1000mi, 1000000ki
309
310              To specify times (units are not case sensitive):
311
312                     D means days
313                     H means hours
314                     M mean minutes
315                     s or sec means seconds (default)
316                     ms or msec means milliseconds
317                     us or usec means microseconds
318
319              `z' suffix specifies that the value is measured in zones.  Value
320              is recalculated once block device's zone size becomes known.
321
322              If  the option accepts an upper and lower range, use a colon ':'
323              or minus '-' to separate such values. See irange parameter type.
324              If the lower value specified happens to be larger than the upper
325              value the two values are swapped.
326
327       bool   Boolean. Usually parsed as an integer, however only defined  for
328              true and false (1 and 0).
329
330       irange Integer  range with suffix. Allows value range to be given, such
331              as 1024-4096. A colon may also be used as  the  separator,  e.g.
332              1k:4k.  If  the  option  allows  two sets of ranges, they can be
333              specified with a ',' or '/' delimiter:  1k-4k/8k-32k.  Also  see
334              int parameter type.
335
336       float_list
337              A list of floating point numbers, separated by a ':' character.
338

JOB PARAMETERS

340       With  the  above in mind, here follows the complete list of fio job pa‐
341       rameters.
342
343   Units
344       kb_base=int
345              Select the interpretation of unit prefixes in input parameters.
346
347                     1000   Inputs comply with IEC 80000-13 and  the  Interna‐
348                            tional System of Units (SI). Use:
349
350                            - power-of-2 values with IEC prefixes (e.g., KiB)
351                            - power-of-10 values with SI prefixes (e.g., kB)
352
353                     1024   Compatibility  mode  (default).  To avoid breaking
354                            old scripts:
355
356                            - power-of-2 values with SI prefixes
357                            - power-of-10 values with IEC prefixes
358
359              See bs for more details on input parameters.
360
361              Outputs always use correct prefixes. Most outputs  include  both
362              side-by-side, like:
363
364                     bw=2383.3kB/s (2327.4KiB/s)
365
366              If  only  one value is reported, then kb_base selects the one to
367              use:
368
369                     1000 -- SI prefixes
370                     1024 -- IEC prefixes
371
372       unit_base=int
373              Base unit for reporting. Allowed values are:
374
375                     0      Use auto-detection (default).
376
377                     8      Byte based.
378
379                     1      Bit based.
380
381   Job description
382       name=str
383              ASCII name of the job. This may be used  to  override  the  name
384              printed  by fio for this job. Otherwise the job name is used. On
385              the command line this parameter has the special purpose of  also
386              signaling the start of a new job.
387
388       description=str
389              Text  description  of  the  job. Doesn't do anything except dump
390              this text description when this job is run. It's not parsed.
391
392       loops=int
393              Run the specified number of iterations of this job. Used to  re‐
394              peat the same workload a given number of times. Defaults to 1.
395
396       numjobs=int
397              Create the specified number of clones of this job. Each clone of
398              job is spawned as an independent thread or process. May be  used
399              to  setup  a  larger  number of threads/processes doing the same
400              thing. Each thread is reported separately; to see statistics for
401              all  clones  as a whole, use group_reporting in conjunction with
402              new_group.  See --max-jobs. Default: 1.
403
404   Time related parameters
405       runtime=time
406              Tell fio to terminate processing after the specified  period  of
407              time. It can be quite hard to determine for how long a specified
408              job will run, so this parameter is handy to cap the  total  run‐
409              time to a given time. When the unit is omitted, the value is in‐
410              terpreted in seconds.
411
412       time_based
413              If set, fio will run for the duration of the  runtime  specified
414              even if the file(s) are completely read or written. It will sim‐
415              ply loop over the same workload as many times as the runtime al‐
416              lows.
417
418       startdelay=irange(int)
419              Delay  the start of job for the specified amount of time. Can be
420              a single value or a range. When given as a  range,  each  thread
421              will  choose a value randomly from within the range. Value is in
422              seconds if a unit is omitted.
423
424       ramp_time=time
425              If set, fio will run the specified workload for this  amount  of
426              time  before logging any performance numbers. Useful for letting
427              performance settle before logging results, thus  minimizing  the
428              runtime  required for stable results. Note that the ramp_time is
429              considered lead in time for a job, thus it will increase the to‐
430              tal  runtime  if a special timeout or runtime is specified. When
431              the unit is omitted, the value is given in seconds.
432
433       clocksource=str
434              Use the given clocksource as the base of timing.  The  supported
435              options are:
436
437                     gettimeofday
438                            gettimeofday(2)
439
440                     clock_gettime
441                            clock_gettime(2)
442
443                     cpu    Internal CPU clock source
444
445              cpu  is  the  preferred  clocksource if it is reliable, as it is
446              very fast (and fio is heavy on time calls). Fio  will  automati‐
447              cally  use this clocksource if it's supported and considered re‐
448              liable on the system it is running  on,  unless  another  clock‐
449              source is specifically set. For x86/x86-64 CPUs, this means sup‐
450              porting TSC Invariant.
451
452       gtod_reduce=bool
453              Enable  all  of  the  gettimeofday(2)  reducing  options   (dis‐
454              able_clat,  disable_slat,  disable_bw_measurement)  plus  reduce
455              precision of the timeout somewhat to really shrink the  gettime‐
456              ofday(2)  call count. With this option enabled, we only do about
457              0.4% of the gettimeofday(2) calls we would have done if all time
458              keeping was enabled.
459
460       gtod_cpu=int
461              Sometimes  it's cheaper to dedicate a single thread of execution
462              to just getting the current time. Fio (and  databases,  for  in‐
463              stance)  are  very intensive on gettimeofday(2) calls. With this
464              option, you can set one CPU aside for doing nothing but  logging
465              current  time  to  a  shared  memory  location.  Then  the other
466              threads/processes that run I/O workloads  need  only  copy  that
467              segment,  instead  of entering the kernel with a gettimeofday(2)
468              call. The CPU set aside for doing these time calls will  be  ex‐
469              cluded  from other uses. Fio will manually clear it from the CPU
470              mask of other jobs.
471
472   Target file/device
473       directory=str
474              Prefix filenames with this directory. Used to place files  in  a
475              different location than `./'. You can specify a number of direc‐
476              tories by separating the names with a ':' character.  These  di‐
477              rectories  will  be  assigned  equally distributed to job clones
478              created by numjobs as long as they  are  using  generated  file‐
479              names.  If  specific  filename(s) are set fio will use the first
480              listed directory, and thereby  matching  the  filename  semantic
481              (which  generates  a  file  for each clone if not specified, but
482              lets all clones use the same file if set).
483
484              See the filename option for information on  how  to  escape  ':'
485              characters within the directory path itself.
486
487              Note:  To  control the directory fio will use for internal state
488              files use --aux-path.
489
490       filename=str
491              Fio normally makes up a filename based on the job  name,  thread
492              number,  and  file  number (see filename_format). If you want to
493              share files between threads in a job or several jobs with  fixed
494              file  paths, specify a filename for each of them to override the
495              default. If the ioengine is file based, you can specify a number
496              of  files  by  separating  the names with a ':' colon. So if you
497              wanted a job to open `/dev/sda' and `/dev/sdb' as the two  work‐
498              ing files, you would use `filename=/dev/sda:/dev/sdb'. This also
499              means that whenever this option is  specified,  nrfiles  is  ig‐
500              nored.  The  size of regular files specified by this option will
501              be size divided by number of files unless an  explicit  size  is
502              specified by filesize.
503
504              Each colon in the wanted path must be escaped with a '\' charac‐
505              ter. For instance, if the path is `/dev/dsk/foo@3,0:c' then  you
506              would  use  `filename=/dev/dsk/foo@3,0\:c'  and  if  the path is
507              `F:\filename' then you would use `filename=F\:\filename'.
508
509              On Windows, disk devices are  accessed  as  `\\.\PhysicalDrive0'
510              for  the  first device, `\\.\PhysicalDrive1' for the second etc.
511              Note: Windows and FreeBSD prevent write access to areas  of  the
512              disk containing in-use data (e.g. filesystems).
513
514              The  filename  `-'  is a reserved name, meaning *stdin* or *std‐
515              out*. Which of the two depends on the read/write direction set.
516
517       filename_format=str
518              If sharing multiple files between jobs, it is usually  necessary
519              to  have fio generate the exact names that you want. By default,
520              fio will name a file based on the default file format specifica‐
521              tion  of  `jobname.jobnumber.filenumber'. With this option, that
522              can be customized. Fio will recognize and replace the  following
523              keywords in this string:
524
525                     $jobname
526                            The name of the worker thread or process.
527
528                     $clientuid
529                            IP  of  the  fio  process when using client/server
530                            mode.
531
532                     $jobnum
533                            The incremental number of  the  worker  thread  or
534                            process.
535
536                     $filenum
537                            The incremental number of the file for that worker
538                            thread or process.
539
540              To have dependent jobs share a set of files, this option can  be
541              set  to  have fio generate filenames that are shared between the
542              two. For instance, if `testfiles.$filenum'  is  specified,  file
543              number 4 for any job will be named `testfiles.4'. The default of
544              `$jobname.$jobnum.$filenum' will be  used  if  no  other  format
545              specifier is given.
546
547              If you specify a path then the directories will be created up to
548              the main directory for the file.  So for example if you  specify
549              `a/b/c/$jobnum`  then  the directories a/b/c will be created be‐
550              fore the file setup part of the job.  If you  specify  directory
551              then  the  path will be relative that directory, otherwise it is
552              treated as the absolute path.
553
554       unique_filename=bool
555              To avoid collisions between networked clients, fio  defaults  to
556              prefixing  any  generated filenames (with a directory specified)
557              with the source of the client connecting. To disable this behav‐
558              ior, set this option to 0.
559
560       opendir=str
561              Recursively open any files below directory str.
562
563       lockfile=str
564              Fio  defaults  to  not  locking  any files before it does I/O to
565              them. If a file or file descriptor is shared, fio can  serialize
566              I/O  to  that  file  to  make the end result consistent. This is
567              usual for emulating real workloads that share  files.  The  lock
568              modes are:
569
570                     none   No locking. The default.
571
572                     exclusive
573                            Only  one  thread or process may do I/O at a time,
574                            excluding all others.
575
576                     readwrite
577                            Read-write locking on the file. Many  readers  may
578                            access  the  file at the same time, but writes get
579                            exclusive access.
580
581       nrfiles=int
582              Number of files to use for this job. Defaults to 1. The size  of
583              files will be size divided by this unless explicit size is spec‐
584              ified by filesize. Files are created for each thread separately,
585              and  each  file  will  have a file number within its name by de‐
586              fault, as explained in filename section.
587
588       openfiles=int
589              Number of files to keep open at the same time. Defaults  to  the
590              same as nrfiles, can be set smaller to limit the number simulta‐
591              neous opens.
592
593       file_service_type=str
594              Defines how fio decides which file from a job to  service  next.
595              The following types are defined:
596
597                     random Choose a file at random.
598
599                     roundrobin
600                            Round  robin  over  opened  files. This is the de‐
601                            fault.
602
603                     sequential
604                            Finish one file before moving on to the next. Mul‐
605                            tiple  files  can still be open depending on open‐
606                            files.
607
608                     zipf   Use a Zipf distribution to decide what file to ac‐
609                            cess.
610
611                     pareto Use  a  Pareto distribution to decide what file to
612                            access.
613
614                     normal Use a Gaussian  (normal)  distribution  to  decide
615                            what file to access.
616
617                     gauss  Alias for normal.
618
619              For  random,  roundrobin,  and  sequential, a postfix can be ap‐
620              pended to tell fio how many I/Os to issue before switching to  a
621              new  file.  For example, specifying `file_service_type=random:8'
622              would cause fio to issue 8 I/Os before selecting a new  file  at
623              random.  For  the  non-uniform  distributions,  a floating point
624              postfix can be  given  to  influence  how  the  distribution  is
625              skewed.  See  random_distribution  for a description of how that
626              would work.
627
628       ioscheduler=str
629              Attempt to switch the device hosting the file to  the  specified
630              I/O scheduler before running. If the file is a pipe, a character
631              device file or if device hosting the file could  not  be  deter‐
632              mined, this option is ignored.
633
634       create_serialize=bool
635              If  true,  serialize the file creation for the jobs. This may be
636              handy to avoid interleaving of data files, which may greatly de‐
637              pend on the filesystem used and even the number of processors in
638              the system. Default: true.
639
640       create_fsync=bool
641              fsync(2) the data file after creation. This is the default.
642
643       create_on_open=bool
644              If true, don't pre-create files but allow the  job's  open()  to
645              create  a  file when it's time to do I/O. Default: false -- pre-
646              create all necessary files when the job starts.
647
648       create_only=bool
649              If true, fio will only run the setup phase of the job. If  files
650              need  to  be laid out or updated on disk, only that will be done
651              -- the actual job contents are not executed. Default: false.
652
653       allow_file_create=bool
654              If true, fio is permitted to create files as part of  its  work‐
655              load.  If  this  option is false, then fio will error out if the
656              files it needs to use don't already exist. Default: true.
657
658       allow_mounted_write=bool
659              If this isn't set, fio will  abort  jobs  that  are  destructive
660              (e.g. that write) to what appears to be a mounted device or par‐
661              tition. This should help catch creating  inadvertently  destruc‐
662              tive tests, not realizing that the test will destroy data on the
663              mounted file system. Note that some platforms don't allow  writ‐
664              ing against a mounted device regardless of this option. Default:
665              false.
666
667       pre_read=bool
668              If this is given, files will  be  pre-read  into  memory  before
669              starting  the  given I/O operation. This will also clear the in‐
670              validate flag, since it is pointless to pre-read and  then  drop
671              the  cache.  This  will only work for I/O engines that are seek-
672              able, since they allow you to read the same data multiple times.
673              Thus it will not work on non-seekable I/O engines (e.g. network,
674              splice). Default: false.
675
676       unlink=bool
677              Unlink the job files when done. Not  the  default,  as  repeated
678              runs  of  that job would then waste time recreating the file set
679              again and again. Default: false.
680
681       unlink_each_loop=bool
682              Unlink job files after each iteration or loop. Default: false.
683
684       zonemode=str
685              Accepted values are:
686
687                     none   The zonerange, zonesize zonecapacity and  zoneskip
688                            parameters are ignored.
689
690                     strided
691                            I/O  happens in a single zone until zonesize bytes
692                            have been transferred.  After that number of bytes
693                            has  been  transferred processing of the next zone
694                            starts. The zonecapacity parameter is ignored.
695
696                     zbd    Zoned block device mode. I/O happens  sequentially
697                            in  each  zone,  even  if  random I/O has been se‐
698                            lected. Random I/O happens across  all  zones  in‐
699                            stead  of being restricted to a single zone.  Trim
700                            is handled using a zone reset operation. Trim only
701                            considers  non-empty sequential write required and
702                            sequential write preferred zones.
703
704       zonerange=int
705              For zonemode=strided, this is the size of  a  single  zone.  See
706              also zonesize and zoneskip.
707
708              For zonemode=zbd, this parameter is ignored.
709
710       zonesize=int
711              For  zonemode=strided,  this  is the number of bytes to transfer
712              before skipping zoneskip bytes. If  this  parameter  is  smaller
713              than  zonerange then only a fraction of each zone with zonerange
714              bytes will be accessed.  If this parameter is larger  than  zon‐
715              erange  then  each  zone  will be accessed multiple times before
716              skipping to the next zone.
717
718              For zonemode=zbd, this is the size of a single  zone.  The  zon‐
719              erange  parameter is ignored in this mode. For a job accessing a
720              zoned block device, the specified zonesize must be 0 or equal to
721              the  device  zone  size. For a regular block device or file, the
722              specified zonesize must be at least 512B.
723
724       zonecapacity=int
725              For zonemode=zbd, this defines the capacity of  a  single  zone,
726              which  is  the  accessible area starting from the zone start ad‐
727              dress. This parameter only applies when  using  zonemode=zbd  in
728              combination with regular block devices.  If not specified it de‐
729              faults to the zone size. If the target device is a  zoned  block
730              device,  the  zone capacity is obtained from the device informa‐
731              tion and this option is ignored.
732
733       zoneskip=int[z]
734              For zonemode=strided, the number of bytes to skip after zonesize
735              bytes of data have been transferred.
736
737              For  zonemode=zbd,  the zonesize aligned number of bytes to skip
738              once a zone is fully written (write workloads)  or  all  written
739              data in the zone have been read (read workloads). This parameter
740              is valid only for sequential workloads and  ignored  for  random
741              workloads. For read workloads, see also read_beyond_wp.
742
743
744       read_beyond_wp=bool
745              This parameter applies to zonemode=zbd only.
746
747              Zoned  block  devices are block devices that consist of multiple
748              zones. Each zone has a type, e.g. conventional or sequential.  A
749              conventional  zone can be written at any offset that is a multi‐
750              ple of the block size. Sequential zones must be written  sequen‐
751              tially.  The  position at which a write must occur is called the
752              write pointer. A zoned block device can be either  host  managed
753              or  host  aware.  For  host managed devices the host must ensure
754              that writes happen sequentially. Fio recognizes host managed de‐
755              vices  and  serializes  writes to sequential zones for these de‐
756              vices.
757
758              If a read occurs in a sequential zone beyond the  write  pointer
759              then the zoned block device will complete the read without read‐
760              ing any data from the storage medium. Since such reads  lead  to
761              unrealistically  high  bandwidth and IOPS numbers fio only reads
762              beyond the write pointer if explicitly told to do  so.  Default:
763              false.
764
765       max_open_zones=int
766              When  running  a  random  write test across an entire drive many
767              more zones will be open than in a typical application  workload.
768              Hence  this  command line option that allows to limit the number
769              of open zones. The number of open zones is defined as the number
770              of  zones to which write commands are issued by all threads/pro‐
771              cesses.
772
773       job_max_open_zones=int
774              Limit on the number of simultaneously opened  zones  per  single
775              thread/process.
776
777       ignore_zone_limits=bool
778              If  this  option  is used, fio will ignore the maximum number of
779              open zones limit of the zoned block device in use, thus allowing
780              the option max_open_zones value to be larger than the device re‐
781              ported limit. Default: false.
782
783       zone_reset_threshold=float
784              A number between zero and one that indicates the ratio of  logi‐
785              cal  blocks  with  data to the total number of logical blocks in
786              the test above which zones should be reset periodically.
787
788       zone_reset_frequency=float
789              A number between zero and one that indicates how  often  a  zone
790              reset  should be issued if the zone reset threshold has been ex‐
791              ceeded. A zone reset is  submitted  after  each  (1  /  zone_re‐
792              set_frequency)  write  requests. This and the previous parameter
793              can be used to simulate garbage collection activity.
794
795
796   I/O type
797       direct=bool
798              If value is true, use non-buffered I/O. This  is  usually  O_DI‐
799              RECT.  Note that OpenBSD and ZFS on Solaris don't support direct
800              I/O. On Windows the synchronous ioengines don't  support  direct
801              I/O. Default: false.
802
803       atomic=bool
804              If  value  is  true,  attempt  to  use atomic direct I/O. Atomic
805              writes are guaranteed to be stable once acknowledged by the  op‐
806              erating system. Only Linux supports O_ATOMIC right now.
807
808       buffered=bool
809              If  value is true, use buffered I/O. This is the opposite of the
810              direct option. Defaults to true.
811
812       readwrite=str, rw=str
813              Type of I/O pattern. Accepted values are:
814
815                     read   Sequential reads.
816
817                     write  Sequential writes.
818
819                     trim   Sequential trims (Linux  block  devices  and  SCSI
820                            character devices only).
821
822                     randread
823                            Random reads.
824
825                     randwrite
826                            Random writes.
827
828                     randtrim
829                            Random trims (Linux block devices and SCSI charac‐
830                            ter devices only).
831
832                     rw,readwrite
833                            Sequential mixed reads and writes.
834
835                     randrw Random mixed reads and writes.
836
837                     trimwrite
838                            Sequential trim+write sequences.  Blocks  will  be
839                            trimmed  first, then the same blocks will be writ‐
840                            ten to.
841
842              Fio defaults to read if the option is  not  specified.  For  the
843              mixed I/O types, the default is to split them 50/50. For certain
844              types of I/O the result may still be skewed  a  bit,  since  the
845              speed may be different.
846
847              It  is  possible to specify the number of I/Os to do before get‐
848              ting a new offset by appending `:<nr>' to the end of the  string
849              given. For a random read, it would look like `rw=randread:8' for
850              passing in an offset modifier with a value of 8. If  the  suffix
851              is  used  with  a  sequential I/O pattern, then the `<nr>' value
852              specified will be added to the generated  offset  for  each  I/O
853              turning  sequential I/O into sequential I/O with holes.  For in‐
854              stance, using `rw=write:4k' will skip 4k for every  write.  Also
855              see the rw_sequencer option.
856
857       rw_sequencer=str
858              If  an  offset  modifier  is  given by appending a number to the
859              `rw=str' line, then this option controls how that  number  modi‐
860              fies the I/O offset being generated. Accepted values are:
861
862                     sequential
863                            Generate sequential offset.
864
865                     identical
866                            Generate the same offset.
867
868              sequential  is  only useful for random I/O, where fio would nor‐
869              mally generate a new random offset for every I/O. If you  append
870              e.g.  8 to randread, you would get a new random offset for every
871              8 I/Os. The result would be a seek for only every  8  I/Os,  in‐
872              stead  of for every I/O. Use `rw=randread:8' to specify that. As
873              sequential I/O is already  sequential,  setting  sequential  for
874              that would not result in any differences. identical behaves in a
875              similar fashion, except it sends the same  offset  8  number  of
876              times before generating a new offset.
877
878       unified_rw_reporting=str
879              Fio  normally  reports statistics on a per data direction basis,
880              meaning that reads, writes, and trims are accounted and reported
881              separately.  This  option determines whether fio reports the re‐
882              sults normally, summed together, or as both  options.   Accepted
883              values are:
884
885              none   Normal statistics reporting.
886
887              mixed  Statistics are summed per data direction and reported to‐
888                     gether.
889
890              both   Statistics are reported normally, followed by  the  mixed
891                     statistics.
892
893              0      Backward-compatible alias for none.
894
895              1      Backward-compatible alias for mixed.
896
897              2      Alias for both.
898
899       randrepeat=bool
900              Seed the random number generator used for random I/O patterns in
901              a predictable way so the pattern is repeatable across runs.  De‐
902              fault: true.
903
904       allrandrepeat=bool
905              Seed  all  random  number generators in a predictable way so re‐
906              sults are repeatable across runs. Default: false.
907
908       randseed=int
909              Seed the random number generators based on this seed  value,  to
910              be  able  to control what sequence of output is being generated.
911              If not set, the random sequence depends on the  randrepeat  set‐
912              ting.
913
914       fallocate=str
915              Whether pre-allocation is performed when laying down files.  Ac‐
916              cepted values are:
917
918                     none   Do not pre-allocate space.
919
920                     native Use a platform's native  pre-allocation  call  but
921                            fall  back to none behavior if it fails/is not im‐
922                            plemented.
923
924                     posix  Pre-allocate via posix_fallocate(3).
925
926                     keep   Pre-allocate   via    fallocate(2)    with    FAL‐
927                            LOC_FL_KEEP_SIZE set.
928
929                     truncate
930                            Extend  file to final size using ftruncate|(2) in‐
931                            stead of allocating.
932
933                     0      Backward-compatible alias for none.
934
935                     1      Backward-compatible alias for posix.
936
937              May not be available on all supported platforms.  keep  is  only
938              available  on  Linux. If using ZFS on Solaris this cannot be set
939              to posix because ZFS doesn't  support  pre-allocation.  Default:
940              native  if any pre-allocation methods except truncate are avail‐
941              able, none if not.
942
943              Note that using truncate on Windows will  interact  surprisingly
944              with  non-sequential write patterns. When writing to a file that
945              has been extended by setting the end-of-file  information,  Win‐
946              dows  will backfill the unwritten portion of the file up to that
947              offset with zeroes before issuing the new write. This means that
948              a  single  small write to the end of an extended file will stall
949              until the entire file has been filled with zeroes.
950
951       fadvise_hint=str
952              Use posix_fadvise(2) or posix_madvise(2) to  advise  the  kernel
953              what I/O patterns are likely to be issued. Accepted values are:
954
955                     0      Backwards compatible hint for "no hint".
956
957                     1      Backwards  compatible  hint  for  "advise with fio
958                            workload type". This uses FADV_RANDOM for a random
959                            workload,  and  FADV_SEQUENTIAL  for  a sequential
960                            workload.
961
962                     sequential
963                            Advise using FADV_SEQUENTIAL.
964
965                     random Advise using FADV_RANDOM.
966
967       write_hint=str
968              Use fcntl(2) to advise the kernel what life time to expect  from
969              a  write.  Only supported on Linux, as of version 4.13. Accepted
970              values are:
971
972                     none   No particular life time associated with this file.
973
974                     short  Data written to this file has a short life time.
975
976                     medium Data written to this file has a medium life time.
977
978                     long   Data written to this file has a long life time.
979
980                     extreme
981                            Data written to this file has  a  very  long  life
982                            time.
983
984              The values are all relative to each other, and no absolute mean‐
985              ing should be associated with them.
986
987       offset=int[%|z]
988              Start I/O at the provided offset in the file, given as either  a
989              fixed  size  in bytes, zones or a percentage. If a percentage is
990              given, the generated offset  will  be  aligned  to  the  minimum
991              blocksize  or to the value of offset_align if provided. Data be‐
992              fore the given offset will not be touched. This effectively caps
993              the file size at `real_size - offset'. Can be combined with size
994              to constrain the start and end range of  the  I/O  workload.   A
995              percentage  can  be specified by a number between 1 and 100 fol‐
996              lowed by '%', for example, `offset=20%' to specify 20%.  In  ZBD
997              mode, value can be set as number of zones using 'z'.
998
999       offset_align=int
1000              If  set  to  non-zero value, the byte offset generated by a per‐
1001              centage offset is aligned upwards to this value. Defaults  to  0
1002              meaning that a percentage offset is aligned to the minimum block
1003              size.
1004
1005       offset_increment=int[%|z]
1006              If this is provided, then the real offset becomes `offset + off‐
1007              set_increment  *  thread_number',  where  the thread number is a
1008              counter that starts at 0 and is  incremented  for  each  sub-job
1009              (i.e.  when  numjobs option is specified). This option is useful
1010              if there are several jobs which are intended  to  operate  on  a
1011              file  in  parallel  disjoint segments, with even spacing between
1012              the starting points. Percentages can be used  for  this  option.
1013              If  a  percentage is given, the generated offset will be aligned
1014              to the minimum blocksize or to the value of offset_align if pro‐
1015              vided.In  ZBD  mode,  value  can be set as number of zones using
1016              'z'.
1017
1018       number_ios=int
1019              Fio will normally perform I/Os until it has exhausted  the  size
1020              of  the  region set by size, or if it exhaust the allocated time
1021              (or hits an error condition). With this setting, the  range/size
1022              can  be set independently of the number of I/Os to perform. When
1023              fio reaches this number, it will exit normally and  report  sta‐
1024              tus.  Note that this does not extend the amount of I/O that will
1025              be done, it will only stop fio if this condition is  met  before
1026              other end-of-job criteria.
1027
1028       fsync=int
1029              If  writing  to a file, issue an fsync(2) (or its equivalent) of
1030              the dirty data for every number of blocks given. For example, if
1031              you  give  32 as a parameter, fio will sync the file after every
1032              32 writes issued. If fio is using non-buffered I/O, we  may  not
1033              sync  the  file.  The exception is the sg I/O engine, which syn‐
1034              chronizes the disk cache anyway. Defaults to 0, which means  fio
1035              does  not  periodically  issue  and wait for a sync to complete.
1036              Also see end_fsync and fsync_on_close.
1037
1038       fdatasync=int
1039              Like fsync but uses fdatasync(2) to only sync data and not meta‐
1040              data  blocks. In Windows, DragonFlyBSD or OSX there is no fdata‐
1041              sync(2) so this falls back to using fsync(2).   Defaults  to  0,
1042              which means fio does not periodically issue and wait for a data-
1043              only sync to complete.
1044
1045       write_barrier=int
1046              Make every N-th write a barrier write.
1047
1048       sync_file_range=str:int
1049              Use sync_file_range(2) for every int number of write operations.
1050              Fio will track range of writes that have happened since the last
1051              sync_file_range(2) call. str can currently be one or more of:
1052
1053                     wait_before
1054                            SYNC_FILE_RANGE_WAIT_BEFORE
1055
1056                     write  SYNC_FILE_RANGE_WRITE
1057
1058                     wait_after
1059                            SYNC_FILE_RANGE_WRITE_AFTER
1060
1061              So if you do  `sync_file_range=wait_before,write:8',  fio  would
1062              use  `SYNC_FILE_RANGE_WAIT_BEFORE  |  SYNC_FILE_RANGE_WRITE' for
1063              every 8 writes. Also see the sync_file_range(2) man  page.  This
1064              option is Linux specific.
1065
1066       overwrite=bool
1067              If  true,  writes to a file will always overwrite existing data.
1068              If the file doesn't already exist, it will be created before the
1069              write  phase  begins. If the file exists and is large enough for
1070              the specified write phase, nothing will be done. Default: false.
1071
1072       end_fsync=bool
1073              If true, fsync(2) file contents when  a  write  stage  has  com‐
1074              pleted.  Default: false.
1075
1076       fsync_on_close=bool
1077              If  true,  fio will fsync(2) a dirty file on close. This differs
1078              from end_fsync in that it will happen on every file  close,  not
1079              just at the end of the job. Default: false.
1080
1081       rwmixread=int
1082              Percentage  of  a  mixed workload that should be reads. Default:
1083              50.
1084
1085       rwmixwrite=int
1086              Percentage of a mixed workload that should be  writes.  If  both
1087              rwmixread  and  rwmixwrite is given and the values do not add up
1088              to 100%, the latter of the two will  be  used  to  override  the
1089              first.  This  may interfere with a given rate setting, if fio is
1090              asked to limit reads or writes to a certain rate. If that is the
1091              case, then the distribution may be skewed. Default: 50.
1092
1093       random_distribution=str:float[:float][,str:float][,str:float]
1094              By  default,  fio will use a completely uniform random distribu‐
1095              tion when asked to perform random I/O. Sometimes it is useful to
1096              skew the distribution in specific ways, ensuring that some parts
1097              of the data is more hot than others.  fio includes the following
1098              distribution models:
1099
1100                     random Uniform random distribution
1101
1102                     zipf   Zipf distribution
1103
1104                     pareto Pareto distribution
1105
1106                     normal Normal (Gaussian) distribution
1107
1108                     zoned  Zoned random distribution zoned_abs Zoned absolute
1109                            random distribution
1110
1111              When using a zipf or pareto distribution, an input value is also
1112              needed to define the access pattern. For zipf, this is the `Zipf
1113              theta'.  For pareto, it's the `Pareto  power'.  Fio  includes  a
1114              test  program,  fio-genzipf, that can be used visualize what the
1115              given input values will yield in terms  of  hit  rates.  If  you
1116              wanted  to  use  zipf with a `theta' of 1.2, you would use `ran‐
1117              dom_distribution=zipf:1.2' as the option. If a non-uniform model
1118              is  used, fio will disable use of the random map. For the normal
1119              distribution, a normal (Gaussian) deviation  is  supplied  as  a
1120              value between 0 and 100.
1121
1122              The  second, optional float is allowed for pareto, zipf and nor‐
1123              mal distributions. It allows to set base of distribution in non-
1124              default  place,  giving more control over most probable outcome.
1125              This value is in range [0-1] which maps  linearly  to  range  of
1126              possible  random  values.   Defaults  are: random for pareto and
1127              zipf, and 0.5 for normal.  If you wanted  to  use  zipf  with  a
1128              `theta` of 1.2 centered on 1/4 of allowed value range, you would
1129              use `random_distribution=zipf:1.2:0.25`.
1130
1131              For a zoned distribution, fio supports specifying percentages of
1132              I/O access that should fall within what range of the file or de‐
1133              vice. For example, given a criteria of:
1134
1135                     60% of accesses should be to the first 10%
1136                     30% of accesses should be to the next 20%
1137                     8% of accesses should be to the next 30%
1138                     2% of accesses should be to the next 40%
1139
1140              we can define that through zoning of the  random  accesses.  For
1141              the above example, the user would do:
1142
1143                     random_distribution=zoned:60/10:30/20:8/30:2/40
1144
1145              A  zoned_abs  distribution  works  exactly like thezoned, except
1146              that it takes absolute sizes. For example, let's say you  wanted
1147              to define access according to the following criteria:
1148
1149                     60% of accesses should be to the first 20G
1150                     30% of accesses should be to the next 100G
1151                     10% of accesses should be to the next 500G
1152
1153              we can define an absolute zoning distribution with:
1154
1155                     random_distribution=zoned:60/10:30/20:8/30:2/40
1156
1157              For  both  zoned  and zoned_abs, fio supports defining up to 256
1158              separate zones.
1159
1160              Similarly to how bssplit works for setting ranges  and  percent‐
1161              ages of block sizes. Like bssplit, it's possible to specify sep‐
1162              arate zones for reads, writes, and trims. If  just  one  set  is
1163              given, it'll apply to all of them.
1164
1165       percentage_random=int[,int][,int]
1166              For  a  random workload, set how big a percentage should be ran‐
1167              dom. This defaults to 100%, in which case the workload is  fully
1168              random. It can be set from anywhere from 0 to 100. Setting it to
1169              0 would make the workload fully sequential. Any setting  in  be‐
1170              tween  will result in a random mix of sequential and random I/O,
1171              at the given percentages. Comma-separated values may  be  speci‐
1172              fied for reads, writes, and trims as described in blocksize.
1173
1174       norandommap
1175              Normally  fio will cover every block of the file when doing ran‐
1176              dom I/O. If this option is given, fio will just get a new random
1177              offset without looking at past I/O history. This means that some
1178              blocks may not be read or written, and that some blocks  may  be
1179              read/written  more than once. If this option is used with verify
1180              and multiple blocksizes (via bsrange), only  intact  blocks  are
1181              verified,  i.e., partially-overwritten blocks are ignored.  With
1182              an async I/O engine and an I/O depth > 1, it is possible for the
1183              same  block  to be overwritten, which can cause verification er‐
1184              rors.  Either do not use norandommap in this case, or  also  use
1185              the lfsr random generator.
1186
1187       softrandommap=bool
1188              See  norandommap.  If fio runs with the random block map enabled
1189              and it fails to allocate the map, if this option is set it  will
1190              continue  without a random block map. As coverage will not be as
1191              complete as with random maps, this option  is  disabled  by  de‐
1192              fault.
1193
1194       random_generator=str
1195              Fio  supports  the  following engines for generating I/O offsets
1196              for random I/O:
1197
1198                     tausworthe
1199                            Strong 2^88 cycle random number generator.
1200
1201                     lfsr   Linear feedback shift register generator.
1202
1203                     tausworthe64
1204                            Strong 64-bit 2^258 cycle random number generator.
1205
1206              tausworthe is a strong random number generator, but it  requires
1207              tracking  on  the side if we want to ensure that blocks are only
1208              read or written once. lfsr guarantees that we never generate the
1209              same offset twice, and it's also less computationally expensive.
1210              It's not a true random generator, however, though for  I/O  pur‐
1211              poses  it's  typically  good enough. lfsr only works with single
1212              block sizes, not with workloads that use multiple  block  sizes.
1213              If  used with such a workload, fio may read or write some blocks
1214              multiple times. The default value is tausworthe, unless the  re‐
1215              quired  space exceeds 2^32 blocks. If it does, then tausworthe64
1216              is selected automatically.
1217
1218   Block size
1219       blocksize=int[,int][,int], bs=int[,int][,int]
1220              The block size in bytes used for I/O  units.  Default:  4096.  A
1221              single  value  applies  to reads, writes, and trims. Comma-sepa‐
1222              rated values may be specified for reads, writes,  and  trims.  A
1223              value not terminated in a comma applies to subsequent types. Ex‐
1224              amples:
1225
1226                     bs=256k        means 256k for reads, writes and trims.
1227                     bs=8k,32k      means 8k for reads,  32k  for  writes  and
1228                     trims.
1229                     bs=8k,32k,      means  8k  for reads, 32k for writes, and
1230                     default for trims.
1231                     bs=,8k         means default for reads, 8k for writes and
1232                     trims.
1233                     bs=,8k,         means  default  for reads, 8k for writes,
1234                     and default for trims.
1235
1236       blocksize_range=irange[,irange][,irange],
1237       bsrange=irange[,irange][,irange]
1238              A  range  of  block sizes in bytes for I/O units. The issued I/O
1239              unit will always be a  multiple  of  the  minimum  size,  unless
1240              blocksize_unaligned is set.  Comma-separated ranges may be spec‐
1241              ified for reads, writes, and trims as  described  in  blocksize.
1242              Example:
1243
1244                     bsrange=1k-4k,2k-8k
1245
1246       bssplit=str[,str][,str]
1247              Sometimes you want even finer grained control of the block sizes
1248              issued, not just an even split between them. This option  allows
1249              you  to  weight various block sizes, so that you are able to de‐
1250              fine a specific amount of block sizes  issued.  The  format  for
1251              this option is:
1252
1253                     bssplit=blocksize/percentage:blocksize/percentage
1254
1255              for  as  many  block sizes as needed. So if you want to define a
1256              workload that has 50% 64k blocks, 10% 4k  blocks,  and  40%  32k
1257              blocks, you would write:
1258
1259                     bssplit=4k/10:64k/50:32k/40
1260
1261              Ordering  does  not matter. If the percentage is left blank, fio
1262              will fill in the remaining values evenly. So  a  bssplit  option
1263              like this one:
1264
1265                     bssplit=4k/50:1k/:32k/
1266
1267              would  have  50% 4k ios, and 25% 1k and 32k ios. The percentages
1268              always add up to 100, if bssplit is given a range that  adds  up
1269              to more, it will error out.
1270
1271              Comma-separated  values  may be specified for reads, writes, and
1272              trims as described in blocksize.
1273
1274              If you want a workload that has 50% 2k reads and 50%  4k  reads,
1275              while having 90% 4k writes and 10% 8k writes, you would specify:
1276
1277                     bssplit=2k/50:4k/50,4k/90:8k/10
1278
1279              Fio  supports  defining up to 64 different weights for each data
1280              direction.
1281
1282       blocksize_unaligned, bs_unaligned
1283              If set, fio will issue I/O units with  any  size  within  block‐
1284              size_range,  not  just multiples of the minimum size. This typi‐
1285              cally won't work with direct I/O, as that normally requires sec‐
1286              tor alignment.
1287
1288       bs_is_seq_rand=bool
1289              If this option is set, fio will use the normal read,write block‐
1290              size settings as sequential,random blocksize  settings  instead.
1291              Any  random read or write will use the WRITE blocksize settings,
1292              and any sequential read or write will  use  the  READ  blocksize
1293              settings.
1294
1295       blockalign=int[,int][,int], ba=int[,int][,int]
1296              Boundary  to  which  fio  will  align random I/O units. Default:
1297              blocksize. Minimum alignment is typically 512b for using  direct
1298              I/O,  though it usually depends on the hardware block size. This
1299              option is mutually exclusive with using a random map for  files,
1300              so  it  will turn off that option. Comma-separated values may be
1301              specified for reads, writes, and trims as  described  in  block‐
1302              size.
1303
1304   Buffers and memory
1305       zero_buffers
1306              Initialize  buffers  with  all zeros. Default: fill buffers with
1307              random data.
1308
1309       refill_buffers
1310              If this option is given, fio will refill the I/O buffers on  ev‐
1311              ery  submit. The default is to only fill it at init time and re‐
1312              use that data. Only makes sense if zero_buffers isn't specified,
1313              naturally.  If  data  verification is enabled, refill_buffers is
1314              also automatically enabled.
1315
1316       scramble_buffers=bool
1317              If refill_buffers is too costly and the  target  is  using  data
1318              deduplication, then setting this option will slightly modify the
1319              I/O buffer contents to defeat normal de-dupe attempts.  This  is
1320              not enough to defeat more clever block compression attempts, but
1321              it will stop naive dedupe of blocks. Default: true.
1322
1323       buffer_compress_percentage=int
1324              If this is set, then fio will attempt to provide I/O buffer con‐
1325              tent  (on  WRITEs)  that  compresses to the specified level. Fio
1326              does this by providing a mix of random data  followed  by  fixed
1327              pattern  data. The fixed pattern is either zeros, or the pattern
1328              specified by buffer_pattern. If  the  buffer_pattern  option  is
1329              used, it might skew the compression ratio slightly. Setting buf‐
1330              fer_compress_percentage to a value other than 100 will also  en‐
1331              able refill_buffers in order to reduce the likelihood that adja‐
1332              cent blocks are so similar that they over compress when seen to‐
1333              gether.  See  buffer_compress_chunk  for  how  to set a finer or
1334              coarser granularity of the random/fixed data  regions.  Defaults
1335              to  unset  i.e.,  buffer data will not adhere to any compression
1336              level.
1337
1338       buffer_compress_chunk=int
1339              This setting allows fio to manage how big the random/fixed  data
1340              region  is  when  using  buffer_compress_percentage.  When  buf‐
1341              fer_compress_chunk is set to some non-zero  value  smaller  than
1342              the  block size, fio can repeat the random/fixed region through‐
1343              out the I/O buffer at the specified interval (which particularly
1344              useful  when bigger block sizes are used for a job). When set to
1345              0, fio will use a chunk size that matches the block size result‐
1346              ing  in  a single random/fixed region within the I/O buffer. De‐
1347              faults to 512. When the unit is omitted,  the  value  is  inter‐
1348              preted in bytes.
1349
1350       buffer_pattern=str
1351              If  set, fio will fill the I/O buffers with this pattern or with
1352              the contents of a file. If not set, the contents of I/O  buffers
1353              are defined by the other options related to buffer contents. The
1354              setting can be any pattern of bytes, and can be prefixed with 0x
1355              for  hex  values. It may also be a string, where the string must
1356              then be wrapped with "". Or it may also be a filename, where the
1357              filename  must  be  wrapped  with  ''  in which case the file is
1358              opened and read. Note that not all the  file  contents  will  be
1359              read  if that would cause the buffers to overflow. So, for exam‐
1360              ple:
1361
1362                     buffer_pattern='filename'
1363                     or:
1364                     buffer_pattern="abcd"
1365                     or:
1366                     buffer_pattern=-12
1367                     or:
1368                     buffer_pattern=0xdeadface
1369
1370              Also you can combine everything together in any order:
1371
1372                     buffer_pattern=0xdeadface"abcd"-12'filename'
1373
1374       dedupe_percentage=int
1375              If set, fio will generate this percentage of  identical  buffers
1376              when  writing.  These  buffers  will be naturally dedupable. The
1377              contents of the buffers depend on what other buffer  compression
1378              settings  have  been  set.  It's possible to have the individual
1379              buffers either fully compressible, or not at all -- this  option
1380              only  controls  the distribution of unique buffers. Setting this
1381              option will also enable refill_buffers to prevent  every  buffer
1382              being identical.
1383
1384       dedupe_mode=str
1385              If dedupe_percentage is given, then this option controls how fio
1386              generates the dedupe buffers.
1387
1388                     repeat
1389
1390                            Generate  dedupe  buffers  by  repeating  previous
1391                            writes
1392
1393                     working_set
1394
1395                            Generate dedupe buffers from working set
1396
1397              repeat  is the default option for fio. Dedupe buffers are gener‐
1398              ated by repeating previous unique write.
1399
1400              working_set is a more  realistic  workload.   With  working_set,
1401              dedupe_working_set_percentage  should  be provided.  Given that,
1402              fio will use the initial unique write  buffers  as  its  working
1403              set.  Upon deciding to dedupe, fio will randomly choose a buffer
1404              from the working set.  Note that by using working_set the dedupe
1405              percentage  will  converge to the desired over time while repeat
1406              maintains the desired percentage throughout the job.
1407
1408       dedupe_working_set_percentage=int
1409              If dedupe_mode is set to working_set,  then  this  controls  the
1410              percentage of size of the file or device used as the buffers fio
1411              will choose to generate the dedupe buffers from
1412
1413              Note that size needs to be explicitly provided and only  1  file
1414              per job is supported
1415
1416       invalidate=bool
1417              Invalidate  the  buffer/page cache parts of the files to be used
1418              prior to starting I/O if the platform and file type support  it.
1419              Defaults  to  true.   This  will  be ignored if pre_read is also
1420              specified for the same job.
1421
1422       sync=str
1423              Whether, and what type, of synchronous I/O to  use  for  writes.
1424              The allowed values are:
1425
1426                     none   Do not use synchronous IO, the default.
1427
1428                     0      Same as none.
1429
1430                     sync   Use  synchronous  file IO. For the majority of I/O
1431                            engines, this means using O_SYNC.
1432
1433                     1      Same as sync.
1434
1435                     dsync  Use synchronous data IO. For the majority  of  I/O
1436                            engines, this means using O_DSYNC.
1437
1438       iomem=str, mem=str
1439              Fio  can use various types of memory as the I/O unit buffer. The
1440              allowed values are:
1441
1442                     malloc Use memory from malloc(3) as the buffers.  Default
1443                            memory type.
1444
1445                     shm    Use   shared  memory  as  the  buffers.  Allocated
1446                            through shmget(2).
1447
1448                     shmhuge
1449                            Same as shm, but use huge pages as backing.
1450
1451                     mmap   Use mmap(2) to allocate  buffers.  May  either  be
1452                            anonymous memory, or can be file backed if a file‐
1453                            name is given after  the  option.  The  format  is
1454                            `mem=mmap:/path/to/file'.
1455
1456                     mmaphuge
1457                            Use  a memory mapped huge file as the buffer back‐
1458                            ing. Append filename after mmaphuge, ala `mem=mma‐
1459                            phuge:/hugetlbfs/file'.
1460
1461                     mmapshared
1462                            Same as mmap, but use a MMAP_SHARED mapping.
1463
1464                     cudamalloc
1465                            Use  GPU  memory as the buffers for GPUDirect RDMA
1466                            benchmark.  The ioengine must be rdma.
1467
1468              The area allocated is a function of the maximum allowed bs  size
1469              for  the  job,  multiplied by the I/O depth given. Note that for
1470              shmhuge and mmaphuge to work, the system  must  have  free  huge
1471              pages  allocated.  This can normally be checked and set by read‐
1472              ing/writing `/proc/sys/vm/nr_hugepages' on a Linux  system.  Fio
1473              assumes  a huge page is 4MiB in size. So to calculate the number
1474              of huge pages you need for a given job  file,  add  up  the  I/O
1475              depth of all jobs (normally one unless iodepth is used) and mul‐
1476              tiply by the maximum bs set. Then divide that number by the huge
1477              page size. You can see the size of the huge pages in `/proc/mem‐
1478              info'. If no huge pages are allocated by having a non-zero  num‐
1479              ber in `nr_hugepages', using mmaphuge or shmhuge will fail. Also
1480              see hugepage-size.
1481
1482              mmaphuge also needs to have hugetlbfs mounted and the file loca‐
1483              tion  should  point  there.  So  if it's mounted in `/huge', you
1484              would use `mem=mmaphuge:/huge/somefile'.
1485
1486       iomem_align=int, mem_align=int
1487              This indicates the memory alignment of the I/O  memory  buffers.
1488              Note  that  the given alignment is applied to the first I/O unit
1489              buffer, if using iodepth the alignment of the following  buffers
1490              are  given by the bs used. In other words, if using a bs that is
1491              a multiple of the page sized in the system, all buffers will  be
1492              aligned  to  this value. If using a bs that is not page aligned,
1493              the alignment of subsequent I/O memory buffers is the sum of the
1494              iomem_align and bs used.
1495
1496       hugepage-size=int
1497              Defines  the  size of a huge page. Must at least be equal to the
1498              system setting, see `/proc/meminfo'. Defaults  to  4MiB.  Should
1499              probably   always   be   a   multiple  of  megabytes,  so  using
1500              `hugepage-size=Xm' is the preferred way to  set  this  to  avoid
1501              setting a non-pow-2 bad value.
1502
1503       lockmem=int
1504              Pin the specified amount of memory with mlock(2). Can be used to
1505              simulate a smaller amount of memory. The amount specified is per
1506              worker.
1507
1508   I/O size
1509       size=int[%|z]
1510              The total size of file I/O for each thread of this job. Fio will
1511              run until this many bytes has been transferred,  unless  runtime
1512              is  limited  by other options (such as runtime, for instance, or
1513              increased/decreased by io_size).  Fio will divide this size  be‐
1514              tween the available files determined by options such as nrfiles,
1515              filename, unless filesize is specified by the job. If the result
1516              of  division  happens  to  be 0, the size is set to the physical
1517              size of the given files or devices if they exist.  If  this  op‐
1518              tion  is  not specified, fio will use the full size of the given
1519              files or devices. If the files do not exist, size must be given.
1520              It  is  also possible to give size as a percentage between 1 and
1521              100. If `size=20%' is given, fio will use 20% of the  full  size
1522              of the given files or devices. In ZBD mode, size can be given in
1523              units of number of zones using 'z'. Can be combined with  offset
1524              to  constrain  the  start  and  end  range that I/O will be done
1525              within.
1526
1527       io_size=int[%|z], io_limit=int[%|z]
1528              Normally fio operates within the region set by size, which means
1529              that  the size option sets both the region and size of I/O to be
1530              performed. Sometimes that is not what you want.  With  this  op‐
1531              tion,  it  is possible to define just the amount of I/O that fio
1532              should do. For instance, if size is set to 20GiB and io_size  is
1533              set  to  5GiB,  fio  will perform I/O within the first 20GiB but
1534              exit when 5GiB have been done. The opposite is also possible  --
1535              if  size  is set to 20GiB, and io_size is set to 40GiB, then fio
1536              will do 40GiB of I/O within the 0..20GiB region.  Value  can  be
1537              set  as percentage: io_size=N%.  In this case io_size multiplies
1538              size= value. In ZBD mode, value can also be  set  as  number  of
1539              zones using 'z'.
1540
1541       filesize=irange(int)
1542              Individual  file  sizes.  May be a range, in which case fio will
1543              select sizes for files at random within the given range. If  not
1544              given, each created file is the same size. This option overrides
1545              size in terms of file size, i.e. size becomes merely the default
1546              for  io_size (and has no effect it all if io_size is set explic‐
1547              itly).
1548
1549       file_append=bool
1550              Perform I/O after the end of the file. Normally fio will operate
1551              within  the size of a file. If this option is set, then fio will
1552              append to the file instead. This has identical behavior to  set‐
1553              ting  offset  to  the  size of a file. This option is ignored on
1554              non-regular files.
1555
1556       fill_device=bool, fill_fs=bool
1557              Sets size to something really large and  waits  for  ENOSPC  (no
1558              space  left  on  device)  or EDQUOT (disk quota exceeded) as the
1559              terminating condition. Only makes sense with  sequential  write.
1560              For  a  read workload, the mount point will be filled first then
1561              I/O started on the result.
1562
1563   I/O engine
1564       ioengine=str
1565              Defines how the job issues I/O to the file. The following  types
1566              are defined:
1567
1568                     sync   Basic read(2) or write(2) I/O. lseek(2) is used to
1569                            position the I/O location.  See fsync  and  fdata‐
1570                            sync for syncing write I/Os.
1571
1572                     psync  Basic  pread(2)  or  pwrite(2) I/O. Default on all
1573                            supported operating systems except for Windows.
1574
1575                     vsync  Basic readv(2)  or  writev(2)  I/O.  Will  emulate
1576                            queuing  by coalescing adjacent I/Os into a single
1577                            submission.
1578
1579                     pvsync Basic preadv(2) or pwritev(2) I/O.
1580
1581                     pvsync2
1582                            Basic preadv2(2) or pwritev2(2) I/O.
1583
1584                     libaio Linux native asynchronous I/O. Note that Linux may
1585                            only support queued behavior with non-buffered I/O
1586                            (set `direct=1' or `buffered=0').  This engine de‐
1587                            fines engine specific options.
1588
1589                     posixaio
1590                            POSIX   asynchronous  I/O  using  aio_read(3)  and
1591                            aio_write(3).
1592
1593                     solarisaio
1594                            Solaris native asynchronous I/O.
1595
1596                     windowsaio
1597                            Windows native asynchronous I/O. Default  on  Win‐
1598                            dows.
1599
1600                     mmap   File is memory mapped with mmap(2) and data copied
1601                            to/from using memcpy(3).
1602
1603                     splice splice(2) is used to transfer  the  data  and  vm‐
1604                            splice(2)  to transfer data from user space to the
1605                            kernel.
1606
1607                     sg     SCSI generic sg v3 I/O. May either be  synchronous
1608                            using  the  SG_IO ioctl, or if the target is an sg
1609                            character device we use read(2) and  write(2)  for
1610                            asynchronous  I/O.  Requires  filename  option  to
1611                            specify either block or  character  devices.  This
1612                            engine supports trim operations. The sg engine in‐
1613                            cludes engine specific options.
1614
1615                     libzbc Read, write, trim  and  ZBC/ZAC  operations  to  a
1616                            zoned  block device using libzbc library. The tar‐
1617                            get can be either an  SG  character  device  or  a
1618                            block device file.
1619
1620                     null   Doesn't  transfer any data, just pretends to. This
1621                            is mainly used to exercise fio itself and for  de‐
1622                            bugging/testing purposes.
1623
1624                     net    Transfer  over  the  network to given `host:port'.
1625                            Depending on  the  protocol  used,  the  hostname,
1626                            port,  listen  and  filename  options  are used to
1627                            specify what sort of connection to make, while the
1628                            protocol  option determines which protocol will be
1629                            used. This engine defines engine specific options.
1630
1631                     netsplice
1632                            Like net, but uses splice(2)  and  vmsplice(2)  to
1633                            map  data  and  send/receive.  This engine defines
1634                            engine specific options.
1635
1636                     cpuio  Doesn't transfer any data, but  burns  CPU  cycles
1637                            according  to  the  cpuload, cpuchunks and cpumode
1638                            options.  A job never finishes unless there is  at
1639                            least one non-cpuio job.
1640
1641                            cpuload=85  will  cause that job to do nothing but
1642                            burn 85% of the CPU.  In case of SMP machines, use
1643                            numjobs=<nr_of_cpu> to  get  desired CPU usage, as
1644                            the cpuload only loads a single CPU at the desired
1645                            rate.
1646
1647                            cpumode=qsort  replace  the  default noop instruc‐
1648                            tions loop by a qsort algorithm  to  consume  more
1649                            energy.
1650
1651                     rdma   The  RDMA I/O engine supports both RDMA memory se‐
1652                            mantics (RDMA_WRITE/RDMA_READ) and channel  seman‐
1653                            tics  (Send/Recv)  for  the  InfiniBand,  RoCE and
1654                            iWARP protocols. This engine defines  engine  spe‐
1655                            cific options.
1656                     falloc I/O engine that does regular fallocate to simulate
1657                            data transfer as fio ioengine.
1658                            DDIR_READ        does   fallocate(,mode   =   FAL‐
1659                            LOC_FL_KEEP_SIZE,).
1660                            DIR_WRITE      does fallocate(,mode = 0).
1661                            DDIR_TRIM        does   fallocate(,mode   =   FAL‐
1662                            LOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE).
1663
1664                     ftruncate
1665                            I/O engine that sends ftruncate(2)  operations  in
1666                            response to write (DDIR_WRITE) events. Each ftrun‐
1667                            cate issued sets the file's size  to  the  current
1668                            block offset. blocksize is ignored.
1669
1670                     e4defrag
1671                            I/O  engine  that  does  regular EXT4_IOC_MOVE_EXT
1672                            ioctls to simulate defragment activity in  request
1673                            to DDIR_WRITE event.
1674
1675                     rados  I/O  engine supporting direct access to Ceph Reli‐
1676                            able Autonomic Distributed  Object  Store  (RADOS)
1677                            via  librados.  This  ioengine defines engine spe‐
1678                            cific options.
1679
1680                     rbd    I/O engine supporting direct access to Ceph  Rados
1681                            Block Devices (RBD) via librbd without the need to
1682                            use the kernel rbd driver. This  ioengine  defines
1683                            engine specific options.
1684
1685                     http   I/O   engine   supporting  GET/PUT  requests  over
1686                            HTTP(S) with libcurl to a WebDAV or  S3  endpoint.
1687                            This ioengine defines engine specific options.
1688
1689                            This  engine only supports direct IO of iodepth=1;
1690                            you need to scale this via numjobs. blocksize  de‐
1691                            fines the size of the objects to be created.
1692
1693                            TRIM is translated to object deletion.
1694
1695                     gfapi  Using  GlusterFS libgfapi sync interface to direct
1696                            access to GlusterFS volumes without having  to  go
1697                            through  FUSE.  This  ioengine defines engine spe‐
1698                            cific options.
1699
1700                     gfapi_async
1701                            Using GlusterFS libgfapi async interface to direct
1702                            access  to  GlusterFS volumes without having to go
1703                            through FUSE. This ioengine  defines  engine  spe‐
1704                            cific options.
1705
1706                     libhdfs
1707                            Read and write through Hadoop (HDFS). The filename
1708                            option is used to specify host,port  of  the  hdfs
1709                            name-node  to connect. This engine interprets off‐
1710                            sets a little differently.  In  HDFS,  files  once
1711                            created  cannot  be  modified so random writes are
1712                            not possible. To imitate this the  libhdfs  engine
1713                            expects  a bunch of small files to be created over
1714                            HDFS and will randomly pick a file from them based
1715                            on  the  offset  generated by fio backend (see the
1716                            example  job  file  to  create  such  files,   use
1717                            `rw=write'  option). Please note, it may be neces‐
1718                            sary to set environment  variables  to  work  with
1719                            HDFS/libhdfs  properly. Each job uses its own con‐
1720                            nection to HDFS.
1721
1722                     mtd    Read, write and  erase  an  MTD  character  device
1723                            (e.g.,   `/dev/mtd0').  Discards  are  treated  as
1724                            erases. Depending on the underlying  device  type,
1725                            the I/O may have to go in a certain pattern, e.g.,
1726                            on NAND, writing sequentially to erase blocks  and
1727                            discarding  before overwriting. The trimwrite mode
1728                            works well for this constraint.
1729
1730                     pmemblk
1731                            Read and write using filesystem DAX to a file on a
1732                            filesystem mounted with DAX on a persistent memory
1733                            device through the PMDK libpmemblk library.
1734
1735                     dev-dax
1736                            Read and write using device DAX  to  a  persistent
1737                            memory device (e.g., /dev/dax0.0) through the PMDK
1738                            libpmem library.
1739
1740                     external
1741                            Prefix to specify loading an external  I/O  engine
1742                            object file. Append the engine filename, e.g. `io‐
1743                            engine=external:/tmp/foo.o'   to   load   ioengine
1744                            `foo.o' in `/tmp'. The path can be either absolute
1745                            or relative. See `engines/skeleton_external.c'  in
1746                            the  fio source for details of writing an external
1747                            I/O engine.
1748
1749                     filecreate
1750                            Simply create the files and do  no  I/O  to  them.
1751                            You still need to set filesize so that all the ac‐
1752                            counting still occurs, but no actual I/O  will  be
1753                            done other than creating the file.
1754
1755                     filestat
1756                            Simply  do  stat()  and do no I/O to the file. You
1757                            need to set  'filesize'  and  'nrfiles',  so  that
1758                            files  will be created.  This engine is to measure
1759                            file lookup and meta data access.
1760
1761                     filedelete
1762                            Simply delete files by unlink() and do no  I/O  to
1763                            the  file.  You  need  to  set 'filesize' and 'nr‐
1764                            files', so that files will be created.   This  en‐
1765                            gine is to measure file delete.
1766
1767                     libpmem
1768                            Read  and  write  using  mmap  I/O  to a file on a
1769                            filesystem mounted with DAX on a persistent memory
1770                            device through the PMDK libpmem library.
1771
1772                     ime_psync
1773                            Synchronous  read  and  write using DDN's Infinite
1774                            Memory Engine (IME). This engine is very basic and
1775                            issues calls to IME whenever an IO is queued.
1776
1777                     ime_psyncv
1778                            Synchronous  read  and  write using DDN's Infinite
1779                            Memory Engine (IME). This engine uses  iovecs  and
1780                            will  try to stack as much IOs as possible (if the
1781                            IOs are "contiguous" and the IO depth is  not  ex‐
1782                            ceeded) before issuing a call to IME.
1783
1784                     ime_aio
1785                            Asynchronous  read  and write using DDN's Infinite
1786                            Memory Engine (IME). This engine will try to stack
1787                            as  much  IOs as possible by creating requests for
1788                            IME.  FIO will then decide when  to  commit  these
1789                            requests.
1790
1791                     libiscsi
1792                            Read and write iscsi lun with libiscsi.
1793
1794                     nbd    Synchronous  read and write a Network Block Device
1795                            (NBD).
1796
1797                     libcufile
1798                            I/O engine supporting libcufile synchronous access
1799                            to  nvidia-fs  and  a  GPUDirect Storage-supported
1800                            filesystem.  This  engine  performs  I/O   without
1801                            transferring  buffers  between  user-space and the
1802                            kernel, unless verify is set or cuda_io is  posix.
1803                            iomem  must  not  be cudamalloc. This ioengine de‐
1804                            fines engine specific options.
1805
1806                     dfs    I/O engine supporting asynchronous read and  write
1807                            operations  to  the  DAOS  File  System  (DFS) via
1808                            libdfs.
1809
1810                     nfs    I/O engine supporting asynchronous read and  write
1811                            operations  to  NFS filesystems from userspace via
1812                            libnfs. This is useful for achieving  higher  con‐
1813                            currency  and thus throughput than is possible via
1814                            kernel NFS.
1815
1816                     exec   Execute 3rd party tools. Could be used to  perform
1817                            monitoring during jobs runtime.
1818
1819   I/O engine specific parameters
1820       In addition, there are some parameters which are only valid when a spe‐
1821       cific ioengine is in use. These are used identically to normal  parame‐
1822       ters,  with  the  caveat  that when used on the command line, they must
1823       come after the ioengine that defines them is selected.
1824
1825       (io_uring,libaio)cmdprio_percentage=int[,int]
1826              Set the percentage of I/O that will be issued with  the  highest
1827              priority.   Default:  0.  A  single  value  applies to reads and
1828              writes. Comma-separated values may be specified  for  reads  and
1829              writes.  For  this  option to be effective, NCQ priority must be
1830              supported and enabled, and `direct=1' option must be  used.  fio
1831              must  also  be run as the root user. Unlike slat/clat/lat stats,
1832              which can be tracked and reported  independently,  per  priority
1833              stats  only  track  and  report a single type of latency. By de‐
1834              fault, completion latency (clat) will be reported,  if  lat_per‐
1835              centiles is set, total latency (lat) will be reported.
1836
1837       (io_uring,libaio)cmdprio_class=int[,int]
1838              Set  the  I/O priority class to use for I/Os that must be issued
1839              with a priority when cmdprio_percentage  or  cmdprio_bssplit  is
1840              set.   If  not specified when cmdprio_percentage or cmdprio_bss‐
1841              plit is set, this defaults to the highest priority class. A sin‐
1842              gle  value  applies  to reads and writes. Comma-separated values
1843              may be specified for reads and writes. See  man  ionice(1).  See
1844              also the prioclass option.
1845
1846       (io_uring,libaio)cmdprio=int[,int]
1847              Set  the  I/O priority value to use for I/Os that must be issued
1848              with a priority when cmdprio_percentage  or  cmdprio_bssplit  is
1849              set.   If  not specified when cmdprio_percentage or cmdprio_bss‐
1850              plit is set, this defaults to 0. Linux limits us to  a  positive
1851              value  between 0 and 7, with 0 being the highest. A single value
1852              applies to reads and  writes.   Comma-separated  values  may  be
1853              specified  for  reads and writes. See man ionice(1). Refer to an
1854              appropriate manpage for other operating systems since the  mean‐
1855              ing of priority may differ. See also the prio option.
1856
1857       (io_uring,libaio)cmdprio_bssplit=str[,str]
1858              To  get  a  finer  control over I/O priority, this option allows
1859              specifying the percentage of IOs that must have a  priority  set
1860              depending  on  the  block  size of the IO. This option is useful
1861              only when used together with the option bssplit, that is, multi‐
1862              ple different block sizes are used for reads and writes.
1863
1864              The  first  accepted  format  for this option is the same as the
1865              format of the bssplit option:
1866
1867                     cmdprio_bssplit=blocksize/percentage:blocksize/percentage
1868
1869              In this case, each entry will use the priority class and  prior‐
1870              ity  level  defined by the options cmdprio_class and cmdprio re‐
1871              spectively.
1872
1873              The second accepted format for this option is:
1874
1875                     cmdprio_bssplit=blocksize/percentage/class/level:block‐
1876                     size/percentage/class/level
1877
1878              In  this  case, the priority class and priority level is defined
1879              inside each entry. In comparison with the first accepted format,
1880              the second accepted format does not restrict all entries to have
1881              the same priority class and priority level.
1882
1883              For both formats, only the read and write  data  directions  are
1884              supported, values for trim IOs are ignored. This option is mutu‐
1885              ally exclusive with the cmdprio_percentage option.
1886
1887       (io_uring)fixedbufs
1888              If fio is asked to do direct IO, then Linux will map  pages  for
1889              each  IO  call, and release them when IO is done. If this option
1890              is set, the pages are pre-mapped  before  IO  is  started.  This
1891              eliminates  the  need  to  map and release for each IO.  This is
1892              more efficient, and reduces the IO latency as well.
1893
1894       (io_uring)hipri
1895              If this option is set, fio will attempt to use polled IO comple‐
1896              tions.  Normal  IO completions generate interrupts to signal the
1897              completion of IO, polled completions do not. Hence they are  re‐
1898              quire  active reaping by the application.  The benefits are more
1899              efficient IO for high IOPS scenarios, and  lower  latencies  for
1900              low queue depth IO.
1901
1902       (io_uring)registerfiles
1903              With this option, fio registers the set of files being used with
1904              the kernel.  This avoids the overhead of managing file counts in
1905              the  kernel,  making  the  submission  and  completion part more
1906              lightweight. Required for the below sqthread_poll option.
1907
1908       (io_uring)sqthread_poll
1909              Normally fio will submit IO by issuing a system call  to  notify
1910              the  kernel of available items in the SQ ring. If this option is
1911              set, the act of submitting IO will be done by a  polling  thread
1912              in  the kernel. This frees up cycles for fio, at the cost of us‐
1913              ing more CPU in the system.
1914
1915       (io_uring)sqthread_poll_cpu
1916              When `sqthread_poll` is set, this option provides a way  to  de‐
1917              fine which CPU should be used for the polling thread.
1918
1919       (libaio)userspace_reap
1920              Normally,  with  the  libaio  engine  in  use,  fio will use the
1921              io_getevents(3) system call to reap newly returned events.  With
1922              this  flag  turned  on,  the AIO ring will be read directly from
1923              user-space to reap events. The reaping mode is only enabled when
1924              polling for a minimum of 0 events (e.g. when `iodepth_batch_com‐
1925              plete=0').
1926
1927       (pvsync2)hipri
1928              Set RWF_HIPRI on I/O, indicating to  the  kernel  that  it's  of
1929              higher priority than normal.
1930
1931       (pvsync2)hipri_percentage
1932              When  hipri  is set this determines the probability of a pvsync2
1933              I/O being high priority. The default is 100%.
1934
1935       (pvsync2,libaio,io_uring)nowait
1936              By default if a request cannot be executed immediately (e.g. re‐
1937              source starvation, waiting on locks) it is queued and the initi‐
1938              ating process will be blocked until the  required  resource  be‐
1939              comes  free.   This  option  sets the RWF_NOWAIT flag (supported
1940              from the 4.14 Linux kernel) and the call will  return  instantly
1941              with EAGAIN or a partial result rather than waiting.
1942
1943              It is useful to also use ignore_error=EAGAIN when using this op‐
1944              tion.  Note: glibc 2.27, 2.28 have a  bug  in  syscall  wrappers
1945              preadv2, pwritev2.  They return EOPNOTSUP instead of EAGAIN.
1946
1947              For  cached I/O, using this option usually means a request oper‐
1948              ates only with cached data. Currently the RWF_NOWAIT  flag  does
1949              not  supported  for cached write.  For direct I/O, requests will
1950              only succeed if cache invalidation isn't required,  file  blocks
1951              are fully allocated and the disk request could be issued immedi‐
1952              ately.
1953
1954       (cpuio)cpuload=int
1955              Attempt to use the specified percentage of CPU cycles. This is a
1956              mandatory option when using cpuio I/O engine.
1957
1958       (cpuio)cpuchunks=int
1959              Split the load into cycles of the given time. In microseconds.
1960
1961       (cpuio)cpumode=str
1962              Specify how to stress the CPU. It can take these two values:
1963
1964                     noop   This is the default and directs the CPU to execute
1965                            noop instructions.
1966
1967                     qsort  Replace the default noop instructions with a qsort
1968                            algorithm to consume more energy.
1969
1970       (cpuio)exit_on_io_done=bool
1971              Detect when I/O threads are done, then exit.
1972
1973       (libhdfs)namenode=str
1974              The  hostname  or  IP address of a HDFS cluster namenode to con‐
1975              tact.
1976
1977       (libhdfs)port=int
1978              The listening port of the HFDS cluster namenode.
1979
1980       (netsplice,net)port=int
1981              The TCP or UDP port to bind to or connect to. If  this  is  used
1982              with  numjobs  to spawn multiple instances of the same job type,
1983              then this will be the starting port number since fio will use  a
1984              range of ports.
1985
1986       (rdma,librpma_*)port=int
1987              The  port  to  use for RDMA-CM communication. This should be the
1988              same value on the client and the server side.
1989
1990       (netsplice,net,rdma)hostname=str
1991              The hostname or IP address to use for TCP, UDP or RDMA-CM  based
1992              I/O.   If  the job is a TCP listener or UDP reader, the hostname
1993              is not used and must be omitted unless it is a valid UDP  multi‐
1994              cast address.
1995
1996       (librpma_*)serverip=str
1997              The IP address to be used for RDMA-CM based I/O.
1998
1999       (librpma_*_server)direct_write_to_pmem=bool
2000              Set  to 1 only when Direct Write to PMem from the remote host is
2001              possible. Otherwise, set to 0.
2002
2003       (librpma_*_server)busy_wait_polling=bool
2004              Set to 0 to wait for completion  instead  of  busy-wait  polling
2005              completion.  Default: 1.
2006
2007       (netsplice,net)interface=str
2008              The  IP address of the network interface used to send or receive
2009              UDP multicast.
2010
2011       (netsplice,net)ttl=int
2012              Time-to-live value for outgoing UDP multicast packets.  Default:
2013              1.
2014
2015       (netsplice,net)nodelay=bool
2016              Set TCP_NODELAY on TCP connections.
2017
2018       (netsplice,net)protocol=str, proto=str
2019              The network protocol to use. Accepted values are:
2020
2021                     tcp    Transmission control protocol.
2022
2023                     tcpv6  Transmission control protocol V6.
2024
2025                     udp    User datagram protocol.
2026
2027                     udpv6  User datagram protocol V6.
2028
2029                     unix   UNIX domain socket.
2030
2031              When the protocol is TCP or UDP, the port must also be given, as
2032              well as the hostname if the job is a TCP listener or UDP reader.
2033              For  unix sockets, the normal filename option should be used and
2034              the port is invalid.
2035
2036       (netsplice,net)listen
2037              For TCP network connections, tell fio  to  listen  for  incoming
2038              connections  rather  than initiating an outgoing connection. The
2039              hostname must be omitted if this option is used.
2040
2041       (netsplice,net)pingpong
2042              Normally a network writer will just continue writing data, and a
2043              network  reader  will  just consume packages. If `pingpong=1' is
2044              set, a writer will send its normal payload to the  reader,  then
2045              wait  for  the reader to send the same payload back. This allows
2046              fio to measure network latencies. The submission and  completion
2047              latencies  then  measure  local time spent sending or receiving,
2048              and the completion latency measures how long  it  took  for  the
2049              other  end  to  receive and send back. For UDP multicast traffic
2050              `pingpong=1' should only be set for a single reader when  multi‐
2051              ple readers are listening to the same address.
2052
2053       (netsplice,net)window_size=int
2054              Set the desired socket buffer size for the connection.
2055
2056       (netsplice,net)mss=int
2057              Set the TCP maximum segment size (TCP_MAXSEG).
2058
2059       (e4defrag)donorname=str
2060              File will be used as a block donor (swap extents between files).
2061
2062       (e4defrag)inplace=int
2063              Configure donor file blocks allocation strategy:
2064
2065                     0      Default. Preallocate donor's file on init.
2066
2067                     1      Allocate   space   immediately  inside  defragment
2068                            event, and free right after event.
2069
2070       (rbd,rados)clustername=str
2071              Specifies the name of the Ceph cluster.
2072
2073       (rbd)rbdname=str
2074              Specifies the name of the RBD.
2075
2076       (rbd,rados)pool=str
2077              Specifies the name of the Ceph  pool  containing  RBD  or  RADOS
2078              data.
2079
2080       (rbd,rados)clientname=str
2081              Specifies  the  username  (without the 'client.' prefix) used to
2082              access the Ceph cluster. If the clustername  is  specified,  the
2083              clientname  shall be the full *type.id* string. If no type. pre‐
2084              fix is given, fio will add 'client.'  by default.
2085
2086       (rbd,rados)busy_poll=bool
2087              Poll store instead of waiting for completion. Usually this  pro‐
2088              vides  better  throughput at cost of higher(up to 100%) CPU uti‐
2089              lization.
2090
2091       (rados)touch_objects=bool
2092              During initialization, touch (create if do not  exist)  all  ob‐
2093              jects  (files).   Touching  all  objects affects ceph caches and
2094              likely impacts test results.  Enabled by default.
2095
2096       (http)http_host=str
2097              Hostname to connect to. For S3, this could be the  bucket  name.
2098              Default is localhost
2099
2100       (http)http_user=str
2101              Username for HTTP authentication.
2102
2103       (http)http_pass=str
2104              Password for HTTP authentication.
2105
2106       (http)https=str
2107              Whether  to  use  HTTPS instead of plain HTTP. on enables HTTPS;
2108              insecure will enable HTTPS, but disable  SSL  peer  verification
2109              (use with caution!).  Default is off.
2110
2111       (http)http_mode=str
2112              Which  HTTP access mode to use: webdav, swift, or s3. Default is
2113              webdav.
2114
2115       (http)http_s3_region=str
2116              The S3 region/zone to include in the  request.  Default  is  us-
2117              east-1.
2118
2119       (http)http_s3_key=str
2120              The S3 secret key.
2121
2122       (http)http_s3_keyid=str
2123              The S3 key/access id.
2124
2125       (http)http_swift_auth_token=str
2126              The  Swift auth token. See the example configuration file on how
2127              to retrieve this.
2128
2129       (http)http_verbose=int
2130              Enable verbose requests from libcurl. Useful  for  debugging.  1
2131              turns  on  verbose  logging from libcurl, 2 additionally enables
2132              HTTP IO tracing.  Default is 0
2133
2134       (mtd)skip_bad=bool
2135              Skip operations against known bad blocks.
2136
2137       (libhdfs)hdfsdirectory
2138              libhdfs will create chunk in this HDFS directory.
2139
2140       (libhdfs)chunk_size
2141              The size of the chunk to use for each file.
2142
2143       (rdma)verb=str
2144              The RDMA verb to use on this side of the RDMA  ioengine  connec‐
2145              tion.  Valid values are write, read, send and recv. These corre‐
2146              spond to the equivalent RDMA  verbs  (e.g.  write  =  rdma_write
2147              etc.).  Note  that this only needs to be specified on the client
2148              side of the connection. See the examples folder.
2149
2150       (rdma)bindname=str
2151              The name to use to bind the local RDMA-CM connection to a  local
2152              RDMA  device.  This  could  be a hostname or an IPv4 or IPv6 ad‐
2153              dress.  On  the  server  side  this  will  be  passed  into  the
2154              rdma_bind_addr() function and on the client site it will be used
2155              in the rdma_resolve_add() function. This can be useful when mul‐
2156              tiple  paths  exist between the client and the server or in cer‐
2157              tain loopback configurations.
2158
2159       (filestat)stat_type=str
2160              Specify stat system call type to measure lookup/getattr  perfor‐
2161              mance.  Default is stat for stat(2).
2162
2163       (sg)hipri
2164              If this option is set, fio will attempt to use polled IO comple‐
2165              tions. This will have a similar effect as (io_uring)hipri.  Only
2166              SCSI  READ  and WRITE commands will have the SGV4_FLAG_HIPRI set
2167              (not UNMAP (trim) nor VERIFY).  Older versions of the  Linux  sg
2168              driver  that  do  not support hipri will simply ignore this flag
2169              and do normal IO. The Linux SCSI Low  Level  Driver  (LLD)  that
2170              "owns"  the  device  also  needs to support hipri (also known as
2171              iopoll and mq_poll). The MegaRAID driver is an example of a SCSI
2172              LLD.   Default:  clear (0) which does normal (interrupted based)
2173              IO.
2174
2175       (sg)readfua=bool
2176              With readfua option set to 1, read operations include the  force
2177              unit access (fua) flag. Default: 0.
2178
2179       (sg)writefua=bool
2180              With  writefua  option  set  to  1, write operations include the
2181              force unit access (fua) flag. Default: 0.
2182
2183       (sg)sg_write_mode=str
2184              Specify the type of write commands to  issue.  This  option  can
2185              take multiple values:
2186
2187                     write (default)
2188                            Write opcodes are issued as usual
2189
2190                     write_and_verify
2191                            Issue WRITE AND VERIFY commands. The BYTCHK bit is
2192                            set to 00b. This directs the device to carry out a
2193                            medium  verification  with  no data comparison for
2194                            the data that was written. The writefua option  is
2195                            ignored with this selection.
2196
2197                     verify This  option  is  deprecated. Use write_and_verify
2198                            instead.
2199
2200                     write_same
2201                            Issue WRITE SAME commands. This transfers a single
2202                            block  to the device and writes this same block of
2203                            data to a contiguous sequence of LBAs beginning at
2204                            the  specified  offset. fio's block size parameter
2205                            specifies the amount of  data  written  with  each
2206                            command.  However,  the  amount  of  data actually
2207                            transferred to the device is equal to the device's
2208                            block  (sector)  size.  For a device with 512 byte
2209                            sectors, blocksize=8k will write 16  sectors  with
2210                            each  command.  fio will still generate 8k of data
2211                            for each command butonly the first 512 bytes  will
2212                            be  used and transferred to the device. The write‐
2213                            fua option is ignored with this selection.
2214
2215                     same   This option is deprecated. Use write_same instead.
2216
2217                     write_same_ndob
2218                            Issue WRITE SAME(16) commands as  above  but  with
2219                            the  No Data Output Buffer (NDOB) bit set. No data
2220                            will be transferred to the device  with  this  bit
2221                            set. Data written will be a pre-determined pattern
2222                            such as all zeroes.
2223
2224                     write_stream
2225                            Issue WRITE STREAM(16) commands. Use the stream_id
2226                            option to specify the stream identifier.
2227
2228                     verify_bytchk_00
2229                            Issue  VERIFY commands with BYTCHK set to 00. This
2230                            directs the device to carry out a medium verifica‐
2231                            tion with no data comparison.
2232
2233                     verify_bytchk_01
2234                            Issue  VERIFY commands with BYTCHK set to 01. This
2235                            directs the device to compare the data on the  de‐
2236                            vice with the data transferred to the device.
2237
2238                     verify_bytchk_11
2239                            Issue  VERIFY commands with BYTCHK set to 11. This
2240                            transfers a single block to the  device  and  com‐
2241                            pares  the contents of this block with the data on
2242                            the device  beginning  at  the  specified  offset.
2243                            fio's  block  size  parameter  specifies the total
2244                            amount of data compared with  this  command.  How‐
2245                            ever,  only  one  block  (sector) worth of data is
2246                            transferred to the device. This is similar to  the
2247                            WRITE  SAME  command  except that data is compared
2248                            instead of written.
2249
2250       (sg)stream_id=int
2251              Set the stream identifier for WRITE STREAM commands. If this  is
2252              set  to 0 (which is not a valid stream identifier) fio will open
2253              a stream and then close it when done. Default is 0.
2254
2255       (nbd)uri=str
2256              Specify the NBD URI of the server to  test.   The  string  is  a
2257              standard   NBD   URI   (see   https://github.com/NetworkBlockDe
2258              vice/nbd/tree/master/doc).  Example URIs:
2259
2260                     nbd://localhost:10809
2261
2262                     nbd+unix:///?socket=/tmp/socket
2263
2264                     nbds://tlshost/exportname
2265
2266       (libcufile)gpu_dev_ids=str
2267              Specify the GPU IDs to use with CUDA. This is a  colon-separated
2268              list  of  int.  GPUs are assigned to workers roundrobin. Default
2269              is 0.
2270
2271       (libcufile)cuda_io=str
2272              Specify the type of I/O to use with CUDA. This option takes  the
2273              following values:
2274
2275                     cufile (default)
2276                            Use  libcufile and nvidia-fs. This option performs
2277                            I/O directly between a GPUDirect Storage  filesys‐
2278                            tem and GPU buffers, avoiding use of a bounce buf‐
2279                            fer. If verify is set, cudaMemcpy is used to  copy
2280                            verification data between RAM and GPU(s).  Verifi‐
2281                            cation data is copied from RAM  to  GPU  before  a
2282                            write  and  from  GPU to RAM after a read.  direct
2283                            must be 1.
2284
2285                     posix  Use POSIX to perform I/O with a  RAM  buffer,  and
2286                            use  cudaMemcpy  to  transfer data between RAM and
2287                            the GPU(s).  Data is copied from GPU to RAM before
2288                            a  write  and copied from RAM to GPU after a read.
2289                            verify does not affect the use of cudaMemcpy.
2290
2291       (dfs)pool
2292              Specify the label or UUID of the DAOS pool to connect to.
2293
2294       (dfs)cont
2295              Specify the label or UUID of the DAOS container to open.
2296
2297       (dfs)chunk_size
2298              Specificy a different chunk size (in bytes) for  the  dfs  file.
2299              Use DAOS container's chunk size by default.
2300
2301       (dfs)object_class
2302              Specificy  a  different object class for the dfs file.  Use DAOS
2303              container's object class by default.
2304
2305       (nfs)nfs_url
2306              URL           in           libnfs           format,           eg
2307              nfs://<server|ipv4|ipv6>/path[?arg=val[&arg=val]*]  Refer to the
2308              libnfs README for more details.
2309
2310       (exec)program=str
2311              Specify the program to execute.  Note the program will receive a
2312              SIGTERM  when  the job is reaching the time limit.  A SIGKILL is
2313              sent once the job is over. The delay between the two signals  is
2314              defined by grace_time option.
2315
2316       (exec)arguments=str
2317              Specify  arguments  to  pass to program.  Some special variables
2318              can be expanded to pass fio's job details to the program :
2319
2320                     %r     replaced by the duration of the job in seconds
2321
2322                     %n     replaced by the name of the job
2323
2324       (exec)grace_time=int
2325              Defines the time between the SIGTERM and  SIGKILL  signals.  De‐
2326              fault is 1 second.
2327
2328       (exec)std_redirect=ool
2329              If  set, stdout and stderr streams are redirected to files named
2330              from the job name. Default is true.
2331
2332   I/O depth
2333       iodepth=int
2334              Number of I/O units to keep in flight  against  the  file.  Note
2335              that increasing iodepth beyond 1 will not affect synchronous io‐
2336              engines (except for small degrees when verify_async is in  use).
2337              Even  async  engines  may impose OS restrictions causing the de‐
2338              sired depth not to be achieved. This may happen  on  Linux  when
2339              using  libaio  and not setting `direct=1', since buffered I/O is
2340              not async on that OS. Keep an eye on the I/O depth  distribution
2341              in  the  fio  output to verify that the achieved depth is as ex‐
2342              pected. Default: 1.
2343
2344       iodepth_batch_submit=int, iodepth_batch=int
2345              This defines how many pieces of I/O to submit at  once.  It  de‐
2346              faults to 1 which means that we submit each I/O as soon as it is
2347              available, but can be raised to submit bigger batches of I/O  at
2348              the time. If it is set to 0 the iodepth value will be used.
2349
2350       iodepth_batch_complete_min=int, iodepth_batch_complete=int
2351              This  defines how many pieces of I/O to retrieve at once. It de‐
2352              faults to 1 which means that we'll ask for a minimum of 1 I/O in
2353              the retrieval process from the kernel. The I/O retrieval will go
2354              on until we hit the limit set by iodepth_low. If  this  variable
2355              is set to 0, then fio will always check for completed events be‐
2356              fore queuing more I/O. This helps reduce  I/O  latency,  at  the
2357              cost of more retrieval system calls.
2358
2359       iodepth_batch_complete_max=int
2360              This  defines  maximum  pieces  of I/O to retrieve at once. This
2361              variable  should   be   used   along   with   iodepth_batch_com‐
2362              plete_min=int  variable,  specifying  the  range  of min and max
2363              amount of I/O which should be retrieved. By default it is  equal
2364              to iodepth_batch_complete_min value. Example #1:
2365
2366                     iodepth_batch_complete_min=1
2367                     iodepth_batch_complete_max=<iodepth>
2368
2369              which  means  that we will retrieve at least 1 I/O and up to the
2370              whole submitted queue depth. If none of I/O has  been  completed
2371              yet, we will wait.  Example #2:
2372
2373                     iodepth_batch_complete_min=0
2374                     iodepth_batch_complete_max=<iodepth>
2375
2376              which means that we can retrieve up to the whole submitted queue
2377              depth, but if none of I/O has been completed yet,  we  will  NOT
2378              wait  and  immediately  exit the system call. In this example we
2379              simply do polling.
2380
2381       iodepth_low=int
2382              The low water mark indicating when to start  filling  the  queue
2383              again.  Defaults  to  the same as iodepth, meaning that fio will
2384              attempt to keep the queue full at all times. If iodepth  is  set
2385              to  e.g.  16  and  iodepth_low  is  set to 4, then after fio has
2386              filled the queue of 16 requests, it will  let  the  depth  drain
2387              down to 4 before starting to fill it again.
2388
2389       serialize_overlap=bool
2390              Serialize  in-flight  I/Os  that might otherwise cause or suffer
2391              from data races.  When two or more I/Os are submitted simultane‐
2392              ously,  there is no guarantee that the I/Os will be processed or
2393              completed in the submitted order. Further, if  two  or  more  of
2394              those  I/Os  are writes, any overlapping region between them can
2395              become indeterminate/undefined on certain storage. These  issues
2396              can  cause verification to fail erratically when at least one of
2397              the racing I/Os is changing data and the overlapping region  has
2398              a  non-zero  size.  Setting serialize_overlap tells fio to avoid
2399              provoking this behavior by explicitly serializing in-flight I/Os
2400              that  have a non-zero overlap. Note that setting this option can
2401              reduce both performance and the iodepth achieved.
2402
2403              This option only applies to I/Os issued for a single job  except
2404              when it is enabled along with io_submit_mode=offload. In offload
2405              mode, fio will check for overlap among  all  I/Os  submitted  by
2406              offload jobs with serialize_overlap enabled.
2407
2408              Default: false.
2409
2410       io_submit_mode=str
2411              This  option controls how fio submits the I/O to the I/O engine.
2412              The default is `inline', which means that the  fio  job  threads
2413              submit  and  reap  I/O  directly.  If  set to `offload', the job
2414              threads will offload I/O submission to a dedicated pool  of  I/O
2415              threads.  This  requires some coordination and thus has a bit of
2416              extra overhead, especially for lower queue depth  I/O  where  it
2417              can  increase latencies. The benefit is that fio can manage sub‐
2418              mission rates independently of the device completion rates. This
2419              avoids skewed latency reporting if I/O gets backed up on the de‐
2420              vice side (the coordinated omission problem). Note that this op‐
2421              tion cannot reliably be used with async IO engines.
2422
2423   I/O rate
2424       thinktime=time
2425              Stall  the job for the specified period of time after an I/O has
2426              completed before issuing the next. May be used to simulate  pro‐
2427              cessing being done by an application.  When the unit is omitted,
2428              the value is interpreted in microseconds. See  thinktime_blocks,
2429              thinktime_iotime and thinktime_spin.
2430
2431       thinktime_spin=time
2432              Only valid if thinktime is set - pretend to spend CPU time doing
2433              something with the data received, before falling back to  sleep‐
2434              ing  for the rest of the period specified by thinktime. When the
2435              unit is omitted, the value is interpreted in microseconds.
2436
2437       thinktime_blocks=int
2438              Only valid if thinktime is set - control how many blocks to  is‐
2439              sue,  before  waiting thinktime usecs. If not set, defaults to 1
2440              which will make fio wait thinktime usecs after every block. This
2441              effectively  makes  any  queue depth setting redundant, since no
2442              more than 1 I/O will be queued before we have to complete it and
2443              do  our thinktime. In other words, this setting effectively caps
2444              the queue depth if the latter is larger.
2445
2446       thinktime_blocks_type=str
2447              Only valid if thinktime is set -  control  how  thinktime_blocks
2448              triggers.   The  default is `complete', which triggers thinktime
2449              when fio completes thinktime_blocks blocks. If this  is  set  to
2450              `issue', then the trigger happens at the issue side.
2451
2452       thinktime_iotime=time
2453              Only  valid  if thinktime is set - control thinktime interval by
2454              time.  The thinktime stall is repeated after  IOs  are  executed
2455              for   thinktime_iotime.   For   example,  `--thinktime_iotime=9s
2456              --thinktime=1s' repeat 10-second cycle with IOs  for  9  seconds
2457              and  stall for 1 second. When the unit is omitted, thinktime_io‐
2458              time is interpreted as a number of seconds.  If this  option  is
2459              used  together with thinktime_blocks, the thinktime stall is re‐
2460              peated after thinktime_iotime  or  after  thinktime_blocks  IOs,
2461              whichever happens first.
2462
2463
2464       rate=int[,int][,int]
2465              Cap  the bandwidth used by this job. The number is in bytes/sec,
2466              the normal suffix rules apply.  Comma-separated  values  may  be
2467              specified  for  reads,  writes, and trims as described in block‐
2468              size.
2469
2470              For example, using `rate=1m,500k' would limit reads to  1MiB/sec
2471              and  writes  to  500KiB/sec. Capping only reads or writes can be
2472              done with `rate=,500k' or `rate=500k,'  where  the  former  will
2473              only limit writes (to 500KiB/sec) and the latter will only limit
2474              reads.
2475
2476       rate_min=int[,int][,int]
2477              Tell fio to do whatever it can to maintain at least  this  band‐
2478              width.  Failing  to  meet this requirement will cause the job to
2479              exit. Comma-separated values may be specified for reads, writes,
2480              and trims as described in blocksize.
2481
2482       rate_iops=int[,int][,int]
2483              Cap  the bandwidth to this number of IOPS. Basically the same as
2484              rate, just specified independently of bandwidth. If the  job  is
2485              given  a block size range instead of a fixed value, the smallest
2486              block size is used as the metric. Comma-separated values may  be
2487              specified  for  reads,  writes, and trims as described in block‐
2488              size.
2489
2490       rate_iops_min=int[,int][,int]
2491              If fio doesn't meet this rate of I/O, it will cause the  job  to
2492              exit.   Comma-separated  values  may  be  specified  for  reads,
2493              writes, and trims as described in blocksize.
2494
2495       rate_process=str
2496              This option controls how fio manages rated I/O submissions.  The
2497              default  is `linear', which submits I/O in a linear fashion with
2498              fixed delays between I/Os that gets adjusted based on  I/O  com‐
2499              pletion  rates. If this is set to `poisson', fio will submit I/O
2500              based on a more real world random request  flow,  known  as  the
2501              Poisson       process       (https://en.wikipedia.org/wiki/Pois
2502              son_point_process). The lambda will be 10^6 / IOPS for the given
2503              workload.
2504
2505       rate_ignore_thinktime=bool
2506              By  default,  fio will attempt to catch up to the specified rate
2507              setting, if any kind of thinktime setting was used. If this  op‐
2508              tion is set, then fio will ignore the thinktime and continue do‐
2509              ing IO at the specified rate, instead  of  entering  a  catch-up
2510              mode after thinktime is done.
2511
2512   I/O latency
2513       latency_target=time
2514              If  set, fio will attempt to find the max performance point that
2515              the given workload will run at while maintaining a latency below
2516              this  target. When the unit is omitted, the value is interpreted
2517              in microseconds. See latency_window and latency_percentile.
2518
2519       latency_window=time
2520              Used with latency_target to specify the sample window  that  the
2521              job is run at varying queue depths to test the performance. When
2522              the unit is omitted, the value is interpreted in microseconds.
2523
2524       latency_percentile=float
2525              The percentage of I/Os that must fall within the criteria speci‐
2526              fied  by latency_target and latency_window. If not set, this de‐
2527              faults to 100.0, meaning that all I/Os must be equal or below to
2528              the value set by latency_target.
2529
2530       latency_run=bool
2531              Used  with latency_target. If false (default), fio will find the
2532              highest queue depth that meets latency_target and exit. If true,
2533              fio  will continue running and try to meet latency_target by ad‐
2534              justing queue depth.
2535
2536       max_latency=time[,time][,time]
2537              If set, fio will exit the job with an ETIMEDOUT error if it  ex‐
2538              ceeds  this maximum latency. When the unit is omitted, the value
2539              is interpreted in microseconds. Comma-separated  values  may  be
2540              specified  for  reads,  writes, and trims as described in block‐
2541              size.
2542
2543       rate_cycle=int
2544              Average bandwidth for rate and rate_min over this number of mil‐
2545              liseconds. Defaults to 1000.
2546
2547   I/O replay
2548       write_iolog=str
2549              Write  the  issued  I/O  patterns  to  the  specified  file. See
2550              read_iolog. Specify a separate file for each job, otherwise  the
2551              iologs will be interspersed and the file may be corrupt.
2552
2553       read_iolog=str
2554              Open  an  iolog  with  the specified filename and replay the I/O
2555              patterns it contains. This can be used to store a  workload  and
2556              replay it sometime later. The iolog given may also be a blktrace
2557              binary file, which allows fio to replay a workload  captured  by
2558              blktrace.  See blktrace(8) for how to capture such logging data.
2559              For blktrace replay, the file needs to be turned into a blkparse
2560              binary  data  file  first  (`blkparse  <device>  -o /dev/null -d
2561              file_for_fio.bin').  You can specify a number of files by  sepa‐
2562              rating  the names with a ':' character.  See the filename option
2563              for information on how to escape ':' characters within the  file
2564              names.  These  files will be sequentially assigned to job clones
2565              created by numjobs. '-' is a reserved name,  meaning  read  from
2566              stdin,  notably  if  filename is set to '-' which means stdin as
2567              well, then this flag can't be set to '-'.
2568
2569       read_iolog_chunked=bool
2570              Determines  how  iolog  is  read.  If  false  (default)   entire
2571              read_iolog  will  be  read at once. If selected true, input from
2572              iolog will be read gradually.  Useful when iolog is very  large,
2573              or it is generated.
2574
2575       merge_blktrace_file=str
2576              When  specified,  rather  than  replaying  the  logs  passed  to
2577              read_iolog, the logs go through a merge phase  which  aggregates
2578              them  into a single blktrace.  The resulting file is then passed
2579              on as the read_iolog parameter. The intention here  is  to  make
2580              the order of events consistent. This limits the influence of the
2581              scheduler compared to replaying multiple blktraces  via  concur‐
2582              rent jobs.
2583
2584       merge_blktrace_scalars=float_list
2585              This  is a percentage based option that is index paired with the
2586              list of files passed to read_iolog. When merging  is  performed,
2587              scale  the  time  of each event by the corresponding amount. For
2588              example,  `--merge_blktrace_scalars="50:100"'  runs  the   first
2589              trace in halftime and the second trace in realtime. This knob is
2590              separately tunable from replay_time_scale which scales the trace
2591              during  runtime  and will not change the output of the merge un‐
2592              like this option.
2593
2594       merge_blktrace_iters=float_list
2595              This is a whole number option that is index paired with the list
2596              of  files  passed  to read_iolog. When merging is performed, run
2597              each trace for the specified number of iterations. For  example,
2598              `--merge_blktrace_iters="2:1"'  runs the first trace for two it‐
2599              erations and the second trace for one iteration.
2600
2601       replay_no_stall=bool
2602              When replaying I/O with read_iolog the default  behavior  is  to
2603              attempt to respect the timestamps within the log and replay them
2604              with the appropriate delay between IOPS. By setting  this  vari‐
2605              able  fio  will not respect the timestamps and attempt to replay
2606              them as fast as possible while still  respecting  ordering.  The
2607              result  is the same I/O pattern to a given device, but different
2608              timings.
2609
2610       replay_time_scale=int
2611              When replaying I/O with read_iolog, fio will honor the  original
2612              timing  in  the  trace. With this option, it's possible to scale
2613              the time. It's a percentage option, if set to 50 it means run at
2614              50%  the  original  IO  rate in the trace. If set to 200, run at
2615              twice the original IO rate. Defaults to 100.
2616
2617       replay_redirect=str
2618              While replaying I/O patterns using read_iolog the default behav‐
2619              ior  is to replay the IOPS onto the major/minor device that each
2620              IOP was recorded from. This is sometimes undesirable because  on
2621              a  different machine those major/minor numbers can map to a dif‐
2622              ferent device. Changing hardware on the same system can also re‐
2623              sult in a different major/minor mapping.  replay_redirect causes
2624              all I/Os to be replayed onto the single specified device regard‐
2625              less  of  the  device  it  was recorded from. i.e. `replay_redi‐
2626              rect=/dev/sdc' would cause all I/O in the blktrace or  iolog  to
2627              be replayed onto `/dev/sdc'. This means multiple devices will be
2628              replayed onto a single device, if the  trace  contains  multiple
2629              devices.  If  you  want  multiple devices to be replayed concur‐
2630              rently to multiple redirected devices  you  must  blkparse  your
2631              trace  into separate traces and replay them with independent fio
2632              invocations.  Unfortunately this also breaks the strict time or‐
2633              dering between multiple device accesses.
2634
2635       replay_align=int
2636              Force  alignment  of  the byte offsets in a trace to this value.
2637              The value must be a power of 2.
2638
2639       replay_scale=int
2640              Scale bye offsets down by this  factor  when  replaying  traces.
2641              Should most likely use replay_align as well.
2642
2643   Threads, processes and job synchronization
2644       replay_skip=str
2645              Sometimes  it's  useful  to  skip  certain  IO types in a replay
2646              trace. This could be, for instance, eliminating  the  writes  in
2647              the trace. Or not replaying the trims/discards, if you are redi‐
2648              recting to a device that  doesn't  support  them.   This  option
2649              takes a comma separated list of read, write, trim, sync.
2650
2651       thread Fio defaults to creating jobs by using fork, however if this op‐
2652              tion is given, fio will create  jobs  by  using  POSIX  Threads'
2653              function pthread_create(3) to create threads instead.
2654
2655       wait_for=str
2656              If  set,  the  current job won't be started until all workers of
2657              the specified waitee job are done.  wait_for operates on the job
2658              name  basis,  so  there are a few limitations. First, the waitee
2659              must be defined prior to the waiter job (meaning no forward ref‐
2660              erences).  Second,  if a job is being referenced as a waitee, it
2661              must have a unique name (no duplicate waitees).
2662
2663       nice=int
2664              Run the job with the given nice value. See man nice(2).  On Win‐
2665              dows,  values  less than -15 set the process class to "High"; -1
2666              through -15 set "Above Normal"; 1 through 15 "Below Normal"; and
2667              above 15 "Idle" priority class.
2668
2669       prio=int
2670              Set  the  I/O  priority  value of this job. Linux limits us to a
2671              positive value between 0 and 7, with 0 being  the  highest.  See
2672              man ionice(1). Refer to an appropriate manpage for other operat‐
2673              ing systems since meaning of priority may differ.  For  per-com‐
2674              mand priority setting, see the I/O engine specific `cmdprio_per‐
2675              centage` and `cmdprio` options.
2676
2677       prioclass=int
2678              Set the I/O priority class. See man ionice(1).  For  per-command
2679              priority  setting, see the I/O engine specific `cmdprio_percent‐
2680              age` and `cmdprio_class` options.
2681
2682       cpus_allowed=str
2683              Controls the same options as  cpumask,  but  accepts  a  textual
2684              specification of the permitted CPUs instead and CPUs are indexed
2685              from 0. So to use CPUs 0  and  5  you  would  specify  `cpus_al‐
2686              lowed=0,5'. This option also allows a range of CPUs to be speci‐
2687              fied -- say you wanted a binding to CPUs 0, 5, and 8 to 15,  you
2688              would set `cpus_allowed=0,5,8-15'.
2689
2690              On  Windows,  when  `cpus_allowed' is unset only CPUs from fio's
2691              current processor group will be used and affinity  settings  are
2692              inherited  from  the  system.  An fio build configured to target
2693              Windows 7 makes options that set CPUs processor group aware  and
2694              values  will  set both the processor group and a CPU from within
2695              that group. For example, on a system where processor group 0 has
2696              40 CPUs and processor group 1 has 32 CPUs, `cpus_allowed' values
2697              between 0 and 39 will bind  CPUs  from  processor  group  0  and
2698              `cpus_allowed' values between 40 and 71 will bind CPUs from pro‐
2699              cessor group 1. When using `cpus_allowed_policy=shared' all CPUs
2700              specified  by  a  single  `cpus_allowed' option must be from the
2701              same processor group. For Windows fio builds not built for  Win‐
2702              dows  7,  CPUs  will  only be selected from (and be relative to)
2703              whatever processor group fio happens to be running in  and  CPUs
2704              from other processor groups cannot be used.
2705
2706       cpus_allowed_policy=str
2707              Set  the  policy  of  how  fio distributes the CPUs specified by
2708              cpus_allowed or cpumask. Two policies are supported:
2709
2710                     shared All jobs will share the CPU set specified.
2711
2712                     split  Each job will get a unique CPU from the CPU set.
2713
2714              shared is the default behavior, if the option  isn't  specified.
2715              If  split is specified, then fio will assign one cpu per job. If
2716              not enough CPUs are given for the jobs  listed,  then  fio  will
2717              roundrobin the CPUs in the set.
2718
2719       cpumask=int
2720              Set  the  CPU affinity of this job. The parameter given is a bit
2721              mask of allowed CPUs the job may run on. So if you want the  al‐
2722              lowed CPUs to be 1 and 5, you would pass the decimal value of (1
2723              << 1 | 1 << 5), or 34. See man  sched_setaffinity(2).  This  may
2724              not  work on all supported operating systems or kernel versions.
2725              This option doesn't work well for a higher CPU count  than  what
2726              you  can  store  in an integer mask, so it can only control cpus
2727              1-32. For boxes with larger CPU counts, use cpus_allowed.
2728
2729       numa_cpu_nodes=str
2730              Set this job running on specified NUMA nodes'  CPUs.  The  argu‐
2731              ments  allow comma delimited list of cpu numbers, A-B ranges, or
2732              `all'. Note, to enable NUMA options support, fio must  be  built
2733              on a system with libnuma-dev(el) installed.
2734
2735       numa_mem_policy=str
2736              Set  this job's memory policy and corresponding NUMA nodes. For‐
2737              mat of the arguments:
2738
2739                     <mode>[:<nodelist>]
2740
2741              `mode' is one of the following memory policies: `default', `pre‐
2742              fer', `bind', `interleave' or `local'. For `default' and `local'
2743              memory policies, no node needs to be  specified.  For  `prefer',
2744              only one node is allowed. For `bind' and `interleave' the `node‐
2745              list' may be as follows: a comma delimited list of numbers,  A-B
2746              ranges, or `all'.
2747
2748       cgroup=str
2749              Add  job  to this control group. If it doesn't exist, it will be
2750              created. The system must have a mounted cgroup blkio mount point
2751              for  this  to  work. If your system doesn't have it mounted, you
2752              can do so with:
2753
2754                     # mount -t cgroup -o blkio none /cgroup
2755
2756       cgroup_weight=int
2757              Set the weight of the cgroup to this value. See  the  documenta‐
2758              tion that comes with the kernel, allowed values are in the range
2759              of 100..1000.
2760
2761       cgroup_nodelete=bool
2762              Normally fio will delete the cgroups it has  created  after  the
2763              job  completion.  To override this behavior and to leave cgroups
2764              around after the job completion, set  `cgroup_nodelete=1'.  This
2765              can be useful if one wants to inspect various cgroup files after
2766              job completion. Default: false.
2767
2768       flow_id=int
2769              The ID of the flow. If not specified, it  defaults  to  being  a
2770              global flow. See flow.
2771
2772       flow=int
2773              Weight  in token-based flow control. If this value is used, then
2774              fio regulates the activity between two or more jobs sharing  the
2775              same  flow_id.   Fio  attempts to keep each job activity propor‐
2776              tional to other jobs' activities in the same flow_id group, with
2777              respect  to  requested  weight per job.  That is, if one job has
2778              `flow=3', another job has `flow=2' and  another  with  `flow=1`,
2779              then there will be a roughly 3:2:1 ratio in how much one runs vs
2780              the others.
2781
2782       flow_sleep=int
2783              The period of time, in microseconds,  to  wait  after  the  flow
2784              counter has exceeded its proportion before retrying operations.
2785
2786       stonewall, wait_for_previous
2787              Wait for preceding jobs in the job file to exit, before starting
2788              this one. Can be used to insert serialization points in the  job
2789              file.  A stone wall also implies starting a new reporting group,
2790              see group_reporting. Optionally you  can  use  `stonewall=0`  to
2791              disable or `stonewall=1` to enable it.
2792
2793       exitall
2794              By  default,  fio  will continue running all other jobs when one
2795              job finishes.  Sometimes this is not the desired action. Setting
2796              exitall  will  instead  make  fio terminate all jobs in the same
2797              group, as soon as one job of that group finishes.
2798
2799       exit_what=str
2800              By default, fio will continue running all other  jobs  when  one
2801              job finishes.  Sometimes this is not the desired action. Setting
2802              exitall will instead make fio terminate all  jobs  in  the  same
2803              group. The option exit_what allows you to control which jobs get
2804              terminated when exitall is enabled.  The default value is group.
2805              The allowed values are:
2806
2807                     all    terminates all jobs.
2808
2809                     group  is  the  default and does not change the behaviour
2810                            of exitall.
2811
2812                     stonewall
2813                            terminates all currently running jobs  across  all
2814                            groups  and  continues  execution  with  the  next
2815                            stonewalled group.
2816
2817       exec_prerun=str
2818              Before running this job, issue  the  command  specified  through
2819              system(3).  Output  is redirected in a file called `jobname.pre‐
2820              run.txt'.
2821
2822       exec_postrun=str
2823              After the job completes, issue the command specified though sys‐
2824              tem(3).   Output   is   redirected   in   a  file  called  `job‐
2825              name.postrun.txt'.
2826
2827       uid=int
2828              Instead of running as the invoking user, set the user ID to this
2829              value before the thread/process does any work.
2830
2831       gid=int
2832              Set group ID, see uid.
2833
2834   Verification
2835       verify_only
2836              Do  not  perform  specified  workload,  only  verify  data still
2837              matches previous invocation of this workload. This option allows
2838              one  to  check data multiple times at a later date without over‐
2839              writing it. This option makes  sense  only  for  workloads  that
2840              write  data,  and does not support workloads with the time_based
2841              option set.
2842
2843       do_verify=bool
2844              Run the verify phase after a write phase. Only valid  if  verify
2845              is set. Default: true.
2846
2847       verify=str
2848              If  writing  to  a  file, fio can verify the file contents after
2849              each iteration of the job. Each verification method also implies
2850              verification  of  special header, which is written to the begin‐
2851              ning of each block. This header also includes meta  information,
2852              like offset of the block, block number, timestamp when block was
2853              written, etc. verify can be combined with verify_pattern option.
2854              The allowed values are:
2855
2856                     md5    Use  an  md5  sum of the data area and store it in
2857                            the header of each block.
2858
2859                     crc64  Use an experimental crc64 sum of the data area and
2860                            store it in the header of each block.
2861
2862                     crc32c Use  a crc32c sum of the data area and store it in
2863                            the header of each block. This will  automatically
2864                            use  hardware  acceleration (e.g. SSE4.2 on an x86
2865                            or CRC crypto extensions on ARM64) but  will  fall
2866                            back  to  software crc32c if none is found. Gener‐
2867                            ally the fastest checksum fio supports when  hard‐
2868                            ware accelerated.
2869
2870                     crc32c-intel
2871                            Synonym for crc32c.
2872
2873                     crc32  Use  a  crc32 sum of the data area and store it in
2874                            the header of each block.
2875
2876                     crc16  Use a crc16 sum of the data area and store  it  in
2877                            the header of each block.
2878
2879                     crc7   Use  a  crc7  sum of the data area and store it in
2880                            the header of each block.
2881
2882                     xxhash Use xxhash as the checksum function. Generally the
2883                            fastest software checksum that fio supports.
2884
2885                     sha512 Use sha512 as the checksum function.
2886
2887                     sha256 Use sha256 as the checksum function.
2888
2889                     sha1   Use optimized sha1 as the checksum function.
2890
2891                     sha3-224
2892                            Use optimized sha3-224 as the checksum function.
2893
2894                     sha3-256
2895                            Use optimized sha3-256 as the checksum function.
2896
2897                     sha3-384
2898                            Use optimized sha3-384 as the checksum function.
2899
2900                     sha3-512
2901                            Use optimized sha3-512 as the checksum function.
2902
2903                     meta   This option is deprecated, since now meta informa‐
2904                            tion is included in  generic  verification  header
2905                            and  meta verification happens by default. For de‐
2906                            tailed information see the description of the ver‐
2907                            ify  setting.  This option is kept because of com‐
2908                            patibility's sake with old configurations. Do  not
2909                            use it.
2910
2911                     pattern
2912                            Verify  a  strict pattern. Normally fio includes a
2913                            header with some basic information  and  checksum‐
2914                            ming, but if this option is set, only the specific
2915                            pattern set with verify_pattern is verified.
2916
2917                     null   Only pretend to verify. Useful for testing  inter‐
2918                            nals with `ioengine=null', not for much else.
2919
2920              This  option  can be used for repeated burn-in tests of a system
2921              to make sure that the written data is also correctly read  back.
2922              If  the  data direction given is a read or random read, fio will
2923              assume that it should verify a previously written file.  If  the
2924              data direction includes any form of write, the verify will be of
2925              the newly written data.
2926
2927              To avoid false verification errors, do not use  the  norandommap
2928              option when verifying data with async I/O engines and I/O depths
2929              > 1.  Or use the norandommap and the lfsr random  generator  to‐
2930              gether  to  avoid  writing to the same offset with multiple out‐
2931              standing I/Os.
2932
2933       verify_offset=int
2934              Swap the verification header with data  somewhere  else  in  the
2935              block before writing. It is swapped back before verifying.
2936
2937       verify_interval=int
2938              Write  the  verification  header at a finer granularity than the
2939              blocksize. It will be written for chunks the size of  verify_in‐
2940              terval. blocksize should divide this evenly.
2941
2942       verify_pattern=str
2943              If set, fio will fill the I/O buffers with this pattern. Fio de‐
2944              faults to filling with totally random bytes, but sometimes  it's
2945              interesting  to  fill  with a known pattern for I/O verification
2946              purposes. Depending on the width of the pattern, fio  will  fill
2947              1/2/3/4 bytes of the buffer at the time (it can be either a dec‐
2948              imal or a hex number).  The  verify_pattern  if  larger  than  a
2949              32-bit  quantity  has to be a hex number that starts with either
2950              "0x" or "0X". Use with verify. Also, verify_pattern supports  %o
2951              format,  which  means that for each block offset will be written
2952              and then verified back, e.g.:
2953
2954                     verify_pattern=%o
2955
2956              Or use combination of everything:
2957
2958                     verify_pattern=0xff%o"abcd"-12
2959
2960       verify_fatal=bool
2961              Normally fio will keep checking the entire contents before quit‐
2962              ting on a block verification failure. If this option is set, fio
2963              will exit the job on the first observed failure. Default: false.
2964
2965       verify_dump=bool
2966              If set, dump the contents of both the original  data  block  and
2967              the  data  block  we  read  off disk to files. This allows later
2968              analysis to inspect just what kind of data corruption  occurred.
2969              Off by default.
2970
2971       verify_async=int
2972              Fio  will normally verify I/O inline from the submitting thread.
2973              This option takes an integer describing how many  async  offload
2974              threads  to  create for I/O verification instead, causing fio to
2975              offload the duty of verifying I/O contents to one or more  sepa‐
2976              rate  threads.  If  using this offload option, even sync I/O en‐
2977              gines can benefit from using an iodepth setting higher  than  1,
2978              as  it allows them to have I/O in flight while verifies are run‐
2979              ning.  Defaults to 0 async threads,  i.e.  verification  is  not
2980              asynchronous.
2981
2982       verify_async_cpus=str
2983              Tell  fio to set the given CPU affinity on the async I/O verifi‐
2984              cation threads. See cpus_allowed for the format used.
2985
2986       verify_backlog=int
2987              Fio will normally verify the written contents of a job that uti‐
2988              lizes verify once that job has completed. In other words, every‐
2989              thing is written then everything is read back and verified.  You
2990              may want to verify continually instead for a variety of reasons.
2991              Fio stores the meta data associated with an I/O block in memory,
2992              so  for  large  verify workloads, quite a bit of memory would be
2993              used up holding this meta data. If this option is  enabled,  fio
2994              will write only N blocks before verifying these blocks.
2995
2996       verify_backlog_batch=int
2997              Control  how  many  blocks  fio will verify if verify_backlog is
2998              set. If not set, will default to  the  value  of  verify_backlog
2999              (meaning  the  entire  queue is read back and verified). If ver‐
3000              ify_backlog_batch is  less  than  verify_backlog  then  not  all
3001              blocks  will be verified, if verify_backlog_batch is larger than
3002              verify_backlog, some blocks will be verified more than once.
3003
3004       verify_state_save=bool
3005              When a job exits during the write phase of  a  verify  workload,
3006              save  its current state. This allows fio to replay up until that
3007              point, if the verify state is loaded for the verify read  phase.
3008              The format of the filename is, roughly:
3009
3010                     <type>-<jobname>-<jobindex>-verify.state.
3011
3012              <type>  is  "local"  for a local run, "sock" for a client/server
3013              socket connection, and "ip" (192.168.0.1, for  instance)  for  a
3014              networked client/server connection. Defaults to true.
3015
3016       verify_state_load=bool
3017              If a verify termination trigger was used, fio stores the current
3018              write state of each thread. This can  be  used  at  verification
3019              time  so  that  fio knows how far it should verify. Without this
3020              information, fio will run a full verification pass, according to
3021              the settings in the job file used. Default false.
3022
3023       trim_percentage=int
3024              Number of verify blocks to discard/trim.
3025
3026       trim_verify_zero=bool
3027              Verify that trim/discarded blocks are returned as zeros.
3028
3029       trim_backlog=int
3030              Verify that trim/discarded blocks are returned as zeros.
3031
3032       trim_backlog_batch=int
3033              Trim this number of I/O blocks.
3034
3035       experimental_verify=bool
3036              Enable experimental verification.
3037
3038   Steady state
3039       steadystate=str:float, ss=str:float
3040              Define  the  criterion and limit for assessing steady state per‐
3041              formance. The first parameter designates the  criterion  whereas
3042              the  second  parameter  sets  the  threshold. When the criterion
3043              falls below the threshold for the specified  duration,  the  job
3044              will  stop.  For  example,  `iops_slope:0.1%' will direct fio to
3045              terminate the job when the least squares regression slope  falls
3046              below  0.1% of the mean IOPS. If group_reporting is enabled this
3047              will apply to all jobs in the group. Below is the list of avail‐
3048              able  steady state assessment criteria. All assessments are car‐
3049              ried out using only data from  the  rolling  collection  window.
3050              Threshold  limits can be expressed as a fixed value or as a per‐
3051              centage of the mean in the collection window.
3052
3053              When using this feature, most jobs should include the time_based
3054              and  runtime  options  or  the loops option so that fio does not
3055              stop running after it has covered the full size of the specified
3056              file(s) or device(s).
3057
3058                            iops   Collect  IOPS data. Stop the job if all in‐
3059                                   dividual IOPS measurements are  within  the
3060                                   specified  limit  of  the  mean IOPS (e.g.,
3061                                   `iops:2' means  that  all  individual  IOPS
3062                                   values  must  be  within  2  of  the  mean,
3063                                   whereas `iops:0.2%' means that all individ‐
3064                                   ual  IOPS values must be within 0.2% of the
3065                                   mean IOPS to terminate the job).
3066
3067                            iops_slope
3068                                   Collect IOPS data and calculate  the  least
3069                                   squares  regression  slope. Stop the job if
3070                                   the slope falls below the specified limit.
3071
3072                            bw     Collect bandwidth data. Stop the job if all
3073                                   individual   bandwidth   measurements   are
3074                                   within the  specified  limit  of  the  mean
3075                                   bandwidth.
3076
3077                            bw_slope
3078                                   Collect  bandwidth  data  and calculate the
3079                                   least squares regression  slope.  Stop  the
3080                                   job  if the slope falls below the specified
3081                                   limit.
3082
3083              steadystate_duration=time, ss_dur=time
3084                     A rolling window of this duration will be used  to  judge
3085                     whether  steady state has been reached. Data will be col‐
3086                     lected once per second. The default is 0  which  disables
3087                     steady  state  detection.  When  the unit is omitted, the
3088                     value is interpreted in seconds.
3089
3090              steadystate_ramp_time=time, ss_ramp=time
3091                     Allow the job to run for the  specified  duration  before
3092                     beginning  data  collection for checking the steady state
3093                     job termination criterion. The default  is  0.  When  the
3094                     unit is omitted, the value is interpreted in seconds.
3095
3096   Measurements and reporting
3097       per_job_logs=bool
3098              If  set,  this  generates bw/clat/iops log with per file private
3099              filenames. If not set, jobs with identical names will share  the
3100              log filename. Default: true.
3101
3102       group_reporting
3103              It may sometimes be interesting to display statistics for groups
3104              of jobs as a whole instead of for each individual job.  This  is
3105              especially  true  if  numjobs  is  used;  looking  at individual
3106              thread/process output quickly becomes unwieldy. To see the final
3107              report  per-group  instead of per-job, use group_reporting. Jobs
3108              in a file will be part of the same reporting  group,  unless  if
3109              separated by a stonewall, or by using new_group.
3110
3111       new_group
3112              Start a new reporting group. See: group_reporting. If not given,
3113              all jobs in a file will be part of the same reporting group, un‐
3114              less separated by a stonewall.
3115
3116       stats=bool
3117              By  default, fio collects and shows final output results for all
3118              jobs that run. If this option is set to 0, then fio will  ignore
3119              it in the final stat output.
3120
3121       write_bw_log=str
3122              If  given,  write  a  bandwidth log for this job. Can be used to
3123              store data of the bandwidth of the jobs in their lifetime.
3124
3125              If no str argument is  given,  the  default  filename  of  `job‐
3126              name_type.x.log'  is  used. Even when the argument is given, fio
3127              will still append the type of log. So if one specifies:
3128
3129                     write_bw_log=foo
3130
3131              The actual log name will be `foo_bw.x.log' where `x' is the  in‐
3132              dex  of  the  job  (1..N,  where  N  is  the number of jobs). If
3133              per_job_logs is false, then the filename will  not  include  the
3134              `.x` job index.
3135
3136              The  included  fio_generate_plots  script  uses  gnuplot to turn
3137              these text files into nice graphs. See the LOG FILE FORMATS sec‐
3138              tion for how data is structured within the file.
3139
3140       write_lat_log=str
3141              Same  as write_bw_log, except this option creates I/O submission
3142              (e.g., `name_slat.x.log'), completion (e.g., `name_clat.x.log'),
3143              and  total  (e.g.,  `name_lat.x.log') latency files instead. See
3144              write_bw_log for details about the filename format and  the  LOG
3145              FILE  FORMATS  section  for  how  data  is structured within the
3146              files.
3147
3148       write_hist_log=str
3149              Same as write_bw_log but writes an I/O completion  latency  his‐
3150              togram  file  (e.g.,  `name_hist.x.log') instead. Note that this
3151              file will be empty unless log_hist_msec has also been set.   See
3152              write_bw_log  for  details about the filename format and the LOG
3153              FILE FORMATS section for how data is structured within the file.
3154
3155       write_iops_log=str
3156              Same  as  write_bw_log,  but   writes   an   IOPS   file   (e.g.
3157              `name_iops.x.log`)  instead.  Because fio defaults to individual
3158              I/O logging, the value entry in the IOPS log will  be  1  unless
3159              windowed  logging  (see  log_avg_msec)  has  been  enabled.  See
3160              write_bw_log for details about the filename format and LOG  FILE
3161              FORMATS for how data is structured within the file.
3162
3163       log_entries=int
3164              By  default,  fio  will log an entry in the iops, latency, or bw
3165              log for every I/O that completes. The initial number of I/O  log
3166              entries is 1024.  When the log entries are all used, new log en‐
3167              tries are dynamically allocated.  This dynamic log entry alloca‐
3168              tion  may  negatively impact time-related statistics such as I/O
3169              tail latencies (e.g. 99.9th percentile completion latency). This
3170              option  allows specifying a larger initial number of log entries
3171              to avoid run-time allocation of new log  entries,  resulting  in
3172              more precise time-related I/O statistics.  Also see log_avg_msec
3173              as well. Defaults to 1024.
3174
3175       log_avg_msec=int
3176              By default, fio will log an entry in the iops,  latency,  or  bw
3177              log  for every I/O that completes. When writing to the disk log,
3178              that can quickly grow to a very large size. Setting this  option
3179              makes  fio  average the each log entry over the specified period
3180              of time, reducing the resolution of the log.  See  log_max_value
3181              as  well. Defaults to 0, logging all entries.  Also see LOG FILE
3182              FORMATS section.
3183
3184       log_hist_msec=int
3185              Same as log_avg_msec, but logs entries  for  completion  latency
3186              histograms.  Computing  latency percentiles from averages of in‐
3187              tervals using log_avg_msec is inaccurate.  Setting  this  option
3188              makes  fio  log  histogram  entries over the specified period of
3189              time, reducing log sizes for high IOPS devices  while  retaining
3190              percentile  accuracy. See log_hist_coarseness and write_hist_log
3191              as well.  Defaults to 0, meaning histogram logging is disabled.
3192
3193       log_hist_coarseness=int
3194              Integer ranging from 0 to 6, defining the coarseness of the res‐
3195              olution  of  the  histogram logs enabled with log_hist_msec. For
3196              each increment in coarseness, fio outputs half as many bins. De‐
3197              faults to 0, for which histogram logs contain 1216 latency bins.
3198              See LOG FILE FORMATS section.
3199
3200       log_max_value=bool
3201              If log_avg_msec is set, fio logs the average over  that  window.
3202              If you instead want to log the maximum value, set this option to
3203              1. Defaults to 0, meaning that averaged values are logged.
3204
3205       log_offset=bool
3206              If this is set, the iolog options will include the  byte  offset
3207              for  the I/O entry as well as the other data values. Defaults to
3208              0 meaning that offsets are not present in  logs.  Also  see  LOG
3209              FILE FORMATS section.
3210
3211       log_prio=bool
3212              If  this is set, the iolog options will include the I/O priority
3213              for the I/O entry as well as the other data values. Defaults  to
3214              0  meaning that I/O priorities are not present in logs. Also see
3215              LOG FILE FORMATS section.
3216
3217       log_compression=int
3218              If this is set, fio will compress the I/O logs as  it  goes,  to
3219              keep  the  memory footprint lower. When a log reaches the speci‐
3220              fied size, that chunk is removed and  compressed  in  the  back‐
3221              ground. Given that I/O logs are fairly highly compressible, this
3222              yields a nice memory savings for longer runs.  The  downside  is
3223              that the compression will consume some background CPU cycles, so
3224              it may impact the run. This, however, is also true if  the  log‐
3225              ging  ends  up consuming most of the system memory. So pick your
3226              poison. The I/O logs are saved normally at the end of a run,  by
3227              decompressing  the  chunks and storing them in the specified log
3228              file. This feature depends on the availability of zlib.
3229
3230       log_compression_cpus=str
3231              Define the set of CPUs that are allowed  to  handle  online  log
3232              compression  for the I/O jobs. This can provide better isolation
3233              between performance sensitive jobs, and  background  compression
3234              work. See cpus_allowed for the format used.
3235
3236       log_store_compressed=bool
3237              If  set,  fio  will  store the log files in a compressed format.
3238              They can be decompressed with fio, using the --inflate-log  com‐
3239              mand  line parameter. The files will be stored with a `.fz' suf‐
3240              fix.
3241
3242       log_unix_epoch=bool
3243              If set, fio will log Unix timestamps to the log  files  produced
3244              by enabling write_type_log for each log type, instead of the de‐
3245              fault zero-based timestamps.
3246
3247       log_alternate_epoch=bool
3248              If set, fio will log timestamps based on the epoch used  by  the
3249              clock  specified  in the log_alternate_epoch_clock_id option, to
3250              the log files produced by enabling write_type_log for  each  log
3251              type, instead of the default zero-based timestamps.
3252
3253       log_alternate_epoch_clock_id=int
3254              Specifies the clock_id to be used by clock_gettime to obtain the
3255              alternate epoch if either Blog_unix_epoch or log_alternate_epoch
3256              are  true.  Otherwise  has  no  effect.  Default  value is 0, or
3257              CLOCK_REALTIME.
3258
3259       block_error_percentiles=bool
3260              If set, record errors in trim block-sized units from writes  and
3261              trims and output a histogram of how many trims it took to get to
3262              errors, and what kind of error was encountered.
3263
3264       bwavgtime=int
3265              Average the calculated bandwidth over the given time.  Value  is
3266              specified  in  milliseconds. If the job also does bandwidth log‐
3267              ging through write_bw_log, then the minimum of this  option  and
3268              log_avg_msec will be used. Default: 500ms.
3269
3270       iopsavgtime=int
3271              Average the calculated IOPS over the given time. Value is speci‐
3272              fied in milliseconds. If the job also does IOPS logging  through
3273              write_iops_log, then the minimum of this option and log_avg_msec
3274              will be used. Default: 500ms.
3275
3276       disk_util=bool
3277              Generate disk utilization statistics, if the  platform  supports
3278              it.  Default: true.
3279
3280       disable_lat=bool
3281              Disable  measurements  of total latency numbers. Useful only for
3282              cutting back the number of calls  to  gettimeofday(2),  as  that
3283              does  impact performance at really high IOPS rates. Note that to
3284              really get rid of a large amount of  these  calls,  this  option
3285              must  be  used  with  disable_slat and disable_bw_measurement as
3286              well.
3287
3288       disable_clat=bool
3289              Disable measurements of completion  latency  numbers.  See  dis‐
3290              able_lat.
3291
3292       disable_slat=bool
3293              Disable  measurements  of  submission  latency numbers. See dis‐
3294              able_lat.
3295
3296       disable_bw_measurement=bool, disable_bw=bool
3297              Disable measurements of throughput/bandwidth numbers.  See  dis‐
3298              able_lat.
3299
3300       slat_percentiles=bool
3301              Report submission latency percentiles. Submission latency is not
3302              recorded for synchronous ioengines.
3303
3304       clat_percentiles=bool
3305              Report completion latency percentiles.
3306
3307       lat_percentiles=bool
3308              Report total latency percentiles. Total latency is  the  sum  of
3309              submission latency and completion latency.
3310
3311       percentile_list=float_list
3312              Overwrite  the default list of percentiles for latencies and the
3313              block error histogram. Each number is a floating point number in
3314              the range (0,100], and the maximum length of the list is 20. Use
3315              ':'   to   separate   the   numbers.   For   example,    `--per‐
3316              centile_list=99.5:99.9' will cause fio to report the latency du‐
3317              rations below which 99.5% and 99.9% of  the  observed  latencies
3318              fell, respectively.
3319
3320       significant_figures=int
3321              If  using  --output-format of `normal', set the significant fig‐
3322              ures to this value. Higher values will yield more  precise  IOPS
3323              and  throughput units, while lower values will round. Requires a
3324              minimum value of 1 and a maximum value of 10. Defaults to 4.
3325
3326   Error handling
3327       exitall_on_error
3328              When one job finishes in error, terminate the rest. The  default
3329              is to wait for each job to finish.
3330
3331       continue_on_error=str
3332              Normally fio will exit the job on the first observed failure. If
3333              this option is set, fio will continue the job when  there  is  a
3334              'non-fatal  error' (EIO or EILSEQ) until the runtime is exceeded
3335              or the I/O size specified is completed. If this option is  used,
3336              there  are  two  more  stats  that are appended, the total error
3337              count and the first error. The error field given in the stats is
3338              the first error that was hit during the run.  The allowed values
3339              are:
3340
3341                     none   Exit on any I/O or verify errors.
3342
3343                     read   Continue on read errors, exit on all others.
3344
3345                     write  Continue on write errors, exit on all others.
3346
3347                     io     Continue on any I/O error, exit on all others.
3348
3349                     verify Continue on verify errors, exit on all others.
3350
3351                     all    Continue on all errors.
3352
3353                     0      Backward-compatible alias for 'none'.
3354
3355                     1      Backward-compatible alias for 'all'.
3356
3357       ignore_error=str
3358              Sometimes you want to ignore some errors  during  test  in  that
3359              case  you can specify error list for each error type, instead of
3360              only being able to ignore the default  'non-fatal  error'  using
3361              continue_on_error.                                   `ignore_er‐
3362              ror=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST'   errors   for
3363              given  error  type  is  separated  with ':'. Error may be symbol
3364              ('ENOSPC', 'ENOMEM') or integer. Example:
3365
3366                     ignore_error=EAGAIN,ENOSPC:122
3367
3368              This option  will  ignore  EAGAIN  from  READ,  and  ENOSPC  and
3369              122(EDQUOT)  from  WRITE.  This  option works by overriding con‐
3370              tinue_on_error with the list of errors for each  error  type  if
3371              any.
3372
3373       error_dump=bool
3374              If  set  dump  every  error even if it is non fatal, true by de‐
3375              fault. If disabled only fatal error will be dumped.
3376
3377   Running predefined workloads
3378       Fio includes predefined profiles that mimic the I/O workloads generated
3379       by other tools.
3380
3381       profile=str
3382              The predefined workload to run. Current profiles are:
3383
3384                     tiobench
3385                            Threaded  I/O  bench (tiotest/tiobench) like work‐
3386                            load.
3387
3388                     act    Aerospike Certification Tool (ACT) like workload.
3389
3390       To view a profile's additional options use --cmdhelp  after  specifying
3391       the profile. For example:
3392
3393              $ fio --profile=act --cmdhelp
3394
3395   Act profile options
3396       device-names=str
3397              Devices to use.
3398
3399       load=int
3400              ACT load multiplier. Default: 1.
3401
3402       test-duration=time
3403              How long the entire test takes to run. When the unit is omitted,
3404              the value is given in seconds. Default: 24h.
3405
3406       threads-per-queue=int
3407              Number of read I/O threads per device. Default: 8.
3408
3409       read-req-num-512-blocks=int
3410              Number of 512B blocks to read at the time. Default: 3.
3411
3412       large-block-op-kbytes=int
3413              Size of large block ops in KiB (writes). Default: 131072.
3414
3415       prep   Set to run ACT prep phase.
3416
3417   Tiobench profile options
3418       size=str
3419              Size in MiB.
3420
3421       block=int
3422              Block size in bytes. Default: 4096.
3423
3424       numruns=int
3425              Number of runs.
3426
3427       dir=str
3428              Test directory.
3429
3430       threads=int
3431              Number of threads.
3432

OUTPUT

3434       Fio spits out a lot of output. While running, fio will display the sta‐
3435       tus of the jobs created. An example of that would be:
3436
3437                 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]
3438
3439       The  characters inside the first set of square brackets denote the cur‐
3440       rent status of each thread. The first character is the  first  job  de‐
3441       fined  in  the  job file, and so forth. The possible values (in typical
3442       life cycle order) are:
3443
3444              P      Thread setup, but not started.
3445              C      Thread created.
3446              I      Thread initialized, waiting or generating necessary data.
3447              p      Thread running pre-reading file(s).
3448              /      Thread is in ramp period.
3449              R      Running, doing sequential reads.
3450              r      Running, doing random reads.
3451              W      Running, doing sequential writes.
3452              w      Running, doing random writes.
3453              M      Running, doing mixed sequential reads/writes.
3454              m      Running, doing mixed random reads/writes.
3455              D      Running, doing sequential trims.
3456              d      Running, doing random trims.
3457              F      Running, currently waiting for fsync(2).
3458              V      Running, doing verification of written data.
3459              f      Thread finishing.
3460              E      Thread exited, not reaped by main thread yet.
3461              -      Thread reaped.
3462              X      Thread reaped, exited with an error.
3463              K      Thread reaped, exited due to signal.
3464
3465       Fio will condense the thread string as not to take up more space on the
3466       command  line  than needed. For instance, if you have 10 readers and 10
3467       writers running, the output would look like this:
3468
3469                 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]
3470
3471       Note that the status string is displayed in order, so it's possible  to
3472       tell  which  of the jobs are currently doing what. In the example above
3473       this means that jobs 1--10 are readers and 11--20 are writers.
3474
3475       The other values are fairly self explanatory -- number of threads  cur‐
3476       rently  running and doing I/O, the number of currently open files (f=),
3477       the estimated completion percentage, the rate of I/O since  last  check
3478       (read  speed  listed first, then write speed and optionally trim speed)
3479       in terms of bandwidth and IOPS, and time to completion for the  current
3480       running  group.  It's  impossible  to estimate runtime of the following
3481       groups (if any).
3482
3483       When fio is done (or interrupted by Ctrl-C), it will show the data  for
3484       each  thread, group of threads, and disks in that order. For each over‐
3485       all thread (or group) the output looks like:
3486
3487                 Client1: (groupid=0, jobs=1): err= 0: pid=16109: Sat Jun 24 12:07:54 2017
3488                   write: IOPS=88, BW=623KiB/s (638kB/s)(30.4MiB/50032msec)
3489                     slat (nsec): min=500, max=145500, avg=8318.00, stdev=4781.50
3490                     clat (usec): min=170, max=78367, avg=4019.02, stdev=8293.31
3491                      lat (usec): min=174, max=78375, avg=4027.34, stdev=8291.79
3492                     clat percentiles (usec):
3493                      |  1.00th=[  302],  5.00th=[  326], 10.00th=[  343], 20.00th=[  363],
3494                      | 30.00th=[  392], 40.00th=[  404], 50.00th=[  416], 60.00th=[  445],
3495                      | 70.00th=[  816], 80.00th=[ 6718], 90.00th=[12911], 95.00th=[21627],
3496                      | 99.00th=[43779], 99.50th=[51643], 99.90th=[68682], 99.95th=[72877],
3497                      | 99.99th=[78119]
3498                    bw (  KiB/s): min=  532, max=  686, per=0.10%, avg=622.87, stdev=24.82, samples=  100
3499                    iops        : min=   76, max=   98, avg=88.98, stdev= 3.54, samples=  100
3500                   lat (usec)   : 250=0.04%, 500=64.11%, 750=4.81%, 1000=2.79%
3501                   lat (msec)   : 2=4.16%, 4=1.84%, 10=4.90%, 20=11.33%, 50=5.37%
3502                   lat (msec)   : 100=0.65%
3503                   cpu          : usr=0.27%, sys=0.18%, ctx=12072, majf=0, minf=21
3504                   IO depths    : 1=85.0%, 2=13.1%, 4=1.8%, 8=0.1%, 16=0.0%, 32=0.0%, >=64=0.0%
3505                      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3506                      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3507                      issued rwt: total=0,4450,0, short=0,0,0, dropped=0,0,0
3508                      latency   : target=0, window=0, percentile=100.00%, depth=8
3509
3510       The job name (or  first  job's  name  when  using  group_reporting)  is
3511       printed,  along with the group id, count of jobs being aggregated, last
3512       error id seen (which is 0 when there are no errors),  pid/tid  of  that
3513       thread  and the time the job/group completed. Below are the I/O statis‐
3514       tics for each data direction performed (showing writes in  the  example
3515       above). In the order listed, they denote:
3516
3517              read/write/trim
3518                     The  string  before the colon shows the I/O direction the
3519                     statistics are for. IOPS is the  average  I/Os  performed
3520                     per  second.  BW  is the average bandwidth rate shown as:
3521                     value in power of 2 format (value in power of 10 format).
3522                     The  last  two values show: (total I/O performed in power
3523                     of 2 format / runtime of that thread).
3524
3525              slat   Submission latency (min being the minimum, max being  the
3526                     maximum,  avg being the average, stdev being the standard
3527                     deviation). This is the time it took to submit  the  I/O.
3528                     For sync I/O this row is not displayed as the slat is re‐
3529                     ally the completion latency (since queue/complete is  one
3530                     operation  there).  This value can be in nanoseconds, mi‐
3531                     croseconds or milliseconds --- fio will choose  the  most
3532                     appropriate  base  and  print  that (in the example above
3533                     nanoseconds was the best scale). Note: in --minimal  mode
3534                     latencies are always expressed in microseconds.
3535
3536              clat   Completion  latency. Same names as slat, this denotes the
3537                     time from submission to completion of the I/O pieces. For
3538                     sync  I/O,  clat will usually be equal (or very close) to
3539                     0, as the time from submit to complete is basically  just
3540                     CPU  time  (I/O  has already been done, see slat explana‐
3541                     tion).
3542
3543              lat    Total latency. Same names as slat and clat, this  denotes
3544                     the time from when fio created the I/O unit to completion
3545                     of the I/O operation.
3546
3547              bw     Bandwidth statistics based on samples. Same names as  the
3548                     xlat stats, but also includes the number of samples taken
3549                     (samples) and an approximate percentage of  total  aggre‐
3550                     gate  bandwidth  this thread received in its group (per).
3551                     This last value is only really useful if the  threads  in
3552                     this group are on the same disk, since they are then com‐
3553                     peting for disk access.
3554
3555              iops   IOPS statistics based on samples. Same names as bw.
3556
3557              lat (nsec/usec/msec)
3558                     The distribution of I/O completion latencies. This is the
3559                     time from when I/O leaves fio and when it gets completed.
3560                     Unlike the separate read/write/trim sections  above,  the
3561                     data here and in the remaining sections apply to all I/Os
3562                     for the reporting group. 250=0.04% means  that  0.04%  of
3563                     the  I/Os completed in under 250us. 500=64.11% means that
3564                     64.11% of the I/Os required 250 to 499us for completion.
3565
3566              cpu    CPU usage. User and system time, along with the number of
3567                     context  switches this thread went through, usage of sys‐
3568                     tem and user time, and finally the number  of  major  and
3569                     minor  page faults. The CPU utilization numbers are aver‐
3570                     ages for the jobs in that reporting group, while the con‐
3571                     text and fault counters are summed.
3572
3573              IO depths
3574                     The distribution of I/O depths over the job lifetime. The
3575                     numbers are divided into powers of 2 and each entry  cov‐
3576                     ers  depths  from  that  value up to those that are lower
3577                     than the next entry -- e.g., 16= covers depths from 16 to
3578                     31.  Note  that the range covered by a depth distribution
3579                     entry can be different to the range covered by the equiv‐
3580                     alent submit/complete distribution entry.
3581
3582              IO submit
3583                     How many pieces of I/O were submitting in a single submit
3584                     call. Each entry denotes that amount and below, until the
3585                     previous  entry  -- e.g., 16=100% means that we submitted
3586                     anywhere between 9 to 16 I/Os per submit call. Note  that
3587                     the  range  covered by a submit distribution entry can be
3588                     different to the range covered by  the  equivalent  depth
3589                     distribution entry.
3590
3591              IO complete
3592                     Like  the  above  submit  number, but for completions in‐
3593                     stead.
3594
3595              IO issued rwt
3596                     The number of read/write/trim requests  issued,  and  how
3597                     many of them were short or dropped.
3598
3599              IO latency
3600                     These  values are for latency_target and related options.
3601                     When these options are engaged,  this  section  describes
3602                     the I/O depth required to meet the specified latency tar‐
3603                     get.
3604
3605       After each client has been listed, the group  statistics  are  printed.
3606       They will look like this:
3607
3608                 Run status group 0 (all jobs):
3609                    READ: bw=20.9MiB/s (21.9MB/s), 10.4MiB/s-10.8MiB/s (10.9MB/s-11.3MB/s), io=64.0MiB (67.1MB), run=2973-3069msec
3610                   WRITE: bw=1231KiB/s (1261kB/s), 616KiB/s-621KiB/s (630kB/s-636kB/s), io=64.0MiB (67.1MB), run=52747-53223msec
3611
3612       For each data direction it prints:
3613
3614              bw     Aggregate  bandwidth of threads in this group followed by
3615                     the minimum and maximum bandwidth of all the  threads  in
3616                     this  group.   Values  outside of brackets are power-of-2
3617                     format and those within are the  equivalent  value  in  a
3618                     power-of-10 format.
3619
3620              io     Aggregate I/O performed of all threads in this group. The
3621                     format is the same as bw.
3622
3623              run    The smallest and longest runtimes of the threads in  this
3624                     group.
3625
3626       And  finally,  the disk statistics are printed. This is Linux specific.
3627       They will look like this:
3628
3629                   Disk stats (read/write):
3630                     sda: ios=16398/16511, merge=30/162, ticks=6853/819634, in_queue=826487, util=100.00%
3631
3632       Each value is printed for both reads and writes, with reads first.  The
3633       numbers denote:
3634
3635              ios    Number of I/Os performed by all groups.
3636
3637              merge  Number of merges performed by the I/O scheduler.
3638
3639              ticks  Number of ticks we kept the disk busy.
3640
3641              in_queue
3642                     Total time spent in the disk queue.
3643
3644              util   The  disk  utilization. A value of 100% means we kept the
3645                     disk busy constantly, 50% would be a disk idling half  of
3646                     the time.
3647
3648       It  is  also possible to get fio to dump the current output while it is
3649       running, without terminating the job. To do that,  send  fio  the  USR1
3650       signal.  You  can  also  get  regularly timed dumps by using the --sta‐
3651       tus-interval  parameter,  or  by  creating  a  file  in  `/tmp'   named
3652       `fio-dump-status'.  If  fio  sees this file, it will unlink it and dump
3653       the current output status.
3654

TERSE OUTPUT

3656       For scripted usage where you  typically  want  to  generate  tables  or
3657       graphs  of the results, fio can output the results in a semicolon sepa‐
3658       rated format. The format is one long line of values, such as:
3659
3660                 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%
3661                 A description of this job goes here.
3662
3663       The job description (if provided) follows on a second  line  for  terse
3664       v2.  It appears on the same line for other terse versions.
3665
3666       To  enable  terse  output, use the --minimal or `--output-format=terse'
3667       command line options. The first value is the version of the terse  out‐
3668       put  format. If the output has to be changed for some reason, this num‐
3669       ber will be incremented by 1 to signify that change.
3670
3671       Split up, the format is as follows (comments in brackets denote when  a
3672       field was introduced or whether it's specific to some terse version):
3673
3674                      terse version, fio version [v3], jobname, groupid, error
3675
3676              READ status:
3677
3678                      Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3679                      Submission latency: min, max, mean, stdev (usec)
3680                      Completion latency: min, max, mean, stdev (usec)
3681                      Completion latency percentiles: 20 fields (see below)
3682                      Total latency: min, max, mean, stdev (usec)
3683                      Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3684                      IOPS [v5]: min, max, mean, stdev, number of samples
3685
3686              WRITE status:
3687
3688                      Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3689                      Submission latency: min, max, mean, stdev (usec)
3690                      Completion latency: min, max, mean, stdev (usec)
3691                      Completion latency percentiles: 20 fields (see below)
3692                      Total latency: min, max, mean, stdev (usec)
3693                      Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3694                      IOPS [v5]: min, max, mean, stdev, number of samples
3695
3696              TRIM status [all but version 3]:
3697
3698                      Fields are similar to READ/WRITE status.
3699
3700              CPU usage:
3701
3702                      user, system, context switches, major faults, minor faults
3703
3704              I/O depths:
3705
3706                      <=1, 2, 4, 8, 16, 32, >=64
3707
3708              I/O latencies microseconds:
3709
3710                      <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000
3711
3712              I/O latencies milliseconds:
3713
3714                      <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000
3715
3716              Disk utilization [v3]:
3717
3718                      disk name, read ios, write ios, read merges, write merges, read ticks, write ticks, time spent in queue, disk utilization percentage
3719
3720              Additional Info (dependent on continue_on_error, default off):
3721
3722                      total # errors, first error code
3723
3724              Additional Info (dependent on description being set):
3725
3726                      Text description
3727
3728       Completion  latency  percentiles can be a grouping of up to 20 sets, so
3729       for the terse output fio writes all of them. Each field will look  like
3730       this:
3731
3732                 1.00%=6112
3733
3734       which is the Xth percentile, and the `usec' latency associated with it.
3735
3736       For Disk utilization, all disks used by fio are shown. So for each disk
3737       there will be a disk utilization section.
3738
3739       Below is a single line containing short names for each of the fields in
3740       the minimal output v3, separated by semicolons:
3741
3742                 terse_version_3;fio_version;jobname;groupid;error;read_kb;read_bandwidth_kb;read_iops;read_runtime_ms;read_slat_min_us;read_slat_max_us;read_slat_mean_us;read_slat_dev_us;read_clat_min_us;read_clat_max_us;read_clat_mean_us;read_clat_dev_us;read_clat_pct01;read_clat_pct02;read_clat_pct03;read_clat_pct04;read_clat_pct05;read_clat_pct06;read_clat_pct07;read_clat_pct08;read_clat_pct09;read_clat_pct10;read_clat_pct11;read_clat_pct12;read_clat_pct13;read_clat_pct14;read_clat_pct15;read_clat_pct16;read_clat_pct17;read_clat_pct18;read_clat_pct19;read_clat_pct20;read_tlat_min_us;read_lat_max_us;read_lat_mean_us;read_lat_dev_us;read_bw_min_kb;read_bw_max_kb;read_bw_agg_pct;read_bw_mean_kb;read_bw_dev_kb;write_kb;write_bandwidth_kb;write_iops;write_runtime_ms;write_slat_min_us;write_slat_max_us;write_slat_mean_us;write_slat_dev_us;write_clat_min_us;write_clat_max_us;write_clat_mean_us;write_clat_dev_us;write_clat_pct01;write_clat_pct02;write_clat_pct03;write_clat_pct04;write_clat_pct05;write_clat_pct06;write_clat_pct07;write_clat_pct08;write_clat_pct09;write_clat_pct10;write_clat_pct11;write_clat_pct12;write_clat_pct13;write_clat_pct14;write_clat_pct15;write_clat_pct16;write_clat_pct17;write_clat_pct18;write_clat_pct19;write_clat_pct20;write_tlat_min_us;write_lat_max_us;write_lat_mean_us;write_lat_dev_us;write_bw_min_kb;write_bw_max_kb;write_bw_agg_pct;write_bw_mean_kb;write_bw_dev_kb;cpu_user;cpu_sys;cpu_csw;cpu_mjf;cpu_minf;iodepth_1;iodepth_2;iodepth_4;iodepth_8;iodepth_16;iodepth_32;iodepth_64;lat_2us;lat_4us;lat_10us;lat_20us;lat_50us;lat_100us;lat_250us;lat_500us;lat_750us;lat_1000us;lat_2ms;lat_4ms;lat_10ms;lat_20ms;lat_50ms;lat_100ms;lat_250ms;lat_500ms;lat_750ms;lat_1000ms;lat_2000ms;lat_over_2000ms;disk_name;disk_read_iops;disk_write_iops;disk_read_merges;disk_write_merges;disk_read_ticks;write_ticks;disk_queue_time;disk_util
3743
3744       In  client/server mode terse output differs from what appears when jobs
3745       are run locally. Disk utilization data is  omitted  from  the  standard
3746       terse  output  and for v3 and later appears on its own separate line at
3747       the end of each terse reporting cycle.
3748

JSON OUTPUT

3750       The json output format is intended to be both human readable and conve‐
3751       nient  for  automated  parsing.  For  the most part its sections mirror
3752       those of the normal output. The runtime value is reported in  msec  and
3753       the bw value is reported in 1024 bytes per second units.
3754

JSON+ OUTPUT

3756       The  json+  output format is identical to the json output format except
3757       that it adds a full dump of the completion latency bins. Each bins  ob‐
3758       ject  contains a set of (key, value) pairs where keys are latency dura‐
3759       tions and values count how many I/Os had completion  latencies  of  the
3760       corresponding duration. For example, consider:
3761
3762              "bins"  :  { "87552" : 1, "89600" : 1, "94720" : 1, "96768" : 1,
3763              "97792" : 1, "99840" : 1, "100864" : 2, "103936" : 6, "104960" :
3764              534, "105984" : 5995, "107008" : 7529, ... }
3765
3766       This  data  indicates  that  one I/O required 87,552ns to complete, two
3767       I/Os required 100,864ns to complete, and 7529 I/Os  required  107,008ns
3768       to complete.
3769
3770       Also  included  with  fio is a Python script fio_jsonplus_clat2csv that
3771       takes json+ output and generates CSV-formatted  latency  data  suitable
3772       for plotting.
3773
3774       The  latency  durations actually represent the midpoints of latency in‐
3775       tervals.  For details refer to `stat.h' in the fio source.
3776

TRACE FILE FORMAT

3778       There are two trace file format that you can encounter. The older  (v1)
3779       format  is  unsupported  since  version  1.20-rc3 (March 2008). It will
3780       still be described below in case that you get an old trace and want  to
3781       understand it.
3782
3783       In  any  case  the trace is a simple text file with a single action per
3784       line.
3785
3786       Trace file format v1
3787              Each line represents a single I/O action in the  following  for‐
3788              mat:
3789
3790                     rw, offset, length
3791
3792              where `rw=0/1' for read/write, and the `offset' and `length' en‐
3793              tries being in bytes.
3794
3795              This format is not supported in fio versions >= 1.20-rc3.
3796
3797       Trace file format v2
3798              The second version of the trace file format  was  added  in  fio
3799              version  1.17.  It allows to access more then one file per trace
3800              and has a bigger set of possible file actions.
3801
3802              The first line of the trace file has to be:
3803
3804                     "fio version 2 iolog"
3805
3806              Following this can be lines in two different formats, which  are
3807              described below.
3808
3809              The file management format:
3810                     filename action
3811
3812                     The `filename' is given as an absolute path. The `action'
3813                     can be one of these:
3814
3815                            add    Add the given `filename' to the trace.
3816
3817                            open   Open the file with  the  given  `filename'.
3818                                   The  `filename' has to have been added with
3819                                   the add action before.
3820
3821                            close  Close the file with the  given  `filename'.
3822                                   The file has to have been opened before.
3823
3824              The file I/O action format:
3825                     filename action offset length
3826
3827                     The  `filename'  is given as an absolute path, and has to
3828                     have been added and opened before it  can  be  used  with
3829                     this  format.  The  `offset'  and  `length'  are given in
3830                     bytes. The `action' can be one of these:
3831
3832                            wait   Wait for `offset' microseconds.  Everything
3833                                   below  100 is discarded.  The time is rela‐
3834                                   tive to the previous `wait' statement.
3835
3836                            read   Read `length' bytes  beginning  from  `off‐
3837                                   set'.
3838
3839                            write  Write  `length'  bytes beginning from `off‐
3840                                   set'.
3841
3842                            sync   fsync(2) the file.
3843
3844                            datasync
3845                                   fdatasync(2) the file.
3846
3847                            trim   Trim the given file from the given `offset'
3848                                   for `length' bytes.
3849

I/O REPLAY - MERGING TRACES

3851       Colocation  is a common practice used to get the most out of a machine.
3852       Knowing which workloads play nicely with  each  other  and  which  ones
3853       don't  is  a  much  harder task. While fio can replay workloads concur‐
3854       rently via multiple jobs, it leaves some variability up to  the  sched‐
3855       uler  making  results harder to reproduce. Merging is a way to make the
3856       order of events consistent.
3857
3858       Merging is integrated into  I/O  replay  and  done  when  a  merge_blk‐
3859       trace_file  is  specified.  The  list  of files passed to read_iolog go
3860       through the merge process and output a single file stored to the speci‐
3861       fied  file.  The  output  file is passed on as if it were the only file
3862       passed to read_iolog. An example would look like:
3863
3864              $      fio      --read_iolog="<file1>:<file2>"      --merge_blk‐
3865              trace_file="<output_file>"
3866
3867       Creating  only  the merged file can be done by passing the command line
3868       argument merge-blktrace-only.
3869
3870       Scaling traces can be done to see the relative impact of any particular
3871       trace  being  slowed down or sped up. merge_blktrace_scalars takes in a
3872       colon separated list of percentage scalars. It is index paired with the
3873       files passed to read_iolog.
3874
3875       With  scaling,  it  may  be  desirable to match the running time of all
3876       traces.  This can be done with merge_blktrace_iters. It is index paired
3877       with read_iolog just like merge_blktrace_scalars.
3878
3879       In  an example, given two traces, A and B, each 60s long. If we want to
3880       see the impact of trace A issuing IOs twice as fast and repeat trace  A
3881       over the runtime of trace B, the following can be done:
3882
3883              $     fio    --read_iolog="<trace_a>:"<trace_b>"    --merge_blk‐
3884              trace_file"<output_file>"      --merge_blktrace_scalars="50:100"
3885              --merge_blktrace_iters="2:1"
3886
3887       This runs trace A at 2x the speed twice for approximately the same run‐
3888       time as a single run of trace B.
3889

CPU IDLENESS PROFILING

3891       In some cases, we want to understand CPU overhead in a test. For  exam‐
3892       ple,  we  test patches for the specific goodness of whether they reduce
3893       CPU usage.  Fio implements a balloon approach to create  a  thread  per
3894       CPU  that  runs at idle priority, meaning that it only runs when nobody
3895       else needs the cpu.  By measuring the amount of work completed  by  the
3896       thread, idleness of each CPU can be derived accordingly.
3897
3898       An unit work is defined as touching a full page of unsigned characters.
3899       Mean and standard deviation of time to complete an  unit  work  is  re‐
3900       ported in "unit work" section. Options can be chosen to report detailed
3901       percpu idleness or overall system idleness by aggregating percpu stats.
3902

VERIFICATION AND TRIGGERS

3904       Fio is usually run in one of two ways, when data verification is  done.
3905       The  first is a normal write job of some sort with verify enabled. When
3906       the write phase has completed, fio switches to reads and  verifies  ev‐
3907       erything  it  wrote.  The second model is running just the write phase,
3908       and then later on running the same  job  (but  with  reads  instead  of
3909       writes)  to  repeat the same I/O patterns and verify the contents. Both
3910       of these methods depend on the write phase being completed, as fio oth‐
3911       erwise has no idea how much data was written.
3912
3913       With  verification  triggers,  fio  supports  dumping the current write
3914       state to local files. Then a subsequent read verify workload  can  load
3915       this  state  and know exactly where to stop. This is useful for testing
3916       cases where power is cut to a server in  a  managed  fashion,  for  in‐
3917       stance.
3918
3919       A verification trigger consists of two things:
3920
3921              1) Storing the write state of each job.
3922
3923              2) Executing a trigger command.
3924
3925       The  write state is relatively small, on the order of hundreds of bytes
3926       to single kilobytes. It contains information on the number  of  comple‐
3927       tions done, the last X completions, etc.
3928
3929       A  trigger  is invoked either through creation ('touch') of a specified
3930       file in the system, or through a timeout setting. If fio  is  run  with
3931       `--trigger-file=/tmp/trigger-file',  then it will continually check for
3932       the existence of `/tmp/trigger-file'. When it sees this file,  it  will
3933       fire off the trigger (thus saving state, and executing the trigger com‐
3934       mand).
3935
3936       For client/server runs, there's both a local and remote trigger. If fio
3937       is running as a server backend, it will send the job states back to the
3938       client for safe storage, then execute the remote trigger, if specified.
3939       If  a  local  trigger is specified, the server will still send back the
3940       write state, but the client will then execute the trigger.
3941
3942       Verification trigger example
3943              Let's say we want to run a powercut test on the remote Linux ma‐
3944              chine  'server'.   Our write workload is in `write-test.fio'. We
3945              want to cut power to 'server' at some point during the run,  and
3946              we'll  run  this test from the safety or our local machine, 'lo‐
3947              calbox'. On the server, we'll start the fio backend normally:
3948
3949                     server# fio --server
3950
3951              and on the client, we'll fire off the workload:
3952
3953                     localbox$       fio        --client=server        --trig‐
3954                     ger-file=/tmp/my-trigger  --trigger-remote="bash -c "echo
3955                     b > /proc/sysrq-triger""
3956
3957              We set `/tmp/my-trigger' as the trigger file, and we tell fio to
3958              execute:
3959
3960                     echo b > /proc/sysrq-trigger
3961
3962              on  the  server once it has received the trigger and sent us the
3963              write state. This will work, but it's not really  cutting  power
3964              to  the  server, it's merely abruptly rebooting it. If we have a
3965              remote way of cutting power to the server through IPMI or  simi‐
3966              lar,  we  could do that through a local trigger command instead.
3967              Let's assume we have a script that does IPMI reboot of  a  given
3968              hostname,  ipmi-reboot.  On localbox, we could then have run fio
3969              with a local trigger instead:
3970
3971                     localbox$       fio        --client=server        --trig‐
3972                     ger-file=/tmp/my-trigger --trigger="ipmi-reboot server"
3973
3974              For  this  case,  fio  would  wait for the server to send us the
3975              write state, then execute `ipmi-reboot server'  when  that  hap‐
3976              pened.
3977
3978       Loading verify state
3979              To  load  stored  write state, a read verification job file must
3980              contain the verify_state_load option. If that is set,  fio  will
3981              load  the  previously  stored state. For a local fio run this is
3982              done by loading the files directly, and on a client/server  run,
3983              the  server  backend  will ask the client to send the files over
3984              and load them from there.
3985

LOG FILE FORMATS

3987       Fio supports a variety of log  file  formats,  for  logging  latencies,
3988       bandwidth,  and  IOPS. The logs share a common format, which looks like
3989       this:
3990
3991              time (msec), value, data direction, block size  (bytes),  offset
3992              (bytes), command priority
3993
3994       `Time'  for the log entry is always in milliseconds. The `value' logged
3995       depends on the type of log, it will be one of the following:
3996
3997              Latency log
3998                     Value is latency in nsecs
3999
4000              Bandwidth log
4001                     Value is in KiB/sec
4002
4003              IOPS log
4004                     Value is IOPS
4005
4006       `Data direction' is one of the following:
4007
4008              0      I/O is a READ
4009
4010              1      I/O is a WRITE
4011
4012              2      I/O is a TRIM
4013
4014       The entry's `block size' is always in bytes. The `offset' is the  posi‐
4015       tion  in  bytes from the start of the file for that particular I/O. The
4016       logging of the offset can be toggled with log_offset.
4017
4018       If log_prio is not set, the entry's `Command priority` is 1 for  an  IO
4019       executed  with  the  highest  RT  priority  class  (prioclass=1 or cmd‐
4020       prio_class=1) and 0 otherwise. This is controlled by the prioclass  op‐
4021       tion  and  the  ioengine  specific cmdprio_percentage cmdprio_class op‐
4022       tions. If log_prio is set, the entry's `Command priority` is the prior‐
4023       ity  set for the IO, as a 16-bits hexadecimal number with the lowest 13
4024       bits indicating the priority value (prio and cmdprio options)  and  the
4025       highest  3  bits  indicating  the IO priority class (prioclass and cmd‐
4026       prio_class options).
4027
4028       Fio defaults to logging every individual I/O but when windowed  logging
4029       is  set  through  log_avg_msec,  either the average (by default) or the
4030       maximum (log_max_value is set) `value' seen over the  specified  period
4031       of  time  is recorded. Each `data direction' seen within the window pe‐
4032       riod will aggregate its values in a separate row. Further,  when  using
4033       windowed logging the `block size' and `offset' entries will always con‐
4034       tain 0.
4035

CLIENT / SERVER

4037       Normally fio is invoked as a stand-alone  application  on  the  machine
4038       where  the  I/O  workload should be generated. However, the backend and
4039       frontend of fio can be run separately i.e., the fio server can generate
4040       an  I/O workload on the "Device Under Test" while being controlled by a
4041       client on another machine.
4042
4043       Start the server on the machine which has access to the storage DUT:
4044
4045              $ fio --server=args
4046
4047       where `args' defines what fio listens to. The arguments are of the form
4048       `type,hostname' or `IP,port'. `type' is either `ip' (or ip4) for TCP/IP
4049       v4, `ip6' for TCP/IP v6, or `sock' for  a  local  unix  domain  socket.
4050       `hostname'  is  either a hostname or IP address, and `port' is the port
4051       to listen to (only valid for TCP/IP, not a local  socket).  Some  exam‐
4052       ples:
4053
4054              1) fio --server
4055                     Start  a  fio  server, listening on all interfaces on the
4056                     default port (8765).
4057
4058              2) fio --server=ip:hostname,4444
4059                     Start a fio server, listening on IP belonging to hostname
4060                     and on port 4444.
4061
4062              3) fio --server=ip6:::1,4444
4063                     Start  a  fio server, listening on IPv6 localhost ::1 and
4064                     on port 4444.
4065
4066              4) fio --server=,4444
4067                     Start a fio server, listening on all interfaces  on  port
4068                     4444.
4069
4070              5) fio --server=1.2.3.4
4071                     Start  a  fio  server, listening on IP 1.2.3.4 on the de‐
4072                     fault port.
4073
4074              6) fio --server=sock:/tmp/fio.sock
4075                     Start  a  fio  server,  listening  on  the  local  socket
4076                     `/tmp/fio.sock'.
4077
4078       Once  a  server  is  running,  a "client" can connect to the fio server
4079       with:
4080
4081              $ fio <local-args> --client=<server> <remote-args> <job file(s)>
4082
4083       where `local-args' are arguments for the client where  it  is  running,
4084       `server' is the connect string, and `remote-args' and `job file(s)' are
4085       sent to the server. The `server' string follows the same format  as  it
4086       does on the server side, to allow IP/hostname/socket and port strings.
4087
4088       Fio can connect to multiple servers this way:
4089
4090              $  fio  --client=<server1> <job file(s)> --client=<server2> <job
4091              file(s)>
4092
4093       If the job file is located on the fio server, then  you  can  tell  the
4094       server  to  load  a  local  file  as  well. This is done by using --re‐
4095       mote-config:
4096
4097              $ fio --client=server --remote-config /path/to/file.fio
4098
4099       Then fio will open this local (to the server) job file instead of being
4100       passed one from the client.
4101
4102       If you have many servers (example: 100 VMs/containers), you can input a
4103       pathname of a file containing host IPs/names as the parameter value for
4104       the  --client  option. For example, here is an example `host.list' file
4105       containing 2 hostnames:
4106
4107              host1.your.dns.domain
4108              host2.your.dns.domain
4109
4110       The fio command would then be:
4111
4112              $ fio --client=host.list <job file(s)>
4113
4114       In this mode, you cannot input server-specific parameters or job  files
4115       -- all servers receive the same job file.
4116
4117       In order to let `fio --client' runs use a shared filesystem from multi‐
4118       ple hosts, `fio --client' now prepends the IP address of the server  to
4119       the filename. For example, if fio is using the directory `/mnt/nfs/fio'
4120       and is writing filename `fileio.tmp', with a --client  `hostfile'  con‐
4121       taining  two  hostnames  `h1' and `h2' with IP addresses 192.168.10.120
4122       and 192.168.10.121, then fio will create two files:
4123
4124              /mnt/nfs/fio/192.168.10.120.fileio.tmp
4125              /mnt/nfs/fio/192.168.10.121.fileio.tmp
4126
4127       Terse output in client/server mode will differ slightly  from  what  is
4128       produced when fio is run in stand-alone mode. See the terse output sec‐
4129       tion for details.
4130

AUTHORS

4132       fio was written by Jens Axboe <axboe@kernel.dk>.
4133       This man page was written  by  Aaron  Carroll  <aaronc@cse.unsw.edu.au>
4134       based on documentation by Jens Axboe.
4135       This  man  page  was  rewritten by Tomohiro Kusumi <tkusumi@tuxera.com>
4136       based on documentation by Jens Axboe.
4137

REPORTING BUGS

4139       Report bugs to the fio mailing list <fio@vger.kernel.org>.
4140       See REPORTING-BUGS.
4141
4142       REPORTING-BUGS: http://git.kernel.dk/cgit/fio/plain/REPORTING-BUGS
4143

SEE ALSO

4145       For further documentation see HOWTO and README.
4146       Sample jobfiles are available in the `examples/' directory.
4147       These are typically located under `/usr/share/doc/fio'.
4148
4149       HOWTO: http://git.kernel.dk/cgit/fio/plain/HOWTO
4150       README: http://git.kernel.dk/cgit/fio/plain/README
4151
4152
4153
4154User Manual                       August 2017                           fio(1)
Impressum