Facebook 开发的工具 BOLT 现已被合并到 LLVM 的 mono 仓库,共包含 89.5 万行新代码;作为 LLVM 的上游,以促进其未来发展。
作为积极贡献 Linux 内核的厂商,Facebook 的工程师近年来一直在研究 BOLT(可以追溯到 2018 年),致力于通过优化 GCC 和 Clang 生成的二进制文件的代码布局来加快 Linux 二进制文件的速度,以提高 CPU 缓存使用率和其他考虑因素。BOLT 使用了几个 LLVM 库,但在过去的几年里一直在树外开发。
BOLT 即"Binary Optimization and Layout Tool"(二进制优化和布局工具)的缩写,能够在配置文件后重新排列可执行文件,产生比编译器的 LTO 和 PGO 优化所能达到的更快性能。
而据了解,自 2020 年以来,Facebook 方面就开始致力于将 BOLT 作为一个新的子项目纳入 LLVM 的上游。与此同时,其甚至围绕 BOLT 优化 Linux 内核等领域,取得了一些不错的进展。在此前的 Linux Plumbers Conference 大会上,有来自 Facebook 的工程师讨论了对内核的 BOLT 处理,带来的性能提升如下图所示:
从数据可以看出,这是一项值得持续投入研究的工作,因为 Facebook 在 PGO+LTO 编译器优化之上通过 BOLT 优化获得了"两位数的速度提升"。此处的速度提升是通过优化可执行文件的代码布局来实现的,可更有效地使用硬件页面和指令缓存。在进入 LLVM 的上游之后,BOLT 的前景也变得更令人期待。
关于其设计的更多背景信息和技术细节,可参见 Facebook 的这份研究论文。Facebook 在其数据中心使用 BOLT 的报告中说:"对于数据中心的应用,BOLT 在配置文件引导的函数重新 排序 和 LTO 的基础上实现了高达 7.0% 的性能加速。对于 GCC 和 Clang 编译器,我们的评估显示 BOLT 在 FDO 和 LTO 的基础上将其二进制文件的速度提高了 20.4%,如果二进制文件是在没有 FDO 和 LTO 的情况下构建的,则提高了 52.1%。"
猜你喜欢: