• Eric Dumazet's avatar
    tcp: tso: restore IW10 after TSO autosizing · 50c8339e
    Eric Dumazet authored
    With sysctl_tcp_min_tso_segs being 4, it is very possible
    that tcp_tso_should_defer() decides not sending last 2 MSS
    of initial window of 10 packets. This also applies if
    autosizing decides to send X MSS per GSO packet, and cwnd
    is not a multiple of X.
    
    This patch implements an heuristic based on age of first
    skb in write queue : If it was sent very recently (less than half srtt),
    we can predict that no ACK packet will come in less than half rtt,
    so deferring might cause an under utilization of our window.
    
    This is visible on initial send (IW10) on web servers,
    but more generally on some RPC, as the last part of the message
    might need an extra RTT to get delivered.
    
    Tested:
    
    Ran following packetdrill test
    // A simple server-side test that sends exactly an initial window (IW10)
    // worth of packets.
    
    `sysctl -e -q net.ipv4.tcp_min_tso_segs=4`
    
    0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
    +0    setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
    +0    bind(3, ..., ...) = 0
    +0    listen(3, 1) = 0
    
    +.1   < S 0:0(0) win 32792 <mss 1460,sackOK,nop,nop,nop,wscale 7>
    +0    > S. 0:0(0) ack 1 <mss 1460,nop,nop,sackOK,nop,wscale 6>
    +.1   < . 1:1(0) ack 1 win 257
    +0    accept(3, ..., ...) = 4
    
    +0    write(4, ..., 14600) = 14600
    +0    > . 1:5841(5840) ack 1 win 457
    +0    > . 5841:11681(5840) ack 1 win 457
    // Following packet should be sent right now.
    +0    > P. 11681:14601(2920) ack 1 win 457
    
    +.1   < . 1:1(0) ack 14601 win 257
    
    +0    close(4) = 0
    +0    > F. 14601:14601(0) ack 1
    +.1   < F. 1:1(0) ack 14602 win 257
    +0    > . 14602:14602(0) ack 2
    Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    50c8339e
tcp_output.c 98.1 KB