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 性能分析

Download history 339/week @ 2024-03-13 269/week @ 2024-03-20 306/week @ 2024-03-27 216/week @ 2024-04-03 291/week @ 2024-04-10 353/week @ 2024-04-17 460/week @ 2024-04-24 192/week @ 2024-05-01 145/week @ 2024-05-08 174/week @ 2024-05-15 206/week @ 2024-05-22 256/week @ 2024-05-29 362/week @ 2024-06-05 311/week @ 2024-06-12 365/week @ 2024-06-19 304/week @ 2024-06-26

每月 1,413 次下载
用于 4 crates

MIT/Apache

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::InstructionsHardware::CacheMisses...),criterion 总会报告周期作为单位。请注意,显示的是事件类型,而不是 CPU 周期。

依赖关系

~12–23MB
~300K SLoC