How to understand “BDP*rtt” in bbrv2

127 views
Skip to first unread message

mingkun bian

unread,
Feb 18, 2021, 8:40:53 AM2/18/21
to BBR Development
Hi,
     
    bbr2_pick_probe_wait' remark is as following:
    
    /* How long do we want to wait before probing for bandwidth (and risking
 * loss)? We randomize the wait, for better mixing and fairness convergence.
 *
 * We bound the Reno-coexistence inter-bw-probe time to be 62-63 round trips.
 * This is calculated to allow fairness with a 25Mbps, 30ms Reno flow,
 * (eg 4K video to a broadband user):
 *   BDP = 25Mbps * .030sec /(1514bytes) = 61.9 packets
 *
 * We bound the BBR-native inter-bw-probe wall clock time to be:
 *  (a) higher than 2 sec: to try to avoid causing loss for a long enough time
 *      to allow Reno at 30ms to get 4K video bw, the inter-bw-probe time must
 *      be at least: 25Mbps * .030sec / (1514bytes) * 0.030sec = 1.9secs

    What's the meaning of "25Mbps * .030sec / (1514bytes) * 0.030sec = 1.9secs"?

Thanks

Neal Cardwell

unread,
Feb 18, 2021, 12:44:25 PM2/18/21
to mingkun bian, BBR Development
This is about how BBRv2 aims for reasonable coexistence with Reno and/or CUBIC (CUBIC emulates Reno at the BDPs typical in today's broadband or intradatacenter paths).

That computation models the estimated time between packet loss events for an idealized Reno flow sending at 25Mbps over a path with a 30ms round trip time and packet size of 1514 bytes (typical Ethernet frame size). As noted in the comment, the  25Mbps is chosen to be able to transmit a 4K streaming video, and the 30ms is chosen to match a typical broadband video stream RTT. 

The time is computed with a simple model of the sawtooth behavior of a Reno cwnd in a bottleneck with a BDP of buffer, and one Reno flow, where the cwnd progresses in a repeating pattern, where each cycle is as follows:

  round trip 0: cwnd = BDP + 0
  round trip 1: cwnd = BDP + 1
  round trip 2: cwnd = BDP + 2
  ...
  round trip BDP: cwnd = BDP + BDP
  buffer fills and flow experiences packet loss; flow goes back to state in "round trip 0"; repeat...

From that idealized sequence, the estimated time between packet loss events is:
  (time between packet loss events)
  = (number of round trips) * (length of round trip)
  = BDP * average_RTT

The intuition is: if a BBRv2 flow measures that it is able to achieve a given bandwidth "bw", then to allow a Reno flow coexisting with it to also achieve "bw", then the time between losses caused by the BBRv2 flow needs to be at least that amount of time (BDP * average_RTT = bw * min_rtt * average_RTT).

best,
neal

Reply all
Reply to author
Forward
0 new messages