minstant
A drop-in replacement for std::time::Instant
that measures time with high performance and high accuracy powered by TSC.
Usage
[dependencies]
minstant = "0.1.2"
let start = minstant::Instant::now();
// Code snipppet to measure
let duration: std::time::Duration = start.elapsed();
Motivation
This library is used by a high performance tracing library minitrace-rust
. The main purpose is to use TSC on x86 processors to measure time at high speed without losing much accuracy.
Platform Support
Currently, only the Linux on x86
or x86_64
is backed by TSC. On other platforms, minstant
falls back to coarse time. If TSC is unstable, it will also fall back to coarse time.
Benchmark
Benchmark platform is Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
on CentOS 7.
> cargo criterion
Instant::now()/minstant time: [10.449 ns 10.514 ns 10.619 ns]
Instant::now()/quanta time: [31.467 ns 31.628 ns 31.822 ns]
Instant::now()/std time: [26.831 ns 26.924 ns 27.016 ns]
minstant::Anchor::new() time: [46.987 ns 47.243 ns 47.498 ns]
minstant::Instant::as_unix_nanos() time: [15.287 ns 15.318 ns 15.350 ns]