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
63              argument  is  given,  all  of  them are tested. Alternatively, a
64              comma separated list can be passed, in which case the given ones
65              are 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
199       define 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
244              interpreted  as  seconds  unless  otherwise specified. Accepts a
245              suffix 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              With  `kb_base=1024'  (the default), the unit prefixes are oppo‐
281              site from those specified in the SI and IEC  80000-13  standards
282              to provide compatibility with old scripts. For example, 4k means
283              4096.
284
285              For quantities of data, an optional unit of 'B' may be  included
286              (e.g., 'kB' is the same as 'k').
287
288              The  *integer  suffix*  is  not  case sensitive (e.g., m/mi mean
289              mebi/mega, not milli). 'b' and 'B' both mean byte, not bit.
290
291              Examples with `kb_base=1000':
292
293                     4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
294                     1 MiB: 1048576, 1m, 1024k
295                     1 MB: 1000000, 1mi, 1000ki
296                     1 TiB: 1073741824, 1t, 1024m, 1048576k
297                     1 TB: 1000000000, 1ti, 1000mi, 1000000ki
298
299              Examples with `kb_base=1024' (default):
300
301                     4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
302                     1 MiB: 1048576, 1m, 1024k
303                     1 MB: 1000000, 1mi, 1000ki
304                     1 TiB: 1073741824, 1t, 1024m, 1048576k
305                     1 TB: 1000000000, 1ti, 1000mi, 1000000ki
306
307              To specify times (units are not case sensitive):
308
309                     D means days
310                     H means hours
311                     M mean minutes
312                     s or sec means seconds (default)
313                     ms or msec means milliseconds
314                     us or usec means microseconds
315
316              If the option accepts an upper and lower range, use a colon  ':'
317              or minus '-' to separate such values. See irange parameter type.
318              If the lower value specified happens to be larger than the upper
319              value the two values are swapped.
320
321       bool   Boolean.  Usually parsed as an integer, however only defined for
322              true and false (1 and 0).
323
324       irange Integer range with suffix. Allows value range to be given,  such
325              as  1024-4096.  A  colon may also be used as the separator, e.g.
326              1k:4k. If the option allows two sets  of  ranges,  they  can  be
327              specified  with  a  ',' or '/' delimiter: 1k-4k/8k-32k. Also see
328              int parameter type.
329
330       float_list
331              A list of floating point numbers, separated by a ':' character.
332

JOB PARAMETERS

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

OUTPUT

3050       Fio spits out a lot of output. While running, fio will display the sta‐
3051       tus of the jobs created. An example of that would be:
3052
3053                 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]
3054
3055       The characters inside the first set of square brackets denote the  cur‐
3056       rent  status  of  each  thread.  The  first  character is the first job
3057       defined in the job file, and so forth. The possible values (in  typical
3058       life cycle order) are:
3059
3060              P      Thread setup, but not started.
3061              C      Thread created.
3062              I      Thread initialized, waiting or generating necessary data.
3063              p      Thread running pre-reading file(s).
3064              /      Thread is in ramp period.
3065              R      Running, doing sequential reads.
3066              r      Running, doing random reads.
3067              W      Running, doing sequential writes.
3068              w      Running, doing random writes.
3069              M      Running, doing mixed sequential reads/writes.
3070              m      Running, doing mixed random reads/writes.
3071              D      Running, doing sequential trims.
3072              d      Running, doing random trims.
3073              F      Running, currently waiting for fsync(2).
3074              V      Running, doing verification of written data.
3075              f      Thread finishing.
3076              E      Thread exited, not reaped by main thread yet.
3077              -      Thread reaped.
3078              X      Thread reaped, exited with an error.
3079              K      Thread reaped, exited due to signal.
3080
3081       Fio will condense the thread string as not to take up more space on the
3082       command line than needed. For instance, if you have 10 readers  and  10
3083       writers running, the output would look like this:
3084
3085                 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]
3086
3087       Note  that the status string is displayed in order, so it's possible to
3088       tell which of the jobs are currently doing what. In the  example  above
3089       this means that jobs 1--10 are readers and 11--20 are writers.
3090
3091       The  other values are fairly self explanatory -- number of threads cur‐
3092       rently running and doing I/O, the number of currently open files  (f=),
3093       the  estimated  completion percentage, the rate of I/O since last check
3094       (read speed listed first, then write speed and optionally  trim  speed)
3095       in  terms of bandwidth and IOPS, and time to completion for the current
3096       running group. It's impossible to estimate  runtime  of  the  following
3097       groups (if any).
3098
3099       When  fio is done (or interrupted by Ctrl-C), it will show the data for
3100       each thread, group of threads, and disks in that order. For each  over‐
3101       all thread (or group) the output looks like:
3102
3103                 Client1: (groupid=0, jobs=1): err= 0: pid=16109: Sat Jun 24 12:07:54 2017
3104                   write: IOPS=88, BW=623KiB/s (638kB/s)(30.4MiB/50032msec)
3105                     slat (nsec): min=500, max=145500, avg=8318.00, stdev=4781.50
3106                     clat (usec): min=170, max=78367, avg=4019.02, stdev=8293.31
3107                      lat (usec): min=174, max=78375, avg=4027.34, stdev=8291.79
3108                     clat percentiles (usec):
3109                      |  1.00th=[  302],  5.00th=[  326], 10.00th=[  343], 20.00th=[  363],
3110                      | 30.00th=[  392], 40.00th=[  404], 50.00th=[  416], 60.00th=[  445],
3111                      | 70.00th=[  816], 80.00th=[ 6718], 90.00th=[12911], 95.00th=[21627],
3112                      | 99.00th=[43779], 99.50th=[51643], 99.90th=[68682], 99.95th=[72877],
3113                      | 99.99th=[78119]
3114                    bw (  KiB/s): min=  532, max=  686, per=0.10%, avg=622.87, stdev=24.82, samples=  100
3115                    iops        : min=   76, max=   98, avg=88.98, stdev= 3.54, samples=  100
3116                   lat (usec)   : 250=0.04%, 500=64.11%, 750=4.81%, 1000=2.79%
3117                   lat (msec)   : 2=4.16%, 4=1.84%, 10=4.90%, 20=11.33%, 50=5.37%
3118                   lat (msec)   : 100=0.65%
3119                   cpu          : usr=0.27%, sys=0.18%, ctx=12072, majf=0, minf=21
3120                   IO depths    : 1=85.0%, 2=13.1%, 4=1.8%, 8=0.1%, 16=0.0%, 32=0.0%, >=64=0.0%
3121                      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3122                      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3123                      issued rwt: total=0,4450,0, short=0,0,0, dropped=0,0,0
3124                      latency   : target=0, window=0, percentile=100.00%, depth=8
3125
3126       The  job  name  (or  first  job's  name  when using group_reporting) is
3127       printed, along with the group id, count of jobs being aggregated,  last
3128       error  id  seen  (which is 0 when there are no errors), pid/tid of that
3129       thread and the time the job/group completed. Below are the I/O  statis‐
3130       tics  for  each data direction performed (showing writes in the example
3131       above). In the order listed, they denote:
3132
3133              read/write/trim
3134                     The string before the colon shows the I/O  direction  the
3135                     statistics  are  for.  IOPS is the average I/Os performed
3136                     per second. BW is the average bandwidth  rate  shown  as:
3137                     value in power of 2 format (value in power of 10 format).
3138                     The last two values show: (total I/O performed  in  power
3139                     of 2 format / runtime of that thread).
3140
3141              slat   Submission  latency (min being the minimum, max being the
3142                     maximum, avg being the average, stdev being the  standard
3143                     deviation).  This  is the time it took to submit the I/O.
3144                     For sync I/O this row is not displayed  as  the  slat  is
3145                     really  the  completion  latency (since queue/complete is
3146                     one operation there).  This value can be in  nanoseconds,
3147                     microseconds or milliseconds --- fio will choose the most
3148                     appropriate base and print that  (in  the  example  above
3149                     nanoseconds  was the best scale). Note: in --minimal mode
3150                     latencies are always expressed in microseconds.
3151
3152              clat   Completion latency. Same names as slat, this denotes  the
3153                     time from submission to completion of the I/O pieces. For
3154                     sync I/O, clat will usually be equal (or very  close)  to
3155                     0,  as the time from submit to complete is basically just
3156                     CPU time (I/O has already been done,  see  slat  explana‐
3157                     tion).
3158
3159              lat    Total  latency. Same names as slat and clat, this denotes
3160                     the time from when fio created the I/O unit to completion
3161                     of the I/O operation.
3162
3163              bw     Bandwidth  statistics based on samples. Same names as the
3164                     xlat stats, but also includes the number of samples taken
3165                     (samples)  and  an approximate percentage of total aggre‐
3166                     gate bandwidth this thread received in its  group  (per).
3167                     This  last  value is only really useful if the threads in
3168                     this group are on the same disk, since they are then com‐
3169                     peting for disk access.
3170
3171              iops   IOPS statistics based on samples. Same names as bw.
3172
3173              lat (nsec/usec/msec)
3174                     The distribution of I/O completion latencies. This is the
3175                     time from when I/O leaves fio and when it gets completed.
3176                     Unlike  the  separate read/write/trim sections above, the
3177                     data here and in the remaining sections apply to all I/Os
3178                     for  the  reporting  group. 250=0.04% means that 0.04% of
3179                     the I/Os completed in under 250us. 500=64.11% means  that
3180                     64.11% of the I/Os required 250 to 499us for completion.
3181
3182              cpu    CPU usage. User and system time, along with the number of
3183                     context switches this thread went through, usage of  sys‐
3184                     tem  and  user  time, and finally the number of major and
3185                     minor page faults. The CPU utilization numbers are  aver‐
3186                     ages for the jobs in that reporting group, while the con‐
3187                     text and fault counters are summed.
3188
3189              IO depths
3190                     The distribution of I/O depths over the job lifetime. The
3191                     numbers  are divided into powers of 2 and each entry cov‐
3192                     ers depths from that value up to  those  that  are  lower
3193                     than the next entry -- e.g., 16= covers depths from 16 to
3194                     31. Note that the range covered by a  depth  distribution
3195                     entry can be different to the range covered by the equiv‐
3196                     alent submit/complete distribution entry.
3197
3198              IO submit
3199                     How many pieces of I/O were submitting in a single submit
3200                     call. Each entry denotes that amount and below, until the
3201                     previous entry -- e.g., 16=100% means that  we  submitted
3202                     anywhere  between 9 to 16 I/Os per submit call. Note that
3203                     the range covered by a submit distribution entry  can  be
3204                     different  to  the  range covered by the equivalent depth
3205                     distribution entry.
3206
3207              IO complete
3208                     Like  the  above  submit  number,  but  for   completions
3209                     instead.
3210
3211              IO issued rwt
3212                     The  number  of  read/write/trim requests issued, and how
3213                     many of them were short or dropped.
3214
3215              IO latency
3216                     These values are for latency_target and related  options.
3217                     When  these  options  are engaged, this section describes
3218                     the I/O depth required to meet the specified latency tar‐
3219                     get.
3220
3221       After  each  client  has been listed, the group statistics are printed.
3222       They will look like this:
3223
3224                 Run status group 0 (all jobs):
3225                    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
3226                   WRITE: bw=1231KiB/s (1261kB/s), 616KiB/s-621KiB/s (630kB/s-636kB/s), io=64.0MiB (67.1MB), run=52747-53223msec
3227
3228       For each data direction it prints:
3229
3230              bw     Aggregate bandwidth of threads in this group followed  by
3231                     the  minimum  and maximum bandwidth of all the threads in
3232                     this group.  Values outside of  brackets  are  power-of-2
3233                     format  and  those  within  are the equivalent value in a
3234                     power-of-10 format.
3235
3236              io     Aggregate I/O performed of all threads in this group. The
3237                     format is the same as bw.
3238
3239              run    The  smallest and longest runtimes of the threads in this
3240                     group.
3241
3242       And finally, the disk statistics are printed. This is  Linux  specific.
3243       They will look like this:
3244
3245                   Disk stats (read/write):
3246                     sda: ios=16398/16511, merge=30/162, ticks=6853/819634, in_queue=826487, util=100.00%
3247
3248       Each  value is printed for both reads and writes, with reads first. The
3249       numbers denote:
3250
3251              ios    Number of I/Os performed by all groups.
3252
3253              merge  Number of merges performed by the I/O scheduler.
3254
3255              ticks  Number of ticks we kept the disk busy.
3256
3257              in_queue
3258                     Total time spent in the disk queue.
3259
3260              util   The disk utilization. A value of 100% means we  kept  the
3261                     disk  busy constantly, 50% would be a disk idling half of
3262                     the time.
3263
3264       It is also possible to get fio to dump the current output while  it  is
3265       running,  without  terminating  the  job. To do that, send fio the USR1
3266       signal. You can also get regularly timed  dumps  by  using  the  --sta‐
3267       tus-interval   parameter,  or  by  creating  a  file  in  `/tmp'  named
3268       `fio-dump-status'. If fio sees this file, it will unlink  it  and  dump
3269       the current output status.
3270

TERSE OUTPUT

3272       For  scripted  usage  where  you  typically  want to generate tables or
3273       graphs of the results, fio can output the results in a semicolon  sepa‐
3274       rated format. The format is one long line of values, such as:
3275
3276                 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%
3277                 A description of this job goes here.
3278
3279       The  job  description  (if provided) follows on a second line for terse
3280       v2.  It appears on the same line for other terse versions.
3281
3282       To enable terse output, use the  --minimal  or  `--output-format=terse'
3283       command  line options. The first value is the version of the terse out‐
3284       put format. If the output has to be changed for some reason, this  num‐
3285       ber will be incremented by 1 to signify that change.
3286
3287       Split  up, the format is as follows (comments in brackets denote when a
3288       field was introduced or whether it's specific to some terse version):
3289
3290                      terse version, fio version [v3], jobname, groupid, error
3291
3292              READ status:
3293
3294                      Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3295                      Submission latency: min, max, mean, stdev (usec)
3296                      Completion latency: min, max, mean, stdev (usec)
3297                      Completion latency percentiles: 20 fields (see below)
3298                      Total latency: min, max, mean, stdev (usec)
3299                      Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3300                      IOPS [v5]: min, max, mean, stdev, number of samples
3301
3302              WRITE status:
3303
3304                      Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3305                      Submission latency: min, max, mean, stdev (usec)
3306                      Completion latency: min, max, mean, stdev (usec)
3307                      Completion latency percentiles: 20 fields (see below)
3308                      Total latency: min, max, mean, stdev (usec)
3309                      Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3310                      IOPS [v5]: min, max, mean, stdev, number of samples
3311
3312              TRIM status [all but version 3]:
3313
3314                      Fields are similar to READ/WRITE status.
3315
3316              CPU usage:
3317
3318                      user, system, context switches, major faults, minor faults
3319
3320              I/O depths:
3321
3322                      <=1, 2, 4, 8, 16, 32, >=64
3323
3324              I/O latencies microseconds:
3325
3326                      <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000
3327
3328              I/O latencies milliseconds:
3329
3330                      <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000
3331
3332              Disk utilization [v3]:
3333
3334                      disk name, read ios, write ios, read merges, write merges, read ticks, write ticks, time spent in queue, disk utilization percentage
3335
3336              Additional Info (dependent on continue_on_error, default off):
3337
3338                      total # errors, first error code
3339
3340              Additional Info (dependent on description being set):
3341
3342                      Text description
3343
3344       Completion latency percentiles can be a grouping of up to 20  sets,  so
3345       for  the terse output fio writes all of them. Each field will look like
3346       this:
3347
3348                 1.00%=6112
3349
3350       which is the Xth percentile, and the `usec' latency associated with it.
3351
3352       For Disk utilization, all disks used by fio are shown. So for each disk
3353       there will be a disk utilization section.
3354
3355       Below is a single line containing short names for each of the fields in
3356       the minimal output v3, separated by semicolons:
3357
3358                 terse_version_3;fio_version;jobname;groupid;error;read_kb;read_bandwidth;read_iops;read_runtime_ms;read_slat_min;read_slat_max;read_slat_mean;read_slat_dev;read_clat_min;read_clat_max;read_clat_mean;read_clat_dev;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;read_lat_max;read_lat_mean;read_lat_dev;read_bw_min;read_bw_max;read_bw_agg_pct;read_bw_mean;read_bw_dev;write_kb;write_bandwidth;write_iops;write_runtime_ms;write_slat_min;write_slat_max;write_slat_mean;write_slat_dev;write_clat_min;write_clat_max;write_clat_mean;write_clat_dev;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;write_lat_max;write_lat_mean;write_lat_dev;write_bw_min;write_bw_max;write_bw_agg_pct;write_bw_mean;write_bw_dev;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
3359
3360       In client/server mode terse output differs from what appears when  jobs
3361       are  run  locally.  Disk  utilization data is omitted from the standard
3362       terse output and for v3 and later appears on its own separate  line  at
3363       the end of each terse reporting cycle.
3364

JSON OUTPUT

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

JSON+ OUTPUT

3372       The json+ output format is identical to the json output  format  except
3373       that  it  adds  a  full  dump of the completion latency bins. Each bins
3374       object contains a set of (key, value)  pairs  where  keys  are  latency
3375       durations  and  values  count how many I/Os had completion latencies of
3376       the corresponding duration. For example, consider:
3377
3378              "bins" : { "87552" : 1, "89600" : 1, "94720" : 1, "96768"  :  1,
3379              "97792" : 1, "99840" : 1, "100864" : 2, "103936" : 6, "104960" :
3380              534, "105984" : 5995, "107008" : 7529, ... }
3381
3382       This data indicates that one I/O required  87,552ns  to  complete,  two
3383       I/Os  required  100,864ns to complete, and 7529 I/Os required 107,008ns
3384       to complete.
3385
3386       Also included with fio is a Python  script  fio_jsonplus_clat2csv  that
3387       takes  json+  output  and generates CSV-formatted latency data suitable
3388       for plotting.
3389
3390       The latency durations  actually  represent  the  midpoints  of  latency
3391       intervals.  For details refer to `stat.h' in the fio source.
3392

TRACE FILE FORMAT

3394       There  are two trace file format that you can encounter. The older (v1)
3395       format is unsupported since version  1.20-rc3  (March  2008).  It  will
3396       still  be described below in case that you get an old trace and want to
3397       understand it.
3398
3399       In any case the trace is a simple text file with a  single  action  per
3400       line.
3401
3402       Trace file format v1
3403              Each  line  represents a single I/O action in the following for‐
3404              mat:
3405
3406                     rw, offset, length
3407
3408              where `rw=0/1' for read/write, and  the  `offset'  and  `length'
3409              entries being in bytes.
3410
3411              This format is not supported in fio versions >= 1.20-rc3.
3412
3413       Trace file format v2
3414              The  second  version  of  the trace file format was added in fio
3415              version 1.17. It allows to access more then one file  per  trace
3416              and has a bigger set of possible file actions.
3417
3418              The first line of the trace file has to be:
3419
3420                     "fio version 2 iolog"
3421
3422              Following  this can be lines in two different formats, which are
3423              described below.
3424
3425              The file management format:
3426                     filename action
3427
3428                     The `filename' is given as an absolute path. The `action'
3429                     can be one of these:
3430
3431                            add    Add the given `filename' to the trace.
3432
3433                            open   Open  the  file  with the given `filename'.
3434                                   The `filename' has to have been added  with
3435                                   the add action before.
3436
3437                            close  Close  the  file with the given `filename'.
3438                                   The file has to have been opened before.
3439
3440              The file I/O action format:
3441                     filename action offset length
3442
3443                     The `filename' is given as an absolute path, and  has  to
3444                     have  been  added  and  opened before it can be used with
3445                     this format. The  `offset'  and  `length'  are  given  in
3446                     bytes. The `action' can be one of these:
3447
3448                            wait   Wait  for `offset' microseconds. Everything
3449                                   below 100 is discarded.  The time is  rela‐
3450                                   tive to the previous `wait' statement.
3451
3452                            read   Read  `length'  bytes  beginning from `off‐
3453                                   set'.
3454
3455                            write  Write `length' bytes beginning  from  `off‐
3456                                   set'.
3457
3458                            sync   fsync(2) the file.
3459
3460                            datasync
3461                                   fdatasync(2) the file.
3462
3463                            trim   Trim the given file from the given `offset'
3464                                   for `length' bytes.
3465

I/O REPLAY - MERGING TRACES

3467       Colocation is a common practice used to get the most out of a  machine.
3468       Knowing  which  workloads  play  nicely  with each other and which ones
3469       don't is a much harder task. While fio  can  replay  workloads  concur‐
3470       rently  via  multiple jobs, it leaves some variability up to the sched‐
3471       uler making results harder to reproduce. Merging is a way to  make  the
3472       order of events consistent.
3473
3474       Merging  is  integrated  into  I/O  replay  and  done when a merge_blk‐
3475       trace_file is specified. The list of  files  passed  to  read_iolog  go
3476       through the merge process and output a single file stored to the speci‐
3477       fied file. The output file is passed on as if it  were  the  only  file
3478       passed to read_iolog. An example would look like:
3479
3480              $      fio      --read_iolog="<file1>:<file2>"      --merge_blk‐
3481              trace_file="<output_file>"
3482
3483       Creating only the merged file can be done by passing the  command  line
3484       argument merge-blktrace-only.
3485
3486       Scaling traces can be done to see the relative impact of any particular
3487       trace being slowed down or sped up. merge_blktrace_scalars takes  in  a
3488       colon separated list of percentage scalars. It is index paired with the
3489       files passed to read_iolog.
3490
3491       With scaling, it may be desirable to match  the  running  time  of  all
3492       traces.  This can be done with merge_blktrace_iters. It is index paired
3493       with read_iolog just like merge_blktrace_scalars.
3494
3495       In an example, given two traces, A and B, each 60s long. If we want  to
3496       see  the impact of trace A issuing IOs twice as fast and repeat trace A
3497       over the runtime of trace B, the following can be done:
3498
3499              $    fio    --read_iolog="<trace_a>:"<trace_b>"     --merge_blk‐
3500              trace_file"<output_file>"      --merge_blktrace_scalars="50:100"
3501              --merge_blktrace_iters="2:1"
3502
3503       This runs trace A at 2x the speed twice for approximately the same run‐
3504       time as a single run of trace B.
3505

CPU IDLENESS PROFILING

3507       In  some cases, we want to understand CPU overhead in a test. For exam‐
3508       ple, we test patches for the specific goodness of whether  they  reduce
3509       CPU  usage.   Fio  implements a balloon approach to create a thread per
3510       CPU that runs at idle priority, meaning that it only runs  when  nobody
3511       else  needs  the cpu.  By measuring the amount of work completed by the
3512       thread, idleness of each CPU can be derived accordingly.
3513
3514       An unit work is defined as touching a full page of unsigned characters.
3515       Mean  and  standard  deviation  of  time  to  complete  an unit work is
3516       reported in "unit work"  section.  Options  can  be  chosen  to  report
3517       detailed percpu idleness or overall system idleness by aggregating per‐
3518       cpu stats.
3519

VERIFICATION AND TRIGGERS

3521       Fio is usually run in one of two ways, when data verification is  done.
3522       The  first is a normal write job of some sort with verify enabled. When
3523       the write phase has completed,  fio  switches  to  reads  and  verifies
3524       everything  it wrote. The second model is running just the write phase,
3525       and then later on running the same  job  (but  with  reads  instead  of
3526       writes)  to  repeat the same I/O patterns and verify the contents. Both
3527       of these methods depend on the write phase being completed, as fio oth‐
3528       erwise has no idea how much data was written.
3529
3530       With  verification  triggers,  fio  supports  dumping the current write
3531       state to local files. Then a subsequent read verify workload  can  load
3532       this  state  and know exactly where to stop. This is useful for testing
3533       cases where power is  cut  to  a  server  in  a  managed  fashion,  for
3534       instance.
3535
3536       A verification trigger consists of two things:
3537
3538              1) Storing the write state of each job.
3539
3540              2) Executing a trigger command.
3541
3542       The  write state is relatively small, on the order of hundreds of bytes
3543       to single kilobytes. It contains information on the number  of  comple‐
3544       tions done, the last X completions, etc.
3545
3546       A  trigger  is invoked either through creation ('touch') of a specified
3547       file in the system, or through a timeout setting. If fio  is  run  with
3548       `--trigger-file=/tmp/trigger-file',  then it will continually check for
3549       the existence of `/tmp/trigger-file'. When it sees this file,  it  will
3550       fire off the trigger (thus saving state, and executing the trigger com‐
3551       mand).
3552
3553       For client/server runs, there's both a local and remote trigger. If fio
3554       is running as a server backend, it will send the job states back to the
3555       client for safe storage, then execute the remote trigger, if specified.
3556       If  a  local  trigger is specified, the server will still send back the
3557       write state, but the client will then execute the trigger.
3558
3559       Verification trigger example
3560              Let's say we want to run a powercut test  on  the  remote  Linux
3561              machine 'server'.  Our write workload is in `write-test.fio'. We
3562              want to cut power to 'server' at some point during the run,  and
3563              we'll  run  this  test  from  the  safety  or our local machine,
3564              'localbox'. On the server, we'll start the fio backend normally:
3565
3566                     server# fio --server
3567
3568              and on the client, we'll fire off the workload:
3569
3570                     localbox$       fio        --client=server        --trig‐
3571                     ger-file=/tmp/my-trigger  --trigger-remote="bash -c "echo
3572                     b > /proc/sysrq-triger""
3573
3574              We set `/tmp/my-trigger' as the trigger file, and we tell fio to
3575              execute:
3576
3577                     echo b > /proc/sysrq-trigger
3578
3579              on  the  server once it has received the trigger and sent us the
3580              write state. This will work, but it's not really  cutting  power
3581              to  the  server, it's merely abruptly rebooting it. If we have a
3582              remote way of cutting power to the server through IPMI or  simi‐
3583              lar,  we  could do that through a local trigger command instead.
3584              Let's assume we have a script that does IPMI reboot of  a  given
3585              hostname,  ipmi-reboot.  On localbox, we could then have run fio
3586              with a local trigger instead:
3587
3588                     localbox$       fio        --client=server        --trig‐
3589                     ger-file=/tmp/my-trigger --trigger="ipmi-reboot server"
3590
3591              For  this  case,  fio  would  wait for the server to send us the
3592              write state, then execute `ipmi-reboot server'  when  that  hap‐
3593              pened.
3594
3595       Loading verify state
3596              To  load  stored  write state, a read verification job file must
3597              contain the verify_state_load option. If that is set,  fio  will
3598              load  the  previously  stored state. For a local fio run this is
3599              done by loading the files directly, and on a client/server  run,
3600              the  server  backend  will ask the client to send the files over
3601              and load them from there.
3602

LOG FILE FORMATS

3604       Fio supports a variety of log  file  formats,  for  logging  latencies,
3605       bandwidth,  and  IOPS. The logs share a common format, which looks like
3606       this:
3607
3608              time (msec), value, data direction, block size  (bytes),  offset
3609              (bytes), command priority
3610
3611       `Time'  for the log entry is always in milliseconds. The `value' logged
3612       depends on the type of log, it will be one of the following:
3613
3614              Latency log
3615                     Value is latency in nsecs
3616
3617              Bandwidth log
3618                     Value is in KiB/sec
3619
3620              IOPS log
3621                     Value is IOPS
3622
3623       `Data direction' is one of the following:
3624
3625              0      I/O is a READ
3626
3627              1      I/O is a WRITE
3628
3629              2      I/O is a TRIM
3630
3631       The entry's `block size' is always in bytes. The `offset' is the  posi‐
3632       tion  in  bytes from the start of the file for that particular I/O. The
3633       logging of the offset can be toggled with log_offset.
3634
3635       `Command priority` is 0 for normal priority and 1  for  high  priority.
3636       This is controlled by the ioengine specific cmdprio_percentage.
3637
3638       Fio  defaults to logging every individual I/O but when windowed logging
3639       is set through log_avg_msec, either the average  (by  default)  or  the
3640       maximum  (log_max_value  is set) `value' seen over the specified period
3641       of time is recorded. Each  `data  direction'  seen  within  the  window
3642       period will aggregate its values in a separate row. Further, when using
3643       windowed logging the `block size' and `offset' entries will always con‐
3644       tain 0.
3645

