• Neal Cardwell's avatar
    tcp_bbr: fix bw probing to raise in-flight data for very small BDPs · b3e349fd
    Neal Cardwell authored
    [ Upstream commit 383d4709 ]
    
    For some very small BDPs (with just a few packets) there was a
    quantization effect where the target number of packets in flight
    during the super-unity-gain (1.25x) phase of gain cycling was
    implicitly truncated to a number of packets no larger than the normal
    unity-gain (1.0x) phase of gain cycling. This meant that in multi-flow
    scenarios some flows could get stuck with a lower bandwidth, because
    they did not push enough packets inflight to discover that there was
    more bandwidth available. This was really only an issue in multi-flow
    LAN scenarios, where RTTs and BDPs are low enough for this to be an
    issue.
    
    This fix ensures that gain cycling can raise inflight for small BDPs
    by ensuring that in PROBE_BW mode target inflight values with a
    super-unity gain are always greater than inflight values with a gain
    <= 1. Importantly, this applies whether the inflight value is
    calculated for use as a cwnd value, or as a target inflight value for
    the end of the super-unity phase in bbr_is_next_cycle_phase() (both
    need to be bigger to ensure we can probe with more packets in flight
    reliably).
    
    This is a candidate fix for stable releases.
    
    Fixes: 0f8782ea ("tcp_bbr: add BBR congestion control")
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Acked-by: default avatarYuchung Cheng <ycheng@google.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Acked-by: default avatarPriyaranjan Jha <priyarjha@google.com>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    b3e349fd
tcp_bbr.c 32.9 KB