mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
MINOR: clock: add now_cpu_time_fast() function
Same as now_cpu_time(), but for fast queries (less accurate) Relies on now_cpu_time() and now_mono_time_fast() is used as a cache expiration hint to prevent now_cpu_time() from being called too often since it is known to be quite expensive. Depends on commit "MINOR: clock: add now_mono_time_fast() function"
This commit is contained in:
parent
07cbd8e074
commit
df188f145b
@ -36,6 +36,7 @@ uint64_t now_cpu_time_thread(int thr);
|
||||
uint64_t now_mono_time(void);
|
||||
uint64_t now_mono_time_fast(void);
|
||||
uint64_t now_cpu_time(void);
|
||||
uint64_t now_cpu_time_fast(void);
|
||||
void clock_set_local_source(void);
|
||||
void clock_update_local_date(int max_wait, int interrupted);
|
||||
void clock_update_global_date();
|
||||
|
26
src/clock.c
26
src/clock.c
@ -93,6 +93,32 @@ uint64_t now_cpu_time(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Returns the current thread's cumulated CPU time in nanoseconds.
|
||||
*
|
||||
* thread_local timer is cached so that call is less precise but also less
|
||||
* expensive if heavily used.
|
||||
* We use the mono time as a cache expiration hint since now_cpu_time() is
|
||||
* known to be much more expensive than now_mono_time_fast() on systems
|
||||
* supporting the COARSE clock source.
|
||||
*
|
||||
* Returns 0 if either now_mono_time_fast() or now_cpu_time() are not
|
||||
* supported.
|
||||
*/
|
||||
uint64_t now_cpu_time_fast(void)
|
||||
{
|
||||
static THREAD_LOCAL uint64_t mono_cache = 0;
|
||||
static THREAD_LOCAL uint64_t cpu_cache = 0;
|
||||
uint64_t mono_cur;
|
||||
|
||||
mono_cur = now_mono_time_fast();
|
||||
if (unlikely(mono_cur != mono_cache)) {
|
||||
/* global mono clock was updated: local cache is outdated */
|
||||
cpu_cache = now_cpu_time();
|
||||
mono_cache = mono_cur;
|
||||
}
|
||||
return cpu_cache;
|
||||
}
|
||||
|
||||
/* returns another thread's cumulated CPU time in nanoseconds if supported, otherwise zero */
|
||||
uint64_t now_cpu_time_thread(int thr)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user