CLIENT / SERVER

3647       Normally  fio  is  invoked  as a stand-alone application on the machine
3648       where the I/O workload should be generated. However,  the  backend  and
3649       frontend of fio can be run separately i.e., the fio server can generate
3650       an I/O workload on the "Device Under Test" while being controlled by  a
3651       client on another machine.
3652
3653       Start the server on the machine which has access to the storage DUT:
3654
3655              $ fio --server=args
3656
3657       where `args' defines what fio listens to. The arguments are of the form
3658       `type,hostname' or `IP,port'. `type' is either `ip' (or ip4) for TCP/IP
3659       v4,  `ip6'  for  TCP/IP  v6,  or `sock' for a local unix domain socket.
3660       `hostname' is either a hostname or IP address, and `port' is  the  port
3661       to  listen  to  (only valid for TCP/IP, not a local socket). Some exam‐
3662       ples:
3663
3664              1) fio --server
3665                     Start a fio server, listening on all  interfaces  on  the
3666                     default port (8765).
3667
3668              2) fio --server=ip:hostname,4444
3669                     Start a fio server, listening on IP belonging to hostname
3670                     and on port 4444.
3671
3672              3) fio --server=ip6:::1,4444
3673                     Start a fio server, listening on IPv6 localhost  ::1  and
3674                     on port 4444.
3675
3676              4) fio --server=,4444
3677                     Start  a  fio server, listening on all interfaces on port
3678                     4444.
3679
3680              5) fio --server=1.2.3.4
3681                     Start a fio  server,  listening  on  IP  1.2.3.4  on  the
3682                     default port.
3683
3684              6) fio --server=sock:/tmp/fio.sock
3685                     Start  a  fio  server,  listening  on  the  local  socket
3686                     `/tmp/fio.sock'.
3687
3688       Once a server is running, a "client" can  connect  to  the  fio  server
3689       with:
3690
3691              $ fio <local-args> --client=<server> <remote-args> <job file(s)>
3692
3693       where  `local-args'  are  arguments for the client where it is running,
3694       `server' is the connect string, and `remote-args' and `job file(s)' are
3695       sent  to  the server. The `server' string follows the same format as it
3696       does on the server side, to allow IP/hostname/socket and port strings.
3697
3698       Fio can connect to multiple servers this way:
3699
3700              $ fio --client=<server1> <job file(s)>  --client=<server2>  <job
3701              file(s)>
3702
3703       If  the  job  file  is located on the fio server, then you can tell the
3704       server  to  load  a  local  file  as  well.  This  is  done  by   using
3705       --remote-config:
3706
3707              $ fio --client=server --remote-config /path/to/file.fio
3708
3709       Then fio will open this local (to the server) job file instead of being
3710       passed one from the client.
3711
3712       If you have many servers (example: 100 VMs/containers), you can input a
3713       pathname of a file containing host IPs/names as the parameter value for
3714       the --client option. For example, here is an example  `host.list'  file
3715       containing 2 hostnames:
3716
3717              host1.your.dns.domain
3718              host2.your.dns.domain
3719
3720       The fio command would then be:
3721
3722              $ fio --client=host.list <job file(s)>
3723
3724       In  this mode, you cannot input server-specific parameters or job files
3725       -- all servers receive the same job file.
3726
3727       In order to let `fio --client' runs use a shared filesystem from multi‐
3728       ple  hosts, `fio --client' now prepends the IP address of the server to
3729       the filename. For example, if fio is using the directory `/mnt/nfs/fio'
3730       and  is  writing filename `fileio.tmp', with a --client `hostfile' con‐
3731       taining two hostnames `h1' and `h2' with  IP  addresses  192.168.10.120
3732       and 192.168.10.121, then fio will create two files:
3733
3734              /mnt/nfs/fio/192.168.10.120.fileio.tmp
3735              /mnt/nfs/fio/192.168.10.121.fileio.tmp
3736
3737       Terse  output  in  client/server mode will differ slightly from what is
3738       produced when fio is run in stand-alone mode. See the terse output sec‐
3739       tion for details.
3740

AUTHORS

3742       fio was written by Jens Axboe <axboe@kernel.dk>.
3743       This  man  page  was  written by Aaron Carroll <aaronc@cse.unsw.edu.au>
3744       based on documentation by Jens Axboe.
3745       This man page was rewritten  by  Tomohiro  Kusumi  <tkusumi@tuxera.com>
3746       based on documentation by Jens Axboe.
3747

REPORTING BUGS

3749       Report bugs to the fio mailing list <fio@vger.kernel.org>.
3750       See REPORTING-BUGS.
3751
3752       REPORTING-BUGS: http://git.kernel.dk/cgit/fio/plain/REPORTING-BUGS
3753

SEE ALSO

3755       For further documentation see HOWTO and README.
3756       Sample jobfiles are available in the `examples/' directory.
3757       These are typically located under `/usr/share/doc/fio'.
3758
3759       HOWTO: http://git.kernel.dk/cgit/fio/plain/HOWTO
3760       README: http://git.kernel.dk/cgit/fio/plain/README
3761
3762
3763
3764User Manual                       August 2017                           fio(1)
Impressum