• Yuchung Cheng's avatar
    tcp: remove cwnd moderation after recovery · 23492623
    Yuchung Cheng authored
    For non-SACK connections, cwnd is lowered to inflight plus 3 packets
    when the recovery ends. This is an optional feature in the NewReno
    RFC 2582 to reduce the potential burst when cwnd is "re-opened"
    after recovery and inflight is low.
    
    This feature is questionably effective because of PRR: when
    the recovery ends (i.e., snd_una == high_seq) NewReno holds the
    CA_Recovery state for another round trip to prevent false fast
    retransmits. But if the inflight is low, PRR will overwrite the
    moderated cwnd in tcp_cwnd_reduction() later regardlessly. So if a
    receiver responds bogus ACKs (i.e., acking future data) to speed up
    transfer after recovery, it can only induce a burst up to a window
    worth of data packets by acking up to SND.NXT. A restart from (short)
    idle or receiving streched ACKs can both cause such bursts as well.
    
    On the other hand, if the recovery ends because the sender
    detects the losses were spurious (e.g., reordering). This feature
    unconditionally lowers a reverted cwnd even though nothing
    was lost.
    
    By principle loss recovery module should not update cwnd. Further
    pacing is much more effective to reduce burst. Hence this patch
    removes the cwnd moderation feature.
    
    v2 changes: revised commit message on bogus ACKs and burst, and
                missing signature
    Signed-off-by: default avatarMatt Mathis <mattmathis@google.com>
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    23492623
tcp_input.c 181 KB