recovery: fix BBRv2 PROBE_RTT wedge when inflight target is below cwnd floor - #2711
Open
NAVEENKUMARKR777 wants to merge 2 commits into
Open
recovery: fix BBRv2 PROBE_RTT wedge when inflight target is below cwnd floor#2711NAVEENKUMARKR777 wants to merge 2 commits into
NAVEENKUMARKR777 wants to merge 2 commits into
Conversation
…d floor PROBE_RTT can only arm its 200ms exit timer once bytes_in_flight drains below inflight_target (0.5 * BDP). When that target is below the connection's cwnd floor (e.g. a large initial congestion window on a low-RTT path), the floor keeps bytes_in_flight pinned above the target forever, the exit timer never gets armed, and the connection wedges in PROBE_RTT indefinitely with cwnd stuck at the floor. Google's reference implementation arms the exit timer when in-flight drops below the inflight target *or* below the minimum congestion window, making the check exhaustive over both cwnd-clamp outcomes. Plumb the connection's cwnd lower bound through ModeImpl::on_congestion_event and restore that second clause in ProbeRTT. Fixes cloudflare#2698 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
PROBE_RTT can only arm its 200ms exit timer once
bytes_in_flightdrainsbelow
inflight_target(0.5 × BDP). When that target is below theconnection's cwnd floor (e.g. a large initial congestion window on a
low-RTT path), the floor keeps
bytes_in_flightpinned above the targetforever, the exit timer never gets armed, and the connection wedges in
PROBE_RTT indefinitely with cwnd stuck at the floor.
Google's reference implementation (
bbr2_probe_rtt.cc) arms the exittimer when in-flight drops below the inflight target or below the
minimum congestion window, making the check exhaustive over both
cwnd-clamp outcomes:
The port only kept the first clause. This PR plumbs the connection's cwnd
lower bound (
cwnd_limits.min()) throughModeImpl::on_congestion_eventand restores the second clause in
ProbeRTT::on_congestion_event.Fixes #2698.
Test plan
probe_rtt_exits_when_inflight_hits_the_cwnd_floor, aregression test that reproduces the wedge (verified it fails
without the fix and passes with it).
cargo test -p quiche --features gcongestion,qlog recovery::gcongestion— 117 passed.cargo test -p quiche --features gcongestion,qlog,ffi,internal— full suite, 1102 passed + 45 doc-tests.🤖 Generated with Claude Code