WebTransport: cover the per-session datagram queue's watermark, priority, and byte-budget eviction - #3987
WebTransport: cover the per-session datagram queue's watermark, priority, and byte-budget eviction#3987jesup wants to merge 1 commit into
Conversation
|
This PR is part of a stack of 15 bookmarks:
Created with jj-stack |
There was a problem hiding this comment.
🟡 Changes recommended
The tests reuse a datagram ID, omit HTTP/3 resume-event forwarding coverage, and retain a misleading test name.
Get a fresh assessment by requesting another Copilot review.
Pull request overview
Adds integration coverage for per-session WebTransport datagram queue behavior.
Changes:
- Tests watermark backpressure and resume signaling.
- Tests send-order priority and byte-budget eviction.
- Updates outdated connect-udp coverage and imports.
File summaries
| File | Description |
|---|---|
neqo-transport/src/connection/tests/datagram.rs |
Tests per-session resume signaling. |
neqo-http3/tests/webtransport.rs |
Updates SendGroupId import and formatting. |
neqo-http3/tests/connect_udp.rs |
Replaces obsolete connection-wide backpressure assertions. |
neqo-http3/src/features/extended_connect/tests/webtransport/mod.rs |
Adjusts test helper return type and imports. |
neqo-http3/src/features/extended_connect/tests/webtransport/datagrams.rs |
Adds watermark, priority, and eviction tests. |
Review details
Suppressed comments (1)
neqo-http3/src/features/extended_connect/tests/webtransport/datagrams.rs:206
next_idis not advanced for the datagram accepted on the first overflow, so the first “high-priority” datagram reuses both the tracking ID and payload of a still-queued low-priority datagram. Consequently,was_received(high_priority_ids[0])can be satisfied by the low-priority copy and does not prove that high-priority datagram traversed the live connection. Keep the IDs unique before leaving this loop.
low_priority_ids.push(next_id);
break;
- Files reviewed: 5/5 changed files
- Comments generated: 2
- Review effort level: 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 @@
## users/jesup/expire_datagrams #3987 +/- ##
================================================================
+ Coverage 96.85% 96.89% +0.03%
================================================================
Files 119 119
Lines 41385 41385
Branches 41385 41385
================================================================
+ Hits 40083 40099 +16
+ Misses 1278 1260 -18
- Partials 24 26 +2
Flags with carried forward coverage won't be shown. Click here to find out more.
🚀 New features to boost your workflow:
|
Merging this PR will degrade performance by 3.57%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | coalesce_acked_from_zero 1 ranges |
2.6 µs | 2.7 µs | -4.05% |
| ❌ | Simulation | coalesce_acked_from_zero 3 ranges |
3.4 µs | 3.5 µs | -3.09% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing users/jesup/watermark_priority_eviction (bab27a4) with users/jesup/expire_datagrams (0b3378b)1
Footnotes
d74cf65 to
b3a3b72
Compare
af88cc2 to
288713f
Compare
b3a3b72 to
af3de7e
Compare
288713f to
2053125
Compare
af3de7e to
579205f
Compare
2053125 to
3c0dfc6
Compare
579205f to
3f55403
Compare
3c0dfc6 to
5c377c8
Compare
3f55403 to
0b3378b
Compare
5c377c8 to
026d19e
Compare
…ity, and byte-budget eviction Adds send-order priority delivery and byte-budget eviction coverage through a live WebTransport connection, and the equivalent low-level resume-signal test directly on Connection (resume_signal_fires_once_a_blocked_queue_drains_below_watermark). Keeps a WebTransport test that the resume signal is forwarded all the way to Http3ServerEvent::OutgoingDatagramSpaceAvailable: the transport-level test only proves a ConnectionEvent is queued, and connect-udp cannot drive this at all, having no outgoingHighWaterMark equivalent. Its own copy of the old test is renamed to what it now checks.
0b3378b to
5df7db1
Compare
026d19e to
bab27a4
Compare
Benchmark resultsNo significant performance differences relative to 5df7db1. All resultstransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1504: No change in performance detected. time: [132.44 ms 132.62 ms 132.82 ms]
thrpt: [752.90 MiB/s 754.04 MiB/s 755.08 MiB/s]
change:
time: [-0.2036% +0.0124% +0.2216%] (p = 0.91 > 0.05)
thrpt: [-0.2211% -0.0124% +0.2040%]
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) high mild
2 (2.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1504: Change within noise threshold. time: [216.10 ms 216.34 ms 216.57 ms]
thrpt: [46.174 Kelem/s 46.224 Kelem/s 46.276 Kelem/s]
change:
time: [+0.6312% +0.8183% +1.0128%] (p = 0.00 < 0.05)
thrpt: [-1.0027% -0.8117% -0.6272%]
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) low mild
1 (1.00%) high mildtransfer/1-conn/1-1b-resp (aka. HPS)/mtu-1504: Change within noise threshold. time: [7.4105 ms 7.4146 ms 7.4188 ms]
thrpt: [134.79 B/s 134.87 B/s 134.94 B/s]
change:
time: [+0.1499% +0.2265% +0.3063%] (p = 0.00 < 0.05)
thrpt: [-0.3054% -0.2260% -0.1497%]
Change within noise threshold.transfer/1-conn/1-100mb-req (aka. Upload)/mtu-1504: No change in performance detected. time: [135.93 ms 136.37 ms 137.13 ms]
thrpt: [729.21 MiB/s 733.29 MiB/s 735.66 MiB/s]
change:
time: [-0.4522% -0.0592% +0.5934%] (p = 0.86 > 0.05)
thrpt: [-0.5899% +0.0592% +0.4542%]
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
7 (7.00%) high mild
1 (1.00%) high severestreams/walltime/1-streams/each-1000-bytes: Change within noise threshold. time: [552.84 µs 554.67 µs 556.79 µs]
thrpt: [1.7128 MiB/s 1.7194 MiB/s 1.7251 MiB/s]
change:
time: [+0.2900% +0.8153% +1.3237%] (p = 0.00 < 0.05)
thrpt: [-1.3064% -0.8087% -0.2891%]
Change within noise threshold.
Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severestreams/walltime/1000-streams/each-1-bytes: No change in performance detected. time: [10.538 ms 10.552 ms 10.566 ms]
thrpt: [92.421 KiB/s 92.545 KiB/s 92.667 KiB/s]
change:
time: [-0.0083% +0.1833% +0.3715%] (p = 0.06 > 0.05)
thrpt: [-0.3701% -0.1830% +0.0083%]
No change in performance detected.streams/walltime/1000-streams/each-1000-bytes: Change within noise threshold. time: [33.992 ms 34.026 ms 34.061 ms]
thrpt: [27.999 MiB/s 28.028 MiB/s 28.056 MiB/s]
change:
time: [+0.5737% +0.7203% +0.8698%] (p = 0.00 < 0.05)
thrpt: [-0.8623% -0.7151% -0.5704%]
Change within noise threshold.streams-flow-controlled/walltime/1-streams/each-4194304-bytes: No change in performance detected. time: [25.828 ms 25.861 ms 25.895 ms]
thrpt: [154.47 MiB/s 154.67 MiB/s 154.87 MiB/s]
change:
time: [-0.2133% +0.1742% +0.4661%] (p = 0.36 > 0.05)
thrpt: [-0.4639% -0.1739% +0.2138%]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams-flow-controlled/walltime/10-streams/each-1048576-bytes: Change within noise threshold. time: [71.758 ms 71.841 ms 71.926 ms]
thrpt: [139.03 MiB/s 139.20 MiB/s 139.36 MiB/s]
change:
time: [+0.7659% +0.9292% +1.0899%] (p = 0.00 < 0.05)
thrpt: [-1.0782% -0.9206% -0.7601%]
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/walltime/pacing-false/varying-seeds: No change in performance detected. time: [17.537 ms 17.556 ms 17.585 ms]
thrpt: [227.47 MiB/s 227.84 MiB/s 228.09 MiB/s]
change:
time: [-0.1261% +0.0070% +0.1793%] (p = 0.94 > 0.05)
thrpt: [-0.1790% -0.0070% +0.1263%]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/walltime/pacing-true/varying-seeds: Change within noise threshold. time: [17.822 ms 17.834 ms 17.846 ms]
thrpt: [224.14 MiB/s 224.29 MiB/s 224.44 MiB/s]
change:
time: [+0.0277% +0.1252% +0.2231%] (p = 0.01 < 0.05)
thrpt: [-0.2226% -0.1251% -0.0277%]
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mildtransfer/walltime/pacing-false/same-seed: Change within noise threshold. time: [17.461 ms 17.485 ms 17.522 ms]
thrpt: [228.29 MiB/s 228.76 MiB/s 229.08 MiB/s]
change:
time: [-0.9201% -0.7422% -0.5038%] (p = 0.00 < 0.05)
thrpt: [+0.5064% +0.7477% +0.9286%]
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severetransfer/walltime/pacing-true/same-seed: Change within noise threshold. time: [17.885 ms 17.896 ms 17.907 ms]
thrpt: [223.38 MiB/s 223.52 MiB/s 223.65 MiB/s]
change:
time: [+0.3643% +0.4610% +0.5593%] (p = 0.00 < 0.05)
thrpt: [-0.5562% -0.4589% -0.3630%]
Change within noise threshold.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
4 (4.00%) high mildInstructions per cycleCriterion reported no significant timing changes. All benchmarks
Download data for |
Performance profiles for profiler.firefox.comBenchmarks (14)
|
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
|
Client/server transfer resultsPerformance differences relative to 5df7db1. 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 |
|
As far as I can tell, this mostly adds tests. Can these tests be folded into the pull requests that add their corresponding features? |
No description provided.