• Jason Wang's avatar
    vhost_net: batch submitting XDP buffers to underlayer sockets · 0a0be13b
    Jason Wang authored
    This patch implements XDP batching for vhost_net. The idea is first to
    try to do userspace copy and build XDP buff directly in vhost. Instead
    of submitting the packet immediately, vhost_net will batch them in an
    array and submit every 64 (VHOST_NET_BATCH) packets to the under layer
    sockets through msg_control of sendmsg().
    
    When XDP is enabled on the TUN/TAP, TUN/TAP can process XDP inside a
    loop without caring GUP thus it can do batch map flushing. When XDP is
    not enabled or not supported, the underlayer socket need to build skb
    and pass it to network core. The batched packet submission allows us
    to do batching like netif_receive_skb_list() in the future.
    
    This saves lots of indirect calls for better cache utilization. For
    the case that we can't so batching e.g when sndbuf is limited or
    packet size is too large, we will go for usual one packet per
    sendmsg() way.
    
    Doing testpmd on various setups gives us:
    
    Test                /+pps%
    XDP_DROP on TAP     /+44.8%
    XDP_REDIRECT on TAP /+29%
    macvtap (skb)       /+26%
    
    Netperf tests shows obvious improvements for small packet transmission:
    
    size/session/+thu%/+normalize%
       64/     1/   +2%/    0%
       64/     2/   +3%/   +1%
       64/     4/   +7%/   +5%
       64/     8/   +8%/   +6%
      256/     1/   +3%/    0%
      256/     2/  +10%/   +7%
      256/     4/  +26%/  +22%
      256/     8/  +27%/  +23%
      512/     1/   +3%/   +2%
      512/     2/  +19%/  +14%
      512/     4/  +43%/  +40%
      512/     8/  +45%/  +41%
     1024/     1/   +4%/    0%
     1024/     2/  +27%/  +21%
     1024/     4/  +38%/  +73%
     1024/     8/  +15%/  +24%
     2048/     1/  +10%/   +7%
     2048/     2/  +16%/  +12%
     2048/     4/    0%/   +2%
     2048/     8/    0%/   +2%
     4096/     1/  +36%/  +60%
     4096/     2/  -11%/  -26%
     4096/     4/    0%/  +14%
     4096/     8/    0%/   +4%
    16384/     1/   -1%/   +5%
    16384/     2/    0%/   +2%
    16384/     4/    0%/   -3%
    16384/     8/    0%/   +4%
    65535/     1/    0%/  +10%
    65535/     2/    0%/   +8%
    65535/     4/    0%/   +1%
    65535/     8/    0%/   +3%
    Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0a0be13b
net.c 42.7 KB