feat: Enable the Apple fast datapath#3455
Conversation
8e32c67 to
255bb97
Compare
Merging this PR will not alter performance
Comparing Footnotes
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #3455 +/- ##
==========================================
- Coverage 94.29% 94.23% -0.07%
==========================================
Files 127 131 +4
Lines 38739 39081 +342
Branches 38739 39081 +342
==========================================
+ Hits 36529 36827 +298
- Misses 1371 1408 +37
- Partials 839 846 +7
Flags with carried forward coverage won't be shown. Click here to find out more.
|
255bb97 to
127d9ff
Compare
There was a problem hiding this comment.
Pull request overview
Enables Quinn’s Apple “fast UDP datapath” support across the workspace and adds runtime plumbing so consumers (notably Gecko) can opt-in to sendmsg_x/recvmsg_x, while neqo-bin enables it unconditionally as a canary.
Changes:
- Enable
quinn-udp/fast-apple-datapathat the workspace dependency level and remove per-crate feature wiring. - Add an Apple-only, process-wide runtime flag in
neqo-udpto opt sockets into the fast datapath at creation time. - Add
cfg(apple)aliasing toneqo-binand unconditionally enable the fast datapath in the CLI socket setup (plus clippy suppression for Apple builds).
Reviewed changes
Copilot reviewed 6 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| neqo-udp/src/lib.rs | Adds runtime enablement flag + Apple socket setup hook; adjusts Apple receive buffer strategy. |
| neqo-udp/Cargo.toml | Switches cfg_aliases build-dep to workspace and removes the crate-level fast-path feature. |
| neqo-bin/src/udp.rs | Enables Apple fast datapath unconditionally for CLI sockets. |
| neqo-bin/src/bin/client.rs | Adds Apple-only clippy suppression for large_futures. |
| neqo-bin/build.rs | Introduces cfg(apple) alias for consistent platform gating. |
| neqo-bin/Cargo.toml | Adds cfg_aliases build-dependency; removes fast-path feature. |
| Cargo.toml | Enables quinn-udp’s fast-apple-datapath feature for the whole workspace and adds cfg_aliases to workspace deps. |
| Cargo.lock | Records updated dependency graph including cfg_aliases for neqo-bin. |
You can also share your feedback on Copilot code review. Take the survey.
2fd6e8d to
6be99fa
Compare
Unconditionally in neqo-bin, but with plumbing so Gecko can probe and enable it conditionally.
6be99fa to
f910d92
Compare
|
The Gecko side of this is here: https://github.com/mozilla-firefox/firefox/compare/main...larseggert:firefox:feat-apple-probe-fast?expand=1 |
|
@mxinden thanks, both good suggestions. I think I confused myself between the neqo and Gecko patches... |
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
|
Client/server transfer resultsPerformance differences relative to 4288d22. 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 |
Benchmark resultsSignificant performance differences relative to 4288d22. transfer/1-conn/1-100mb-resp (aka. Download)/mtu-1504: 💚 Performance has improved by -2.0606%. time: [198.33 ms 198.74 ms 199.22 ms]
thrpt: [501.96 MiB/s 503.18 MiB/s 504.22 MiB/s]
change:
time: [-2.4011% -2.0606% -1.7069] (p = 0.00 < 0.05)
thrpt: [+1.7365% +2.1040% +2.4602]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1504: 💔 Performance has regressed by +2.7600%. time: [289.72 ms 291.60 ms 293.49 ms]
thrpt: [34.073 Kelem/s 34.294 Kelem/s 34.516 Kelem/s]
change:
time: [+1.8946% +2.7600% +3.6924] (p = 0.00 < 0.05)
thrpt: [-3.5609% -2.6859% -1.8594]
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1504: 💚 Performance has improved by -1.2540%. time: [201.88 ms 202.26 ms 202.66 ms]
thrpt: [493.44 MiB/s 494.41 MiB/s 495.33 MiB/s]
change:
time: [-1.5152% -1.2540% -1.0002] (p = 0.00 < 0.05)
thrpt: [+1.0103% +1.2699% +1.5386]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildAll resultstransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1504: 💚 Performance has improved by -2.0606%. time: [198.33 ms 198.74 ms 199.22 ms]
thrpt: [501.96 MiB/s 503.18 MiB/s 504.22 MiB/s]
change:
time: [-2.4011% -2.0606% -1.7069] (p = 0.00 < 0.05)
thrpt: [+1.7365% +2.1040% +2.4602]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1504: 💔 Performance has regressed by +2.7600%. time: [289.72 ms 291.60 ms 293.49 ms]
thrpt: [34.073 Kelem/s 34.294 Kelem/s 34.516 Kelem/s]
change:
time: [+1.8946% +2.7600% +3.6924] (p = 0.00 < 0.05)
thrpt: [-3.5609% -2.6859% -1.8594]
Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildtransfer/1-conn/1-1b-resp (aka. HPS)/mtu-1504: No change in performance detected. time: [38.477 ms 38.650 ms 38.841 ms]
thrpt: [25.746 B/s 25.873 B/s 25.989 B/s]
change:
time: [-0.6576% -0.0257% +0.6295] (p = 0.94 > 0.05)
thrpt: [-0.6256% +0.0258% +0.6619]
No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
2 (2.00%) high mild
7 (7.00%) high severetransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1504: 💚 Performance has improved by -1.2540%. time: [201.88 ms 202.26 ms 202.66 ms]
thrpt: [493.44 MiB/s 494.41 MiB/s 495.33 MiB/s]
change:
time: [-1.5152% -1.2540% -1.0002] (p = 0.00 < 0.05)
thrpt: [+1.0103% +1.2699% +1.5386]
Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildstreams/walltime/1-streams/each-1000-bytes: No change in performance detected. time: [588.43 µs 592.49 µs 598.15 µs]
change: [-0.9165% -0.1114% +0.9646] (p = 0.83 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
10 (10.00%) high severestreams/walltime/1000-streams/each-1-bytes: Change within noise threshold. time: [12.371 ms 12.390 ms 12.409 ms]
change: [-0.4910% -0.2644% -0.0694] (p = 0.02 < 0.05)
Change within noise threshold.streams/walltime/1000-streams/each-1000-bytes: Change within noise threshold. time: [44.994 ms 45.085 ms 45.220 ms]
change: [+0.0480% +0.3577% +0.7239] (p = 0.02 < 0.05)
Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severetransfer/walltime/pacing-false/varying-seeds: Change within noise threshold. time: [77.627 ms 77.687 ms 77.755 ms]
change: [-3.0059% -2.8235% -2.6458] (p = 0.00 < 0.05)
Change within noise threshold.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) low mild
4 (4.00%) high mild
1 (1.00%) high severetransfer/walltime/pacing-true/varying-seeds: Change within noise threshold. time: [79.386 ms 79.487 ms 79.631 ms]
change: [+0.0492% +0.2951% +0.5262] (p = 0.01 < 0.05)
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
3 (3.00%) high severetransfer/walltime/pacing-false/same-seed: Change within noise threshold. time: [77.597 ms 77.696 ms 77.845 ms]
change: [-2.6578% -2.4391% -2.2208] (p = 0.00 < 0.05)
Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severetransfer/walltime/pacing-true/same-seed: Change within noise threshold. time: [79.298 ms 79.394 ms 79.537 ms]
change: [-0.3209% -0.1706% +0.0131] (p = 0.04 < 0.05)
Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severeDownload data for |
@larseggert FYI |
Unconditionally in neqo-bin, but with plumbing so Gecko can probe and enable it conditionally.