Merge branch 'patch-1' of https://github.com/Nikratio/fio
authorJens Axboe <axboe@kernel.dk>
Fri, 28 Jan 2022 21:50:51 +0000 (14:50 -0700)
committerJens Axboe <axboe@kernel.dk>
Fri, 28 Jan 2022 21:50:51 +0000 (14:50 -0700)
* 'patch-1' of https://github.com/Nikratio/fio:
  I/O size: fix description of filesize

1  2 
HOWTO
fio.1

diff --combined HOWTO
index f9e7c8572041fee4f95a46ce08cceffc13cb0f94,943e99d2a5017e8d583f5b22758148297f5b3f04..c72ec8cd0125139c06298a782aa97304cc75e8a4
--- 1/HOWTO
--- 2/HOWTO
+++ b/HOWTO
@@@ -544,9 -544,6 +544,9 @@@ Parameter type
                * *Ti* -- means tebi (Ti) or 1024**4
                * *Pi* -- means pebi (Pi) or 1024**5
  
 +      For Zone Block Device Mode:
 +              * *z*  -- means Zone
 +
        With :option:`kb_base`\=1024 (the default), the unit prefixes are opposite
        from those specified in the SI and IEC 80000-13 standards to provide
        compatibility with old scripts.  For example, 4k means 4096.
@@@ -992,9 -989,6 +992,9 @@@ Target file/devic
                                single zone. The :option:`zoneskip` parameter
                                is ignored. :option:`zonerange` and
                                :option:`zonesize` must be identical.
 +                              Trim is handled using a zone reset operation.
 +                              Trim only considers non-empty sequential write
 +                              required and sequential write preferred zones.
  
  .. option:: zonerange=int
  
        number of open zones is defined as the number of zones to which write
        commands are issued.
  
 +.. option:: job_max_open_zones=int
 +
 +      Limit on the number of simultaneously opened zones per single
 +      thread/process.
 +
 +.. option:: ignore_zone_limits=bool
 +      If this option is used, fio will ignore the maximum number of open
 +      zones limit of the zoned block device in use, thus allowing the
 +      option :option:`max_open_zones` value to be larger than the device
 +      reported limit. Default: false.
 +
  .. option:: zone_reset_threshold=float
  
        A number between zero and one that indicates the ratio of logical
@@@ -1185,7 -1168,7 +1185,7 @@@ I/O typ
  
                **1**
                        Backward-compatible alias for **mixed**.
 -              
 +
                **2**
                        Alias for **both**.
  
  .. option:: offset=int
  
        Start I/O at the provided offset in the file, given as either a fixed size in
 -      bytes or a percentage. If a percentage is given, the generated offset will be
 +      bytes, zones or a percentage. If a percentage is given, the generated offset will be
        aligned to the minimum ``blocksize`` or to the value of ``offset_align`` if
        provided. Data before the given offset will not be touched. This
        effectively caps the file size at `real_size - offset`. Can be combined with
        :option:`size` to constrain the start and end range of the I/O workload.
        A percentage can be specified by a number between 1 and 100 followed by '%',
 -      for example, ``offset=20%`` to specify 20%.
 +      for example, ``offset=20%`` to specify 20%. In ZBD mode, value can be set as 
 +        number of zones using 'z'.
  
  .. option:: offset_align=int
  
        intended to operate on a file in parallel disjoint segments, with even
        spacing between the starting points. Percentages can be used for this option.
        If a percentage is given, the generated offset will be aligned to the minimum
 -      ``blocksize`` or to the value of ``offset_align`` if provided.
 +      ``blocksize`` or to the value of ``offset_align`` if provided. In ZBD mode, value can
 +        also be set as number of zones using 'z'.
  
  .. option:: number_ios=int
  
@@@ -1719,36 -1700,6 +1719,36 @@@ Buffers and memor
        this option will also enable :option:`refill_buffers` to prevent every buffer
        being identical.
  
 +.. option:: dedupe_mode=str
 +
 +      If ``dedupe_percentage=<int>`` is given, then this option controls how fio
 +      generates the dedupe buffers.
 +
 +              **repeat**
 +                      Generate dedupe buffers by repeating previous writes
 +              **working_set**
 +                      Generate dedupe buffers from working set
 +
 +      ``repeat`` is the default option for fio. Dedupe buffers are generated
 +      by repeating previous unique write.
 +
 +      ``working_set`` is a more realistic workload.
 +      With ``working_set``, ``dedupe_working_set_percentage=<int>`` should be provided.
 +      Given that, fio will use the initial unique write buffers as its working set.
 +      Upon deciding to dedupe, fio will randomly choose a buffer from the working set.
 +      Note that by using ``working_set`` the dedupe percentage will converge
 +      to the desired over time while ``repeat`` maintains the desired percentage
 +      throughout the job.
 +
 +.. option:: dedupe_working_set_percentage=int
 +
 +      If ``dedupe_mode=<str>`` is set to ``working_set``, then this controls
 +      the percentage of size of the file or device used as the buffers
 +      fio will choose to generate the dedupe buffers from
 +
 +      Note that size needs to be explicitly provided and only 1 file per
 +      job is supported
 +
  .. option:: invalidate=bool
  
        Invalidate the buffer/page cache parts of the files to be used prior to
