• Paolo Abeni's avatar
    openvswitch: do not propagate headroom updates to internal port · 183dea58
    Paolo Abeni authored
    After commit 3a927bc7 ("ovs: propagate per dp max headroom to
    all vports") the need_headroom for the internal vport is updated
    accordingly to the max needed headroom in its datapath.
    
    That avoids the pskb_expand_head() costs when sending/forwarding
    packets towards tunnel devices, at least for some scenarios.
    
    We still require such copy when using the ovs-preferred configuration
    for vxlan tunnels:
    
        br_int
      /       \
    tap      vxlan
               (remote_ip:X)
    
    br_phy
         \
        NIC
    
    where the route towards the IP 'X' is via 'br_phy'.
    
    When forwarding traffic from the tap towards the vxlan device, we
    will call pskb_expand_head() in vxlan_build_skb() because
    br-phy->needed_headroom is equal to tun->needed_headroom.
    
    With this change we avoid updating the internal vport needed_headroom,
    so that in the above scenario no head copy is needed, giving 5%
    performance improvement in UDP throughput test.
    
    As a trade-off, packets sent from the internal port towards a tunnel
    device will now experience the head copy overhead. The rationale is
    that the latter use-case is less relevant performance-wise.
    Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
    Acked-by: default avatarPravin B Shelar <pshelar@ovn.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    183dea58
vport-internal_dev.c 7.41 KB