The following changes since commit b19c5ee1357ffb74f4de57b1617364bbbaacf1a0: examples: uring-cmd-zoned: expand the reasoning behind QD1 (2022-10-07 09:50:37 -0400) are available in the Git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to 07f78c37833730594778fb5684ac6ec40d0289f8: engines/io_uring: set coop taskrun, single issuer and defer taskrun (2022-10-12 07:19:35 -0600) ---------------------------------------------------------------- Ankit Kumar (1): engines/io_uring: set coop taskrun, single issuer and defer taskrun engines/io_uring.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) --- Diff of recent changes: diff --git a/engines/io_uring.c b/engines/io_uring.c index c679177f..6906e0a4 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -889,9 +889,30 @@ static int fio_ioring_cmd_queue_init(struct thread_data *td) p.flags |= IORING_SETUP_CQSIZE; p.cq_entries = depth; + /* + * Setup COOP_TASKRUN as we don't need to get IPI interrupted for + * completing IO operations. + */ + p.flags |= IORING_SETUP_COOP_TASKRUN; + + /* + * io_uring is always a single issuer, and we can defer task_work + * runs until we reap events. + */ + p.flags |= IORING_SETUP_SINGLE_ISSUER | IORING_SETUP_DEFER_TASKRUN; + retry: ret = syscall(__NR_io_uring_setup, depth, &p); if (ret < 0) { + if (errno == EINVAL && p.flags & IORING_SETUP_DEFER_TASKRUN) { + p.flags &= ~IORING_SETUP_DEFER_TASKRUN; + p.flags &= ~IORING_SETUP_SINGLE_ISSUER; + goto retry; + } + if (errno == EINVAL && p.flags & IORING_SETUP_COOP_TASKRUN) { + p.flags &= ~IORING_SETUP_COOP_TASKRUN; + goto retry; + } if (errno == EINVAL && p.flags & IORING_SETUP_CQSIZE) { p.flags &= ~IORING_SETUP_CQSIZE; goto retry;