WPD 的尝试为了达到 devirtualization 的效果,我们也尝试了 Whole Program Devirtualization,但实际效果并不理想,只有较少一部分的 indirect call 被优化 。通过对 LLVM 相应模块实现的研究,我们了解到目前的 WPD 优化只对仅有单个实现的 virtual 函数生效,因此在现阶段还无法带来显著的性能收益 。
BOLT post-link 优化在 LTO、PGO 编译优化的基础上,我们还更进一步探索了 BOLT 这类 post-link 优化技术,并得到了约 8% 的性能收益 。考虑到稳定因素,该优化仍在探索与测试中,暂未上线 。
后记希望以上的分享能够对社区有所帮助,我们也在规划将上述编译优化方法回馈到 Envoy 开源社区版本,共同参与 Service Mesh 领域的建设 。
参考资料
- https://people.cs.pitt.edu/~zhangyt/research/pgco.pdf
- https://research.google/pubs/pub45290/
- https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization
- https://github.com/llvm/llvm-project/tree/main/bolt
- https://llvm.org/devmtg/2015-10/slides/Baev-IndirectCallPromotion.pdf
- https://quuxplusone.github.io/blog/2021/02/15/devirtualization/
推荐阅读
- 主机字节序和网络字节序
- 图文教程 微信小程序如何调用后台service
- 脸上跳动是什么原因?
- 内存为什么是以字节为单位的?
- Android面试题集锦之 Service
- 抖音推荐特征系统演进历程
- 什么是微服务?
- Service Worker与缓存
- 虽然「字节跳动」来晚了,但整个车联网行业都在等它
- 汉字节是几月几号