From: Dylan Yudaken <[email protected]>
To: Jens Axboe <[email protected]>,
Pavel Begunkov <[email protected]>,
<[email protected]>
Cc: <[email protected]>, Dylan Yudaken <[email protected]>
Subject: [PATCH for-next v4 0/7] io_uring: defer task work to when it is needed
Date: Tue, 30 Aug 2022 05:50:06 -0700 [thread overview]
Message-ID: <[email protected]> (raw)
We have seen workloads which suffer due to the way task work is currently
scheduled. This scheduling can cause non-trivial tasks to run interrupting
useful work on the workload. For example in network servers, a large async
recv may run, calling memcpy on a large packet, interrupting a send. Which
would add latency.
This series adds an option to defer async work until user space calls
io_uring_enter with the GETEVENTS flag. This allows the workload to choose
when to schedule async work and have finer control (at the expense of
complexity of managing this) of scheduling.
Patches 1,2 are prep patches
Patch 3 changes io_uring_enter to not pre-run task work
Patch 4/5/6 adds the new flag and functionality
Patch 7 adds tracing for the local task work running
Changes since v3:
- Remove optimisation to save a single unlock. Can readd this later but it
definitely made the code significantly harder to understand.
- Thread actual error code back through io_run* functions
Changes since v2:
- add a patch to trace local task work run
- return -EEXIST if calling from the wrong task
- properly handle shutting down due to an exec
- remove 'all' parameter from io_run_task_work_ctx
Changes since v1:
- Removed the first patch (using ctx variable) which was broken
- Require IORING_SETUP_SINGLE_ISSUER and make sure waiter task
is the same as the submitter task
- Just don't run task work at the start of io_uring_enter (Pavel's
suggestion)
- Remove io_move_task_work_from_local
- Fix locking bugs
Dylan Yudaken (7):
io_uring: remove unnecessary variable
io_uring: introduce io_has_work
io_uring: do not run task work at the start of io_uring_enter
io_uring: add IORING_SETUP_DEFER_TASKRUN
io_uring: move io_eventfd_put
io_uring: signal registered eventfd to process deferred task work
io_uring: trace local task work run
include/linux/io_uring_types.h | 3 +
include/trace/events/io_uring.h | 29 ++++
include/uapi/linux/io_uring.h | 7 +
io_uring/cancel.c | 2 +-
io_uring/io_uring.c | 253 +++++++++++++++++++++++++-------
io_uring/io_uring.h | 29 +++-
io_uring/rsrc.c | 2 +-
7 files changed, 269 insertions(+), 56 deletions(-)
base-commit: b90cb1053190353cc30f0fef0ef1f378ccc063c5
prerequisite-patch-id: cb1d024945aa728d09a131156140a33d30bc268b
--
2.30.2
next reply other threads:[~2022-08-30 12:50 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-30 12:50 Dylan Yudaken [this message]
2022-08-30 12:50 ` [PATCH for-next v4 1/7] io_uring: remove unnecessary variable Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 2/7] io_uring: introduce io_has_work Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 3/7] io_uring: do not run task work at the start of io_uring_enter Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 4/7] io_uring: add IORING_SETUP_DEFER_TASKRUN Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 5/7] io_uring: move io_eventfd_put Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 6/7] io_uring: signal registered eventfd to process deferred task work Dylan Yudaken
2022-08-30 12:50 ` [PATCH for-next v4 7/7] io_uring: trace local task work run Dylan Yudaken
2022-08-30 14:30 ` [PATCH for-next v4 0/7] io_uring: defer task work to when it is needed Jens Axboe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
[email protected] \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox