Hi,First of all, thanks for posting the draft for BBRv2! It's very appreciated.
I've got a few questions about it:-According to the draft, pacing_gain in Startup is 4*ln(2) ~= 2.773, which is the "new" value from the derivation from 2018 [1]. The code still uses the "old" value 2/ln(2) ~= 2.885. I suppose the code is simply "outdated" here and future versions of BBRv2 will use 2.773?
-What is cwnd_gain in Startup and Drain? According to the draft (page 19, Section 4.3.1.1 and the "control behavior" table on page 51, Section 4.6.1) it is 2. But in the code, it is the same as pacing_gain (2.885 or 2.773).
-On page 26, Section 4.3.3.5.2, the draft says "T_reno_bound = pick_randomly_either({62, 63})" and then never uses T_reno_bound again. Right after defining it, it says "T_reno = min(BDP in packets, 62) round trips" - should this 62 be T_reno_bound instead?
Accordingly, on page 28, Section 4.3.3.5.3, it says "rounds = min(reno_rounds, 63)" (copied from the source code, where BBRv2 also just uses the fixed value 63 without any randomization). Should this 63 be the randomized T_reno_bound, too? Is it even worth randomizing this when you merely pick one out of {62, 63}?
-Also regarding page 26, Section 4.3.3.5.2, isn't T_reno = min( min(bdp, cwnd), 62 or 63) ? (cf. code lines 1748-1750)
T_reno = min(BDP in packets, T_reno_bound) round trips
reno_bdp = min(BBR.bdp, cwnd)
T_reno = min(reno_bdp, T_reno_bound) round trips
-Startup exits if the loss rate exceeds its 2% threshold, but only if there where at least bbr_full_loss_cnt loss events in the current round. The draft states bbr_full_loss_cnt = 3 (page 21, Section 4.3.1.3), but in the code bbr_full_loss_cnt = 8. Which value is more up-to-date?
-On page 24, Section 4.3.3.4, the draft explains how a flow behaves in ProbeBW:Up "If the flow has not set BBR.inflight_hi or BBR.bw_hi". How can bw_hi not be set in ProbeBW:Up?
-The "control behavior" table on page 51, Section 4.6.1 states that pacing_gain in Drain is 0.5, but isn't it the multiplicative inverse of its value in Startup? [2]
-The description of ProbeBW:Down on page 22, Section 4.3.3.1 seems to miss the part of the exit condition that checks whether inflight < estimated BDP. The code as well as the code sample on page 30 of the draft include this check.
--
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+u...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/bbr-dev/b73502f7-4fc1-4f19-9881-14462fd39e62n%40googlegroups.com.
Hi Neal,>Thanks for the careful reading and excellent comments/questions! I will add your name to the Acknowledgments section of the draft; if you are comfortable sharing your last name I can add that as well.Cool, thank you. My full name is Adrian Zapletal.
>The "rounds = min(reno_rounds, 63)" is intentional. Even though the 63 is a constant, the dynamics are still randomized, because the initialization of BBR.rounds_since_bw_probe is randomly picked to be 0 or 1. In our experience having even one round trip of randomization can be important for fairness convergence; otherwise low-bandwidth flows can probe for bandwidth in lockstep with high-bandwidth flows, causing the low-bandwidth flows to be unable to effectively probe bandwidth and converge upward to their fair share.That's interesting!>Here again (bbr_full_loss_cnt) the draft reflects the theory and the plan, and the code is in transition and still using the old value.Could you maybe share some insights on why you chose 3 for bbr_full_loss_cnt?
>The inflight_hi and bw_hi values will not be set in ProbeBW_UP if the flow has never met the conditions for packet loss or ECN setting inflight_hi or bw_hi.I think I misunderstood how bw_hi works. From the code, it seems like bw_hi keeps track of the recent maximum bandwidth at all times (via bbr2_take_bw_hi_sample()), in which case it is always set to some value in ProbeBW_UP. When loss/ECN is too high, BBRv2 seems to set inflight_hi explicitly, but not bw_hi.In the draft, it looks like bw_hi gets set upon loss similar to inflight_hi, and max_bw is the value that records the maximum bandwidth at all times. So basically there is a little mismatch between the code and the draft. Is that correct?
To view this discussion on the web visit https://groups.google.com/d/msgid/bbr-dev/a5a05d5c-55ab-451f-91ee-80a9ec3743a7n%40googlegroups.com.