1fio(1) General Commands Manual fio(1)
2
3
4
6 fio - flexible I/O tester
7
9 fio [options] [jobfile]...
10
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
18 --debug=type
19 Enable verbose tracing type of various fio actions. May be `all'
20 for all types or individual types separated by a comma (e.g.
21 `--debug=file,mem' will enable file and memory debugging).
22 `help' will list all available tracing options.
23
24 --parse-only
25 Parse options only, don't start any I/O.
26
27 --merge-blktrace-only
28 Merge blktraces only, don't start any I/O.
29
30 --output=filename
31 Write output to filename.
32
33 --output-format=format
34 Set the reporting format to `normal', `terse', `json', or
35 `json+'. Multiple formats can be selected, separate by a comma.
36 `terse' is a CSV based format. `json+' is like `json', except it
37 adds a full dump of the latency buckets.
38
39 --bandwidth-log
40 Generate aggregate bandwidth logs.
41
42 --minimal
43 Print statistics in a terse, semicolon-delimited format.
44
45 --append-terse
46 Print statistics in selected mode AND terse, semicolon-delimited
47 format. Deprecated, use --output-format instead to select mul‐
48 tiple formats.
49
50 --terse-version=version
51 Set terse version output format (default `3', or `2', `4', `5').
52
53 --version
54 Print version information and exit.
55
56 --help Print a summary of the command line options and exit.
57
58 --cpuclock-test
59 Perform test and validation of internal CPU clock.
60
61 --crctest=[test]
62 Test the speed of the built-in checksumming functions. If no ar‐
63 gument is given, all of them are tested. Alternatively, a comma
64 separated list can be passed, in which case the given ones are
65 tested.
66
67 --cmdhelp=command
68 Print help information for command. May be `all' for all com‐
69 mands.
70
71 --enghelp=[ioengine[,command]]
72 List all commands defined by ioengine, or print help for command
73 defined by ioengine. If no ioengine is given, list all available
74 ioengines.
75
76 --showcmd
77 Convert given jobfiles 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
189 Any parameters following the options will be assumed to be job files,
190 unless they match a job file parameter. Multiple job files can be
191 listed and each job file will be regarded as a separate group. Fio will
192 stonewall execution between each group.
193
194 Fio accepts one or more job files describing what it is supposed to do.
195 The job file format is the classic ini file, where the names enclosed
196 in [] brackets define the job name. You are free to use any ASCII name
197 you want, except *global* which has special meaning. Following the job
198 name is a sequence of zero or more parameters, one per line, that de‐
199 fine the behavior of the job. If the first character in a line is a ';'
200 or a '#', the entire line is discarded as a comment.
201
202 A *global* section sets defaults for the jobs described in that file. A
203 job may override a *global* section parameter, and a job file may even
204 have several *global* sections if so desired. A job is only affected by
205 a *global* section residing above it.
206
207 The --cmdhelp option also lists all options. If used with an command
208 argument, --cmdhelp will detail the given command.
209
210 See the `examples/' directory for inspiration on how to write job
211 files. Note the copyright and license requirements currently apply to
212 `examples/' files.
213
214 Note that the maximum length of a line in the job file is 8192 bytes.
215
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
239 The following parameter types are used.
240
241 str String. A sequence of alphanumeric characters.
242
243 time Integer with possible time suffix. Without a unit value is in‐
244 terpreted as seconds unless otherwise specified. Accepts a suf‐
245 fix of 'd' for days, 'h' for hours, 'm' for minutes, 's' for
246 seconds, 'ms' (or 'msec') for milliseconds and 'us' (or 'usec')
247 for microseconds. For example, use 10m for 10 minutes.
248
249 int Integer. A whole number value, which may contain an integer pre‐
250 fix and an integer suffix.
251
252 [*integer prefix*] **number** [*integer suffix*]
253
254 The optional *integer prefix* specifies the number's base. The
255 default is decimal. *0x* specifies hexadecimal.
256
257 The optional *integer suffix* specifies the number's units, and
258 includes an optional unit prefix and an optional unit. For quan‐
259 tities of data, the default unit is bytes. For quantities of
260 time, the default unit is seconds unless otherwise specified.
261
262 With `kb_base=1000', fio follows international standards for
263 unit prefixes. To specify power-of-10 decimal values defined in
264 the International System of Units (SI):
265
266 K means kilo (K) or 1000
267 M means mega (M) or 1000**2
268 G means giga (G) or 1000**3
269 T means tera (T) or 1000**4
270 P means peta (P) or 1000**5
271
272 To specify power-of-2 binary values defined in IEC 80000-13:
273
274 Ki means kibi (Ki) or 1024
275 Mi means mebi (Mi) or 1024**2
276 Gi means gibi (Gi) or 1024**3
277 Ti means tebi (Ti) or 1024**4
278 Pi means pebi (Pi) or 1024**5
279
280 For Zone Block Device Mode:
281
282 z means Zone
283 With `kb_base=1024' (the default), the unit prefixes are oppo‐
284 site from those specified in the SI and IEC 80000-13 standards
285 to provide compatibility with old scripts. For example, 4k means
286 4096.
287
288 For quantities of data, an optional unit of 'B' may be included
289 (e.g., 'kB' is the same as 'k').
290
291 The *integer suffix* is not case sensitive (e.g., m/mi mean
292 mebi/mega, not milli). 'b' and 'B' both mean byte, not bit.
293
294 Examples with `kb_base=1000':
295
296 4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
297 1 MiB: 1048576, 1m, 1024k
298 1 MB: 1000000, 1mi, 1000ki
299 1 TiB: 1073741824, 1t, 1024m, 1048576k
300 1 TB: 1000000000, 1ti, 1000mi, 1000000ki
301
302 Examples with `kb_base=1024' (default):
303
304 4 KiB: 4096, 4096b, 4096B, 4k, 4kb, 4kB, 4K, 4KB
305 1 MiB: 1048576, 1m, 1024k
306 1 MB: 1000000, 1mi, 1000ki
307 1 TiB: 1073741824, 1t, 1024m, 1048576k
308 1 TB: 1000000000, 1ti, 1000mi, 1000000ki
309
310 To specify times (units are not case sensitive):
311
312 D means days
313 H means hours
314 M mean minutes
315 s or sec means seconds (default)
316 ms or msec means milliseconds
317 us or usec means microseconds
318
319 `z' suffix specifies that the value is measured in zones. Value
320 is recalculated once block device's zone size becomes known.
321
322 If the option accepts an upper and lower range, use a colon ':'
323 or minus '-' to separate such values. See irange parameter type.
324 If the lower value specified happens to be larger than the upper
325 value the two values are swapped.
326
327 bool Boolean. Usually parsed as an integer, however only defined for
328 true and false (1 and 0).
329
330 irange Integer range with suffix. Allows value range to be given, such
331 as 1024-4096. A colon may also be used as the separator, e.g.
332 1k:4k. If the option allows two sets of ranges, they can be
333 specified with a ',' or '/' delimiter: 1k-4k/8k-32k. Also see
334 int parameter type.
335
336 float_list
337 A list of floating point numbers, separated by a ':' character.
338
340 With the above in mind, here follows the complete list of fio job pa‐
341 rameters.
342
343 Units
344 kb_base=int
345 Select the interpretation of unit prefixes in input parameters.
346
347 1000 Inputs comply with IEC 80000-13 and the Interna‐
348 tional System of Units (SI). Use:
349
350 - power-of-2 values with IEC prefixes (e.g., KiB)
351 - power-of-10 values with SI prefixes (e.g., kB)
352
353 1024 Compatibility mode (default). To avoid breaking
354 old scripts:
355
356 - power-of-2 values with SI prefixes
357 - power-of-10 values with IEC prefixes
358
359 See bs for more details on input parameters.
360
361 Outputs always use correct prefixes. Most outputs include both
362 side-by-side, like:
363
364 bw=2383.3kB/s (2327.4KiB/s)
365
366 If only one value is reported, then kb_base selects the one to
367 use:
368
369 1000 -- SI prefixes
370 1024 -- IEC prefixes
371
372 unit_base=int
373 Base unit for reporting. Allowed values are:
374
375 0 Use auto-detection (default).
376
377 8 Byte based.
378
379 1 Bit based.
380
381 Job description
382 name=str
383 ASCII name of the job. This may be used to override the name
384 printed by fio for this job. Otherwise the job name is used. On
385 the command line this parameter has the special purpose of also
386 signaling the start of a new job.
387
388 description=str
389 Text description of the job. Doesn't do anything except dump
390 this text description when this job is run. It's not parsed.
391
392 loops=int
393 Run the specified number of iterations of this job. Used to re‐
394 peat the same workload a given number of times. Defaults to 1.
395
396 numjobs=int
397 Create the specified number of clones of this job. Each clone of
398 job is spawned as an independent thread or process. May be used
399 to setup a larger number of threads/processes doing the same
400 thing. Each thread is reported separately; to see statistics for
401 all clones as a whole, use group_reporting in conjunction with
402 new_group. See --max-jobs. Default: 1.
403
404 Time related parameters
405 runtime=time
406 Tell fio to terminate processing after the specified period of
407 time. It can be quite hard to determine for how long a specified
408 job will run, so this parameter is handy to cap the total run‐
409 time to a given time. When the unit is omitted, the value is in‐
410 terpreted in seconds.
411
412 time_based
413 If set, fio will run for the duration of the runtime specified
414 even if the file(s) are completely read or written. It will sim‐
415 ply loop over the same workload as many times as the runtime al‐
416 lows.
417
418 startdelay=irange(int)
419 Delay the start of job for the specified amount of time. Can be
420 a single value or a range. When given as a range, each thread
421 will choose a value randomly from within the range. Value is in
422 seconds if a unit is omitted.
423
424 ramp_time=time
425 If set, fio will run the specified workload for this amount of
426 time before logging any performance numbers. Useful for letting
427 performance settle before logging results, thus minimizing the
428 runtime required for stable results. Note that the ramp_time is
429 considered lead in time for a job, thus it will increase the to‐
430 tal runtime if a special timeout or runtime is specified. When
431 the unit is omitted, the value is given in seconds.
432
433 clocksource=str
434 Use the given clocksource as the base of timing. The supported
435 options are:
436
437 gettimeofday
438 gettimeofday(2)
439
440 clock_gettime
441 clock_gettime(2)
442
443 cpu Internal CPU clock source
444
445 cpu is the preferred clocksource if it is reliable, as it is
446 very fast (and fio is heavy on time calls). Fio will automati‐
447 cally use this clocksource if it's supported and considered re‐
448 liable on the system it is running on, unless another clock‐
449 source is specifically set. For x86/x86-64 CPUs, this means sup‐
450 porting TSC Invariant.
451
452 gtod_reduce=bool
453 Enable all of the gettimeofday(2) reducing options (dis‐
454 able_clat, disable_slat, disable_bw_measurement) plus reduce
455 precision of the timeout somewhat to really shrink the gettime‐
456 ofday(2) call count. With this option enabled, we only do about
457 0.4% of the gettimeofday(2) calls we would have done if all time
458 keeping was enabled.
459
460 gtod_cpu=int
461 Sometimes it's cheaper to dedicate a single thread of execution
462 to just getting the current time. Fio (and databases, for in‐
463 stance) are very intensive on gettimeofday(2) calls. With this
464 option, you can set one CPU aside for doing nothing but logging
465 current time to a shared memory location. Then the other
466 threads/processes that run I/O workloads need only copy that
467 segment, instead of entering the kernel with a gettimeofday(2)
468 call. The CPU set aside for doing these time calls will be ex‐
469 cluded from other uses. Fio will manually clear it from the CPU
470 mask of other jobs.
471
472 Target file/device
473 directory=str
474 Prefix filenames with this directory. Used to place files in a
475 different location than `./'. You can specify a number of direc‐
476 tories by separating the names with a ':' character. These di‐
477 rectories will be assigned equally distributed to job clones
478 created by numjobs as long as they are using generated file‐
479 names. If specific filename(s) are set fio will use the first
480 listed directory, and thereby matching the filename semantic
481 (which generates a file for each clone if not specified, but
482 lets all clones use the same file if set).
483
484 See the filename option for information on how to escape ':'
485 characters within the directory path itself.
486
487 Note: To control the directory fio will use for internal state
488 files use --aux-path.
489
490 filename=str
491 Fio normally makes up a filename based on the job name, thread
492 number, and file number (see filename_format). If you want to
493 share files between threads in a job or several jobs with fixed
494 file paths, specify a filename for each of them to override the
495 default. If the ioengine is file based, you can specify a number
496 of files by separating the names with a ':' colon. So if you
497 wanted a job to open `/dev/sda' and `/dev/sdb' as the two work‐
498 ing files, you would use `filename=/dev/sda:/dev/sdb'. This also
499 means that whenever this option is specified, nrfiles is ig‐
500 nored. The size of regular files specified by this option will
501 be size divided by number of files unless an explicit size is
502 specified by filesize.
503
504 Each colon in the wanted path must be escaped with a '\' charac‐
505 ter. For instance, if the path is `/dev/dsk/foo@3,0:c' then you
506 would use `filename=/dev/dsk/foo@3,0\:c' and if the path is
507 `F:\filename' then you would use `filename=F\:\filename'.
508
509 On Windows, disk devices are accessed as `\\.\PhysicalDrive0'
510 for the first device, `\\.\PhysicalDrive1' for the second etc.
511 Note: Windows and FreeBSD prevent write access to areas of the
512 disk containing in-use data (e.g. filesystems).
513
514 The filename `-' is a reserved name, meaning *stdin* or *std‐
515 out*. Which of the two depends on the read/write direction set.
516
517 filename_format=str
518 If sharing multiple files between jobs, it is usually necessary
519 to have fio generate the exact names that you want. By default,
520 fio will name a file based on the default file format specifica‐
521 tion of `jobname.jobnumber.filenumber'. With this option, that
522 can be customized. Fio will recognize and replace the following
523 keywords in this string:
524
525 $jobname
526 The name of the worker thread or process.
527
528 $clientuid
529 IP of the fio process when using client/server
530 mode.
531
532 $jobnum
533 The incremental number of the worker thread or
534 process.
535
536 $filenum
537 The incremental number of the file for that worker
538 thread or process.
539
540 To have dependent jobs share a set of files, this option can be
541 set to have fio generate filenames that are shared between the
542 two. For instance, if `testfiles.$filenum' is specified, file
543 number 4 for any job will be named `testfiles.4'. The default of
544 `$jobname.$jobnum.$filenum' will be used if no other format
545 specifier is given.
546
547 If you specify a path then the directories will be created up to
548 the main directory for the file. So for example if you specify
549 `a/b/c/$jobnum` then the directories a/b/c will be created be‐
550 fore the file setup part of the job. If you specify directory
551 then the path will be relative that directory, otherwise it is
552 treated as the absolute path.
553
554 unique_filename=bool
555 To avoid collisions between networked clients, fio defaults to
556 prefixing any generated filenames (with a directory specified)
557 with the source of the client connecting. To disable this behav‐
558 ior, set this option to 0.
559
560 opendir=str
561 Recursively open any files below directory str.
562
563 lockfile=str
564 Fio defaults to not locking any files before it does I/O to
565 them. If a file or file descriptor is shared, fio can serialize
566 I/O to that file to make the end result consistent. This is
567 usual for emulating real workloads that share files. The lock
568 modes are:
569
570 none No locking. The default.
571
572 exclusive
573 Only one thread or process may do I/O at a time,
574 excluding all others.
575
576 readwrite
577 Read-write locking on the file. Many readers may
578 access the file at the same time, but writes get
579 exclusive access.
580
581 nrfiles=int
582 Number of files to use for this job. Defaults to 1. The size of
583 files will be size divided by this unless explicit size is spec‐
584 ified by filesize. Files are created for each thread separately,
585 and each file will have a file number within its name by de‐
586 fault, as explained in filename section.
587
588 openfiles=int
589 Number of files to keep open at the same time. Defaults to the
590 same as nrfiles, can be set smaller to limit the number simulta‐
591 neous opens.
592
593 file_service_type=str
594 Defines how fio decides which file from a job to service next.
595 The following types are defined:
596
597 random Choose a file at random.
598
599 roundrobin
600 Round robin over opened files. This is the de‐
601 fault.
602
603 sequential
604 Finish one file before moving on to the next. Mul‐
605 tiple files can still be open depending on open‐
606 files.
607
608 zipf Use a Zipf distribution to decide what file to ac‐
609 cess.
610
611 pareto Use a Pareto distribution to decide what file to
612 access.
613
614 normal Use a Gaussian (normal) distribution to decide
615 what file to access.
616
617 gauss Alias for normal.
618
619 For random, roundrobin, and sequential, a postfix can be ap‐
620 pended to tell fio how many I/Os to issue before switching to a
621 new file. For example, specifying `file_service_type=random:8'
622 would cause fio to issue 8 I/Os before selecting a new file at
623 random. For the non-uniform distributions, a floating point
624 postfix can be given to influence how the distribution is
625 skewed. See random_distribution for a description of how that
626 would work.
627
628 ioscheduler=str
629 Attempt to switch the device hosting the file to the specified
630 I/O scheduler before running. If the file is a pipe, a character
631 device file or if device hosting the file could not be deter‐
632 mined, this option is ignored.
633
634 create_serialize=bool
635 If true, serialize the file creation for the jobs. This may be
636 handy to avoid interleaving of data files, which may greatly de‐
637 pend on the filesystem used and even the number of processors in
638 the system. Default: true.
639
640 create_fsync=bool
641 fsync(2) the data file after creation. This is the default.
642
643 create_on_open=bool
644 If true, don't pre-create files but allow the job's open() to
645 create a file when it's time to do I/O. Default: false -- pre-
646 create all necessary files when the job starts.
647
648 create_only=bool
649 If true, fio will only run the setup phase of the job. If files
650 need to be laid out or updated on disk, only that will be done
651 -- the actual job contents are not executed. Default: false.
652
653 allow_file_create=bool
654 If true, fio is permitted to create files as part of its work‐
655 load. If this option is false, then fio will error out if the
656 files it needs to use don't already exist. Default: true.
657
658 allow_mounted_write=bool
659 If this isn't set, fio will abort jobs that are destructive
660 (e.g. that write) to what appears to be a mounted device or par‐
661 tition. This should help catch creating inadvertently destruc‐
662 tive tests, not realizing that the test will destroy data on the
663 mounted file system. Note that some platforms don't allow writ‐
664 ing against a mounted device regardless of this option. Default:
665 false.
666
667 pre_read=bool
668 If this is given, files will be pre-read into memory before
669 starting the given I/O operation. This will also clear the in‐
670 validate flag, since it is pointless to pre-read and then drop
671 the cache. This will only work for I/O engines that are seek-
672 able, since they allow you to read the same data multiple times.
673 Thus it will not work on non-seekable I/O engines (e.g. network,
674 splice). Default: false.
675
676 unlink=bool
677 Unlink the job files when done. Not the default, as repeated
678 runs of that job would then waste time recreating the file set
679 again and again. Default: false.
680
681 unlink_each_loop=bool
682 Unlink job files after each iteration or loop. Default: false.
683
684 zonemode=str
685 Accepted values are:
686
687 none The zonerange, zonesize zonecapacity and zoneskip
688 parameters are ignored.
689
690 strided
691 I/O happens in a single zone until zonesize bytes
692 have been transferred. After that number of bytes
693 has been transferred processing of the next zone
694 starts. The zonecapacity parameter is ignored.
695
696 zbd Zoned block device mode. I/O happens sequentially
697 in each zone, even if random I/O has been se‐
698 lected. Random I/O happens across all zones in‐
699 stead of being restricted to a single zone. Trim
700 is handled using a zone reset operation. Trim only
701 considers non-empty sequential write required and
702 sequential write preferred zones.
703
704 zonerange=int
705 For zonemode=strided, this is the size of a single zone. See
706 also zonesize and zoneskip.
707
708 For zonemode=zbd, this parameter is ignored.
709
710 zonesize=int
711 For zonemode=strided, this is the number of bytes to transfer
712 before skipping zoneskip bytes. If this parameter is smaller
713 than zonerange then only a fraction of each zone with zonerange
714 bytes will be accessed. If this parameter is larger than zon‐
715 erange then each zone will be accessed multiple times before
716 skipping to the next zone.
717
718 For zonemode=zbd, this is the size of a single zone. The zon‐
719 erange parameter is ignored in this mode. For a job accessing a
720 zoned block device, the specified zonesize must be 0 or equal to
721 the device zone size. For a regular block device or file, the
722 specified zonesize must be at least 512B.
723
724 zonecapacity=int
725 For zonemode=zbd, this defines the capacity of a single zone,
726 which is the accessible area starting from the zone start ad‐
727 dress. This parameter only applies when using zonemode=zbd in
728 combination with regular block devices. If not specified it de‐
729 faults to the zone size. If the target device is a zoned block
730 device, the zone capacity is obtained from the device informa‐
731 tion and this option is ignored.
732
733 zoneskip=int[z]
734 For zonemode=strided, the number of bytes to skip after zonesize
735 bytes of data have been transferred.
736
737 For zonemode=zbd, the zonesize aligned number of bytes to skip
738 once a zone is fully written (write workloads) or all written
739 data in the zone have been read (read workloads). This parameter
740 is valid only for sequential workloads and ignored for random
741 workloads. For read workloads, see also read_beyond_wp.
742
743
744 read_beyond_wp=bool
745 This parameter applies to zonemode=zbd only.
746
747 Zoned block devices are block devices that consist of multiple
748 zones. Each zone has a type, e.g. conventional or sequential. A
749 conventional zone can be written at any offset that is a multi‐
750 ple of the block size. Sequential zones must be written sequen‐
751 tially. The position at which a write must occur is called the
752 write pointer. A zoned block device can be either host managed
753 or host aware. For host managed devices the host must ensure
754 that writes happen sequentially. Fio recognizes host managed de‐
755 vices and serializes writes to sequential zones for these de‐
756 vices.
757
758 If a read occurs in a sequential zone beyond the write pointer
759 then the zoned block device will complete the read without read‐
760 ing any data from the storage medium. Since such reads lead to
761 unrealistically high bandwidth and IOPS numbers fio only reads
762 beyond the write pointer if explicitly told to do so. Default:
763 false.
764
765 max_open_zones=int
766 When running a random write test across an entire drive many
767 more zones will be open than in a typical application workload.
768 Hence this command line option that allows to limit the number
769 of open zones. The number of open zones is defined as the number
770 of zones to which write commands are issued by all threads/pro‐
771 cesses.
772
773 job_max_open_zones=int
774 Limit on the number of simultaneously opened zones per single
775 thread/process.
776
777 ignore_zone_limits=bool
778 If this option is used, fio will ignore the maximum number of
779 open zones limit of the zoned block device in use, thus allowing
780 the option max_open_zones value to be larger than the device re‐
781 ported limit. Default: false.
782
783 zone_reset_threshold=float
784 A number between zero and one that indicates the ratio of logi‐
785 cal blocks with data to the total number of logical blocks in
786 the test above which zones should be reset periodically.
787
788 zone_reset_frequency=float
789 A number between zero and one that indicates how often a zone
790 reset should be issued if the zone reset threshold has been ex‐
791 ceeded. A zone reset is submitted after each (1 / zone_re‐
792 set_frequency) write requests. This and the previous parameter
793 can be used to simulate garbage collection activity.
794
795
796 I/O type
797 direct=bool
798 If value is true, use non-buffered I/O. This is usually O_DI‐
799 RECT. Note that OpenBSD and ZFS on Solaris don't support direct
800 I/O. On Windows the synchronous ioengines don't support direct
801 I/O. Default: false.
802
803 atomic=bool
804 If value is true, attempt to use atomic direct I/O. Atomic
805 writes are guaranteed to be stable once acknowledged by the op‐
806 erating system. Only Linux supports O_ATOMIC right now.
807
808 buffered=bool
809 If value is true, use buffered I/O. This is the opposite of the
810 direct option. Defaults to true.
811
812 readwrite=str, rw=str
813 Type of I/O pattern. Accepted values are:
814
815 read Sequential reads.
816
817 write Sequential writes.
818
819 trim Sequential trims (Linux block devices and SCSI
820 character devices only).
821
822 randread
823 Random reads.
824
825 randwrite
826 Random writes.
827
828 randtrim
829 Random trims (Linux block devices and SCSI charac‐
830 ter devices only).
831
832 rw,readwrite
833 Sequential mixed reads and writes.
834
835 randrw Random mixed reads and writes.
836
837 trimwrite
838 Sequential trim+write sequences. Blocks will be
839 trimmed first, then the same blocks will be writ‐
840 ten to. So if `io_size=64K' is specified, Fio will
841 trim a total of 64K bytes and also write 64K bytes
842 on the same trimmed blocks. This behaviour will be
843 consistent with `number_ios' or other Fio options
844 limiting the total bytes or number of I/O's.
845
846 randtrimwrite
847 Like trimwrite , but uses random offsets rather
848 than sequential writes.
849
850 Fio defaults to read if the option is not specified. For the
851 mixed I/O types, the default is to split them 50/50. For certain
852 types of I/O the result may still be skewed a bit, since the
853 speed may be different.
854
855 It is possible to specify the number of I/Os to do before get‐
856 ting a new offset by appending `:<nr>' to the end of the string
857 given. For a random read, it would look like `rw=randread:8' for
858 passing in an offset modifier with a value of 8. If the suffix
859 is used with a sequential I/O pattern, then the `<nr>' value
860 specified will be added to the generated offset for each I/O
861 turning sequential I/O into sequential I/O with holes. For in‐
862 stance, using `rw=write:4k' will skip 4k for every write. Also
863 see the rw_sequencer option.
864
865 rw_sequencer=str
866 If an offset modifier is given by appending a number to the
867 `rw=str' line, then this option controls how that number modi‐
868 fies the I/O offset being generated. Accepted values are:
869
870 sequential
871 Generate sequential offset.
872
873 identical
874 Generate the same offset.
875
876 sequential is only useful for random I/O, where fio would nor‐
877 mally generate a new random offset for every I/O. If you append
878 e.g. 8 to randread, you would get a new random offset for every
879 8 I/Os. The result would be a seek for only every 8 I/Os, in‐
880 stead of for every I/O. Use `rw=randread:8' to specify that. As
881 sequential I/O is already sequential, setting sequential for
882 that would not result in any differences. identical behaves in a
883 similar fashion, except it sends the same offset 8 number of
884 times before generating a new offset.
885
886 unified_rw_reporting=str
887 Fio normally reports statistics on a per data direction basis,
888 meaning that reads, writes, and trims are accounted and reported
889 separately. This option determines whether fio reports the re‐
890 sults normally, summed together, or as both options. Accepted
891 values are:
892
893 none Normal statistics reporting.
894
895 mixed Statistics are summed per data direction and reported to‐
896 gether.
897
898 both Statistics are reported normally, followed by the mixed
899 statistics.
900
901 0 Backward-compatible alias for none.
902
903 1 Backward-compatible alias for mixed.
904
905 2 Alias for both.
906
907 randrepeat=bool
908 Seed the random number generator used for random I/O patterns in
909 a predictable way so the pattern is repeatable across runs. De‐
910 fault: true.
911
912 allrandrepeat=bool
913 Seed all random number generators in a predictable way so re‐
914 sults are repeatable across runs. Default: false.
915
916 randseed=int
917 Seed the random number generators based on this seed value, to
918 be able to control what sequence of output is being generated.
919 If not set, the random sequence depends on the randrepeat set‐
920 ting.
921
922 fallocate=str
923 Whether pre-allocation is performed when laying down files. Ac‐
924 cepted values are:
925
926 none Do not pre-allocate space.
927
928 native Use a platform's native pre-allocation call but
929 fall back to none behavior if it fails/is not im‐
930 plemented.
931
932 posix Pre-allocate via posix_fallocate(3).
933
934 keep Pre-allocate via fallocate(2) with FAL‐
935 LOC_FL_KEEP_SIZE set.
936
937 truncate
938 Extend file to final size using ftruncate|(2) in‐
939 stead of allocating.
940
941 0 Backward-compatible alias for none.
942
943 1 Backward-compatible alias for posix.
944
945 May not be available on all supported platforms. keep is only
946 available on Linux. If using ZFS on Solaris this cannot be set
947 to posix because ZFS doesn't support pre-allocation. Default:
948 native if any pre-allocation methods except truncate are avail‐
949 able, none if not.
950
951 Note that using truncate on Windows will interact surprisingly
952 with non-sequential write patterns. When writing to a file that
953 has been extended by setting the end-of-file information, Win‐
954 dows will backfill the unwritten portion of the file up to that
955 offset with zeroes before issuing the new write. This means that
956 a single small write to the end of an extended file will stall
957 until the entire file has been filled with zeroes.
958
959 fadvise_hint=str
960 Use posix_fadvise(2) or posix_madvise(2) to advise the kernel
961 what I/O patterns are likely to be issued. Accepted values are:
962
963 0 Backwards compatible hint for "no hint".
964
965 1 Backwards compatible hint for "advise with fio
966 workload type". This uses FADV_RANDOM for a random
967 workload, and FADV_SEQUENTIAL for a sequential
968 workload.
969
970 sequential
971 Advise using FADV_SEQUENTIAL.
972
973 random Advise using FADV_RANDOM.
974
975 write_hint=str
976 Use fcntl(2) to advise the kernel what life time to expect from
977 a write. Only supported on Linux, as of version 4.13. Accepted
978 values are:
979
980 none No particular life time associated with this file.
981
982 short Data written to this file has a short life time.
983
984 medium Data written to this file has a medium life time.
985
986 long Data written to this file has a long life time.
987
988 extreme
989 Data written to this file has a very long life
990 time.
991
992 The values are all relative to each other, and no absolute mean‐
993 ing should be associated with them.
994
995 offset=int[%|z]
996 Start I/O at the provided offset in the file, given as either a
997 fixed size in bytes, zones or a percentage. If a percentage is
998 given, the generated offset will be aligned to the minimum
999 blocksize or to the value of offset_align if provided. Data be‐
1000 fore the given offset will not be touched. This effectively caps
1001 the file size at `real_size - offset'. Can be combined with size
1002 to constrain the start and end range of the I/O workload. A
1003 percentage can be specified by a number between 1 and 100 fol‐
1004 lowed by '%', for example, `offset=20%' to specify 20%. In ZBD
1005 mode, value can be set as number of zones using 'z'.
1006
1007 offset_align=int
1008 If set to non-zero value, the byte offset generated by a per‐
1009 centage offset is aligned upwards to this value. Defaults to 0
1010 meaning that a percentage offset is aligned to the minimum block
1011 size.
1012
1013 offset_increment=int[%|z]
1014 If this is provided, then the real offset becomes `offset + off‐
1015 set_increment * thread_number', where the thread number is a
1016 counter that starts at 0 and is incremented for each sub-job
1017 (i.e. when numjobs option is specified). This option is useful
1018 if there are several jobs which are intended to operate on a
1019 file in parallel disjoint segments, with even spacing between
1020 the starting points. Percentages can be used for this option.
1021 If a percentage is given, the generated offset will be aligned
1022 to the minimum blocksize or to the value of offset_align if pro‐
1023 vided.In ZBD mode, value can be set as number of zones using
1024 'z'.
1025
1026 number_ios=int
1027 Fio will normally perform I/Os until it has exhausted the size
1028 of the region set by size, or if it exhaust the allocated time
1029 (or hits an error condition). With this setting, the range/size
1030 can be set independently of the number of I/Os to perform. When
1031 fio reaches this number, it will exit normally and report sta‐
1032 tus. Note that this does not extend the amount of I/O that will
1033 be done, it will only stop fio if this condition is met before
1034 other end-of-job criteria.
1035
1036 fsync=int
1037 If writing to a file, issue an fsync(2) (or its equivalent) of
1038 the dirty data for every number of blocks given. For example, if
1039 you give 32 as a parameter, fio will sync the file after every
1040 32 writes issued. If fio is using non-buffered I/O, we may not
1041 sync the file. The exception is the sg I/O engine, which syn‐
1042 chronizes the disk cache anyway. Defaults to 0, which means fio
1043 does not periodically issue and wait for a sync to complete.
1044 Also see end_fsync and fsync_on_close.
1045
1046 fdatasync=int
1047 Like fsync but uses fdatasync(2) to only sync data and not meta‐
1048 data blocks. In Windows, DragonFlyBSD or OSX there is no fdata‐
1049 sync(2) so this falls back to using fsync(2). Defaults to 0,
1050 which means fio does not periodically issue and wait for a data-
1051 only sync to complete.
1052
1053 write_barrier=int
1054 Make every N-th write a barrier write.
1055
1056 sync_file_range=str:int
1057 Use sync_file_range(2) for every int number of write operations.
1058 Fio will track range of writes that have happened since the last
1059 sync_file_range(2) call. str can currently be one or more of:
1060
1061 wait_before
1062 SYNC_FILE_RANGE_WAIT_BEFORE
1063
1064 write SYNC_FILE_RANGE_WRITE
1065
1066 wait_after
1067 SYNC_FILE_RANGE_WRITE_AFTER
1068
1069 So if you do `sync_file_range=wait_before,write:8', fio would
1070 use `SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE' for
1071 every 8 writes. Also see the sync_file_range(2) man page. This
1072 option is Linux specific.
1073
1074 overwrite=bool
1075 If true, writes to a file will always overwrite existing data.
1076 If the file doesn't already exist, it will be created before the
1077 write phase begins. If the file exists and is large enough for
1078 the specified write phase, nothing will be done. Default: false.
1079
1080 end_fsync=bool
1081 If true, fsync(2) file contents when a write stage has com‐
1082 pleted. Default: false.
1083
1084 fsync_on_close=bool
1085 If true, fio will fsync(2) a dirty file on close. This differs
1086 from end_fsync in that it will happen on every file close, not
1087 just at the end of the job. Default: false.
1088
1089 rwmixread=int
1090 Percentage of a mixed workload that should be reads. Default:
1091 50.
1092
1093 rwmixwrite=int
1094 Percentage of a mixed workload that should be writes. If both
1095 rwmixread and rwmixwrite is given and the values do not add up
1096 to 100%, the latter of the two will be used to override the
1097 first. This may interfere with a given rate setting, if fio is
1098 asked to limit reads or writes to a certain rate. If that is the
1099 case, then the distribution may be skewed. Default: 50.
1100
1101 random_distribution=str:float[:float][,str:float][,str:float]
1102 By default, fio will use a completely uniform random distribu‐
1103 tion when asked to perform random I/O. Sometimes it is useful to
1104 skew the distribution in specific ways, ensuring that some parts
1105 of the data is more hot than others. fio includes the following
1106 distribution models:
1107
1108 random Uniform random distribution
1109
1110 zipf Zipf distribution
1111
1112 pareto Pareto distribution
1113
1114 normal Normal (Gaussian) distribution
1115
1116 zoned Zoned random distribution zoned_abs Zoned absolute
1117 random distribution
1118
1119 When using a zipf or pareto distribution, an input value is also
1120 needed to define the access pattern. For zipf, this is the `Zipf
1121 theta'. For pareto, it's the `Pareto power'. Fio includes a
1122 test program, fio-genzipf, that can be used visualize what the
1123 given input values will yield in terms of hit rates. If you
1124 wanted to use zipf with a `theta' of 1.2, you would use `ran‐
1125 dom_distribution=zipf:1.2' as the option. If a non-uniform model
1126 is used, fio will disable use of the random map. For the normal
1127 distribution, a normal (Gaussian) deviation is supplied as a
1128 value between 0 and 100.
1129
1130 The second, optional float is allowed for pareto, zipf and nor‐
1131 mal distributions. It allows to set base of distribution in non-
1132 default place, giving more control over most probable outcome.
1133 This value is in range [0-1] which maps linearly to range of
1134 possible random values. Defaults are: random for pareto and
1135 zipf, and 0.5 for normal. If you wanted to use zipf with a
1136 `theta` of 1.2 centered on 1/4 of allowed value range, you would
1137 use `random_distribution=zipf:1.2:0.25`.
1138
1139 For a zoned distribution, fio supports specifying percentages of
1140 I/O access that should fall within what range of the file or de‐
1141 vice. For example, given a criteria of:
1142
1143 60% of accesses should be to the first 10%
1144 30% of accesses should be to the next 20%
1145 8% of accesses should be to the next 30%
1146 2% of accesses should be to the next 40%
1147
1148 we can define that through zoning of the random accesses. For
1149 the above example, the user would do:
1150
1151 random_distribution=zoned:60/10:30/20:8/30:2/40
1152
1153 A zoned_abs distribution works exactly like thezoned, except
1154 that it takes absolute sizes. For example, let's say you wanted
1155 to define access according to the following criteria:
1156
1157 60% of accesses should be to the first 20G
1158 30% of accesses should be to the next 100G
1159 10% of accesses should be to the next 500G
1160
1161 we can define an absolute zoning distribution with:
1162
1163 random_distribution=zoned:60/10:30/20:8/30:2/40
1164
1165 For both zoned and zoned_abs, fio supports defining up to 256
1166 separate zones.
1167
1168 Similarly to how bssplit works for setting ranges and percent‐
1169 ages of block sizes. Like bssplit, it's possible to specify sep‐
1170 arate zones for reads, writes, and trims. If just one set is
1171 given, it'll apply to all of them.
1172
1173 percentage_random=int[,int][,int]
1174 For a random workload, set how big a percentage should be ran‐
1175 dom. This defaults to 100%, in which case the workload is fully
1176 random. It can be set from anywhere from 0 to 100. Setting it to
1177 0 would make the workload fully sequential. Any setting in be‐
1178 tween will result in a random mix of sequential and random I/O,
1179 at the given percentages. Comma-separated values may be speci‐
1180 fied for reads, writes, and trims as described in blocksize.
1181
1182 norandommap
1183 Normally fio will cover every block of the file when doing ran‐
1184 dom I/O. If this option is given, fio will just get a new random
1185 offset without looking at past I/O history. This means that some
1186 blocks may not be read or written, and that some blocks may be
1187 read/written more than once. If this option is used with verify
1188 and multiple blocksizes (via bsrange), only intact blocks are
1189 verified, i.e., partially-overwritten blocks are ignored. With
1190 an async I/O engine and an I/O depth > 1, it is possible for the
1191 same block to be overwritten, which can cause verification er‐
1192 rors. Either do not use norandommap in this case, or also use
1193 the lfsr random generator.
1194
1195 softrandommap=bool
1196 See norandommap. If fio runs with the random block map enabled
1197 and it fails to allocate the map, if this option is set it will
1198 continue without a random block map. As coverage will not be as
1199 complete as with random maps, this option is disabled by de‐
1200 fault.
1201
1202 random_generator=str
1203 Fio supports the following engines for generating I/O offsets
1204 for random I/O:
1205
1206 tausworthe
1207 Strong 2^88 cycle random number generator.
1208
1209 lfsr Linear feedback shift register generator.
1210
1211 tausworthe64
1212 Strong 64-bit 2^258 cycle random number generator.
1213
1214 tausworthe is a strong random number generator, but it requires
1215 tracking on the side if we want to ensure that blocks are only
1216 read or written once. lfsr guarantees that we never generate the
1217 same offset twice, and it's also less computationally expensive.
1218 It's not a true random generator, however, though for I/O pur‐
1219 poses it's typically good enough. lfsr only works with single
1220 block sizes, not with workloads that use multiple block sizes.
1221 If used with such a workload, fio may read or write some blocks
1222 multiple times. The default value is tausworthe, unless the re‐
1223 quired space exceeds 2^32 blocks. If it does, then tausworthe64
1224 is selected automatically.
1225
1226 Block size
1227 blocksize=int[,int][,int], bs=int[,int][,int]
1228 The block size in bytes used for I/O units. Default: 4096. A
1229 single value applies to reads, writes, and trims. Comma-sepa‐
1230 rated values may be specified for reads, writes, and trims. A
1231 value not terminated in a comma applies to subsequent types. Ex‐
1232 amples:
1233
1234 bs=256k means 256k for reads, writes and trims.
1235 bs=8k,32k means 8k for reads, 32k for writes and
1236 trims.
1237 bs=8k,32k, means 8k for reads, 32k for writes, and
1238 default for trims.
1239 bs=,8k means default for reads, 8k for writes and
1240 trims.
1241 bs=,8k, means default for reads, 8k for writes,
1242 and default for trims.
1243
1244 blocksize_range=irange[,irange][,irange],
1245 bsrange=irange[,irange][,irange]
1246 A range of block sizes in bytes for I/O units. The issued I/O
1247 unit will always be a multiple of the minimum size, unless
1248 blocksize_unaligned is set. Comma-separated ranges may be spec‐
1249 ified for reads, writes, and trims as described in blocksize.
1250 Example:
1251
1252 bsrange=1k-4k,2k-8k
1253
1254 bssplit=str[,str][,str]
1255 Sometimes you want even finer grained control of the block sizes
1256 issued, not just an even split between them. This option allows
1257 you to weight various block sizes, so that you are able to de‐
1258 fine a specific amount of block sizes issued. The format for
1259 this option is:
1260
1261 bssplit=blocksize/percentage:blocksize/percentage
1262
1263 for as many block sizes as needed. So if you want to define a
1264 workload that has 50% 64k blocks, 10% 4k blocks, and 40% 32k
1265 blocks, you would write:
1266
1267 bssplit=4k/10:64k/50:32k/40
1268
1269 Ordering does not matter. If the percentage is left blank, fio
1270 will fill in the remaining values evenly. So a bssplit option
1271 like this one:
1272
1273 bssplit=4k/50:1k/:32k/
1274
1275 would have 50% 4k ios, and 25% 1k and 32k ios. The percentages
1276 always add up to 100, if bssplit is given a range that adds up
1277 to more, it will error out.
1278
1279 Comma-separated values may be specified for reads, writes, and
1280 trims as described in blocksize.
1281
1282 If you want a workload that has 50% 2k reads and 50% 4k reads,
1283 while having 90% 4k writes and 10% 8k writes, you would specify:
1284
1285 bssplit=2k/50:4k/50,4k/90:8k/10
1286
1287 Fio supports defining up to 64 different weights for each data
1288 direction.
1289
1290 blocksize_unaligned, bs_unaligned
1291 If set, fio will issue I/O units with any size within block‐
1292 size_range, not just multiples of the minimum size. This typi‐
1293 cally won't work with direct I/O, as that normally requires sec‐
1294 tor alignment.
1295
1296 bs_is_seq_rand=bool
1297 If this option is set, fio will use the normal read,write block‐
1298 size settings as sequential,random blocksize settings instead.
1299 Any random read or write will use the WRITE blocksize settings,
1300 and any sequential read or write will use the READ blocksize
1301 settings.
1302
1303 blockalign=int[,int][,int], ba=int[,int][,int]
1304 Boundary to which fio will align random I/O units. Default:
1305 blocksize. Minimum alignment is typically 512b for using direct
1306 I/O, though it usually depends on the hardware block size. This
1307 option is mutually exclusive with using a random map for files,
1308 so it will turn off that option. Comma-separated values may be
1309 specified for reads, writes, and trims as described in block‐
1310 size.
1311
1312 Buffers and memory
1313 zero_buffers
1314 Initialize buffers with all zeros. Default: fill buffers with
1315 random data.
1316
1317 refill_buffers
1318 If this option is given, fio will refill the I/O buffers on ev‐
1319 ery submit. The default is to only fill it at init time and re‐
1320 use that data. Only makes sense if zero_buffers isn't specified,
1321 naturally. If data verification is enabled, refill_buffers is
1322 also automatically enabled.
1323
1324 scramble_buffers=bool
1325 If refill_buffers is too costly and the target is using data
1326 deduplication, then setting this option will slightly modify the
1327 I/O buffer contents to defeat normal de-dupe attempts. This is
1328 not enough to defeat more clever block compression attempts, but
1329 it will stop naive dedupe of blocks. Default: true.
1330
1331 buffer_compress_percentage=int
1332 If this is set, then fio will attempt to provide I/O buffer con‐
1333 tent (on WRITEs) that compresses to the specified level. Fio
1334 does this by providing a mix of random data followed by fixed
1335 pattern data. The fixed pattern is either zeros, or the pattern
1336 specified by buffer_pattern. If the buffer_pattern option is
1337 used, it might skew the compression ratio slightly. Setting buf‐
1338 fer_compress_percentage to a value other than 100 will also en‐
1339 able refill_buffers in order to reduce the likelihood that adja‐
1340 cent blocks are so similar that they over compress when seen to‐
1341 gether. See buffer_compress_chunk for how to set a finer or
1342 coarser granularity of the random/fixed data regions. Defaults
1343 to unset i.e., buffer data will not adhere to any compression
1344 level.
1345
1346 buffer_compress_chunk=int
1347 This setting allows fio to manage how big the random/fixed data
1348 region is when using buffer_compress_percentage. When buf‐
1349 fer_compress_chunk is set to some non-zero value smaller than
1350 the block size, fio can repeat the random/fixed region through‐
1351 out the I/O buffer at the specified interval (which particularly
1352 useful when bigger block sizes are used for a job). When set to
1353 0, fio will use a chunk size that matches the block size result‐
1354 ing in a single random/fixed region within the I/O buffer. De‐
1355 faults to 512. When the unit is omitted, the value is inter‐
1356 preted in bytes.
1357
1358 buffer_pattern=str
1359 If set, fio will fill the I/O buffers with this pattern or with
1360 the contents of a file. If not set, the contents of I/O buffers
1361 are defined by the other options related to buffer contents. The
1362 setting can be any pattern of bytes, and can be prefixed with 0x
1363 for hex values. It may also be a string, where the string must
1364 then be wrapped with "". Or it may also be a filename, where the
1365 filename must be wrapped with '' in which case the file is
1366 opened and read. Note that not all the file contents will be
1367 read if that would cause the buffers to overflow. So, for exam‐
1368 ple:
1369
1370 buffer_pattern='filename'
1371 or:
1372 buffer_pattern="abcd"
1373 or:
1374 buffer_pattern=-12
1375 or:
1376 buffer_pattern=0xdeadface
1377
1378 Also you can combine everything together in any order:
1379
1380 buffer_pattern=0xdeadface"abcd"-12'filename'
1381
1382 dedupe_percentage=int
1383 If set, fio will generate this percentage of identical buffers
1384 when writing. These buffers will be naturally dedupable. The
1385 contents of the buffers depend on what other buffer compression
1386 settings have been set. It's possible to have the individual
1387 buffers either fully compressible, or not at all -- this option
1388 only controls the distribution of unique buffers. Setting this
1389 option will also enable refill_buffers to prevent every buffer
1390 being identical.
1391
1392 dedupe_mode=str
1393 If dedupe_percentage is given, then this option controls how fio
1394 generates the dedupe buffers.
1395
1396 repeat
1397
1398 Generate dedupe buffers by repeating previous
1399 writes
1400
1401 working_set
1402
1403 Generate dedupe buffers from working set
1404
1405 repeat is the default option for fio. Dedupe buffers are gener‐
1406 ated by repeating previous unique write.
1407
1408 working_set is a more realistic workload. With working_set,
1409 dedupe_working_set_percentage should be provided. Given that,
1410 fio will use the initial unique write buffers as its working
1411 set. Upon deciding to dedupe, fio will randomly choose a buffer
1412 from the working set. Note that by using working_set the dedupe
1413 percentage will converge to the desired over time while repeat
1414 maintains the desired percentage throughout the job.
1415
1416 dedupe_working_set_percentage=int
1417 If dedupe_mode is set to working_set, then this controls the
1418 percentage of size of the file or device used as the buffers fio
1419 will choose to generate the dedupe buffers from
1420
1421 Note that size needs to be explicitly provided and only 1 file
1422 per job is supported
1423
1424 dedupe_global=bool
1425 This controls whether the deduplication buffers will be shared
1426 amongst all jobs that have this option set. The buffers are
1427 spread evenly between participating jobs.
1428
1429 Note that dedupe_mode must be set to working_set for this to
1430 work. Can be used in combination with compression
1431
1432 invalidate=bool
1433 Invalidate the buffer/page cache parts of the files to be
1434 used prior to starting I/O if the platform and file type
1435 support it. Defaults to true. This will be ignored if
1436 pre_read is also specified for the same job.
1437
1438 sync=str
1439 Whether, and what type, of synchronous I/O to use for
1440 writes. The allowed values are:
1441
1442 none Do not use synchronous IO, the default.
1443
1444 0 Same as none.
1445
1446 sync Use synchronous file IO. For the majority
1447 of I/O engines, this means using O_SYNC.
1448
1449 1 Same as sync.
1450
1451 dsync Use synchronous data IO. For the majority
1452 of I/O engines, this means using O_DSYNC.
1453
1454 iomem=str, mem=str
1455 Fio can use various types of memory as the I/O unit buf‐
1456 fer. The allowed values are:
1457
1458 malloc Use memory from malloc(3) as the buffers.
1459 Default memory type.
1460
1461 shm Use shared memory as the buffers. Allocated
1462 through shmget(2).
1463
1464 shmhuge
1465 Same as shm, but use huge pages as backing.
1466
1467 mmap Use mmap(2) to allocate buffers. May either
1468 be anonymous memory, or can be file backed
1469 if a filename is given after the option.
1470 The format is `mem=mmap:/path/to/file'.
1471
1472 mmaphuge
1473 Use a memory mapped huge file as the buffer
1474 backing. Append filename after mmaphuge,
1475 ala `mem=mmaphuge:/hugetlbfs/file'.
1476
1477 mmapshared
1478 Same as mmap, but use a MMAP_SHARED map‐
1479 ping.
1480
1481 cudamalloc
1482 Use GPU memory as the buffers for GPUDirect
1483 RDMA benchmark. The ioengine must be rdma.
1484
1485 The area allocated is a function of the maximum allowed
1486 bs size for the job, multiplied by the I/O depth given.
1487 Note that for shmhuge and mmaphuge to work, the system
1488 must have free huge pages allocated. This can normally be
1489 checked and set by reading/writing
1490 `/proc/sys/vm/nr_hugepages' on a Linux system. Fio as‐
1491 sumes a huge page is 2 or 4MiB in size depending on the
1492 platform. So to calculate the number of huge pages you
1493 need for a given job file, add up the I/O depth of all
1494 jobs (normally one unless iodepth is used) and multiply
1495 by the maximum bs set. Then divide that number by the
1496 huge page size. You can see the size of the huge pages in
1497 `/proc/meminfo'. If no huge pages are allocated by having
1498 a non-zero number in `nr_hugepages', using mmaphuge or
1499 shmhuge will fail. Also see hugepage-size.
1500
1501 mmaphuge also needs to have hugetlbfs mounted and the
1502 file location should point there. So if it's mounted in
1503 `/huge', you would use `mem=mmaphuge:/huge/somefile'.
1504
1505 iomem_align=int, mem_align=int
1506 This indicates the memory alignment of the I/O memory
1507 buffers. Note that the given alignment is applied to the
1508 first I/O unit buffer, if using iodepth the alignment of
1509 the following buffers are given by the bs used. In other
1510 words, if using a bs that is a multiple of the page sized
1511 in the system, all buffers will be aligned to this value.
1512 If using a bs that is not page aligned, the alignment of
1513 subsequent I/O memory buffers is the sum of the
1514 iomem_align and bs used.
1515
1516 hugepage-size=int
1517 Defines the size of a huge page. Must at least be equal
1518 to the system setting, see `/proc/meminfo' and `/sys/ker‐
1519 nel/mm/hugepages/'. Defaults to 2 or 4MiB depending on
1520 the platform. Should probably always be a multiple of
1521 megabytes, so using `hugepage-size=Xm' is the preferred
1522 way to set this to avoid setting a non-pow-2 bad value.
1523
1524 lockmem=int
1525 Pin the specified amount of memory with mlock(2). Can be
1526 used to simulate a smaller amount of memory. The amount
1527 specified is per worker.
1528
1529 I/O size
1530 size=int[%|z]
1531 The total size of file I/O for each thread of this job. Fio will
1532 run until this many bytes has been transferred, unless runtime
1533 is limited by other options (such as runtime, for instance, or
1534 increased/decreased by io_size). Fio will divide this size be‐
1535 tween the available files determined by options such as nrfiles,
1536 filename, unless filesize is specified by the job. If the result
1537 of division happens to be 0, the size is set to the physical
1538 size of the given files or devices if they exist. If this op‐
1539 tion is not specified, fio will use the full size of the given
1540 files or devices. If the files do not exist, size must be given.
1541 It is also possible to give size as a percentage between 1 and
1542 100. If `size=20%' is given, fio will use 20% of the full size
1543 of the given files or devices. In ZBD mode, size can be given in
1544 units of number of zones using 'z'. Can be combined with offset
1545 to constrain the start and end range that I/O will be done
1546 within.
1547
1548 io_size=int[%|z], io_limit=int[%|z]
1549 Normally fio operates within the region set by size, which means
1550 that the size option sets both the region and size of I/O to be
1551 performed. Sometimes that is not what you want. With this op‐
1552 tion, it is possible to define just the amount of I/O that fio
1553 should do. For instance, if size is set to 20GiB and io_size is
1554 set to 5GiB, fio will perform I/O within the first 20GiB but
1555 exit when 5GiB have been done. The opposite is also possible --
1556 if size is set to 20GiB, and io_size is set to 40GiB, then fio
1557 will do 40GiB of I/O within the 0..20GiB region. Value can be
1558 set as percentage: io_size=N%. In this case io_size multiplies
1559 size= value. In ZBD mode, value can also be set as number of
1560 zones using 'z'.
1561
1562 filesize=irange(int)
1563 Individual file sizes. May be a range, in which case fio will
1564 select sizes for files at random within the given range. If not
1565 given, each created file is the same size. This option overrides
1566 size in terms of file size, i.e. size becomes merely the default
1567 for io_size (and has no effect it all if io_size is set explic‐
1568 itly).
1569
1570 file_append=bool
1571 Perform I/O after the end of the file. Normally fio will operate
1572 within the size of a file. If this option is set, then fio will
1573 append to the file instead. This has identical behavior to set‐
1574 ting offset to the size of a file. This option is ignored on
1575 non-regular files.
1576
1577 fill_device=bool, fill_fs=bool
1578 Sets size to something really large and waits for ENOSPC (no
1579 space left on device) or EDQUOT (disk quota exceeded) as the
1580 terminating condition. Only makes sense with sequential write.
1581 For a read workload, the mount point will be filled first then
1582 I/O started on the result.
1583
1584 I/O engine
1585 ioengine=str
1586 Defines how the job issues I/O to the file. The following types
1587 are defined:
1588
1589 sync Basic read(2) or write(2) I/O. lseek(2) is used to
1590 position the I/O location. See fsync and fdata‐
1591 sync for syncing write I/Os.
1592
1593 psync Basic pread(2) or pwrite(2) I/O. Default on all
1594 supported operating systems except for Windows.
1595
1596 vsync Basic readv(2) or writev(2) I/O. Will emulate
1597 queuing by coalescing adjacent I/Os into a single
1598 submission.
1599
1600 pvsync Basic preadv(2) or pwritev(2) I/O.
1601
1602 pvsync2
1603 Basic preadv2(2) or pwritev2(2) I/O.
1604
1605 io_uring
1606 Fast Linux native asynchronous I/O. Supports async
1607 IO for both direct and buffered IO. This engine
1608 defines engine specific options.
1609
1610 io_uring_cmd
1611 Fast Linux native asynchronous I/O for passthrough
1612 commands. This engine defines engine specific op‐
1613 tions.
1614
1615 libaio Linux native asynchronous I/O. Note that Linux may
1616 only support queued behavior with non-buffered I/O
1617 (set `direct=1' or `buffered=0'). This engine de‐
1618 fines engine specific options.
1619
1620 posixaio
1621 POSIX asynchronous I/O using aio_read(3) and
1622 aio_write(3).
1623
1624 solarisaio
1625 Solaris native asynchronous I/O.
1626
1627 windowsaio
1628 Windows native asynchronous I/O. Default on Win‐
1629 dows.
1630
1631 mmap File is memory mapped with mmap(2) and data copied
1632 to/from using memcpy(3).
1633
1634 splice splice(2) is used to transfer the data and vm‐
1635 splice(2) to transfer data from user space to the
1636 kernel.
1637
1638 sg SCSI generic sg v3 I/O. May either be synchronous
1639 using the SG_IO ioctl, or if the target is an sg
1640 character device we use read(2) and write(2) for
1641 asynchronous I/O. Requires filename option to
1642 specify either block or character devices. This
1643 engine supports trim operations. The sg engine in‐
1644 cludes engine specific options.
1645
1646 libzbc Read, write, trim and ZBC/ZAC operations to a
1647 zoned block device using libzbc library. The tar‐
1648 get can be either an SG character device or a
1649 block device file.
1650
1651 null Doesn't transfer any data, just pretends to. This
1652 is mainly used to exercise fio itself and for de‐
1653 bugging/testing purposes.
1654
1655 net Transfer over the network to given `host:port'.
1656 Depending on the protocol used, the hostname,
1657 port, listen and filename options are used to
1658 specify what sort of connection to make, while the
1659 protocol option determines which protocol will be
1660 used. This engine defines engine specific options.
1661
1662 netsplice
1663 Like net, but uses splice(2) and vmsplice(2) to
1664 map data and send/receive. This engine defines
1665 engine specific options.
1666
1667 cpuio Doesn't transfer any data, but burns CPU cycles
1668 according to the cpuload, cpuchunks and cpumode
1669 options. A job never finishes unless there is at
1670 least one non-cpuio job.
1671
1672 cpuload=85 will cause that job to do nothing but
1673 burn 85% of the CPU. In case of SMP machines, use
1674 numjobs=<nr_of_cpu> to get desired CPU usage, as
1675 the cpuload only loads a single CPU at the desired
1676 rate.
1677
1678 cpumode=qsort replace the default noop instruc‐
1679 tions loop by a qsort algorithm to consume more
1680 energy.
1681
1682 rdma The RDMA I/O engine supports both RDMA memory se‐
1683 mantics (RDMA_WRITE/RDMA_READ) and channel seman‐
1684 tics (Send/Recv) for the InfiniBand, RoCE and
1685 iWARP protocols. This engine defines engine spe‐
1686 cific options.
1687 falloc I/O engine that does regular fallocate to simulate
1688 data transfer as fio ioengine.
1689 DDIR_READ does fallocate(,mode = FAL‐
1690 LOC_FL_KEEP_SIZE,).
1691 DIR_WRITE does fallocate(,mode = 0).
1692 DDIR_TRIM does fallocate(,mode = FAL‐
1693 LOC_FL_KEEP_SIZE|FALLOC_FL_PUNCH_HOLE).
1694
1695 ftruncate
1696 I/O engine that sends ftruncate(2) operations in
1697 response to write (DDIR_WRITE) events. Each ftrun‐
1698 cate issued sets the file's size to the current
1699 block offset. blocksize is ignored.
1700
1701 e4defrag
1702 I/O engine that does regular EXT4_IOC_MOVE_EXT
1703 ioctls to simulate defragment activity in request
1704 to DDIR_WRITE event.
1705
1706 rados I/O engine supporting direct access to Ceph Reli‐
1707 able Autonomic Distributed Object Store (RADOS)
1708 via librados. This ioengine defines engine spe‐
1709 cific options.
1710
1711 rbd I/O engine supporting direct access to Ceph Rados
1712 Block Devices (RBD) via librbd without the need to
1713 use the kernel rbd driver. This ioengine defines
1714 engine specific options.
1715
1716 http I/O engine supporting GET/PUT requests over
1717 HTTP(S) with libcurl to a WebDAV or S3 endpoint.
1718 This ioengine defines engine specific options.
1719
1720 This engine only supports direct IO of iodepth=1;
1721 you need to scale this via numjobs. blocksize de‐
1722 fines the size of the objects to be created.
1723
1724 TRIM is translated to object deletion.
1725
1726 gfapi Using GlusterFS libgfapi sync interface to direct
1727 access to GlusterFS volumes without having to go
1728 through FUSE. This ioengine defines engine spe‐
1729 cific options.
1730
1731 gfapi_async
1732 Using GlusterFS libgfapi async interface to direct
1733 access to GlusterFS volumes without having to go
1734 through FUSE. This ioengine defines engine spe‐
1735 cific options.
1736
1737 libhdfs
1738 Read and write through Hadoop (HDFS). The filename
1739 option is used to specify host,port of the hdfs
1740 name-node to connect. This engine interprets off‐
1741 sets a little differently. In HDFS, files once
1742 created cannot be modified so random writes are
1743 not possible. To imitate this the libhdfs engine
1744 expects a bunch of small files to be created over
1745 HDFS and will randomly pick a file from them based
1746 on the offset generated by fio backend (see the
1747 example job file to create such files, use
1748 `rw=write' option). Please note, it may be neces‐
1749 sary to set environment variables to work with
1750 HDFS/libhdfs properly. Each job uses its own con‐
1751 nection to HDFS.
1752
1753 mtd Read, write and erase an MTD character device
1754 (e.g., `/dev/mtd0'). Discards are treated as
1755 erases. Depending on the underlying device type,
1756 the I/O may have to go in a certain pattern, e.g.,
1757 on NAND, writing sequentially to erase blocks and
1758 discarding before overwriting. The trimwrite mode
1759 works well for this constraint.
1760
1761 pmemblk
1762 Read and write using filesystem DAX to a file on a
1763 filesystem mounted with DAX on a persistent memory
1764 device through the PMDK libpmemblk library.
1765
1766 dev-dax
1767 Read and write using device DAX to a persistent
1768 memory device (e.g., /dev/dax0.0) through the PMDK
1769 libpmem library.
1770
1771 external
1772 Prefix to specify loading an external I/O engine
1773 object file. Append the engine filename, e.g. `io‐
1774 engine=external:/tmp/foo.o' to load ioengine
1775 `foo.o' in `/tmp'. The path can be either absolute
1776 or relative. See `engines/skeleton_external.c' in
1777 the fio source for details of writing an external
1778 I/O engine.
1779
1780 filecreate
1781 Simply create the files and do no I/O to them.
1782 You still need to set filesize so that all the ac‐
1783 counting still occurs, but no actual I/O will be
1784 done other than creating the file.
1785
1786 filestat
1787 Simply do stat() and do no I/O to the file. You
1788 need to set 'filesize' and 'nrfiles', so that
1789 files will be created. This engine is to measure
1790 file lookup and meta data access.
1791
1792 filedelete
1793 Simply delete files by unlink() and do no I/O to
1794 the file. You need to set 'filesize' and 'nr‐
1795 files', so that files will be created. This en‐
1796 gine is to measure file delete.
1797
1798 libpmem
1799 Read and write using mmap I/O to a file on a
1800 filesystem mounted with DAX on a persistent memory
1801 device through the PMDK libpmem library.
1802
1803 ime_psync
1804 Synchronous read and write using DDN's Infinite
1805 Memory Engine (IME). This engine is very basic and
1806 issues calls to IME whenever an IO is queued.
1807
1808 ime_psyncv
1809 Synchronous read and write using DDN's Infinite
1810 Memory Engine (IME). This engine uses iovecs and
1811 will try to stack as much IOs as possible (if the
1812 IOs are "contiguous" and the IO depth is not ex‐
1813 ceeded) before issuing a call to IME.
1814
1815 ime_aio
1816 Asynchronous read and write using DDN's Infinite
1817 Memory Engine (IME). This engine will try to stack
1818 as much IOs as possible by creating requests for
1819 IME. FIO will then decide when to commit these
1820 requests.
1821
1822 libiscsi
1823 Read and write iscsi lun with libiscsi.
1824
1825 nbd Synchronous read and write a Network Block Device
1826 (NBD).
1827
1828 libcufile
1829 I/O engine supporting libcufile synchronous access
1830 to nvidia-fs and a GPUDirect Storage-supported
1831 filesystem. This engine performs I/O without
1832 transferring buffers between user-space and the
1833 kernel, unless verify is set or cuda_io is posix.
1834 iomem must not be cudamalloc. This ioengine de‐
1835 fines engine specific options.
1836
1837 dfs I/O engine supporting asynchronous read and write
1838 operations to the DAOS File System (DFS) via
1839 libdfs.
1840
1841 nfs I/O engine supporting asynchronous read and write
1842 operations to NFS filesystems from userspace via
1843 libnfs. This is useful for achieving higher con‐
1844 currency and thus throughput than is possible via
1845 kernel NFS.
1846
1847 exec Execute 3rd party tools. Could be used to perform
1848 monitoring during jobs runtime.
1849
1850 xnvme I/O engine using the xNVMe C API, for NVMe de‐
1851 vices. The xnvme engine provides flexibility to
1852 access GNU/Linux Kernel NVMe driver via libaio,
1853 IOCTLs, io_uring, the SPDK NVMe driver, or your
1854 own custom NVMe driver. The xnvme engine includes
1855 engine specific options. (See https://xnvme.io/).
1856
1857 I/O engine specific parameters
1858 In addition, there are some parameters which are only valid when a spe‐
1859 cific ioengine is in use. These are used identically to normal parame‐
1860 ters, with the caveat that when used on the command line, they must
1861 come after the ioengine that defines them is selected.
1862
1863 (io_uring,libaio)cmdprio_percentage=int[,int]
1864 Set the percentage of I/O that will be issued with the highest
1865 priority. Default: 0. A single value applies to reads and
1866 writes. Comma-separated values may be specified for reads and
1867 writes. For this option to be effective, NCQ priority must be
1868 supported and enabled, and `direct=1' option must be used. fio
1869 must also be run as the root user. Unlike slat/clat/lat stats,
1870 which can be tracked and reported independently, per priority
1871 stats only track and report a single type of latency. By de‐
1872 fault, completion latency (clat) will be reported, if lat_per‐
1873 centiles is set, total latency (lat) will be reported.
1874
1875 (io_uring,libaio)cmdprio_class=int[,int]
1876 Set the I/O priority class to use for I/Os that must be issued
1877 with a priority when cmdprio_percentage or cmdprio_bssplit is
1878 set. If not specified when cmdprio_percentage or cmdprio_bss‐
1879 plit is set, this defaults to the highest priority class. A sin‐
1880 gle value applies to reads and writes. Comma-separated values
1881 may be specified for reads and writes. See man ionice(1). See
1882 also the prioclass option.
1883
1884 (io_uring,libaio)cmdprio=int[,int]
1885 Set the I/O priority value to use for I/Os that must be issued
1886 with a priority when cmdprio_percentage or cmdprio_bssplit is
1887 set. If not specified when cmdprio_percentage or cmdprio_bss‐
1888 plit is set, this defaults to 0. Linux limits us to a positive
1889 value between 0 and 7, with 0 being the highest. A single value
1890 applies to reads and writes. Comma-separated values may be
1891 specified for reads and writes. See man ionice(1). Refer to an
1892 appropriate manpage for other operating systems since the mean‐
1893 ing of priority may differ. See also the prio option.
1894
1895 (io_uring,libaio)cmdprio_bssplit=str[,str]
1896 To get a finer control over I/O priority, this option allows
1897 specifying the percentage of IOs that must have a priority set
1898 depending on the block size of the IO. This option is useful
1899 only when used together with the option bssplit, that is, multi‐
1900 ple different block sizes are used for reads and writes.
1901
1902 The first accepted format for this option is the same as the
1903 format of the bssplit option:
1904
1905 cmdprio_bssplit=blocksize/percentage:blocksize/percentage
1906
1907 In this case, each entry will use the priority class and prior‐
1908 ity level defined by the options cmdprio_class and cmdprio re‐
1909 spectively.
1910
1911 The second accepted format for this option is:
1912
1913 cmdprio_bssplit=blocksize/percentage/class/level:block‐
1914 size/percentage/class/level
1915
1916 In this case, the priority class and priority level is defined
1917 inside each entry. In comparison with the first accepted format,
1918 the second accepted format does not restrict all entries to have
1919 the same priority class and priority level.
1920
1921 For both formats, only the read and write data directions are
1922 supported, values for trim IOs are ignored. This option is mutu‐
1923 ally exclusive with the cmdprio_percentage option.
1924
1925 (io_uring,io_uring_cmd)fixedbufs
1926 If fio is asked to do direct IO, then Linux will map pages for
1927 each IO call, and release them when IO is done. If this option
1928 is set, the pages are pre-mapped before IO is started. This
1929 eliminates the need to map and release for each IO. This is
1930 more efficient, and reduces the IO latency as well.
1931
1932 (io_uring,io_uring_cmd)nonvectored=int
1933 With this option, fio will use non-vectored read/write commands,
1934 where address must contain the address directly. Default is -1.
1935
1936 (io_uring,io_uring_cmd)force_async
1937 Normal operation for io_uring is to try and issue an sqe as non-
1938 blocking first, and if that fails, execute it in an async man‐
1939 ner. With this option set to N, then every N request fio will
1940 ask sqe to be issued in an async manner. Default is 0.
1941
1942 (io_uring,io_uring_cmd,xnvme)hipri
1943 If this option is set, fio will attempt to use polled IO comple‐
1944 tions. Normal IO completions generate interrupts to signal the
1945 completion of IO, polled completions do not. Hence they are re‐
1946 quire active reaping by the application. The benefits are more
1947 efficient IO for high IOPS scenarios, and lower latencies for
1948 low queue depth IO.
1949
1950 (io_uring,io_uring_cmd)registerfiles
1951 With this option, fio registers the set of files being used with
1952 the kernel. This avoids the overhead of managing file counts in
1953 the kernel, making the submission and completion part more
1954 lightweight. Required for the below sqthread_poll option.
1955
1956 (io_uring,io_uring_cmd,xnvme)sqthread_poll
1957 Normally fio will submit IO by issuing a system call to notify
1958 the kernel of available items in the SQ ring. If this option is
1959 set, the act of submitting IO will be done by a polling thread
1960 in the kernel. This frees up cycles for fio, at the cost of us‐
1961 ing more CPU in the system.
1962
1963 (io_uring,io_uring_cmd)sqthread_poll_cpu=int
1964 When `sqthread_poll` is set, this option provides a way to de‐
1965 fine which CPU should be used for the polling thread.
1966
1967 (io_uring_cmd)cmd_type=str
1968 Specifies the type of uring passthrough command to be used. Sup‐
1969 ported value is nvme. Default is nvme.
1970
1971 (libaio)userspace_reap
1972 Normally, with the libaio engine in use, fio will use the
1973 io_getevents(3) system call to reap newly returned events. With
1974 this flag turned on, the AIO ring will be read directly from
1975 user-space to reap events. The reaping mode is only enabled when
1976 polling for a minimum of 0 events (e.g. when `iodepth_batch_com‐
1977 plete=0').
1978
1979 (pvsync2)hipri
1980 Set RWF_HIPRI on I/O, indicating to the kernel that it's of
1981 higher priority than normal.
1982
1983 (pvsync2)hipri_percentage
1984 When hipri is set this determines the probability of a pvsync2
1985 I/O being high priority. The default is 100%.
1986
1987 (pvsync2,libaio,io_uring,io_uring_cmd)nowait=bool
1988 By default if a request cannot be executed immediately (e.g. re‐
1989 source starvation, waiting on locks) it is queued and the initi‐
1990 ating process will be blocked until the required resource be‐
1991 comes free. This option sets the RWF_NOWAIT flag (supported
1992 from the 4.14 Linux kernel) and the call will return instantly
1993 with EAGAIN or a partial result rather than waiting.
1994
1995 It is useful to also use ignore_error=EAGAIN when using this op‐
1996 tion. Note: glibc 2.27, 2.28 have a bug in syscall wrappers
1997 preadv2, pwritev2. They return EOPNOTSUP instead of EAGAIN.
1998
1999 For cached I/O, using this option usually means a request oper‐
2000 ates only with cached data. Currently the RWF_NOWAIT flag does
2001 not supported for cached write. For direct I/O, requests will
2002 only succeed if cache invalidation isn't required, file blocks
2003 are fully allocated and the disk request could be issued immedi‐
2004 ately.
2005
2006 (cpuio)cpuload=int
2007 Attempt to use the specified percentage of CPU cycles. This is a
2008 mandatory option when using cpuio I/O engine.
2009
2010 (cpuio)cpuchunks=int
2011 Split the load into cycles of the given time. In microseconds.
2012
2013 (cpuio)cpumode=str
2014 Specify how to stress the CPU. It can take these two values:
2015
2016 noop This is the default and directs the CPU to execute
2017 noop instructions.
2018
2019 qsort Replace the default noop instructions with a qsort
2020 algorithm to consume more energy.
2021
2022 (cpuio)exit_on_io_done=bool
2023 Detect when I/O threads are done, then exit.
2024
2025 (libhdfs)namenode=str
2026 The hostname or IP address of a HDFS cluster namenode to con‐
2027 tact.
2028
2029 (libhdfs)port=int
2030 The listening port of the HFDS cluster namenode.
2031
2032 (netsplice,net)port=int
2033 The TCP or UDP port to bind to or connect to. If this is used
2034 with numjobs to spawn multiple instances of the same job type,
2035 then this will be the starting port number since fio will use a
2036 range of ports.
2037
2038 (rdma,librpma_*)port=int
2039 The port to use for RDMA-CM communication. This should be the
2040 same value on the client and the server side.
2041
2042 (netsplice,net,rdma)hostname=str
2043 The hostname or IP address to use for TCP, UDP or RDMA-CM based
2044 I/O. If the job is a TCP listener or UDP reader, the hostname
2045 is not used and must be omitted unless it is a valid UDP multi‐
2046 cast address.
2047
2048 (librpma_*)serverip=str
2049 The IP address to be used for RDMA-CM based I/O.
2050
2051 (librpma_*_server)direct_write_to_pmem=bool
2052 Set to 1 only when Direct Write to PMem from the remote host is
2053 possible. Otherwise, set to 0.
2054
2055 (librpma_*_server)busy_wait_polling=bool
2056 Set to 0 to wait for completion instead of busy-wait polling
2057 completion. Default: 1.
2058
2059 (netsplice,net)interface=str
2060 The IP address of the network interface used to send or receive
2061 UDP multicast.
2062
2063 (netsplice,net)ttl=int
2064 Time-to-live value for outgoing UDP multicast packets. Default:
2065 1.
2066
2067 (netsplice,net)nodelay=bool
2068 Set TCP_NODELAY on TCP connections.
2069
2070 (netsplice,net)protocol=str, proto=str
2071 The network protocol to use. Accepted values are:
2072
2073 tcp Transmission control protocol.
2074
2075 tcpv6 Transmission control protocol V6.
2076
2077 udp User datagram protocol.
2078
2079 udpv6 User datagram protocol V6.
2080
2081 unix UNIX domain socket.
2082
2083 When the protocol is TCP or UDP, the port must also be given, as
2084 well as the hostname if the job is a TCP listener or UDP reader.
2085 For unix sockets, the normal filename option should be used and
2086 the port is invalid.
2087
2088 (netsplice,net)listen
2089 For TCP network connections, tell fio to listen for incoming
2090 connections rather than initiating an outgoing connection. The
2091 hostname must be omitted if this option is used.
2092
2093 (netsplice,net)pingpong
2094 Normally a network writer will just continue writing data, and a
2095 network reader will just consume packages. If `pingpong=1' is
2096 set, a writer will send its normal payload to the reader, then
2097 wait for the reader to send the same payload back. This allows
2098 fio to measure network latencies. The submission and completion
2099 latencies then measure local time spent sending or receiving,
2100 and the completion latency measures how long it took for the
2101 other end to receive and send back. For UDP multicast traffic
2102 `pingpong=1' should only be set for a single reader when multi‐
2103 ple readers are listening to the same address.
2104
2105 (netsplice,net)window_size=int
2106 Set the desired socket buffer size for the connection.
2107
2108 (netsplice,net)mss=int
2109 Set the TCP maximum segment size (TCP_MAXSEG).
2110
2111 (e4defrag)donorname=str
2112 File will be used as a block donor (swap extents between files).
2113
2114 (e4defrag)inplace=int
2115 Configure donor file blocks allocation strategy:
2116
2117 0 Default. Preallocate donor's file on init.
2118
2119 1 Allocate space immediately inside defragment
2120 event, and free right after event.
2121
2122 (rbd,rados)clustername=str
2123 Specifies the name of the Ceph cluster.
2124
2125 (rbd)rbdname=str
2126 Specifies the name of the RBD.
2127
2128 (rbd,rados)pool=str
2129 Specifies the name of the Ceph pool containing RBD or RADOS
2130 data.
2131
2132 (rbd,rados)clientname=str
2133 Specifies the username (without the 'client.' prefix) used to
2134 access the Ceph cluster. If the clustername is specified, the
2135 clientname shall be the full *type.id* string. If no type. pre‐
2136 fix is given, fio will add 'client.' by default.
2137
2138 (rados)conf=str
2139 Specifies the configuration path of ceph cluster, so conf file
2140 does not have to be /etc/ceph/ceph.conf.
2141
2142 (rbd,rados)busy_poll=bool
2143 Poll store instead of waiting for completion. Usually this pro‐
2144 vides better throughput at cost of higher(up to 100%) CPU uti‐
2145 lization.
2146
2147 (rados)touch_objects=bool
2148 During initialization, touch (create if do not exist) all ob‐
2149 jects (files). Touching all objects affects ceph caches and
2150 likely impacts test results. Enabled by default.
2151
2152 (http)http_host=str
2153 Hostname to connect to. For S3, this could be the bucket name.
2154 Default is localhost
2155
2156 (http)http_user=str
2157 Username for HTTP authentication.
2158
2159 (http)http_pass=str
2160 Password for HTTP authentication.
2161
2162 (http)https=str
2163 Whether to use HTTPS instead of plain HTTP. on enables HTTPS;
2164 insecure will enable HTTPS, but disable SSL peer verification
2165 (use with caution!). Default is off.
2166
2167 (http)http_mode=str
2168 Which HTTP access mode to use: webdav, swift, or s3. Default is
2169 webdav.
2170
2171 (http)http_s3_region=str
2172 The S3 region/zone to include in the request. Default is us-
2173 east-1.
2174
2175 (http)http_s3_key=str
2176 The S3 secret key.
2177
2178 (http)http_s3_keyid=str
2179 The S3 key/access id.
2180
2181 (http)http_s3_sse_customer_key=str
2182 The encryption customer key in SSE server side.
2183
2184 (http)http_s3_sse_customer_algorithm=str
2185 The encryption customer algorithm in SSE server side. Default is
2186 AES256
2187
2188 (http)http_s3_storage_class=str
2189 Which storage class to access. User-customizable settings. De‐
2190 fault is STANDARD
2191
2192 (http)http_swift_auth_token=str
2193 The Swift auth token. See the example configuration file on how
2194 to retrieve this.
2195
2196 (http)http_verbose=int
2197 Enable verbose requests from libcurl. Useful for debugging. 1
2198 turns on verbose logging from libcurl, 2 additionally enables
2199 HTTP IO tracing. Default is 0
2200
2201 (mtd)skip_bad=bool
2202 Skip operations against known bad blocks.
2203
2204 (libhdfs)hdfsdirectory
2205 libhdfs will create chunk in this HDFS directory.
2206
2207 (libhdfs)chunk_size
2208 The size of the chunk to use for each file.
2209
2210 (rdma)verb=str
2211 The RDMA verb to use on this side of the RDMA ioengine connec‐
2212 tion. Valid values are write, read, send and recv. These corre‐
2213 spond to the equivalent RDMA verbs (e.g. write = rdma_write
2214 etc.). Note that this only needs to be specified on the client
2215 side of the connection. See the examples folder.
2216
2217 (rdma)bindname=str
2218 The name to use to bind the local RDMA-CM connection to a local
2219 RDMA device. This could be a hostname or an IPv4 or IPv6 ad‐
2220 dress. On the server side this will be passed into the
2221 rdma_bind_addr() function and on the client site it will be used
2222 in the rdma_resolve_add() function. This can be useful when mul‐
2223 tiple paths exist between the client and the server or in cer‐
2224 tain loopback configurations.
2225
2226 (filestat)stat_type=str
2227 Specify stat system call type to measure lookup/getattr perfor‐
2228 mance. Default is stat for stat(2).
2229
2230 (sg)hipri
2231 If this option is set, fio will attempt to use polled IO comple‐
2232 tions. This will have a similar effect as (io_uring)hipri. Only
2233 SCSI READ and WRITE commands will have the SGV4_FLAG_HIPRI set
2234 (not UNMAP (trim) nor VERIFY). Older versions of the Linux sg
2235 driver that do not support hipri will simply ignore this flag
2236 and do normal IO. The Linux SCSI Low Level Driver (LLD) that
2237 "owns" the device also needs to support hipri (also known as
2238 iopoll and mq_poll). The MegaRAID driver is an example of a SCSI
2239 LLD. Default: clear (0) which does normal (interrupted based)
2240 IO.
2241
2242 (sg)readfua=bool
2243 With readfua option set to 1, read operations include the force
2244 unit access (fua) flag. Default: 0.
2245
2246 (sg)writefua=bool
2247 With writefua option set to 1, write operations include the
2248 force unit access (fua) flag. Default: 0.
2249
2250 (sg)sg_write_mode=str
2251 Specify the type of write commands to issue. This option can
2252 take multiple values:
2253
2254 write (default)
2255 Write opcodes are issued as usual
2256
2257 write_and_verify
2258 Issue WRITE AND VERIFY commands. The BYTCHK bit is
2259 set to 00b. This directs the device to carry out a
2260 medium verification with no data comparison for
2261 the data that was written. The writefua option is
2262 ignored with this selection.
2263
2264 verify This option is deprecated. Use write_and_verify
2265 instead.
2266
2267 write_same
2268 Issue WRITE SAME commands. This transfers a single
2269 block to the device and writes this same block of
2270 data to a contiguous sequence of LBAs beginning at
2271 the specified offset. fio's block size parameter
2272 specifies the amount of data written with each
2273 command. However, the amount of data actually
2274 transferred to the device is equal to the device's
2275 block (sector) size. For a device with 512 byte
2276 sectors, blocksize=8k will write 16 sectors with
2277 each command. fio will still generate 8k of data
2278 for each command butonly the first 512 bytes will
2279 be used and transferred to the device. The write‐
2280 fua option is ignored with this selection.
2281
2282 same This option is deprecated. Use write_same instead.
2283
2284 write_same_ndob
2285 Issue WRITE SAME(16) commands as above but with
2286 the No Data Output Buffer (NDOB) bit set. No data
2287 will be transferred to the device with this bit
2288 set. Data written will be a pre-determined pattern
2289 such as all zeroes.
2290
2291 write_stream
2292 Issue WRITE STREAM(16) commands. Use the stream_id
2293 option to specify the stream identifier.
2294
2295 verify_bytchk_00
2296 Issue VERIFY commands with BYTCHK set to 00. This
2297 directs the device to carry out a medium verifica‐
2298 tion with no data comparison.
2299
2300 verify_bytchk_01
2301 Issue VERIFY commands with BYTCHK set to 01. This
2302 directs the device to compare the data on the de‐
2303 vice with the data transferred to the device.
2304
2305 verify_bytchk_11
2306 Issue VERIFY commands with BYTCHK set to 11. This
2307 transfers a single block to the device and com‐
2308 pares the contents of this block with the data on
2309 the device beginning at the specified offset.
2310 fio's block size parameter specifies the total
2311 amount of data compared with this command. How‐
2312 ever, only one block (sector) worth of data is
2313 transferred to the device. This is similar to the
2314 WRITE SAME command except that data is compared
2315 instead of written.
2316
2317 (sg)stream_id=int
2318 Set the stream identifier for WRITE STREAM commands. If this is
2319 set to 0 (which is not a valid stream identifier) fio will open
2320 a stream and then close it when done. Default is 0.
2321
2322 (nbd)uri=str
2323 Specify the NBD URI of the server to test. The string is a
2324 standard NBD URI (see https://github.com/NetworkBlockDe‐
2325 vice/nbd/tree/master/doc). Example URIs:
2326
2327 nbd://localhost:10809
2328
2329 nbd+unix:///?socket=/tmp/socket
2330
2331 nbds://tlshost/exportname
2332
2333 (libcufile)gpu_dev_ids=str
2334 Specify the GPU IDs to use with CUDA. This is a colon-separated
2335 list of int. GPUs are assigned to workers roundrobin. Default
2336 is 0.
2337
2338 (libcufile)cuda_io=str
2339 Specify the type of I/O to use with CUDA. This option takes the
2340 following values:
2341
2342 cufile (default)
2343 Use libcufile and nvidia-fs. This option performs
2344 I/O directly between a GPUDirect Storage filesys‐
2345 tem and GPU buffers, avoiding use of a bounce buf‐
2346 fer. If verify is set, cudaMemcpy is used to copy
2347 verification data between RAM and GPU(s). Verifi‐
2348 cation data is copied from RAM to GPU before a
2349 write and from GPU to RAM after a read. direct
2350 must be 1.
2351
2352 posix Use POSIX to perform I/O with a RAM buffer, and
2353 use cudaMemcpy to transfer data between RAM and
2354 the GPU(s). Data is copied from GPU to RAM before
2355 a write and copied from RAM to GPU after a read.
2356 verify does not affect the use of cudaMemcpy.
2357
2358 (dfs)pool
2359 Specify the label or UUID of the DAOS pool to connect to.
2360
2361 (dfs)cont
2362 Specify the label or UUID of the DAOS container to open.
2363
2364 (dfs)chunk_size
2365 Specify a different chunk size (in bytes) for the dfs file. Use
2366 DAOS container's chunk size by default.
2367
2368 (dfs)object_class
2369 Specify a different object class for the dfs file. Use DAOS
2370 container's object class by default.
2371
2372 (nfs)nfs_url
2373 URL in libnfs format, eg
2374 nfs://<server|ipv4|ipv6>/path[?arg=val[&arg=val]*] Refer to the
2375 libnfs README for more details.
2376
2377 (exec)program=str
2378 Specify the program to execute. Note the program will receive a
2379 SIGTERM when the job is reaching the time limit. A SIGKILL is
2380 sent once the job is over. The delay between the two signals is
2381 defined by grace_time option.
2382
2383 (exec)arguments=str
2384 Specify arguments to pass to program. Some special variables
2385 can be expanded to pass fio's job details to the program :
2386
2387 %r replaced by the duration of the job in seconds
2388
2389 %n replaced by the name of the job
2390
2391 (exec)grace_time=int
2392 Defines the time between the SIGTERM and SIGKILL signals. De‐
2393 fault is 1 second.
2394
2395 (exec)std_redirect=ool
2396 If set, stdout and stderr streams are redirected to files named
2397 from the job name. Default is true.
2398
2399 (xnvme)xnvme_async=str
2400 Select the xnvme async command interface. This can take these
2401 values.
2402
2403 emu This is default and use to emulate asynchronous
2404 I/O by using a single thread to create a queue
2405 pair on top of a synchronous I/O interface using
2406 the NVMe driver IOCTL.
2407
2408 thrpool
2409 Emulate an asynchronous I/O interface with a pool
2410 of userspace threads on top of a synchronous I/O
2411 interface using the NVMe driver IOCTL. By default
2412 four threads are used.
2413
2414 io_uring
2415 Linux native asynchronous I/O interface which sup‐
2416 ports both direct and buffered I/O.
2417
2418 libaio Use Linux aio for Asynchronous I/O
2419
2420 posix Use the posix asynchronous I/O interface to per‐
2421 form one or more I/O operations asynchronously.
2422
2423 nil Do not transfer any data; just pretend to. This is
2424 mainly used for introspective performance evalua‐
2425 tion.
2426
2427 (xnvme)xnvme_sync=str
2428 Select the xnvme synchronous command interface. This can take
2429 these values.
2430
2431 nvme This is default and uses Linux NVMe Driver ioctl()
2432 for synchronous I/O.
2433
2434 psync This supports regular as well as vectored pread()
2435 and pwrite() commands.
2436
2437 block This is the same as psync except that it also sup‐
2438 ports zone management commands using Linux block
2439 layer IOCTLs.
2440
2441 (xnvme)xnvme_admin=str
2442 Select the xnvme admin command interface. This can take these
2443 values.
2444
2445 nvme This is default and uses Linux NVMe Driver ioctl()
2446 for admin commands.
2447
2448 block Use Linux Block Layer ioctl() and sysfs for admin
2449 commands.
2450
2451 (xnvme)xnvme_dev_nsid=int
2452 xnvme namespace identifier for userspace NVMe driver such as
2453 SPDK.
2454
2455 (xnvme)xnvme_iovec
2456 If this option is set, xnvme will use vectored read/write com‐
2457 mands.
2458
2459 I/O depth
2460 iodepth=int
2461 Number of I/O units to keep in flight against the file. Note
2462 that increasing iodepth beyond 1 will not affect synchronous io‐
2463 engines (except for small degrees when verify_async is in use).
2464 Even async engines may impose OS restrictions causing the de‐
2465 sired depth not to be achieved. This may happen on Linux when
2466 using libaio and not setting `direct=1', since buffered I/O is
2467 not async on that OS. Keep an eye on the I/O depth distribution
2468 in the fio output to verify that the achieved depth is as ex‐
2469 pected. Default: 1.
2470
2471 iodepth_batch_submit=int, iodepth_batch=int
2472 This defines how many pieces of I/O to submit at once. It de‐
2473 faults to 1 which means that we submit each I/O as soon as it is
2474 available, but can be raised to submit bigger batches of I/O at
2475 the time. If it is set to 0 the iodepth value will be used.
2476
2477 iodepth_batch_complete_min=int, iodepth_batch_complete=int
2478 This defines how many pieces of I/O to retrieve at once. It de‐
2479 faults to 1 which means that we'll ask for a minimum of 1 I/O in
2480 the retrieval process from the kernel. The I/O retrieval will go
2481 on until we hit the limit set by iodepth_low. If this variable
2482 is set to 0, then fio will always check for completed events be‐
2483 fore queuing more I/O. This helps reduce I/O latency, at the
2484 cost of more retrieval system calls.
2485
2486 iodepth_batch_complete_max=int
2487 This defines maximum pieces of I/O to retrieve at once. This
2488 variable should be used along with iodepth_batch_com‐
2489 plete_min=int variable, specifying the range of min and max
2490 amount of I/O which should be retrieved. By default it is equal
2491 to iodepth_batch_complete_min value. Example #1:
2492
2493 iodepth_batch_complete_min=1
2494 iodepth_batch_complete_max=<iodepth>
2495
2496 which means that we will retrieve at least 1 I/O and up to the
2497 whole submitted queue depth. If none of I/O has been completed
2498 yet, we will wait. Example #2:
2499
2500 iodepth_batch_complete_min=0
2501 iodepth_batch_complete_max=<iodepth>
2502
2503 which means that we can retrieve up to the whole submitted queue
2504 depth, but if none of I/O has been completed yet, we will NOT
2505 wait and immediately exit the system call. In this example we
2506 simply do polling.
2507
2508 iodepth_low=int
2509 The low water mark indicating when to start filling the queue
2510 again. Defaults to the same as iodepth, meaning that fio will
2511 attempt to keep the queue full at all times. If iodepth is set
2512 to e.g. 16 and iodepth_low is set to 4, then after fio has
2513 filled the queue of 16 requests, it will let the depth drain
2514 down to 4 before starting to fill it again.
2515
2516 serialize_overlap=bool
2517 Serialize in-flight I/Os that might otherwise cause or suffer
2518 from data races. When two or more I/Os are submitted simultane‐
2519 ously, there is no guarantee that the I/Os will be processed or
2520 completed in the submitted order. Further, if two or more of
2521 those I/Os are writes, any overlapping region between them can
2522 become indeterminate/undefined on certain storage. These issues
2523 can cause verification to fail erratically when at least one of
2524 the racing I/Os is changing data and the overlapping region has
2525 a non-zero size. Setting serialize_overlap tells fio to avoid
2526 provoking this behavior by explicitly serializing in-flight I/Os
2527 that have a non-zero overlap. Note that setting this option can
2528 reduce both performance and the iodepth achieved.
2529
2530 This option only applies to I/Os issued for a single job except
2531 when it is enabled along with io_submit_mode=offload. In offload
2532 mode, fio will check for overlap among all I/Os submitted by
2533 offload jobs with serialize_overlap enabled.
2534
2535 Default: false.
2536
2537 io_submit_mode=str
2538 This option controls how fio submits the I/O to the I/O engine.
2539 The default is `inline', which means that the fio job threads
2540 submit and reap I/O directly. If set to `offload', the job
2541 threads will offload I/O submission to a dedicated pool of I/O
2542 threads. This requires some coordination and thus has a bit of
2543 extra overhead, especially for lower queue depth I/O where it
2544 can increase latencies. The benefit is that fio can manage sub‐
2545 mission rates independently of the device completion rates. This
2546 avoids skewed latency reporting if I/O gets backed up on the de‐
2547 vice side (the coordinated omission problem). Note that this op‐
2548 tion cannot reliably be used with async IO engines.
2549
2550 I/O rate
2551 thinktime=time
2552 Stall the job for the specified period of time after an I/O has
2553 completed before issuing the next. May be used to simulate pro‐
2554 cessing being done by an application. When the unit is omitted,
2555 the value is interpreted in microseconds. See thinktime_blocks,
2556 thinktime_iotime and thinktime_spin.
2557
2558 thinktime_spin=time
2559 Only valid if thinktime is set - pretend to spend CPU time doing
2560 something with the data received, before falling back to sleep‐
2561 ing for the rest of the period specified by thinktime. When the
2562 unit is omitted, the value is interpreted in microseconds.
2563
2564 thinktime_blocks=int
2565 Only valid if thinktime is set - control how many blocks to is‐
2566 sue, before waiting thinktime usecs. If not set, defaults to 1
2567 which will make fio wait thinktime usecs after every block. This
2568 effectively makes any queue depth setting redundant, since no
2569 more than 1 I/O will be queued before we have to complete it and
2570 do our thinktime. In other words, this setting effectively caps
2571 the queue depth if the latter is larger.
2572
2573 thinktime_blocks_type=str
2574 Only valid if thinktime is set - control how thinktime_blocks
2575 triggers. The default is `complete', which triggers thinktime
2576 when fio completes thinktime_blocks blocks. If this is set to
2577 `issue', then the trigger happens at the issue side.
2578
2579 thinktime_iotime=time
2580 Only valid if thinktime is set - control thinktime interval by
2581 time. The thinktime stall is repeated after IOs are executed
2582 for thinktime_iotime. For example, `--thinktime_iotime=9s
2583 --thinktime=1s' repeat 10-second cycle with IOs for 9 seconds
2584 and stall for 1 second. When the unit is omitted, thinktime_io‐
2585 time is interpreted as a number of seconds. If this option is
2586 used together with thinktime_blocks, the thinktime stall is re‐
2587 peated after thinktime_iotime or after thinktime_blocks IOs,
2588 whichever happens first.
2589
2590
2591 rate=int[,int][,int]
2592 Cap the bandwidth used by this job. The number is in bytes/sec,
2593 the normal suffix rules apply. Comma-separated values may be
2594 specified for reads, writes, and trims as described in block‐
2595 size.
2596
2597 For example, using `rate=1m,500k' would limit reads to 1MiB/sec
2598 and writes to 500KiB/sec. Capping only reads or writes can be
2599 done with `rate=,500k' or `rate=500k,' where the former will
2600 only limit writes (to 500KiB/sec) and the latter will only limit
2601 reads.
2602
2603 rate_min=int[,int][,int]
2604 Tell fio to do whatever it can to maintain at least this band‐
2605 width. Failing to meet this requirement will cause the job to
2606 exit. Comma-separated values may be specified for reads, writes,
2607 and trims as described in blocksize.
2608
2609 rate_iops=int[,int][,int]
2610 Cap the bandwidth to this number of IOPS. Basically the same as
2611 rate, just specified independently of bandwidth. If the job is
2612 given a block size range instead of a fixed value, the smallest
2613 block size is used as the metric. Comma-separated values may be
2614 specified for reads, writes, and trims as described in block‐
2615 size.
2616
2617 rate_iops_min=int[,int][,int]
2618 If fio doesn't meet this rate of I/O, it will cause the job to
2619 exit. Comma-separated values may be specified for reads,
2620 writes, and trims as described in blocksize.
2621
2622 rate_process=str
2623 This option controls how fio manages rated I/O submissions. The
2624 default is `linear', which submits I/O in a linear fashion with
2625 fixed delays between I/Os that gets adjusted based on I/O com‐
2626 pletion rates. If this is set to `poisson', fio will submit I/O
2627 based on a more real world random request flow, known as the
2628 Poisson process (https://en.wikipedia.org/wiki/Pois‐
2629 son_point_process). The lambda will be 10^6 / IOPS for the given
2630 workload.
2631
2632 rate_ignore_thinktime=bool
2633 By default, fio will attempt to catch up to the specified rate
2634 setting, if any kind of thinktime setting was used. If this op‐
2635 tion is set, then fio will ignore the thinktime and continue do‐
2636 ing IO at the specified rate, instead of entering a catch-up
2637 mode after thinktime is done.
2638
2639 I/O latency
2640 latency_target=time
2641 If set, fio will attempt to find the max performance point that
2642 the given workload will run at while maintaining a latency below
2643 this target. When the unit is omitted, the value is interpreted
2644 in microseconds. See latency_window and latency_percentile.
2645
2646 latency_window=time
2647 Used with latency_target to specify the sample window that the
2648 job is run at varying queue depths to test the performance. When
2649 the unit is omitted, the value is interpreted in microseconds.
2650
2651 latency_percentile=float
2652 The percentage of I/Os that must fall within the criteria speci‐
2653 fied by latency_target and latency_window. If not set, this de‐
2654 faults to 100.0, meaning that all I/Os must be equal or below to
2655 the value set by latency_target.
2656
2657 latency_run=bool
2658 Used with latency_target. If false (default), fio will find the
2659 highest queue depth that meets latency_target and exit. If true,
2660 fio will continue running and try to meet latency_target by ad‐
2661 justing queue depth.
2662
2663 max_latency=time[,time][,time]
2664 If set, fio will exit the job with an ETIMEDOUT error if it ex‐
2665 ceeds this maximum latency. When the unit is omitted, the value
2666 is interpreted in microseconds. Comma-separated values may be
2667 specified for reads, writes, and trims as described in block‐
2668 size.
2669
2670 rate_cycle=int
2671 Average bandwidth for rate and rate_min over this number of mil‐
2672 liseconds. Defaults to 1000.
2673
2674 I/O replay
2675 write_iolog=str
2676 Write the issued I/O patterns to the specified file. See
2677 read_iolog. Specify a separate file for each job, otherwise the
2678 iologs will be interspersed and the file may be corrupt. This
2679 file will be opened in append mode.
2680
2681 read_iolog=str
2682 Open an iolog with the specified filename and replay the I/O
2683 patterns it contains. This can be used to store a workload and
2684 replay it sometime later. The iolog given may also be a blktrace
2685 binary file, which allows fio to replay a workload captured by
2686 blktrace. See blktrace(8) for how to capture such logging data.
2687 For blktrace replay, the file needs to be turned into a blkparse
2688 binary data file first (`blkparse <device> -o /dev/null -d
2689 file_for_fio.bin'). You can specify a number of files by sepa‐
2690 rating the names with a ':' character. See the filename option
2691 for information on how to escape ':' characters within the file
2692 names. These files will be sequentially assigned to job clones
2693 created by numjobs. '-' is a reserved name, meaning read from
2694 stdin, notably if filename is set to '-' which means stdin as
2695 well, then this flag can't be set to '-'.
2696
2697 read_iolog_chunked=bool
2698 Determines how iolog is read. If false (default) entire
2699 read_iolog will be read at once. If selected true, input from
2700 iolog will be read gradually. Useful when iolog is very large,
2701 or it is generated.
2702
2703 merge_blktrace_file=str
2704 When specified, rather than replaying the logs passed to
2705 read_iolog, the logs go through a merge phase which aggregates
2706 them into a single blktrace. The resulting file is then passed
2707 on as the read_iolog parameter. The intention here is to make
2708 the order of events consistent. This limits the influence of the
2709 scheduler compared to replaying multiple blktraces via concur‐
2710 rent jobs.
2711
2712 merge_blktrace_scalars=float_list
2713 This is a percentage based option that is index paired with the
2714 list of files passed to read_iolog. When merging is performed,
2715 scale the time of each event by the corresponding amount. For
2716 example, `--merge_blktrace_scalars="50:100"' runs the first
2717 trace in halftime and the second trace in realtime. This knob is
2718 separately tunable from replay_time_scale which scales the trace
2719 during runtime and will not change the output of the merge un‐
2720 like this option.
2721
2722 merge_blktrace_iters=float_list
2723 This is a whole number option that is index paired with the list
2724 of files passed to read_iolog. When merging is performed, run
2725 each trace for the specified number of iterations. For example,
2726 `--merge_blktrace_iters="2:1"' runs the first trace for two it‐
2727 erations and the second trace for one iteration.
2728
2729 replay_no_stall=bool
2730 When replaying I/O with read_iolog the default behavior is to
2731 attempt to respect the timestamps within the log and replay them
2732 with the appropriate delay between IOPS. By setting this vari‐
2733 able fio will not respect the timestamps and attempt to replay
2734 them as fast as possible while still respecting ordering. The
2735 result is the same I/O pattern to a given device, but different
2736 timings.
2737
2738 replay_time_scale=int
2739 When replaying I/O with read_iolog, fio will honor the original
2740 timing in the trace. With this option, it's possible to scale
2741 the time. It's a percentage option, if set to 50 it means run at
2742 50% the original IO rate in the trace. If set to 200, run at
2743 twice the original IO rate. Defaults to 100.
2744
2745 replay_redirect=str
2746 While replaying I/O patterns using read_iolog the default behav‐
2747 ior is to replay the IOPS onto the major/minor device that each
2748 IOP was recorded from. This is sometimes undesirable because on
2749 a different machine those major/minor numbers can map to a dif‐
2750 ferent device. Changing hardware on the same system can also re‐
2751 sult in a different major/minor mapping. replay_redirect causes
2752 all I/Os to be replayed onto the single specified device regard‐
2753 less of the device it was recorded from. i.e. `replay_redi‐
2754 rect=/dev/sdc' would cause all I/O in the blktrace or iolog to
2755 be replayed onto `/dev/sdc'. This means multiple devices will be
2756 replayed onto a single device, if the trace contains multiple
2757 devices. If you want multiple devices to be replayed concur‐
2758 rently to multiple redirected devices you must blkparse your
2759 trace into separate traces and replay them with independent fio
2760 invocations. Unfortunately this also breaks the strict time or‐
2761 dering between multiple device accesses.
2762
2763 replay_align=int
2764 Force alignment of the byte offsets in a trace to this value.
2765 The value must be a power of 2.
2766
2767 replay_scale=int
2768 Scale bye offsets down by this factor when replaying traces.
2769 Should most likely use replay_align as well.
2770
2771 Threads, processes and job synchronization
2772 replay_skip=str
2773 Sometimes it's useful to skip certain IO types in a replay
2774 trace. This could be, for instance, eliminating the writes in
2775 the trace. Or not replaying the trims/discards, if you are redi‐
2776 recting to a device that doesn't support them. This option
2777 takes a comma separated list of read, write, trim, sync.
2778
2779 thread Fio defaults to creating jobs by using fork, however if this op‐
2780 tion is given, fio will create jobs by using POSIX Threads'
2781 function pthread_create(3) to create threads instead.
2782
2783 wait_for=str
2784 If set, the current job won't be started until all workers of
2785 the specified waitee job are done. wait_for operates on the job
2786 name basis, so there are a few limitations. First, the waitee
2787 must be defined prior to the waiter job (meaning no forward ref‐
2788 erences). Second, if a job is being referenced as a waitee, it
2789 must have a unique name (no duplicate waitees).
2790
2791 nice=int
2792 Run the job with the given nice value. See man nice(2). On Win‐
2793 dows, values less than -15 set the process class to "High"; -1
2794 through -15 set "Above Normal"; 1 through 15 "Below Normal"; and
2795 above 15 "Idle" priority class.
2796
2797 prio=int
2798 Set the I/O priority value of this job. Linux limits us to a
2799 positive value between 0 and 7, with 0 being the highest. See
2800 man ionice(1). Refer to an appropriate manpage for other operat‐
2801 ing systems since meaning of priority may differ. For per-com‐
2802 mand priority setting, see the I/O engine specific `cmdprio_per‐
2803 centage` and `cmdprio` options.
2804
2805 prioclass=int
2806 Set the I/O priority class. See man ionice(1). For per-command
2807 priority setting, see the I/O engine specific `cmdprio_percent‐
2808 age` and `cmdprio_class` options.
2809
2810 cpus_allowed=str
2811 Controls the same options as cpumask, but accepts a textual
2812 specification of the permitted CPUs instead and CPUs are indexed
2813 from 0. So to use CPUs 0 and 5 you would specify `cpus_al‐
2814 lowed=0,5'. This option also allows a range of CPUs to be speci‐
2815 fied -- say you wanted a binding to CPUs 0, 5, and 8 to 15, you
2816 would set `cpus_allowed=0,5,8-15'.
2817
2818 On Windows, when `cpus_allowed' is unset only CPUs from fio's
2819 current processor group will be used and affinity settings are
2820 inherited from the system. An fio build configured to target
2821 Windows 7 makes options that set CPUs processor group aware and
2822 values will set both the processor group and a CPU from within
2823 that group. For example, on a system where processor group 0 has
2824 40 CPUs and processor group 1 has 32 CPUs, `cpus_allowed' values
2825 between 0 and 39 will bind CPUs from processor group 0 and
2826 `cpus_allowed' values between 40 and 71 will bind CPUs from pro‐
2827 cessor group 1. When using `cpus_allowed_policy=shared' all CPUs
2828 specified by a single `cpus_allowed' option must be from the
2829 same processor group. For Windows fio builds not built for Win‐
2830 dows 7, CPUs will only be selected from (and be relative to)
2831 whatever processor group fio happens to be running in and CPUs
2832 from other processor groups cannot be used.
2833
2834 cpus_allowed_policy=str
2835 Set the policy of how fio distributes the CPUs specified by
2836 cpus_allowed or cpumask. Two policies are supported:
2837
2838 shared All jobs will share the CPU set specified.
2839
2840 split Each job will get a unique CPU from the CPU set.
2841
2842 shared is the default behavior, if the option isn't specified.
2843 If split is specified, then fio will assign one cpu per job. If
2844 not enough CPUs are given for the jobs listed, then fio will
2845 roundrobin the CPUs in the set.
2846
2847 cpumask=int
2848 Set the CPU affinity of this job. The parameter given is a bit
2849 mask of allowed CPUs the job may run on. So if you want the al‐
2850 lowed CPUs to be 1 and 5, you would pass the decimal value of (1
2851 << 1 | 1 << 5), or 34. See man sched_setaffinity(2). This may
2852 not work on all supported operating systems or kernel versions.
2853 This option doesn't work well for a higher CPU count than what
2854 you can store in an integer mask, so it can only control cpus
2855 1-32. For boxes with larger CPU counts, use cpus_allowed.
2856
2857 numa_cpu_nodes=str
2858 Set this job running on specified NUMA nodes' CPUs. The argu‐
2859 ments allow comma delimited list of cpu numbers, A-B ranges, or
2860 `all'. Note, to enable NUMA options support, fio must be built
2861 on a system with libnuma-dev(el) installed.
2862
2863 numa_mem_policy=str
2864 Set this job's memory policy and corresponding NUMA nodes. For‐
2865 mat of the arguments:
2866
2867 <mode>[:<nodelist>]
2868
2869 `mode' is one of the following memory policies: `default', `pre‐
2870 fer', `bind', `interleave' or `local'. For `default' and `local'
2871 memory policies, no node needs to be specified. For `prefer',
2872 only one node is allowed. For `bind' and `interleave' the `node‐
2873 list' may be as follows: a comma delimited list of numbers, A-B
2874 ranges, or `all'.
2875
2876 cgroup=str
2877 Add job to this control group. If it doesn't exist, it will be
2878 created. The system must have a mounted cgroup blkio mount point
2879 for this to work. If your system doesn't have it mounted, you
2880 can do so with:
2881
2882 # mount -t cgroup -o blkio none /cgroup
2883
2884 cgroup_weight=int
2885 Set the weight of the cgroup to this value. See the documenta‐
2886 tion that comes with the kernel, allowed values are in the range
2887 of 100..1000.
2888
2889 cgroup_nodelete=bool
2890 Normally fio will delete the cgroups it has created after the
2891 job completion. To override this behavior and to leave cgroups
2892 around after the job completion, set `cgroup_nodelete=1'. This
2893 can be useful if one wants to inspect various cgroup files after
2894 job completion. Default: false.
2895
2896 flow_id=int
2897 The ID of the flow. If not specified, it defaults to being a
2898 global flow. See flow.
2899
2900 flow=int
2901 Weight in token-based flow control. If this value is used, then
2902 fio regulates the activity between two or more jobs sharing the
2903 same flow_id. Fio attempts to keep each job activity propor‐
2904 tional to other jobs' activities in the same flow_id group, with
2905 respect to requested weight per job. That is, if one job has
2906 `flow=3', another job has `flow=2' and another with `flow=1`,
2907 then there will be a roughly 3:2:1 ratio in how much one runs vs
2908 the others.
2909
2910 flow_sleep=int
2911 The period of time, in microseconds, to wait after the flow
2912 counter has exceeded its proportion before retrying operations.
2913
2914 stonewall, wait_for_previous
2915 Wait for preceding jobs in the job file to exit, before starting
2916 this one. Can be used to insert serialization points in the job
2917 file. A stone wall also implies starting a new reporting group,
2918 see group_reporting. Optionally you can use `stonewall=0` to
2919 disable or `stonewall=1` to enable it.
2920
2921 exitall
2922 By default, fio will continue running all other jobs when one
2923 job finishes. Sometimes this is not the desired action. Setting
2924 exitall will instead make fio terminate all jobs in the same
2925 group, as soon as one job of that group finishes.
2926
2927 exit_what=str
2928 By default, fio will continue running all other jobs when one
2929 job finishes. Sometimes this is not the desired action. Setting
2930 exitall will instead make fio terminate all jobs in the same
2931 group. The option exit_what allows you to control which jobs get
2932 terminated when exitall is enabled. The default value is group.
2933 The allowed values are:
2934
2935 all terminates all jobs.
2936
2937 group is the default and does not change the behaviour
2938 of exitall.
2939
2940 stonewall
2941 terminates all currently running jobs across all
2942 groups and continues execution with the next
2943 stonewalled group.
2944
2945 exec_prerun=str
2946 Before running this job, issue the command specified through
2947 system(3). Output is redirected in a file called `jobname.pre‐
2948 run.txt'.
2949
2950 exec_postrun=str
2951 After the job completes, issue the command specified though sys‐
2952 tem(3). Output is redirected in a file called `job‐
2953 name.postrun.txt'.
2954
2955 uid=int
2956 Instead of running as the invoking user, set the user ID to this
2957 value before the thread/process does any work.
2958
2959 gid=int
2960 Set group ID, see uid.
2961
2962 Verification
2963 verify_only
2964 Do not perform specified workload, only verify data still
2965 matches previous invocation of this workload. This option allows
2966 one to check data multiple times at a later date without over‐
2967 writing it. This option makes sense only for workloads that
2968 write data, and does not support workloads with the time_based
2969 option set.
2970
2971 do_verify=bool
2972 Run the verify phase after a write phase. Only valid if verify
2973 is set. Default: true.
2974
2975 verify=str
2976 If writing to a file, fio can verify the file contents after
2977 each iteration of the job. Each verification method also implies
2978 verification of special header, which is written to the begin‐
2979 ning of each block. This header also includes meta information,
2980 like offset of the block, block number, timestamp when block was
2981 written, etc. verify can be combined with verify_pattern option.
2982 The allowed values are:
2983
2984 md5 Use an md5 sum of the data area and store it in
2985 the header of each block.
2986
2987 crc64 Use an experimental crc64 sum of the data area and
2988 store it in the header of each block.
2989
2990 crc32c Use a crc32c sum of the data area and store it in
2991 the header of each block. This will automatically
2992 use hardware acceleration (e.g. SSE4.2 on an x86
2993 or CRC crypto extensions on ARM64) but will fall
2994 back to software crc32c if none is found. Gener‐
2995 ally the fastest checksum fio supports when hard‐
2996 ware accelerated.
2997
2998 crc32c-intel
2999 Synonym for crc32c.
3000
3001 crc32 Use a crc32 sum of the data area and store it in
3002 the header of each block.
3003
3004 crc16 Use a crc16 sum of the data area and store it in
3005 the header of each block.
3006
3007 crc7 Use a crc7 sum of the data area and store it in
3008 the header of each block.
3009
3010 xxhash Use xxhash as the checksum function. Generally the
3011 fastest software checksum that fio supports.
3012
3013 sha512 Use sha512 as the checksum function.
3014
3015 sha256 Use sha256 as the checksum function.
3016
3017 sha1 Use optimized sha1 as the checksum function.
3018
3019 sha3-224
3020 Use optimized sha3-224 as the checksum function.
3021
3022 sha3-256
3023 Use optimized sha3-256 as the checksum function.
3024
3025 sha3-384
3026 Use optimized sha3-384 as the checksum function.
3027
3028 sha3-512
3029 Use optimized sha3-512 as the checksum function.
3030
3031 meta This option is deprecated, since now meta informa‐
3032 tion is included in generic verification header
3033 and meta verification happens by default. For de‐
3034 tailed information see the description of the ver‐
3035 ify setting. This option is kept because of com‐
3036 patibility's sake with old configurations. Do not
3037 use it.
3038
3039 pattern
3040 Verify a strict pattern. Normally fio includes a
3041 header with some basic information and checksum‐
3042 ming, but if this option is set, only the specific
3043 pattern set with verify_pattern is verified.
3044
3045 null Only pretend to verify. Useful for testing inter‐
3046 nals with `ioengine=null', not for much else.
3047
3048 This option can be used for repeated burn-in tests of a system
3049 to make sure that the written data is also correctly read back.
3050 If the data direction given is a read or random read, fio will
3051 assume that it should verify a previously written file. If the
3052 data direction includes any form of write, the verify will be of
3053 the newly written data.
3054
3055 To avoid false verification errors, do not use the norandommap
3056 option when verifying data with async I/O engines and I/O depths
3057 > 1. Or use the norandommap and the lfsr random generator to‐
3058 gether to avoid writing to the same offset with multiple out‐
3059 standing I/Os.
3060
3061 verify_offset=int
3062 Swap the verification header with data somewhere else in the
3063 block before writing. It is swapped back before verifying.
3064
3065 verify_interval=int
3066 Write the verification header at a finer granularity than the
3067 blocksize. It will be written for chunks the size of verify_in‐
3068 terval. blocksize should divide this evenly.
3069
3070 verify_pattern=str
3071 If set, fio will fill the I/O buffers with this pattern. Fio de‐
3072 faults to filling with totally random bytes, but sometimes it's
3073 interesting to fill with a known pattern for I/O verification
3074 purposes. Depending on the width of the pattern, fio will fill
3075 1/2/3/4 bytes of the buffer at the time (it can be either a dec‐
3076 imal or a hex number). The verify_pattern if larger than a
3077 32-bit quantity has to be a hex number that starts with either
3078 "0x" or "0X". Use with verify. Also, verify_pattern supports %o
3079 format, which means that for each block offset will be written
3080 and then verified back, e.g.:
3081
3082 verify_pattern=%o
3083
3084 Or use combination of everything:
3085
3086 verify_pattern=0xff%o"abcd"-12
3087
3088 verify_fatal=bool
3089 Normally fio will keep checking the entire contents before quit‐
3090 ting on a block verification failure. If this option is set, fio
3091 will exit the job on the first observed failure. Default: false.
3092
3093 verify_dump=bool
3094 If set, dump the contents of both the original data block and
3095 the data block we read off disk to files. This allows later
3096 analysis to inspect just what kind of data corruption occurred.
3097 Off by default.
3098
3099 verify_async=int
3100 Fio will normally verify I/O inline from the submitting thread.
3101 This option takes an integer describing how many async offload
3102 threads to create for I/O verification instead, causing fio to
3103 offload the duty of verifying I/O contents to one or more sepa‐
3104 rate threads. If using this offload option, even sync I/O en‐
3105 gines can benefit from using an iodepth setting higher than 1,
3106 as it allows them to have I/O in flight while verifies are run‐
3107 ning. Defaults to 0 async threads, i.e. verification is not
3108 asynchronous.
3109
3110 verify_async_cpus=str
3111 Tell fio to set the given CPU affinity on the async I/O verifi‐
3112 cation threads. See cpus_allowed for the format used.
3113
3114 verify_backlog=int
3115 Fio will normally verify the written contents of a job that uti‐
3116 lizes verify once that job has completed. In other words, every‐
3117 thing is written then everything is read back and verified. You
3118 may want to verify continually instead for a variety of reasons.
3119 Fio stores the meta data associated with an I/O block in memory,
3120 so for large verify workloads, quite a bit of memory would be
3121 used up holding this meta data. If this option is enabled, fio
3122 will write only N blocks before verifying these blocks.
3123
3124 verify_backlog_batch=int
3125 Control how many blocks fio will verify if verify_backlog is
3126 set. If not set, will default to the value of verify_backlog
3127 (meaning the entire queue is read back and verified). If ver‐
3128 ify_backlog_batch is less than verify_backlog then not all
3129 blocks will be verified, if verify_backlog_batch is larger than
3130 verify_backlog, some blocks will be verified more than once.
3131
3132 verify_state_save=bool
3133 When a job exits during the write phase of a verify workload,
3134 save its current state. This allows fio to replay up until that
3135 point, if the verify state is loaded for the verify read phase.
3136 The format of the filename is, roughly:
3137
3138 <type>-<jobname>-<jobindex>-verify.state.
3139
3140 <type> is "local" for a local run, "sock" for a client/server
3141 socket connection, and "ip" (192.168.0.1, for instance) for a
3142 networked client/server connection. Defaults to true.
3143
3144 verify_state_load=bool
3145 If a verify termination trigger was used, fio stores the current
3146 write state of each thread. This can be used at verification
3147 time so that fio knows how far it should verify. Without this
3148 information, fio will run a full verification pass, according to
3149 the settings in the job file used. Default false.
3150
3151 trim_percentage=int
3152 Number of verify blocks to discard/trim.
3153
3154 trim_verify_zero=bool
3155 Verify that trim/discarded blocks are returned as zeros.
3156
3157 trim_backlog=int
3158 Verify that trim/discarded blocks are returned as zeros.
3159
3160 trim_backlog_batch=int
3161 Trim this number of I/O blocks.
3162
3163 experimental_verify=bool
3164 Enable experimental verification.
3165
3166 Steady state
3167 steadystate=str:float, ss=str:float
3168 Define the criterion and limit for assessing steady state per‐
3169 formance. The first parameter designates the criterion whereas
3170 the second parameter sets the threshold. When the criterion
3171 falls below the threshold for the specified duration, the job
3172 will stop. For example, `iops_slope:0.1%' will direct fio to
3173 terminate the job when the least squares regression slope falls
3174 below 0.1% of the mean IOPS. If group_reporting is enabled this
3175 will apply to all jobs in the group. Below is the list of avail‐
3176 able steady state assessment criteria. All assessments are car‐
3177 ried out using only data from the rolling collection window.
3178 Threshold limits can be expressed as a fixed value or as a per‐
3179 centage of the mean in the collection window.
3180
3181 When using this feature, most jobs should include the time_based
3182 and runtime options or the loops option so that fio does not
3183 stop running after it has covered the full size of the specified
3184 file(s) or device(s).
3185
3186 iops Collect IOPS data. Stop the job if all in‐
3187 dividual IOPS measurements are within the
3188 specified limit of the mean IOPS (e.g.,
3189 `iops:2' means that all individual IOPS
3190 values must be within 2 of the mean,
3191 whereas `iops:0.2%' means that all individ‐
3192 ual IOPS values must be within 0.2% of the
3193 mean IOPS to terminate the job).
3194
3195 iops_slope
3196 Collect IOPS data and calculate the least
3197 squares regression slope. Stop the job if
3198 the slope falls below the specified limit.
3199
3200 bw Collect bandwidth data. Stop the job if all
3201 individual bandwidth measurements are
3202 within the specified limit of the mean
3203 bandwidth.
3204
3205 bw_slope
3206 Collect bandwidth data and calculate the
3207 least squares regression slope. Stop the
3208 job if the slope falls below the specified
3209 limit.
3210
3211 steadystate_duration=time, ss_dur=time
3212 A rolling window of this duration will be used to judge
3213 whether steady state has been reached. Data will be col‐
3214 lected once per second. The default is 0 which disables
3215 steady state detection. When the unit is omitted, the
3216 value is interpreted in seconds.
3217
3218 steadystate_ramp_time=time, ss_ramp=time
3219 Allow the job to run for the specified duration before
3220 beginning data collection for checking the steady state
3221 job termination criterion. The default is 0. When the
3222 unit is omitted, the value is interpreted in seconds.
3223
3224 Measurements and reporting
3225 per_job_logs=bool
3226 If set, this generates bw/clat/iops log with per file private
3227 filenames. If not set, jobs with identical names will share the
3228 log filename. Default: true.
3229
3230 group_reporting
3231 It may sometimes be interesting to display statistics for groups
3232 of jobs as a whole instead of for each individual job. This is
3233 especially true if numjobs is used; looking at individual
3234 thread/process output quickly becomes unwieldy. To see the final
3235 report per-group instead of per-job, use group_reporting. Jobs
3236 in a file will be part of the same reporting group, unless if
3237 separated by a stonewall, or by using new_group.
3238
3239 new_group
3240 Start a new reporting group. See: group_reporting. If not given,
3241 all jobs in a file will be part of the same reporting group, un‐
3242 less separated by a stonewall.
3243
3244 stats=bool
3245 By default, fio collects and shows final output results for all
3246 jobs that run. If this option is set to 0, then fio will ignore
3247 it in the final stat output.
3248
3249 write_bw_log=str
3250 If given, write a bandwidth log for this job. Can be used to
3251 store data of the bandwidth of the jobs in their lifetime.
3252
3253 If no str argument is given, the default filename of `job‐
3254 name_type.x.log' is used. Even when the argument is given, fio
3255 will still append the type of log. So if one specifies:
3256
3257 write_bw_log=foo
3258
3259 The actual log name will be `foo_bw.x.log' where `x' is the in‐
3260 dex of the job (1..N, where N is the number of jobs). If
3261 per_job_logs is false, then the filename will not include the
3262 `.x` job index.
3263
3264 The included fio_generate_plots script uses gnuplot to turn
3265 these text files into nice graphs. See the LOG FILE FORMATS sec‐
3266 tion for how data is structured within the file.
3267
3268 write_lat_log=str
3269 Same as write_bw_log, except this option creates I/O submission
3270 (e.g., `name_slat.x.log'), completion (e.g., `name_clat.x.log'),
3271 and total (e.g., `name_lat.x.log') latency files instead. See
3272 write_bw_log for details about the filename format and the LOG
3273 FILE FORMATS section for how data is structured within the
3274 files.
3275
3276 write_hist_log=str
3277 Same as write_bw_log but writes an I/O completion latency his‐
3278 togram file (e.g., `name_hist.x.log') instead. Note that this
3279 file will be empty unless log_hist_msec has also been set. See
3280 write_bw_log for details about the filename format and the LOG
3281 FILE FORMATS section for how data is structured within the file.
3282
3283 write_iops_log=str
3284 Same as write_bw_log, but writes an IOPS file (e.g.
3285 `name_iops.x.log`) instead. Because fio defaults to individual
3286 I/O logging, the value entry in the IOPS log will be 1 unless
3287 windowed logging (see log_avg_msec) has been enabled. See
3288 write_bw_log for details about the filename format and LOG FILE
3289 FORMATS for how data is structured within the file.
3290
3291 log_entries=int
3292 By default, fio will log an entry in the iops, latency, or bw
3293 log for every I/O that completes. The initial number of I/O log
3294 entries is 1024. When the log entries are all used, new log en‐
3295 tries are dynamically allocated. This dynamic log entry alloca‐
3296 tion may negatively impact time-related statistics such as I/O
3297 tail latencies (e.g. 99.9th percentile completion latency). This
3298 option allows specifying a larger initial number of log entries
3299 to avoid run-time allocation of new log entries, resulting in
3300 more precise time-related I/O statistics. Also see log_avg_msec
3301 as well. Defaults to 1024.
3302
3303 log_avg_msec=int
3304 By default, fio will log an entry in the iops, latency, or bw
3305 log for every I/O that completes. When writing to the disk log,
3306 that can quickly grow to a very large size. Setting this option
3307 makes fio average the each log entry over the specified period
3308 of time, reducing the resolution of the log. See log_max_value
3309 as well. Defaults to 0, logging all entries. Also see LOG FILE
3310 FORMATS section.
3311
3312 log_hist_msec=int
3313 Same as log_avg_msec, but logs entries for completion latency
3314 histograms. Computing latency percentiles from averages of in‐
3315 tervals using log_avg_msec is inaccurate. Setting this option
3316 makes fio log histogram entries over the specified period of
3317 time, reducing log sizes for high IOPS devices while retaining
3318 percentile accuracy. See log_hist_coarseness and write_hist_log
3319 as well. Defaults to 0, meaning histogram logging is disabled.
3320
3321 log_hist_coarseness=int
3322 Integer ranging from 0 to 6, defining the coarseness of the res‐
3323 olution of the histogram logs enabled with log_hist_msec. For
3324 each increment in coarseness, fio outputs half as many bins. De‐
3325 faults to 0, for which histogram logs contain 1216 latency bins.
3326 See LOG FILE FORMATS section.
3327
3328 log_max_value=bool
3329 If log_avg_msec is set, fio logs the average over that window.
3330 If you instead want to log the maximum value, set this option to
3331 1. Defaults to 0, meaning that averaged values are logged.
3332
3333 log_offset=bool
3334 If this is set, the iolog options will include the byte offset
3335 for the I/O entry as well as the other data values. Defaults to
3336 0 meaning that offsets are not present in logs. Also see LOG
3337 FILE FORMATS section.
3338
3339 log_prio=bool
3340 If this is set, the iolog options will include the I/O priority
3341 for the I/O entry as well as the other data values. Defaults to
3342 0 meaning that I/O priorities are not present in logs. Also see
3343 LOG FILE FORMATS section.
3344
3345 log_compression=int
3346 If this is set, fio will compress the I/O logs as it goes, to
3347 keep the memory footprint lower. When a log reaches the speci‐
3348 fied size, that chunk is removed and compressed in the back‐
3349 ground. Given that I/O logs are fairly highly compressible, this
3350 yields a nice memory savings for longer runs. The downside is
3351 that the compression will consume some background CPU cycles, so
3352 it may impact the run. This, however, is also true if the log‐
3353 ging ends up consuming most of the system memory. So pick your
3354 poison. The I/O logs are saved normally at the end of a run, by
3355 decompressing the chunks and storing them in the specified log
3356 file. This feature depends on the availability of zlib.
3357
3358 log_compression_cpus=str
3359 Define the set of CPUs that are allowed to handle online log
3360 compression for the I/O jobs. This can provide better isolation
3361 between performance sensitive jobs, and background compression
3362 work. See cpus_allowed for the format used.
3363
3364 log_store_compressed=bool
3365 If set, fio will store the log files in a compressed format.
3366 They can be decompressed with fio, using the --inflate-log com‐
3367 mand line parameter. The files will be stored with a `.fz' suf‐
3368 fix.
3369
3370 log_unix_epoch=bool
3371 If set, fio will log Unix timestamps to the log files produced
3372 by enabling write_type_log for each log type, instead of the de‐
3373 fault zero-based timestamps.
3374
3375 log_alternate_epoch=bool
3376 If set, fio will log timestamps based on the epoch used by the
3377 clock specified in the log_alternate_epoch_clock_id option, to
3378 the log files produced by enabling write_type_log for each log
3379 type, instead of the default zero-based timestamps.
3380
3381 log_alternate_epoch_clock_id=int
3382 Specifies the clock_id to be used by clock_gettime to obtain the
3383 alternate epoch if either Blog_unix_epoch or log_alternate_epoch
3384 are true. Otherwise has no effect. Default value is 0, or
3385 CLOCK_REALTIME.
3386
3387 block_error_percentiles=bool
3388 If set, record errors in trim block-sized units from writes and
3389 trims and output a histogram of how many trims it took to get to
3390 errors, and what kind of error was encountered.
3391
3392 bwavgtime=int
3393 Average the calculated bandwidth over the given time. Value is
3394 specified in milliseconds. If the job also does bandwidth log‐
3395 ging through write_bw_log, then the minimum of this option and
3396 log_avg_msec will be used. Default: 500ms.
3397
3398 iopsavgtime=int
3399 Average the calculated IOPS over the given time. Value is speci‐
3400 fied in milliseconds. If the job also does IOPS logging through
3401 write_iops_log, then the minimum of this option and log_avg_msec
3402 will be used. Default: 500ms.
3403
3404 disk_util=bool
3405 Generate disk utilization statistics, if the platform supports
3406 it. Default: true.
3407
3408 disable_lat=bool
3409 Disable measurements of total latency numbers. Useful only for
3410 cutting back the number of calls to gettimeofday(2), as that
3411 does impact performance at really high IOPS rates. Note that to
3412 really get rid of a large amount of these calls, this option
3413 must be used with disable_slat and disable_bw_measurement as
3414 well.
3415
3416 disable_clat=bool
3417 Disable measurements of completion latency numbers. See dis‐
3418 able_lat.
3419
3420 disable_slat=bool
3421 Disable measurements of submission latency numbers. See dis‐
3422 able_lat.
3423
3424 disable_bw_measurement=bool, disable_bw=bool
3425 Disable measurements of throughput/bandwidth numbers. See dis‐
3426 able_lat.
3427
3428 slat_percentiles=bool
3429 Report submission latency percentiles. Submission latency is not
3430 recorded for synchronous ioengines.
3431
3432 clat_percentiles=bool
3433 Report completion latency percentiles.
3434
3435 lat_percentiles=bool
3436 Report total latency percentiles. Total latency is the sum of
3437 submission latency and completion latency.
3438
3439 percentile_list=float_list
3440 Overwrite the default list of percentiles for latencies and the
3441 block error histogram. Each number is a floating point number in
3442 the range (0,100], and the maximum length of the list is 20. Use
3443 ':' to separate the numbers. For example, `--per‐
3444 centile_list=99.5:99.9' will cause fio to report the latency du‐
3445 rations below which 99.5% and 99.9% of the observed latencies
3446 fell, respectively.
3447
3448 significant_figures=int
3449 If using --output-format of `normal', set the significant fig‐
3450 ures to this value. Higher values will yield more precise IOPS
3451 and throughput units, while lower values will round. Requires a
3452 minimum value of 1 and a maximum value of 10. Defaults to 4.
3453
3454 Error handling
3455 exitall_on_error
3456 When one job finishes in error, terminate the rest. The default
3457 is to wait for each job to finish.
3458
3459 continue_on_error=str
3460 Normally fio will exit the job on the first observed failure. If
3461 this option is set, fio will continue the job when there is a
3462 'non-fatal error' (EIO or EILSEQ) until the runtime is exceeded
3463 or the I/O size specified is completed. If this option is used,
3464 there are two more stats that are appended, the total error
3465 count and the first error. The error field given in the stats is
3466 the first error that was hit during the run.
3467
3468 Note: a write error from the device may go unnoticed by fio when
3469 using buffered IO, as the write() (or similar) system call
3470 merely dirties the kernel pages, unless `sync' or `direct' is
3471 used. Device IO errors occur when the dirty data is actually
3472 written out to disk. If fully sync writes aren't desirable,
3473 `fsync' or `fdatasync' can be used as well. This is specific to
3474 writes, as reads are always synchronous.
3475
3476 The allowed values are:
3477
3478 none Exit on any I/O or verify errors.
3479
3480 read Continue on read errors, exit on all
3481 others.
3482
3483 write Continue on write errors, exit on
3484 all others.
3485
3486 io Continue on any I/O error, exit on
3487 all others.
3488
3489 verify Continue on verify errors, exit on
3490 all others.
3491
3492 all Continue on all errors.
3493
3494 0 Backward-compatible alias for
3495 'none'.
3496
3497 1 Backward-compatible alias for 'all'.
3498
3499 ignore_error=str
3500 Sometimes you want to ignore some errors during
3501 test in that case you can specify error list for
3502 each error type, instead of only being able to ig‐
3503 nore the default 'non-fatal error' using con‐
3504 tinue_on_error. `ignore_er‐
3505 ror=READ_ERR_LIST,WRITE_ERR_LIST,VERIFY_ERR_LIST'
3506 errors for given error type is separated with ':'.
3507 Error may be symbol ('ENOSPC', 'ENOMEM') or inte‐
3508 ger. Example:
3509
3510 ignore_error=EAGAIN,ENOSPC:122
3511
3512 This option will ignore EAGAIN from READ, and
3513 ENOSPC and 122(EDQUOT) from WRITE. This option
3514 works by overriding continue_on_error with the
3515 list of errors for each error type if any.
3516
3517 error_dump=bool
3518 If set dump every error even if it is non fatal,
3519 true by default. If disabled only fatal error will
3520 be dumped.
3521
3522 Running predefined workloads
3523 Fio includes predefined profiles that mimic the I/O workloads generated
3524 by other tools.
3525
3526 profile=str
3527 The predefined workload to run. Current profiles are:
3528
3529 tiobench
3530 Threaded I/O bench (tiotest/tiobench) like work‐
3531 load.
3532
3533 act Aerospike Certification Tool (ACT) like workload.
3534
3535 To view a profile's additional options use --cmdhelp after specifying
3536 the profile. For example:
3537
3538 $ fio --profile=act --cmdhelp
3539
3540 Act profile options
3541 device-names=str
3542 Devices to use.
3543
3544 load=int
3545 ACT load multiplier. Default: 1.
3546
3547 test-duration=time
3548 How long the entire test takes to run. When the unit is omitted,
3549 the value is given in seconds. Default: 24h.
3550
3551 threads-per-queue=int
3552 Number of read I/O threads per device. Default: 8.
3553
3554 read-req-num-512-blocks=int
3555 Number of 512B blocks to read at the time. Default: 3.
3556
3557 large-block-op-kbytes=int
3558 Size of large block ops in KiB (writes). Default: 131072.
3559
3560 prep Set to run ACT prep phase.
3561
3562 Tiobench profile options
3563 size=str
3564 Size in MiB.
3565
3566 block=int
3567 Block size in bytes. Default: 4096.
3568
3569 numruns=int
3570 Number of runs.
3571
3572 dir=str
3573 Test directory.
3574
3575 threads=int
3576 Number of threads.
3577
3579 Fio spits out a lot of output. While running, fio will display the sta‐
3580 tus of the jobs created. An example of that would be:
3581
3582 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]
3583
3584 The characters inside the first set of square brackets denote the cur‐
3585 rent status of each thread. The first character is the first job de‐
3586 fined in the job file, and so forth. The possible values (in typical
3587 life cycle order) are:
3588
3589 P Thread setup, but not started.
3590 C Thread created.
3591 I Thread initialized, waiting or generating necessary data.
3592 p Thread running pre-reading file(s).
3593 / Thread is in ramp period.
3594 R Running, doing sequential reads.
3595 r Running, doing random reads.
3596 W Running, doing sequential writes.
3597 w Running, doing random writes.
3598 M Running, doing mixed sequential reads/writes.
3599 m Running, doing mixed random reads/writes.
3600 D Running, doing sequential trims.
3601 d Running, doing random trims.
3602 F Running, currently waiting for fsync(2).
3603 V Running, doing verification of written data.
3604 f Thread finishing.
3605 E Thread exited, not reaped by main thread yet.
3606 - Thread reaped.
3607 X Thread reaped, exited with an error.
3608 K Thread reaped, exited due to signal.
3609
3610 Fio will condense the thread string as not to take up more space on the
3611 command line than needed. For instance, if you have 10 readers and 10
3612 writers running, the output would look like this:
3613
3614 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]
3615
3616 Note that the status string is displayed in order, so it's possible to
3617 tell which of the jobs are currently doing what. In the example above
3618 this means that jobs 1--10 are readers and 11--20 are writers.
3619
3620 The other values are fairly self explanatory -- number of threads cur‐
3621 rently running and doing I/O, the number of currently open files (f=),
3622 the estimated completion percentage, the rate of I/O since last check
3623 (read speed listed first, then write speed and optionally trim speed)
3624 in terms of bandwidth and IOPS, and time to completion for the current
3625 running group. It's impossible to estimate runtime of the following
3626 groups (if any).
3627
3628 When fio is done (or interrupted by Ctrl-C), it will show the data for
3629 each thread, group of threads, and disks in that order. For each over‐
3630 all thread (or group) the output looks like:
3631
3632 Client1: (groupid=0, jobs=1): err= 0: pid=16109: Sat Jun 24 12:07:54 2017
3633 write: IOPS=88, BW=623KiB/s (638kB/s)(30.4MiB/50032msec)
3634 slat (nsec): min=500, max=145500, avg=8318.00, stdev=4781.50
3635 clat (usec): min=170, max=78367, avg=4019.02, stdev=8293.31
3636 lat (usec): min=174, max=78375, avg=4027.34, stdev=8291.79
3637 clat percentiles (usec):
3638 | 1.00th=[ 302], 5.00th=[ 326], 10.00th=[ 343], 20.00th=[ 363],
3639 | 30.00th=[ 392], 40.00th=[ 404], 50.00th=[ 416], 60.00th=[ 445],
3640 | 70.00th=[ 816], 80.00th=[ 6718], 90.00th=[12911], 95.00th=[21627],
3641 | 99.00th=[43779], 99.50th=[51643], 99.90th=[68682], 99.95th=[72877],
3642 | 99.99th=[78119]
3643 bw ( KiB/s): min= 532, max= 686, per=0.10%, avg=622.87, stdev=24.82, samples= 100
3644 iops : min= 76, max= 98, avg=88.98, stdev= 3.54, samples= 100
3645 lat (usec) : 250=0.04%, 500=64.11%, 750=4.81%, 1000=2.79%
3646 lat (msec) : 2=4.16%, 4=1.84%, 10=4.90%, 20=11.33%, 50=5.37%
3647 lat (msec) : 100=0.65%
3648 cpu : usr=0.27%, sys=0.18%, ctx=12072, majf=0, minf=21
3649 IO depths : 1=85.0%, 2=13.1%, 4=1.8%, 8=0.1%, 16=0.0%, 32=0.0%, >=64=0.0%
3650 submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3651 complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
3652 issued rwt: total=0,4450,0, short=0,0,0, dropped=0,0,0
3653 latency : target=0, window=0, percentile=100.00%, depth=8
3654
3655 The job name (or first job's name when using group_reporting) is
3656 printed, along with the group id, count of jobs being aggregated, last
3657 error id seen (which is 0 when there are no errors), pid/tid of that
3658 thread and the time the job/group completed. Below are the I/O statis‐
3659 tics for each data direction performed (showing writes in the example
3660 above). In the order listed, they denote:
3661
3662 read/write/trim
3663 The string before the colon shows the I/O direction the
3664 statistics are for. IOPS is the average I/Os performed
3665 per second. BW is the average bandwidth rate shown as:
3666 value in power of 2 format (value in power of 10 format).
3667 The last two values show: (total I/O performed in power
3668 of 2 format / runtime of that thread).
3669
3670 slat Submission latency (min being the minimum, max being the
3671 maximum, avg being the average, stdev being the standard
3672 deviation). This is the time it took to submit the I/O.
3673 For sync I/O this row is not displayed as the slat is re‐
3674 ally the completion latency (since queue/complete is one
3675 operation there). This value can be in nanoseconds, mi‐
3676 croseconds or milliseconds --- fio will choose the most
3677 appropriate base and print that (in the example above
3678 nanoseconds was the best scale). Note: in --minimal mode
3679 latencies are always expressed in microseconds.
3680
3681 clat Completion latency. Same names as slat, this denotes the
3682 time from submission to completion of the I/O pieces. For
3683 sync I/O, clat will usually be equal (or very close) to
3684 0, as the time from submit to complete is basically just
3685 CPU time (I/O has already been done, see slat explana‐
3686 tion).
3687
3688 lat Total latency. Same names as slat and clat, this denotes
3689 the time from when fio created the I/O unit to completion
3690 of the I/O operation.
3691
3692 bw Bandwidth statistics based on samples. Same names as the
3693 xlat stats, but also includes the number of samples taken
3694 (samples) and an approximate percentage of total aggre‐
3695 gate bandwidth this thread received in its group (per).
3696 This last value is only really useful if the threads in
3697 this group are on the same disk, since they are then com‐
3698 peting for disk access.
3699
3700 iops IOPS statistics based on samples. Same names as bw.
3701
3702 lat (nsec/usec/msec)
3703 The distribution of I/O completion latencies. This is the
3704 time from when I/O leaves fio and when it gets completed.
3705 Unlike the separate read/write/trim sections above, the
3706 data here and in the remaining sections apply to all I/Os
3707 for the reporting group. 250=0.04% means that 0.04% of
3708 the I/Os completed in under 250us. 500=64.11% means that
3709 64.11% of the I/Os required 250 to 499us for completion.
3710
3711 cpu CPU usage. User and system time, along with the number of
3712 context switches this thread went through, usage of sys‐
3713 tem and user time, and finally the number of major and
3714 minor page faults. The CPU utilization numbers are aver‐
3715 ages for the jobs in that reporting group, while the con‐
3716 text and fault counters are summed.
3717
3718 IO depths
3719 The distribution of I/O depths over the job lifetime. The
3720 numbers are divided into powers of 2 and each entry cov‐
3721 ers depths from that value up to those that are lower
3722 than the next entry -- e.g., 16= covers depths from 16 to
3723 31. Note that the range covered by a depth distribution
3724 entry can be different to the range covered by the equiv‐
3725 alent submit/complete distribution entry.
3726
3727 IO submit
3728 How many pieces of I/O were submitting in a single submit
3729 call. Each entry denotes that amount and below, until the
3730 previous entry -- e.g., 16=100% means that we submitted
3731 anywhere between 9 to 16 I/Os per submit call. Note that
3732 the range covered by a submit distribution entry can be
3733 different to the range covered by the equivalent depth
3734 distribution entry.
3735
3736 IO complete
3737 Like the above submit number, but for completions in‐
3738 stead.
3739
3740 IO issued rwt
3741 The number of read/write/trim requests issued, and how
3742 many of them were short or dropped.
3743
3744 IO latency
3745 These values are for latency_target and related options.
3746 When these options are engaged, this section describes
3747 the I/O depth required to meet the specified latency tar‐
3748 get.
3749
3750 After each client has been listed, the group statistics are printed.
3751 They will look like this:
3752
3753 Run status group 0 (all jobs):
3754 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
3755 WRITE: bw=1231KiB/s (1261kB/s), 616KiB/s-621KiB/s (630kB/s-636kB/s), io=64.0MiB (67.1MB), run=52747-53223msec
3756
3757 For each data direction it prints:
3758
3759 bw Aggregate bandwidth of threads in this group followed by
3760 the minimum and maximum bandwidth of all the threads in
3761 this group. Values outside of brackets are power-of-2
3762 format and those within are the equivalent value in a
3763 power-of-10 format.
3764
3765 io Aggregate I/O performed of all threads in this group. The
3766 format is the same as bw.
3767
3768 run The smallest and longest runtimes of the threads in this
3769 group.
3770
3771 And finally, the disk statistics are printed. This is Linux specific.
3772 They will look like this:
3773
3774 Disk stats (read/write):
3775 sda: ios=16398/16511, merge=30/162, ticks=6853/819634, in_queue=826487, util=100.00%
3776
3777 Each value is printed for both reads and writes, with reads first. The
3778 numbers denote:
3779
3780 ios Number of I/Os performed by all groups.
3781
3782 merge Number of merges performed by the I/O scheduler.
3783
3784 ticks Number of ticks we kept the disk busy.
3785
3786 in_queue
3787 Total time spent in the disk queue.
3788
3789 util The disk utilization. A value of 100% means we kept the
3790 disk busy constantly, 50% would be a disk idling half of
3791 the time.
3792
3793 It is also possible to get fio to dump the current output while it is
3794 running, without terminating the job. To do that, send fio the USR1
3795 signal. You can also get regularly timed dumps by using the --sta‐
3796 tus-interval parameter, or by creating a file in `/tmp' named
3797 `fio-dump-status'. If fio sees this file, it will unlink it and dump
3798 the current output status.
3799
3801 For scripted usage where you typically want to generate tables or
3802 graphs of the results, fio can output the results in a semicolon sepa‐
3803 rated format. The format is one long line of values, such as:
3804
3805 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%
3806 A description of this job goes here.
3807
3808 The job description (if provided) follows on a second line for terse
3809 v2. It appears on the same line for other terse versions.
3810
3811 To enable terse output, use the --minimal or `--output-format=terse'
3812 command line options. The first value is the version of the terse out‐
3813 put format. If the output has to be changed for some reason, this num‐
3814 ber will be incremented by 1 to signify that change.
3815
3816 Split up, the format is as follows (comments in brackets denote when a
3817 field was introduced or whether it's specific to some terse version):
3818
3819 terse version, fio version [v3], jobname, groupid, error
3820
3821 READ status:
3822
3823 Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3824 Submission latency: min, max, mean, stdev (usec)
3825 Completion latency: min, max, mean, stdev (usec)
3826 Completion latency percentiles: 20 fields (see below)
3827 Total latency: min, max, mean, stdev (usec)
3828 Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3829 IOPS [v5]: min, max, mean, stdev, number of samples
3830
3831 WRITE status:
3832
3833 Total IO (KiB), bandwidth (KiB/sec), IOPS, runtime (msec)
3834 Submission latency: min, max, mean, stdev (usec)
3835 Completion latency: min, max, mean, stdev (usec)
3836 Completion latency percentiles: 20 fields (see below)
3837 Total latency: min, max, mean, stdev (usec)
3838 Bw (KiB/s): min, max, aggregate percentage of total, mean, stdev, number of samples [v5]
3839 IOPS [v5]: min, max, mean, stdev, number of samples
3840
3841 TRIM status [all but version 3]:
3842
3843 Fields are similar to READ/WRITE status.
3844
3845 CPU usage:
3846
3847 user, system, context switches, major faults, minor faults
3848
3849 I/O depths:
3850
3851 <=1, 2, 4, 8, 16, 32, >=64
3852
3853 I/O latencies microseconds:
3854
3855 <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000
3856
3857 I/O latencies milliseconds:
3858
3859 <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, 2000, >=2000
3860
3861 Disk utilization [v3]:
3862
3863 disk name, read ios, write ios, read merges, write merges, read ticks, write ticks, time spent in queue, disk utilization percentage
3864
3865 Additional Info (dependent on continue_on_error, default off):
3866
3867 total # errors, first error code
3868
3869 Additional Info (dependent on description being set):
3870
3871 Text description
3872
3873 Completion latency percentiles can be a grouping of up to 20 sets, so
3874 for the terse output fio writes all of them. Each field will look like
3875 this:
3876
3877 1.00%=6112
3878
3879 which is the Xth percentile, and the `usec' latency associated with it.
3880
3881 For Disk utilization, all disks used by fio are shown. So for each disk
3882 there will be a disk utilization section.
3883
3884 Below is a single line containing short names for each of the fields in
3885 the minimal output v3, separated by semicolons:
3886
3887 terse_version_3;fio_version;jobname;groupid;error;read_kb;read_bandwidth_kb;read_iops;read_runtime_ms;read_slat_min_us;read_slat_max_us;read_slat_mean_us;read_slat_dev_us;read_clat_min_us;read_clat_max_us;read_clat_mean_us;read_clat_dev_us;read_clat_pct01;read_clat_pct02;read_clat_pct03;read_clat_pct04;read_clat_pct05;read_clat_pct06;read_clat_pct07;read_clat_pct08;read_clat_pct09;read_clat_pct10;read_clat_pct11;read_clat_pct12;read_clat_pct13;read_clat_pct14;read_clat_pct15;read_clat_pct16;read_clat_pct17;read_clat_pct18;read_clat_pct19;read_clat_pct20;read_tlat_min_us;read_lat_max_us;read_lat_mean_us;read_lat_dev_us;read_bw_min_kb;read_bw_max_kb;read_bw_agg_pct;read_bw_mean_kb;read_bw_dev_kb;write_kb;write_bandwidth_kb;write_iops;write_runtime_ms;write_slat_min_us;write_slat_max_us;write_slat_mean_us;write_slat_dev_us;write_clat_min_us;write_clat_max_us;write_clat_mean_us;write_clat_dev_us;write_clat_pct01;write_clat_pct02;write_clat_pct03;write_clat_pct04;write_clat_pct05;write_clat_pct06;write_clat_pct07;write_clat_pct08;write_clat_pct09;write_clat_pct10;write_clat_pct11;write_clat_pct12;write_clat_pct13;write_clat_pct14;write_clat_pct15;write_clat_pct16;write_clat_pct17;write_clat_pct18;write_clat_pct19;write_clat_pct20;write_tlat_min_us;write_lat_max_us;write_lat_mean_us;write_lat_dev_us;write_bw_min_kb;write_bw_max_kb;write_bw_agg_pct;write_bw_mean_kb;write_bw_dev_kb;cpu_user;cpu_sys;cpu_csw;cpu_mjf;cpu_minf;iodepth_1;iodepth_2;iodepth_4;iodepth_8;iodepth_16;iodepth_32;iodepth_64;lat_2us;lat_4us;lat_10us;lat_20us;lat_50us;lat_100us;lat_250us;lat_500us;lat_750us;lat_1000us;lat_2ms;lat_4ms;lat_10ms;lat_20ms;lat_50ms;lat_100ms;lat_250ms;lat_500ms;lat_750ms;lat_1000ms;lat_2000ms;lat_over_2000ms;disk_name;disk_read_iops;disk_write_iops;disk_read_merges;disk_write_merges;disk_read_ticks;write_ticks;disk_queue_time;disk_util
3888
3889 In client/server mode terse output differs from what appears when jobs
3890 are run locally. Disk utilization data is omitted from the standard
3891 terse output and for v3 and later appears on its own separate line at
3892 the end of each terse reporting cycle.
3893
3895 The json output format is intended to be both human readable and conve‐
3896 nient for automated parsing. For the most part its sections mirror
3897 those of the normal output. The runtime value is reported in msec and
3898 the bw value is reported in 1024 bytes per second units.
3899
3901 The json+ output format is identical to the json output format except
3902 that it adds a full dump of the completion latency bins. Each bins ob‐
3903 ject contains a set of (key, value) pairs where keys are latency dura‐
3904 tions and values count how many I/Os had completion latencies of the
3905 corresponding duration. For example, consider:
3906
3907 "bins" : { "87552" : 1, "89600" : 1, "94720" : 1, "96768" : 1,
3908 "97792" : 1, "99840" : 1, "100864" : 2, "103936" : 6, "104960" :
3909 534, "105984" : 5995, "107008" : 7529, ... }
3910
3911 This data indicates that one I/O required 87,552ns to complete, two
3912 I/Os required 100,864ns to complete, and 7529 I/Os required 107,008ns
3913 to complete.
3914
3915 Also included with fio is a Python script fio_jsonplus_clat2csv that
3916 takes json+ output and generates CSV-formatted latency data suitable
3917 for plotting.
3918
3919 The latency durations actually represent the midpoints of latency in‐
3920 tervals. For details refer to `stat.h' in the fio source.
3921
3923 There are two trace file format that you can encounter. The older (v1)
3924 format is unsupported since version 1.20-rc3 (March 2008). It will
3925 still be described below in case that you get an old trace and want to
3926 understand it.
3927
3928 In any case the trace is a simple text file with a single action per
3929 line.
3930
3931 Trace file format v1
3932 Each line represents a single I/O action in the following for‐
3933 mat:
3934
3935 rw, offset, length
3936
3937 where `rw=0/1' for read/write, and the `offset' and `length' en‐
3938 tries being in bytes.
3939
3940 This format is not supported in fio versions >= 1.20-rc3.
3941
3942 Trace file format v2
3943 The second version of the trace file format was added in fio
3944 version 1.17. It allows to access more then one file per trace
3945 and has a bigger set of possible file actions.
3946
3947 The first line of the trace file has to be:
3948
3949 "fio version 2 iolog"
3950
3951 Following this can be lines in two different formats, which are
3952 described below.
3953
3954 The file management format:
3955 filename action
3956
3957 The `filename' is given as an absolute path. The `action'
3958 can be one of these:
3959
3960 add Add the given `filename' to the trace.
3961
3962 open Open the file with the given `filename'.
3963 The `filename' has to have been added with
3964 the add action before.
3965
3966 close Close the file with the given `filename'.
3967 The file has to have been opened before.
3968
3969 The file I/O action format:
3970 filename action offset length
3971
3972 The `filename' is given as an absolute path, and has to
3973 have been added and opened before it can be used with
3974 this format. The `offset' and `length' are given in
3975 bytes. The `action' can be one of these:
3976
3977 wait Wait for `offset' microseconds. Everything
3978 below 100 is discarded. The time is rela‐
3979 tive to the previous `wait' statement. Note
3980 that action `wait` is not allowed as of
3981 version 3, as the same behavior can be
3982 achieved using timestamps.
3983
3984 read Read `length' bytes beginning from `off‐
3985 set'.
3986
3987 write Write `length' bytes beginning from `off‐
3988 set'.
3989
3990 sync fsync(2) the file.
3991
3992 datasync
3993 fdatasync(2) the file.
3994
3995 trim Trim the given file from the given `offset'
3996 for `length' bytes.
3997
3998 Trace file format v3
3999 The third version of the trace file format was added in fio ver‐
4000 sion 3.31. It forces each action to have a timestamp associated
4001 with it.
4002
4003 The first line of the trace file has to be:
4004
4005 "fio version 3 iolog"
4006
4007 Following this can be lines in two different formats, which are
4008 described below.
4009
4010 The file management format:
4011 timestamp filename action
4012
4013 The file I/O action format:
4014 timestamp filename action offset length
4015
4016 The `timestamp` is relative to the beginning of the run
4017 (ie starts at 0). The `filename`, `action`, `offset` and
4018 `length` are identical to version 2, except that version
4019 3 does not allow the `wait` action.
4020
4022 Colocation is a common practice used to get the most out of a machine.
4023 Knowing which workloads play nicely with each other and which ones
4024 don't is a much harder task. While fio can replay workloads concur‐
4025 rently via multiple jobs, it leaves some variability up to the sched‐
4026 uler making results harder to reproduce. Merging is a way to make the
4027 order of events consistent.
4028
4029 Merging is integrated into I/O replay and done when a merge_blk‐
4030 trace_file is specified. The list of files passed to read_iolog go
4031 through the merge process and output a single file stored to the speci‐
4032 fied file. The output file is passed on as if it were the only file
4033 passed to read_iolog. An example would look like:
4034
4035 $ fio --read_iolog="<file1>:<file2>" --merge_blk‐
4036 trace_file="<output_file>"
4037
4038 Creating only the merged file can be done by passing the command line
4039 argument merge-blktrace-only.
4040
4041 Scaling traces can be done to see the relative impact of any particular
4042 trace being slowed down or sped up. merge_blktrace_scalars takes in a
4043 colon separated list of percentage scalars. It is index paired with the
4044 files passed to read_iolog.
4045
4046 With scaling, it may be desirable to match the running time of all
4047 traces. This can be done with merge_blktrace_iters. It is index paired
4048 with read_iolog just like merge_blktrace_scalars.
4049
4050 In an example, given two traces, A and B, each 60s long. If we want to
4051 see the impact of trace A issuing IOs twice as fast and repeat trace A
4052 over the runtime of trace B, the following can be done:
4053
4054 $ fio --read_iolog="<trace_a>:"<trace_b>" --merge_blk‐
4055 trace_file"<output_file>" --merge_blktrace_scalars="50:100"
4056 --merge_blktrace_iters="2:1"
4057
4058 This runs trace A at 2x the speed twice for approximately the same run‐
4059 time as a single run of trace B.
4060
4062 In some cases, we want to understand CPU overhead in a test. For exam‐
4063 ple, we test patches for the specific goodness of whether they reduce
4064 CPU usage. Fio implements a balloon approach to create a thread per
4065 CPU that runs at idle priority, meaning that it only runs when nobody
4066 else needs the cpu. By measuring the amount of work completed by the
4067 thread, idleness of each CPU can be derived accordingly.
4068
4069 An unit work is defined as touching a full page of unsigned characters.
4070 Mean and standard deviation of time to complete an unit work is re‐
4071 ported in "unit work" section. Options can be chosen to report detailed
4072 percpu idleness or overall system idleness by aggregating percpu stats.
4073
4075 Fio is usually run in one of two ways, when data verification is done.
4076 The first is a normal write job of some sort with verify enabled. When
4077 the write phase has completed, fio switches to reads and verifies ev‐
4078 erything it wrote. The second model is running just the write phase,
4079 and then later on running the same job (but with reads instead of
4080 writes) to repeat the same I/O patterns and verify the contents. Both
4081 of these methods depend on the write phase being completed, as fio oth‐
4082 erwise has no idea how much data was written.
4083
4084 With verification triggers, fio supports dumping the current write
4085 state to local files. Then a subsequent read verify workload can load
4086 this state and know exactly where to stop. This is useful for testing
4087 cases where power is cut to a server in a managed fashion, for in‐
4088 stance.
4089
4090 A verification trigger consists of two things:
4091
4092 1) Storing the write state of each job.
4093
4094 2) Executing a trigger command.
4095
4096 The write state is relatively small, on the order of hundreds of bytes
4097 to single kilobytes. It contains information on the number of comple‐
4098 tions done, the last X completions, etc.
4099
4100 A trigger is invoked either through creation ('touch') of a specified
4101 file in the system, or through a timeout setting. If fio is run with
4102 `--trigger-file=/tmp/trigger-file', then it will continually check for
4103 the existence of `/tmp/trigger-file'. When it sees this file, it will
4104 fire off the trigger (thus saving state, and executing the trigger com‐
4105 mand).
4106
4107 For client/server runs, there's both a local and remote trigger. If fio
4108 is running as a server backend, it will send the job states back to the
4109 client for safe storage, then execute the remote trigger, if specified.
4110 If a local trigger is specified, the server will still send back the
4111 write state, but the client will then execute the trigger.
4112
4113 Verification trigger example
4114 Let's say we want to run a powercut test on the remote Linux ma‐
4115 chine 'server'. Our write workload is in `write-test.fio'. We
4116 want to cut power to 'server' at some point during the run, and
4117 we'll run this test from the safety or our local machine, 'lo‐
4118 calbox'. On the server, we'll start the fio backend normally:
4119
4120 server# fio --server
4121
4122 and on the client, we'll fire off the workload:
4123
4124 localbox$ fio --client=server --trig‐
4125 ger-file=/tmp/my-trigger --trigger-remote="bash -c "echo
4126 b > /proc/sysrq-triger""
4127
4128 We set `/tmp/my-trigger' as the trigger file, and we tell fio to
4129 execute:
4130
4131 echo b > /proc/sysrq-trigger
4132
4133 on the server once it has received the trigger and sent us the
4134 write state. This will work, but it's not really cutting power
4135 to the server, it's merely abruptly rebooting it. If we have a
4136 remote way of cutting power to the server through IPMI or simi‐
4137 lar, we could do that through a local trigger command instead.
4138 Let's assume we have a script that does IPMI reboot of a given
4139 hostname, ipmi-reboot. On localbox, we could then have run fio
4140 with a local trigger instead:
4141
4142 localbox$ fio --client=server --trig‐
4143 ger-file=/tmp/my-trigger --trigger="ipmi-reboot server"
4144
4145 For this case, fio would wait for the server to send us the
4146 write state, then execute `ipmi-reboot server' when that hap‐
4147 pened.
4148
4149 Loading verify state
4150 To load stored write state, a read verification job file must
4151 contain the verify_state_load option. If that is set, fio will
4152 load the previously stored state. For a local fio run this is
4153 done by loading the files directly, and on a client/server run,
4154 the server backend will ask the client to send the files over
4155 and load them from there.
4156
4158 Fio supports a variety of log file formats, for logging latencies,
4159 bandwidth, and IOPS. The logs share a common format, which looks like
4160 this:
4161
4162 time (msec), value, data direction, block size (bytes), offset
4163 (bytes), command priority
4164
4165 `Time' for the log entry is always in milliseconds. The `value' logged
4166 depends on the type of log, it will be one of the following:
4167
4168 Latency log
4169 Value is latency in nsecs
4170
4171 Bandwidth log
4172 Value is in KiB/sec
4173
4174 IOPS log
4175 Value is IOPS
4176
4177 `Data direction' is one of the following:
4178
4179 0 I/O is a READ
4180
4181 1 I/O is a WRITE
4182
4183 2 I/O is a TRIM
4184
4185 The entry's `block size' is always in bytes. The `offset' is the posi‐
4186 tion in bytes from the start of the file for that particular I/O. The
4187 logging of the offset can be toggled with log_offset.
4188
4189 If log_prio is not set, the entry's `Command priority` is 1 for an IO
4190 executed with the highest RT priority class (prioclass=1 or cmd‐
4191 prio_class=1) and 0 otherwise. This is controlled by the prioclass op‐
4192 tion and the ioengine specific cmdprio_percentage cmdprio_class op‐
4193 tions. If log_prio is set, the entry's `Command priority` is the prior‐
4194 ity set for the IO, as a 16-bits hexadecimal number with the lowest 13
4195 bits indicating the priority value (prio and cmdprio options) and the
4196 highest 3 bits indicating the IO priority class (prioclass and cmd‐
4197 prio_class options).
4198
4199 Fio defaults to logging every individual I/O but when windowed logging
4200 is set through log_avg_msec, either the average (by default) or the
4201 maximum (log_max_value is set) `value' seen over the specified period
4202 of time is recorded. Each `data direction' seen within the window pe‐
4203 riod will aggregate its values in a separate row. Further, when using
4204 windowed logging the `block size' and `offset' entries will always con‐
4205 tain 0.
4206
4208 Normally fio is invoked as a stand-alone application on the machine
4209 where the I/O workload should be generated. However, the backend and
4210 frontend of fio can be run separately i.e., the fio server can generate
4211 an I/O workload on the "Device Under Test" while being controlled by a
4212 client on another machine.
4213
4214 Start the server on the machine which has access to the storage DUT:
4215
4216 $ fio --server=args
4217
4218 where `args' defines what fio listens to. The arguments are of the form
4219 `type,hostname' or `IP,port'. `type' is either `ip' (or ip4) for TCP/IP
4220 v4, `ip6' for TCP/IP v6, or `sock' for a local unix domain socket.
4221 `hostname' is either a hostname or IP address, and `port' is the port
4222 to listen to (only valid for TCP/IP, not a local socket). Some exam‐
4223 ples:
4224
4225 1) fio --server
4226 Start a fio server, listening on all interfaces on the
4227 default port (8765).
4228
4229 2) fio --server=ip:hostname,4444
4230 Start a fio server, listening on IP belonging to hostname
4231 and on port 4444.
4232
4233 3) fio --server=ip6:::1,4444
4234 Start a fio server, listening on IPv6 localhost ::1 and
4235 on port 4444.
4236
4237 4) fio --server=,4444
4238 Start a fio server, listening on all interfaces on port
4239 4444.
4240
4241 5) fio --server=1.2.3.4
4242 Start a fio server, listening on IP 1.2.3.4 on the de‐
4243 fault port.
4244
4245 6) fio --server=sock:/tmp/fio.sock
4246 Start a fio server, listening on the local socket
4247 `/tmp/fio.sock'.
4248
4249 Once a server is running, a "client" can connect to the fio server
4250 with:
4251
4252 $ fio <local-args> --client=<server> <remote-args> <job file(s)>
4253
4254 where `local-args' are arguments for the client where it is running,
4255 `server' is the connect string, and `remote-args' and `job file(s)' are
4256 sent to the server. The `server' string follows the same format as it
4257 does on the server side, to allow IP/hostname/socket and port strings.
4258
4259 Fio can connect to multiple servers this way:
4260
4261 $ fio --client=<server1> <job file(s)> --client=<server2> <job
4262 file(s)>
4263
4264 If the job file is located on the fio server, then you can tell the
4265 server to load a local file as well. This is done by using --re‐
4266 mote-config:
4267
4268 $ fio --client=server --remote-config /path/to/file.fio
4269
4270 Then fio will open this local (to the server) job file instead of being
4271 passed one from the client.
4272
4273 If you have many servers (example: 100 VMs/containers), you can input a
4274 pathname of a file containing host IPs/names as the parameter value for
4275 the --client option. For example, here is an example `host.list' file
4276 containing 2 hostnames:
4277
4278 host1.your.dns.domain
4279 host2.your.dns.domain
4280
4281 The fio command would then be:
4282
4283 $ fio --client=host.list <job file(s)>
4284
4285 In this mode, you cannot input server-specific parameters or job files
4286 -- all servers receive the same job file.
4287
4288 In order to let `fio --client' runs use a shared filesystem from multi‐
4289 ple hosts, `fio --client' now prepends the IP address of the server to
4290 the filename. For example, if fio is using the directory `/mnt/nfs/fio'
4291 and is writing filename `fileio.tmp', with a --client `hostfile' con‐
4292 taining two hostnames `h1' and `h2' with IP addresses 192.168.10.120
4293 and 192.168.10.121, then fio will create two files:
4294
4295 /mnt/nfs/fio/192.168.10.120.fileio.tmp
4296 /mnt/nfs/fio/192.168.10.121.fileio.tmp
4297
4298 Terse output in client/server mode will differ slightly from what is
4299 produced when fio is run in stand-alone mode. See the terse output sec‐
4300 tion for details.
4301
4303 fio was written by Jens Axboe <axboe@kernel.dk>.
4304 This man page was written by Aaron Carroll <aaronc@cse.unsw.edu.au>
4305 based on documentation by Jens Axboe.
4306 This man page was rewritten by Tomohiro Kusumi <tkusumi@tuxera.com>
4307 based on documentation by Jens Axboe.
4308
4310 Report bugs to the fio mailing list <fio@vger.kernel.org>.
4311 See REPORTING-BUGS.
4312
4313 REPORTING-BUGS: http://git.kernel.dk/cgit/fio/plain/REPORTING-BUGS
4314
4316 For further documentation see HOWTO and README.
4317 Sample jobfiles are available in the `examples/' directory.
4318 These are typically located under `/usr/share/doc/fio'.
4319
4320 HOWTO: http://git.kernel.dk/cgit/fio/plain/HOWTO
4321 README: http://git.kernel.dk/cgit/fio/plain/README
4322
4323
4324
4325User Manual August 2017 fio(1)