All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC
@ 2020-03-13 16:47 Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 2/5] tcp: fix stretch ACK bugs in Scalable Pengcheng Yang
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Pengcheng Yang @ 2020-03-13 16:47 UTC (permalink / raw)
  To: edumazet, davem, ncardwell; +Cc: netdev, Pengcheng Yang

Neal Cardwell submits a series of patches to handle stretched ACKs,
which start with commit e73ebb0881ea ("tcp: stretch ACK fixes prep").

This patch changes BIC to properly handle stretch ACKs in additive
increase mode by passing in the count of ACKed packets to
tcp_cong_avoid_ai().

Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
---
 net/ipv4/tcp_bic.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/net/ipv4/tcp_bic.c b/net/ipv4/tcp_bic.c
index 645cc30..f5f588b 100644
--- a/net/ipv4/tcp_bic.c
+++ b/net/ipv4/tcp_bic.c
@@ -145,12 +145,13 @@ static void bictcp_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 {
-		bictcp_update(ca, tp->snd_cwnd);
-		tcp_cong_avoid_ai(tp, ca->cnt, 1);
+	if (tcp_in_slow_start(tp)) {
+		acked = tcp_slow_start(tp, acked);
+		if (!acked)
+			return;
 	}
+	bictcp_update(ca, tp->snd_cwnd);
+	tcp_cong_avoid_ai(tp, ca->cnt, acked);
 }
 
 /*
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next 2/5] tcp: fix stretch ACK bugs in Scalable
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
@ 2020-03-13 16:47 ` Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 3/5] tcp: stretch ACK fixes in Veno prep Pengcheng Yang
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pengcheng Yang @ 2020-03-13 16:47 UTC (permalink / raw)
  To: edumazet, davem, ncardwell; +Cc: netdev, Pengcheng Yang

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>
---
 net/ipv4/tcp_scalable.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/net/ipv4/tcp_scalable.c b/net/ipv4/tcp_scalable.c
index 471571e..6cebf41 100644
--- a/net/ipv4/tcp_scalable.c
+++ b/net/ipv4/tcp_scalable.c
@@ -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)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next 3/5] tcp: stretch ACK fixes in Veno prep
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 2/5] tcp: fix stretch ACK bugs in Scalable Pengcheng Yang
@ 2020-03-13 16:47 ` Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 4/5] tcp: fix stretch ACK bugs in Veno Pengcheng Yang
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pengcheng Yang @ 2020-03-13 16:47 UTC (permalink / raw)
  To: edumazet, davem, ncardwell; +Cc: netdev, Pengcheng Yang

No code logic has been changed in this patch.

Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
---
 net/ipv4/tcp_veno.c | 44 +++++++++++++++++++++++---------------------
 1 file changed, 23 insertions(+), 21 deletions(-)

diff --git a/net/ipv4/tcp_veno.c b/net/ipv4/tcp_veno.c
index 3b36bb1..857491c 100644
--- a/net/ipv4/tcp_veno.c
+++ b/net/ipv4/tcp_veno.c
@@ -153,31 +153,33 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 		veno->diff = (tp->snd_cwnd << V_PARAM_SHIFT) - target_cwnd;
 
 		if (tcp_in_slow_start(tp)) {
-			/* Slow start.  */
+			/* Slow start. */
 			tcp_slow_start(tp, acked);
+			goto done;
+		}
+
+		/* Congestion avoidance. */
+		if (veno->diff < beta) {
+			/* In the "non-congestive state", increase cwnd
+			 * every rtt.
+			 */
+			tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
 		} else {
-			/* Congestion avoidance. */
-			if (veno->diff < beta) {
-				/* In the "non-congestive state", increase cwnd
-				 *  every rtt.
-				 */
-				tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
-			} else {
-				/* In the "congestive state", increase cwnd
-				 * every other rtt.
-				 */
-				if (tp->snd_cwnd_cnt >= tp->snd_cwnd) {
-					if (veno->inc &&
-					    tp->snd_cwnd < tp->snd_cwnd_clamp) {
-						tp->snd_cwnd++;
-						veno->inc = 0;
-					} else
-						veno->inc = 1;
-					tp->snd_cwnd_cnt = 0;
+			/* In the "congestive state", increase cwnd
+			 * every other rtt.
+			 */
+			if (tp->snd_cwnd_cnt >= tp->snd_cwnd) {
+				if (veno->inc &&
+				    tp->snd_cwnd < tp->snd_cwnd_clamp) {
+					tp->snd_cwnd++;
+					veno->inc = 0;
 				} else
-					tp->snd_cwnd_cnt++;
-			}
+					veno->inc = 1;
+				tp->snd_cwnd_cnt = 0;
+			} else
+				tp->snd_cwnd_cnt++;
 		}
+done:
 		if (tp->snd_cwnd < 2)
 			tp->snd_cwnd = 2;
 		else if (tp->snd_cwnd > tp->snd_cwnd_clamp)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next 4/5] tcp: fix stretch ACK bugs in Veno
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 2/5] tcp: fix stretch ACK bugs in Scalable Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 3/5] tcp: stretch ACK fixes in Veno prep Pengcheng Yang
@ 2020-03-13 16:47 ` Pengcheng Yang
  2020-03-13 16:47 ` [PATCH net-next 5/5] tcp: fix stretch ACK bugs in Yeah Pengcheng Yang
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Pengcheng Yang @ 2020-03-13 16:47 UTC (permalink / raw)
  To: edumazet, davem, ncardwell; +Cc: netdev, Pengcheng Yang

