RFC improve io_uring's ubuf_info refcounting
Get series with b4
b4 am [email protected]Versions newest first
- v1 RFC Latest11 patches 0 repliesNew
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/11 | net: introduce struct ubuf_info_msgzcinclude/ | +21 | 0 replies | |
| 2/11 | xen/netback: use struct ubuf_info_msgzcdrivers/ drivers/ drivers/ | +7 | 0 replies | |
| 3/11 | vhost/net: use struct ubuf_info_msgzcdrivers/ | +9 | 0 replies | |
| 4/11 | net: shrink struct ubuf_infoinclude/ net/ net/ +2 more | +28 | 0 replies | |
| 5/11 | net: rename ubuf_info's flagsinclude/ io_uring/ net/ | +4 | 0 replies | |
| 6/11 | net: add flags for controlling ubuf_infoinclude/ io_uring/ net/ | +3 | 0 replies | |
| 7/11 | net/tcp: optimise tcp ubuf refcountinginclude/ net/ | +13 | 0 replies | |
| 8/11 | net: let callers provide ->msg_ubuf refsinclude/ net/ net/ | +16 | 0 replies | |
| 9/11 | io_uring/notif: add helper for flushing refsio_uring/ | +9 | 0 replies | |
| 10/11 | io_uring/notif: mark notifs with UARGFL_CALLER_PINNEDio_uring/ | +1 | 0 replies | |
| 11/11 | io_uring/notif: add ubuf_info ref cachingio_uring/ io_uring/ io_uring/ | +32 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [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(-)
Signature · 1 line
2.37.0