Skip to content
tikvPublic

About

Performant time measuring in Rust

Topics

Resources

Stars

201 stars

Watchers

11 watching

Forks

Latest commit

 

History

45 Commits

Folders and files

Repository files navigation

minstant

Actions Status Build Status Documentation Crates.io LICENSE

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"
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 std::time. If TSC is unstable, it will also fall back to std::time.

If speed is privileged over accuracy when fallback occurs, you can use fallback-coarse feature to use coarse time:

[dependencies]
minstant = { version = "0.1", features = ["fallback-coarse"] }

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]

Benchmark

About

Performant time measuring in Rust

Topics

Resources

Stars

201 stars

Watchers

11 watching

Forks

Releases

Packages

Used by

Contributors

Languages