udp: enable busy polling for all sockets
authorEric Dumazet <edumazet@google.com>
Wed, 16 Nov 2016 17:10:42 +0000 (09:10 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 18 Nov 2016 15:44:31 +0000 (10:44 -0500)
commite68b6e50fa359cc5aad4d2f8ac2bdbc1a8f4fd59
tree7a0dbf2b9d469d6ea24f7aef3e53f03c18d62158
parentfcd2b0da730fab9b125296e859716c9652614721
udp: enable busy polling for all sockets

UDP busy polling is restricted to connected UDP sockets.

This is because sk_busy_loop() only takes care of one NAPI context.

There are cases where it could be extended.

1) Some hosts receive traffic on a single NIC, with one RX queue.

2) Some applications use SO_REUSEPORT and associated BPF filter
   to split the incoming traffic on one UDP socket per RX
queue/thread/cpu

3) Some UDP sockets are used to send/receive traffic for one flow, but
they do not bother with connect()

This patch records the napi_id of first received skb, giving more
reach to busy polling.

Tested:

lpaa23:~# echo 70 >/proc/sys/net/core/busy_read
lpaa24:~# echo 70 >/proc/sys/net/core/busy_read

lpaa23:~# for f in `seq 1 10`; do ./super_netperf 1 -H lpaa24 -t UDP_RR -l 5; done

Before patch :
   27867   28870   37324   41060   41215
   36764   36838   44455   41282   43843
After patch :
   73920   73213   70147   74845   71697
   68315   68028   75219   70082   73707

Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/busy_poll.h
net/ipv4/udp.c
net/ipv6/udp.c