@@@ -1867,8 -1818,7 +1867,8 @@@ I/O siz
        If this option is not specified, fio will use the full size of the given
        files or devices.  If the files do not exist, size must be given. It is also
        possible to give size as a percentage between 1 and 100. If ``size=20%`` is
 -      given, fio will use 20% of the full size of the given files or devices.
 +      given, fio will use 20% of the full size of the given files or devices. 
 +      In ZBD mode, value can also be set as number of zones using 'z'.
        Can be combined with :option:`offset` to constrain the start and end range
        that I/O will be done within.
  
  
  .. option:: filesize=irange(int)
  
-       Individual file sizes. May be a range, in which case fio will select sizes
-       for files at random within the given range and limited to :option:`size` in
-       total (if that is given). If not given, each created file is the same size.
-       This option overrides :option:`size` in terms of file size, which means
-       this value is used as a fixed size or possible range of each file.
+       Individual file sizes. May be a range, in which case fio will select sizes for
+       files at random within the given range. If not given, each created file is the
+       same size. This option overrides :option:`size` in terms of file size, i.e. if
+       :option:`filesize` is specified then :option:`size` becomes merely the default
+       for :option:`io_size` and has no effect at all if :option:`io_size` is set
+       explicitly.
  
  .. option:: file_append=bool
  
  .. option:: fill_device=bool, fill_fs=bool
  
        Sets size to something really large and waits for ENOSPC (no space left on
 -      device) as the terminating condition. Only makes sense with sequential
 +      device) or EDQUOT (disk quota exceeded)
 +      as the terminating condition. Only makes sense with sequential
        write. For a read workload, the mount point will be filled first then I/O
        started on the result. This option doesn't make sense if operating on a raw
        device node, since the size of that is already known by the file system.
