feat: Remove bindgen dependency for MTU crate#3337
feat: Remove bindgen dependency for MTU crate#3337larseggert wants to merge 12 commits intomozilla:mainfrom
bindgen dependency for MTU crate#3337Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #3337 +/- ##
==========================================
- Coverage 94.24% 94.06% -0.19%
==========================================
Files 125 131 +6
Lines 37973 38333 +360
Branches 37973 38333 +360
==========================================
+ Hits 35787 36057 +270
- Misses 1349 1429 +80
- Partials 837 847 +10
Flags with carried forward coverage won't be shown. Click here to find out more.
|
Merging this PR will degrade performance by 6.94%
Performance Changes
Comparing Footnotes
|
martinthomson
left a comment
There was a problem hiding this comment.
Not sure if I'm following the CI parts, but don't you want CI to (mostly) just check that what is generated matches what is in the tree? But then you might also have CI propose a PR to update what is in-tree on the affected branch.
That is probably overkill. I don't really expect these bindings to ever change, since OSs have ABI promises. Edit: But Rust version changes may cause bindgen to generate slightly different bindings. Let me look into the PR thing. |
There was a problem hiding this comment.
Pull request overview
This PR removes the bindgen build dependency from the MTU crate by replacing runtime binding generation with pre-generated platform-specific binding files. Instead of using bindgen during the build process, the PR checks in generated binding files for each supported platform (Linux, macOS, FreeBSD, NetBSD, OpenBSD, Solaris) and uses conditional compilation to select the appropriate bindings for the target platform.
Changes:
- Removed
bindgenfrom build dependencies and simplified the build script - Added pre-generated binding files for all supported platforms
- Added CI workflow steps to regenerate bindings and verify they remain up-to-date
- Updated lint attributes to use
#[expect]instead of#[allow]where appropriate
Reviewed changes
Copilot reviewed 14 out of 15 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| mtu/Cargo.toml | Removed bindgen dependency and updated cargo-machete ignore list |
| mtu/build.rs | Removed bindgen-related code, keeping only platform alias configuration |
| mtu/src/linux.rs | Updated lint attributes and changed to use static binding module path |
| mtu/src/bsd.rs | Updated lint attributes and changed to use static binding module paths per platform |
| mtu/src/bindings/*.rs | Added pre-generated binding files for all supported platforms |
| mtu/src/bindings/*.h | Added header files used as input for binding generation |
| .github/workflows/check-mtu.yml | Added CI jobs to generate bindings and verify they match committed versions |
| .github/actions/check-vm/action.yml | Added bindgen installation and binding generation steps to VM-based tests |
401f12e to
da05690
Compare
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 1c30ced. 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 1c30ced. streams/walltime/1000-streams/each-1000-bytes: 💔 Performance has regressed by +1.8734%. time: [45.332 ms 45.380 ms 45.428 ms]
change: [+1.7216% +1.8734% +2.0384] (p = 0.00 < 0.05)
Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high severeAll resultstransfer/1-conn/1-100mb-resp (aka. Download)/mtu-1504: No change in performance detected. time: [204.46 ms 204.99 ms 205.59 ms]
thrpt: [486.40 MiB/s 487.83 MiB/s 489.09 MiB/s]
change:
time: [-0.5114% -0.1366% +0.2359] (p = 0.50 > 0.05)
thrpt: [-0.2353% +0.1368% +0.5140]
No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) high severetransfer/1-conn/10_000-parallel-1b-resp (aka. RPS)/mtu-1504: Change within noise threshold. time: [278.73 ms 280.55 ms 282.40 ms]
thrpt: [35.411 Kelem/s 35.644 Kelem/s 35.877 Kelem/s]
change:
time: [-2.4411% -1.4888% -0.5781] (p = 0.00 < 0.05)
thrpt: [+0.5815% +1.5113% +2.5022]
Change within noise threshold.transfer/1-conn/1-1b-resp (aka. HPS)/mtu-1504: No change in performance detected. time: [38.627 ms 38.829 ms 39.047 ms]
thrpt: [25.610 B/s 25.754 B/s 25.889 B/s]
change:
time: [-0.0432% +0.5956% +1.2627] (p = 0.08 > 0.05)
thrpt: [-1.2469% -0.5921% +0.0432]
No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
11 (11.00%) high severetransfer/1-conn/1-100mb-req (aka. Upload)/mtu-1504: No change in performance detected. time: [204.58 ms 204.89 ms 205.24 ms]
thrpt: [487.23 MiB/s 488.07 MiB/s 488.80 MiB/s]
change:
time: [-0.4566% -0.2244% +0.0096] (p = 0.06 > 0.05)
thrpt: [-0.0096% +0.2249% +0.4587]
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
4 (4.00%) high mild
1 (1.00%) high severedecode 4096 bytes, mask ff: No change in performance detected. time: [4.5114 µs 4.5185 µs 4.5258 µs]
change: [-0.3146% +0.0595% +0.5256] (p = 0.79 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
4 (4.00%) high mild
2 (2.00%) high severedecode 1048576 bytes, mask ff: No change in performance detected. time: [1.1584 ms 1.1610 ms 1.1642 ms]
change: [-0.3558% +0.0713% +0.4750] (p = 0.74 > 0.05)
No change in performance detected.
Found 14 outliers among 100 measurements (14.00%)
10 (10.00%) low severe
1 (1.00%) high mild
3 (3.00%) high severedecode 4096 bytes, mask 7f: No change in performance detected. time: [5.7922 µs 5.8010 µs 5.8100 µs]
change: [-0.4218% -0.0316% +0.2878] (p = 0.87 > 0.05)
No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severedecode 1048576 bytes, mask 7f: No change in performance detected. time: [1.4866 ms 1.4913 ms 1.4985 ms]
change: [+0.0268% +0.3755% +0.8629] (p = 0.08 > 0.05)
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high severedecode 4096 bytes, mask 3f: No change in performance detected. time: [5.5388 µs 5.5472 µs 5.5558 µs]
change: [-1.0034% -0.4087% +0.0474] (p = 0.14 > 0.05)
No change in performance detected.
Found 5 outliers among 100 measurements (5.00%)
4 (4.00%) high mild
1 (1.00%) high severedecode 1048576 bytes, mask 3f: No change in performance detected. time: [1.4145 ms 1.4166 ms 1.4189 ms]
change: [-0.2244% -0.0082% +0.2064] (p = 0.94 > 0.05)
No change in performance detected.streams/simulated/1-streams/each-1000-bytes: No change in performance detected. time: [129.68 ms 129.68 ms 129.68 ms]
thrpt: [7.5303 KiB/s 7.5305 KiB/s 7.5307 KiB/s]
change:
time: [-0.0035% +0.0005% +0.0045] (p = 0.80 > 0.05)
thrpt: [-0.0045% -0.0005% +0.0035]
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/simulated/1000-streams/each-1-bytes: No change in performance detected. time: [2.5361 s 2.5365 s 2.5368 s]
thrpt: [394.20 B/s 394.25 B/s 394.30 B/s]
change:
time: [-0.0336% -0.0154% +0.0022] (p = 0.10 > 0.05)
thrpt: [-0.0022% +0.0154% +0.0336]
No change in performance detected.streams/simulated/1000-streams/each-1000-bytes: No change in performance detected. time: [6.5899 s 6.6002 s 6.6118 s]
thrpt: [147.70 KiB/s 147.96 KiB/s 148.19 KiB/s]
change:
time: [-0.3071% -0.0480% +0.2138] (p = 0.72 > 0.05)
thrpt: [-0.2134% +0.0480% +0.3080]
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
8 (8.00%) high severestreams/walltime/1-streams/each-1000-bytes: No change in performance detected. time: [584.86 µs 586.45 µs 588.39 µs]
change: [-0.5264% -0.0507% +0.4188] (p = 0.84 > 0.05)
No change in performance detected.
Found 6 outliers among 100 measurements (6.00%)
1 (1.00%) high mild
5 (5.00%) high severestreams/walltime/1000-streams/each-1-bytes: No change in performance detected. time: [12.316 ms 12.336 ms 12.357 ms]
change: [-0.4690% -0.2267% -0.0168] (p = 0.06 > 0.05)
No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mildstreams/walltime/1000-streams/each-1000-bytes: 💔 Performance has regressed by +1.8734%. time: [45.332 ms 45.380 ms 45.428 ms]
change: [+1.7216% +1.8734% +2.0384] (p = 0.00 < 0.05)
Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) low mild
1 (1.00%) high severecoalesce_acked_from_zero 1+1 entries: No change in performance detected. time: [92.360 ns 92.731 ns 93.091 ns]
change: [-0.1141% +0.3472% +0.8275] (p = 0.16 > 0.05)
No change in performance detected.
Found 7 outliers among 100 measurements (7.00%)
6 (6.00%) high mild
1 (1.00%) high severecoalesce_acked_from_zero 3+1 entries: No change in performance detected. time: [110.25 ns 110.66 ns 111.08 ns]
change: [-0.4703% -0.0699% +0.3302] (p = 0.73 > 0.05)
No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
1 (1.00%) high mild
11 (11.00%) high severecoalesce_acked_from_zero 10+1 entries: No change in performance detected. time: [109.68 ns 110.21 ns 110.85 ns]
change: [-0.7854% +0.1676% +0.9839] (p = 0.73 > 0.05)
No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) high mild
7 (7.00%) high severecoalesce_acked_from_zero 1000+1 entries: No change in performance detected. time: [94.770 ns 94.908 ns 95.058 ns]
change: [-0.1813% +0.3313% +0.8233] (p = 0.21 > 0.05)
No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
5 (5.00%) high mild
5 (5.00%) high severeRxStreamOrderer::inbound_frame(): Change within noise threshold. time: [108.62 ms 108.69 ms 108.78 ms]
change: [+0.2898% +0.5192% +0.6981] (p = 0.00 < 0.05)
Change within noise threshold.
Found 31 outliers among 100 measurements (31.00%)
7 (7.00%) low severe
14 (14.00%) low mild
8 (8.00%) high mild
2 (2.00%) high severesent::Packets::take_ranges: No change in performance detected. time: [4.4956 µs 4.5989 µs 4.6931 µs]
change: [-2.9725% +0.5994% +4.2755] (p = 0.74 > 0.05)
No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) high mildtransfer/simulated/pacing-false/varying-seeds: No change in performance detected. time: [23.941 s 23.941 s 23.941 s]
thrpt: [171.09 KiB/s 171.09 KiB/s 171.09 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.transfer/simulated/pacing-true/varying-seeds: No change in performance detected. time: [23.676 s 23.676 s 23.676 s]
thrpt: [173.01 KiB/s 173.01 KiB/s 173.01 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.transfer/simulated/pacing-false/same-seed: No change in performance detected. time: [23.941 s 23.941 s 23.941 s]
thrpt: [171.09 KiB/s 171.09 KiB/s 171.09 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.transfer/simulated/pacing-true/same-seed: No change in performance detected. time: [23.676 s 23.676 s 23.676 s]
thrpt: [173.01 KiB/s 173.01 KiB/s 173.01 KiB/s]
change:
time: [+0.0000% +0.0000% +0.0000] (p = NaN > 0.05)
thrpt: [+0.0000% +0.0000% +0.0000]
No change in performance detected.transfer/walltime/pacing-false/varying-seeds: Change within noise threshold. time: [23.349 ms 23.367 ms 23.386 ms]
change: [+0.2746% +0.5000% +0.6609] (p = 0.00 < 0.05)
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
3 (3.00%) low mild
1 (1.00%) high mildtransfer/walltime/pacing-true/varying-seeds: Change within noise threshold. time: [24.034 ms 24.067 ms 24.120 ms]
change: [+1.7732% +1.9882% +2.2252] (p = 0.00 < 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/same-seed: Change within noise threshold. time: [23.869 ms 23.897 ms 23.937 ms]
change: [+1.4332% +1.5825% +1.7591] (p = 0.00 < 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-true/same-seed: Change within noise threshold. time: [23.771 ms 23.804 ms 23.853 ms]
change: [-0.5619% -0.4041% -0.1989] (p = 0.00 < 0.05)
Change within noise threshold.
Found 5 outliers among 100 measurements (5.00%)
4 (4.00%) high mild
1 (1.00%) high severeDownload data for |
Fixes quinn-rs/quinn#2465 (comment)