engines/libblkio: Add option libblkio_force_enable_completion_eventfd
[fio.git] / HOWTO.rst
index 2c6c6dbe5cc7bcfd586e0439dd1d526233daaf76..1cea16c4be5de8fafc4102f936bdeca4cd412d19 100644 (file)
--- a/HOWTO.rst
+++ b/HOWTO.rst
@@ -1054,7 +1054,7 @@ Target file/device
 
        When running a random write test across an entire drive many more
        zones will be open than in a typical application workload. Hence this
-       command line option that allows to limit the number of open zones. The
+       command line option that allows one to limit the number of open zones. The
        number of open zones is defined as the number of zones to which write
        commands are issued.
 
@@ -1129,7 +1129,14 @@ I/O type
                                Random mixed reads and writes.
                **trimwrite**
                                Sequential trim+write sequences. Blocks will be trimmed first,
-                               then the same blocks will be written to.
+                               then the same blocks will be written to. So if ``io_size=64K``
+                               is specified, Fio will trim a total of 64K bytes and also
+                               write 64K bytes on the same trimmed blocks. This behaviour
+                               will be consistent with ``number_ios`` or other Fio options
+                               limiting the total bytes or number of I/O's.
+               **randtrimwrite**
+                               Like trimwrite, but uses random offsets rather
+                               than sequential writes.
 
        Fio defaults to read if the option is not specified.  For the mixed I/O
        types, the default is to split them 50/50.  For certain types of I/O the
@@ -1439,7 +1446,7 @@ I/O type
        supplied as a value between 0 and 100.
 
        The second, optional float is allowed for **pareto**, **zipf** and **normal** distributions.
-       It allows to set base of distribution in non-default place, giving more control
+       It allows one to set base of distribution in non-default place, giving more control
        over most probable outcome. This value is in range [0-1] which maps linearly to
        range of possible random values.
        Defaults are: random for **pareto** and **zipf**, and 0.5 for **normal**.
@@ -1868,8 +1875,11 @@ I/O size
 .. option:: size=int
 
        The total size of file I/O for each thread of this job. Fio will run until
-       this many bytes has been transferred, unless runtime is limited by other options
-       (such as :option:`runtime`, for instance, or increased/decreased by :option:`io_size`).
+       this many bytes has been transferred, unless runtime is altered by other means
+       such as (1) :option:`runtime`, (2) :option:`io_size` (3) :option:`number_ios`,
+       (4) gaps/holes while doing I/O's such as ``rw=read:16K``, or (5) sequential
+       I/O reaching end of the file which is possible when :option:`percentage_random`
+       is less than 100.
        Fio will divide this size between the available files determined by options
        such as :option:`nrfiles`, :option:`filename`, unless :option:`filesize` is
        specified by the job. If the result of division happens to be 0, the size is
