• Eric Dumazet's avatar
    tcp: smoother receiver autotuning · c3916ad9
    Eric Dumazet authored
    Back in linux-3.13 (commit b0983d3c ("tcp: fix dynamic right sizing"))
    I addressed the pressing issues we had with receiver autotuning.
    
    But DRS suffers from extra latencies caused by rcv_rtt_est.rtt_us
    drifts. One common problem happens during slow start, since the
    apparent RTT measured by the receiver can be inflated by ~50%,
    at the end of one packet train.
    
    Also, a single drop can delay read() calls by one RTT, meaning
    tcp_rcv_space_adjust() can be called one RTT too late.
    
    By replacing the tri-modal heuristic with a continuous function,
    we can offset the effects of not growing 'at the optimal time'.
    
    The curve of the function matches prior behavior if the space
    increased by 25% and 50% exactly.
    
    Cost of added multiply/divide is small, considering a TCP flow
    typically would run this part of the code few times in its life.
    
    I tested this patch with 100 ms RTT / 1% loss link, 100 runs
    of (netperf -l 5), and got an average throughput of 4600 Mbit
    instead of 1700 Mbit.
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Acked-by: default avatarSoheil Hassas Yeganeh <soheil@google.com>
    Acked-by: default avatarWei Wang <weiwan@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    c3916ad9
tcp_input.c 180 KB