Skip to content

Pacing based congestion controller (BBR-lite) alongside the sliding window #47

Description

@Segfaultd

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions