• Neal Cardwell's avatar
    tcp: allow TLP in ECN CWR · b4f70c3d
    Neal Cardwell authored
    This patch enables tail loss probe in cwnd reduction (CWR) state
    to detect potential losses. Prior to this patch, since the sender
    uses PRR to determine the cwnd in CWR state, the combination of
    CWR+PRR plus tcp_tso_should_defer() could cause unnecessary stalls
    upon losses: PRR makes cwnd so gentle that tcp_tso_should_defer()
    defers sending wait for more ACKs. The ACKs may not come due to
    packet losses.
    
    Disallowing TLP when there is unused cwnd had the primary effect
    of disallowing TLP when there is TSO deferral, Nagle deferral,
    or we hit the rwin limit. Because basically every application
    write() or incoming ACK will cause us to run tcp_write_xmit()
    to see if we can send more, and then if we sent something we call
    tcp_schedule_loss_probe() to see if we should schedule a TLP. At
    that point, there are a few common reasons why some cwnd budget
    could still be unused:
    
    (a) rwin limit
    (b) nagle check
    (c) TSO deferral
    (d) TSQ
    
    For (d), after the next packet tx completion the TSQ mechanism
    will allow us to send more packets, so we don't really need a
    TLP (in practice it shouldn't matter whether we schedule one
    or not). But for (a), (b), (c) the sender won't send any more
    packets until it gets another ACK. But if the whole flight was
    lost, or all the ACKs were lost, then we won't get any more ACKs,
    and ideally we should schedule and send a TLP to get more feedback.
    In particular for a long time we have wanted some kind of timer for
    TSO deferral, and at least this would give us some kind of timer
    Reported-by: default avatarSteve Ibanez <sibanez@stanford.edu>
    Signed-off-by: default avatarNeal Cardwell <ncardwell@google.com>
    Signed-off-by: default avatarYuchung Cheng <ycheng@google.com>
    Reviewed-by: default avatarNandita Dukkipati <nanditad@google.com>
    Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b4f70c3d
tcp_output.c 108 KB