Skip to content

Anton-4/criterion-perf-events

 
 

Repository files navigation

Criterion-perf-events

This is a measurement plugin for Criterion.rs to measure events of the Linux perf interface.

Supported Events

Criterion-perf-events uses the perfcnt crate and supports events provided by this crate. If you are interested in more details, please take a look at the events listed here:

Troubleshooting

If you get a "Permission denied" error, update perf_event_paranoid:

sudo sh -c 'echo 1 >/proc/sys/kernel/perf_event_paranoid'

For further details please take a look at the following link.

Example

The following code shows how to count retired instructions.

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);

run with:

cargo criterion

Open target/criterion/reports/index.html to view detailed results with plots. For all event types (Hardware::Instructions, Hardware::CacheMisses...) criterion will always report cycles as the unit. Note that your event type is what is being shown, not CPU cycles.

About

No description, website, or topics provided.

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Rust 76.9%
  • Nix 23.1%