Skip to content

feat: Import the mtu crate - #2897

Merged
larseggert merged 20 commits into
mozilla:mainfrom
larseggert:feat-import-mtu
Sep 2, 2025
Merged

larseggert merged 20 commits into
mozilla:mainfrom
larseggert:feat-import-mtu

Conversation

@larseggert

Copy link
Copy Markdown
Collaborator

In preparation of archiving the standalone repo. There's little point in having it be separate from the main consumer.

In preparation of archiving the standalone repo. There's little point in having it be separate from the main consumer.
@codecov

codecov Bot commented Aug 25, 2025 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 85.79655% with 74 lines in your changes missing coverage. Please review.
✅ Project coverage is 93.01%. Comparing base (820b658) to head (bce73f3).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2897      +/-   ##
==========================================
- Coverage   95.48%   93.01%   -2.47%     
==========================================
  Files         115      120       +5     
  Lines       34476    34997     +521     
  Branches    34476    34997     +521     
==========================================
- Hits        32919    32553     -366     
- Misses       1550     1590      +40     
- Partials        7      854     +847     
Components Coverage Δ
neqo-common 97.23% <ø> (-0.91%) ⬇️
neqo-crypto 82.91% <ø> (-6.87%) ⬇️
neqo-http3 92.42% <ø> (-2.01%) ⬇️
neqo-qpack 93.82% <ø> (-2.09%) ⬇️
neqo-transport 94.39% <ø> (-2.11%) ⬇️
neqo-udp 80.00% <100.00%> (-11.18%) ⬇️
mtu 85.76% <85.76%> (∅)

@github-actions

github-actions Bot commented Aug 25, 2025 •

Copy link
Copy Markdown
Contributor

Failed Interop Tests

QUIC Interop Runner, client vs. server, differences relative to ad9c66a.

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

@mxinden

mxinden commented Aug 25, 2025

Copy link
Copy Markdown
Member

In favor of this move!

In case you want to maintain the mozilla/mtu git history, there are various tricks to combine two git repositories including their history, e.g. here mozilla/neqo and mozilla/mtu.

https://stackoverflow.com/questions/5995826/import-a-git-repository-with-all-its-history-into-an-existing-git-repository

I don't have an opinion. In other words, I am fine loosing the mozilla/mtu git history.

@github-actions

github-actions Bot commented Aug 25, 2025 •

Copy link
Copy Markdown
Contributor

Benchmark results

Performance differences relative to bf80acf.

1-conn/1-100mb-resp/mtu-1504 (aka. Download)/client: Change within noise threshold.
       time:   [198.66 ms 198.93 ms 199.20 ms]
       thrpt:  [502.01 MiB/s 502.70 MiB/s 503.37 MiB/s]
change:
       time:   [−1.1600% −0.9363% −0.7173%] (p = 0.00 < 0.05)
       thrpt:  [+0.7225% +0.9451% +1.1736%]

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

1-conn/10_000-parallel-1b-resp/mtu-1504 (aka. RPS)/client: No change in performance detected.
       time:   [302.33 ms 303.78 ms 305.28 ms]
       thrpt:  [32.757 Kelem/s 32.918 Kelem/s 33.076 Kelem/s]
change:
       time:   [−0.3741% +0.3231% +1.0351%] (p = 0.36 > 0.05)
       thrpt:  [−1.0245% −0.3221% +0.3755%]

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

1-conn/1-1b-resp/mtu-1504 (aka. HPS)/client: No change in performance detected.
       time:   [28.055 ms 28.204 ms 28.373 ms]
       thrpt:  [35.245   B/s 35.456   B/s 35.644   B/s]
change:
       time:   [−0.8054% −0.0418% +0.7372%] (p = 0.91 > 0.05)
       thrpt:  [−0.7318% +0.0418% +0.8119%]

Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high severe

