如何在 MongoDB 上启用 BOLT Instrumentation

作者:安谋科技 (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 云盘,具有更高的带宽,可确保驱动器不会出现瓶颈。

image.png

启用 BOLT Instrumentation 的步骤

构建默认 MongoDB:

  • 下载 MongoDB 源代码并选用 7.0.5 版本
  • 将 gcc 版本升级到 11.4.0,这是编译 MongoDB 7.0.5 所需的版本
  • 使用以下选项编译 mongo,命名为 mongod.orig:

image.png

收集 Profile 数据:

  • 使用 6841395 版本来编译 llvm-bolt
  • 将 mongod.orig 转换为 mongod.inst:

image.png

  • 启动 mongod.inst,并运行 ycsb 以收集配置文件数据。运行以下命令:

image.png

  • 停止 mongod.inst

优化可执行文件:

  • 将 mongod.orig 转换为优化后的可执行文件,命名为 mongod.bolt:

image.png

  • 运行 mongod.orig 和 mongod.bolt,并比较两者结果

测试结果

基准测试结果显示,MongoDB 在 INSERT 方面性能提高了 58%,在 READ 和 UPDATE 方面性能提高了 52%。启用 BOLT 后,延迟也显著降低。

INSERT:

image.png

READ 和 UPDATE(比例为 1:1):

image.png

吞吐量提升

使用 BOLT 后,INSERT 的吞吐量提高了 58%,READ 和 UPDATE 的吞吐量提高了 52%:

image.png

延迟改进

使用 BOLT 后,INSERT 平均延迟改进了 37%,READ 平均延迟改进了 35%,UPDATE 平均延迟改进了 34%:

image.png

perf 数据

perf 数据表明,L1-icache-misses、branch-misses 和 iTLB-load-misses 显著下降。使用以下命令采集 perf 数据:

image.png

总结

BOLT Instrumentation 使 MongoDB 的 READ 和 UPDATE 测试性能提升了 52%,延迟也得到显著下降。此外,BOLT Instrumentation 无需依赖硬件计数器和 perf,因此更易于部署。

* 本文为 Arm 原创文章,转载请留言联系获得授权并注明出处。

作者:Bolt Liu
文章来源:Arm社区

推荐阅读

推荐阅读
关注数
23518
内容数
971
Arm相关的技术博客,提供最新Arm技术干货,欢迎关注
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息