• Yuchung Cheng's avatar
    tcp: disable fack by default · 94bdc978
    Yuchung Cheng authored
    This patch disables FACK by default as RACK is the successor of FACK
    (inspired by the insights behind FACK).
    
    FACK[1] in Linux works as follows: a packet P is deemed lost,
    if packet Q of higher sequence is s/acked and P and Q are distant
    by at least dupthresh number of packets in sequence space.
    
    FACK is more aggressive than the IETF recommened recovery for SACK
    (RFC3517 A Conservative Selective Acknowledgment (SACK)-based Loss
     Recovery Algorithm for TCP), because a single SACK may trigger
    fast recovery. This obviously won't work well with reordering so
    FACK is dynamically disabled upon detecting reordering.
    
    RACK supersedes FACK by using time distance instead of sequence
    distance. On reordering, RACK waits for a quarter of RTT receiving
    a single SACK before starting recovery. (the timer can be made more
    adaptive in the future by measuring reordering distance in time,
    but currently RTT/4 seem to work well.) Once the recovery starts,
    RACK behaves almost like FACK because it reduces the reodering
    window to 1ms, so it fast retransmits quickly. In addition RACK
    can detect loss retransmission as it does not care about the packet
    sequences (being repeated or not), which is extremely useful when
    the connection is going through a traffic policer.
    
    Google server experiments indicate that disabling FACK after enabling
    RACK has negligible impact on the overall loss recovery performance
    with more reordering events detected.  But we still keep the FACK
    implementation for backup if RACK has bugs that needs to be disabled.
    
    [1] M. Mathis, J. Mahdavi, "Forward Acknowledgment: Refining
    TCP Congestion Control," In Proceedings of SIGCOMM '96, August 1996.
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Acked-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    94bdc978
tcp_input.c 182 KB