sock: avoid dirtying sk_stamp, if possible
authorPaolo Abeni <pabeni@redhat.com>
Thu, 30 Mar 2017 12:03:06 +0000 (14:03 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 31 Mar 2017 03:05:24 +0000 (20:05 -0700)
commit6c7c98bad4883a4a8710c96b2b44de482865eb6e
tree0995daa9a97afde4b675dea6054701d04404a3ac
parent7801a3225e7fe05f7601ab42a5669ba633c4df54
sock: avoid dirtying sk_stamp, if possible

sock_recv_ts_and_drops() unconditionally set sk->sk_stamp for
every packet, even if the SOCK_TIMESTAMP flag is not set in the
related socket.
If selinux is enabled, this cause a cache miss for every packet
since sk->sk_stamp and sk->sk_security share the same cacheline.
With this change sk_stamp is set only if the SOCK_TIMESTAMP
flag is set, and is cleared for the first packet, so that the user
perceived behavior is unchanged.

This gives up to 5% speed-up under udp-flood with small packets.

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