字节跳动 Service Mesh 数据面编译优化实践( 四 )


WPD 的尝试为了达到 devirtualization 的效果,我们也尝试了 Whole Program Devirtualization,但实际效果并不理想,只有较少一部分的 indirect call 被优化 。通过对 LLVM 相应模块实现的研究,我们了解到目前的 WPD 优化只对仅有单个实现的 virtual 函数生效,因此在现阶段还无法带来显著的性能收益 。
BOLT post-link 优化在 LTO、PGO 编译优化的基础上,我们还更进一步探索了 BOLT 这类 post-link 优化技术,并得到了约 8% 的性能收益 。考虑到稳定因素,该优化仍在探索与测试中,暂未上线 。
后记希望以上的分享能够对社区有所帮助,我们也在规划将上述编译优化方法回馈到 Envoy 开源社区版本,共同参与 Service Mesh 领域的建设 。
参考资料

  1. https://people.cs.pitt.edu/~zhangyt/research/pgco.pdf
  2. https://research.google/pubs/pub45290/
  3. https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization
  4. https://github.com/llvm/llvm-project/tree/main/bolt
  5. https://llvm.org/devmtg/2015-10/slides/Baev-IndirectCallPromotion.pdf
  6. https://quuxplusone.github.io/blog/2021/02/15/devirtualization/




推荐阅读