fio.git
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>
4 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
8 months agoverify: open state file in binary mode on Windows
Vincent Fu [Thu, 14 Sep 2023 22:54:25 +0000 (18:54 -0400)]
verify: open state file in binary mode on Windows

Make sure we open the verify state file in binary mode to avoid any
possible conversion of NL to CR+NL. This is the same fix we did for
1fb215e991d260a128e35d761f6850e8d9e4c333.

Fixes: https://github.com/axboe/fio/issues/1631
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
8 months agoengines:nvme: fill command fields as per pi check bits
Ankit Kumar [Mon, 11 Sep 2023 16:25:00 +0000 (21:55 +0530)]
engines:nvme: fill command fields as per pi check bits

Fill the application and reference tag field for read and write
command only when pi_chk has the relevant bit set.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
8 months agoengines:io_uring_cmd: disallow verify for e2e pi with extended blocks
Ankit Kumar [Mon, 11 Sep 2023 16:24:59 +0000 (21:54 +0530)]
engines:io_uring_cmd: disallow verify for e2e pi with extended blocks

For extended logical block sizes we cannot use verify when end to end
data protection checks are enabled. The CRC field in PI section of
data buffer creates conflict during verify phase.
The verify check is also redundant as end to end data protection already
ensures data integrity. So disallow use of verify for this case.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
8 months agoMerge branch 'pcpp_epoch_fixing_2' of https://github.com/PCPartPicker/fio
Vincent Fu [Mon, 11 Sep 2023 15:31:27 +0000 (11:31 -0400)]
Merge branch 'pcpp_epoch_fixing_2' of https://github.com/PCPartPicker/fio

* 'pcpp_epoch_fixing_2' of https://github.com/PCPartPicker/fio:
  Make log_unix_epoch an official alias of log_alternate_epoch
  Record job start time to fix time pain points

8 months agoMake log_unix_epoch an official alias of log_alternate_epoch
aggieNick02 [Fri, 8 Sep 2023 20:34:09 +0000 (15:34 -0500)]
Make log_unix_epoch an official alias of log_alternate_epoch

log_alternate_epoch was introduced along with
log_alternate_epoch_clock_id, and generalized the idea of
log_unix_epoch. Both options had the same effect. So we make
log_unix_epoch an official alias of log_alternate_epoch, instead of
maintaining both redundant options.

Signed-off-by: Nick Neumann nick@pcpartpicker.com
8 months agoRecord job start time to fix time pain points
aggieNick02 [Fri, 1 Sep 2023 15:50:34 +0000 (10:50 -0500)]
Record job start time to fix time pain points

Add a new key in the json per-job output, job_start, that records the
job start time obtained via a call to clock_gettime using the clock_id
specified by the new job_start_clock_id option. This allows times of fio
jobs and log entries to be compared/ordered against each other and
against other system events recorded against the same clock_id.

Add a note to the documentation for group_reporting about how there are
several per-job values for which only the first job's value is recorded
in the json output format when group_reporting is enabled.

Fixes #1544

Signed-off-by: Nick Neumann nick@pcpartpicker.com
8 months agoMerge branch 'pcpp_parse_nr_fix' of https://github.com/PCPartPicker/fio
Jens Axboe [Sat, 2 Sep 2023 13:35:49 +0000 (07:35 -0600)]
Merge branch 'pcpp_parse_nr_fix' of https://github.com/PCPartPicker/fio

* 'pcpp_parse_nr_fix' of https://github.com/PCPartPicker/fio:
  Add basic error checking to parsing nr from rw=randrw:<nr>, etc

8 months agoAdd basic error checking to parsing nr from rw=randrw:<nr>, etc
aggieNick02 [Fri, 1 Sep 2023 22:01:05 +0000 (17:01 -0500)]
Add basic error checking to parsing nr from rw=randrw:<nr>, etc

Previously this was parsed by just doing atoi(). This returns 0 or has
undefined behavior in error cases.

Silently getting a 0 for nr is not great. In fact, 0 (or less) should
likely not be allowed for nr; while the code handles it, the effective
result is that the randomness is gone - all I/O becomes sequential. It
makes sense to prohibit 0 as an nr value in the random case.

We leverage str_to_decimal to do our parsing instead of atoi. It isn't
perfect, but it is a lot more resilient than atoi, and used in other
similar places. We can then return an error when parsing fails, and also
return an error when the parsed numeric value is outside of the ranges
that can be stored in the unsigned int used for nr, along with when nr
is 0.

Fixes #1622

Signed-off-by: Nick Neumann nick@pcpartpicker.com
8 months agoMerge branch 'master' of https://github.com/michalbiesek/fio
Jens Axboe [Wed, 23 Aug 2023 14:21:39 +0000 (08:21 -0600)]
Merge branch 'master' of https://github.com/michalbiesek/fio

* 'master' of https://github.com/michalbiesek/fio:
  Add RISC-V 64 support

8 months agoAdd RISC-V 64 support
Michal Biesek [Tue, 22 Aug 2023 23:03:02 +0000 (01:03 +0200)]
Add RISC-V 64 support

Signed-off-by: Michal Biesek <michalbiesek@gmail.com>
9 months agoexamples: add example and fiograph for protection information options
Ankit Kumar [Wed, 16 Aug 2023 09:46:16 +0000 (15:16 +0530)]
examples: add example and fiograph for protection information options

Add missing io_uring_cmd ioengine options to fiograph config.
Add two example job files for the protection information options.
These include one for DIF i.e. extended LBA data size, and the other
for DIX i.e. separate metadata buffer case.
Add the corresponding fiograph diagram for these.

Signed-off-by: Ankit Kumar <ankit.kumar@samsung.com>
Link: https://lore.kernel.org/r/20230816094616.132240-1-ankit.kumar@samsung.com
Signed-off-by: Vincent Fu <vincent.fu@samsung.com>
9 months agoengines/io_uring: fix leak of 'ld' in error path
Jens Axboe [Tue, 15 Aug 2023 01:59:20 +0000 (19:59 -0600)]
engines/io_uring: fix leak of 'ld' in error path

Not really important as we're exiting anyway, but this silences some
of the static checkers that like to complain about this sort of
thing.

Signed-off-by: Jens Axboe <axboe@kernel.dk>