Facebook 宣布开源其二进制优化和布局工具 BOLT,以帮助工程师来加速他们的大规模应用。
据 Facebook 介绍,BOLT 可以用来优化内存中的指令配置,并且旨在将 CPU 执行时间减少 2% 到 15%,尽管在大多数情况下它将其减少了 8%。
Facebook 表示,“高度复杂的服务,例如 Facebook 上的服务,拥有大量的源代码库以提供广泛的特性和功能。即使编译了其中一种服务的机器码后,它的大小范围可能从 10s 到 100s 不等,这通常太大,而不适合任何现代 CPU 指令的高速缓存。因此,硬件花费了大量的处理时间,在许多情况下,接近 30%,从内存到 CPU 获取指令流。”
在设计 BOLT 时,Facebook 希望满足三个要求:它需要与任何编译器生成的代码兼容,能够支持没有可用源代码的代码,并且需要能够支持手动编写的代码,以便优化其布局。
Facebook 强调,BOLT 根据其执行情况重新安排功能内的代码。该函数的主体根据代码的执行频率进行分割,然后根据调用 graph profile 执行代码热块的优化布局。
除了改进代码布局之外,BOLT 还利用应用程序配置文件和利用机器代码(如高级跳转表配置,相同的代码折叠,PLT 优化和恒定负载消除)执行优化。