udp: prefetch rmem_alloc in udp_queue_rcv_skb()
authorPaolo Abeni <pabeni@redhat.com>
Wed, 21 Jun 2017 08:24:40 +0000 (10:24 +0200)
committerDavid S. Miller <davem@davemloft.net>
Wed, 21 Jun 2017 15:38:11 +0000 (11:38 -0400)
On UDP packets processing, if the BH is the bottle-neck, it
always sees a cache miss while updating rmem_alloc; try to
avoid it prefetching the value as soon as we have the socket
available.

Performances under flood with multiple NIC rx queues used are
unaffected, but when a single NIC rx queue is in use, this
gives ~10% performance improvement.

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

index f3450f092d71c72c7adf5b208e588f98af8e5a76..067a607917f95683b646e86d6f045ea67e026c3b 100644 (file)
@@ -1949,6 +1949,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb)
                }
        }
 
+       prefetch(&sk->sk_rmem_alloc);
        if (rcu_access_pointer(sk->sk_filter) &&
            udp_lib_checksum_complete(skb))
                        goto csum_error;