如何在CI中跟踪Rust编译时间

Everett Pompeii

Everett Pompeii


编译时间可能是构建时间的重要组成部分,特别是在Rust中。持续基准测试是在每个变更集上运行基准测试的做法,以确保变更不会引入性能回退。可以将编译时间视为基准测试,并在 CI 中跟踪它们以捕捉编译时间过长的问题。为Rust编译时间实现持续基准测试的最简单方法是使用 Bencher。

什么是Bencher?

Bencher是一套持续型的性能基准测试工具。 你是否曾经因为性能回归影响到了你的用户? Bencher可以防止这种情况的发生。 Bencher让你有能力在性能回归进入生产环境 之前 就进行检测和预防。

  • 运行: 使用你喜爱的基准测试工具在本地或CI中执行你的基准测试。bencher CLI简单地包装了你现有的基准测验设备并存储其结果。
  • 追踪: 追踪你的基准测试结果的趋势。根据源分支、测试床和度量,使用Bencher web控制台来监视、查询和绘制结果图表。
  • 捕获: 在CI中捕获性能回归。Bencher使用最先进的、可定制的分析技术在它们进入生产环境之前就检测到性能回归。

基于防止功能回归的原因,在CI中运行单元测试,我们也应该使用Bencher在CI中运行基准测试以防止性能回归。性能问题就是错误!

Bencher Cloud 的步骤

  1. 创建一个 Bencher Cloud 账户
  2. 创建一个 API 令牌,并将其作为机密添加到您的 CI 中。
  3. 为您的 CI 创建一个工作流,例如 GitHub ActionsGitLab CI/CD
  4. 在您的 CI 工作流中安装 Bencher CLI
  5. 在您的 CI 工作流中使用 --build-time 标志 json 适配器通过 bencher run 子命令编译您的 Rust 代码。

Bencher 自托管的步骤

  1. 创建一个 Bencher 自托管实例
  2. 在您的 Bencher 自托管实例上创建一个账户。
  3. 创建一个 API 令牌并将其作为密钥添加到您的 CI。
  4. 为您的 CI 创建一个工作流程,例如 GitHub ActionsGitLab CI/CD
  5. 在您的 CI 工作流程中安装 Bencher CLI。 确保 CLI 版本与您的 Bencher 自托管实例的版本匹配。
  6. 在您的 CI 工作流中使用 --build-time 标志 json 适配器通过 bencher run 子命令编译您的 Rust 代码,并设置 --host 选项为您的 Bencher Self-Hosted 实例 URL。

⏱️ 构建时间

bencher run CLI 子命令可以用于使用 --build-time 标志来跟踪交付物的构建时间(即编译时间)。在底层,bencher run 将结果输出为 Bencher Metric Format (BMF) JSON。因此,明确使用 the json adapter 是一种良好的实践。更多详情请参见如何跟踪构建时间

build-time 度量(即 seconds (s))被收集。只有构建时间的值(即 value)是可用的。lower_valueupper_value 都不被收集。build-time 度量并非默认为所有项目创建。然而,当你使用 --build-time 标志时,这个度量将会自动为你的项目创建。

Terminal window
bencher run --build-time --adapter json "cargo build --release"

Track your benchmarks in CI

Have you ever had a performance regression impact your users? Bencher could have prevented that from happening with continuous benchmarking.

🤖 该文档由 OpenAI GPT-4 自动生成。 它可能不准确并且可能包含错误。 如果您发现任何错误,请在 GitHub 上提出问题.