[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <cover.1660124059.git.asml.silence@gmail.com>
Date: Wed, 10 Aug 2022 16:49:08 +0100
From: Pavel Begunkov <asml.silence@...il.com>
To: io-uring@...r.kernel.org, netdev@...r.kernel.org
Cc: Jens Axboe <axboe@...nel.dk>,
"David S . Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>, kernel-team@...com,
linux-kernel@...r.kernel.org, xen-devel@...ts.xenproject.org,
Wei Liu <wei.liu@...nel.org>, Paul Durrant <paul@....org>,
kvm@...r.kernel.org, virtualization@...ts.linux-foundation.org,
"Michael S . Tsirkin" <mst@...hat.com>,
Jason Wang <jasowang@...hat.com>,
Pavel Begunkov <asml.silence@...il.com>
Subject: [RFC net-next io_uring 00/11] improve io_uring's ubuf_info refcounting
There is a couple of tricks we can do with io_uring to improve ubuf_info
refcounting. First, we ammortise reference grabbing and then give them
away to the network layer, which is implemented in 8 and 11. Also, we
don't need need additional pinning for TCP, which is removed by 7.
1-4 are needed because otherwise we're out of space in io_notif_data and
using ->desc or some other field of ubuf_info would be ugly. It'll also
facilitate further ideas like adding a simpler notification model for UDP.
liburing/examples/io_uring-sendzc benchmark using a branch containing the
patchset and some more [1] showed ~1.6% qps improvement for UDP (dummy dev),
and ~1% for TCP (localhost + hacks enabling zc).
I didn't specifically test xen and vhost and not sure how, would love
some help with that.
[1] https://github.com/isilence/linux/tree/net/zc-ref-optimisation
Pavel Begunkov (11):
net: introduce struct ubuf_info_msgzc
xen/netback: use struct ubuf_info_msgzc
vhost/net: use struct ubuf_info_msgzc
net: shrink struct ubuf_info
net: rename ubuf_info's flags
net: add flags for controlling ubuf_info
net/tcp: optimise tcp ubuf refcounting
net: let callers provide ->msg_ubuf refs
io_uring/notif: add helper for flushing refs
io_uring/notif: mark notifs with UARGFL_CALLER_PINNED
io_uring/notif: add ubuf_info ref caching
drivers/net/xen-netback/common.h | 2 +-
drivers/net/xen-netback/interface.c | 4 +--
drivers/net/xen-netback/netback.c | 7 +++---
drivers/vhost/net.c | 17 +++++++------
include/linux/skbuff.h | 35 +++++++++++++++++++++++---
io_uring/net.c | 8 +++++-
io_uring/notif.c | 21 ++++++++++------
io_uring/notif.h | 22 +++++++++++++++-
net/core/skbuff.c | 39 ++++++++++++++++-------------
net/ipv4/ip_output.c | 3 ++-
net/ipv4/tcp.c | 11 +++++---
net/ipv6/ip6_output.c | 3 ++-
12 files changed, 123 insertions(+), 49 deletions(-)
--
2.37.0
Powered by blists - more mailing lists