Conversation
|
This PR is part of a stack of 9 bookmarks:
Created with jj-stack |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The API permits protocol-invalid limits above 2^60, and its core advertisement behavior lacks direct verification.
Get a fresh assessment by requesting another Copilot review.
Review effort: Balanced
Findings: 1
Open (2)
What changed in this PR
Adds runtime control for increasing incoming QUIC stream limits, including compatibility with 0-RTT rejection.
Changes:
- Adds
Connection::set_remote_max_streams. - Schedules corresponding
MAX_STREAMSupdates. - Adjusts and tests 0-RTT rejection handling.
| File | Description |
|---|---|
neqo-transport/src/streams.rs |
Implements monotonic stream-limit increases. |
neqo-transport/src/connection/mod.rs |
Exposes the public connection API. |
neqo-transport/src/connection/tests/zerortt.rs |
Tests raised limits during 0-RTT rejection. |
💡 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 @@
## users/jesup/expose_queue_capacity #4010 +/- ##
=====================================================================
+ Coverage 96.93% 96.96% +0.03%
=====================================================================
Files 119 119
Lines 41584 41603 +19
Branches 41584 41603 +19
=====================================================================
+ Hits 40308 40340 +32
+ Misses 1252 1237 -15
- Partials 24 26 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Merging this PR will degrade performance by 1.93%
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing |
|
Is this needed for Interop 2026? If not, I will delay reviewing it. |
1e99e70 to
1cb9ec5
Compare
435fa81 to
7c9dbf5
Compare
Performance profiles for profiler.firefox.comBenchmarks (14)
|
1cb9ec5 to
b172928
Compare
7c9dbf5 to
88e5d12
Compare
b172928 to
c0707d8
Compare
88e5d12 to
df2d12a
Compare
c0707d8 to
c245d30
Compare
df2d12a to
fc849cf
Compare
c245d30 to
419a6ae
Compare
fc849cf to
8d821a6
Compare
419a6ae to
5a2f7b1
Compare
8d821a6 to
17bfe24
Compare
5a2f7b1 to
41cc958
Compare
17bfe24 to
e70b51b
Compare
41cc958 to
f333aef
Compare
e70b51b to
43e88a6
Compare
…imit Lets a caller raise the connection's own MAX_STREAMS advertisement above the transport-parameter-configured default, for cases like WebTransport's anticipated-streams API where an application knows ahead of time that it wants more concurrency than the default allows. Monotonic: lowering the value later has no effect, since QUIC stream limits can only increase. zero_rtt_rejected's assertion that the limit matches the configured transport parameter no longer holds once a caller can raise it before the handshake confirms, which is exactly when the anticipated-streams API supplies it; relax it to allow anything at or above the default.
Not for Interop 2026 scoring: anticipated-streams.https.any.js isn't in the Interop 2026 WebTransport set. Firefox needs it for anticipatedConcurrentIncoming{Uni,Bi}directionalStreams (Bug 2007825), so after the Interop-related PRs is fine. |
f333aef to
f039ffc
Compare
43e88a6 to
3c305f6
Compare
Client/server transfer resultsPerformance differences relative to f039ffc. 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 |
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
|
Benchmark resultsNo significant performance differences relative to f039ffc. All resultstransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1500 time: [50.746 ms 50.824 ms 50.941 ms]
thrpt: [1.9170 GiB/s 1.9215 GiB/s 1.9244 GiB/s]
Found 5 outliers among 100 measurements (5.00%)
3 (3.00%) high mild
2 (2.00%) high severetransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1500 time: [50.618 ms 50.677 ms 50.738 ms]
thrpt: [1.9247 GiB/s 1.9270 GiB/s 1.9293 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: [3.0134 ms 3.0143 ms 3.0151 ms]
thrpt: [331.66 B/s 331.75 B/s 331.85 B/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) low mildtransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1500 time: [67.060 ms 67.338 ms 67.622 ms]
thrpt: [147.88 Kelem/s 148.50 Kelem/s 149.12 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.608 ms 10.610 ms 10.612 ms]
thrpt: [376.93 MiB/s 377.01 MiB/s 377.09 MiB/s]streams-flow-controlled/walltime/10-streams/each-1048576-bytes time: [28.028 ms 28.038 ms 28.049 ms]
thrpt: [356.52 MiB/s 356.65 MiB/s 356.78 MiB/s]
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams/walltime/1-streams/each-1000-bytes time: [130.27 µs 130.70 µs 131.25 µs]
thrpt: [7.2662 MiB/s 7.2969 MiB/s 7.3207 MiB/s]
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mildstreams/walltime/1000-streams/each-1-bytes time: [3.8585 ms 3.8703 ms 3.8816 ms]
thrpt: [251.59 KiB/s 252.32 KiB/s 253.10 KiB/s]
Found 18 outliers among 100 measurements (18.00%)
18 (18.00%) low mildstreams/walltime/1000-streams/each-1000-bytes time: [11.067 ms 11.071 ms 11.074 ms]
thrpt: [86.115 MiB/s 86.145 MiB/s 86.175 MiB/s]
Found 6 outliers among 100 measurements (6.00%)
2 (2.00%) low mild
4 (4.00%) high mildtransfer/walltime/pacing-false/same-seed time: [2.0054 ms 2.0064 ms 2.0076 ms]
thrpt: [1.9457 GiB/s 1.9469 GiB/s 1.9478 GiB/s]transfer/walltime/pacing-false/varying-seeds time: [2.0393 ms 2.0403 ms 2.0415 ms]
thrpt: [1.9135 GiB/s 1.9146 GiB/s 1.9154 GiB/s]transfer/walltime/pacing-true/same-seed time: [2.0924 ms 2.0938 ms 2.0955 ms]
thrpt: [1.8642 GiB/s 1.8657 GiB/s 1.8669 GiB/s]transfer/walltime/pacing-true/varying-seeds time: [2.0551 ms 2.0562 ms 2.0575 ms]
thrpt: [1.8986 GiB/s 1.8998 GiB/s 1.9008 GiB/s]Instructions per cycleCriterion reported no significant timing changes. All benchmarks
Profiles for profiler.firefox.com (62)
Download data for |


No description provided.