@@ -2185,6 +2195,15 @@ I/O engine
                        the SPDK NVMe driver, or your own custom NVMe driver. The xnvme engine includes
                        engine specific options. (See https://xnvme.io).
 
+               **libblkio**
+                       Use the libblkio library
+                       (https://gitlab.com/libblkio/libblkio). The specific
+                       *driver* to use must be set using
+                       :option:`libblkio_driver`. If
+                       :option:`mem`/:option:`iomem` is not specified, memory
+                       allocation is delegated to libblkio (and so is
+                       guaranteed to work with the selected *driver*).
+
 I/O engine specific parameters
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -2267,7 +2286,7 @@ with the caveat that when used on the command line, they must come after the
        map and release for each IO. This is more efficient, and reduces the
        IO latency as well.
 
-.. option:: nonvectored : [io_uring] [io_uring_cmd]
+.. option:: nonvectored=int : [io_uring] [io_uring_cmd]
 
        With this option, fio will use non-vectored read/write commands, where
        address must contain the address directly. Default is -1.
@@ -2292,9 +2311,11 @@ with the caveat that when used on the command line, they must come after the
        kernel of available items in the SQ ring. If this option is set, the
        act of submitting IO will be done by a polling thread in the kernel.
        This frees up cycles for fio, at the cost of using more CPU in the
-       system.
+       system. As submission is just the time it takes to fill in the sqe
+       entries and any syscall required to wake up the idle kernel thread,
+       fio will not report submission latencies.
 
-.. option:: sqthread_poll_cpu : [io_uring] [io_uring_cmd]
+.. option:: sqthread_poll_cpu=int : [io_uring] [io_uring_cmd]
 
        When :option:`sqthread_poll` is set, this option provides a way to
        define which CPU should be used for the polling thread.
@@ -2314,6 +2335,12 @@ with the caveat that when used on the command line, they must come after the
         by the application. The benefits are more efficient IO for high IOPS
         scenarios, and lower latencies for low queue depth IO.
 
+   [libblkio]
+
+       Use poll queues. This is incompatible with
+       :option:`libblkio_wait_mode=eventfd <libblkio_wait_mode>` and
+       :option:`libblkio_force_enable_completion_eventfd`.
+
    [pvsync2]
 
        Set RWF_HIPRI on I/O, indicating to the kernel that it's of higher priority
@@ -2344,7 +2371,7 @@ with the caveat that when used on the command line, they must come after the
        When hipri is set this determines the probability of a pvsync2 I/O being high
        priority. The default is 100%.
 
-.. option:: nowait : [pvsync2] [libaio] [io_uring]
+.. option:: nowait=bool : [pvsync2] [libaio] [io_uring] [io_uring_cmd]
 
        By default if a request cannot be executed immediately (e.g. resource starvation,
        waiting on locks) it is queued and the initiating process will be blocked until
@@ -2835,6 +2862,58 @@ with the caveat that when used on the command line, they must come after the
 
        If this option is set. xnvme will use vectored read/write commands.
 
+.. option:: libblkio_driver=str : [libblkio]
+
+       The libblkio *driver* to use. Different drivers access devices through
+       different underlying interfaces. Available drivers depend on the
+       libblkio version in use and are listed at
+       https://libblkio.gitlab.io/libblkio/blkio.html#drivers
+
+.. option:: libblkio_pre_connect_props=str : [libblkio]
+
+       A colon-separated list of libblkio properties to be set after creating
+       but before connecting the libblkio instance. Each property must have the
+       format ``<name>=<value>``. Colons can be escaped as ``\:``. These are
+       set after the engine sets any other properties, so those can be
+       overriden. Available properties depend on the libblkio version in use
+       and are listed at
+       https://libblkio.gitlab.io/libblkio/blkio.html#properties
+
+.. option:: libblkio_pre_start_props=str : [libblkio]
+
+       A colon-separated list of libblkio properties to be set after connecting
+       but before starting the libblkio instance. Each property must have the
+       format ``<name>=<value>``. Colons can be escaped as ``\:``. These are
+       set after the engine sets any other properties, so those can be
+       overriden. Available properties depend on the libblkio version in use
+       and are listed at
+       https://libblkio.gitlab.io/libblkio/blkio.html#properties
+
+.. option:: libblkio_vectored : [libblkio]
+
+       Submit vectored read and write requests.
+
+.. option:: libblkio_write_zeroes_on_trim : [libblkio]
+
+       Submit trims as "write zeroes" requests instead of discard requests.
+
+.. option:: libblkio_wait_mode=str : [libblkio]
+
+       How to wait for completions:
+
+       **block** (default)
+               Use a blocking call to ``blkioq_do_io()``.
+       **eventfd**
+               Use a blocking call to ``read()`` on the completion eventfd.
+       **loop**
+               Use a busy loop with a non-blocking call to ``blkioq_do_io()``.
+
+.. option:: libblkio_force_enable_completion_eventfd : [libblkio]
+
+       Enable the queue's completion eventfd even when unused. This may impact
+       performance. The default is to enable it only if
+       :option:`libblkio_wait_mode=eventfd <libblkio_wait_mode>`.
+
 I/O depth
 ~~~~~~~~~
 
@@ -3322,13 +3401,13 @@ Threads, processes and job synchronization
 
 .. option:: flow=int
 
-       Weight in token-based flow control. If this value is used, then there is a
-       'flow counter' which is used to regulate the proportion of activity between
-       two or more jobs. Fio attempts to keep this flow counter near zero. The
-       ``flow`` parameter stands for how much should be added or subtracted to the
-       flow counter on each iteration of the main I/O loop. That is, if one job has
-       ``flow=8`` and another job has ``flow=-1``, then there will be a roughly 1:8
-       ratio in how much one runs vs the other.
+        Weight in token-based flow control. If this value is used, then fio
+        regulates the activity between two or more jobs sharing the same
+        flow_id. Fio attempts to keep each job activity proportional to other
+        jobs' activities in the same flow_id group, with respect to requested
+        weight per job. That is, if one job has `flow=3', another job has
+        `flow=2' and another with `flow=1`, then there will be a roughly 3:2:1
+        ratio in how much one runs vs the others.
 
 .. option:: flow_sleep=int
 
@@ -3349,10 +3428,10 @@ Threads, processes and job synchronization
        make fio terminate all jobs in the same group, as soon as one job of that
        group finishes.
 
-.. option:: exit_what
+.. option:: exit_what=str
 
        By default, fio will continue running all other jobs when one job finishes.
-       Sometimes this is not the desired action. Setting ``exit_all`` will
+       Sometimes this is not the desired action. Setting ``exitall`` will
        instead make fio terminate all jobs in the same group. The option
         ``exit_what`` allows to control which jobs get terminated when ``exitall`` is
         enabled. The default is ``group`` and does not change the behaviour of
@@ -3603,7 +3682,10 @@ Verification
 
 .. option:: experimental_verify=bool
 
-       Enable experimental verification.
+        Enable experimental verification. Standard verify records I/O metadata
+        for later use during the verification phase. Experimental verify
+        instead resets the file after the write phase and then replays I/Os for
+        the verification phase.
 
 Steady state
 ~~~~~~~~~~~~
@@ -4494,7 +4576,7 @@ Trace file format v2
 ~~~~~~~~~~~~~~~~~~~~
 
 The second version of the trace file format was added in fio version 1.17.  It
-allows to access more then one file per trace and has a bigger set of possible
+allows one to access more than one file per trace and has a bigger set of possible
 file actions.
 
 The first line of the trace file has to be::