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:
Jason Evans 2016-10-29 22:55:08 -07:00
parent d87037a62c
commit 6c80321aed
3 changed files with 10 additions and 10 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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