diff --git a/net/ipv4/tcp_bbr.c b/net/ipv4/tcp_bbr.cindex dbcc935..f9164b7 100644--- a/net/ipv4/tcp_bbr.c+++ b/net/ipv4/tcp_bbr.c@@ -452,6 +452,15 @@ static void bbr_advance_cycle_phase(struct sock *sk) bbr->pacing_gain = bbr_pacing_gain[bbr->cycle_idx]; }
+/* running in half full_bw and 2*RTT after CYCLE_LEN rounds elapsed */+static bool bbr_need_more_available_bw(struct sock *sk, const struct rate_sample *rs)+{+ struct bbr *bbr = inet_csk_ca(sk);++ return !rs->losses && bbr_max_bw(sk) < (bbr->full_bw >> 1) &&+ bbr->min_rtt_us < (rs->rtt_us >> 1);+}+ /* Gain cycling: cycle pacing gain to converge to fair share of available bw. */ static void bbr_update_cycle_phase(struct sock *sk, const struct rate_sample *rs)@@ -459,8 +468,16 @@ static void bbr_update_cycle_phase(struct sock *sk, struct bbr *bbr = inet_csk_ca(sk);
if ((bbr->mode == BBR_PROBE_BW) && !bbr->lt_use_bw &&- bbr_is_next_cycle_phase(sk, rs))+ bbr_is_next_cycle_phase(sk, rs)) {+ if (bbr_need_more_available_bw(sk, rs)) {+ /* reset RTT since current min RTT doubled */+ bbr->min_rtt_us = rs->rtt_us;+ bbr->min_rtt_stamp = tcp_jiffies32;+ /* probe for more available bw */+ bbr->cycle_idx = CYCLE_LEN - 1;+ } bbr_advance_cycle_phase(sk);+ } }
static void bbr_reset_startup_mode(struct sock *sk)
--
You received this message because you are subscribed to the Google Groups "BBR Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bbr-dev+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
To unsubscribe from this group and stop receiving emails from it, send an email to bbr-dev+u...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to bbr-dev+u...@googlegroups.com.
To unsubscribe from this group and stop receiving emails from it, send an email to bbr-dev+unsubscribe@googlegroups.com.
Hi James,Thanks for the traces. Can you please add a little more detail about the traces?For example:o What sort of scenario is being traced here?o what are the sending and receiving machines?
o what is the bottleneck link?
o what is the "bridge", and what is it configured to do, exactly?
o what congestion control algorithms are the flows running?o is the BBR in the trace vanilla BBR or a kernel with the patch you specified?
o This seems to be a receiver-side trace, based on the delays between the data and the ACKs; would you be able to take a trace from the sender, to show us what the sending congestion control is seeing? That's usually easier to interpret.o Also interesting would be the output of "ss", to show the internal BBR model of BtlBw and RTprop; e.g.:(for i in `seq 1 60`; do ss -tin 'dst <destination_host>'; sleep 1; done) &
One interesting aspect is that (based on the attached screen shots of tcptrace output) the two flows you show seem to converge to a roughly fair share (About 19Mbps each) after a phase transition around 30 seconds into the trace. I could speculate as to the cause, but it would be nice to know more about the scenario before I speculate. :-)