34 releases
new 0.12.4 | Dec 13, 2024 |
---|---|
0.12.3 | Mar 31, 2024 |
0.12.2 | Dec 31, 2023 |
0.12.1 | Oct 31, 2023 |
0.2.0 | Mar 10, 2019 |
#12 in Operating systems
2,677,288 downloads per month
Used in 954 crates
(59 directly)
69KB
916 lines
quanta
quanta is a high-speed timing library, useful for getting the current time very quickly, as well as manipulating it.
code of conduct
NOTE: All conversations and contributions to this project shall adhere to the Code of Conduct.
usage
The API documentation of this library can be found at docs.rs/quanta.
general features
- count CPU cycles via Time Stamp Counter (TSC). or
- get monotonic time, in nanoseconds, based on TSC (or OS fallback)
- extremely low overhead where possible
- mockable
- cross-platform
- fun, science-y name!
platform / architecture support
For most major platforms -- Linux, Windows, and macOS -- with processors made around or after 2008, you should have no
problems using quanta
with full TSC support. quanta
will always fallback to the included stdlib timing facilities if
TSC support is not present. The biggest caveat to this, as evidenced in the compatibility matrix below, is that we only
support the TSC on x86
/x86_64
platforms.
Platform | stdlib fallback | TSC support? | CI tests? |
---|---|---|---|
Linux (x86/x86_64) | ✅ | ✅ | ✅ |
Linux (MIPS/ARM) | ✅ | ❌ | ✅ |
Windows (x86/x86_64) | ✅ | ✅ | ✅ |
Windows (ARM) | ✅ | ❌ | ❌ |
macOS (x86/x86_64) | ✅ | ✅ | ✅ |
macOS (ARM) | ✅ | ❌ | ❌ |
iOS (ARM) | ✅ | ❌ | ❌ |
performance
quanta
sits neck-and-neck with native OS time facilities: the cost of Clock::now
is on par Instant::now
from the
stdlib, if not better.
why use this over stdlib?
Beyond having a performance edge in specific situations, the ability to use mocked time makes it easier to actually test that your application is doing the right thing when time is involved.
Additionally, and as mentioned in the general features section, quanta
provides a safe/thin wrapper over accessing the
Time Stamp Counter, which allows measuring cycle counts over short sections of code. This can be relevant/important for
accurately measuring performance-critical sections of code.
alternative crates
chrono
:- based on
std::time::SystemTime
: non-monotonic reads - focused on timezone-based "date/time" measurements, not intervals/elapsed time
- clock cannot be altered at all (no pause, no discrete updates)
- based on
time
:- based on
std::time::SystemTime
andstd::time::Instant
:time::Time
/time::PrimitiveDateTime
useSystemTime
: non-monotonic readstime::Instant
usesInstant
: monotonic reads
- focused on timezone-based "date/time" measurements, not interval/elapsed time
- clock cannot be altered at all (no pause, no discrete updates)
- based on
clock
:- based on
std::time::SystemTime
: non-monotonic reads - clock can be swapped (trait-based)
- no free function for acquiring time
- based on
clocksource
:- based on TSC w/ OS fallback; non-monotonic reads
- clock cannot be altered at all (no pause, no discrete updates)
- depends on unstable
asm!
macro + feature flag to enable TSC - no free function for acquiring time
pausable_clock
:- based on
std::time::Instant
: monotonic reads - clock can be paused (time can be delayed, but not discretely updated)
- no free function for acquiring time
- based on
license
quanta is licensed under the MIT license. (LICENSE or http://opensource.org/licenses/MIT)
Dependencies
~0.7–3.5MB
~62K SLoC