• Jim Brunner's avatar
    Use H/W Monotonic clock and updates to AE (#7644) · c01e94a4
    Jim Brunner authored
    Update adds a general source for retrieving a monotonic time.
    In addition, AE has been updated to utilize the new monotonic
    clock for timer processing.
    
    This performance improvement is **not** enabled in a default build due to various H/W compatibility
    concerns, see README.md for details. It does however change the default use of gettimeofday with
    clock_gettime and somewhat improves performance.
    
    This update provides the following
    1. An interface for retrieving a monotonic clock. getMonotonicUs returns a uint64_t (aka monotime)
       with the number of micro-seconds from an arbitrary point. No more messing with tv_sec/tv_usec.
       Simple routines are provided for measuring elapsed milli-seconds or elapsed micro-seconds (the
       most common use case for a monotonic timer). No worries about time moving backwards.
    2. High-speed assembler implementation for x86 and ARM. The standard method for retrieving the
       monotonic clock is POSIX.1b (1993): clock_gettime(CLOCK_MONOTONIC, timespec*). However, most
       modern processors provide a constant speed instruction clock which can be retrieved in a fraction
       of the time that it takes to call clock_gettime. For x86, this is provided by the RDTSC
       instruction. For ARM, this is provided by the CNTVCT_EL0 instruction. As a compile-time option,
       these high-speed timers can be chosen. (Default is POSIX clock_gettime.)
    3. Refactor of event loop timers. The timer processing in ae.c has been refactored to use the new
       monotonic clock interface. This results in simpler/cleaner logic and improved performance.
    c01e94a4
README.md 20.8 KB