@@@ -1974,11 -1924,6 +1975,11 @@@ I/O engin
                        character devices. This engine supports trim operations.
                        The sg engine includes engine specific options.
  
 +              **libzbc**
 +                      Read, write, trim and ZBC/ZAC operations to a zoned
 +                      block device using libzbc library. The target can be
 +                      either an SG character device or a block device file.
 +
                **null**
                        Doesn't transfer any data, just pretends to.  This is mainly used to
                        exercise fio itself and for debugging/testing purposes.
                        I/O engine supporting asynchronous read and write operations to the
                        DAOS File System (DFS) via libdfs.
  
 +              **nfs**
 +                      I/O engine supporting asynchronous read and write operations to
 +                      NFS filesystems from userspace via libnfs. This is useful for
 +                      achieving higher concurrency and thus throughput than is possible
 +                      via kernel NFS.
 +
 +              **exec**
 +                      Execute 3rd party tools. Could be used to perform monitoring during jobs runtime.
 +
  I/O engine specific parameters
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  
@@@ -2169,52 -2105,14 +2170,52 @@@ In addition, there are some parameters 
  with the caveat that when used on the command line, they must come after the
  :option:`ioengine` that defines them is selected.
  
 -.. option:: cmdprio_percentage=int : [io_uring] [libaio]
 -
 -    Set the percentage of I/O that will be issued with higher priority by setting
 -    the priority bit. Non-read I/O is likely unaffected by ``cmdprio_percentage``.
 -    This option cannot be used with the `prio` or `prioclass` options. For this
 -    option to set the priority bit properly, NCQ priority must be supported and
 -    enabled and :option:`direct`\=1 option must be used. fio must also be run as
 -    the root user.
 +.. option:: cmdprio_percentage=int[,int] : [io_uring] [libaio]
 +
 +    Set the percentage of I/O that will be issued with the highest priority.
 +    Default: 0. A single value applies to reads and writes. Comma-separated
 +    values may be specified for reads and writes. For this option to be
 +    effective, NCQ priority must be supported and enabled, and `direct=1'
 +    option must be used. fio must also be run as the root user. Unlike
 +    slat/clat/lat stats, which can be tracked and reported independently, per
 +    priority stats only track and report a single type of latency. By default,
 +    completion latency (clat) will be reported, if :option:`lat_percentiles` is
 +    set, total latency (lat) will be reported.
 +
 +.. option:: cmdprio_class=int[,int] : [io_uring] [libaio]
 +
 +      Set the I/O priority class to use for I/Os that must be issued with
 +      a priority when :option:`cmdprio_percentage` or
 +      :option:`cmdprio_bssplit` is set. If not specified when
 +      :option:`cmdprio_percentage` or :option:`cmdprio_bssplit` is set,
 +      this defaults to the highest priority class. A single value applies
 +      to reads and writes. Comma-separated values may be specified for
 +      reads and writes. See :manpage:`ionice(1)`. See also the
 +      :option:`prioclass` option.
 +
 +.. option:: cmdprio=int[,int] : [io_uring] [libaio]
 +
 +      Set the I/O priority value to use for I/Os that must be issued with
 +      a priority when :option:`cmdprio_percentage` or
 +      :option:`cmdprio_bssplit` is set. If not specified when
 +      :option:`cmdprio_percentage` or :option:`cmdprio_bssplit` is set,
 +      this defaults to 0.
 +      Linux limits us to a positive value between 0 and 7, with 0 being the
 +      highest. A single value applies to reads and writes. Comma-separated
 +      values may be specified for reads and writes. See :manpage:`ionice(1)`.
 +      Refer to an appropriate manpage for other operating systems since
 +      meaning of priority may differ. See also the :option:`prio` option.
 +
 +.. option:: cmdprio_bssplit=str[,str] : [io_uring] [libaio]
 +      To get a finer control over I/O priority, this option allows
 +      specifying the percentage of IOs that must have a priority set
 +      depending on the block size of the IO. This option is useful only
 +      when used together with the :option:`bssplit` option, that is,
 +      multiple different block sizes are used for reads and writes.
 +      The format for this option is the same as the format of the
 +      :option:`bssplit` option, with the exception that values for
 +      trim IOs are ignored. This option is mutually exclusive with the
 +      :option:`cmdprio_percentage` option.
  
  .. option:: fixedbufs : [io_uring]
  
        Set to 1 only when Direct Write to PMem from the remote host is possible.
        Otherwise, set to 0.
  
 +.. option:: busy_wait_polling=bool : [librpma_*_server]
 +
 +      Set to 0 to wait for completion instead of busy-wait polling completion.
 +      Default: 1.
 +
  .. option:: interface=str : [netsplice] [net]
  
        The IP address of the network interface used to send or receive UDP
  
        **write**
                This is the default where write opcodes are issued as usual.
 -      **verify**
 +      **write_and_verify**
                Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 0. This
                directs the device to carry out a medium verification with no data
                comparison. The writefua option is ignored with this selection.
 -      **same**
 +      **verify**
 +              This option is deprecated. Use write_and_verify instead.
 +      **write_same**
                Issue WRITE SAME commands. This transfers a single block to the device
                and writes this same block of data to a contiguous sequence of LBAs
                beginning at the specified offset. fio's block size parameter specifies
                for each command but only the first 512 bytes will be used and
                transferred to the device. The writefua option is ignored with this
                selection.
 +      **same**
 +              This option is deprecated. Use write_same instead.
 +      **write_same_ndob**
 +              Issue WRITE SAME(16) commands as above but with the No Data Output
 +              Buffer (NDOB) bit set. No data will be transferred to the device with
 +              this bit set. Data written will be a pre-determined pattern such as
 +              all zeroes.
 +      **write_stream**
 +              Issue WRITE STREAM(16) commands. Use the **stream_id** option to specify
 +              the stream identifier.
 +      **verify_bytchk_00**
 +              Issue VERIFY commands with BYTCHK set to 00. This directs the
 +              device to carry out a medium verification with no data comparison.
 +      **verify_bytchk_01**
 +              Issue VERIFY commands with BYTCHK set to 01. This directs the device to
 +              compare the data on the device with the data transferred to the device.
 +      **verify_bytchk_11**
 +              Issue VERIFY commands with BYTCHK set to 11. This transfers a
 +              single block to the device and compares the contents of this block with the
 +              data on the device beginning at the specified offset. fio's block size
 +              parameter specifies the total amount of data compared with this command.
 +              However, only one block (sector) worth of data is transferred to the device.
 +              This is similar to the WRITE SAME command except that data is compared instead
 +              of written.
 +
 +.. option:: stream_id=int : [sg]
 +
 +      Set the stream identifier for WRITE STREAM commands. If this is set to 0 (which is not
 +      a valid stream identifier) fio will open a stream and then close it when done. Default
 +      is 0.
  
  .. option:: hipri : [sg]
  
  
  .. option:: pool=str : [dfs]
  
 -      Specify the UUID of the DAOS pool to connect to.
 +      Specify the label or UUID of the DAOS pool to connect to.
  
  .. option:: cont=str : [dfs]
  
 -      Specify the UUID of the DAOS container to open.
 +      Specify the label or UUID of the DAOS container to open.
  
  .. option:: chunk_size=int : [dfs]
  
        Specificy a different object class for the dfs file.
        Use DAOS container's object class by default.
  
 +.. option:: nfs_url=str : [nfs]
 +
 +      URL in libnfs format, eg nfs://<server|ipv4|ipv6>/path[?arg=val[&arg=val]*]
 +      Refer to the libnfs README for more details.
 +
 +.. option:: program=str : [exec]
 +
 +      Specify the program to execute.
 +
 +.. option:: arguments=str : [exec]
 +
 +      Specify arguments to pass to program.
 +      Some special variables can be expanded to pass fio's job details to the program.
 +
 +      **%r**
 +              Replaced by the duration of the job in seconds.
 +      **%n**
 +              Replaced by the name of the job.
 +
 +.. option:: grace_time=int : [exec]
 +
 +      Specify the time between the SIGTERM and SIGKILL signals. Default is 1 second.
 +
 +.. option:: std_redirect=bool : [exec]
 +
 +      If set, stdout and stderr streams are redirected to files named from the job name. Default is true.
 +
  I/O depth
  ~~~~~~~~~
  
@@@ -2786,7 -2620,7 +2787,7 @@@ I/O rat
        Stall the job for the specified period of time after an I/O has completed before issuing the
        next. May be used to simulate processing being done by an application.
        When the unit is omitted, the value is interpreted in microseconds.  See
 -      :option:`thinktime_blocks` and :option:`thinktime_spin`.
 +      :option:`thinktime_blocks`, :option:`thinktime_iotime` and :option:`thinktime_spin`.
  
  .. option:: thinktime_spin=time
  
        :option:`thinktime_blocks` blocks. If this is set to `issue`, then the trigger happens
        at the issue side.
  
 +.. option:: thinktime_iotime=time
 +
 +      Only valid if :option:`thinktime` is set - control :option:`thinktime`
 +      interval by time. The :option:`thinktime` stall is repeated after IOs
 +      are executed for :option:`thinktime_iotime`. For example,
 +      ``--thinktime_iotime=9s --thinktime=1s`` repeat 10-second cycle with IOs
 +      for 9 seconds and stall for 1 second. When the unit is omitted,
 +      :option:`thinktime_iotime` is interpreted as a number of seconds. If
 +      this option is used together with :option:`thinktime_blocks`, the
 +      :option:`thinktime` stall is repeated after :option:`thinktime_iotime`
 +      or after :option:`thinktime_blocks` IOs, whichever happens first.
 +
  .. option:: rate=int[,int][,int]
  
        Cap the bandwidth used by this job. The number is in bytes/sec, the normal
@@@ -3062,14 -2884,14 +3063,14 @@@ Threads, processes and job synchronizat
        between 0 and 7, with 0 being the highest.  See man
        :manpage:`ionice(1)`. Refer to an appropriate manpage for other operating
        systems since meaning of priority may differ. For per-command priority
 -      setting, see I/O engine specific `cmdprio_percentage` and `hipri_percentage`
 -      options.
 +      setting, see I/O engine specific :option:`cmdprio_percentage` and
 +      :option:`cmdprio` options.
  
  .. option:: prioclass=int
  
        Set the I/O priority class. See man :manpage:`ionice(1)`. For per-command
 -      priority setting, see I/O engine specific `cmdprio_percentage` and
 -      `hipri_percentage` options.
 +      priority setting, see I/O engine specific :option:`cmdprio_percentage`
 +      and :option:`cmdprio_class` options.
  
  .. option:: cpus_allowed=str
  
@@@ -3579,18 -3401,6 +3580,18 @@@ Measurements and reportin
        :option:`write_bw_log` for details about the filename format and `Log
        File Formats`_ for how data is structured within the file.
  
 +.. option:: log_entries=int
 +
 +      By default, fio will log an entry in the iops, latency, or bw log for
 +      every I/O that completes. The initial number of I/O log entries is 1024.
 +      When the log entries are all used, new log entries are dynamically
 +      allocated.  This dynamic log entry allocation may negatively impact
 +      time-related statistics such as I/O tail latencies (e.g. 99.9th percentile
 +      completion latency). This option allows specifying a larger initial
 +      number of log entries to avoid run-time allocations of new log entries,
 +      resulting in more precise time-related I/O statistics.
 +      Also see :option:`log_avg_msec`. Defaults to 1024.
 +
  .. option:: log_avg_msec=int
  
        By default, fio will log an entry in the iops, latency, or bw log for every
diff --combined fio.1
index 34aa874d2d4f512ee46ed3dd12cfaedededc46ec,95456a32581438ab9293ac15c8cfe54485380673..b87d2309ac16704256f2deb1f08f96b0d8069ca2
--- 1/fio.1
--- 2/fio.1
+++ b/fio.1
@@@ -288,15 -288,6 +288,15 @@@ Pi means pebi (Pi) or 1024**
  .PD
  .RE
  .P
 +For Zone Block Device Mode:
 +.RS
 +.P
 +.PD 0
 +z means Zone 
 +.P
 +.PD
 +.RE
 +.P
  With `kb_base=1024' (the default), the unit prefixes are opposite
  from those specified in the SI and IEC 80000-13 standards to provide
  compatibility with old scripts. For example, 4k means 4096.
