Merge branch 'evelu-fiog' of https://github.com/ErwanAliasr1/fio
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index 3ec86aff134732ef941d78f6ba69ae2154a29f38..86fb296445f006e2f3416abe559bd5f0dc57ce19 100644 (file)
--- a/HOWTO
+++ b/HOWTO
@@ -544,6 +544,9 @@ Parameter types
                * *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.
@@ -809,6 +812,8 @@ Target file/device
 
                **$jobname**
                                The name of the worker thread or process.
+               **$clientuid**
+                               IP of the fio process when using client/server mode.
                **$jobnum**
                                The incremental number of the worker thread or process.
                **$filenum**
@@ -1144,11 +1149,31 @@ I/O type
        behaves in a similar fashion, except it sends the same offset 8 number of
        times before generating a new offset.
 
-.. option:: unified_rw_reporting=bool
+.. option:: unified_rw_reporting=str
 
        Fio normally reports statistics on a per data direction basis, meaning that
-       reads, writes, and trims are accounted and reported separately. If this
-       option is set fio sums the results and report them as "mixed" instead.
+       reads, writes, and trims are accounted and reported separately. This option
+       determines whether fio reports the results normally, summed together, or as
+       both options.
+       Accepted values are:
+
+               **none**
+                       Normal statistics reporting.
+
+               **mixed**
+                       Statistics are summed per data direction and reported together.
+
+               **both**
+                       Statistics are reported normally, followed by the mixed statistics.
+
+               **0**
+                       Backward-compatible alias for **none**.
+
+               **1**
+                       Backward-compatible alias for **mixed**.
+
+               **2**
+                       Alias for **both**.
 
 .. option:: randrepeat=bool
 
@@ -1255,13 +1280,14 @@ I/O type
 .. 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
 
@@ -1278,7 +1304,8 @@ I/O type
        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
 
@@ -1796,7 +1823,8 @@ I/O size
        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.
 
@@ -1830,7 +1858,8 @@ I/O size
 .. 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.
@@ -2033,6 +2062,11 @@ I/O engine
                        and 'nrfiles', so that files will be created.
                        This engine is to measure file lookup and meta data access.
 
+               **filedelete**
+                       Simply delete the files by unlink() and do no I/O to them. You need to set 'filesize'
+                       and 'nrfiles', so that the files will be created.
+                       This engine is to measure file delete.
+
                **libpmem**
                        Read and write using mmap I/O to a file on a filesystem
                        mounted with DAX on a persistent memory device through the PMDK
@@ -2065,6 +2099,15 @@ I/O engine
                        unless :option:`verify` is set or :option:`cuda_io` is `posix`.
                        :option:`iomem` must not be `cudamalloc`. This ioengine defines
                        engine specific options.
+               **dfs**
+                       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.
 
 I/O engine specific parameters
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -2187,7 +2230,7 @@ with the caveat that when used on the command line, they must come after the
                this will be the starting port number since fio will use a range of
                ports.
 
-   [rdma]
+   [rdma], [librpma_*]
 
                The port to use for RDMA-CM communication. This should be the same value
                on the client and the server side.
@@ -2198,6 +2241,20 @@ with the caveat that when used on the command line, they must come after the
        is a TCP listener or UDP reader, the hostname is not used and must be omitted
        unless it is a valid UDP multicast address.
 
+.. option:: serverip=str : [librpma_*]
+
+       The IP address to be used for RDMA-CM based I/O.
+
+.. option:: direct_write_to_pmem=bool : [librpma_*]
+
+       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
@@ -2294,6 +2351,12 @@ with the caveat that when used on the command line, they must come after the
         Poll store instead of waiting for completion. Usually this provides better
         throughput at cost of higher(up to 100%) CPU utilization.
 
+.. option:: touch_objects=bool : [rados]
+
+        During initialization, touch (create if do not exist) all objects (files).
+        Touching all objects affects ceph caches and likely impacts test results.
+        Enabled by default.
+
 .. option:: skip_bad=bool : [mtd]
 
        Skip operations against known bad blocks.
@@ -2450,6 +2513,29 @@ with the caveat that when used on the command line, they must come after the
                GPU to RAM before a write and copied from RAM to GPU after a
                read. :option:`verify` does not affect use of cudaMemcpy.
 
+.. option:: pool=str : [dfs]
+
+       Specify the UUID of the DAOS pool to connect to.
+
+.. option:: cont=str : [dfs]
+
+       Specify the UUID of the DAOS container to open.
+
+.. option:: chunk_size=int : [dfs]
+
+       Specificy a different chunk size (in bytes) for the dfs file.
+       Use DAOS container's chunk size by default.
+
+.. option:: object_class=str : [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.
+
 I/O depth
 ~~~~~~~~~
 
@@ -2574,6 +2660,13 @@ I/O rate
        before we have to complete it and do our :option:`thinktime`. In other words, this
        setting effectively caps the queue depth if the latter is larger.
 
+.. option:: thinktime_blocks_type=str
+
+       Only valid if :option:`thinktime` is set - control how :option:`thinktime_blocks`
+       triggers. The default is `complete`, which triggers thinktime when fio completes
+       :option:`thinktime_blocks` blocks. If this is set to `issue`, then the trigger happens
+       at the issue side.
+
 .. option:: rate=int[,int][,int]
 
        Cap the bandwidth used by this job. The number is in bytes/sec, the normal
@@ -2654,11 +2747,12 @@ I/O latency
        true, fio will continue running and try to meet :option:`latency_target`
        by adjusting queue depth.
 
-.. option:: max_latency=time
+.. option:: max_latency=time[,time][,time]
 
        If set, fio will exit the job with an ETIMEDOUT error if it exceeds this
        maximum latency. When the unit is omitted, the value is interpreted in
-       microseconds.
+       microseconds. Comma-separated values may be specified for reads, writes,
+       and trims as described in :option:`blocksize`.
 
 .. option:: rate_cycle=int