• Eric Dumazet's avatar
    net: allow BH servicing in sk_busy_loop() · 2a028ecb
    Eric Dumazet authored
    Instead of blocking BH in whole sk_busy_loop(), block them
    only around ->ndo_busy_poll() calls.
    
    This has many benefits.
    
    1) allow tunneled traffic to use busy poll as well as native traffic.
       Tunnels handlers usually call netif_rx() and depend on net_rx_action()
       being run (from sofirq handler)
    
    2) allow RFS/RPS being used (sending IPI to other cpus if needed)
    
    3) use the 'lets burn cpu cycles' budget to do useful work
       (like TX completions, timers, RCU callbacks...)
    
    4) reduce BH latencies, making busy poll a better citizen.
    
    Tested:
    
    Tested with SIT tunnel
    
    lpaa5:~# echo 0 >/proc/sys/net/core/busy_read
    lpaa5:~# ./netperf -H 2002:af6:786::1 -t TCP_RR
    MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to 2002:af6:786::1 () port 0 AF_INET6 : first burst 0
    Local /Remote
    Socket Size   Request  Resp.   Elapsed  Trans.
    Send   Recv   Size     Size    Time     Rate
    bytes  Bytes  bytes    bytes   secs.    per sec
    
    16384  87380  1        1       10.00    37373.93
    16384  87380
    
    Now enable busy poll on both hosts
    
    lpaa5:~# echo 70 >/proc/sys/net/core/busy_read
    lpaa6:~# echo 70 >/proc/sys/net/core/busy_read
    
    lpaa5:~# ./netperf -H 2002:af6:786::1 -t TCP_RR
    MIGRATED TCP REQUEST/RESPONSE TEST from ::0 (::) port 0 AF_INET6 to 2002:af6:786::1 () port 0 AF_INET6 : first burst 0
    Local /Remote
    Socket Size   Request  Resp.   Elapsed  Trans.
    Send   Recv   Size     Size    Time     Rate
    bytes  Bytes  bytes    bytes   secs.    per sec
    
    16384  87380  1        1       10.00    58314.77
    16384  87380
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    2a028ecb
dev.c 195 KB