Skip to content

BBRv3: an application-limited flow is never paced (initial pacing rate stays at InitialCwnd / 1 ms) #800

Description

@richinsley

Bbr3::new computes the initial pacing rate with a 1 ms RTT because no SRTT exists yet: startup_pacing_gain * InitialCwnd / 1 ms, about 266 Mbps for a 12 kB window. Until startup exits, BBRSetPacingRateWithGain only raises the rate (if full_bw_reached || rate > pacing_rate). A flow that stays application-limited never exits startup — its delivery-rate samples never plateau — so the placeholder is kept for the life of the flow and the flow is effectively unpaced: every burst leaves at line rate.

Where it bites: a second multipath path opened after the handshake and fed a rate-limited source (a media encoder). In my setup the path reported a constant 266 Mbps pacing rate for entire sessions; frame-sized bursts overflowed a 25-packet queue with 28 % loss, while the first path, which had exited startup during the handshake, paced normally.

Linux BBR handles exactly this with has_seen_rtt: once the first RTT sample exists, the pacing rate is re-initialised from InitialCwnd / SRTT (bbr_init_pacing_rate_from_rtt) and grows from there. The draft's BBRInitPacingRate says the same (InitialCwnd / (SRTT ? SRTT : 1ms)); it is just only evaluated once, before an SRTT exists.

Repro as a unit test on Bbr3: one packet acknowledged with a 40 ms RTT leaves pacing_rate at 33 276 000 B/s; the value the draft implies is 831 900 B/s. I have a fix with that test and will open a PR referencing this issue.

The same construction is in quinn's open BBRv3 PR (quinn-rs/quinn#2481), which I understand this implementation came from.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    • Status
      🏗 In progress

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions