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

NAME

6       fio - flexible I/O tester
7

SYNOPSIS

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

DESCRIPTION

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

OPTIONS

18       --output=filename
19              Write output to filename.
20
21       --timeout=timeout
22              Limit run time to timeout seconds.
23
24       --latency-log
25              Generate per-job latency logs.
26
27       --bandwidth-log
28              Generate per-job bandwidth logs.
29
30       --minimal
31              Print statistics in a terse, semicolon-delimited format.
32
33       --showcmd=jobfile
34              Convert jobfile to a set of command-line options.
35
36       --readonly
37              Enable read-only safety checks.
38
39       --eta=when
40              Specifies when real-time ETA estimate should be  printed.   when
41              may be one of `always', `never' or `auto'.
42
43       --section=sec
44              Only run section sec from job file.
45
46       --cmdhelp=command
47              Print  help  information for command.  May be `all' for all com‐
48              mands.
49
50       --debug=type
51              Enable verbose tracing of various fio actions. May be `all'  for
52              all   types  or  individual  types  seperated  by  a  comma  (eg
53              --debug=io,file).  `help'  will  list  all   available   tracing
54              options.
55
56       --help Display usage information and exit.
57
58       --version
59              Display version information and exit.
60

JOB FILE FORMAT

62       Job  files are in `ini' format. They consist of one or more job defini‐
63       tions, which begin with a job name in square brackets and extend to the
64       next  job  name.  The job name can be any ASCII string except `global',
65       which has a special meaning.  Following the job name is a  sequence  of
66       zero  or more parameters, one per line, that define the behavior of the
67       job.  Any line starting with a `;' or `#'  character  is  considered  a
68       comment and ignored.
69
70       If jobfile is specified as `-', the job file will be read from standard
71       input.
72
73   Global Section
74       The global section contains default parameters for  jobs  specified  in
75       the job file.  A job is only affected by global sections residing above
76       it, and there may be any number of global sections.  Specific job defi‐
77       nitions may override any parameter set in global sections.
78

JOB PARAMETERS

80   Types
81       Some  parameters may take arguments of a specific type.  The types used
82       are:
83
84       str    String: a sequence of alphanumeric characters.
85
86       int    SI integer: a whole number, possibly containing a suffix  denot‐
87              ing the base unit of the value.  Accepted suffixes are `k', 'M',
88              'G', 'T', and 'P', denoting kilo  (1024),  mega  (1024^2),  giga
89              (1024^3),  tera  (1024^4),  and  peta (1024^5) respectively. The
90              suffix is not case sensitive. If prefixed with '0x',  the  value
91              is  assumed  to be base 16 (hexadecimal). A suffix may include a
92              trailing by using 'KiB', 'MiB', 'GiB', etc. This is  useful  for
93              disk  drives  where  values  are  often given in base 10 values.
94              Specifying '30GiB' will get you 30*1000^3 bytes.
95
96       bool   Boolean: a true or false value. `0' denotes false,  `1'  denotes
97              true.
98
99       irange Integer  range:  a  range  of  integers  specified in the format
100              lower:upper or lower-upper. lower and upper may contain a suffix
101              as  described  above.   If  an option allows two sets of ranges,
102              they are separated with a `,' or  `/'  character.  For  example:
103              `8-8k/8M-4G'.
104
105   Parameter List
106       name=str
107              May be used to override the job name.  On the command line, this
108              parameter has the special purpose of signalling the start  of  a
109              new job.
110
111       description=str
112              Human-readable  description  of  the job. It is printed when the
113              job is run, but otherwise has no special purpose.
114
115       directory=str
116              Prefix filenames with this directory.  Used to place files in  a
117              location other than `./'.
118
119       filename=str
120              fio  normally makes up a file name based on the job name, thread
121              number, and file number. If you  want  to  share  files  between
122              threads in a job or several jobs, specify a filename for each of
123              them to override the default. If the I/O engine used  is  `net',
124              filename  is  the  host  and  port  to  connect to in the format
125              host/port. If the I/O engine is file-based, you  can  specify  a
126              number  of  files  by separating the names with a `:' character.
127              `-' is a reserved name, meaning stdin or  stdout,  depending  on
128              the read/write direction set.
129
130       lockfile=str
131              Fio defaults to not locking any files before it does IO to them.
132              If a file or file descriptor is shared, fio can serialize IO  to
133              that  file  to make the end result consistent. This is usual for
134              emulating real workloads that share files.  The lock modes are:
135
136                     none   No locking. This is the default.
137
138                     exclusive
139                            Only one thread or process may do IO at the  time,
140                            excluding all others.
141
142                     readwrite
143                            Read-write  locking  on the file. Many readers may
144                            access the file at the same time, but  writes  get
145                            exclusive access.
146
147              The  option  may be post-fixed with a lock batch number. If set,
148              then each thread/process may do that amount of IOs to  the  file
149              before giving up the lock.  Since lock acquisition is expensive,
150              batching the lock/unlocks will speed up IO.
151
152       opendir=str Recursively open any files below directory str.
153
154       readwrite=str, rw=str
155              Type of I/O pattern.  Accepted values are:
156
157                     read   Sequential reads.
158
159                     write  Sequential writes.
160
161                     randread
162                            Random reads.
163
164                     randwrite
165                            Random writes.
166
167                     rw     Mixed sequential reads and writes.
168
169                     randrw Mixed random reads and writes.
170
171              For mixed I/O, the default split is 50/50.  For random I/O,  the
172              number  of  I/Os  to  perform before getting a new offset can be
173              specified by appending `:int' to the pattern type.  The  default
174              is 1.
175
176       kb_base=int
177              The  base  unit  for a kilobyte. The defacto base is 2^10, 1024.
178              Storage manufacturers like to use 10^3 or 1000  as  a  base  ten
179              unit  instead,  for  obvious  reasons.  Allow values are 1024 or
180              1000, with 1024 being the default.
181
182       randrepeat=bool
183              Seed the random number generator in a predictable way so results
184              are repeatable across runs.  Default: true.
185
186       fallocate=bool
187              By default, fio will use fallocate() to advise the system of the
188              size of the file we are going to write. This can be  turned  off
189              with  fallocate=0.  May  not be available on all supported plat‐
190              forms.
191
192       fadvise_hint=bool
193              Disable use of posix_fadvise(2) to advise the  kernel  what  I/O
194              patterns are likely to be issued. Default: true.
195
196       size=int
197              Total  size  of  I/O for this job.  fio will run until this many
198              bytes have been transfered,  unless  limited  by  other  options
199              (runtime,  for  instance).  Unless nr_files and filesize options
200              are given, this amount will be  divided  between  the  available
201              files for the job. If not set, fio will use the full size of the
202              given files or devices. If the the files do not exist, size must
203              be given.
204
205       fill_device=bool
206              Sets  size  to  something  really large and waits for ENOSPC (no
207              space left on device) as the terminating condition.  Only  makes
208              sense  with  sequential  write.   For a read workload, the mount
209              point will be filled first then IO started on the result.
210
211       filesize=irange
212              Individual file sizes. May be a range, in which  case  fio  will
213              select sizes for files at random within the given range, limited
214              to size in total (if that is given). If filesize is  not  speci‐
215              fied, each created file is the same size.
216
217       blocksize=int[,int], bs=int[,int]
218              Block  size  for  I/O units.  Default: 4k.  Values for reads and
219              writes can be specified separately  in  the  format  read,write,
220              either of which may be empty to leave that value at its default.
221
222       blocksize_range=irange[,irange], bsrange=irange[,irange]
223              Specify  a  range  of I/O block sizes.  The issued I/O unit will
224              always  be  a  multiple  of  the  minimum  size,  unless  block‐
225              size_unaligned is set.  Applies to both reads and writes if only
226              one range is given, but can be specified separately with a comma
227              seperating  the values. Example: bsrange=1k-4k,2k-8k.  Also (see
228              blocksize).
229
230       bssplit=str
231              This option allows even finer grained control of the block sizes
232              issued, not just even splits between them. With this option, you
233              can weight various block sizes for exact control of  the  issued
234              IO  for  a  job  that  has  mixed block sizes. The format of the
235              option is  bssplit=blocksize/percentage,  optionally  adding  as
236              many  definitions as needed seperated by a colon.  Example: bss‐
237              plit=4k/10:64k/50:32k/40 would issue  50%  64k  blocks,  10%  4k
238              blocks and 40% 32k blocks. bssplit also supports giving separate
239              splits to reads and writes. The format is identical to what  the
240              bs option accepts, the read and write parts are separated with a
241              comma.
242
243       blocksize_unaligned, bs_unaligned
244              If set, any size in blocksize_range may be used.  This typically
245              won't  work  with  direct  I/O, as that normally requires sector
246              alignment.
247
248       blockalign=int[,int], ba=int[,int]
249              At what boundary to align random IO  offsets.  Defaults  to  the
250              same as 'blocksize' the minimum blocksize given.  Minimum align‐
251              ment is typically 512b for using direct IO,  though  it  usually
252              depends  on  the  hardware  block size.  This option is mutually
253              exclusive with using a random map for files, so it will turn off
254              that option.
255
256       zero_buffers
257              Initialise  buffers  with  all zeros. Default: fill buffers with
258              random data.
259
260       refill_buffers
261              If this option is given, fio will refill the IO buffers on every
262              submit.  The  default  is to only fill it at init time and reuse
263              that data. Only makes sense  if  zero_buffers  isn't  specified,
264              naturally.  If  data  verification is enabled, refill_buffers is
265              also automatically enabled.
266
267       nrfiles=int
268              Number of files to use for this job.  Default: 1.
269
270       openfiles=int
271              Number of files  to  keep  open  at  the  same  time.   Default:
272              nrfiles.
273
274       file_service_type=str
275              Defines  how files to service are selected.  The following types
276              are defined:
277
278                     random Choose a file at random
279
280                     roundrobin
281                            Round robin over open files (default).  sequential
282                            Do each file in the set sequentially.
283
284              The  number  of I/Os to issue before switching a new file can be
285              specified by appending `:int' to the service type.
286
287       ioengine=str
288              Defines how  the  job  issues  I/O.   The  following  types  are
289              defined:
290
291                     sync   Basic  read(2)  or write(2) I/O.  fseek(2) is used
292                            to position the I/O location.
293
294                     psync  Basic pread(2) or pwrite(2) I/O.
295
296                     vsync  Basic readv(2)  or  writev(2)  I/O.  Will  emulate
297                            queuing  by coalescing adjacents IOs into a single
298                            submission.
299
300                     libaio Linux native asynchronous I/O.
301
302                     posixaio
303                            glibc POSIX asynchronous I/O using aio_read(3) and
304                            aio_write(3).
305
306                     mmap   File is memory mapped with mmap(2) and data copied
307                            using memcpy(3).
308
309                     splice splice(2)  is  used  to  transfer  the  data   and
310                            vmsplice(2)  to  transfer  data from user-space to
311                            the kernel.
312
313                     syslet-rw
314                            Use  the  syslet  system  calls  to  make  regular
315                            read/write asynchronous.
316
317                     sg     SCSI  generic sg v3 I/O. May be either synchronous
318                            using the SG_IO ioctl, or if the target is  an  sg
319                            character  device, we use read(2) and write(2) for
320                            asynchronous I/O.
321
322                     null   Doesn't  transfer  any  data,  just  pretends  to.
323                            Mainly  used to exercise fio itself and for debug‐
324                            ging and testing purposes.
325
326                     net    Transfer over the network.  filename must  be  set
327                            appropriately  to  `host/port'  regardless of data
328                            direction.  If receiving, only the  port  argument
329                            is used.
330
331                     netsplice
332                            Like  net,  but  uses splice(2) and vmsplice(2) to
333                            map data and send/receive.
334
335                     cpuio  Doesn't transfer any data, but  burns  CPU  cycles
336                            according to cpuload and cpucycles parameters.
337
338                     guasi  The  GUASI  I/O  engine  is  the Generic Userspace
339                            Asynchronous Syscall Interface approach to  asycn‐
340                            ronous I/O.
341                            See <http://www.xmailserver.org/guasi-lib.html>.
342
343                     external
344                            Loads  an external I/O engine object file.  Append
345                            the engine filename as `:enginepath'.
346
347       iodepth=int
348              Number of  I/O  units  to  keep  in  flight  against  the  file.
349              Default: 1.
350
351       iodepth_batch=int
352              Number of I/Os to submit at once.  Default: iodepth.
353
354       iodepth_batch_complete=int
355              This  defines  how  many  pieces  of  IO to retrieve at once. It
356              defaults to 1 which
357               means that we'll ask for a minimum of 1  IO  in  the  retrieval
358              process  from  the  kernel. The IO retrieval will go on until we
359              hit the limit set by iodepth_low. If this variable is set to  0,
360              then  fio  will always check for completed events before queuing
361              more IO. This helps reduce IO  latency,  at  the  cost  of  more
362              retrieval system calls.
363
364       iodepth_low=int
365              Low  watermark indicating when to start filling the queue again.
366              Default: iodepth.
367
368       direct=bool
369              If true, use  non-buffered  I/O  (usually  O_DIRECT).   Default:
370              false.
371
372       buffered=bool
373              If  true,  use buffered I/O.  This is the opposite of the direct
374              parameter.  Default: true.
375
376       offset=int
377              Offset in the file to start I/O. Data before the offset will not
378              be touched.
379
380       fsync=int
381              How  many  I/Os  to  perform before issuing an fsync(2) of dirty
382              data.  If 0, don't sync.  Default: 0.
383
384       fdatasync=int
385              Like fsync, but uses fdatasync(2) instead to only sync the  data
386              parts of the file. Default: 0.
387
388       sync_file_range=str:int
389              Use  sync_file_range() for every val number of write operations.
390              Fio will track range of writes that have happened since the last
391              sync_file_range() call.  str can currently be one or more of:
392
393              wait_before
394                     SYNC_FILE_RANGE_WAIT_BEFORE
395
396              write  SYNC_FILE_RANGE_WRITE
397
398              wait_after
399                     SYNC_FILE_RANGE_WRITE
400
401
402              So  if  you  do  sync_file_range=wait_before,write:8, fio
403              would use
404              SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WRITE for every  8
405              writes.   Also see the sync_file_range(2) man page.  This option
406              is Linux specific.
407
408       overwrite=bool
409              If writing, setup the file first and  do  overwrites.   Default:
410              false.
411
412       end_fsync=bool
413              Sync file contents when job exits.  Default: false.
414
415       fsync_on_close=bool
416              If  true,  sync  file  contents  on  close.   This  differs from
417              end_fsync in that it will happen on every close, not just at the
418              end of the job.  Default: false.
419
420       rwmixcycle=int
421              How  many milliseconds before switching between reads and writes
422              for a mixed workload. Default: 500ms.
423
424       rwmixread=int
425              Percentage of a mixed workload that should  be  reads.  Default:
426              50.
427
428       rwmixwrite=int
429              Percentage  of  a  mixed  workload  that  should  be writes.  If
430              rwmixread and rwmixwrite are given and do not sum to  100%,  the
431              latter of the two overrides the first. This may interfere with a
432              given rate setting, if fio is asked to limit reads or writes  to
433              a  certain  rate. If that is the case, then the distribution may
434              be skewed. Default: 50.
435
436       norandommap
437              Normally fio will cover every block of the file when doing  ran‐
438              dom I/O. If this parameter is given, a new offset will be chosen
439              without looking at past I/O history.  This parameter is mutually
440              exclusive with verify.
441
442       softrandommap
443              See  norandommap.  If fio runs with the random block map enabled
444              and it fails to allocate the map, if this option is set it  will
445              continue  without a random block map. As coverage will not be as
446              complete as  with  random  maps,  this  option  is  disabled  by
447              default.
448
449       nice=int
450              Run job with given nice value.  See nice(2).
451
452       prio=int
453              Set  I/O  priority  value  of this job between 0 (highest) and 7
454              (lowest).  See ionice(1).
455
456       prioclass=int
457              Set I/O priority class.  See ionice(1).
458
459       thinktime=int
460              Stall job for given number of microseconds between issuing I/Os.
461
462       thinktime_spin=int
463              Pretend to spend CPU time  for  given  number  of  microseconds,
464              sleeping  the  rest  of  the  time specified by thinktime.  Only
465              valid if thinktime is set.
466
467       thinktime_blocks=int
468              Number of blocks to issue before waiting thinktime microseconds.
469              Default: 1.
470
471       rate=int
472              Cap  bandwidth used by this job. The number is in bytes/sec, the
473              normal postfix rules apply. You can use rate=500k to limit reads
474              and writes to 500k each, or you can specify read and writes sep‐
475              arately. Using rate=1m,500k would limit  reads  to  1MB/sec  and
476              writes  to  500KB/sec.  Capping only reads or writes can be done
477              with rate=,500k or rate=500k,. The former will only limit writes
478              (to 500KB/sec), the latter will only limit reads.
479
480       ratemin=int
481              Tell  fio  to  do whatever it can to maintain at least the given
482              bandwidth.  Failing to meet this requirement will cause the  job
483              to exit. The same format as rate is used for read vs write sepa‐
484              ration.
485
486       rate_iops=int
487              Cap the bandwidth to this number of IOPS. Basically the same  as
488              rate, just specified independently of bandwidth. The same format
489              as rate is used for read vs write seperation. If blocksize is  a
490              range, the smallest block size is used as the metric.
491
492       rate_iops_min=int
493              If this rate of I/O is not met, the job will exit. The same for‐
494              mat as rate is used for read vs write seperation.
495
496       ratecycle=int
497              Average bandwidth for rate and ratemin over this number of  mil‐
498              liseconds.  Default: 1000ms.
499
500       cpumask=int
501              Set  CPU affinity for this job. int is a bitmask of allowed CPUs
502              the job may run on.  See sched_setaffinity(2).
503
504       cpus_allowed=str
505              Same as cpumask, but allows a comma-delimited list of  CPU  num‐
506              bers.
507
508       startdelay=int
509              Delay start of job for the specified number of seconds.
510
511       runtime=int
512              Terminate processing after the specified number of seconds.
513
514       time_based
515              If  given,  run  for  the specified runtime duration even if the
516              files are completely read or written. The same workload will  be
517              repeated as many times as runtime allows.
518
519       ramp_time=int
520              If  set,  fio will run the specified workload for this amount of
521              time before logging any performance numbers. Useful for  letting
522              performance  settle  before logging results, thus minimizing the
523              runtime required for stable results. Note that the ramp_time  is
524              considered  lead  in  time  for a job, thus it will increase the
525              total runtime if a special timeout or runtime is specified.
526
527       invalidate=bool
528              Invalidate buffer-cache for the  file  prior  to  starting  I/O.
529              Default: true.
530
531       sync=bool
532              Use  synchronous  I/O  for buffered writes.  For the majority of
533              I/O engines, this means using O_SYNC.  Default: false.
534
535       iomem=str, mem=str
536              Allocation method for I/O unit buffer.  Allowed values are:
537
538                     malloc Allocate memory with malloc(3).
539
540                     shm    Use  shared  memory  buffers   allocated   through
541                            shmget(2).
542
543                     shmhuge
544                            Same as shm, but use huge pages as backing.
545
546                     mmap   Use mmap(2) for allocation.  Uses anonymous memory
547                            unless a filename is given after the option in the
548                            format `:file'.
549
550                     mmaphuge
551                            Same as mmap, but use huge files as backing.
552
553              The  amount of memory allocated is the maximum allowed blocksize
554              for the job multiplied by iodepth.  For shmhuge or  mmaphuge  to
555              work,  the system must have free huge pages allocated.  mmaphuge
556              also needs to have hugetlbfs mounted, and file must point there.
557              At  least  on  Linux, huge pages must be manually allocated. See
558              /proc/sys/vm/nr_hugehages and the documentation for  that.  Nor‐
559              mally  you just need to echo an appropriate number, eg echoing 8
560              will ensure that the OS has 8 huge pages ready for use.
561
562       iomem_align=int
563              This indiciates the memory alignment of the IO  memory  buffers.
564              Note  that  the  given alignment is applied to the first IO unit
565              buffer, if using iodepth the alignment of the following  buffers
566              are  given by the bs used. In other words, if using a bs that is
567              a multiple of the page sized in the system, all buffers will  be
568              aligned  to  this value. If using a bs that is not page aligned,
569              the alignment of subsequent IO memory buffers is the sum of  the
570              iomem_align and bs used.
571
572       hugepage-size=int
573              Defines  the size of a huge page.  Must be at least equal to the
574              system setting.  Should be a multiple of 1MB. Default: 4MB.
575
576       exitall
577              Terminate all jobs when one finishes.  Default:  wait  for  each
578              job to finish.
579
580       bwavgtime=int
581              Average  bandwidth calculations over the given time in millisec‐
582              onds.  Default: 500ms.
583
584       create_serialize=bool
585              If true, serialize file creation for the jobs.  Default: true.
586
587       create_fsync=bool
588              fsync(2) data file after creation.  Default: true.
589
590       create_on_open=bool
591              If true, the files are not created until they are opened for  IO
592              by the job.
593
594       pre_read=bool
595              If  this  is  given,  files  will be pre-read into memory before
596              starting the given  IO  operation.  This  will  also  clear  the
597              invalidate flag, since it is pointless to pre-read and then drop
598              the cache. This will only work for IO engines that are seekable,
599              since  they allow you to read the same data multiple times. Thus
600              it will not work on eg network or splice IO.
601
602       unlink=bool
603              Unlink job files when done.  Default: false.
604
605       loops=int
606              Specifies the number of iterations (runs of the  same  workload)
607              of this job.  Default: 1.
608
609       do_verify=bool
610              Run  the verify phase after a write phase.  Only valid if verify
611              is set.  Default: true.
612
613       verify=str
614              Method of verifying file contents after each  iteration  of  the
615              job.  Allowed values are:
616
617                     md5  crc16  crc32  crc32c  crc32c-intel crc64 crc7 sha256
618                     sha512 sha1
619                            Store appropriate checksum in the header  of  each
620                            block. crc32c-intel is hardware accelerated SSE4.2
621                            driven, falls back to regular crc32c if  not  sup‐
622                            ported by the system.
623
624                     meta   Write extra information about each I/O (timestamp,
625                            block number, etc.). The block number is verified.
626                            See verify_pattern as well.
627
628                     null   Pretend to verify.  Used for testing internals.
629
630              This  option  can be used for repeated burn-in tests of a system
631              to make sure that the written data is also correctly read  back.
632              If  the  data direction given is a read or random read, fio will
633              assume that it should verify a previously written file.  If  the
634              data direction includes any form of write, the verify will be of
635              the newly written data.
636
637       verify_sort=bool
638              If true, written verify blocks are sorted if fio deems it to  be
639              faster to read them back in a sorted manner.  Default: true.
640
641       verify_offset=int
642              Swap  the  verification  header  with data somewhere else in the
643              block before writing.  It is swapped back before verifying.
644
645       verify_interval=int
646              Write the verification header for this number  of  bytes,  which
647              should divide blocksize.  Default: blocksize.
648
649       verify_pattern=str
650              If  set,  fio  will  fill  the io buffers with this pattern. Fio
651              defaults to filling with totally  random  bytes,  but  sometimes
652              it's  interesting  to fill with a known pattern for io verifica‐
653              tion purposes. Depending on the width of the pattern,  fio  will
654              fill  1/2/3/4 bytes of the buffer at the time(it can be either a
655              decimal or a hex number). The verify_pattern if  larger  than  a
656              32-bit  quantity  has to be a hex number that starts with either
657              "0x" or "0X". Use with verify=meta.
658
659       verify_fatal=bool
660              If true, exit the job on the first observed  verification  fail‐
661              ure.  Default: false.
662
663       verify_async=int
664              Fio  will  normally verify IO inline from the submitting thread.
665              This option takes an integer describing how many  async  offload
666              threads  to  create  for IO verification instead, causing fio to
667              offload the duty of verifying IO contents to one or  more  sepa‐
668              rate  threads.   If  using  this  offload  option,  even sync IO
669              engines can benefit from using an iodepth setting higher than 1,
670              as  it  allows them to have IO in flight while verifies are run‐
671              ning.
672
673       verify_async_cpus=str
674              Tell fio to set the given CPU affinity on the async IO verifica‐
675              tion threads.  See cpus_allowed for the format used.
676
677       verify_backlog=int
678              Fio will normally verify the written contents of a job that uti‐
679              lizes verify once that job has completed. In other words, every‐
680              thing  is written then everything is read back and verified. You
681              may want to verify continually instead for a variety of reasons.
682              Fio  stores the meta data associated with an IO block in memory,
683              so for large verify workloads, quite a bit of  memory  would  be
684              used  up  holding this meta data. If this option is enabled, fio
685              will verify the previously written blocks before  continuing  to
686              write new ones.
687
688       verify_backlog_batch=int
689              Control  how  many  blocks  fio will verify if verify_backlog is
690              set. If not set, will default to  the  value  of  verify_backlog
691              (meaning the entire queue is read back and verified).
692
693       stonewall
694              Wait for preceeding jobs in the job file to exit before starting
695              this one.  stonewall implies new_group.
696
697       new_group
698              Start a new reporting group.  If not given, all jobs in  a  file
699              will  be part of the same reporting group, unless separated by a
700              stonewall.
701
702       numjobs=int
703              Number of clones (processes/threads performing  the  same  work‐
704              load) of this job.  Default: 1.
705
706       group_reporting
707              If  set,  display  per-group  reports  instead  of  per-job when
708              numjobs is specified.
709
710       thread Use threads created with pthread_create(3) instead of  processes
711              created with fork(2).
712
713       zonesize=int
714              Divide  file  into  zones  of  the specified size in bytes.  See
715              zoneskip.
716
717       zoneskip=int
718              Skip the specified number of bytes when zonesize bytes  of  data
719              have been read.
720
721       write_iolog=str
722              Write the issued I/O patterns to the specified file.
723
724       read_iolog=str
725              Replay  the  I/O patterns contained in the specified file gener‐
726              ated by write_iolog, or may be a blktrace binary file.
727
728       write_bw_log =str
729              If given, write a bandwidth log of the jobs in  this  job  file.
730              Can  be used to store data of the bandwidth of the jobs in their
731              lifetime. The included fio_generate_plots script uses gnuplot to
732              turn  these  text  files into nice graphs. See write_log_log for
733              behaviour of given filename. For this  option,  the  postfix  is
734              _bw.log.
735
736       write_lat_log
737              Same  as  write_bw_log, but writes I/O completion latencies.  If
738              no filename is given with this option, the default  filename  of
739              "jobname_type.log"  is  used. Even if the filename is given, fio
740              will still append the type of log.
741
742       disable_lat =bool
743              Disable measurements of total latency numbers. Useful  only  for
744              cutting  back  the number of calls to gettimeofday, as that does
745              impact performance at really high  IOPS  rates.   Note  that  to
746              really  get  rid  of  a large amount of these calls, this option
747              must be used with disable_slat and disable_bw as well.
748
749       disable_clat =bool
750              Disable measurements of submission  latency  numbers.  See  dis‐
751              able_lat.
752
753       disable_slat =bool
754              Disable  measurements  of  submission  latency numbers. See dis‐
755              able_lat.
756
757       disable_bw_measurement =bool
758              Disable measurements of throughput/bandwidth numbers.  See  dis‐
759              able_lat.
760
761       lockmem=int
762              Pin  the  specified amount of memory with mlock(2).  Can be used
763              to simulate a smaller amount of memory.
764
765       exec_prerun=str
766              Before running the job, execute the specified command with  sys‐
767              tem(3).
768
769       exec_postrun=str
770              Same  as  exec_prerun, but the command is executed after the job
771              completes.
772
773       ioscheduler=str
774              Attempt to switch the device hosting the file to  the  specified
775              I/O scheduler.
776
777       cpuload=int
778              If  the  job  is a CPU cycle-eater, attempt to use the specified
779              percentage of CPU cycles.
780
781       cpuchunks=int
782              If the job is a CPU cycle-eater, split the load into  cycles  of
783              the given time in milliseconds.
784
785       disk_util=bool
786              Generate  disk  utilization  statistics if the platform supports
787              it. Default: true.
788
789       gtod_reduce=bool
790              Enable all of the gettimeofday() reducing options (disable_clat,
791              disable_slat,  disable_bw)  plus reduce precision of the timeout
792              somewhat to really shrink the gettimeofday()  call  count.  With
793              this  option  enabled, we only do about 0.4% of the gtod() calls
794              we would have done if all time keeping was enabled.
795
796       gtod_cpu=int
797              Sometimes it's cheaper to dedicate a single thread of  execution
798              to  just  getting  the  current  time.  Fio  (and databases, for
799              instance) are very intensive on gettimeofday() calls. With  this
800              option,  you can set one CPU aside for doing nothing but logging
801              current time  to  a  shared  memory  location.  Then  the  other
802              threads/processes that run IO workloads need only copy that seg‐
803              ment, instead of entering the kernel with a gettimeofday() call.
804              The  CPU  set  aside for doing these time calls will be excluded
805              from other uses. Fio will manually clear it from the CPU mask of
806              other jobs.
807
808       cgroup=str
809              Add  job  to this control group. If it doesn't exist, it will be
810              created.  The system must have  a  mounted  cgroup  blkio  mount
811              point  for this to work. If your system doesn't have it mounted,
812              you can do so with:
813
814              # mount -t cgroup -o blkio none /cgroup
815
816       cgroup_weight=int
817              Set the weight of the cgroup to this value. See  the  documenta‐
818              tion that comes with the kernel, allowed values are in the range
819              of 100..1000.
820
821       cgroup_nodelete=bool
822              Normally fio will delete the cgroups it has  created  after  the
823              job  completion.  To override this behavior and to leave cgroups
824              around after the job completion, set cgroup_nodelete=1. This can
825              be useful if one wants to inspect various cgroup files after job
826              completion. Default: false
827
828       uid=int
829              Instead of running as the invoking user, set the user ID to this
830              value before the thread/process does any work.
831
832       gid=int
833              Set group ID, see uid.
834

