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