clone-shim/benches/clone3.rs

41 lines
1.6 KiB
Rust

use clone_shim::clone::{clone3, CloneArgs, CloneFlags};
use criterion::{criterion_group, criterion_main, Criterion};
fn run_clone3(flags: CloneFlags) {
if clone3(CloneArgs::new(flags)).unwrap() == nix::unistd::Pid::from_raw(0) {
std::process::exit(0)
}
}
pub fn benchmark_clone3(c: &mut Criterion) {
c.bench_function("clone3", |b| b.iter(|| run_clone3(CloneFlags::empty())));
c.bench_function("clone3+CLONE_NEWCGROUP", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWCGROUP))
});
c.bench_function("clone3+CLONE_NEWIPC", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWIPC))
});
c.bench_function("clone3+CLONE_NEWNET", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWNET))
});
c.bench_function("clone3+CLONE_NEWNS", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWNS))
});
c.bench_function("clone3+CLONE_NEWPID", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWPID))
});
c.bench_function("clone3+CLONE_NEWUSER", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWUSER))
});
c.bench_function("clone3+CLONE_NEWUTS", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWUTS))
});
c.bench_function("clone3+CLONE_NEWCGROUP+CLONE_NEWIPC+CLONE_NEWNET+CLONE_NEWNS+CLONE_NEWPID+CLONE_NEWUSER+CLONE_NEWUTS", |b| {
b.iter(|| run_clone3(CloneFlags::CLONE_NEWCGROUP|CloneFlags::CLONE_NEWIPC|CloneFlags::CLONE_NEWNET|CloneFlags::CLONE_NEWNS|CloneFlags::CLONE_NEWPID|CloneFlags::CLONE_NEWUSER|CloneFlags::CLONE_NEWUTS))
});
}
criterion_group!(benches, benchmark_clone3);
criterion_main!(benches);