#include <unistd.h>
#include <math.h>
#include <sys/time.h>
+#include <time.h>
#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;
memcpy(&last_tv, tp, sizeof(*tp));
}
+#ifdef ARCH_HAVE_CPU_CLOCK
static unsigned long get_cycles_per_usec(void)
{
struct timeval s, e;
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++) {
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;
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)