//! Benchmarks for rustix.
//!
//! To enable these benchmarks, add `--cfg=criterion` to RUSTFLAGS and enable
//! the "fs", "time", and "process" cargo features.
//!
//! ```sh
//! RUSTFLAGS=--cfg=criterion cargo bench --features=fs,time,process,stdio
//! ```
#[ cfg(any(
not(criterion),
not(feature = "fs" ),
not(feature = "process" ),
not(feature = "time" ),
not(feature = "stdio" ),
windows,
target_os = "emscripten" ,
target_os = "redox" ,
target_os = "wasi" ,
))]
fn main() {
unimplemented!(
"Add --cfg=criterion to RUSTFLAGS and enable the \" fs\", \" time\", \" process\", and \" stdio\" cargo \
features."
)
}
#[ cfg(not(any(
not(criterion),
not(feature = "fs" ),
not(feature = "process" ),
not(feature = "time" ),
not(feature = "stdio" ),
windows,
target_os = "emscripten" ,
target_os = "redox" ,
target_os = "wasi" ,
)))]
use criterion::{criterion_group, criterion_main};
#[ cfg(not(any(
not(criterion),
not(feature = "fs" ),
not(feature = "process" ),
not(feature = "time" ),
not(feature = "stdio" ),
windows,
target_os = "emscripten" ,
target_os = "redox" ,
target_os = "wasi" ,
)))]
mod suite {
use criterion::Criterion;
pub (super ) fn simple_statat(c: &mut Criterion) {
use rustix::fs::{statat, AtFlags, CWD};
c.bench_function("simple statat" , |b| {
b.iter(|| {
statat(CWD, "/" , AtFlags::empty()).unwrap();
})
});
}
pub (super ) fn simple_statat_libc(c: &mut Criterion) {
c.bench_function("simple statat libc" , |b| {
b.iter(|| {
let mut s = std::mem::MaybeUninit::<libc::stat>::uninit();
unsafe {
assert_eq!(
libc::fstatat(
libc::AT_FDCWD,
std::ffi::CString::new("/" ).unwrap().as_c_str().as_ptr() as _,
s.as_mut_ptr(),
0
),
0
);
}
})
});
}
pub (super ) fn simple_statat_libc_cstr(c: &mut Criterion) {
c.bench_function("simple statat libc cstr" , |b| {
b.iter(|| {
let mut s = std::mem::MaybeUninit::<libc::stat>::uninit();
unsafe {
assert_eq!(
libc::fstatat(
libc::AT_FDCWD,
rustix::cstr!("/" ).as_ptr() as _,
s.as_mut_ptr(),
0
),
0
);
}
})
});
}
pub (super ) fn simple_statat_cstr(c: &mut Criterion) {
use rustix::fs::{statat, AtFlags, CWD};
c.bench_function("simple statat cstr" , |b| {
b.iter(|| {
statat(CWD, rustix::cstr!("/" ), AtFlags::empty()).unwrap();
})
});
}
pub (super ) fn simple_fstat(c: &mut Criterion) {
use rustix::fs::fstat;
c.bench_function("simple fstat" , |b| {
b.iter(|| {
fstat(rustix::stdio::stdin()).unwrap();
})
});
}
pub (super ) fn simple_fstat_libc(c: &mut Criterion) {
c.bench_function("simple fstat libc" , |b| {
b.iter(|| {
let mut s = std::mem::MaybeUninit::<libc::stat>::uninit();
unsafe {
assert_eq!(libc::fstat(libc::STDIN_FILENO, s.as_mut_ptr()), 0 );
}
})
});
}
#[ cfg(not(target_os = "wasi" ))]
pub (super ) fn simple_clock_gettime(c: &mut Criterion) {
use rustix::time::{clock_gettime, ClockId};
c.bench_function("simple clock_gettime" , |b| {
b.iter(|| {
let _ = clock_gettime(ClockId::Monotonic);
})
});
}
#[ cfg(not(target_os = "wasi" ))]
pub (super ) fn simple_clock_gettime_libc(c: &mut Criterion) {
c.bench_function("simple clock_gettime libc" , |b| {
b.iter(|| {
let mut s = std::mem::MaybeUninit::<libc::timespec>::uninit();
unsafe {
assert_eq!(
libc::clock_gettime(libc::CLOCK_MONOTONIC, s.as_mut_ptr()),
0
);
let _ = s.assume_init();
}
})
});
}
#[ cfg(not(target_os = "wasi" ))]
pub (super ) fn simple_getpid(c: &mut Criterion) {
use rustix::process::getpid;
c.bench_function("simple getpid" , |b| {
b.iter(|| {
let _ = getpid();
})
});
}
#[ cfg(not(target_os = "wasi" ))]
pub (super ) fn simple_getpid_libc(c: &mut Criterion) {
c.bench_function("simple getpid libc" , |b| {
b.iter(|| unsafe {
let _ = libc::getpid();
})
});
}
}
#[ cfg(not(any(
not(criterion),
not(feature = "fs" ),
not(feature = "process" ),
not(feature = "time" ),
not(feature = "stdio" ),
windows,
target_os = "emscripten" ,
target_os = "redox" ,
target_os = "wasi" ,
)))]
criterion_group!(
benches,
suite::simple_statat,
suite::simple_statat_libc,
suite::simple_statat_libc_cstr,
suite::simple_statat_cstr,
suite::simple_fstat,
suite::simple_fstat_libc,
suite::simple_clock_gettime,
suite::simple_clock_gettime_libc,
suite::simple_getpid,
suite::simple_getpid_libc
);
#[ cfg(not(any(
not(criterion),
not(feature = "fs" ),
not(feature = "process" ),
not(feature = "time" ),
not(feature = "stdio" ),
windows,
target_os = "emscripten" ,
target_os = "redox" ,
target_os = "wasi" ,
)))]
criterion_main!(benches);
Messung V0.5 in Prozent C=91 H=98 G=94
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-18)
¤
*© Formatika GbR, Deutschland