Skip to content

chore: prepare v0.17.0#3048

Merged
larseggert merged 1 commit intomozilla:mainfrom
mxinden:prepare-v0.17.0
Oct 16, 2025
Merged

chore: prepare v0.17.0#3048
larseggert merged 1 commit intomozilla:mainfrom
mxinden:prepare-v0.17.0

Conversation

@mxinden
Copy link
Member

@mxinden mxinden commented Oct 14, 2025

I would like to get @omansfeld Cubic changes into Firefox.

In addition, most relevant changes:

Copilot AI review requested due to automatic review settings October 14, 2025 16:00
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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
Copy link

codecov bot commented Oct 14, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 93.38%. Comparing base (b90ded6) to head (82c9373).
⚠️ Report is 5 commits behind head on main.

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     
Components Coverage Δ
neqo-common 97.50% <ø> (ø)
neqo-crypto 83.25% <ø> (-0.48%) ⬇️
neqo-http3 93.34% <ø> (ø)
neqo-qpack 94.18% <ø> (ø)
neqo-transport 94.45% <ø> (-0.03%) ⬇️
neqo-udp 78.84% <ø> (ø)
mtu 85.76% <ø> (ø)

@github-actions
Copy link
Contributor

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to 791fd40.

neqo-latest as client

neqo-latest as server

All results

Succeeded Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

Unsupported Interop Tests

QUIC Interop Runner, client vs. server

neqo-latest as client

neqo-latest as server

@github-actions
Copy link
Contributor

Client/server transfer results

Performance differences relative to 7334a18.

Transfer of 33554432 bytes over loopback, min. 100 runs. All unit-less numbers are in milliseconds.

Client vs. server (params) Mean ± σ Min Max MiB/s ± σ Δ main Δ main
google vs. google 451.7 ± 4.1 445.7 464.4 70.8 ± 7.8
google vs. neqo (cubic, paced) 275.5 ± 4.0 268.4 285.6 116.1 ± 8.0 💚 -1.9 -0.7%
msquic vs. msquic 214.5 ± 83.2 146.4 437.6 149.2 ± 0.4
msquic vs. neqo (cubic, paced) 224.1 ± 78.2 152.7 668.1 142.8 ± 0.4 12.3 5.8%
neqo vs. google (cubic, paced) 751.4 ± 7.3 697.2 779.1 42.6 ± 4.4 -1.2 -0.2%
neqo vs. msquic (cubic, paced) 158.0 ± 6.0 150.6 182.3 202.5 ± 5.3 -1.6 -1.0%
neqo vs. neqo (cubic) 90.0 ± 4.6 80.8 99.8 355.5 ± 7.0 0.7 0.8%
neqo vs. neqo (cubic, paced) 92.0 ± 4.8 84.9 107.6 347.7 ± 6.7 -0.1 -0.1%
neqo vs. neqo (reno) 90.9 ± 4.9 78.7 104.2 352.0 ± 6.5 💔 3.0 3.4%
neqo vs. neqo (reno, paced) 91.6 ± 4.9 82.8 109.4 349.2 ± 6.5 -0.8 -0.8%
neqo vs. quiche (cubic, paced) 192.6 ± 4.0 186.6 202.4 166.2 ± 8.0 -0.1 -0.0%
neqo vs. s2n (cubic, paced) 220.0 ± 4.7 212.5 231.9 145.4 ± 6.8 -0.0 -0.0%
quiche vs. neqo (cubic, paced) 152.6 ± 5.5 141.4 163.1 209.7 ± 5.8 -1.3 -0.9%
quiche vs. quiche 144.8 ± 4.8 135.6 156.0 220.9 ± 6.7
s2n vs. neqo (cubic, paced) 175.6 ± 5.0 165.6 191.7 182.2 ± 6.4 -0.4 -0.2%
s2n vs. s2n 247.2 ± 24.8 232.5 348.9 129.5 ± 1.3

Download data for profiler.firefox.com or download performance comparison data.

@github-actions
Copy link
Contributor

Benchmark results

Performance 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%]

Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high severe

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%]

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild

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%]

Found 23 outliers among 100 measurements (23.00%)
3 (3.00%) low severe
20 (20.00%) high severe

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%]

Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high mild

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)

Found 13 outliers among 100 measurements (13.00%)
1 (1.00%) low severe
2 (2.00%) low mild
10 (10.00%) high severe

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)

Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severe

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)

Found 22 outliers among 100 measurements (22.00%)
1 (1.00%) low severe
3 (3.00%) low mild
18 (18.00%) high severe

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)

Found 14 outliers among 100 measurements (14.00%)
14 (14.00%) high severe

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)

Found 12 outliers among 100 measurements (12.00%)
8 (8.00%) low mild
1 (1.00%) high mild
3 (3.00%) high severe

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)

Found 23 outliers among 100 measurements (23.00%)
1 (1.00%) high mild
22 (22.00%) high severe

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)

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe
1-streams/each-1000-bytes/simulated-time
time: [118.78 ms 119.01 ms 119.23 ms]
thrpt: [8.1903 KiB/s 8.2060 KiB/s 8.2217 KiB/s]
change:
time: [−0.4361% −0.1766% +0.1108%] (p = 0.21 > 0.05)
thrpt: [−0.1107% +0.1769% +0.4380%]
No change in performance detected.

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)

Found 7 outliers among 100 measurements (7.00%)
5 (5.00%) high mild
2 (2.00%) high severe

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)

Found 9 outliers among 100 measurements (9.00%)
9 (9.00%) high severe

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)

Found 13 outliers among 100 measurements (13.00%)
3 (3.00%) low severe
2 (2.00%) low mild
4 (4.00%) high mild
4 (4.00%) high severe

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)

Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severe

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)

Found 18 outliers among 100 measurements (18.00%)
4 (4.00%) low severe
5 (5.00%) low mild
5 (5.00%) high mild
4 (4.00%) high severe

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)

Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe

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)

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severe

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%]

Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low mild
2 (2.00%) high mild

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)

Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild

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%]

Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mild

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)

Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild

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)

Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) high mild
1 (1.00%) high severe

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 profiler.firefox.com or download performance comparison data.

@github-actions
Copy link
Contributor

🐰 Bencher Report

Branchprepare-v0.17.0
TestbedOn-prem

🚨 2 Alerts

BenchmarkMeasure
Units
ViewBenchmark Result
(Result Δ%)
Upper Boundary
(Limit %)
decode 1048576 bytes, mask 3fLatency
milliseconds (ms)
📈 plot
🚷 threshold
🚨 alert (🔔)
1.79 ms
(+12.23%)Baseline: 1.59 ms
1.63 ms
(109.88%)

decode 1048576 bytes, mask 7fLatency
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
BenchmarkLatencyBenchmark 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%)
🐰 View full continuous benchmarking report in Bencher

@larseggert larseggert added this pull request to the merge queue Oct 16, 2025
Merged via the queue into mozilla:main with commit 0f8a822 Oct 16, 2025
115 of 118 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants