[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250904170902.2624135-1-csander@purestorage.com>
Date: Thu, 4 Sep 2025 11:08:57 -0600
From: Caleb Sander Mateos <csander@...estorage.com>
To: Jens Axboe <axboe@...nel.dk>
Cc: io-uring@...r.kernel.org,
linux-kernel@...r.kernel.org,
Caleb Sander Mateos <csander@...estorage.com>
Subject: [PATCH v2 0/5] io_uring: avoid uring_lock for IORING_SETUP_SINGLE_ISSUER
As far as I can tell, setting IORING_SETUP_SINGLE_ISSUER when creating
an io_uring doesn't actually enable any additional optimizations (aside
from being a requirement for IORING_SETUP_DEFER_TASKRUN). This series
leverages IORING_SETUP_SINGLE_ISSUER's guarantee that only one task
submits SQEs to skip taking the uring_lock mutex in the submission and
task work paths.
First, we need to close a hole in the IORING_SETUP_SINGLE_ISSUER checks
where IORING_REGISTER_CLONE_BUFFERS only checks whether the thread is
allowed to access one of the two io_urings. It assumes the uring_lock
will prevent concurrent access to the other io_uring, but this will no
longer be the case after the optimization to skip taking uring_lock.
We also need to remove the unused filetable.h #include from io_uring.h
to avoid an #include cycle.
v2:
- Don't enable these optimizations for IORING_SETUP_SQPOLL, as we still
need to synchronize SQ thread submission with io_uring_register()
Caleb Sander Mateos (5):
io_uring: don't include filetable.h in io_uring.h
io_uring/rsrc: respect submitter_task in io_register_clone_buffers()
io_uring: clear IORING_SETUP_SINGLE_ISSUER for IORING_SETUP_SQPOLL
io_uring: factor out uring_lock helpers
io_uring: avoid uring_lock for IORING_SETUP_SINGLE_ISSUER
io_uring/cancel.c | 1 +
io_uring/fdinfo.c | 2 +-
io_uring/filetable.c | 3 +-
io_uring/io_uring.c | 67 +++++++++++++++++++++++++++++---------------
io_uring/io_uring.h | 43 ++++++++++++++++++++++------
io_uring/kbuf.c | 6 ++--
io_uring/net.c | 1 +
io_uring/notif.c | 5 ++--
io_uring/notif.h | 3 +-
io_uring/openclose.c | 1 +
io_uring/poll.c | 2 +-
io_uring/register.c | 1 +
io_uring/rsrc.c | 10 ++++++-
io_uring/rsrc.h | 3 +-
io_uring/rw.c | 3 +-
io_uring/splice.c | 1 +
io_uring/waitid.c | 2 +-
17 files changed, 111 insertions(+), 43 deletions(-)
--
2.45.2
Powered by blists - more mailing lists