udp: try to avoid 2 cache miss on dequeue
authorPaolo Abeni <pabeni@redhat.com>
Mon, 12 Jun 2017 09:23:43 +0000 (11:23 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 12 Jun 2017 14:01:29 +0000 (10:01 -0400)
commitb65ac44674dd9c9c1ad11ebb3ec9e8882990bdb4
tree0378a13224c5045bedeee8a4d0b57e579e45de46
parent0a463c78d25b9464b77311d9dda297550a2d6aa5
udp: try to avoid 2 cache miss on dequeue

when udp_recvmsg() is executed, on x86_64 and other archs, most skb
fields are on cold cachelines.
If the skb are linear and the kernel don't need to compute the udp
csum, only a handful of skb fields are required by udp_recvmsg().
Since we already use skb->dev_scratch to cache hot data, and
there are 32 bits unused on 64 bit archs, use such field to cache
as much data as we can, and try to prefetch on dequeue the relevant
fields that are left out.

This can save up to 2 cache miss per packet.

v1 -> v2:
  - changed udp_dev_scratch fields types to u{32,16} variant,
    replaced bitfiled with bool

Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/udp.c