OUTPUT

836       While  running,  fio  will display the status of the created jobs.  For
837       example:
838
839              Threads:  1:  [_r]  [24.8%  done]  [  13509/   8334  kb/s]  [eta
840              00h:01m:31s]
841
842       The  characters  in the first set of brackets denote the current status
843       of each threads.  The possible values are:
844
845              P      Setup but not started.
846              C      Thread created.
847              I      Initialized, waiting.
848              R      Running, doing sequential reads.
849              r      Running, doing random reads.
850              W      Running, doing sequential writes.
851              w      Running, doing random writes.
852              M      Running, doing mixed sequential reads/writes.
853              m      Running, doing mixed random reads/writes.
854              F      Running, currently waiting for fsync(2).
855              V      Running, verifying written data.
856              E      Exited, not reaped by main thread.
857              -      Exited, thread reaped.
858
859       The second set of brackets shows the estimated completion percentage of
860       the  current  group.   The third set shows the read and write I/O rate,
861       respectively. Finally, the estimated run time of the job is displayed.
862
863       When fio completes (or is interrupted by Ctrl-C), it will show data for
864       each thread, each group of threads, and each disk, in that order.
865
866       Per-thread  statistics  first show the threads client number, group-id,
867       and error code.  The remaining figures are as follows:
868
869              io     Number of megabytes of I/O performed.
870
871              bw     Average data rate (bandwidth).
872
873              runt   Threads run time.
874
875              slat   Submission latency minimum, maximum, average and standard
876                     deviation. This is the time it took to submit the I/O.
877
878              clat   Completion latency minimum, maximum, average and standard
879                     deviation.  This is the time between submission and  com‐
880                     pletion.
881
882              bw     Bandwidth minimum, maximum, percentage of aggregate band‐
883                     width received, average and standard deviation.
884
885              cpu    CPU usage statistics. Includes user and system time, num‐
886                     ber of context switches this thread went through and num‐
887                     ber of major and minor page faults.
888
889              IO depths
890                     Distribution of I/O depths.  Each depth  includes  every‐
891                     thing  less  than  (or equal) to it, but greater than the
892                     previous depth.
893
894              IO issued
895                     Number of read/write requests issued, and number of short
896                     read/write requests.
897
898              IO latencies
899                     Distribution  of  I/O  completion latencies.  The numbers
900                     follow the same pattern as IO depths.
901
902       The group statistics show:
903              io     Number of megabytes I/O performed.
904              aggrb  Aggregate bandwidth of threads in the group.
905              minb   Minimum average bandwidth a thread saw.
906              maxb   Maximum average bandwidth a thread saw.
907              mint   Shortest runtime of threads in the group.
908              maxt   Longest runtime of threads in the group.
909
910       Finally, disk statistics are printed with reads first:
911              ios    Number of I/Os performed by all groups.
912              merge  Number of merges in the I/O scheduler.
913              ticks  Number of ticks we kept the disk busy.
914              io_queue
915                     Total time spent in the disk queue.
916              util   Disk utilization.
917

