From: Paolo Abeni <pabeni@redhat.com>
To: Eric Dumazet <eric.dumazet@gmail.com>
Cc: David Miller <davem@davemloft.net>, netdev <netdev@vger.kernel.org>
Subject: Re: [PATCH net-next] udp: avoid one cache line miss in recvmsg()
Date: Mon, 21 Nov 2016 22:36:48 +0100 [thread overview]
Message-ID: <1479764208.5596.0.camel@redhat.com> (raw)
In-Reply-To: <1479518283.8455.312.camel@edumazet-glaptop3.roam.corp.google.com>
On Fri, 2016-11-18 at 17:18 -0800, Eric Dumazet wrote:
> From: Eric Dumazet <edumazet@google.com>
>
> UDP_SKB_CB(skb)->partial_cov is located at offset 66 in skb,
> requesting a cold cache line being read in cpu cache.
>
> We can avoid this cache line miss for UDP sockets,
> as partial_cov has a meaning only for UDPLite.
>
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> ---
> net/ipv4/udp.c | 3 ++-
> net/ipv6/udp.c | 3 ++-
> 2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
> index e1fc0116e8d59d8185670c6e55d1219bde55610d..b949770fdc08398a10f3974505a50b2b4f4b2cf3 100644
> --- a/net/ipv4/udp.c
> +++ b/net/ipv4/udp.c
> @@ -1389,7 +1389,8 @@ int udp_recvmsg(struct sock *sk, struct msghdr *msg, size_t len, int noblock,
> * coverage checksum (UDP-Lite), do it before the copy.
> */
>
> - if (copied < ulen || UDP_SKB_CB(skb)->partial_cov || peeking) {
> + if (copied < ulen || peeking ||
> + (is_udplite && UDP_SKB_CB(skb)->partial_cov)) {
> checksum_valid = !udp_lib_checksum_complete(skb);
> if (!checksum_valid)
> goto csum_copy_err;
> diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
> index 4f99417d9b401f2a65c7828e7d6b86d1d6161794..8fd4d89380b86c8630f7fd27ce4e9958497a2b89 100644
> --- a/net/ipv6/udp.c
> +++ b/net/ipv6/udp.c
> @@ -363,7 +363,8 @@ int udpv6_recvmsg(struct sock *sk, struct msghdr *msg, size_t len,
> * coverage checksum (UDP-Lite), do it before the copy.
> */
>
> - if (copied < ulen || UDP_SKB_CB(skb)->partial_cov || peeking) {
> + if (copied < ulen || peeking ||
> + (is_udplite && UDP_SKB_CB(skb)->partial_cov)) {
> checksum_valid = !udp_lib_checksum_complete(skb);
> if (!checksum_valid)
> goto csum_copy_err;
>
>
Nice catch, thank you Eric!
This gives up to 8% speed-up in my performance test (wire speed udp flood
with small packets)
Tested-by: Paolo Abeni <pabeni@redhat.com>
next prev parent reply other threads:[~2016-11-21 21:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-19 1:18 [PATCH net-next] udp: avoid one cache line miss in recvmsg() Eric Dumazet
2016-11-21 16:27 ` David Miller
2016-11-21 21:36 ` Paolo Abeni [this message]
2016-11-21 22:01 ` Eric Dumazet
2016-11-21 22:05 ` Eric Dumazet
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=1479764208.5596.0.camel@redhat.com \
--to=pabeni@redhat.com \
--cc=davem@davemloft.net \
--cc=eric.dumazet@gmail.com \
--cc=netdev@vger.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.