use CLOCK_MONOTONIC in the timer if it's available

Linux sets _POSIX_MONOTONIC_CLOCK to 0 meaning it *might* be available,
so a sysconf check is necessary at runtime with a fallback to the
mandatory CLOCK_REALTIME clock.
diff --git a/test/include/test/timer.h b/test/include/test/timer.h
index 496072a..9ffbaef 100644
--- a/test/include/test/timer.h
+++ b/test/include/test/timer.h
@@ -1,10 +1,20 @@
 /* Simple timer, for use in benchmark reporting. */
 
+#include <unistd.h>
 #include <sys/time.h>
 
+#define JEMALLOC_CLOCK_GETTIME defined(_POSIX_MONOTONIC_CLOCK) \
+    && _POSIX_MONOTONIC_CLOCK >= 0
+
 typedef struct {
+#if JEMALLOC_CLOCK_GETTIME
+	struct timespec tv0;
+	struct timespec tv1;
+	int clock_id;
+#else
 	struct timeval tv0;
 	struct timeval tv1;
+#endif
 } timedelta_t;
 
 void	timer_start(timedelta_t *timer);
diff --git a/test/src/timer.c b/test/src/timer.c
index 36fbedd..338a9ef 100644
--- a/test/src/timer.c
+++ b/test/src/timer.c
@@ -4,22 +4,39 @@
 timer_start(timedelta_t *timer)
 {
 
+#if JEMALLOC_CLOCK_GETTIME
+	if (sysconf(_SC_MONOTONIC_CLOCK) <= 0)
+		timer->clock_id = CLOCK_REALTIME;
+	else
+		timer->clock_id = CLOCK_MONOTONIC;
+	clock_gettime(timer->clock_id, &timer->tv0);
+#else
 	gettimeofday(&timer->tv0, NULL);
+#endif
 }
 
 void
 timer_stop(timedelta_t *timer)
 {
 
+#if JEMALLOC_CLOCK_GETTIME
+	clock_gettime(timer->clock_id, &timer->tv1);
+#else
 	gettimeofday(&timer->tv1, NULL);
+#endif
 }
 
 uint64_t
 timer_usec(const timedelta_t *timer)
 {
 
+#if JEMALLOC_CLOCK_GETTIME
+	return (((timer->tv1.tv_sec - timer->tv0.tv_sec) * 1000000) +
+	    (timer->tv1.tv_nsec - timer->tv0.tv_nsec) / 1000);
+#else
 	return (((timer->tv1.tv_sec - timer->tv0.tv_sec) * 1000000) +
 	    timer->tv1.tv_usec - timer->tv0.tv_usec);
+#endif
 }
 
 void