Conversation
There was a problem hiding this comment.
Pull Request Overview
This is a version bump from 0.16.1 to 0.17.0 to prepare for a new release that includes Cubic congestion control improvements and various performance, bug fixes, and feature enhancements.
- Updated version number in Cargo.toml from 0.16.1 to 0.17.0
- Incorporates numerous improvements including Cubic congestion control changes, HTTP/3 optimizations, and UDP transport enhancements
- Prepares the codebase for integration into Firefox
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #3048 +/- ##
==========================================
- Coverage 93.41% 93.38% -0.04%
==========================================
Files 124 124
Lines 35969 35969
Branches 35969 35969
==========================================
- Hits 33602 33588 -14
- Misses 1523 1536 +13
- Partials 844 845 +1
|
Failed Interop TestsQUIC Interop Runner, client vs. server, differences relative to 791fd40. neqo-latest as client
neqo-latest as server
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
|
Client/server transfer resultsPerformance differences relative to 7334a18. Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.
Download data for |
Benchmark resultsPerformance differences relative to 7334a18. 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold. time: [199.27 ms 199.69 ms 200.16 ms]
thrpt: [499.61 MiB/s 500.79 MiB/s 501.84 MiB/s]
change:
time: [+0.0206% +0.3046% +0.5845%] (p = 0.04 < 0.05)
thrpt: [−0.5811% −0.3037% −0.0206%]
1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: Change within noise threshold. time: [284.27 ms 285.85 ms 287.42 ms]
thrpt: [34.792 Kelem/s 34.983 Kelem/s 35.178 Kelem/s]
change:
time: [+0.2457% +1.0509% +1.8665%] (p = 0.01 < 0.05)
thrpt: [−1.8323% −1.0400% −0.2450%]
1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected. time: [28.520 ms 28.639 ms 28.778 ms]
thrpt: [34.749 B/s 34.917 B/s 35.063 B/s]
change:
time: [−0.4220% +0.1926% +0.8498%] (p = 0.55 > 0.05)
thrpt: [−0.8427% −0.1922% +0.4238%]
1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: Change within noise threshold. time: [203.57 ms 203.78 ms 203.99 ms]
thrpt: [490.21 MiB/s 490.73 MiB/s 491.24 MiB/s]
change:
time: [+0.3767% +0.5298% +0.6857%] (p = 0.00 < 0.05)
thrpt: [−0.6811% −0.5270% −0.3753%]
decode 4096 bytes, mask ff: 💚 Performance has improved. time: [10.628 µs 10.669 µs 10.715 µs]
change: [−8.9355% −8.4884% −8.0624%] (p = 0.00 < 0.05)
decode 1048576 bytes, mask ff: No change in performance detected. time: [3.0090 ms 3.0196 ms 3.0314 ms]
change: [−0.8247% −0.3343% +0.1749%] (p = 0.19 > 0.05)
decode 4096 bytes, mask 7f: 💚 Performance has improved. time: [19.383 µs 19.443 µs 19.511 µs]
change: [−3.1504% −2.6746% −2.2227%] (p = 0.00 < 0.05)
decode 1048576 bytes, mask 7f: Change within noise threshold. time: [5.0868 ms 5.0985 ms 5.1116 ms]
change: [+0.5514% +0.8852% +1.2168%] (p = 0.00 < 0.05)
decode 4096 bytes, mask 3f: 💚 Performance has improved. time: [5.5153 µs 5.5865 µs 5.7283 µs]
change: [−33.660% −33.086% −32.282%] (p = 0.00 < 0.05)
decode 1048576 bytes, mask 3f: 💔 Performance has regressed. time: [1.7774 ms 1.7885 ms 1.7997 ms]
change: [+11.639% +12.419% +13.310%] (p = 0.00 < 0.05)
1-streams/each-1000-bytes/wallclock-time: No change in performance detected. time: [582.45 µs 583.49 µs 584.81 µs]
change: [−1.0246% −0.5029% −0.0157%] (p = 0.05 > 0.05)
1000-streams/each-1-bytes/wallclock-time: 💔 Performance has regressed. time: [13.911 ms 13.935 ms 13.960 ms]
change: [+1.3093% +1.7818% +2.1444%] (p = 0.00 < 0.05)
1000-streams/each-1-bytes/simulated-time: No change in performance detected. time: [14.987 s 15.002 s 15.017 s]
thrpt: [66.590 B/s 66.657 B/s 66.724 B/s]
change:
time: [−0.0869% +0.0525% +0.1835%] (p = 0.45 > 0.05)
thrpt: [−0.1832% −0.0524% +0.0869%]
1000-streams/each-1000-bytes/wallclock-time: 💔 Performance has regressed. time: [49.630 ms 49.809 ms 49.988 ms]
change: [+1.1939% +1.8446% +2.4433%] (p = 0.00 < 0.05)
1000-streams/each-1000-bytes/simulated-time: No change in performance detected. time: [18.813 s 18.965 s 19.121 s]
thrpt: [51.074 KiB/s 51.494 KiB/s 51.910 KiB/s]
change:
time: [−1.2772% −0.0035% +1.2400%] (p = 0.99 > 0.05)
thrpt: [−1.2248% +0.0035% +1.2937%]
coalesce_acked_from_zero 1+1 entries: No change in performance detected. time: [88.367 ns 88.633 ns 88.920 ns]
change: [−0.2876% +0.1379% +0.5765%] (p = 0.52 > 0.05)
coalesce_acked_from_zero 3+1 entries: No change in performance detected. time: [106.65 ns 106.95 ns 107.27 ns]
change: [−0.8420% −0.3027% +0.2249%] (p = 0.27 > 0.05)
coalesce_acked_from_zero 10+1 entries: No change in performance detected. time: [105.98 ns 106.29 ns 106.71 ns]
change: [−0.0303% +0.2679% +0.6840%] (p = 0.09 > 0.05)
coalesce_acked_from_zero 1000+1 entries: No change in performance detected. time: [89.774 ns 89.891 ns 90.023 ns]
change: [−0.5636% +0.2783% +1.3320%] (p = 0.55 > 0.05)
RxStreamOrderer::inbound_frame(): 💚 Performance has improved. time: [107.06 ms 107.11 ms 107.16 ms]
change: [−1.7637% −1.6661% −1.5686%] (p = 0.00 < 0.05)
sent::Packets::take_ranges: No change in performance detected. time: [4.5530 µs 4.6023 µs 4.6452 µs]
change: [−1.8354% +0.8001% +3.5718%] (p = 0.57 > 0.05)
transfer/pacing-false/varying-seeds/wallclock-time/run: Change within noise threshold. time: [25.433 ms 25.484 ms 25.542 ms]
change: [+0.1322% +0.3792% +0.6549%] (p = 0.01 < 0.05)
transfer/pacing-false/varying-seeds/simulated-time/run: No change in performance detected. time: [25.165 s 25.202 s 25.238 s]
thrpt: [162.29 KiB/s 162.53 KiB/s 162.77 KiB/s]
change:
time: [−0.1360% +0.0556% +0.2423%] (p = 0.57 > 0.05)
thrpt: [−0.2417% −0.0556% +0.1362%]
transfer/pacing-true/varying-seeds/wallclock-time/run: No change in performance detected. time: [25.928 ms 25.983 ms 26.040 ms]
change: [−0.2633% +0.1114% +0.4750%] (p = 0.56 > 0.05)
transfer/pacing-true/varying-seeds/simulated-time/run: No change in performance detected. time: [24.948 s 24.985 s 25.023 s]
thrpt: [163.69 KiB/s 163.94 KiB/s 164.18 KiB/s]
change:
time: [−0.2934% −0.0735% +0.1448%] (p = 0.51 > 0.05)
thrpt: [−0.1446% +0.0735% +0.2943%]
transfer/pacing-false/same-seed/wallclock-time/run: Change within noise threshold. time: [25.844 ms 25.862 ms 25.881 ms]
change: [−0.8404% −0.7344% −0.6288%] (p = 0.00 < 0.05)
transfer/pacing-false/same-seed/simulated-time/run: No change in performance detected. time: [25.710 s 25.710 s 25.710 s]
thrpt: [159.31 KiB/s 159.31 KiB/s 159.31 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.733 ms 26.765 ms 26.807 ms]
change: [−1.0032% −0.7855% −0.5789%] (p = 0.00 < 0.05)
transfer/pacing-true/same-seed/simulated-time/run: No change in performance detected. time: [25.675 s 25.675 s 25.675 s]
thrpt: [159.53 KiB/s 159.53 KiB/s 159.53 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000%] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000%]
Download data for |
|
| Branch | prepare-v0.17.0 |
| Testbed | On-prem |
🚨 2 Alerts
| Benchmark | Measure Units | View | Benchmark Result (Result Δ%) | Upper Boundary (Limit %) |
|---|---|---|---|---|
| decode 1048576 bytes, mask 3f | Latency milliseconds (ms) | 📈 plot 🚷 threshold 🚨 alert (🔔) | 1.79 ms(+12.23%)Baseline: 1.59 ms | 1.63 ms (109.88%) |
| decode 1048576 bytes, mask 7f | Latency milliseconds (ms) | 📈 plot 🚷 threshold 🚨 alert (🔔) | 5.10 ms(+0.81%)Baseline: 5.06 ms | 5.08 ms (100.40%) |
Click to view all benchmark results
| Benchmark | Latency | Benchmark Result nanoseconds (ns) (Result Δ%) | Upper Boundary nanoseconds (ns) (Limit %) |
|---|---|---|---|
| 1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client | 📈 view plot 🚷 view threshold | 203,780,000.00 ns(-2.33%)Baseline: 208,648,776.60 ns | 218,022,059.30 ns (93.47%) |
| 1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client | 📈 view plot 🚷 view threshold | 199,690,000.00 ns(-1.47%)Baseline: 202,663,244.68 ns | 212,887,693.83 ns (93.80%) |
| 1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client | 📈 view plot 🚷 view threshold | 28,639,000.00 ns(+0.78%)Baseline: 28,416,191.49 ns | 28,860,391.95 ns (99.23%) |
| 1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client | 📈 view plot 🚷 view threshold | 285,850,000.00 ns(-2.86%)Baseline: 294,276,170.21 ns | 306,223,917.87 ns (93.35%) |
| 1-streams/each-1000-bytes/simulated-time | 📈 view plot 🚷 view threshold | 119,010,000.00 ns(+0.55%)Baseline: 118,357,765.96 ns | 120,888,091.19 ns (98.45%) |
| 1-streams/each-1000-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 583,490.00 ns(-2.36%)Baseline: 597,622.61 ns | 622,653.75 ns (93.71%) |
| 1000-streams/each-1-bytes/simulated-time | 📈 view plot 🚷 view threshold | 15,002,000,000.00 ns(+0.07%)Baseline: 14,992,090,425.53 ns | 15,010,903,716.43 ns (99.94%) |
| 1000-streams/each-1-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 13,935,000.00 ns(-1.83%)Baseline: 14,195,388.30 ns | 14,972,950.74 ns (93.07%) |
| 1000-streams/each-1000-bytes/simulated-time | 📈 view plot 🚷 view threshold | 18,965,000,000.00 ns(+0.23%)Baseline: 18,921,101,063.83 ns | 19,188,290,373.30 ns (98.84%) |
| 1000-streams/each-1000-bytes/wallclock-time | 📈 view plot 🚷 view threshold | 49,809,000.00 ns(-4.44%)Baseline: 52,122,755.32 ns | 58,591,784.41 ns (85.01%) |
| RxStreamOrderer::inbound_frame() | 📈 view plot 🚷 view threshold | 107,110,000.00 ns(-2.44%)Baseline: 109,791,542.55 ns | 111,982,001.99 ns (95.65%) |
| coalesce_acked_from_zero 1+1 entries | 📈 view plot 🚷 view threshold | 88.63 ns(+0.02%)Baseline: 88.62 ns | 89.29 ns (99.26%) |
| coalesce_acked_from_zero 10+1 entries | 📈 view plot 🚷 view threshold | 106.29 ns(+0.20%)Baseline: 106.08 ns | 107.08 ns (99.26%) |
| coalesce_acked_from_zero 1000+1 entries | 📈 view plot 🚷 view threshold | 89.89 ns(+0.08%)Baseline: 89.82 ns | 94.43 ns (95.20%) |
| coalesce_acked_from_zero 3+1 entries | 📈 view plot 🚷 view threshold | 106.95 ns(+0.33%)Baseline: 106.60 ns | 107.55 ns (99.44%) |
| decode 1048576 bytes, mask 3f | 📈 view plot 🚷 view threshold 🚨 view alert (🔔) | 1,788,500.00 ns(+12.23%)Baseline: 1,593,572.87 ns | 1,627,752.33 ns (109.88%) |
| decode 1048576 bytes, mask 7f | 📈 view plot 🚷 view threshold 🚨 view alert (🔔) | 5,098,500.00 ns(+0.81%)Baseline: 5,057,533.51 ns | 5,078,273.82 ns (100.40%) |
| decode 1048576 bytes, mask ff | 📈 view plot 🚷 view threshold | 3,019,600.00 ns(-0.40%)Baseline: 3,031,627.13 ns | 3,043,555.01 ns (99.21%) |
| decode 4096 bytes, mask 3f | 📈 view plot 🚷 view threshold | 5,586.50 ns(-32.55%)Baseline: 8,281.84 ns | 8,746.69 ns (63.87%) |
| decode 4096 bytes, mask 7f | 📈 view plot 🚷 view threshold | 19,443.00 ns(-2.81%)Baseline: 20,005.01 ns | 20,129.44 ns (96.59%) |
| decode 4096 bytes, mask ff | 📈 view plot 🚷 view threshold | 10,669.00 ns(-8.98%)Baseline: 11,721.02 ns | 12,024.19 ns (88.73%) |
| sent::Packets::take_ranges | 📈 view plot 🚷 view threshold | 4,602.30 ns(-3.05%)Baseline: 4,747.07 ns | 4,986.69 ns (92.29%) |
| transfer/pacing-false/same-seed/simulated-time/run | 📈 view plot 🚷 view threshold | 25,710,000,000.00 ns(+1.72%)Baseline: 25,275,000,000.00 ns | 25,817,812,451.62 ns (99.58%) |
| transfer/pacing-false/same-seed/wallclock-time/run | 📈 view plot 🚷 view threshold | 25,862,000.00 ns(-0.50%)Baseline: 25,991,559.14 ns | 27,068,634.48 ns (95.54%) |
| transfer/pacing-false/varying-seeds/simulated-time/run | 📈 view plot 🚷 view threshold | 25,202,000,000.00 ns(+0.13%)Baseline: 25,168,408,602.15 ns | 25,216,413,268.99 ns (99.94%) |
| transfer/pacing-false/varying-seeds/wallclock-time/run | 📈 view plot 🚷 view threshold | 25,484,000.00 ns(-2.72%)Baseline: 26,197,623.66 ns | 27,647,876.89 ns (92.17%) |
| transfer/pacing-true/same-seed/simulated-time/run | 📈 view plot 🚷 view threshold | 25,675,000,000.00 ns(+0.26%)Baseline: 25,607,177,419.35 ns | 25,691,809,468.26 ns (99.93%) |
| transfer/pacing-true/same-seed/wallclock-time/run | 📈 view plot 🚷 view threshold | 26,765,000.00 ns(-2.29%)Baseline: 27,393,661.29 ns | 28,806,046.81 ns (92.91%) |
| transfer/pacing-true/varying-seeds/simulated-time/run | 📈 view plot 🚷 view threshold | 24,985,000,000.00 ns(-0.04%)Baseline: 24,994,182,795.70 ns | 25,044,061,818.84 ns (99.76%) |
| transfer/pacing-true/varying-seeds/wallclock-time/run | 📈 view plot 🚷 view threshold | 25,983,000.00 ns(-2.77%)Baseline: 26,724,005.38 ns | 28,220,037.46 ns (92.07%) |
I would like to get @omansfeld Cubic changes into Firefox.
In addition, most relevant changes:
Bytes(perf(http3): eliminate allocations with zero-copyBytes#3010)add_event_data_now(feat: Remove use ofadd_event_data_now#3006)saturating_duration_sincefor t (refactor(transport/cubic): usesaturating_duration_sincefor t #2997)Aead(fix: Implement a trait forAead#3014)Instant::now()inneqo-common/src/qlog.rs(fix: Don't callInstant::now()inneqo-common/src/qlog.rs#3008)