• Eric Dumazet's avatar
    tcp: reduce the bloat caused by tcp_is_cwnd_limited() · d10473d4
    Eric Dumazet authored
    tcp_is_cwnd_limited() allows GSO/TSO enabled flows to increase
    their cwnd to allow a full size (64KB) TSO packet to be sent.
    
    Non GSO flows only allow an extra room of 3 MSS.
    
    For most flows with a BDP below 10 MSS, this results in a bloat
    of cwnd reaching 90, and an inflate of RTT.
    
    Thanks to TSO auto sizing, we can restrict the bloat to the number
    of MSS contained in a TSO packet (tp->xmit_size_goal_segs), to keep
    original intent without performance impact.
    
    Because we keep cwnd small, it helps to keep TSO packet size to their
    optimal value.
    
    Example for a 10Mbit flow, with low TCP Small queue limits (no more than
    2 skb in qdisc/device tx ring)
    
    Before patch :
    
    lpk51:~# ./ss -i dst lpk52:44862 | grep cwnd
             cubic wscale:6,6 rto:215 rtt:15.875/2.5 mss:1448 cwnd:96
    ssthresh:96
    send 70.1Mbps unacked:14 rcv_space:29200
    
    After patch :
    
    lpk51:~# ./ss -i dst lpk52:52916 | grep cwnd
             cubic wscale:6,6 rto:206 rtt:5.206/0.036 mss:1448 cwnd:15
    ssthresh:14
    send 33.4Mbps unacked:4 rcv_space:29200
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Cc: Nandita Dukkipati <nanditad@google.com>
    Cc: Van Jacobson <vanj@google.com>
    Acked-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    d10473d4
tcp_cong.c 9.71 KB