作者:安谋科技 (Arm China) 主任软件工程师 Bolt Liu
BOLT 是一种链接后优化技术,能够为多种工作负载带来性能提升。BOLT 一般可以通过 CoreSight 和 perf 实现来改善某些典型工作负载的性能。然而,CoreSight 需要采集分支的 perf 数据,不便于在生产环境中部署。
BOLT Instrumentation 是一种替代方法,它通过 instrument 和运行二进制文件来收集 Profile 数据,然后基于该数据来优化可执行二进制文件。由于其不依赖 CoreSight 和 perf,因此只需要 llvm-bolt 工具就可以支持。
本文将为你介绍如何在 MongoDB 上启用 BOLT Instrumentation,并取得基准测试结果。
测试环境
我们为基准测试预留了两个阿里云 ECS 实例。终端运行 ycsb,服务器则运行 MongoDB。服务器上连接了 200G 的 ESSD AutoPL 云盘,具有更高的带宽,可确保驱动器不会出现瓶颈。
启用 BOLT Instrumentation 的步骤
构建默认 MongoDB:
- 下载 MongoDB 源代码并选用 7.0.5 版本
- 将 gcc 版本升级到 11.4.0,这是编译 MongoDB 7.0.5 所需的版本
- 使用以下选项编译 mongo,命名为 mongod.orig:
收集 Profile 数据:
- 使用 6841395 版本来编译 llvm-bolt
- 将 mongod.orig 转换为 mongod.inst:
- 启动 mongod.inst,并运行 ycsb 以收集配置文件数据。运行以下命令:
- 停止 mongod.inst
优化可执行文件:
- 将 mongod.orig 转换为优化后的可执行文件,命名为 mongod.bolt:
- 运行 mongod.orig 和 mongod.bolt,并比较两者结果
测试结果
基准测试结果显示,MongoDB 在 INSERT 方面性能提高了 58%,在 READ 和 UPDATE 方面性能提高了 52%。启用 BOLT 后,延迟也显著降低。
INSERT:
READ 和 UPDATE(比例为 1:1):
吞吐量提升
使用 BOLT 后,INSERT 的吞吐量提高了 58%,READ 和 UPDATE 的吞吐量提高了 52%:
延迟改进
使用 BOLT 后,INSERT 平均延迟改进了 37%,READ 平均延迟改进了 35%,UPDATE 平均延迟改进了 34%:
perf 数据
perf 数据表明,L1-icache-misses、branch-misses 和 iTLB-load-misses 显著下降。使用以下命令采集 perf 数据:
总结
BOLT Instrumentation 使 MongoDB 的 READ 和 UPDATE 测试性能提升了 52%,延迟也得到显著下降。此外,BOLT Instrumentation 无需依赖硬件计数器和 perf,因此更易于部署。
* 本文为 Arm 原创文章,转载请留言联系获得授权并注明出处。
作者:Bolt Liu
文章来源:Arm社区
推荐阅读