From: Dylan Yudaken <[email protected]>
To: Jens Axboe <[email protected]>, Pavel Begunkov <[email protected]>
Cc: <[email protected]>, <[email protected]>,
Dylan Yudaken <[email protected]>
Subject: [PATCH for-next v3 0/9] io_uring: batch multishot completions
Date: Thu, 24 Nov 2022 01:35:50 -0800 [thread overview]
Message-ID: <[email protected]> (raw)
Multishot completions currently all go through io_post_aux_cqe which will
do a lock/unlock pair of the completion spinlock, and also possibly signal
an eventfd if registered. This can slow down applications that use these
features.
This series allows the posted completions to be batched using the same
IO_URING_F_COMPLETE_DEFER as exists for non multishot completions. A
critical property of this is that all multishot completions must be
flushed to the CQ ring before the non-multishot completion (say an error)
or else ordering will break. This implies that if some completions were
deferred, then the rest must also be to keep that ordering. In order to do
this the first few patches move all the completion code into a simpler
path that defers completions when possible.
The batching is done by keeping an array of 16 CQEs, and adding to it
rather than posting immediately. If it fills up the posting happens then.
A microbenchmark was run ([1]) to test this and showed a 2.3x rps
improvment (8.3 M/s vs 19.3 M/s).
Patches 1-3 clean up the completion paths
Patch 4 introduces the cqe array
Patch 5 allows io_post_aux_cqe to use the cqe array to defer completions
Patches 6-8 are small cleanups
Patch 9 enables defered completions for multishot polled requests
v3:
- rebase onto recent changes. A lot of duplicate changes so dropped 4 patches
v2:
- Rebase. This includes having to deal with the allow_overflow flag
- split io_post_aux_cqe up
- remove msg_ring changes (as not needed)
- add the patch 10-12 cleanups
[1]: https://github.com/DylanZA/liburing/commit/9ac66b36bcf4477bfafeff1c5f107896b7ae31cf
Run with $ make -j && ./benchmark/reg.b -s 1 -t 2000 -r 10
Dylan Yudaken (9):
io_uring: io_req_complete_post should defer if available
io_uring: always lock in io_apoll_task_func
io_uring: defer all io_req_complete_failed
io_uring: allow defer completion for aux posted cqes
io_uring: add io_aux_cqe which allows deferred completion
io_uring: make io_fill_cqe_aux static
io_uring: add lockdep assertion in io_fill_cqe_aux
io_uring: remove overflow param from io_post_aux_cqe
io_uring: allow multishot polled reqs to defer completion
include/linux/io_uring_types.h | 2 +
io_uring/io_uring.c | 101 ++++++++++++++++++++++++++-------
io_uring/io_uring.h | 9 ++-
io_uring/msg_ring.c | 4 +-
io_uring/net.c | 7 ++-
io_uring/poll.c | 9 +--
io_uring/rsrc.c | 4 +-
7 files changed, 101 insertions(+), 35 deletions(-)
base-commit: 6321e75e0bc52b0feff9643292acc92494c00e8d
--
2.30.2
next reply other threads:[~2022-11-24 9:36 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-24 9:35 Dylan Yudaken [this message]
2022-11-24 9:35 ` [PATCH for-next v3 1/9] io_uring: io_req_complete_post should defer if available Dylan Yudaken
2022-11-24 15:56 ` Pavel Begunkov
2022-11-25 9:26 ` Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 2/9] io_uring: always lock in io_apoll_task_func Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 3/9] io_uring: defer all io_req_complete_failed Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 4/9] io_uring: allow defer completion for aux posted cqes Dylan Yudaken
2022-11-24 16:04 ` Pavel Begunkov
2022-11-24 9:35 ` [PATCH for-next v3 5/9] io_uring: add io_aux_cqe which allows deferred completion Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 6/9] io_uring: make io_fill_cqe_aux static Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 7/9] io_uring: add lockdep assertion in io_fill_cqe_aux Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 8/9] io_uring: remove overflow param from io_post_aux_cqe Dylan Yudaken
2022-11-24 9:35 ` [PATCH for-next v3 9/9] io_uring: allow multishot polled reqs to defer completion Dylan Yudaken
2022-11-24 13:25 ` [PATCH for-next v3 0/9] io_uring: batch multishot completions 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