@@@ -766,8 -757,6 +766,8 @@@ starts. The \fBzonecapacity\fR paramete
  Zoned block device mode. I/O happens sequentially in each zone, even if random
  I/O has been selected. Random I/O happens across all zones instead of being
  restricted to a single zone.
 +Trim is handled using a zone reset operation. Trim only considers non-empty
 +sequential write required and sequential write preferred zones.
  .RE
  .RE
  .TP
@@@ -837,11 -826,6 +837,11 @@@ threads/processes
  .BI job_max_open_zones \fR=\fPint
  Limit on the number of simultaneously opened zones per single thread/process.
  .TP
 +.BI ignore_zone_limits \fR=\fPbool
 +If this option is used, fio will ignore the maximum number of open zones limit
 +of the zoned block device in use, thus allowing the option \fBmax_open_zones\fR
 +value to be larger than the device reported limit. Default: false.
 +.TP
  .BI zone_reset_threshold \fR=\fPfloat
  A number between zero and one that indicates the ratio of logical blocks with
  data to the total number of logical blocks in the test above which zones
@@@ -1077,14 -1061,13 +1077,14 @@@ should be associated with them
  .TP
  .BI offset \fR=\fPint[%|z]
  Start I/O at the provided offset in the file, given as either a fixed size in
 -bytes or a percentage. If a percentage is given, the generated offset will be
 +bytes, zones or a percentage. If a percentage is given, the generated offset will be
  aligned to the minimum \fBblocksize\fR or to the value of \fBoffset_align\fR if
  provided. Data before the given offset will not be touched. This
  effectively caps the file size at `real_size \- offset'. Can be combined with
  \fBsize\fR to constrain the start and end range of the I/O workload.
  A percentage can be specified by a number between 1 and 100 followed by '%',
 -for example, `offset=20%' to specify 20%.
 +for example, `offset=20%' to specify 20%. In ZBD mode, value can be set as 
 +number of zones using 'z'.
  .TP
  .BI offset_align \fR=\fPint
  If set to non-zero value, the byte offset generated by a percentage \fBoffset\fR
@@@ -1099,8 -1082,7 +1099,8 @@@ specified). This option is useful if th
  intended to operate on a file in parallel disjoint segments, with even
  spacing between the starting points. Percentages can be used for this option.
  If a percentage is given, the generated offset will be aligned to the minimum
 -\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.
 +\fBblocksize\fR or to the value of \fBoffset_align\fR if provided.In ZBD mode, value 
 +can be set as number of zones using 'z'.
  .TP
  .BI number_ios \fR=\fPint
  Fio will normally perform I/Os until it has exhausted the size of the region
@@@ -1511,48 -1493,6 +1511,48 @@@ all \-\- this option only controls the 
  this option will also enable \fBrefill_buffers\fR to prevent every buffer
  being identical.
  .TP
 +.BI dedupe_mode \fR=\fPstr
 +If \fBdedupe_percentage\fR is given, then this option controls how fio
 +generates the dedupe buffers.
 +.RS
 +.RS
 +.TP
 +.B repeat
 +.P
 +.RS
 +Generate dedupe buffers by repeating previous writes
 +.RE
 +.TP
 +.B working_set
 +.P
 +.RS
 +Generate dedupe buffers from working set
 +.RE
 +.RE
 +.P
 +\fBrepeat\fR is the default option for fio. Dedupe buffers are generated
 +by repeating previous unique write.
 +
 +\fBworking_set\fR is a more realistic workload.
 +With \fBworking_set\fR, \fBdedupe_working_set_percentage\fR should be provided.
 +Given that, fio will use the initial unique write buffers as its working set.
 +Upon deciding to dedupe, fio will randomly choose a buffer from the working set.
 +Note that by using \fBworking_set\fR the dedupe percentage will converge
 +to the desired over time while \fBrepeat\fR maintains the desired percentage
 +throughout the job.
 +.RE
 +.RE
 +.TP
 +.BI dedupe_working_set_percentage \fR=\fPint
 +If \fBdedupe_mode\fR is set to \fBworking_set\fR, then this controls
 +the percentage of size of the file or device used as the buffers
 +fio will choose to generate the dedupe buffers from
 +.P
 +.RS
 +Note that \fBsize\fR needs to be explicitly provided and only 1 file
 +per job is supported
 +.RE
 +.TP
  .BI invalidate \fR=\fPbool
  Invalidate the buffer/page cache parts of the files to be used prior to
  starting I/O if the platform and file type support it. Defaults to true.
@@@ -1667,9 -1607,9 +1667,9 @@@ set to the physical size of the given f
  If this option is not specified, fio will use the full size of the given
  files or devices. If the files do not exist, size must be given. It is also
  possible to give size as a percentage between 1 and 100. If `size=20%' is
 -given, fio will use 20% of the full size of the given files or devices.
 -Can be combined with \fBoffset\fR to constrain the start and end range
 -that I/O will be done within.
 +given, fio will use 20% of the full size of the given files or devices. In ZBD mode,
 +size can be given in units of number of zones using 'z'. Can be combined with \fBoffset\fR to 
 +constrain the start and end range that I/O will be done within.
  .TP
  .BI io_size \fR=\fPint[%|z] "\fR,\fB io_limit" \fR=\fPint[%|z]
  Normally fio operates within the region set by \fBsize\fR, which means
