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
🟢 Approval recommended
The accounting paths, reset semantics, teardown behavior, and relevant edge cases are consistently implemented and tested.
Review effort: Balanced
Findings: None
What changed in this PR
Adds per-session accounting for QUIC datagrams written into packets or rejected by path-MTU limits.
Changes:
- Tracks sent and too-big datagram counts per session.
- Preserves pending counts when removing session queues.
- Adds transport-level coverage for counting and reset behavior.
| File | Description |
|---|---|
neqo-transport/src/quic_datagrams.rs |
Classifies dequeued datagrams and exposes counters. |
neqo-transport/src/lib.rs |
Re-exports the removal summary type. |
neqo-transport/src/datagram_queue.rs |
Stores counters and defines DroppedDatagrams. |
neqo-transport/src/connection/tests/datagram.rs |
Tests sent, too-big, and teardown counts. |
neqo-transport/src/connection/mod.rs |
Adds public per-session accounting APIs. |
neqo-http3/src/features/extended_connect/session.rs |
Adapts session cleanup to the new return type. |
💡 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_watermark_max_age #4030 +/- ##
=====================================================================
Coverage 96.92% 96.92%
=====================================================================
Files 119 119
Lines 41486 41524 +38
Branches 41486 41524 +38
=====================================================================
+ Hits 40210 40249 +39
+ Misses 1252 1251 -1
Partials 24 24
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Merging this PR will improve performance by 5.55%
Performance Changes
Tip Curious why performance improved? Comment Comparing |
DatagramQueue gains a sent counter, incremented by write_frames when a datagram is actually handed to the packet builder (not merely accepted into the queue), and drained via QuicDatagrams::take_session_sent_count / Connection::take_session_sent_datagrams. A datagram dropped at packet-build time for not fitting the path MTU is counted separately, drained via Connection::take_session_too_big_datagrams; both counts are also returned by drop_session_datagrams. Nothing reads these yet; the next commit uses them for a per-session aggregate stat.
db25390 to
ad03a20
Compare
4e60ccb to
c5b0e4b
Compare
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 ad03a20. All resultstransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1500 time: [50.741 ms 50.769 ms 50.796 ms]
thrpt: [1.9225 GiB/s 1.9236 GiB/s 1.9246 GiB/s]
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) low mild
1 (1.00%) high mildtransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1500 time: [51.960 ms 52.001 ms 52.041 ms]
thrpt: [1.8765 GiB/s 1.8780 GiB/s 1.8794 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.9582 ms 2.9600 ms 2.9617 ms]
thrpt: [337.64 B/s 337.84 B/s 338.04 B/s]
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-1500 time: [66.193 ms 66.468 ms 66.747 ms]
thrpt: [149.82 Kelem/s 150.45 Kelem/s 151.07 Kelem/s]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high mildstreams-flow-controlled/walltime/1-streams/each-4194304-bytes time: [10.287 ms 10.291 ms 10.294 ms]
thrpt: [388.58 MiB/s 388.71 MiB/s 388.83 MiB/s]
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high mildstreams-flow-controlled/walltime/10-streams/each-1048576-bytes time: [28.640 ms 28.647 ms 28.655 ms]
thrpt: [348.98 MiB/s 349.07 MiB/s 349.16 MiB/s]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/walltime/1-streams/each-1000-bytes time: [129.20 µs 129.73 µs 130.40 µs]
thrpt: [7.3134 MiB/s 7.3515 MiB/s 7.3814 MiB/s]
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high mildstreams/walltime/1000-streams/each-1-bytes time: [3.8470 ms 3.8581 ms 3.8689 ms]
thrpt: [252.41 KiB/s 253.12 KiB/s 253.85 KiB/s]streams/walltime/1000-streams/each-1000-bytes time: [11.382 ms 11.387 ms 11.391 ms]
thrpt: [83.720 MiB/s 83.753 MiB/s 83.786 MiB/s]transfer/walltime/pacing-false/same-seed time: [2.0652 ms 2.0664 ms 2.0677 ms]
thrpt: [1.8892 GiB/s 1.8903 GiB/s 1.8914 GiB/s]transfer/walltime/pacing-false/varying-seeds time: [2.0549 ms 2.0562 ms 2.0577 ms]
thrpt: [1.8984 GiB/s 1.8998 GiB/s 1.9010 GiB/s]transfer/walltime/pacing-true/same-seed time: [2.1149 ms 2.1170 ms 2.1196 ms]
thrpt: [1.8429 GiB/s 1.8452 GiB/s 1.8470 GiB/s]transfer/walltime/pacing-true/varying-seeds time: [2.0997 ms 2.1013 ms 2.1035 ms]
thrpt: [1.8571 GiB/s 1.8589 GiB/s 1.8604 GiB/s]Instructions per cycleCriterion reported no significant timing changes. All benchmarks
Profiles for profiler.firefox.com (62)
Download data for |
Client/server transfer resultsPerformance differences relative to ad03a20. 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 |
No description provided.