Message ID | 20220519003410.2531936-1-ycheng@google.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 9ad084d666194c20a30e3589cbfaf971dae55c24 |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] tcp: improve PRR loss recovery | expand |
Hello: This patch was applied to netdev/net-next.git (master) by Jakub Kicinski <kuba@kernel.org>: On Wed, 18 May 2022 17:34:10 -0700 you wrote: > This patch improves TCP PRR loss recovery behavior for a corner > case. Previously during PRR conservation-bound mode, it strictly > sends the amount equals to the amount newly acked or s/acked. > > The patch changes s.t. PRR may send additional amount that was banked > previously (e.g. application-limited) in the conservation-bound > mode, similar to the slow-start mode. This unifies and simplifies the > algorithm further and may improve the recovery latency. This change > still follow the general packet conservation design principle and > always keep inflight/cwnd below the slow start threshold set > by the congestion control module. > > [...] Here is the summary with links: - [net-next] tcp: improve PRR loss recovery https://git.kernel.org/netdev/net-next/c/9ad084d66619 You are awesome, thank you!
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 97cfcd85f84e..3231af73e430 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c @@ -2620,12 +2620,12 @@ void tcp_cwnd_reduction(struct sock *sk, int newly_acked_sacked, int newly_lost, u64 dividend = (u64)tp->snd_ssthresh * tp->prr_delivered + tp->prior_cwnd - 1; sndcnt = div_u64(dividend, tp->prior_cwnd) - tp->prr_out; - } else if (flag & FLAG_SND_UNA_ADVANCED && !newly_lost) { - sndcnt = min_t(int, delta, - max_t(int, tp->prr_delivered - tp->prr_out, - newly_acked_sacked) + 1); } else { - sndcnt = min(delta, newly_acked_sacked); + sndcnt = max_t(int, tp->prr_delivered - tp->prr_out, + newly_acked_sacked); + if (flag & FLAG_SND_UNA_ADVANCED && !newly_lost) + sndcnt++; + sndcnt = min(delta, sndcnt); } /* Force a fast retransmit upon entering fast recovery */ sndcnt = max(sndcnt, (tp->prr_out ? 0 : 1));