diff options
author | Daniel Black <daniel@mariadb.org> | 2020-07-15 11:23:19 +1000 |
---|---|---|
committer | Eugene Kosov <claprix@yandex.ru> | 2020-07-15 16:23:27 +0300 |
commit | 20512a68d8544b37814f66d78d7f83e3646da79f (patch) | |
tree | f274b92cc9384941949929b9f3ae1ff256a87b8a /mysys/my_rdtsc.c | |
parent | e67daa5653490074850bc9f5d2deef58f2a10d8e (diff) | |
download | mariadb-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.c | 14 |
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); |