Summary
Add a modern pacing based congestion controller as a third implementation behind the existing congestion control abstraction.
Motivation
CCRakNetSlidingWindow is a loss based AIMD design from the 2000s. On modern bufferbloated links it fills queues and inflates latency, and on high bandwidth-delay-product links it ramps too slowly. Delay aware, pacing based designs (BBR style) hold latency down while using available bandwidth, which matters more for games than raw throughput.
Proposal
- Implement a BBR-lite controller: continuous bandwidth and min RTT estimation, pacing gain cycling, and a send rate target instead of a pure window
- Slot it in alongside
CCRakNetSlidingWindow and CCRakNetUDT behind the existing compile time selection in NativeFeatureIncludes.h, ideally promoted to a runtime choice per peer
- Emit pacing decisions as a target batch size per tick so the send path can size its datagram batches from the same signal
Validation
- Unit tests for the estimator math (bandwidth sampling, min RTT windows, pacing gain schedule) as pure logic tests
- Integration comparison under
tc netem profiles (loss, delay, bufferbloat) in a Linux container: new controller should match or beat the sliding window on throughput while keeping queueing delay materially lower
- No regression in the existing reliability integration suites with the new controller enabled
Acceptance criteria
- Controller selectable without recompiling dependent code
- Documented guidance on when to choose which controller
Summary
Add a modern pacing based congestion controller as a third implementation behind the existing congestion control abstraction.
Motivation
CCRakNetSlidingWindowis a loss based AIMD design from the 2000s. On modern bufferbloated links it fills queues and inflates latency, and on high bandwidth-delay-product links it ramps too slowly. Delay aware, pacing based designs (BBR style) hold latency down while using available bandwidth, which matters more for games than raw throughput.Proposal
CCRakNetSlidingWindowandCCRakNetUDTbehind the existing compile time selection inNativeFeatureIncludes.h, ideally promoted to a runtime choice per peerValidation
tc netemprofiles (loss, delay, bufferbloat) in a Linux container: new controller should match or beat the sliding window on throughput while keeping queueing delay materially lowerAcceptance criteria