@@@ -1681,15 -1621,14 +1681,15 @@@ will perform I/O within the first 20Gi
  done. The opposite is also possible \-\- if \fBsize\fR is set to 20GiB,
  and \fBio_size\fR is set to 40GiB, then fio will do 40GiB of I/O within
  the 0..20GiB region. Value can be set as percentage: \fBio_size\fR=N%.
 -In this case \fBio_size\fR multiplies \fBsize\fR= value.
 +In this case \fBio_size\fR multiplies \fBsize\fR= value. In ZBD mode, value can
 +also be set as number of zones using 'z'.
  .TP
  .BI filesize \fR=\fPirange(int)
  Individual file sizes. May be a range, in which case fio will select sizes
- for files at random within the given range and limited to \fBsize\fR in
- total (if that is given). If not given, each created file is the same size.
- This option overrides \fBsize\fR in terms of file size, which means
this value is used as a fixed size or possible range of each file.
+ for files at random within the given range. If not given, each created file
+ is the same size. This option overrides \fBsize\fR in terms of file size, 
+ i.e. \fBsize\fR becomes merely the default for \fBio_size\fR (and
has no effect it all if \fBio_size\fR is set explicitly).
  .TP
  .BI file_append \fR=\fPbool
  Perform I/O after the end of the file. Normally fio will operate within the
@@@ -1699,10 -1638,11 +1699,10 @@@ of a file. This option is ignored on no
  .TP
  .BI fill_device \fR=\fPbool "\fR,\fB fill_fs" \fR=\fPbool
  Sets size to something really large and waits for ENOSPC (no space left on
 -device) as the terminating condition. Only makes sense with sequential
 +device) or EDQUOT (disk quota exceeded)
 +as the terminating condition. Only makes sense with sequential
  write. For a read workload, the mount point will be filled first then I/O
 -started on the result. This option doesn't make sense if operating on a raw
 -device node, since the size of that is already known by the file system.
 -Additionally, writing beyond end-of-device will not return ENOSPC there.
 +started on the result.
  .SS "I/O engine"
  .TP
  .BI ioengine \fR=\fPstr
@@@ -1763,9 -1703,10 +1763,9 @@@ character devices. This engine support
  sg engine includes engine specific options.
  .TP
  .B libzbc
 -Synchronous I/O engine for SMR hard-disks using the \fBlibzbc\fR
 -library. The target can be either an sg character device or
 -a block device file. This engine supports the zonemode=zbd zone
 -operations.
 +Read, write, trim and ZBC/ZAC operations to a zoned block device using
 +\fBlibzbc\fR library. The target can be either an SG character device or
 +a block device file.
  .TP
  .B null
  Doesn't transfer any data, just pretends to. This is mainly used to
