Google 的 Alice Ryhl 正在致力于改进 Linux 内核代码,以便在启用 Link-Time Optimized (LTO) 内核构建时将 C 辅助函数内联到 Rust 中。至少有一些补丁已排队等待在即将到来的 Linux 6.20~7.0 周期中合并,以帮助那些启用 Rust 内核支持的人,并利用 LLVM/Clang 编译器的 LTO 功能来提高性能。
这项将 C 辅助函数内联到 Rust 中使用 LTO 的工作涉及向内核中的每个 Rust 辅助函数添加一个 “__rust_helper” 注释。这是必需的,因为在使用 LTO 时,C 辅助函数不能内联到 Rust 中,因为 LLVM 在代码生成单元上检测到略有不同的选项。

在使用 LTO 进行内核构建时,除了运行 bindgen 时会添加”__always_inline”以避免忽略标记为内联的函数外,其他辅助函数都会添加”__always_inline”。有一个包含 46 个补丁的系列用于在内核代码中应用所需的”__rust_helper”。这些补丁不需要一次性合并,因此留给各个子系统的维护者自行决定是否应用这些补丁,但至少其中一些补丁计划与 Linux 7.0 一起合并。
通过 VFS.git 的 vfs-7.0.rust 分支,这些补丁已被用于将 C 辅助函数内联到 Rust 中。我们将看到这些不同分支上的完整补丁系列是否能在下一个内核周期中全部被接受,还是需要更长时间才能全部上游化。然后,将有一个单独的补丁用于连接”__rust_helper”的行为。
另外,对于那些想知道在使用 LLVM/Clang 构建 Linux 内核时使用链接时优化的性能收益的人,我最近在 Some Meaningful Performance Benefits For Clang + LTO Built Linux Kernels 中运行了一些新的基准测试。
转自 Linux 7.0 Readying Improvement For Rust + LTO Kernel Builds – Phoronix
Linuxeden开源社区