tcp: use PRR to reduce cwin in CWR state
Use proportional rate reduction (PRR) algorithm to reduce cwnd in CWR state, in addition to Recovery state. Retire the current rate-halving in CWR. When losses are detected via ACKs in CWR state, the sender enters Recovery state but the cwnd reduction continues and does not restart. Rename and refactor cwnd reduction functions since both CWR and Recovery use the same algorithm: tcp_init_cwnd_reduction() is new and initiates reduction state variables. tcp_cwnd_reduction() is previously tcp_update_cwnd_in_recovery(). tcp_ends_cwnd_reduction() is previously tcp_complete_cwr(). The rate halving functions and logic such as tcp_cwnd_down(), tcp_min_cwnd(), and the cwnd moderation inside tcp_enter_cwr() are removed. The unused parameter, flag, in tcp_cwnd_reduction() is also removed. Signed-off-by: Yuchung Cheng <ycheng@google.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
fb4d3d1df3
commit
684bad1107
@@ -913,15 +913,21 @@ static inline bool tcp_in_initial_slowstart(const struct tcp_sock *tp)
|
||||
return tp->snd_ssthresh >= TCP_INFINITE_SSTHRESH;
|
||||
}
|
||||
|
||||
static inline bool tcp_in_cwnd_reduction(const struct sock *sk)
|
||||
{
|
||||
return (TCPF_CA_CWR | TCPF_CA_Recovery) &
|
||||
(1 << inet_csk(sk)->icsk_ca_state);
|
||||
}
|
||||
|
||||
/* If cwnd > ssthresh, we may raise ssthresh to be half-way to cwnd.
|
||||
* The exception is rate halving phase, when cwnd is decreasing towards
|
||||
* The exception is cwnd reduction phase, when cwnd is decreasing towards
|
||||
* ssthresh.
|
||||
*/
|
||||
static inline __u32 tcp_current_ssthresh(const struct sock *sk)
|
||||
{
|
||||
const struct tcp_sock *tp = tcp_sk(sk);
|
||||
|
||||
if ((1 << inet_csk(sk)->icsk_ca_state) & (TCPF_CA_CWR | TCPF_CA_Recovery))
|
||||
if (tcp_in_cwnd_reduction(sk))
|
||||
return tp->snd_ssthresh;
|
||||
else
|
||||
return max(tp->snd_ssthresh,
|
||||
|
Reference in New Issue
Block a user