新闻动态

首页 - 新闻动态 - 会员动态

52%!BOLT Instrumentation 提升 Arm Neoverse N2 上运行 MongoDB 的性能

新闻来源:Arm 社区


BOLT 是一种链接后优化技术,能够为多种工作负载带来性能提升。BOLT 一般可以通过 CoreSight 和 perf 实现来改善某些典型工作负载的性能。然而,CoreSight 需要采集分支的 perf 数据,不便于在生产环境中部署。


BOLT Instrumentation 是一种替代方法,它通过 instrument 和运行二进制文件来收集 Profile 数据,然后基于该数据来优化可执行二进制文件。由于其不依赖 CoreSight 和 perf,因此只需要 llvm-bolt 工具就可以支持。


本文将为你介绍如何在 MongoDB 上启用 BOLT Instrumentation,并取得基准测试结果。


测试环境


我们为基准测试预留了两个阿里云 ECS 实例。终端运行 ycsb,服务器则运行 MongoDB。服务器上连接了 200G 的 ESSD AutoPL 云盘,具有更高的带宽,可确保驱动器不会出现瓶颈。


图:MongoDB BOLT Instrumentation 测试环境


运行 ycsb 分为加载和运行两个步骤。期间将发送四千万条记录和五百万次操作。运行以下命令:



启用 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 的吞吐量提升结果


延迟改进


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


图:BOLT 延迟改进结果


perf 数据


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



图:BOLT 的 perf 数据结果


总结


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