zbd: Improve random zone index generation logic
[fio.git] / HOWTO
diff --git a/HOWTO b/HOWTO
index 2788670ddb8df32e74569fe723cca58489fe8beb..d4e620de50b5b178af1612af7837f2035574c33c 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.
@@ -1052,6 +1055,11 @@ Target file/device
        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:: zone_reset_threshold=float
 
        A number between zero and one that indicates the ratio of logical
@@ -1168,7 +1176,7 @@ I/O type
 
                **1**
                        Backward-compatible alias for **mixed**.
-               
+
                **2**
                        Alias for **both**.
 
@@ -1277,13 +1285,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
 
@@ -1300,7 +1309,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
 
@@ -1700,6 +1710,36 @@ Buffers and memory
        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
@@ -1818,7 +1858,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.
 
@@ -1852,7 +1893,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.
@@ -2055,6 +2097,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
@@ -2091,6 +2138,15 @@ I/O engine
                        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
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -2232,6 +2288,11 @@ with the caveat that when used on the command line, they must come after the
        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
@@ -2508,6 +2569,33 @@ with the caveat that when used on the command line, they must come after the
        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=boot : [exec]
+
+       If set, stdout and stderr streams are redirected to files named from the job name. Default is true.
+
 I/O depth
 ~~~~~~~~~