• Jacob Keller's avatar
    i40e: ignore skb->xmit_more when deciding to set RS bit · a5340d93
    Jacob Keller authored
    Since commit 6a7fded7 ("i40e: Fix RS bit update in Tx path and
    disable force WB workaround") we've tried to "optimize" setting the
    RS bit based around skb->xmit_more. This same logic was refactored
    in commit 1dc8b538 ("i40e: Reorder logic for coalescing RS bits"),
    but ultimately was not functionally changed.
    
    Using skb->xmit_more in this way is incorrect, because in certain
    circumstances we may see a large number of skbs in sequence with
    xmit_more set. This leads to a performance loss as the hardware does not
    writeback anything for those packets, which delays the time it takes for
    us to respond to the stack transmit requests. This significantly impacts
    UDP performance, especially when layered with multiple devices, such as
    bonding, VLANs, and vnet setups.
    
    This was not noticed until now because it is difficult to create a setup
    which reproduces the issue. It was discovered in a UDP_STREAM test in
    a VM, connected using a vnet device to a bridge, which is connected to
    a bonded pair of X710 ports in active-backup mode with a VLAN. These
    layered devices seem to compound the number of skbs transmitted at once
    by the qdisc. Additionally, the problem can be masked by reducing the
    ITR value.
    
    Since the original commit does not provide strong justification for this
    RS bit "optimization", revert to the previous behavior of setting the RS
    bit every 4th packet.
    Signed-off-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    a5340d93
i40e_txrx.c 94.7 KB