Change Veno to properly handle stretch ACKs in additive increase
mode by passing in the count of ACKed packets to tcp_cong_avoid_ai().

Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
---
 net/ipv4/tcp_veno.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/net/ipv4/tcp_veno.c b/net/ipv4/tcp_veno.c
index 857491c..50a9a6e 100644
--- a/net/ipv4/tcp_veno.c
+++ b/net/ipv4/tcp_veno.c
@@ -154,8 +154,9 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 
 		if (tcp_in_slow_start(tp)) {
 			/* Slow start. */
-			tcp_slow_start(tp, acked);
-			goto done;
+			acked = tcp_slow_start(tp, acked);
+			if (!acked)
+				goto done;
 		}
 
 		/* Congestion avoidance. */
@@ -163,7 +164,7 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 			/* In the "non-congestive state", increase cwnd
 			 * every rtt.
 			 */
-			tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
+			tcp_cong_avoid_ai(tp, tp->snd_cwnd, acked);
 		} else {
 			/* In the "congestive state", increase cwnd
 			 * every other rtt.
@@ -177,7 +178,7 @@ static void tcp_veno_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 					veno->inc = 1;
 				tp->snd_cwnd_cnt = 0;
 			} else
-				tp->snd_cwnd_cnt++;
+				tp->snd_cwnd_cnt += acked;
 		}
 done:
 		if (tp->snd_cwnd < 2)
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH net-next 5/5] tcp: fix stretch ACK bugs in Yeah
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
                   ` (2 preceding siblings ...)
  2020-03-13 16:47 ` [PATCH net-next 4/5] tcp: fix stretch ACK bugs in Veno Pengcheng Yang
@ 2020-03-13 16:47 ` Pengcheng Yang
  2020-03-13 18:21 ` [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Neal Cardwell
  2020-03-13 18:30 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: Pengcheng Yang @ 2020-03-13 16:47 UTC (permalink / raw)
  To: edumazet, davem, ncardwell; +Cc: netdev, Pengcheng Yang

Change Yeah to properly handle stretch ACKs in additive
increase mode by passing in the count of ACKed packets
to tcp_cong_avoid_ai().

In addition, we re-implemented the scalable path using
tcp_cong_avoid_ai() and removed the pkts_acked variable.

Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
---
 net/ipv4/tcp_yeah.c | 41 +++++++++++------------------------------
 1 file changed, 11 insertions(+), 30 deletions(-)

diff --git a/net/ipv4/tcp_yeah.c b/net/ipv4/tcp_yeah.c
index e00570d..3bb4487 100644
--- a/net/ipv4/tcp_yeah.c
+++ b/net/ipv4/tcp_yeah.c
@@ -36,8 +36,6 @@ struct yeah {
 
 	u32 reno_count;
 	u32 fast_count;
-
-	u32 pkts_acked;
 };
 
 static void tcp_yeah_init(struct sock *sk)
@@ -57,18 +55,6 @@ static void tcp_yeah_init(struct sock *sk)
 	tp->snd_cwnd_clamp = min_t(u32, tp->snd_cwnd_clamp, 0xffffffff/128);
 }
 
-static void tcp_yeah_pkts_acked(struct sock *sk,
-				const struct ack_sample *sample)
-{
-	const struct inet_connection_sock *icsk = inet_csk(sk);
-	struct yeah *yeah = inet_csk_ca(sk);
-
-	if (icsk->icsk_ca_state == TCP_CA_Open)
-		yeah->pkts_acked = sample->pkts_acked;
-
-	tcp_vegas_pkts_acked(sk, sample);
-}
-
 static void tcp_yeah_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 {
 	struct tcp_sock *tp = tcp_sk(sk);
@@ -77,24 +63,19 @@ static void tcp_yeah_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);
+	if (tcp_in_slow_start(tp)) {
+		acked = tcp_slow_start(tp, acked);
+		if (!acked)
+			goto do_vegas;
+	}
 
-	else if (!yeah->doing_reno_now) {
+	if (!yeah->doing_reno_now) {
 		/* Scalable */
-
-		tp->snd_cwnd_cnt += yeah->pkts_acked;
-		if (tp->snd_cwnd_cnt > min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT)) {
-			if (tp->snd_cwnd < tp->snd_cwnd_clamp)
-				tp->snd_cwnd++;
-			tp->snd_cwnd_cnt = 0;
-		}
-
-		yeah->pkts_acked = 1;
-
+		tcp_cong_avoid_ai(tp, min(tp->snd_cwnd, TCP_SCALABLE_AI_CNT),
+				  acked);
 	} else {
 		/* Reno */
-		tcp_cong_avoid_ai(tp, tp->snd_cwnd, 1);
+		tcp_cong_avoid_ai(tp, tp->snd_cwnd, acked);
 	}
 
 	/* The key players are v_vegas.beg_snd_una and v_beg_snd_nxt.
@@ -118,7 +99,7 @@ static void tcp_yeah_cong_avoid(struct sock *sk, u32 ack, u32 acked)
 	 * of bytes we send in an RTT is often less than our cwnd will allow.
 	 * So we keep track of our cwnd separately, in v_beg_snd_cwnd.
 	 */
