• Eric Dumazet's avatar
    tcp: tso: allow CA_CWR state in tcp_tso_should_defer() · a0ea700e
    Eric Dumazet authored
    Another TCP issue is triggered by ECN.
    
    Under pressure, receiver gets ECN marks, and send back ACK packets
    with ECE TCP flag. Senders enter CA_CWR state.
    
    In this state, tcp_tso_should_defer() is short cut :
    
    if (icsk->icsk_ca_state != TCP_CA_Open)
        goto send_now;
    
    This means that about all ACK packets we receive are triggering
    a partial send, and because cwnd is kept small, we can only send
    a small amount of data for each incoming ACK,
    which in return generate more ACK packets.
    
    Allowing CA_Open and CA_CWR states to enable TSO defer in
    tcp_tso_should_defer() brings performance back :
    TSO autodefer has more chance to defer under pressure.
    
    This patch increases TSO and LRO/GRO efficiency back to normal levels,
    and does not impact overall ECN behavior.
    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>
    a0ea700e
tcp_output.c 98.1 KB