@@@ -1947,58 -1888,19 +1947,58 @@@ not be \fBcudamalloc\fR. This ioengine 
  .B dfs
  I/O engine supporting asynchronous read and write operations to the DAOS File
  System (DFS) via libdfs.
 +.TP
 +.B nfs
 +I/O engine supporting asynchronous read and write operations to
 +NFS filesystems from userspace via libnfs. This is useful for
 +achieving higher concurrency and thus throughput than is possible
 +via kernel NFS.
 +.TP
 +.B exec
 +Execute 3rd party tools. Could be used to perform monitoring during jobs runtime.
  .SS "I/O engine specific parameters"
  In addition, there are some parameters which are only valid when a specific
  \fBioengine\fR is in use. These are used identically to normal parameters,
  with the caveat that when used on the command line, they must come after the
  \fBioengine\fR that defines them is selected.
  .TP
 -.BI (io_uring, libaio)cmdprio_percentage \fR=\fPint
 -Set the percentage of I/O that will be issued with higher priority by setting
 -the priority bit. Non-read I/O is likely unaffected by ``cmdprio_percentage``.
 -This option cannot be used with the `prio` or `prioclass` options. For this
 -option to set the priority bit properly, NCQ priority must be supported and
 -enabled and `direct=1' option must be used. fio must also be run as the root
 -user.
 +.BI (io_uring,libaio)cmdprio_percentage \fR=\fPint[,int]
 +Set the percentage of I/O that will be issued with the highest priority.
 +Default: 0. A single value applies to reads and writes. Comma-separated
 +values may be specified for reads and writes. For this option to be effective,
 +NCQ priority must be supported and enabled, and `direct=1' option must be
 +used. fio must also be run as the root user. Unlike slat/clat/lat stats, which
 +can be tracked and reported independently, per priority stats only track and
 +report a single type of latency. By default, completion latency (clat) will be
 +reported, if \fBlat_percentiles\fR is set, total latency (lat) will be reported.
 +.TP
 +.BI (io_uring,libaio)cmdprio_class \fR=\fPint[,int]
 +Set the I/O priority class to use for I/Os that must be issued with a
 +priority when \fBcmdprio_percentage\fR or \fBcmdprio_bssplit\fR is set.
 +If not specified when \fBcmdprio_percentage\fR or \fBcmdprio_bssplit\fR
 +is set, this defaults to the highest priority class. A single value applies
 +to reads and writes. Comma-separated values may be specified for reads and
 +writes. See man \fBionice\fR\|(1). See also the \fBprioclass\fR option.
 +.TP
 +.BI (io_uring,libaio)cmdprio \fR=\fPint[,int]
 +Set the I/O priority value to use for I/Os that must be issued with a
 +priority when \fBcmdprio_percentage\fR or \fBcmdprio_bssplit\fR is set.
 +If not specified when \fBcmdprio_percentage\fR or \fBcmdprio_bssplit\fR
 +is set, this defaults to 0. Linux limits us to a positive value between
 +0 and 7, with 0 being the highest. A single value applies to reads and writes.
 +Comma-separated values may be specified for reads and writes. See man
 +\fBionice\fR\|(1). Refer to an appropriate manpage for other operating systems
 +since the meaning of priority may differ. See also the \fBprio\fR option.
 +.TP
 +.BI (io_uring,libaio)cmdprio_bssplit \fR=\fPstr[,str]
 +To get a finer control over I/O priority, this option allows specifying
 +the percentage of IOs that must have a priority set depending on the block
 +size of the IO. This option is useful only when used together with the option
 +\fBbssplit\fR, that is, multiple different block sizes are used for reads and
 +writes. The format for this option is the same as the format of the
 +\fBbssplit\fR option, with the exception that values for trim IOs are
 +ignored. This option is mutually exclusive with the \fBcmdprio_percentage\fR
 +option.
  .TP
  .BI (io_uring)fixedbufs
  If fio is asked to do direct IO, then Linux will map pages for each IO call, and
@@@ -2073,20 -1975,20 +2073,20 @@@ Detect when I/O threads are done, then 
  .BI (libhdfs)namenode \fR=\fPstr
  The hostname or IP address of a HDFS cluster namenode to contact.
  .TP
 -.BI (libhdfs)port
 +.BI (libhdfs)port \fR=\fPint
  The listening port of the HFDS cluster namenode.
  .TP
 -.BI (netsplice,net)port
 +.BI (netsplice,net)port \fR=\fPint
  The TCP or UDP port to bind to or connect to. If this is used with
  \fBnumjobs\fR to spawn multiple instances of the same job type, then
  this will be the starting port number since fio will use a range of
  ports.
  .TP
 -.BI (rdma, librpma_*)port
 +.BI (rdma,librpma_*)port \fR=\fPint
  The port to use for RDMA-CM communication. This should be the same
  value on the client and the server side.
  .TP
 -.BI (netsplice,net, rdma)hostname \fR=\fPstr
 +.BI (netsplice,net,rdma)hostname \fR=\fPstr
  The hostname or IP address to use for TCP, UDP or RDMA-CM based I/O.
  If the job is a TCP listener or UDP reader, the hostname is not used
  and must be omitted unless it is a valid UDP multicast address.
@@@ -2097,10 -1999,6 +2097,10 @@@ The IP address to be used for RDMA-CM b
  .BI (librpma_*_server)direct_write_to_pmem \fR=\fPbool
  Set to 1 only when Direct Write to PMem from the remote host is possible. Otherwise, set to 0.
  .TP
 +.BI (librpma_*_server)busy_wait_polling \fR=\fPbool
 +Set to 0 to wait for completion instead of busy-wait polling completion.
 +Default: 1.
 +.TP
  .BI (netsplice,net)interface \fR=\fPstr
  The IP address of the network interface used to send or receive UDP
  multicast.
