#计时 #纳秒 #时钟 #tsc #高速 #测量时间 #rdtsc

minstant

一个高性能、高精度的TSC驱动的std::time::Instant的替代品

8个版本

0.1.7 2024年2月24日
0.1.6 2024年1月24日
0.1.4 2023年10月20日
0.1.3 2023年8月29日
0.1.1 2022年1月6日

#119操作系统

Download history 11679/week @ 2024-03-14 11135/week @ 2024-03-21 8837/week @ 2024-03-28 10176/week @ 2024-04-04 13112/week @ 2024-04-11 8896/week @ 2024-04-18 9586/week @ 2024-04-25 9625/week @ 2024-05-02 11173/week @ 2024-05-09 8917/week @ 2024-05-16 8514/week @ 2024-05-23 11090/week @ 2024-05-30 9198/week @ 2024-06-06 10510/week @ 2024-06-13 10649/week @ 2024-06-20 9201/week @ 2024-06-27

每月42,717次下载
44crates中使用(直接使用18个)

MIT许可证

120KB
397

minstant

Actions Status Build Status Documentation Crates.io LICENSE

一个高性能、高精度的std::time::Instant的替代品,它利用TSC测量时间。

用法

[dependencies]
minstant = "0.1"
let start = minstant::Instant::now();

// Code snipppet to measure

let duration: std::time::Duration = start.elapsed();

动机

此库被高性能跟踪库minitrace-rust使用。主要目的是在x86处理器上使用TSC以高速测量时间,同时保持较高的精度。

平台支持

目前,只有Linux操作系统在上通过TSC支持。在其他平台上,minstant将回退到std::time。如果TSC不稳定,它也将回退到std::time

如果回退发生时速度比精度更重要,可以使用fallback-corase功能来使用粗略时间

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

基准测试

基准测试平台是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

依赖关系

~1.1–1.7MB
~39K SLoC