TERSE OUTPUT

919       If the --minimal option is given, the results  will  be  printed  in  a
920       semicolon-delimited format suitable for scripted use.  The fields are:
921
922              jobname, groupid, error
923
924              Read status:
925                     KB I/O, bandwidth (KB/s), runtime (ms)
926
927                     Submission latency:
928                            min, max, mean, standard deviation
929                     Completion latency:
930                            min, max, mean, standard deviation
931                     Bandwidth:
932                            min,  max,  aggregate  percentage  of total, mean,
933                            standard deviation
934
935              Write status:
936                     KB I/O, bandwidth (KB/s), runtime (ms)
937
938                     Submission latency:
939                            min, max, mean, standard deviation
940                     Completion latency:
941                            min, max, mean, standard deviation
942                     Bandwidth:
943                            min, max, aggregate  percentage  of  total,  mean,
944                            standard deviation
945
946              CPU usage:
947                     user,  system, context switches, major page faults, minor
948                     page faults
949
950              IO depth distribution:
951                     <=1, 2, 4, 8, 16, 32, >=64
952
953              IO latency distribution (ms):
954                     <=2, 4, 10, 20, 50, 100, 250, 500, 750, 1000, >=2000
955
956              text description
957

AUTHORS

959       fio was written by Jens Axboe <jens.axboe@oracle.com>, now  Jens  Axboe
960       <jaxboe@fusionio.com>.
961       This  man  page  was  written by Aaron Carroll <aaronc@cse.unsw.edu.au>
962       based on documentation by Jens Axboe.
963

REPORTING BUGS

965       Report bugs to the fio mailing list <fio@vger.kernel.org>.  See README.
966

SEE ALSO

968       For further documentation see HOWTO and README.
969       Sample jobfiles are available in the examples directory.
970
971
972
973
974User Manual                     September 2007                          fio(1)
Impressum