提取构建性能指标

报告问题 查看来源 每晚 · 7.2。 · 7.1敬上 · 7.0 · 6.5 · 6.4

可能每位 Bazel 用户都遇到过构建 符合预期。提升各个 build 的性能具有特定的价值 具有重大影响的目标,例如:

  1. 经常迭代和(重新)构建的核心开发者目标。

  2. 其他目标广泛依赖于通用库。

  3. 一组目标(例如自定义规则)中具有代表性的定位条件; 诊断和修复一个 build 中的问题可能有助于解决 规模更大。

提高构建性能的一个重要步骤是了解 资源占用。本页面列出了您可以收集的不同指标。 细分构建性能展示 如何使用这些指标检测和修复 build 性能问题。

从 Bazel 构建中提取指标主要有以下几种方法:

构建事件协议 (BEP)

Bazel 可输出各种协议缓冲区 build_event_stream.proto 通过 Build Event Protocol (BEP) 实现,该协议 可以由您指定的后端进行汇总。根据您的使用场景 您可能会决定以各种方式汇总指标 了解一些通常比较有用的概念和 proto 字段。

Bazel 的查询 / cquery / aquery 命令

Bazel 提供 3 种不同的查询模式(查询cqueryaquery)。 查询目标图表、已配置的目标图表和操作图表 。查询语言提供 一系列函数,可在 Google Cloud 各个平台 查询模式,以便根据需要自定义查询。

JSON 跟踪配置文件

每次执行类似 build 的 Bazel 调用时,Bazel 会使用 JSON 编写轨迹配置文件 格式。JSON 轨迹配置文件可以 这对于快速了解 Bazel 在 调用。

执行日志

执行日志可帮助您进行问题排查和修复 由于计算机和环境的差异而导致远程缓存命中丢失 非确定性操作。如果您将 --experimental_execution_log_spawn_metrics (可从 Bazel 5.2 中获取)它还包含详细的生成指标, 本地和远程执行的操作。例如,您可以使用这些指标 比较本地和远程机器的性能 spawn 执行的哪个部分总是比预期慢(对于 导致出现排队问题)。

执行图日志

虽然 JSON 跟踪记录配置文件包含关键路径信息,但有时 您需要有关所执行操作的依赖关系图的其他信息。 从 Bazel 6.0 开始,您可以将 flag 传递给 --experimental_execution_graph_log--experimental_execution_graph_log_dep_type=all,用于写出 执行的操作及其相互依存关系。

此信息可用于理解由 关键路径。拖拽操作是可能节省的时间 方法是从执行图中移除特定节点。

这些数据有助于您预测更改对 build 和操作图的影响 然后再进行实际操作

使用 bazel-bench 进行基准测试

Bazel bench 用于对 Git 项目进行基准测试的工具, 以下情况:

  • 项目基准:在 运行一个 Bazel 版本用于检测 build 中的回归问题(通常通过 添加依赖项)。

  • Bazel 基准:在 Bazel 中, 只需进行一次 Git 提交用于检测 Bazel 本身中的回归问题(如果您 恰好维护 / 复刻 Bazel 而发生的情况)。

基准测试会监控实际用时、CPU 时间和系统时间和 Bazel 保留的时间 堆大小。

我们还建议您在专用物理机器上运行 Bazel 台, 不运行其他进程,以减少可变性。