Skip to content

Instantly share code, notes, and snippets.

@hrmsk66
Last active January 8, 2024 07:01
Show Gist options
  • Save hrmsk66/66fdbb8991d64bb4e7170622b9d37fcd to your computer and use it in GitHub Desktop.
Save hrmsk66/66fdbb8991d64bb4e7170622b9d37fcd to your computer and use it in GitHub Desktop.
criterion / flamegraph

Benchmark / Flamegraph in Rust

criterion

Add a dev dependency

cargo add criterion --dev

Cargo.toml

[package]
name = "spin"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

[dev-dependencies]
criterion = "0.5.1"

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

Add benches/**.rs

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

pub fn criterion_benchmark(c: &mut Criterion) {
    c.bench_function("chan", |b| {
        b.iter(|| {
            black_box({
                let mut channel = Channel::new();
                let (sender, receiver) = channel.split();
                sender.send("Hello, World!");
                receiver.receive()
            })
        })
    });
}

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

Run benchmark

cargo bench

flamegraph

Need sudo as it depends on dtrace.

sudo cargo flamegraph --bench spinlock_bench -- --bench
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment