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