Repository navigation
feat(cc): put ABE (RFC 8511) behind a pref. - #4090
Conversation
There was a problem hiding this comment.
🟢 Approval recommended
The setting is consistently wired, preserves existing behavior by default, and has focused regression coverage; tests were not executed.
0 open findings
What changed in this PR
Makes Alternative Backoff with ECN (ABE) configurable for CUBIC, supporting Firefox performance experiments while preserving the enabled default.
Changes:
- Adds an ABE connection setting and
--no-abeCLI flag. - Propagates the setting to all CUBIC slow-start variants.
- Tests configuration toggling and congestion-window reductions.
| File | Description |
|---|---|
| neqo-transport/src/sender.rs | Passes the ABE setting to CUBIC. |
| neqo-transport/src/connection/params.rs | Adds the setting, default, and toggle test. |
| neqo-transport/src/cc/tests/mod.rs | Supports configurable CUBIC test instances. |
| neqo-transport/src/cc/tests/cubic.rs | Tests backoff behavior with ABE disabled. |
| neqo-transport/src/cc/cubic.rs | Gates alternative ECN backoff on the setting. |
| neqo-bin/src/lib.rs | Adds and wires --no-abe. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4090 +/- ##
==========================================
- Coverage 97.14% 96.99% -0.16%
==========================================
Files 113 118 +5
Lines 41500 41869 +369
Branches 41500 41869 +369
==========================================
+ Hits 40314 40609 +295
- Misses 1172 1236 +64
- Partials 14 24 +10
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Merging this PR will regress 2 benchmarks
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing |
|
Is ABE not orthogonal to whether CUBIC or Reno are used? |
It is in theory, but we currently only implement it for cubic. That’s why I put the pref on cubic instead of on the congestion controller. The diff would be bigger if it was a layer above because of changing function calls etc. In general I don’t think it is worth it to implement ABE in Reno right now. We don’t use Reno and the constant needs to be separately tuned from cubic. |
|
I wonder if there is any point in keeping the Reno code around... |
I think it can be useful as a barebones RFC 9002/new reno reference. But right now we have some performance optimizations (e.g. spurious recovery) active for both, and some only for Cubic. So I agree that state is not that useful. If we decided to rip out everything but Cubic and also that we won't be doing any non-loss cc anytime soon (thus no need for the current I'll open an issue to discuss/track this. |
This will enable us to do experiments studying ABE performance on Firefox. See https://bugzilla.mozilla.org/show_bug.cgi?id=2062270 for more info on my planned ECN performance study.
4fdf636 to
7cd4a09
Compare
There is #3453. I added this discussion to it. |
Client/server transfer resultsPerformance differences relative to ad7d629. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Table above only shows statistically significant changes. See all results below. All resultsTransfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
Benchmark resultsNo significant performance differences relative to ad7d629. All resultstransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1500 time: [50.306 ms 50.329 ms 50.354 ms]
thrpt: [1.9394 GiB/s 1.9403 GiB/s 1.9413 GiB/s]
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
1 (1.00%) high mild
1 (1.00%) high severetransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1500 time: [52.037 ms 52.066 ms 52.096 ms]
thrpt: [1.8746 GiB/s 1.8756 GiB/s 1.8767 GiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/1-1b-resp (aka. HPS)/mtu-1500 time: [2.9774 ms 2.9795 ms 2.9815 ms]
thrpt: [335.40 B/s 335.63 B/s 335.86 B/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1500 time: [67.421 ms 67.758 ms 68.105 ms]
thrpt: [146.83 Kelem/s 147.58 Kelem/s 148.32 Kelem/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes time: [10.632 ms 10.635 ms 10.638 ms]
thrpt: [376.03 MiB/s 376.13 MiB/s 376.23 MiB/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams-flow-controlled/walltime/10-streams/each-1048576-bytes time: [28.260 ms 28.270 ms 28.280 ms]
thrpt: [353.60 MiB/s 353.73 MiB/s 353.86 MiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/walltime/1-streams/each-1000-bytes time: [132.29 µs 132.85 µs 133.55 µs]
thrpt: [7.1407 MiB/s 7.1786 MiB/s 7.2088 MiB/s]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severestreams/walltime/1000-streams/each-1-bytes time: [3.7571 ms 3.7685 ms 3.7797 ms]
thrpt: [258.37 KiB/s 259.14 KiB/s 259.93 KiB/s]streams/walltime/1000-streams/each-1000-bytes time: [12.529 ms 12.536 ms 12.544 ms]
thrpt: [76.029 MiB/s 76.074 MiB/s 76.120 MiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mildtransfer/walltime/pacing-false/same-seed time: [1.9996 ms 2.0006 ms 2.0018 ms]
thrpt: [1.9514 GiB/s 1.9526 GiB/s 1.9535 GiB/s]transfer/walltime/pacing-false/varying-seeds time: [2.0204 ms 2.0213 ms 2.0224 ms]
thrpt: [1.9315 GiB/s 1.9326 GiB/s 1.9334 GiB/s]transfer/walltime/pacing-true/same-seed time: [2.0787 ms 2.0813 ms 2.0844 ms]
thrpt: [1.8740 GiB/s 1.8768 GiB/s 1.8791 GiB/s]transfer/walltime/pacing-true/varying-seeds time: [2.0170 ms 2.0181 ms 2.0193 ms]
thrpt: [1.9344 GiB/s 1.9356 GiB/s 1.9367 GiB/s]Instructions per cycleCriterion reported no significant timing changes. All benchmarks
Profiles for profiler.firefox.com (64)
Download data for |
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to
All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-pr as client
neqo-pr as server
|
This will enable us to do experiments studying ABE performance on Firefox.
See https://bugzilla.mozilla.org/show_bug.cgi?id=2062270 for more info on my planned ECN performance study.