1-conn/1-100mb-req/mtu-1504 (aka. Upload)/client: 💚 Performance has improved.
       time:   [203.76 ms 204.06 ms 204.40 ms]
       thrpt:  [489.24 MiB/s 490.06 MiB/s 490.78 MiB/s]
change:
       time:   [−2.2040% −2.0225% −1.8127%] (p = 0.00 < 0.05)
       thrpt:  [+1.8461% +2.0643% +2.2537%]

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

decode 4096 bytes, mask ff: No change in performance detected.
       time:   [11.794 µs 11.819 µs 11.852 µs]
       change: [−0.1906% +0.3973% +1.0029%] (p = 0.25 > 0.05)

Found 18 outliers among 100 measurements (18.00%)
1 (1.00%) low severe
5 (5.00%) low mild
2 (2.00%) high mild
10 (10.00%) high severe

decode 1048576 bytes, mask ff: No change in performance detected.
       time:   [3.0200 ms 3.0292 ms 3.0400 ms]
       change: [−0.5066% −0.0166% +0.4807%] (p = 0.92 > 0.05)

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

decode 4096 bytes, mask 7f: No change in performance detected.
       time:   [19.965 µs 20.063 µs 20.189 µs]
       change: [−0.5160% +0.0443% +0.6117%] (p = 0.89 > 0.05)

Found 20 outliers among 100 measurements (20.00%)
1 (1.00%) low severe
3 (3.00%) low mild
2 (2.00%) high mild
14 (14.00%) high severe

decode 1048576 bytes, mask 7f: No change in performance detected.
       time:   [5.0459 ms 5.0572 ms 5.0701 ms]
       change: [−0.3293% +0.0240% +0.3582%] (p = 0.90 > 0.05)

Found 13 outliers among 100 measurements (13.00%)
13 (13.00%) high severe

decode 4096 bytes, mask 3f: No change in performance detected.
       time:   [8.2765 µs 8.3110 µs 8.3513 µs]
       change: [−0.1929% +1.4054% +3.6005%] (p = 0.23 > 0.05)

Found 20 outliers among 100 measurements (20.00%)
5 (5.00%) low mild
4 (4.00%) high mild
11 (11.00%) high severe

decode 1048576 bytes, mask 3f: No change in performance detected.
       time:   [1.5867 ms 1.5935 ms 1.6006 ms]
       change: [−0.4244% +0.1691% +0.7859%] (p = 0.58 > 0.05)

Found 8 outliers among 100 measurements (8.00%)
8 (8.00%) high severe

coalesce_acked_from_zero 1+1 entries: Change within noise threshold.
       time:   [88.398 ns 88.705 ns 89.019 ns]
       change: [+0.0586% +0.7034% +1.3316%] (p = 0.03 < 0.05)

Found 11 outliers among 100 measurements (11.00%)
9 (9.00%) high mild
2 (2.00%) high severe

coalesce_acked_from_zero 3+1 entries: No change in performance detected.
       time:   [106.02 ns 106.21 ns 106.42 ns]
       change: [−1.7548% −0.3094% +0.5740%] (p = 0.75 > 0.05)

Found 15 outliers among 100 measurements (15.00%)
2 (2.00%) low mild
7 (7.00%) high mild
6 (6.00%) high severe

coalesce_acked_from_zero 10+1 entries: No change in performance detected.
       time:   [105.52 ns 105.66 ns 105.88 ns]
       change: [−0.4994% +0.0458% +0.5721%] (p = 0.87 > 0.05)

Found 9 outliers among 100 measurements (9.00%)
4 (4.00%) low mild
1 (1.00%) high mild
4 (4.00%) high severe

coalesce_acked_from_zero 1000+1 entries: No change in performance detected.
       time:   [89.034 ns 89.186 ns 89.361 ns]
       change: [−0.5926% +0.5405% +1.8506%] (p = 0.40 > 0.05)

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

RxStreamOrderer::inbound_frame(): No change in performance detected.
       time:   [107.95 ms 108.10 ms 108.36 ms]
       change: [−0.1836% +0.0493% +0.3016%] (p = 0.74 > 0.05)

