summaryrefslogtreecommitdiff
path: root/mysys/my_rdtsc.c
diff options
context:
space:
mode:
authorDaniel Black <daniel@mariadb.org>2020-07-15 11:23:19 +1000
committerEugene Kosov <claprix@yandex.ru>2020-07-15 16:23:27 +0300
commit20512a68d8544b37814f66d78d7f83e3646da79f (patch)
treef274b92cc9384941949929b9f3ae1ff256a87b8a /mysys/my_rdtsc.c
parente67daa5653490074850bc9f5d2deef58f2a10d8e (diff)
downloadmariadb-git-20512a68d8544b37814f66d78d7f83e3646da79f.tar.gz
MDEV-23175: my_timer_milliseconds ftime deprecated - clock_gettime replacement
Linux glibc has deprecated ftime resutlting in a compile error on Fedora-32. Per manual clock_gettime is the suggested replacement. Because my_timer_milliseconds is a relative time used by largely the perfomrance schema, CLOCK_MONOTONIC_COARSE is used. This has been available since Linux-2.6.32. The low overhead is shows in the unittest: $ unittest/mysys/my_rdtsc-t 1..11 # ----- Routine --------------- # myt.cycles.routine : 5 # myt.nanoseconds.routine : 11 # myt.microseconds.routine : 13 # myt.milliseconds.routine : 18 # myt.ticks.routine : 17 # ----- Frequency ------------- # myt.cycles.frequency : 3596597014 # myt.nanoseconds.frequency : 1000000000 # myt.microseconds.frequency : 1000000 # myt.milliseconds.frequency : 1039 # myt.ticks.frequency : 103 # ----- Resolution ------------ # myt.cycles.resolution : 1 # myt.nanoseconds.resolution : 1 # myt.microseconds.resolution : 1 # myt.milliseconds.resolution : 1 # myt.ticks.resolution : 1 # ----- Overhead -------------- # myt.cycles.overhead : 118 # myt.nanoseconds.overhead : 234 # myt.microseconds.overhead : 222 # myt.milliseconds.overhead : 30 # myt.ticks.overhead : 4946 ok 1 - my_timer_init() did not crash ok 2 - The cycle timer is strictly increasing ok 3 - The cycle timer is implemented ok 4 - The nanosecond timer is increasing ok 5 - The nanosecond timer is implemented ok 6 - The microsecond timer is increasing ok 7 - The microsecond timer is implemented ok 8 - The millisecond timer is increasing ok 9 - The millisecond timer is implemented ok 10 - The tick timer is increasing ok 11 - The tick timer is implemented
Diffstat (limited to 'mysys/my_rdtsc.c')
-rw-r--r--mysys/my_rdtsc.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/mysys/my_rdtsc.c b/mysys/my_rdtsc.c
index dce3ca2be3b..514fd4c74ea 100644
--- a/mysys/my_rdtsc.c
+++ b/mysys/my_rdtsc.c
@@ -75,7 +75,7 @@
#endif
#endif
-#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
+#if !defined(CLOCK_GETTIME) && defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
#include <sys/timeb.h> /* for ftime */
#endif
@@ -175,7 +175,17 @@ ulonglong my_timer_microseconds(void)
ulonglong my_timer_milliseconds(void)
{
-#if defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
+#if defined(HAVE_CLOCK_GETTIME)
+ struct timespec tp;
+#ifdef CLOCK_MONOTONIC_COARSE
+ /* Linux */
+ clock_gettime(CLOCK_MONOTONIC_COARSE, &tp);
+#else
+ /* POSIX */
+ clock_gettime(CLOCK_MONOTONIC, &tp);
+#endif
+ return (ulonglong)tp.tv_sec * 1000 + (ulonglong)tp.tv_nsec / 1000000;
+#elif defined(HAVE_SYS_TIMEB_H) && defined(HAVE_FTIME)
/* ftime() is obsolete but maybe the platform is old */
struct timeb ft;
ftime(&ft);