@@@ -2284,7 -2182,7 +2284,7 @@@ With writefua option set to 1, write op
  unit access (fua) flag. Default: 0.
  .TP
  .BI (sg)sg_write_mode \fR=\fPstr
 -Specify the type of write commands to issue. This option can take three
 +Specify the type of write commands to issue. This option can take multiple
  values:
  .RS
  .RS
  .B write (default)
  Write opcodes are issued as usual
  .TP
 +.B write_and_verify
 +Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 00b. This directs the
 +device to carry out a medium verification with no data comparison for the data
 +that was written. The writefua option is ignored with this selection.
 +.TP
  .B verify
 -Issue WRITE AND VERIFY commands. The BYTCHK bit is set to 0. This
 -directs the device to carry out a medium verification with no data
 -comparison. The writefua option is ignored with this selection.
 +This option is deprecated. Use write_and_verify instead.
  .TP
 -.B same
 +.B write_same
  Issue WRITE SAME commands. This transfers a single block to the device
  and writes this same block of data to a contiguous sequence of LBAs
  beginning at the specified offset. fio's block size parameter
@@@ -2311,43 -2206,9 +2311,43 @@@ blocksize=8k will write 16 sectors wit
  generate 8k of data for each command butonly the first 512 bytes will
  be used and transferred to the device. The writefua option is ignored
  with this selection.
 +.TP
 +.B same
 +This option is deprecated. Use write_same instead.
 +.TP
 +.B write_same_ndob
 +Issue WRITE SAME(16) commands as above but with the No Data Output
 +Buffer (NDOB) bit set. No data will be transferred to the device with
 +this bit set. Data written will be a pre-determined pattern such as
 +all zeroes.
 +.TP
 +.B write_stream
 +Issue WRITE STREAM(16) commands. Use the stream_id option to specify
 +the stream identifier.
 +.TP
 +.B verify_bytchk_00
 +Issue VERIFY commands with BYTCHK set to 00. This directs the device to carry
 +out a medium verification with no data comparison.
 +.TP
 +.B verify_bytchk_01
 +Issue VERIFY commands with BYTCHK set to 01. This directs the device to
 +compare the data on the device with the data transferred to the device.
 +.TP
 +.B verify_bytchk_11
 +Issue VERIFY commands with BYTCHK set to 11. This transfers a single block to
 +the device and compares the contents of this block with the data on the device
 +beginning at the specified offset. fio's block size parameter specifies the
 +total amount of data compared with this command. However, only one block
 +(sector) worth of data is transferred to the device. This is similar to the
 +WRITE SAME command except that data is compared instead of written.
  .RE
  .RE
  .TP
 +.BI (sg)stream_id \fR=\fPint
 +Set the stream identifier for WRITE STREAM commands. If this is set to 0 (which is not
 +a valid stream identifier) fio will open a stream and then close it when done. Default
 +is 0.
 +.TP
  .BI (nbd)uri \fR=\fPstr
  Specify the NBD URI of the server to test.
  The string is a standard NBD URI (see
@@@ -2393,10 -2254,10 +2393,10 @@@ the use of cudaMemcpy
  .RE
  .TP
  .BI (dfs)pool
 -Specify the UUID of the DAOS pool to connect to.
 +Specify the label or UUID of the DAOS pool to connect to.
  .TP
  .BI (dfs)cont
 -Specify the UUID of the DAOS DAOS container to open.
 +Specify the label or UUID of the DAOS container to open.
  .TP
  .BI (dfs)chunk_size
  Specificy a different chunk size (in bytes) for the dfs file.
@@@ -2405,35 -2266,6 +2405,35 @@@ Use DAOS container's chunk size by defa
  .BI (dfs)object_class
  Specificy a different object class for the dfs file.
  Use DAOS container's object class by default.
 +.TP
 +.BI (nfs)nfs_url
 +URL in libnfs format, eg nfs://<server|ipv4|ipv6>/path[?arg=val[&arg=val]*]
 +Refer to the libnfs README for more details.
 +.TP
 +.BI (exec)program\fR=\fPstr
 +Specify the program to execute.
 +Note the program will receive a SIGTERM when the job is reaching the time limit.
 +A SIGKILL is sent once the job is over. The delay between the two signals is defined by \fBgrace_time\fR option.
 +.TP
 +.BI (exec)arguments\fR=\fPstr
 +Specify arguments to pass to program.
 +Some special variables can be expanded to pass fio's job details to the program :
 +.RS
 +.RS
 +.TP
 +.B %r
 +replaced by the duration of the job in seconds
 +.TP
 +.BI %n
 +replaced by the name of the job
 +.RE
 +.RE
 +.TP
 +.BI (exec)grace_time\fR=\fPint
 +Defines the time between the SIGTERM and SIGKILL signals. Default is 1 second.
 +.TP
 +.BI (exec)std_redirect\fR=\fbool
 +If set, stdout and stderr streams are redirected to files named from the job name. Default is true.
  .SS "I/O depth"
  .TP
  .BI iodepth \fR=\fPint
@@@ -2538,7 -2370,7 +2538,7 @@@ problem). Note that this option cannot 
  Stall the job for the specified period of time after an I/O has completed before issuing the
  next. May be used to simulate processing being done by an application.
  When the unit is omitted, the value is interpreted in microseconds. See
 -\fBthinktime_blocks\fR and \fBthinktime_spin\fR.
 +\fBthinktime_blocks\fR, \fBthinktime_iotime\fR and \fBthinktime_spin\fR.
  .TP
  .BI thinktime_spin \fR=\fPtime
  Only valid if \fBthinktime\fR is set - pretend to spend CPU time doing