Found 12 outliers among 100 measurements (12.00%)
8 (8.00%) low mild
2 (2.00%) high mild
2 (2.00%) high severe

sent::Packets::take_ranges: :green_heart: Performance has improved.
       time:   [5.0692 µs 5.1377 µs 5.1979 µs]
       change: [−41.553% −35.696% −21.284%] (p = 0.00 < 0.05)

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

transfer/pacing-false/varying-seeds/wallclock-time: Change within noise threshold.
       time:   [28.428 ms 28.477 ms 28.526 ms]
       change: [−1.0617% −0.7744% −0.5025%] (p = 0.00 < 0.05)
transfer/pacing-false/varying-seeds/simulated-time: No change in performance detected.
       time:   [46.303 s 46.449 s 46.594 s]
       thrpt:  [87.907 KiB/s 88.183 KiB/s 88.461 KiB/s]
change:
       time:   [−0.4075% +0.0508% +0.4701%] (p = 0.82 > 0.05)
       thrpt:  [−0.4679% −0.0508% +0.4092%]
transfer/pacing-true/varying-seeds/wallclock-time: No change in performance detected.
       time:   [29.494 ms 29.577 ms 29.660 ms]
       change: [−0.6266% −0.2358% +0.1499%] (p = 0.23 > 0.05)

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

transfer/pacing-true/varying-seeds/simulated-time: No change in performance detected.
       time:   [45.745 s 45.891 s 46.040 s]
       thrpt:  [88.966 KiB/s 89.254 KiB/s 89.540 KiB/s]
change:
       time:   [−0.4713% −0.0170% +0.4411%] (p = 0.94 > 0.05)
       thrpt:  [−0.4392% +0.0170% +0.4736%]
transfer/pacing-false/same-seed/wallclock-time: Change within noise threshold.
       time:   [29.244 ms 29.285 ms 29.326 ms]
       change: [−2.5255% −2.2812% −2.0606%] (p = 0.00 < 0.05)
transfer/pacing-false/same-seed/simulated-time: No change in performance detected.
       time:   [46.929 s 47.050 s 47.172 s]
       thrpt:  [86.831 KiB/s 87.056 KiB/s 87.281 KiB/s]
change:
       time:   [−0.0502% +0.3142% +0.6561%] (p = 0.08 > 0.05)
       thrpt:  [−0.6518% −0.3132% +0.0502%]

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

transfer/pacing-true/same-seed/wallclock-time: Change within noise threshold.
       time:   [30.154 ms 30.215 ms 30.284 ms]
       change: [+0.5336% +0.7972% +1.0579%] (p = 0.00 < 0.05)

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

transfer/pacing-true/same-seed/simulated-time: No change in performance detected.
       time:   [45.103 s 45.197 s 45.293 s]
       thrpt:  [90.433 KiB/s 90.626 KiB/s 90.815 KiB/s]
change:
       time:   [−0.2976% +0.0072% +0.3062%] (p = 0.96 > 0.05)
       thrpt:  [−0.3052% −0.0072% +0.2985%]

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

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

@github-actions

github-actions Bot commented Aug 25, 2025 •

Copy link
Copy Markdown
Contributor

Client/server transfer results

