17 unstable releases (5 breaking)

new 0.6.6-alpha.1 Sep 22, 2020
0.6.4 Aug 27, 2020
0.6.2 Jul 21, 2020
0.4.1 Feb 25, 2020
0.2.0 Mar 10, 2019

#5 in Date and time

Download history 6917/week @ 2020-06-04 7333/week @ 2020-06-11 6996/week @ 2020-06-18 4656/week @ 2020-06-25 5574/week @ 2020-07-02 8822/week @ 2020-07-09 7766/week @ 2020-07-16 6285/week @ 2020-07-23 15035/week @ 2020-07-30 5355/week @ 2020-08-06 5667/week @ 2020-08-13 6674/week @ 2020-08-20 7584/week @ 2020-08-27 6413/week @ 2020-09-03 8213/week @ 2020-09-10 6595/week @ 2020-09-17

31,334 downloads per month
Used in 18 crates (7 directly)

MIT license

54KB
821 lines

quanta

conduct-badge travis-badge downloads-badge release-badge docs-badge libraries-io-badge cargo-make-badge license-badge

quanta is a high-speed timing library, useful for getting the current time very quickly.

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

  • monotonic time in nanoseconds or raw cycles
  • extremely low overhead where possible
  • optimized for instruction-level accuracy in measurements
  • mockable!
  • cross-platform!
  • fun, science-y name!

platform / architecture support

For platforms, we have tier 1 support for Linux, Windows, and macOS/iOS. Platforms such as Solaris or various BSDs have tier 2.5 support: quanta should work on them by virtue of depending on libc, but we don't test or build on these platforms as all.

Architecture-wise, x86/x86-64 and SSE2 are required for the optimized TSC codepath. This is handled transparently via compile-time target features, so you must build with the appropriate compiler flags to specify the CPU features where your binary will run, as runtime detection is not supported.

performance

Accessing the TSC on a modern x86 processor can have an overhead of as little as ~11ns, and quanta provides the thinnest possible layer over this. Using the native time facilities, such as clock_gettime(CLOCK_MONOTONIC) on Linux, you may expect to see closer to 17-18ns of overhead.

Measurements have not been taken for non-x86-based architectures/platforms.

why use this over stdlib or clocksource?

The performance alone is enough to choose this over the stdlib timing facilities if you're doing performance-critical work or need high-accuracy point-in-time measurements, which Instant is just not suitable for.

When compared to clocksource, though, we have a few extra features that can make the difference:

  • Clock can be mocked, allowing you to easily control the passage of time in your tests
  • Clock provides start and end as replacements for raw, which are optimized for instruction-level accuracy, avoiding instruction reordering that might taint measurements

license

quanta is licensed under the MIT license. (LICENSE or http://opensource.org/licenses/MIT)

Dependencies

~77–475KB