RFR: 8371475: HttpClient: Implement CUBIC congestion controller

Daniel Jeliński djelinski at openjdk.org
Fri Nov 7 14:01:24 UTC 2025


> CUBIC is a standard TCP congestion control algorithm that uses a cubic function instead of a linear congestion window increase function to improve scalability and stability over fast and long-distance networks. CUBIC has been adopted as the default TCP congestion control algorithm by the Linux, Windows, and Apple stacks.

This PR adds a new congestion controller algorithm. It reuses a large part of the QuicRenoCongestionController, which was refactored to two classes - QuicBaseCongestionController, containing the shared code, and QuicRenoCongestionController, containing only the code that is unique to Reno.

CUBIC is now the default congestion controller. Reno can still be selected by setting the system property `jdk.httpclient.quic.congestionController` to `reno`.

A new test was added to exercise the new congestion controller. Existing tests continue to pass.

-------------

Depends on: https://git.openjdk.org/jdk/pull/28156

Commit messages:
 - Add a system property to select congestion controller
 - Implement fast convergence
 - Add comments
 - Update test
 - Revert: more aggressive window increases
 - Test the cubic curve
 - Use custom timeline for testing
 - Documentation updates
 - Cubic tests, more aggressive Reno window increase
 - Log K in milliseconds
 - ... and 2 more: https://git.openjdk.org/jdk/compare/dab80e58...b95950f2

Changes: https://git.openjdk.org/jdk/pull/28195/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28195&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8371475
  Stats: 974 lines in 5 files changed: 715 ins; 252 del; 7 mod
  Patch: https://git.openjdk.org/jdk/pull/28195.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28195/head:pull/28195

PR: https://git.openjdk.org/jdk/pull/28195


More information about the net-dev mailing list