fio.git
3 months agot/nvmept_trim.py: test multi-range trim
Vincent Fu [Tue, 12 Dec 2023 18:42:20 +0000 (18:42 +0000)]
t/nvmept_trim.py: test multi-range trim

This test script contains some regression tests for existing
functionality and also some tests for the new feature.

The multi-range trim tests basically count the number of requests
submitted and make sure that they are consistent with the block sizes
and number of ranges per request.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoio_u: move number_trim to reclaim 8 bytes in struct io_u
Jens Axboe [Thu, 15 Feb 2024 15:39:49 +0000 (08:39 -0700)]
io_u: move number_trim to reclaim 8 bytes in struct io_u

Move it under clat_prio_index, which already has a 6 byte gap. This
saves 8 bytes total in struct io_u, which is always nice.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agoengines/io_uring: add multi range dsm support
Ankit Kumar [Thu, 15 Feb 2024 15:18:12 +0000 (20:48 +0530)]
engines/io_uring: add multi range dsm support

Update the io_uring_cmd ioengine to support multiple ranges for trim.
This includes allocating buffer for multiple ranges, and changes to
the nvme trim helper functions.
Add an example on how to use multi range trim.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20240215151812.138370-4-ankit.kumar@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agoengines/nvme: pass offset and len instead of io_u
Ankit Kumar [Thu, 15 Feb 2024 15:18:11 +0000 (20:48 +0530)]
engines/nvme: pass offset and len instead of io_u

Remove io_u dependency while calculating start and number of lba.
This is a prep patch for multi-range trim support where an io_u entry
will contain multiple start offset and buffer len.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20240215151812.138370-3-ankit.kumar@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agotrim: add support for multiple ranges
Ankit Kumar [Thu, 15 Feb 2024 15:18:10 +0000 (20:48 +0530)]
trim: add support for multiple ranges

NVMe specification allow multiple ranges for the dataset management
commands. Currently the block ioctl only allows a single range for
trim, however multiple ranges can be specified using nvme character
device.

Add an option num_range to send multiple range per trim request, which
only works if the data direction is solely trim i.e. trim or randtrim.
Add FIO_MULTI_RANGE_TRIM as the ioengine flag, to restrict the usage of
this new option.
For multi range trim request this modifies the way IO buffers are used.
The buffer length will depend on number of trim ranges and the actual
buffer will contains start and length of each range entry.

This increases fio server version (FIO_SERVER_VER) to 103.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20240215151812.138370-2-ankit.kumar@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agot/io_uring: pre-calculate per-file depth
Jens Axboe [Thu, 15 Feb 2024 15:17:31 +0000 (08:17 -0700)]
t/io_uring: pre-calculate per-file depth

Rather than do this math every time, just calculate it at setup time
and use that.

Note that there's something wonky with how the depths are distributed,
it's quite common to see the first file eat the majority of the queue
depth, causing multiple file runs to be both slower than they should be,
and with very unevenly distributed depths. To be investigated.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agot/io_uring: account and ignore IO errors
Jens Axboe [Thu, 15 Feb 2024 15:16:55 +0000 (08:16 -0700)]
t/io_uring: account and ignore IO errors

It's still useful to test on devices that may trigger a single or
few IO errors, just log them and ignore them in the IOPS calculations.
And for stats calculations.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agotest: add the test for loops option and read-verify workloads
Shin'ichiro Kawasaki [Wed, 14 Feb 2024 12:20:08 +0000 (21:20 +0900)]
test: add the test for loops option and read-verify workloads

Add t/jobs/t0029.fio to test that the loops option works together with
read-verify workloads.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240214122008.4123286-3-shinichiro.kawasaki@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agoverify: fix loops option behavior of read-verify workloads
Shin'ichiro Kawasaki [Wed, 14 Feb 2024 12:20:07 +0000 (21:20 +0900)]
verify: fix loops option behavior of read-verify workloads

