From: Yuchung Cheng <ych...@google.com> Date: Mon, 11 Dec 2017 15:42:53 -0800
> From: Neal Cardwell <ncardw...@google.com> > > 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: Steve Ibanez <siba...@stanford.edu> > Signed-off-by: Neal Cardwell <ncardw...@google.com> > Signed-off-by: Yuchung Cheng <ych...@google.com> > Reviewed-by: Nandita Dukkipati <nandi...@google.com> > Reviewed-by: Eric Dumazet <eduma...@google.com> Applied, thanks.