@@@ -2559,17 -2391,6 +2559,17 @@@ Only valid if \fBthinktime\fR is set - 
  The default is `complete', which triggers \fBthinktime\fR when fio completes
  \fBthinktime_blocks\fR blocks. If this is set to `issue', then the trigger happens
  at the issue side.
 +.TP
 +.BI thinktime_iotime \fR=\fPtime
 +Only valid if \fBthinktime\fR is set - control \fBthinktime\fR interval by time.
 +The \fBthinktime\fR stall is repeated after IOs are executed for
 +\fBthinktime_iotime\fR. For example, `\-\-thinktime_iotime=9s \-\-thinktime=1s'
 +repeat 10-second cycle with IOs for 9 seconds and stall for 1 second. When the
 +unit is omitted, \fBthinktime_iotime\fR is interpreted as a number of seconds.
 +If this option is used together with \fBthinktime_blocks\fR, the \fBthinktime\fR
 +stall is repeated after \fBthinktime_iotime\fR or after \fBthinktime_blocks\fR
 +IOs, whichever happens first.
 +
  .TP
  .BI rate \fR=\fPint[,int][,int]
  Cap the bandwidth used by this job. The number is in bytes/sec, the normal
@@@ -2771,13 -2592,13 +2771,13 @@@ Set the I/O priority value of this job
  between 0 and 7, with 0 being the highest. See man
  \fBionice\fR\|(1). Refer to an appropriate manpage for other operating
  systems since meaning of priority may differ. For per-command priority
 -setting, see I/O engine specific `cmdprio_percentage` and `hipri_percentage`
 -options.
 +setting, see the I/O engine specific `cmdprio_percentage` and
 +`cmdprio` options.
  .TP
  .BI prioclass \fR=\fPint
  Set the I/O priority class. See man \fBionice\fR\|(1). For per-command
 -priority setting, see I/O engine specific `cmdprio_percentage` and `hipri_percent`
 -options.
 +priority setting, see the I/O engine specific `cmdprio_percentage` and
 +`cmdprio_class` options.
  .TP
  .BI cpus_allowed \fR=\fPstr
  Controls the same options as \fBcpumask\fR, but accepts a textual
@@@ -3283,17 -3104,6 +3283,17 @@@ logging (see \fBlog_avg_msec\fR) has be
  \fBwrite_bw_log\fR for details about the filename format and \fBLOG
  FILE FORMATS\fR for how data is structured within the file.
  .TP
 +.BI log_entries \fR=\fPint
 +By default, fio will log an entry in the iops, latency, or bw log for
 +every I/O that completes. The initial number of I/O log entries is 1024.
 +When the log entries are all used, new log entries are dynamically
 +allocated.  This dynamic log entry allocation may negatively impact
 +time-related statistics such as I/O tail latencies (e.g. 99.9th percentile
 +completion latency). This option allows specifying a larger initial
 +number of log entries to avoid run-time allocation of new log entries,
 +resulting in more precise time-related I/O statistics.
 +Also see \fBlog_avg_msec\fR as well. Defaults to 1024.
 +.TP
  .BI log_avg_msec \fR=\fPint
  By default, fio will log an entry in the iops, latency, or bw log for every
  I/O that completes. When writing to the disk log, that can quickly grow to a
@@@ -3327,11 -3137,6 +3327,11 @@@ If this is set, the iolog options will 
  entry as well as the other data values. Defaults to 0 meaning that
  offsets are not present in logs. Also see \fBLOG FILE FORMATS\fR section.
  .TP
 +.BI log_prio \fR=\fPbool
 +If this is set, the iolog options will include the I/O priority for the I/O
 +entry as well as the other data values. Defaults to 0 meaning that
 +I/O priorities are not present in logs. Also see \fBLOG FILE FORMATS\fR section.
 +.TP
  .BI log_compression \fR=\fPint
  If this is set, fio will compress the I/O logs as it goes, to keep the
  memory footprint lower. When a log reaches the specified size, that chunk is
@@@ -4265,14 -4070,8 +4265,14 @@@ The entry's `block size' is always in b
  from the start of the file for that particular I/O. The logging of the offset can be
  toggled with \fBlog_offset\fR.
  .P
 -`Command priority` is 0 for normal priority and 1 for high priority. This is controlled
 -by the ioengine specific \fBcmdprio_percentage\fR.
 +If \fBlog_prio\fR is not set, the entry's `Command priority` is 1 for an IO executed
 +with the highest RT priority class (\fBprioclass\fR=1 or \fBcmdprio_class\fR=1) and 0
 +otherwise. This is controlled by the \fBprioclass\fR option and the ioengine specific
 +\fBcmdprio_percentage\fR \fBcmdprio_class\fR options. If \fBlog_prio\fR is set, the
 +entry's `Command priority` is the priority set for the IO, as a 16-bits hexadecimal
 +number with the lowest 13 bits indicating the priority value (\fBprio\fR and
 +\fBcmdprio\fR options) and the highest 3 bits indicating the IO priority class
 +(\fBprioclass\fR and \fBcmdprio_class\fR options).
  .P
  Fio defaults to logging every individual I/O but when windowed logging is set
  through \fBlog_avg_msec\fR, either the average (by default) or the maximum