[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220628150228.1379645-1-dylany@fb.com>
Date: Tue, 28 Jun 2022 08:02:20 -0700
From: Dylan Yudaken <dylany@...com>
To: Jens Axboe <axboe@...nel.dk>,
Pavel Begunkov <asml.silence@...il.com>,
<io-uring@...r.kernel.org>
CC: <Kernel-team@...com>, <linux-kernel@...r.kernel.org>,
Dylan Yudaken <dylany@...com>
Subject: [PATCH for-next 0/8] io_uring: multishot recv
This series adds support for multishot recv/recvmsg to io_uring.
The idea is that generally socket applications will be continually
enqueuing a new recv() when the previous one completes. This can be
improved on by allowing the application to queue a multishot receive,
which will post completions as and when data is available. It uses the
provided buffers feature to receive new data into a pool provided by
the application.
This is more performant in a few ways:
* Subsequent receives are queued up straight away without requiring the
application to finish a processing loop.
* If there are more data in the socket (sat the provided buffer
size is smaller than the socket buffer) then the data is immediately
returned, improving batching.
* Poll is only armed once and reused, saving CPU cycles
Running a small network benchmark [1] shows improved QPS of ~6-8% over a range of loads.
[1]: https://github.com/DylanZA/netbench/tree/multishot_recv
Dylan Yudaken (8):
io_uring: allow 0 length for buffer select
io_uring: restore bgid in io_put_kbuf
io_uring: allow iov_len = 0 for recvmsg and buffer select
io_uring: recycle buffers on error
io_uring: clean up io_poll_check_events return values
io_uring: add IOU_STOP_MULTISHOT return code
io_uring: add IORING_RECV_MULTISHOT flag
io_uring: multishot recv
include/uapi/linux/io_uring.h | 5 ++
io_uring/io_uring.h | 7 ++
io_uring/kbuf.c | 4 +-
io_uring/kbuf.h | 8 ++-
io_uring/net.c | 119 ++++++++++++++++++++++++++++------
io_uring/poll.c | 30 ++++++---
6 files changed, 140 insertions(+), 33 deletions(-)
base-commit: 755441b9029317d981269da0256e0a7e5a7fe2cc
--
2.30.2
Powered by blists - more mailing lists