Performance differences relative to 820b658.

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 455.3 ± 3.5 449.7 469.0 70.3 ± 9.1
google vs. neqo (cubic, paced) 275.4 ± 4.5 266.3 283.7 116.2 ± 7.1 -0.9 -0.3%
msquic vs. msquic 159.5 ± 28.3 129.8 300.9 200.6 ± 1.1
msquic vs. neqo (cubic, paced) 188.8 ± 24.0 149.1 276.3 169.5 ± 1.3 -0.4 -0.2%
neqo vs. google (cubic, paced) 757.8 ± 4.4 739.2 770.2 42.2 ± 7.3 -0.6 -0.1%
neqo vs. msquic (cubic, paced) 158.3 ± 7.0 150.1 186.9 202.2 ± 4.6 0.8 0.5%
neqo vs. neqo (cubic) 95.0 ± 6.3 83.7 113.2 336.8 ± 5.1 💔 2.0 2.2%
neqo vs. neqo (cubic, paced) 94.0 ± 4.5 85.5 111.2 340.6 ± 7.1 -1.2 -1.2%
neqo vs. neqo (reno) 94.5 ± 5.8 84.7 112.8 338.7 ± 5.5 💔 1.9 2.0%
neqo vs. neqo (reno, paced) 95.8 ± 5.4 84.9 111.1 334.0 ± 5.9 💔 2.3 2.5%
neqo vs. quiche (cubic, paced) 192.2 ± 4.2 185.7 205.6 166.5 ± 7.6 -0.8 -0.4%
neqo vs. s2n (cubic, paced) 222.5 ± 4.5 214.5 231.3 143.8 ± 7.1 💔 1.5 0.7%
quiche vs. neqo (cubic, paced) 147.9 ± 5.5 136.6 173.4 216.3 ± 5.8 -0.0 -0.0%
quiche vs. quiche 144.3 ± 5.0 136.6 155.9 221.7 ± 6.4
s2n vs. neqo (cubic, paced) 174.9 ± 5.2 164.8 194.5 182.9 ± 6.2 💔 1.7 1.0%
s2n vs. s2n 244.5 ± 12.3 232.8 339.6 130.9 ± 2.6

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

@larseggert
larseggert marked this pull request as ready for review August 27, 2025 09:06
@larseggert

Copy link
Copy Markdown
Collaborator Author

The failing semver check is because mtu is not in main and hence can't be checked.

Comment thread mtu/.clippy.toml
Comment thread .github/workflows/check-mtu.yml
Comment thread neqo-http3/Cargo.toml
@larseggert
larseggert force-pushed the feat-import-mtu branch 5 times, most recently from 3f78338 to ccab711 Compare August 29, 2025 06:31
@larseggert
larseggert force-pushed the feat-import-mtu branch 12 times, most recently from 4edf706 to 6f94356 Compare September 2, 2025 10:17
Signed-off-by: Lars Eggert <lars@eggert.org>
@larseggert

Copy link
Copy Markdown
Collaborator Author

I think this is finally good to go.

larseggert added a commit to mozilla/mtu that referenced this pull request Sep 2, 2025
To be merged once mozilla/neqo#2897 is live.
@larseggert
larseggert merged commit 220ab75 into mozilla:main Sep 2, 2025
93 of 97 checks passed
larseggert added a commit to mozilla/mtu that referenced this pull request Sep 2, 2025
To be merged once mozilla/neqo#2897 is live.
@larseggert
larseggert deleted the feat-import-mtu branch September 2, 2025 12:13
@mxinden mxinden mentioned this pull request Sep 3, 2025
mxinden added a commit to mxinden/neqo that referenced this pull request Sep 3, 2025
mxinden added a commit to mxinden/neqo that referenced this pull request Sep 3, 2025
mxinden added a commit to mxinden/neqo that referenced this pull request Sep 3, 2025
lando-worker Bot pushed a commit to mozilla-firefox/firefox that referenced this pull request Sep 26, 2025
…pply-chain-reviewers

mozilla/neqo#2897 moved the mtu crate into the Neqo
GitHub repository https://github.com/mozilla/neqo.

Instead of vendoring from crates.io
https://phabricator.services.mozilla.com/D263115 changed Firefox to vendor mtu
from https://github.com/mozilla/neqo.

This commit instructs cargo vet to consider the GitHub version only for Firefox.

In addition, to enable others to use the crate, while depending on our audit
set, without having to audit it themselves, this commit adds a wildcard audit
for mtu.

Differential Revision: https://phabricator.services.mozilla.com/D265767
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