The Startup and Drain states are used at
connection start (Figure 6). To handle
Internet link bandwidths spanning 12
orders of magnitude, Startup implements a binary search for BtlBw by using a gain of 2/ln2 to double the sending
rate while delivery rate is increasing.
This discovers BtlBw in log2BDP RTTs
but creates up to 2BDP excess queue in
the process. Once Startup finds BtlBw,
BBR transitions to Drain, which uses
the inverse of Startup’s gain to get rid
of the excess queue, then to ProbeBW
once the inflight drops to a BDP.
Figure 6 shows the first second of a
10Mbps, 40ms BBR flow. The time/se-quence plot shows the sender (green)
and receiver (blue) progress vs. time.
The red line shows a CUBIC sender
under identical conditions. Vertical
gray lines mark BBR state transitions.
The lower figure shows the RTT of the
two connections vs. time. Note that the
time reference for this data is ack arrival
(blue) so, while they appear to be time
shifted, events are shown at the point
where BBR learns of them and acts.
The lower graph of Figure 6 contrasts BBR and CUBIC. Their initial behavior is similar, but BBR completely
drains its startup queue while CUBIC
can’t. Without a path model to tell it
how much of the inflight is excess, CUBIC makes inflight growth less aggressive, but growth continues until either
the bottleneck buffer fills and drops a
packet or the receiver’s inflight limit
(TCP’s receive window) is reached.
Figure 7 shows RTT behavior during
the first eight seconds of the connections shown in Figure 6. CUBIC (red)
fills the available buffer, then cycles
from 70% to 100% full every few seconds. After startup, BBR (green) runs
with essentially no queue.
Behavior of Multiple BBR
Flows Sharing a Bottleneck
Figure 8 shows how individual throughputs for several BBR flows sharing a
100Mbps/10ms bottleneck converge
to a fair share. The downward facing
triangular structures are connection
ProbeRTT states whose self-synchro-nization accelerates final convergence.
ProbeBW gain cycling (Figure 4)
causes bigger flows to yield bandwidth
to smaller flows, resulting in each
learning its fair share. This happens
fairly quickly (a few ProbeBW cycles),
though unfairness can persist when
late starters overestimate RTprop as a
result of starting when other flows have
(temporarily) created a queue.
To learn the true RTProp, a flow
moves to the left of BDP using
ProbeRTT state: when the RTProp
estimate has not been updated (that
is, by measuring a lower RTT) for
many seconds, BBR enters ProbeRTT,
which reduces the inflight to four
packets for at least one round trip,
Figure 5. Bandwidth change.
fit in pipe,
increasing RT T
pushing up RT T, until
clamped by cwnd_gain
times out of filter
inflight reduction lowers
RT T which lowers inflight…
until optimum regained
40 41 42 43 44
19 20 21 22
Figure 6. First second of a 10Mbps, 40ms BBR flow
CUBIC switches from
exponential to linear
at full BW with
BBR inflight at 3 BDP
startup drain probe BW
0 0.25 0.50 0.75 1.00
0 0.25 0.50 0.75 1.00