X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=gettime.c;h=72fda3f8597e335be2fc4677a208f02db9fa62b7;hb=f20485ad77872d6c5084dead547420386a6ecd5e;hp=08d2d2b3b1205a56543ec6aef00e52b37711d622;hpb=c223da83e253b0057bb029bf4fbb55a05844215c;p=fio.git diff --git a/gettime.c b/gettime.c index 08d2d2b3..72fda3f8 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; @@ -183,6 +186,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 +208,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 +231,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 +248,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)