10个版本 (1个稳定版)

1.0.0 2024年8月11日
0.11.0 2024年6月14日
0.10.0 2024年6月1日
0.9.0 2024年5月28日
0.5.1 2024年3月15日

#19性能分析

Download history 981/week @ 2024-05-03 1129/week @ 2024-05-10 894/week @ 2024-05-17 2001/week @ 2024-05-24 3099/week @ 2024-05-31 1482/week @ 2024-06-07 2476/week @ 2024-06-14 1422/week @ 2024-06-21 1375/week @ 2024-06-28 1427/week @ 2024-07-05 1367/week @ 2024-07-12 1408/week @ 2024-07-19 2565/week @ 2024-07-26 2169/week @ 2024-08-02 2286/week @ 2024-08-09 1580/week @ 2024-08-16

每月 8,892 次下载
用于 4 包

Apache-2.0 OR MIT

290KB
6K SLoC

Criterion.rs

Rust中的统计驱动微基准测试

Criterion.rs 通过检测和测量性能改进或退化(即使是很小的变化),快速准确地帮助您编写快速代码。您可以有信心进行优化,了解每个更改如何影响您的代码性能。

分叉原因

criterion 是以过时的依赖被动维护的。

此分叉更新了

  • renovate bot 依赖关系更新
  • 内建 codspeed 功能
  • clap 替换为 bpaf 以减小二进制文件大小和编译时间
  • criterion-plot 包合并到 criterion2
  • 移除正则表达式过滤器支持以减少编译时间

目录

功能

  • 统计:统计分析检测自上次基准测试运行以来性能是否以及如何改变
  • 图表:使用 gnuplot 生成基准测试结果的详细图表
  • 与稳定版兼容:无需安装夜间Rust即可基准测试您的代码

快速入门

为了生成图表,您必须安装 gnuplot。请参阅gnuplot网站以获取安装说明。有关最低支持的Rust版本的详细信息,请参阅兼容性策略

要开始使用 Criterion.rs,请将以下内容添加到您的 Cargo.toml 文件中

[dev-dependencies]
criterion = { version = "0.4", features = ["html_reports"] }

[[bench]]
name = "my_benchmark"
harness = false

接下来,通过在 $PROJECT/benches/my_benchmark.rs 创建一个文件并包含以下内容来定义一个基准

use criterion::{black_box, criterion_group, criterion_main, Criterion};

fn fibonacci(n: u64) -> u64 {
    match n {
        0 => 1,
        1 => 1,
        n => fibonacci(n-1) + fibonacci(n-2),
    }
}

fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("fib 20", |b| b.iter(|| fibonacci(black_box(20))));
}

criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);

最后,使用以下命令运行此基准:cargo bench。您应该看到类似以下内容的输出

     Running target/release/deps/example-423eedc43b2b3a93
fib 20                  time:   [26.029 us 26.251 us 26.505 us]
Found 11 outliers among 99 measurements (11.11%)
  6 (6.06%) high mild
  5 (5.05%) high severe

有关更多详细信息,请参阅入门指南

目标

Criterion.rs 的主要目标是提供一个强大且统计上严谨的工具来衡量代码的性能,防止性能退化并准确测量优化。此外,它应尽可能对程序员友好,并使创建可靠、有用的基准测试变得容易,即使对于没有高级统计背景的程序员也是如此。

贡献

首先,感谢您的贡献。

为 Criterion.rs 做出贡献的一个很好的方法是使用它来满足您的基准测试需求,并报告您的经验,提交和评论问题等。

以拉取请求的形式提交代码或文档改进也是受欢迎的。如果您不确定要做什么,请尝试检查初学者标签

如果在几天后您的問題或拉取请求没有回应,请随时联系我 (@bheisler)。

有关更多详细信息,请参阅CONTRIBUTING.md 文件

兼容性策略

Criterion.rs 支持 Rust 的最后三个稳定次要版本。在撰写本文时,这意味着 Rust 1.59 或更高版本。较旧版本可能可以工作,但无法保证。

目前,被认为可以工作的 Rust 的最旧版本是 1.57。Criterion.rs 的未来版本可能不支持这些旧版本,这不会被视为破坏性更改。如果您需要 Criterion.rs 在旧版本的 Rust 上运行,您将需要坚持使用 Criterion.rs 的特定补丁版本。

维护

Criterion.rs 由 Jorge Aparicio (@japaric) 创建,并由 Brook Heisler (@bheisler) 维护。

许可证

Criterion.rs 在 Apache 2.0 许可证和 MIT 许可证下双许可。

  • bencher - 将 libtest 基准测试运行器移植到稳定 Rust
  • criterion - 启发 Criterion.rs 的 Haskell 微基准测试库
  • cargo-benchcmp - Cargo 子命令,用于比较两次 libtest 或 bencher 基准测试运行的输出
  • cargo-flamegraph - Cargo 子命令,用于分析可执行文件并生成火焰图

Criterion.rs 扩展

依赖项

~3–18MB
~206K SLoC