From: Pavel Begunkov <asml.silence@gmail.com>
To: Eric Dumazet <edumazet@google.com>
Cc: netdev <netdev@vger.kernel.org>,
"David S . Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>, Wei Liu <wei.liu@kernel.org>,
Paul Durrant <paul@xen.org>
Subject: Re: [RFC net-next 00/27] net and/or udp optimisations
Date: Mon, 11 Apr 2022 13:04:10 +0100 [thread overview]
Message-ID: <f0a8e790-aff5-db72-d42e-1cbfe711a092@gmail.com> (raw)
In-Reply-To: <CANn89iL0anmfcX1v1NqOQ6xi2VfY7CmiUwav0jNbz6GuSjUspQ@mail.gmail.com>
On 4/6/22 10:44, Eric Dumazet wrote:
> On Sun, Apr 3, 2022 at 6:08 AM Pavel Begunkov <asml.silence@gmail.com> wrote:
>>
>> A mix of various net optimisations, which were mostly discovered during UDP
>> testing. Benchmarked with an io_uring test using 16B UDP/IPv6 over dummy netdev:
>> 2090K vs 2229K tx/s, +6.6%, or in a 4-8% range if not averaging across reboots.
>>
>> 1-3 removes extra atomics and barriers from sock_wfree() mainly benefitting UDP.
>> 4-7 cleans up some zerocopy helpers
>> 8-16 do inlining of ipv6 and generic net pathes
>> 17 is a small nice performance improvement for TCP zerocopy
>> 18-27 refactors UDP to shed some more overhead
>>
> Please send a smaller series first.
Apologies for delays. Ok, I'll split it.
> About inlining everything around, make sure to include performance
> numbers only for the inline parts.
> We can inline everything and make the kernel 4 x time bigger.
> Synthetic benchmarks will still show improvements but in overall, we
> add icache cost that is going to hurt latencies.
I do care about kernel bloating, but I think we can agree that for most
patches inlining is safe. There are 6 such patches (9-12,15,16). Three
of them (9,11,15) only do simple redirecting to another function
skb_csum_hwoffload_help() in 10 has only two callers. I think we can
agree that they're safe to inline.
That leaves ip6_local_out() with ~8 callers and used quite heavily. And
fl6_update_dst() with ~12 users, I don't have exact data but it appears
not everybody uses ip6 options and so the function does nothing. At
least that's true for UDP cases I care about. I think it's justified
to be inlined. Would you prefer these two to be removed?
> I vote that you focus on the other parts first.
>
> Thank you.
>
>> Pavel Begunkov (27):
>> sock: deduplicate ->sk_wmem_alloc check
>> sock: optimise sock_def_write_space send refcounting
>> sock: optimise sock_def_write_space barriers
>> skbuff: drop zero check from skb_zcopy_set
>> skbuff: drop null check from skb_zcopy
>> net: xen: set zc flags only when there is ubuf
>> skbuff: introduce skb_is_zcopy()
>> skbuff: optimise alloc_skb_with_frags()
>> net: inline sock_alloc_send_skb
>> net: inline part of skb_csum_hwoffload_help
>> net: inline skb_zerocopy_iter_dgram
>> ipv6: inline ip6_local_out()
>> ipv6: help __ip6_finish_output() inlining
>> ipv6: refactor ip6_finish_output2()
>> net: inline dev_queue_xmit()
>> ipv6: partially inline fl6_update_dst()
>> tcp: optimise skb_zerocopy_iter_stream()
>> net: optimise ipcm6 cookie init
>> udp/ipv6: refactor udpv6_sendmsg udplite checks
>> udp/ipv6: move pending section of udpv6_sendmsg
>> udp/ipv6: prioritise the ip6 path over ip4 checks
>> udp/ipv6: optimise udpv6_sendmsg() daddr checks
>> udp/ipv6: optimise out daddr reassignment
>> udp/ipv6: clean up udpv6_sendmsg's saddr init
>> ipv6: refactor opts push in __ip6_make_skb()
>> ipv6: improve opt-less __ip6_make_skb()
>> ipv6: clean up ip6_setup_cork
>>
>> drivers/net/xen-netback/interface.c | 3 +-
>> include/linux/netdevice.h | 27 ++++-
>> include/linux/skbuff.h | 102 +++++++++++++-----
>> include/net/ipv6.h | 37 ++++---
>> include/net/sock.h | 10 +-
>> net/core/datagram.c | 2 -
>> net/core/datagram.h | 15 ---
>> net/core/dev.c | 28 ++---
>> net/core/skbuff.c | 59 ++++-------
>> net/core/sock.c | 50 +++++++--
>> net/ipv4/ip_output.c | 10 +-
>> net/ipv4/tcp.c | 5 +-
>> net/ipv6/datagram.c | 4 +-
>> net/ipv6/exthdrs.c | 15 ++-
>> net/ipv6/ip6_output.c | 88 ++++++++--------
>> net/ipv6/output_core.c | 12 ---
>> net/ipv6/raw.c | 8 +-
>> net/ipv6/udp.c | 158 +++++++++++++---------------
>> net/l2tp/l2tp_ip6.c | 8 +-
>> 19 files changed, 339 insertions(+), 302 deletions(-)
>> delete mode 100644 net/core/datagram.h
>>
>> --
>> 2.35.1
>>
--
Pavel Begunkov
prev parent reply other threads:[~2022-04-11 12:04 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-03 13:06 [RFC net-next 00/27] net and/or udp optimisations Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 01/27] sock: deduplicate ->sk_wmem_alloc check Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 02/27] sock: optimise sock_def_write_space send refcounting Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 03/27] sock: optimise sock_def_write_space barriers Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 04/27] skbuff: drop zero check from skb_zcopy_set Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 05/27] skbuff: drop null check from skb_zcopy Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 06/27] net: xen: set zc flags only when there is ubuf Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 07/27] skbuff: introduce skb_is_zcopy() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 08/27] skbuff: optimise alloc_skb_with_frags() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 09/27] net: inline sock_alloc_send_skb Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 10/27] net: inline part of skb_csum_hwoffload_help Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 11/27] net: inline skb_zerocopy_iter_dgram Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 12/27] ipv6: inline ip6_local_out() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 13/27] ipv6: help __ip6_finish_output() inlining Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 14/27] ipv6: refactor ip6_finish_output2() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 15/27] net: inline dev_queue_xmit() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 16/27] ipv6: partially inline fl6_update_dst() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 17/27] tcp: optimise skb_zerocopy_iter_stream() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 18/27] net: optimise ipcm6 cookie init Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 19/27] udp/ipv6: refactor udpv6_sendmsg udplite checks Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 20/27] udp/ipv6: move pending section of udpv6_sendmsg Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 21/27] udp/ipv6: prioritise the ip6 path over ip4 checks Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 22/27] udp/ipv6: optimise udpv6_sendmsg() daddr checks Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 23/27] udp/ipv6: optimise out daddr reassignment Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 24/27] udp/ipv6: clean up udpv6_sendmsg's saddr init Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 25/27] ipv6: refactor opts push in __ip6_make_skb() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 26/27] ipv6: improve opt-less __ip6_make_skb() Pavel Begunkov
2022-04-03 13:06 ` [PATCH net-next 27/27] ipv6: clean up ip6_setup_cork Pavel Begunkov
2022-04-06 9:44 ` [RFC net-next 00/27] net and/or udp optimisations Eric Dumazet
2022-04-11 12:04 ` Pavel Begunkov [this message]
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 \
--in-reply-to=f0a8e790-aff5-db72-d42e-1cbfe711a092@gmail.com \
--to=asml.silence@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=paul@xen.org \
--cc=wei.liu@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.