从去年开始,当使用 LLVM 的 Clang 编译器构建 Linux 内核时,已支持为内核构建启用链接时优化 (LTO, link-time optimizations)。而对于使用 GCC 构建 Linux 内核,仍缺少 LTO 支持,近日发布的一系列补丁是实现此目标的最新尝试。
Clang 的 LTO 支持在 Linux 5.16 中被合并,并一直保留至今。此举除了提升构建性能,对于内核来说,还提供了基于 Clang 的 CFI 支持。
早在十年前,在 Clang 能够构建 Linux 内核主线之前,已经有开发者为内核提交 GCC LTO 补丁,不过最终没有被合并,原因是当时 GCC 的 LTO 支持不够完善,未能说服 Linus。近年来,也有多家厂商发布了针对 Linux 内核的 LTO 补丁。随着现代 GCC 编译器(和 Clang)的发展,LTO 也逐渐变得更好,像 Fedora 在打包他们的发行版安装包时都会默认使用 LTO,也有像 Clear Linux 这样的公司通过使用 AutoFDO(基于程序性能分析工具的反馈式编译优化)来进一步提升其发行版的性能。
2022 年年底,SUSE 工程师 Jiri Slaby 提交了 GCC LTO 支持补丁,同时作为“第一次征求意见”,其部分内容是基于 Andi Kleen 先前的补丁以及 SUSE 工程师 Martin Liska 的工作。
虽然对编译器的链接时进行优化通常会提升性能。但目前看来,针对 Linux 内核的 GCC LTO 支持,内核开发者测试后发现并没有明显变化。
详情查看邮件列表。