Skip to contentSkip to conversation

Patch "tcp_bbr: cut pacing rate only if filled pipe" has been added to the 4.9-stable tree

PATCH [email protected] 1 participant 1 message Aug 8, 2017

Subsystems (3)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

tcp_bbr: cut pacing rate only if filled pipe

to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
tcp_bbr-cut-pacing-rate-only-if-filled-pipe.patch
and it can be found in the queue-4.9 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From foo@baz Tue Aug 8 16:27:53 PDT 2017

From: Neal Cardwell <[email protected]>
Date: Fri, 14 Jul 2017 17:49:21 -0400
Subject: tcp_bbr: cut pacing rate only if filled pipe

From: Neal Cardwell <[email protected]>

[ Upstream commit 4aea287e90dd61a48268ff2994b56f9799441b62 ]

In bbr_set_pacing_rate(), which decides whether to cut the pacing rate, there was some code that considered exiting STARTUP to be equivalent to the notion of filling the pipe (i.e., bbr_full_bw_reached()). Specifically, as the code was structured, exiting STARTUP and going into PROBE_RTT could cause us to cut the pacing rate down to something silly and low, based on whatever bandwidth samples we've had so far, when it's possible that all of them have been small app-limited bandwidth samples that are not representative of the bandwidth available in the path. (The code was correct at the time it was written, but the state machine changed without this spot being adjusted correspondingly.)

Fixes 0f8782ea1497 ("tcp_bbr: add BBR congestion control")
---
 net/ipv4/tcp_bbr.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
net/ipv4/tcp_bbr.c +1 -2
@@ -191,12 +191,11 @@ static u64 bbr_rate_bytes_per_sec(struct
  */
 static void bbr_set_pacing_rate(struct sock *sk, u32 bw, int gain)
 {
-	struct bbr *bbr = inet_csk_ca(sk);
 	u64 rate = bw;
 
 	rate = bbr_rate_bytes_per_sec(sk, rate, gain);
 	rate = min_t(u64, rate, sk->sk_max_pacing_rate);
-	if (bbr->mode != BBR_STARTUP || rate > sk->sk_pacing_rate)
+	if (bbr_full_bw_reached(sk) || rate > sk->sk_pacing_rate)
 		sk->sk_pacing_rate = rate;
 }
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.9/tcp_bbr-remove-sk_pacing_rate-0-transient-during-init.patch queue-4.9/tcp_bbr-introduce-bbr_bw_to_pacing_rate-helper.patch queue-4.9/tcp_bbr-introduce-bbr_init_pacing_rate_from_rtt-helper.patch queue-4.9/tcp_bbr-init-pacing-rate-on-first-rtt-sample.patch queue-4.9/tcp_bbr-cut-pacing-rate-only-if-filled-pipe.patch