• John Fastabend's avatar
    ixgbe: DCB set PFC high and low water marks per data sheet specs · 16b61beb
    John Fastabend authored
    Currently the high and low water marks for PFC are being set
    conservatively for jumbo frames. This means the RX buffers
    are being underutilized in the default 1500 MTU. This patch
    fixes this so that the water marks are set as described in
    the data sheet considering the MTU size.
    
    The equation used is,
    
    RTT * 1.44 + MTU * 1.44 + MTU
    
    Where RTT is the round trip time and MTU is the max frame size
    in KB. To avoid floating point arithmetic FC_HIGH_WATER is
    defined
    
    ((((RTT + MTU) * 144) + 99) / 100) + MTU
    
    This changes how the hardware field fc.low_water and
    fc.high_water are used. With this change they are no longer
    storing the actual low water and high water markers but are
    storing the required head room in the buffer. This simplifies
    the logic and we do not need to account for the size of the
    buffer when setting the thresholds.
    
    Testing with iperf and 16 threads showed a slight uptick in
    throughput over a single traffic class .1-.2Gbps and a reduction
    in pause frames. Without the patch a 30 second run would show
    ~10-15 pause frames being transmitted with the patch ~2-5 are
    seen. Test were run back to back with 82599.
    
    Note RXPBSIZE is in KB and low and high water marks fields are
    also in KB. However the FCRT* registers are 32B granularity and
    right shifted 5 into the register,
    
    (((rx_pbsize - water_mark) * 1024) / 32) << 5
    
    is the most explicit conversion here we simplify
    
    (rx_pbsize - water_mark) * 32 << 5 = (rx_pbsize - water_mark) << 10
    
    This patch updates the PFC thresholds and legacy FC thresholds.
    Signed-off-by: default avatarJohn Fastabend <john.r.fastabend@intel.com>
    Tested-by: default avatarRoss Brattain <ross.b.brattain@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    16b61beb
ixgbe.h 17.8 KB