Use CLOCK_MONOTONIC_COARSE rather than COARSE_MONOTONIC_RAW.
The raw clock variant is slow (even relative to plain CLOCK_MONOTONIC), whereas the coarse clock variant is faster than CLOCK_MONOTONIC, but still has resolution (~1ms) that is adequate for our purposes. This resolves #479.
This commit is contained in:
parent
d87037a62c
commit
6c80321aed
12
configure.ac
12
configure.ac
@ -1312,16 +1312,16 @@ if test "x$je_cv_cray_prgenv_wrapper" = "xyes" ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl check for CLOCK_MONOTONIC_RAW (Linux-specific).
|
dnl check for CLOCK_MONOTONIC_COARSE (Linux-specific).
|
||||||
JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC_RAW, ...)], [
|
JE_COMPILABLE([clock_gettime(CLOCK_MONOTONIC_COARSE, ...)], [
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
], [
|
], [
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
|
clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
|
||||||
], [je_cv_clock_monotonic_raw])
|
], [je_cv_clock_monotonic_coarse])
|
||||||
if test "x${je_cv_clock_monotonic_raw}" = "xyes" ; then
|
if test "x${je_cv_clock_monotonic_coarse}" = "xyes" ; then
|
||||||
AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC_RAW])
|
AC_DEFINE([JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl check for CLOCK_MONOTONIC.
|
dnl check for CLOCK_MONOTONIC.
|
||||||
|
@ -77,9 +77,9 @@
|
|||||||
#undef JEMALLOC_HAVE_ISSETUGID
|
#undef JEMALLOC_HAVE_ISSETUGID
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defined if clock_gettime(CLOCK_MONOTONIC_RAW, ...) is available.
|
* Defined if clock_gettime(CLOCK_MONOTONIC_COARSE, ...) is available.
|
||||||
*/
|
*/
|
||||||
#undef JEMALLOC_HAVE_CLOCK_MONOTONIC_RAW
|
#undef JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defined if clock_gettime(CLOCK_MONOTONIC, ...) is available.
|
* Defined if clock_gettime(CLOCK_MONOTONIC, ...) is available.
|
||||||
|
@ -110,14 +110,14 @@ nstime_get(nstime_t *time)
|
|||||||
|
|
||||||
nstime_init(time, ticks_100ns * 100);
|
nstime_init(time, ticks_100ns * 100);
|
||||||
}
|
}
|
||||||
#elif JEMALLOC_HAVE_CLOCK_MONOTONIC_RAW
|
#elif JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE
|
||||||
# define NSTIME_MONOTONIC true
|
# define NSTIME_MONOTONIC true
|
||||||
static void
|
static void
|
||||||
nstime_get(nstime_t *time)
|
nstime_get(nstime_t *time)
|
||||||
{
|
{
|
||||||
struct timespec ts;
|
struct timespec ts;
|
||||||
|
|
||||||
clock_gettime(CLOCK_MONOTONIC_RAW, &ts);
|
clock_gettime(CLOCK_MONOTONIC_COARSE, &ts);
|
||||||
nstime_init2(time, ts.tv_sec, ts.tv_nsec);
|
nstime_init2(time, ts.tv_sec, ts.tv_nsec);
|
||||||
}
|
}
|
||||||
#elif JEMALLOC_HAVE_CLOCK_MONOTONIC
|
#elif JEMALLOC_HAVE_CLOCK_MONOTONIC
|
||||||
|
Loading…
Reference in New Issue
Block a user