-
+do_vegas:
 	if (after(ack, yeah->vegas.beg_snd_nxt)) {
 		/* We do the Vegas calculations only if we got enough RTT
 		 * samples that we can be reasonably sure that we got
@@ -232,7 +213,7 @@ static u32 tcp_yeah_ssthresh(struct sock *sk)
 	.set_state	= tcp_vegas_state,
 	.cwnd_event	= tcp_vegas_cwnd_event,
 	.get_info	= tcp_vegas_get_info,
-	.pkts_acked	= tcp_yeah_pkts_acked,
+	.pkts_acked	= tcp_vegas_pkts_acked,
 
 	.owner		= THIS_MODULE,
 	.name		= "yeah",
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
                   ` (3 preceding siblings ...)
  2020-03-13 16:47 ` [PATCH net-next 5/5] tcp: fix stretch ACK bugs in Yeah Pengcheng Yang
@ 2020-03-13 18:21 ` Neal Cardwell
  2020-03-13 18:30 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: Neal Cardwell @ 2020-03-13 18:21 UTC (permalink / raw)
  To: Pengcheng Yang; +Cc: Eric Dumazet, David Miller, Netdev

On Fri, Mar 13, 2020 at 12:48 PM Pengcheng Yang <yangpc@wangsu.com> wrote:
>
> Neal Cardwell submits a series of patches to handle stretched ACKs,
> which start with commit e73ebb0881ea ("tcp: stretch ACK fixes prep").
>
> This patch changes BIC to properly handle stretch ACKs in additive
> increase mode by passing in the count of ACKed packets to
> tcp_cong_avoid_ai().
>
> Signed-off-by: Pengcheng Yang <yangpc@wangsu.com>
> ---
>  net/ipv4/tcp_bic.c | 11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)
>
> diff --git a/net/ipv4/tcp_bic.c b/net/ipv4/tcp_bic.c
> index 645cc30..f5f588b 100644
> --- a/net/ipv4/tcp_bic.c
> +++ b/net/ipv4/tcp_bic.c
> @@ -145,12 +145,13 @@ static void bictcp_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 {
> -               bictcp_update(ca, tp->snd_cwnd);
> -               tcp_cong_avoid_ai(tp, ca->cnt, 1);
> +       if (tcp_in_slow_start(tp)) {
> +               acked = tcp_slow_start(tp, acked);
> +               if (!acked)
> +                       return;
>         }
> +       bictcp_update(ca, tp->snd_cwnd);
> +       tcp_cong_avoid_ai(tp, ca->cnt, acked);
>  }
>
>  /*
> --

Acked-by: Neal Cardwell <ncardwell@google.com>

thanks,
neal

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC
  2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
                   ` (4 preceding siblings ...)
  2020-03-13 18:21 ` [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Neal Cardwell
@ 2020-03-13 18:30 ` David Miller
  5 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2020-03-13 18:30 UTC (permalink / raw)
  To: yangpc; +Cc: edumazet, ncardwell, netdev


You must always submit a patch series with an appropriate "[PATCH 0/N ..."
posting, which explains what the series as a whole is doing, how it is doing
it, and why it is doing it that way.

Thank you.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2020-03-13 18:30 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-13 16:47 [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Pengcheng Yang
2020-03-13 16:47 ` [PATCH net-next 2/5] tcp: fix stretch ACK bugs in Scalable Pengcheng Yang
2020-03-13 16:47 ` [PATCH net-next 3/5] tcp: stretch ACK fixes in Veno prep Pengcheng Yang
2020-03-13 16:47 ` [PATCH net-next 4/5] tcp: fix stretch ACK bugs in Veno Pengcheng Yang
2020-03-13 16:47 ` [PATCH net-next 5/5] tcp: fix stretch ACK bugs in Yeah Pengcheng Yang
2020-03-13 18:21 ` [PATCH net-next 1/5] tcp: fix stretch ACK bugs in BIC Neal Cardwell
2020-03-13 18:30 ` David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.