Archives by Category
Contact
- Hagen Paul Pfeifer
- http://jauu.net
- hagen@jauu.net (encrypted preferred)
- KeyId: 0x98350C22
- Telephone: +49 174 5455209
Follow this blog
Tracing and Time Measurements
- Published in: programming
- | Time: 00:47:14 CEST
- | SHA1: 1815d7b555afee3ce8ef464dac0968065a4f66fc
In user-space the answer is often simple: use gettimeofday if microseconds
resolution is sufficing. Another often used mechanism is to use the time stamp
counter – but as mentioned in another blog-post in the lion share of all use
cases the advice is often too narrow because of clock variances in SMP/CMP
systems and hibernation issues.
#define rdtscll(val) \
__asm__ __volatile__("rdtsc" : "=A" (val))
In kernel-space the timing capabilities are a little bit more complex and several functions are provided. Three new kinds functions are available, both with different scalability and precision:
- trace_clock—this clock is good compromise of the other clocks. The clock is not completely serialized but try to level CPU boundaries.
- trace_clock_local—complete un-serialized, lowest latency.
- trace_clock_global—use clock at core with id 0, highest latency.
All three clocks provide u64 nanoseconds granularity (but not precision ;). At the end it is often more crucial to get exact timings as a precise timestamping mechanism with a small latency but variances of several magnitudes due to SMP/CMP issues.