LTO ( Link-Time Optimization )全称链接时优化,是一项将编译优化延后到链接时进行编译技术。该技术由于拥有链接时的全程序视角,相比于传统编译流程中的单文件编译优化,往往可以提供更多的优化机会,做出更激进的优化决策,带来更强的性能与更小的二进制体积。 作为一个相对保守的前置方案,我们通过白名单机制在 openEuler 24.09 的版本构建中为 532 个应用使能了 LTO 。 这些应用满足以下条件 : 1. 通过 gcc 构建; 2. 使能 LTO 后无编译问题; 3. 构建时会执行自带测试套(写在 spec 的 %check 段中)且无问题; 你可以在 /usr/lib/rpm/%{_vendor}/lto_white_list 路径下,或是 https://gitee.com/src-openeuler/openEuler-rpm-config/blob/openEuler-24.09/00... 补丁中找到白名单。 经统计,这 532 个应用的 ELF 可执行文件与动态库整体体积减少了约 300MB ,占这 532 个应用的 ELF 可执行文件与动态库整体体积的约 14% 。 我们已经关注到 LTO 会与 syscare 热补丁机制产生冲突,目前已与 syscare 团队就解决方案达成一致,会在后续版本解决。我们会持续在社区讨论 LTO 使能及协同的可行性与风险,感谢大家。
openEuler Compiler SIG 王淳洋