Why BBR in probebw state use min_rtt round instead of packet-timed round

Skip to first unread message


Sep 26, 2021, 8:13:54 AM9/26/21
to BBR Development
Hi ~

Why BBR in probebw state use min_rtt round instead of packet-timed round?

static bool bbr_is_next_cycle_phase(struct sock *sk,
                                    const struct rate_sample *rs)
        struct tcp_sock *tp = tcp_sk(sk);
        struct bbr *bbr = inet_csk_ca(sk);
        bool is_full_length =
                tcp_stamp_us_delta(tp->delivered_mstamp, bbr->cycle_mstamp) >
        u32 inflight, bw;

Why not replace min_rtt_us with packet-timed round time as in STARTUP/DRAIN state?


Sep 27, 2021, 3:35:29 AM9/27/21
to BBR Development
I see. Please ignore this issue.

Neal Cardwell

Sep 27, 2021, 11:58:18 AM9/27/21
to 赵亚, BBR Development
For what it's worth, the motivation for using wall clock time rather than packet-timed round trips for triggering the end of a cycle phase was to avoid entrainment. We originally tried using packet-timed round trips, but noticed that this caused entrainment: flows aligned their phases based on the dynamics of the bottleneck queue; in turn this caused some flows to repeatedly probe for bandwidth at the same time as other flows, causing each flow in the synchronized ensemble to fail to realize that its fair share was higher. We found better bandwidth convergence by avoiding entrainment by explicitly randomizing the initial phase of the flows and then using wall clock time to trigger the progress through the bandwidth probing cycle.


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/3f337d24-0e2a-4b37-add5-765a54c25459n%40googlegroups.com.
Reply all
Reply to author
0 new messages