The commit 191d6634e8a6 ("verify: fix bytes_done accounting of
experimental verify") introduced td->bytes_verified to separate the
verified bytes from the read bytes in td->bytes_done[]. This fixed the
issue of experimental verify feature. However, it caused another issue.
When the verify workload does only read and does not do write, the read
bytes in td->bytes_done[] is no longer updated and always zero. This
zero value is returned from do_io() to thread_main() in the bytes_done
array. If the read bytes is zero, thread_main() marks the job to
terminate and it makes the loops option ignored. For example, the job
below should do 8k read, but it does only 4k read.

[global]
filename=/tmp/fio.test
size=4k
verify=md5

[write]
rw=write
do_verify=0

[read]
stonewall=1
rw=read
loops=2
do_verify=1

To make the loops option work together with the read-verify workloads,
modify io_u_update_bytes_done(). After updating td->bytes_verified,
check if the workload does not write. If so, do not return from
io_u_update_bytes_done() and update td->bytes_done[] for DDIR_READ in
the following code.

Fixes: 191d6634e8a6 ("verify: fix bytes_done accounting of experimental verify")
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240214122008.4123286-2-shinichiro.kawasaki@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agoexamples: add PI example with xnvme ioengine
Ankit Kumar [Tue, 13 Feb 2024 15:33:15 +0000 (21:03 +0530)]
examples: add PI example with xnvme ioengine

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240213153315.134202-6-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoengines/xnvme: add checks for verify, block size and metadata size
Ankit Kumar [Tue, 13 Feb 2024 15:33:14 +0000 (21:03 +0530)]
engines/xnvme: add checks for verify, block size and metadata size

Add checks to ensure that the correct block size and metadata size is
passed by the user.
Disable normal verify checks when end to end data protection checks
are enabled because of CRC conflict.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240213153315.134202-5-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoengines:xnvme: add support for end to end data protection
Ankit Kumar [Tue, 13 Feb 2024 15:33:13 +0000 (21:03 +0530)]
engines:xnvme: add support for end to end data protection

This patch enables support for protection information to xnvme
ioengine.

This adds 4 new ioengine specific options
 * pi_act - Protection information action. Default: 1
 * pi_chk - Can be set to GUARD, APPTAG or REFTAG
 * apptag - Sets apptag field of command dword 15
 * apptag_mask - Sets apptag_mask field of command dword 15

For the sake of consistency these options are the same as the ones used
by io_uring_cmd ioengine and SPDK's external ioengine.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240213153315.134202-4-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoengines/xnvme: add support for metadata
Ankit Kumar [Tue, 13 Feb 2024 15:33:12 +0000 (21:03 +0530)]
engines/xnvme: add support for metadata

This enables support for separate metadata buffers with xnvme ioengine.
This is done by providing xnvme specific option md_per_io_size, which
for the sake of consistency is the same option used by io_uring_cmd
engine and SPDK's external ioengine.

Bump up the required xnvme support to v0.7.4

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240213153315.134202-3-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoengines/xnvme: allocate iovecs only if vectored I/O is enabled
Ankit Kumar [Tue, 13 Feb 2024 15:33:11 +0000 (21:03 +0530)]
engines/xnvme: allocate iovecs only if vectored I/O is enabled

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Link: https://lore.kernel.org/r/20240213153315.134202-2-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agodocs: explain duplicate logging timestamps
Vincent Fu [Mon, 12 Feb 2024 17:13:01 +0000 (12:13 -0500)]
docs: explain duplicate logging timestamps

When a fio job ends, it cleans up by flushing any accumulated latency log
data for jobs with log_avg_msec enabled. This means that the final logging
interval may be different from what was specified by log_avg_msec. In
some cases there may even be duplicate timestamps. Add an explanation
for this phenomenon to the documentation.

During job cleanup it's possible to simply suppress the final log entry
if log_avg_msec has not passed since the previous log entry was recorded
but this throws away data that some users may depend on. For instance, a
55s job with log_avg_msec=10000 would have no long entry for the final
5s if we suppressed the final log entry.

Users concerned about final log entries with duplicate timestamps should
just ignore the second entry since it is likely based on only a handful
of I/Os.

Duplicate log entry example:

$ sudo ./fio --name=test --iodepth=2 --ioengine=libaio --time_based --runtime=5s --log_avg_msec=1000 --write_lat_log=test --filename=/dev/vda --direct=1
test: (g=0): rw=read, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=2
fio-3.36-61-g9cfa-dirty
Starting 1 process
Jobs: 1 (f=1): [R(1)][100.0%][r=250MiB/s][r=64.0k IOPS][eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=1490: Mon Feb 12 12:19:13 2024
  read: IOPS=63.6k, BW=248MiB/s (260MB/s)(1242MiB/5001msec)
    slat (nsec): min=691, max=37070, avg=1272.54, stdev=674.26
    clat (usec): min=4, max=1731, avg=29.83, stdev= 7.03
     lat (usec): min=15, max=1734, avg=31.10, stdev= 7.19
    clat percentiles (usec):
     |  1.00th=[   23],  5.00th=[   25], 10.00th=[   26], 20.00th=[   27],
     | 30.00th=[   28], 40.00th=[   29], 50.00th=[   30], 60.00th=[   31],
     | 70.00th=[   32], 80.00th=[   33], 90.00th=[   35], 95.00th=[   37],
     | 99.00th=[   41], 99.50th=[   43], 99.90th=[   58], 99.95th=[   74],
     | 99.99th=[  104]
   bw (  KiB/s): min=244464, max=258112, per=100.00%, avg=254410.67, stdev=4788.90, samples=9
   iops        : min=61116, max=64528, avg=63602.67, stdev=1197.23, samples=9
  lat (usec)   : 10=0.01%, 20=0.06%, 50=99.76%, 100=0.16%, 250=0.01%
  lat (usec)   : 500=0.01%, 750=0.01%, 1000=0.01%
  lat (msec)   : 2=0.01%
  cpu          : usr=11.46%, sys=18.20%, ctx=159414, majf=0, minf=49
  IO depths    : 1=0.1%, 2=100.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=317842,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=2

Run status group 0 (all jobs):
   READ: bw=248MiB/s (260MB/s), 248MiB/s-248MiB/s (260MB/s-260MB/s), io=1242MiB (1302MB), run=5001-5001msec

Disk stats (read/write):
  vda: ios=311248/0, sectors=2489984/0, merge=0/0, ticks=7615/0, in_queue=7615, util=98.10%
$ cat test_lat.1.log
1000, 31907, 0, 0, 0
2000, 30705, 0, 0, 0
3000, 30738, 0, 0, 0
4000, 31196, 0, 0, 0
5000, 30997, 0, 0, 0
5000, 31559, 0, 0, 0

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agologging: expand runstates eligible for logging
Vincent Fu [Wed, 24 Jan 2024 17:41:16 +0000 (17:41 +0000)]
logging: expand runstates eligible for logging

Currently recording log entries for IOPS and BW logging with
log_avg_msec enabled only happens when a thread has completed its ramp
time and is in the TD_RUNNING or TD_VERIFYING run states.

It may happen that a final bandwidth or IOPS log entry is missed
when a job transitions from TD_RUNNING/TD_VERIFYING to TD_FINISHING
before the helper thread has a chance to calculate a final log entry.

This patch expands the run states where logging is permitted, allowing
log entries to be recorded for jobs in the TD_FINISHING or TD_EXITED
states. Each job cleans itself up and typically transitions quickly from
TD_FINISHING to TD_EXITED. The main fio backend thread carries out the
transition from TD_EXITED to TD_REAPED.

The window during which a job is in the TD_FINISHING and TD_EXITED
states is short, so measurements should still be reasonablly accurate.

I tested these patches with the following job:

fio --name=test --ioengine=null --time_based --runtime=3s --filesize=1T \
  --write_iops_log=test --write_bw_log=test --log_avg_msec=1000 \
  && cat test_iops.1.log && cat test_bw.1.log

Before this patch series 10/10 trials had missing log entries. With only
the helper_thread change in the preceding patch 3/10 trials had missing
log entries. With this entire patch series, only 1/10 trials had missing
log entries.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agohelper_thread: do not send A_EXIT message when exit is called
Vincent Fu [Tue, 23 Jan 2024 21:56:31 +0000 (21:56 +0000)]
helper_thread: do not send A_EXIT message when exit is called

When helper_thread_exit() is called, it uses two means to tell
helper_thread_main() to stop. It sends an A_EXIT message via the pipes
used for inter-process communication and it also sets the exit flag in
struct helper_data.

When helper_thread_main() receives the A_EXIT message, it immediately
breaks out of its main loop without carrying out any further activity
such as recording final log entries. This leads to missing final log
entries when log_avg_msec is enabled.

Removing the A_EXIT message helps resolve this issue in some cases as
with its removal the actions in the body of the loop have an opportunity
to be taken before checking the flag in struct helper_data.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agologging: record timestamp for each thread
Vincent Fu [Wed, 24 Jan 2024 17:38:18 +0000 (17:38 +0000)]
logging: record timestamp for each thread

Instead of recording a timestamp once before iterating through all the
threads to check if we should add a new bw or iops log measurement,
record a new timestamp before checking each thread.

We were already querying the time anyway for the mtime_since_now() call.
We might as well have it available locally for more accurate logging.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoMerge branch 'vsock' of https://github.com/MPinna/fio
Jens Axboe [Mon, 12 Feb 2024 18:56:33 +0000 (11:56 -0700)]
Merge branch 'vsock' of https://github.com/MPinna/fio

* 'vsock' of https://github.com/MPinna/fio:
  Add support for VSOCK to engine/net.c

3 months agoAdd support for VSOCK to engine/net.c
Marco Pinna [Tue, 6 Feb 2024 09:52:54 +0000 (10:52 +0100)]
Add support for VSOCK to engine/net.c

* configure: add option to enable/disable vsock support

* engines/net.c: add vsock support

The  VSOCK  address family facilitates communication between virtual
machines and the host they are running on.

The addressing is formed by 2 integers: <CID, port>
- CID: Context ID, it is the ID assigned to the VM
  0, 1, 2 CIDs are reserved:
  0 - hypervisor CID (rarely used)
  1 - local communication (loopback)
  2 - host CID (the guest can always reach the host using CID=2)

- port: port number on 32bit to reach a specific process

* examples: add 3 simple job files for vsock (one sender, one receiver
  and one that uses vsock loopback interface similar to
  examples/netio.fio)

* fio.1: add vsock to supported protocols together with the required
  parameters

* HOWTO.rst: add vsock to supported protocols together with the required
  parameters

Signed-off-by: Marco Pinna <marco.pinn95@gmail.com>
3 months agoverify: fix potential overflow before widen
Vincent Fu [Thu, 8 Feb 2024 22:37:01 +0000 (17:37 -0500)]
verify: fix potential overflow before widen

vc->hdr_num and len are both 32 bits wide and their product will be a
32-bit result. So any overflow will be lost. Cast hdr_num to unsigned
long long so that nothing is lost if the product overflows a 32-bit
integer.

This fixes the following issue reported by Coverity.

** CID 486274:  Integer handling issues  (OVERFLOW_BEFORE_WIDEN)
/verify.c: 347 in log_verify_failure()

________________________________________________________________________________________________________
*** CID 486274:  Integer handling issues  (OVERFLOW_BEFORE_WIDEN)
/verify.c: 347 in log_verify_failure()
341             uint32_t len;
342             struct thread_data *td = vc->td;
343
344             offset = vc->io_u->verify_offset;
345             if (td->o.verify != VERIFY_PATTERN_NO_HDR) {
346                     len = hdr->len;
>>>     CID 486274:  Integer handling issues  (OVERFLOW_BEFORE_WIDEN)
>>>     Potentially overflowing expression "vc->hdr_num * len" with type "unsigned int" (32 bits, unsigned) is evaluated using 32-bit arithmetic, and then used in a context that expects an expression of type "unsigned long long" (64 bits, unsigned).
347                     offset += vc->hdr_num * len;
348             } else {
349                     len = vc->io_u->buflen;
350             }
351
352             log_err("%.8s: verify failed at file %s offset %llu, length %u"

Fixes: 9c8b90ae ("fix wrong offset for VERIFY_PATTERN_NO_HDR")
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoMerge branch 'fix-offset' of https://github.com/onkrasnov/fio
Vincent Fu [Thu, 8 Feb 2024 19:47:59 +0000 (14:47 -0500)]
Merge branch 'fix-offset' of https://github.com/onkrasnov/fio

* 'fix-offset' of https://github.com/onkrasnov/fio:
  fix wrong offset for VERIFY_PATTERN_NO_HDR

https://github.com/axboe/fio/pull/1709

3 months agot/zbd: add -s option to test-zbd-support script
Dmitry Fomichev [Tue, 6 Feb 2024 10:57:55 +0000 (19:57 +0900)]
t/zbd: add -s option to test-zbd-support script

The total number of ZBD tests in test-zbd-support script has grown
considerably over the years and zoned drive capacity has significantly
increased as well. Today, the test run duration may reach one hour for
large drives. If a terminal session failure happens during a run, it
is more efficient to restart the tests from the point where the last
run stopped rather than from the beginning.

Add -s option to the script command line to specify the starting
test number.

Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240206105755.214891-6-dmitry.fomichev@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agot/zbd: check device for unrestricted read support
Dmitry Fomichev [Tue, 6 Feb 2024 10:57:54 +0000 (19:57 +0900)]
t/zbd: check device for unrestricted read support

ZBD unit tests in t/zbd/test-zbd-support currently assume that the
drive that is being tested supports unrestricted reads, i.e. reads
that (partially or entirely) occur above the write pointer. This is
always the case with ZBD core code because Linux kernel rejects zoned
devices with restricted reads. However, libzbc ioengine does support
such devices.

The restricted/unrestricted reads feature is controlled by URSWRZ
device bit ("Unrestricted Reads of Sequential Write Required Zones")
which, depending on the device design, can be hard-coded to be reported
as 1 or 0 or it can be made configurable via MODE SET or SET FEATURES
commands. The unit tests need to behave correctly with any URSWRZ bit
value reported by the device if libzbc ioengine is used for testing.

Test #4 in the test script currently expects the device to have
unrestricted SWR zone reads. This test is guaranteed to fail if
the script is run against a drive that reports URSWRZ=0 with libzbc
ioengine.

Check if the drive has unrestricted read support disabled and process
the outcome of test #4 accordingly.

Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240206105755.214891-5-dmitry.fomichev@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agozbd: use a helper to calculate zone index
Dmitry Fomichev [Tue, 6 Feb 2024 10:57:53 +0000 (19:57 +0900)]
zbd: use a helper to calculate zone index

zone_lock() function contains the debug code to verify that the zone
being locked belongs to the job's working zone range. Clean up this
code by using a previously defined helper for calculating the zone
index to check.

Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240206105755.214891-4-dmitry.fomichev@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agooslib: log BLKREPORTZONE error code
Dmitry Fomichev [Tue, 6 Feb 2024 10:57:52 +0000 (19:57 +0900)]
oslib: log BLKREPORTZONE error code

BLKREPORTZONE may fail because of a variety of reasons.
Log both the return code and errno when this ioctl fails.

Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240206105755.214891-3-dmitry.fomichev@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agozbd: avoid assertions during sequential read I/O
Dmitry Fomichev [Tue, 6 Feb 2024 10:57:51 +0000 (19:57 +0900)]
zbd: avoid assertions during sequential read I/O

The following assert has been observed to be triggered
if the I/O offset + I/O size exceeds the device capacity in a
sequential read workload -

“zbd.c:110: zone_lock: Assertion `f->min_zone <= nz && nz < f->max_zone' failed.”

The code in zbd_zone_align_file_sizes() rounds down the I/O size to
avoid these situations, but it is bypassed if
td->o.td_ddir == TD_DDIR_READ.

Avoid this issue by modifying zbd_zone_align_file_sizes() to round down
the I/O size for read I/Os and leave the I/O offset untouched.

Fixes: bfbdd35b3e8f ("Add support for zoned block devices")
Signed-off-by: Dmitry Fomichev <dmitry.fomichev@wdc.com>
Reviewed-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Tested-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20240206105755.214891-2-dmitry.fomichev@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agofix wrong offset for VERIFY_PATTERN_NO_HDR
Oleg Krasnov [Sun, 28 Jan 2024 18:24:02 +0000 (18:24 +0000)]
fix wrong offset for VERIFY_PATTERN_NO_HDR

3 months agoexamples: cmdprio_bssplit: add CDL example
Niklas Cassel [Fri, 26 Jan 2024 18:13:53 +0000 (19:13 +0100)]
examples: cmdprio_bssplit: add CDL example

Add an example of how to use cmdprio_bssplit with Command Duration Limits.

Signed-off-by: Niklas Cassel <cassel@kernel.org>
Link: https://lore.kernel.org/r/20240126181353.4151771-2-cassel@kernel.org
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoexamples: cmdprio_bssplit: s,IO,I/O,
Niklas Cassel [Fri, 26 Jan 2024 18:13:52 +0000 (19:13 +0100)]
examples: cmdprio_bssplit: s,IO,I/O,

Replace IO with I/O.

Signed-off-by: Niklas Cassel <cassel@kernel.org>
Link: https://lore.kernel.org/r/20240126181353.4151771-1-cassel@kernel.org
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoMerge branch 'coverity-fix' of https://github.com/ankit-sam/fio
Jens Axboe [Thu, 25 Jan 2024 17:20:10 +0000 (10:20 -0700)]
Merge branch 'coverity-fix' of https://github.com/ankit-sam/fio

* 'coverity-fix' of https://github.com/ankit-sam/fio:
  iolog: fix reported defect from coverity scan

3 months agoiolog: fix reported defect from coverity scan
Ankit Kumar [Thu, 25 Jan 2024 23:33:28 +0000 (05:03 +0530)]
iolog: fix reported defect from coverity scan

Fix the two Null pointer dereferences issue reported by Coverity scan

Null pointer dereferences  (FORWARD_NULL)
Dereferencing null pointer "l->td"

Null pointer dereferences  (REVERSE_INULL)
Null-checking "p->td" suggests that it may be null, but it has already
been dereferenced on all paths leading to the check.

For aggregate read, write and trim bandwidth log, the setup_log function
gets called with NULL pointer reference for thread data. Thus before
dereferencing further we should check "l->td".

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
3 months agot/io_uring: remove dma map option
Jens Axboe [Thu, 25 Jan 2024 15:09:14 +0000 (08:09 -0700)]
t/io_uring: remove dma map option

This didn't make it into the kernel just yet, and if/when it does, it'll
likely look a bit different than the prototype. Since it's dead code for
now, just prune it and we can always reintroduce it when kernel support
is there.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agodocs: change listed type for log_window_value to str
Vincent Fu [Thu, 25 Jan 2024 13:56:35 +0000 (08:56 -0500)]
docs: change listed type for log_window_value to str

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agodocs: update fio man page for log_window_value
Ankit Kumar [Thu, 25 Jan 2024 11:01:24 +0000 (16:31 +0530)]
docs: update fio man page for log_window_value

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20240125110124.55137-3-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agostat: log out both average and max over the window
Ankit Kumar [Thu, 25 Jan 2024 11:01:23 +0000 (16:31 +0530)]
stat: log out both average and max over the window

Add option log_window_value alias of log_max_value which reports
average, max or both the values. Retain backward compatibility by
allowing =0 and =1 values to specify avg and max values respectively.

There is no change to existing log formats while reporting only average
or max values.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20240125110124.55137-2-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoci: resolve GitHub Actions Node.js warnings
Vincent Fu [Wed, 24 Jan 2024 18:58:11 +0000 (18:58 +0000)]
ci: resolve GitHub Actions Node.js warnings

Switch from actions/checkout@v3 to v4 and from
actions/upload-artifacts@v3 to v4.

This resolves the below warnings from GitHub Actions:

Node.js 16 actions are deprecated. Please update the following actions
to use Node.js 20: actions/checkout@v3. For more information see:
https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.

Node.js 16 actions are deprecated. Please update the following actions
to use Node.js 20: actions/upload-artifact@v3. For more information see:
https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoconfigure: Don't use cross_prefix when invoking pkg-config
Chris Packham [Tue, 23 Jan 2024 20:26:36 +0000 (09:26 +1300)]
configure: Don't use cross_prefix when invoking pkg-config

pkg-config doesn't need to have a cross prefixed version. It can be
pointed at alternate sysroots with environment variables like
PKG_CONFIG_SYSROOT_DIR. The configure script was already inconsistent
with using `pkg-config` in some places and `${cross_prefix}pkg-config`
in others. Make check_min_lib_version() and the gtk checks consistent
with the rest by dropping the `${cross_prefix}` usage with pkg-config.

Signed-off-by: Chris Packham <chris.packham@alliedtelesis.co.nz>
Link: https://lore.kernel.org/r/20240123202636.179467-1-chris.packham@alliedtelesis.co.nz
Signed-off-by: Jens Axboe <axboe@kernel.dk>
3 months agofilesetup: clear O_RDWR flag for verify_only write workloads
Vincent Fu [Fri, 19 Jan 2024 17:30:57 +0000 (17:30 +0000)]
filesetup: clear O_RDWR flag for verify_only write workloads

If verify_only is set we don't need to open the file with the O_RDWR
flagi for write workloads. So we should clear this flag. This will help
when the file is on a read-only file system.

Fixes: https://github.com/axboe/fio/issues/1681
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoci: stop hard coding number of jobs for make
Vincent Fu [Thu, 18 Jan 2024 17:20:29 +0000 (12:20 -0500)]
ci: stop hard coding number of jobs for make

GitHub increased the number of CPUs in its GitHub-hosted runners from
two to four for Linux and Windows. macOS remains at two CPUs. Stop
hard-coding the number of CPUs when we build fio and detect the number
at runtime.

https://github.blog/2024-01-17-github-hosted-runners-double-the-power-for-open-source/

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
3 months agoconfigure: enable NVME_URING_CMD checking for Android
Jens Axboe [Wed, 17 Jan 2024 16:11:15 +0000 (09:11 -0700)]
configure: enable NVME_URING_CMD checking for Android

Link: https://github.com/axboe/fio/issues/1701
Signed-off-by: Jens Axboe <axboe@kernel.dk>
4 months agoMerge branch 'group_reporting_indentation' of https://github.com/0mp/fio
Vincent Fu [Tue, 16 Jan 2024 14:03:35 +0000 (09:03 -0500)]
Merge branch 'group_reporting_indentation' of https://github.com/0mp/fio

* 'group_reporting_indentation' of https://github.com/0mp/fio:
  doc: group_reporting: Fix indentation and syntax

4 months agodoc: group_reporting: Fix indentation and syntax
Mateusz Piotrowski [Sun, 14 Jan 2024 17:16:19 +0000 (18:16 +0100)]
doc: group_reporting: Fix indentation and syntax

Use tabs consistently for the paragraphs describing the group_reporting
option. Also, make sure that there is no space between ":option:" and
"`group_reporting`".

Signed-off-by: Mateusz Piotrowski <0mp@FreeBSD.org>
4 months agot/strided: check_result() has no return value
Vincent Fu [Fri, 29 Dec 2023 03:12:47 +0000 (22:12 -0500)]
t/strided: check_result() has no return value

check_result() erroneously returned True or False. Drop the return value
to be consistent with the parent and related classes.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
4 months agot/strided: call parent class check_result()
Vincent Fu [Fri, 29 Dec 2023 03:12:20 +0000 (22:12 -0500)]
t/strided: call parent class check_result()

Make sure we call the parent class' check_result() method to check the
return code, stderr output, etc.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
4 months agot/random_seed: call parent class check_result()
Vincent Fu [Fri, 29 Dec 2023 03:10:43 +0000 (22:10 -0500)]
t/random_seed: call parent class check_result()

Make sure we call the parent class' check_result() method to check the
return code, stderr output, etc.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
4 months agot/nvmept: call parent class check_result()
Vincent Fu [Wed, 27 Dec 2023 02:55:59 +0000 (21:55 -0500)]
t/nvmept: call parent class check_result()

Make sure we call the parent class' check_result() method to check the
return code, stderr output, etc.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
4 months agot/zbd: add test case to confirm no write with rwmixwrite=0 option
Shin'ichiro Kawasaki [Wed, 20 Dec 2023 00:58:46 +0000 (09:58 +0900)]
t/zbd: add test case to confirm no write with rwmixwrite=0 option

The previous commit fixed the issue of the unexpected write with options
zonemode=zbd, rw=randrw and rwmixwrite=0. Add a test to confirm the fix.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20231220005846.1371456-3-shinichiro.kawasaki@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
4 months agozbd: avoid write with rwmixwrite=0 option
Shin'ichiro Kawasaki [Wed, 20 Dec 2023 00:58:45 +0000 (09:58 +0900)]
zbd: avoid write with rwmixwrite=0 option

Since the commit fb0259fb276a ("zbd: Ensure first I/O is write for
random read/write to sequential zones"), fio issues write as the first
I/O when zonemode=zbd and rw=randrw options are specified. However, fio
issues the first write even when rwmixwrite=0 option is specified. Users
do not expect such write and it confuses the users. To avoid the
confusion, suppress the write by referring td->o.rwmix[DDIR_WRITE].

Fixes: fb0259fb276a ("zbd: Ensure first I/O is write for random read/write to sequential zones")
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20231220005846.1371456-2-shinichiro.kawasaki@wdc.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
5 months agoengines/http: use proper error value
Jens Axboe [Fri, 15 Dec 2023 20:17:13 +0000 (13:17 -0700)]
engines/http: use proper error value

The engine sets -1 for some odd reason, where ->error fields are
supposed to be a positive value. Set it to EIO.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
5 months agoMerge branch 'master' of https://github.com/preichl/fio
Jens Axboe [Fri, 15 Dec 2023 20:17:01 +0000 (13:17 -0700)]
Merge branch 'master' of https://github.com/preichl/fio

* 'master' of https://github.com/preichl/fio:
  engines/http: Drop unused varible
  client/server: remove dead code
  engines/rdma: remove dead code

5 months agoengines/http: Drop unused varible
Pavel Reichl [Fri, 15 Dec 2023 18:20:33 +0000 (19:20 +0100)]
engines/http: Drop unused varible

Signed-off-by: Pavel Reichl <preichl@redhat.com>
5 months agoclient/server: remove dead code
Pavel Reichl [Fri, 15 Dec 2023 18:04:42 +0000 (19:04 +0100)]
client/server: remove dead code

The issue was found by Red Hat's OpenScanHub:

    fio-3.35/server.c:1884:3: warning[deadcode.DeadStores]:
            Value stored to 'extended_buf_wp' is never read

Signed-off-by: Pavel Reichl <preichl@redhat.com>
5 months agoengines/rdma: remove dead code
Pavel Reichl [Fri, 15 Dec 2023 17:43:16 +0000 (18:43 +0100)]
engines/rdma: remove dead code

The issues was found by Red Hat's OpenScanHub:

    fio-3.35/engines/rdma.c:279:3: warning[deadcode.DeadStores]:
            Value stored to 'ret' is never read

Signed-off-by: Pavel Reichl <preichl@redhat.com>
5 months agoMerge branch 'master' of https://github.com/preichl/fio
Jens Axboe [Thu, 14 Dec 2023 21:15:34 +0000 (14:15 -0700)]
Merge branch 'master' of https://github.com/preichl/fio

* 'master' of https://github.com/preichl/fio:
  engines/http: Fix memory leak

5 months agoengines/http: Fix memory leak
Pavel Reichl [Thu, 14 Dec 2023 21:10:25 +0000 (22:10 +0100)]
engines/http: Fix memory leak

Found by Red Hat's OpenScanHub:

fio-3.35/engines/http.c:253: leaked_storage: Variable r going out of scope leaks the storage it points to.

Signed-off-by: Pavel Reichl <preichl@redhat.com>
5 months agoMerge branch 'patch-3' of https://github.com/0mp/fio
Jens Axboe [Thu, 14 Dec 2023 14:54:24 +0000 (07:54 -0700)]
Merge branch 'patch-3' of https://github.com/0mp/fio

* 'patch-3' of https://github.com/0mp/fio:
  doc: Reference geom(4) for FreeBSD users

5 months agodoc: Reference geom(4) for FreeBSD users
Mateusz Piotrowski [Thu, 14 Dec 2023 14:48:04 +0000 (15:48 +0100)]
doc: Reference geom(4) for FreeBSD users

On FreeBSD, write access to Rank 1 geom providers is disabled
by default.  However, it can be enabled with the `kern.geom.debugflags`
sysctl as documented in geom(4). Point users to that manual page
for smoother experience.

Signed-off-by: Mateusz Piotrowski 0mp@FreeBSD.org
5 months agoengines/io_uring_cmd: skip pi verify checks for error cases
Ankit Kumar [Tue, 12 Dec 2023 14:47:18 +0000 (20:17 +0530)]
engines/io_uring_cmd: skip pi verify checks for error cases

If any error is observed for read requests, skip all end to end data
protection checks.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20231212144718.568406-1-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
5 months agoMerge branch 'master' of https://github.com/bvanassche/fio
Vincent Fu [Mon, 11 Dec 2023 21:27:21 +0000 (16:27 -0500)]
Merge branch 'master' of https://github.com/bvanassche/fio

* 'master' of https://github.com/bvanassche/fio:
  Fall back to F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported

5 months agoengines/io_uring_cmd: friendlier bad bs error msg
Vincent Fu [Mon, 11 Dec 2023 16:25:33 +0000 (16:25 +0000)]
engines/io_uring_cmd: friendlier bad bs error msg

It can tricky to specify block sizes for devices formatted in extended
LBA mode because the block sizes are no longer powers of two. Add a
suggested block size in the error message when we abort a job because the
specified block size is not a multiple of the extended LBA size.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
5 months agoFall back to F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported
Bart Van Assche [Thu, 7 Dec 2023 18:22:19 +0000 (10:22 -0800)]
Fall back to F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported

Linux kernel commit 7b12e49669c9 ("fs: remove fs.f_write_hint") removed
F_SET_FILE_RW_HINT support from the Linux kernel. Hence fall back to
F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
5 months agoMerge branch 'xnvme_includes' of https://github.com/safl/fio
Vincent Fu [Mon, 20 Nov 2023 12:43:16 +0000 (07:43 -0500)]
Merge branch 'xnvme_includes' of https://github.com/safl/fio

* 'xnvme_includes' of https://github.com/safl/fio:
  engines/xnvme: only include entry-header ('libxnvme.h')

5 months agoengines/xnvme: only include entry-header ('libxnvme.h')
Simon A. F. Lund [Mon, 20 Nov 2023 08:20:42 +0000 (09:20 +0100)]
engines/xnvme: only include entry-header ('libxnvme.h')

This changes how the xNVMe fio io-engine consumes the xNVMe library by
only including the library-entry header "libxnvme.h".

From version 0.7.0 the xNVMe API headers are refactored to drop header
guards on the individual headers and abide by the idiom of "headers must
not include other headers".

The exception is the library-entry header "libxnvme.h". The
library-entry-header includes all headers provided with xNVMe, which is
a convenient approach to consuming the library. One where, in case the
API namespace grows or shrinks, then the xNVMe fio io-engine need not
change how it includes xNVMe.

However, since fio has consumed the main-entry header and individual
headers, xNVMe has held back on removing the guards on _nvm, _zns, and
_spec to avoid breaking the xNVMe fio engine. They will eventually be
deprecated. Thus, this change to consume xNVMe in the manner intended
from version v0.7.0 and onwards.

Signed-off-by: Simon A. F. Lund <simon.lund@samsung.com>
6 months agot/jobs/t0012.fio: make this job time_based
Vincent Fu [Tue, 7 Nov 2023 17:18:05 +0000 (12:18 -0500)]
t/jobs/t0012.fio: make this job time_based

From time to time we see failures (especially on Windows) with this test
because one of its jobs does not run long enough. Make the jobs run for
this test time_based so that they run for a minimum of 12s.

Example error output:

DEBUG:root:sample 0: job1 iops=343858.0 job2 iops=1719327.0 job3 iops=3438690.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 1: job1 iops=682225.0 job2 iops=3411146.0 job3 iops=6822273.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 2: job1 iops=1019335.0 job2 iops=5096697.0 job3 iops=10193375.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 3: job1 iops=1367550.0 job2 iops=6837771.0 job3 iops=13675524.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 4: job1 iops=1704137.0 job2 iops=8520706.0 job3 iops=17041393.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 5: job1 iops=2056314.0 job2 iops=10281595.0 job3 iops=20563173.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:sample 6: job1 iops=2399343.0 job2 iops=11996744.0 job3 iops=23993468.0 job3/job2=2.000 job3/job1=10.000
DEBUG:root:Test 12 exception:
Traceback (most recent call last):
  File "D:\a\fio\fio\t\fiotestlib.py", line 465, in run_fio_tests
    test.check_result()
  File "D:\a\fio\fio\t\run-fio-tests.py", line 180, in check_result
    iops3 = iops3 + float(iops_files[2][i].split(',')[1])
Test 12 FAILED: list index out of range t0012.fio
IndexError: list index out of range

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
6 months agodocs: add warning to per_job_logs option
Vincent Fu [Mon, 6 Nov 2023 18:44:48 +0000 (13:44 -0500)]
docs: add warning to per_job_logs option

Add a warning about the file open mode used when per_job_logs is set to
false. Log files are opened in append mode, so if the files already
exist, the previous contents will not be overwritten.

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
6 months agoclient/server: enable per_job_logs option
Vincent Fu [Mon, 6 Nov 2023 18:41:53 +0000 (13:41 -0500)]
client/server: enable per_job_logs option

On the client side log files were being overwritten when per_job_logs
was set to false because of the flags used when log files were opened.
Add per_job_logs to the on-wire protocol so that the client can adjust
the flags and open files in append mode when per_job_logs is set to
false.

Fixes: https://github.com/axboe/fio/issues/1032

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
6 months agoMerge branch 'thinkcycles-parameter' of https://github.com/cloehle/fio
Vincent Fu [Fri, 3 Nov 2023 15:21:22 +0000 (11:21 -0400)]
Merge branch 'thinkcycles-parameter' of https://github.com/cloehle/fio

* 'thinkcycles-parameter' of https://github.com/cloehle/fio:
  fio: Introduce new constant thinkcycles option

6 months agofio: Introduce new constant thinkcycles option
Christian Loehle [Mon, 23 Oct 2023 09:42:26 +0000 (10:42 +0100)]
fio: Introduce new constant thinkcycles option

The thinkcycles parameter allows to set a number of cycles to spin between
requests to model real-world applications more realistically

The thinktime parameter family can be used to model an application processing
the data to be able to model real-world applications more closely.
Unfortunately this is currently set per constant time and therefore is affected
by CPU frequency settings or task migration to a CPU with different capacity.
The new thinkcycles parameter closes that gap and allows specifying a constant
number of cycles instead, such that CPU capacity is taken into account.

Signed-off-by: Christian Loehle <christian.loehle@arm.com>
6 months agoengines/xnvme: fix fdp support for userspace drivers
Ankit Kumar [Thu, 2 Nov 2023 13:59:28 +0000 (19:29 +0530)]
engines/xnvme: fix fdp support for userspace drivers

The xNVMe backend supports FDP commands for userspace drivers
such as SPDK. Enable support in the xnvme ioengine.
Update the xnvme fdp example file accordingly.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20231102135928.195372-1-ankit.kumar@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
6 months agoMerge branch 'pi-perf' of https://github.com/ankit-sam/fio
Jens Axboe [Tue, 31 Oct 2023 15:27:15 +0000 (09:27 -0600)]
Merge branch 'pi-perf' of https://github.com/ankit-sam/fio

* 'pi-perf' of https://github.com/ankit-sam/fio:
  crct10: use isa-l for crc if available

6 months agocrct10: use isa-l for crc if available
Ankit Kumar [Tue, 31 Oct 2023 18:45:40 +0000 (00:15 +0530)]
crct10: use isa-l for crc if available

isa-l provides fast implementation for various polynomials.
This will be only used for end to end data protection, and has
a significant impact on performance.

See: https://github.com/intel/isa-l

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
6 months agoMerge branch 'englist' of https://github.com/vt-alt/fio
Vincent Fu [Wed, 25 Oct 2023 21:53:40 +0000 (17:53 -0400)]
Merge branch 'englist' of https://github.com/vt-alt/fio

* 'englist' of https://github.com/vt-alt/fio:
  nfs: Fix incorrect engine registering for '--enghelp' list

6 months agoengines/io_uring_cmd: allocate enough ranges for async trims
Vincent Fu [Wed, 25 Oct 2023 18:47:45 +0000 (18:47 +0000)]
engines/io_uring_cmd: allocate enough ranges for async trims

We round up the iodepth to the next highest power of 2. So io_u->index
can be greater than the iodepth specified by the user. Make sure we
allocate enough of the buffers used to store the ranges for async trim
commands when the iodepth specified by the user is not a power of 2.

Fixes: 4885a6eba420ce216e4102df3e42229e167d1b7b ("engines/io_uring_cmd:
make trims async")
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
6 months agonfs: Fix incorrect engine registering for '--enghelp' list
Vitaly Chikunov [Tue, 24 Oct 2023 02:29:40 +0000 (05:29 +0300)]
nfs: Fix incorrect engine registering for '--enghelp' list

`ioengine` from `nfs` (internal) engine is incorrectly exported thus
overriding its value in constructor callbacks of other external engines,
that are used for registering engine for listing with `--enghelp`.

Because flist is unsafe to double adding it also making `engine_list` to
become corrupt and causing infinite loop or abnormal list termination
when printing engine list.

Issue: https://github.com/axboe/fio/issues/1655
Fixes: 9326926b ("NFS engine")
Signed-off-by: Vitaly Chikunov <vt@altlinux.org>
6 months agoMerge branch 'spellingfixes-2023-10-23' of https://github.com/proact-de/fio
Jens Axboe [Mon, 23 Oct 2023 14:32:46 +0000 (08:32 -0600)]
Merge branch 'spellingfixes-2023-10-23' of https://github.com/proact-de/fio

* 'spellingfixes-2023-10-23' of https://github.com/proact-de/fio:
  Various spelling fixes.

6 months agoVarious spelling fixes.
Martin Steigerwald [Mon, 23 Oct 2023 14:14:50 +0000 (16:14 +0200)]
Various spelling fixes.

Most of them have been reported by Debian's Lintian tool.

Signed-off-by: Martin Steigerwald <martin.steigerwald@proact.de>
6 months agoMerge branch 'fix-riscv64-cpu-clock' of https://github.com/gilbsgilbs/fio
Jens Axboe [Mon, 23 Oct 2023 00:52:51 +0000 (18:52 -0600)]
Merge branch 'fix-riscv64-cpu-clock' of https://github.com/gilbsgilbs/fio

* 'fix-riscv64-cpu-clock' of https://github.com/gilbsgilbs/fio:
  riscv64: get clock from `rdtime` instead of `rdcycle`

6 months agoriscv64: get clock from `rdtime` instead of `rdcycle`
Gilbert Gilb's [Sun, 22 Oct 2023 17:06:45 +0000 (19:06 +0200)]
riscv64: get clock from `rdtime` instead of `rdcycle`

`rdcycle` pseudo-instruction accesses the "cycle CSR" which holds the
real count of CPU core clock cycles [1]. As this leaves room for
side-channel attacks, access to this register from userland might be
forbidden by the kernel, which results in a SIGILL [2].

Anyhow, it seems that the actual usage of the `get_cpu_clock` function
in fio is about getting a wall-clock rather than the actual CPU core
clock (for instance, x86 uses `rdtsc`), so this is technically a bug.
The "time CSR" is the proper register to track time on riscv64. Also,
the "time CSR" is more likely to be available from userspace and not
cause a crash.

[1] RISC-V ISA Section 10.1: https://github.com/riscv/riscv-isa-manual/releases/download/Ratified-IMAFDQC/riscv-spec-20191213.pdf

[2] https://lore.kernel.org/all/YxIzgYP3MujXdqwj@aurel32.net/T/

Signed-off-by: N. Le Roux <gilbsgilbs@gmail.com>
Signed-off-by: Gilbert Gilb's <gilbsgilbert@gmail.com>
6 months agoMerge branch 'master' of https://github.com/michalbiesek/fio
Jens Axboe [Fri, 20 Oct 2023 10:32:39 +0000 (04:32 -0600)]
Merge branch 'master' of https://github.com/michalbiesek/fio

* 'master' of https://github.com/michalbiesek/fio:
  riscv64: add syscall helpers

6 months agoFio 3.36 fio-3.36
Jens Axboe [Fri, 20 Oct 2023 10:30:43 +0000 (04:30 -0600)]
Fio 3.36

Signed-off-by: Jens Axboe <axboe@kernel.dk>
6 months agoriscv64: add syscall helpers
Michal Biesek [Wed, 23 Aug 2023 15:26:22 +0000 (17:26 +0200)]
riscv64: add syscall helpers

Use syscall helpers to optimized io_uring_enter(2) calls, eliminating
the need for libc functions. These wrappers are adapted from liburing.

Signed-off-by: michalbiesek <michalbiesek@gmail.com>
6 months agoMerge branch 'master' of https://github.com/shailevi23/fio
Vincent Fu [Thu, 19 Oct 2023 12:37:23 +0000 (08:37 -0400)]
Merge branch 'master' of https://github.com/shailevi23/fio

* 'master' of https://github.com/shailevi23/fio:
  helper_thread: fix pthread_sigmask typo.
  configure: improve pthread_sigmask detection.

6 months agoMerge branch 'fix_issue_1642' of https://github.com/zqs-Oppenauer/fio
Jens Axboe [Thu, 19 Oct 2023 12:32:25 +0000 (06:32 -0600)]
Merge branch 'fix_issue_1642' of https://github.com/zqs-Oppenauer/fio

* 'fix_issue_1642' of https://github.com/zqs-Oppenauer/fio:
  fix assert failed when timeout during call rate_ddir.

6 months agofix assert failed when timeout during call rate_ddir.
zhuqingsong.0909 [Thu, 19 Oct 2023 03:29:27 +0000 (11:29 +0800)]
fix assert failed when timeout during call rate_ddir.

Adding DDIR_TIMEOUT in enum fio_ddir, and rate_ddir returns it when fio timeouts.
set_io_u_file will directly break out of the loop, and fill_io_u won't be called,
which causes assert to fail in rate_ddir, because td->rwmix_ddir is DDIR_INVAL.

Signed-off-by: QingSong Zhu zhuqingsong.0909@bytedance.com
6 months agohelper_thread: fix pthread_sigmask typo.
Shai Levy [Mon, 16 Oct 2023 11:29:04 +0000 (14:29 +0300)]
helper_thread: fix pthread_sigmask typo.

Signed-off-by: Shai Levy <shailevy23@gmail.com>.
6 months agoconfigure: improve pthread_sigmask detection.
Shai Levy [Mon, 16 Oct 2023 11:26:20 +0000 (14:26 +0300)]
configure: improve pthread_sigmask detection.

On Windows system, pthread_sigmask is defined as a noop which will
trigger unused variable warning for sigmask.
By triggering the same warning in the configure script, we make
CONFIG_PTHREAD_SIGMASK undefined in the Windows msys2 build.

Signed-off-by: Shai Levy <shailevy23@gmail.com>.
7 months agoci: explicitly install pygments and certifi on macos
Vincent Fu [Mon, 16 Oct 2023 14:03:36 +0000 (10:03 -0400)]
ci: explicitly install pygments and certifi on macos

The documentation build on macOS started failing because of errors with
the pygments and certifi modules. Homebrew is not automatically
installing pygments and python-certifi which are listed as packages that
sphinx-doc depends on because they are already present in the runner
image at the required versions (2.16.1 and 2023.7.22, respectively).
Explicitly installing the two packages bumps the versions to slightly
newer ones (2.16.1_1 and 2023.7.22_1, respectively). This appears to
resolve the documentation build problem.

https://formulae.brew.sh/formula/sphinx-doc
https://github.com/axboe/fio/actions/runs/6533001329/job/17739452911#step:13:155
https://github.com/vincentkfu/fio/actions/runs/6535039949/job/17743571376#step:13:148
https://github.com/vincentkfu/fio/actions/runs/6535229986/job/17744177918#step:6:10

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agot/zbd: avoid test case 45 failure
Shin'ichiro Kawasaki [Fri, 6 Oct 2023 07:13:20 +0000 (16:13 +0900)]
t/zbd: avoid test case 45 failure

When zonemode=zbd option is not specified, random writes to zoned block
devices fail because writes to sequential write required zones shall
happen only at write pointers. Randomly chosen write addresses do not
match with the write pointers, then fail. On such failures, fio prints
out the message below and tell users how to avoid the failures:

    "fio: first I/O failed. If .* is a zoned block device, consider --zonemode=zbd".

The test case 45 in t/zbd/test-zbd-support confirms the message is
printed when the first random write command to a sequential write
required zone fails. However, the random write can succeed very rarely
since the randomly chosen write address can be same as the write pointer
address. For example, a zoned block device with 1MB zone size with 4KB
block size device can have the first random write at write pointer with
ratio of 4KB/1MB = 1/256. This causes sporadic test case failures.

Avoid the failures by two changes. Firstly, change the random write
range from a zone to whole sequential write required zones to reduce the
failure ratio. Secondly, repeat the test if the message is not printed
by the accidental write success. As the test repeated, failure ratio is
multiplied and the failure ratio becomes as small as it can be ignored.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20231006071320.425270-1-shinichiro.kawasaki@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agoMerge branch 'fix-stat-overflow' of https://github.com/stilor/fio
Vincent Fu [Fri, 6 Oct 2023 19:27:23 +0000 (15:27 -0400)]
Merge branch 'fix-stat-overflow' of https://github.com/stilor/fio

* 'fix-stat-overflow' of https://github.com/stilor/fio:
  Handle 32-bit overflows in disk utilization stats
  Change memcpy() calls to assignments

7 months agoHandle 32-bit overflows in disk utilization stats
Alexey Neyman [Tue, 3 Oct 2023 22:49:02 +0000 (22:49 +0000)]
Handle 32-bit overflows in disk utilization stats

Linux prints [1] some of the values reported in block device's `stat`
sysfs file as 32-bit unsigned integers. fio interprets them as 64-bit
integers when reading that sysfs file and performs further arithmetics
on them in 64-bits. If the reported value overflows during fio run,
a huge bogus value is reported in the "disk utilization" block instead.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/block/genhd.c#n962

Signed-off-by: Alexey Neyman <aneyman@google.com>
7 months agoChange memcpy() calls to assignments
Alexey Neyman [Thu, 5 Oct 2023 18:43:17 +0000 (18:43 +0000)]
Change memcpy() calls to assignments

This is to avoid triggering a spurious warning caused by [1], which
is triggered by the next commit in chain (unrelated change in
update_io_tick_disk()).

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111696

Signed-off-by: Alexey Neyman <aneyman@google.com>
7 months agoiolog: don't truncate time values
Vincent Fu [Mon, 2 Oct 2023 13:41:54 +0000 (06:41 -0700)]
iolog: don't truncate time values

We store iolog timestamps as 64-bit unsigned integers but when we print
timestamps in the logs we type cast them to unsigned longs. This is fine
on platforms with 64-bit longs but on platforms like Windows with 32-bit
longs this truncates the timestamps. Truncation causes problems
especially when options such as --log_unix_epoch are enabled because the
number of milliseconds since 01-01-1970 does not fit in a 32-bit
unsigned long.

Fix this by getting rid of the type cast and using PRIu64 as the format
specifier.

Fixes: https://github.com/axboe/fio/issues/1638
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agoci: switch macos runs from macos-12 to macos-13
Vincent Fu [Fri, 29 Sep 2023 12:58:10 +0000 (08:58 -0400)]
ci: switch macos runs from macos-12 to macos-13

macOS 13 was released in Oct 2022 and the GitHub Actions image debuted
Apr 2023. Let's switch to this new platform.

It seems to work fine based on two runs testing the nice fix in the
previous patch.

https://github.com/vincentkfu/fio/actions/runs/6352923622/job/17256648185
https://github.com/vincentkfu/fio/actions/runs/6353159388/job/17257286332

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agoworkqueue: handle nice better
Vincent Fu [Fri, 29 Sep 2023 14:04:50 +0000 (10:04 -0400)]
workqueue: handle nice better

nice returns the program's schedule priority. This can be a negative
value when there is no error condition. To check if nice is triggering
an error we have to check errno.

The most recent three macOS test failures appear to be due to this
problem.

https://github.com/axboe/fio/actions/runs/6347762639/job/17243247222
https://github.com/axboe/fio/actions/runs/6346019205/job/17239370410
https://github.com/axboe/fio/actions/runs/6241934089/job/16944981876

Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agoMerge branch 'fix_verify_block_offset' of https://github.com/ipylypiv/fio
Jens Axboe [Fri, 29 Sep 2023 06:05:10 +0000 (00:05 -0600)]
Merge branch 'fix_verify_block_offset' of https://github.com/ipylypiv/fio

* 'fix_verify_block_offset' of https://github.com/ipylypiv/fio:
  verify: Fix the bad pattern block offset value

7 months agoverify: Fix the bad pattern block offset value
Igor Pylypiv [Thu, 28 Sep 2023 23:37:14 +0000 (16:37 -0700)]
verify: Fix the bad pattern block offset value

We offset buf by header_size for pattern verification. Add header_size
to the mismatched buf offset to get the correct block offset value.

Signed-off-by: Igor Pylypiv <ipylypiv@google.com>
7 months agot/zbd: set mq-deadline scheduler to device-mapper destination devices
Shin'ichiro Kawasaki [Wed, 13 Sep 2023 01:52:49 +0000 (10:52 +0900)]
t/zbd: set mq-deadline scheduler to device-mapper destination devices

When write workloads run on zoned block devices, mq-deadline scheduler is
required to ensure write operations are sequential. To fulfill this
requirement, the test script t/zbd/test-zbd-support sets mq-deadline to
the sysfs attribute "queue/scheduler". However, this preparation does
not work when the write target device is a bio based device-mapper
device. The device is bio based then I/O scheduler does not work.
Setting mq-deadline to the sysfs attribute has no effect. On top of
that, the sysfs attribute "queue/scheduler" is no longer available for
bio based device-mapper devices since Linux kernel version v6.5.

To ensure mq-deadline scheduler for bio based device-mapper devices,
improve the helper function set_io_scheduler. If the sysfs attribute
"queue/scheduler" is available, use it. Otherwise, check if the test
device is a zoned device-mapper (linear, flakey or crypt). If so, set
mq-deadline scheduler to destination devices of the device-mapper
device. To implement these, add some helper functions.

Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Link: https://lore.kernel.org/r/20230913015249.2226799-1-shinichiro.kawasaki@wdc.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
7 months agoMerge branch 'fio_client_server_doc_fix' of https://github.com/pcpartpicker/fio
Vincent Fu [Wed, 20 Sep 2023 11:41:17 +0000 (07:41 -0400)]
Merge branch 'fio_client_server_doc_fix' of https://github.com/pcpartpicker/fio

* 'fio_client_server_doc_fix' of https://github.com/pcpartpicker/fio:
  Update docs to clarify how to pass job options in client mode

7 months agoUpdate docs to clarify how to pass job options in client mode
aggieNick02 [Tue, 19 Sep 2023 23:14:54 +0000 (18:14 -0500)]
Update docs to clarify how to pass job options in client mode

When run in client mode, fio does not pass any job options specified on
the command line to the fio server. When run in client mode, all job
options must be specified via local or remote job files. Update the docs
to indicate this to avoid end-user confusion.

Fixes #1629

Signed-off-by: Nick Neumann nick@pcpartpicker.com