X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=gettime.c;h=15356b1b9227c2b92f7676aae124664647f0e5d1;hb=9a2a86d0f6f1425a6da666459ccd379e356a30d0;hp=08d2d2b3b1205a56543ec6aef00e52b37711d622;hpb=c223da83e253b0057bb029bf4fbb55a05844215c;p=fio.git diff --git a/gettime.c b/gettime.c index 08d2d2b3..15356b1b 100644 --- a/gettime.c +++ b/gettime.c @@ -5,15 +5,18 @@ #include #include #include +#include #include "fio.h" #include "smalloc.h" #include "hash.h" +#ifdef ARCH_HAVE_CPU_CLOCK static unsigned long cycles_per_usec; -static struct timeval last_tv; static unsigned long last_cycles; +#endif +static struct timeval last_tv; static int last_tv_valid; static struct timeval *fio_tv; @@ -137,7 +140,11 @@ void fio_gettime(struct timeval *tp, void fio_unused *caller) case CS_CGETTIME: { struct timespec ts; +#ifdef FIO_HAVE_CLOCK_MONOTONIC + if (clock_gettime(CLOCK_MONOTONIC, &ts) < 0) { +#else if (clock_gettime(CLOCK_REALTIME, &ts) < 0) { +#endif log_err("fio: clock_gettime fails\n"); assert(0); } @@ -183,6 +190,7 @@ void fio_gettime(struct timeval *tp, void fio_unused *caller) memcpy(&last_tv, tp, sizeof(*tp)); } +#ifdef ARCH_HAVE_CPU_CLOCK static unsigned long get_cycles_per_usec(void) { struct timeval s, e; @@ -204,14 +212,12 @@ static unsigned long get_cycles_per_usec(void) return c_e - c_s; } -void fio_clock_init(void) +static void calibrate_cpu_clock(void) { double delta, mean, S; unsigned long avg, cycles[10]; int i, samples; - last_tv_valid = 0; - cycles[0] = get_cycles_per_usec(); S = delta = mean = 0.0; for (i = 0; i < 10; i++) { @@ -229,7 +235,7 @@ void fio_clock_init(void) for (i = 0; i < 10; i++) { double this = cycles[i]; - if ((max(this, mean) - min(this, mean)) > S) + if ((fmax(this, mean) - fmin(this, mean)) > S) continue; samples++; avg += this; @@ -246,6 +252,18 @@ void fio_clock_init(void) dprint(FD_TIME, "mean=%f, S=%f\n", mean, S); cycles_per_usec = avg; + +} +#else +static void calibrate_cpu_clock(void) +{ +} +#endif + +void fio_clock_init(void) +{ + last_tv_valid = 0; + calibrate_cpu_clock(); } void fio_gtod_init(void)