tun: enable NAPI for TUN/TAP driver
authorPetar Penkov <peterpenkov96@gmail.com>
Fri, 22 Sep 2017 20:49:14 +0000 (13:49 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Sep 2017 03:16:13 +0000 (20:16 -0700)
commit943170998b200190f99d3fe7e771437e2c51f319
tree52b67ebd297eb5996e93b9682f820e8ea5a9612d
parente94cd8113ce63bca34040aae52d0603baf6ec07c
tun: enable NAPI for TUN/TAP driver

Changes TUN driver to use napi_gro_receive() upon receiving packets
rather than netif_rx_ni(). Adds flag IFF_NAPI that enables these
changes and operation is not affected if the flag is disabled.  SKBs
are constructed upon packet arrival and are queued to be processed
later.

The new path was evaluated with a benchmark with the following setup:
Open two tap devices and a receiver thread that reads in a loop for
each device. Start one sender thread and pin all threads to different
CPUs. Send 1M minimum UDP packets to each device and measure sending
time for each of the sending methods:
napi_gro_receive(): 4.90s
netif_rx_ni(): 4.90s
netif_receive_skb(): 7.20s

Signed-off-by: Petar Penkov <peterpenkov96@gmail.com>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Mahesh Bandewar <maheshb@google.com>
Cc: Willem de Bruijn <willemb@google.com>
Cc: davem@davemloft.net
Cc: ppenkov@stanford.edu
Acked-by: Mahesh Bandewar <maheshb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/tun.c
include/uapi/linux/if_tun.h