feat(transport/quic_datagrams): expose send queue capacity#3176
feat(transport/quic_datagrams): expose send queue capacity#3176mxinden wants to merge 1 commit intomozilla:mainfrom
Conversation
Add function `datagram_send_queue_capacity` to `Connection` and `Http3Client`. Before sending a WebTransport or MASQUE connect-udp datagram, users can check how many datagrams can still be queued for sending, thus avoiding datagrams being dropped due to a full send queue. Enables mozilla#2852.
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #3176 +/- ##
==========================================
- Coverage 93.49% 93.44% -0.06%
==========================================
Files 125 125
Lines 36640 36649 +9
Branches 36640 36649 +9
==========================================
- Hits 34258 34246 -12
- Misses 1537 1558 +21
Partials 845 845
|
CodSpeed Performance ReportMerging #3176 will degrade performances by 8.86%Comparing Summary
Benchmarks breakdown
|
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to c2caaa2. All resultsSucceeded Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
Unsupported Interop TestsQUIC Interop Runner, client vs. server neqo-latest as client
neqo-latest as server
|
Contains mozilla/neqo#3176 and mozilla/neqo#3171.
Benchmark resultsPerformance differences relative to 5701207. 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: No change in performance detected. time: [203.72 ms 204.13 ms 204.55 ms]
thrpt: [488.88 MiB/s 489.88 MiB/s 490.86 MiB/s]
change:
time: [-0.1432% +0.1712% +0.4860%] (p = 0.29 > 0.05)
thrpt: [-0.4837% -0.1709% +0.1434%]
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: Change within noise threshold. time: [279.38 ms 281.20 ms 283.01 ms]
thrpt: [35.335 Kelem/s 35.561 Kelem/s 35.793 Kelem/s]
change:
time: [-1.9182% -1.0247% -0.1103%] (p = 0.03 < 0.05)
thrpt: [+0.1104% +1.0353% +1.9557%]
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected. time: [38.759 ms 38.954 ms 39.168 ms]
thrpt: [25.531 B/s 25.672 B/s 25.800 B/s]
change:
time: [-0.4876% +0.1816% +0.8768%] (p = 0.59 > 0.05)
thrpt: [-0.8691% -0.1813% +0.4900%]
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold. time: [207.57 ms 207.84 ms 208.13 ms]
thrpt: [480.47 MiB/s 481.13 MiB/s 481.77 MiB/s]
change:
time: [-0.9175% -0.6785% -0.4641%] (p = 0.00 < 0.05)
thrpt: [+0.4662% +0.6831% +0.9260%]
decode 4096 bytes, mask ff: No change in performance detected. time: [11.312 µs 11.343 µs 11.382 µs]
change: [-0.7881% -0.0452% +0.6775%] (p = 0.91 > 0.05)
decode 1048576 bytes, mask ff: No change in performance detected. time: [2.9935 ms 3.0071 ms 3.0246 ms]
change: [-0.4697% +0.1439% +0.7876%] (p = 0.68 > 0.05)
decode 4096 bytes, mask 7f: No change in performance detected. time: [19.575 µs 19.623 µs 19.680 µs]
change: [-0.2214% +0.2868% +0.8801%] (p = 0.32 > 0.05)
decode 1048576 bytes, mask 7f: No change in performance detected. time: [5.0315 ms 5.0565 ms 5.0954 ms]
change: [-0.3650% +0.2315% +0.9861%] (p = 0.57 > 0.05)
decode 4096 bytes, mask 3f: No change in performance detected. time: [6.2081 µs 6.2342 µs 6.2673 µs]
change: [-0.3826% +0.3272% +1.1806%] (p = 0.45 > 0.05)
decode 1048576 bytes, mask 3f: No change in performance detected. time: [1.7580 ms 1.7655 ms 1.7789 ms]
change: [-0.8046% -0.1483% +0.6868%] (p = 0.75 > 0.05)
1-streams/each-1000-bytes/wallclock-time: Change within noise threshold. time: [590.42 µs 594.07 µs 597.90 µs]
change: [+0.7332% +1.4892% +2.2342%] (p = 0.00 < 0.05)
1-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [118.86 ms 119.08 ms 119.30 ms]
thrpt: [8.1861 KiB/s 8.2010 KiB/s 8.2161 KiB/s]
change:
time: [-0.3650% -0.0942% +0.1838%] (p = 0.51 > 0.05)
thrpt: [-0.1835% +0.0943% +0.3663%]
1000-streams/each-1-bytes/wallclock-time: No change in performance detected. time: [12.448 ms 12.491 ms 12.534 ms]
change: [-0.4661% +0.1375% +0.6946%] (p = 0.64 > 0.05)
1000-streams/each-1-bytes/simulated-time: No change in performance detected. time: [2.3321 s 2.3352 s 2.3384 s]
thrpt: [427.65 B/s 428.22 B/s 428.80 B/s]
change:
time: [-0.0251% +0.1793% +0.3799%] (p = 0.09 > 0.05)
thrpt: [-0.3785% -0.1790% +0.0252%]
1000-streams/each-1000-bytes/wallclock-time: No change in performance detected. time: [50.407 ms 50.530 ms 50.655 ms]
change: [-0.7163% -0.3371% +0.0362%] (p = 0.09 > 0.05)
coalesce_acked_from_zero 1+1 entries: No change in performance detected. time: [89.041 ns 89.356 ns 89.667 ns]
change: [-0.1196% +0.2946% +0.7654%] (p = 0.21 > 0.05)
coalesce_acked_from_zero 3+1 entries: No change in performance detected. time: [105.71 ns 106.02 ns 106.34 ns]
change: [-0.5660% -0.1483% +0.2886%] (p = 0.52 > 0.05)
coalesce_acked_from_zero 10+1 entries: No change in performance detected. time: [105.19 ns 105.47 ns 105.83 ns]
change: [-0.4739% -0.0641% +0.3373%] (p = 0.76 > 0.05)
coalesce_acked_from_zero 1000+1 entries: Change within noise threshold. time: [91.732 ns 91.875 ns 92.029 ns]
change: [+0.0010% +0.6122% +1.1261%] (p = 0.02 < 0.05)
RxStreamOrderer::inbound_frame(): Change within noise threshold. time: [109.77 ms 109.96 ms 110.25 ms]
change: [+0.5167% +0.7112% +0.9678%] (p = 0.00 < 0.05)
sent::Packets::take_ranges: No change in performance detected. time: [4.4204 µs 4.5228 µs 4.6354 µs]
change: [-5.9637% -2.0773% +1.4775%] (p = 0.31 > 0.05)
transfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold. time: [25.608 ms 25.643 ms 25.681 ms]
change: [+0.6654% +0.8679% +1.0776%] (p = 0.00 < 0.05)
transfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected. time: [25.149 s 25.182 s 25.215 s]
thrpt: [162.45 KiB/s 162.66 KiB/s 162.87 KiB/s]
change:
time: [-0.1172% +0.0690% +0.2620%] (p = 0.48 > 0.05)
thrpt: [-0.2613% -0.0690% +0.1174%]
transfer/pacing-true/varying-seeds/wallclock-time/run: Change within noise threshold. time: [26.344 ms 26.405 ms 26.469 ms]
change: [+1.4931% +1.8165% +2.1392%] (p = 0.00 < 0.05)
transfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected. time: [24.947 s 24.994 s 25.041 s]
thrpt: [163.57 KiB/s 163.88 KiB/s 164.19 KiB/s]
change:
time: [-0.1464% +0.0979% +0.3230%] (p = 0.43 > 0.05)
thrpt: [-0.3220% -0.0978% +0.1466%]
transfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold. time: [24.909 ms 24.941 ms 24.991 ms]
change: [-0.5246% -0.3612% -0.1493%] (p = 0.00 < 0.05)
transfer/pacing-false/same-seed/simulated-time/run: No change in performance detected. time: [25.234 s 25.234 s 25.234 s]
thrpt: [162.32 KiB/s 162.32 KiB/s 162.32 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000%] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000%]
transfer/pacing-true/same-seed/wallclock-time/run: Change within noise threshold. time: [26.337 ms 26.370 ms 26.420 ms]
change: [+0.8241% +0.9702% +1.1656%] (p = 0.00 < 0.05)
transfer/pacing-true/same-seed/simulated-time/run: No change in performance detected. time: [25.069 s 25.069 s 25.069 s]
thrpt: [163.39 KiB/s 163.39 KiB/s 163.39 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000%] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000%]
Download data for |
Client/server transfer resultsPerformance differences relative to 126b1df. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207 - mozilla/neqo#3234
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207 - mozilla/neqo#3234
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207 - mozilla/neqo#3234
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207 - mozilla/neqo#3234
Contains: - mozilla/neqo#3176 - mozilla/neqo#3171 - mozilla/neqo#3207 - mozilla/neqo#3234
Add function
datagram_send_queue_capacitytoConnectionandHttp3Client. Before sending a WebTransport or MASQUE connect-udp datagram, users can check how many datagrams can still be queued for sending, thus avoiding datagrams being dropped due to a full send queue.Enables #2852.