8 个不稳定版本 (3 个破坏性更新)
0.4.0 | 2023年5月26日 |
---|---|
0.3.0 | 2022年12月24日 |
0.2.0 | 2022年3月8日 |
0.1.4 | 2022年1月29日 |
0.1.1 | 2020年5月2日 |
#114 in 性能分析
每月 1,413 次下载
用于 4 crates
15KB
133 行
Criterion-perf-events
这是 Criterion.rs 的一个测量插件,用于测量 Linux perf 接口的事件。
支持的事件
Criterion-perf-events 使用 perfcnt
crate,并支持此 crate 提供的事件。如果您想了解更多详细信息,请查看以下列出的事件
故障排除
如果您收到 "权限被拒绝" 的错误,请更新 perf_event_paranoid
sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'
有关更多详细信息,请参阅以下 链接。
示例
以下代码演示了如何计数退休指令。
use criterion::{criterion_group, criterion_main, BenchmarkId, black_box, Criterion};
use criterion_perf_events::Perf;
use perfcnt::linux::HardwareEventType as Hardware;
use perfcnt::linux::PerfCounterBuilderLinux as Builder;
fn fibonacci_slow(n: usize) -> usize {
match n {
0 => 1,
1 => 1,
n => fibonacci_slow(n - 1) + fibonacci_slow(n - 2),
}
}
fn bench(c: &mut Criterion<Perf>) {
let mut group = c.benchmark_group("fibonacci");
let fibo_arg = 30;
group.bench_function(BenchmarkId::new("slow", fibo_arg), |b| {
b.iter(|| fibonacci_slow(black_box(fibo_arg)))
});
group.finish()
}
criterion_group!(
name = instructions_bench;
config = Criterion::default().with_measurement(Perf::new(Builder::from_hardware_event(Hardware::Instructions)));
targets = bench
);
criterion_main!(instructions_bench);
运行方式
cargo criterion
打开 target/criterion/reports/index.html
查看带有图表的详细结果。对于所有事件类型(例如 Hardware::Instructions
、Hardware::CacheMisses
...),criterion 总会报告周期作为单位。请注意,显示的是事件类型,而不是 CPU 周期。
依赖关系
~12–23MB
~300K SLoC