tcp: fix stretch ACK bugs in Scalable
Change Scalable to properly handle stretch ACKs in additive increase mode by passing in the count of ACKed packets to tcp_cong_avoid_ai(). In addition, because we are now precisely accounting for stretch ACKs, including delayed ACKs, we can now change TCP_SCALABLE_AI_CNT to 100. Signed-off-by: Pengcheng Yang <yangpc@wangsu.com> Acked-by: Neal Cardwell <ncardwell@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
be0d935ebf
commit
5415e3c37a
@ -10,10 +10,9 @@
|
||||
#include <net/tcp.h>
|
||||
|
||||
/* These factors derived from the recommended values in the aer:
|
||||
* .01 and and 7/8. We use 50 instead of 100 to account for
|
||||
* delayed ack.
|
||||
* .01 and and 7/8.
|
||||
*/
|
||||
#define TCP_SCALABLE_AI_CNT 50U
|
||||
#define TCP_SCALABLE_AI_CNT 100U
|
||||
#define TCP_SCALABLE_MD_SCALE 3
|
||||
|
||||
static void tcp_scalable_cong_avoid(struct sock *sk, u32 ack, u32 acked)
|
||||
@ -23,11 +22,13 @@ static void tcp_scalable_cong_avoid(struct sock *sk, u32 ack, u32 acked)
|
||||
if (!tcp_is_cwnd_limited(sk))
|
||||
return;
|
||||
|
||||
if (tcp_in_slow_start(tp))
|
||||
tcp_slow_start(tp, acked);
|
||||
else
|
||||
tcp_cong_avoid_ai(tp, min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT),
|
||||
1);
|
||||
if (tcp_in_slow_start(tp)) {
|
||||
acked = tcp_slow_start(tp, acked);
|
||||
if (!acked)
|
||||
return;
|
||||
}
|
||||
tcp_cong_avoid_ai(tp, min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT),
|
||||
acked);
|
||||
}
|
||||
|
||||
static u32 tcp_scalable_ssthresh(struct sock *sk)
|
||||
|
Loading…
Reference in New Issue
Block a user