Fio 2.21
[fio.git] / gettime.c
index 9988e6c54cd56a61200a17106f27a4512d9c6cb6..628aad640810e4c01ef2892bd6c2158c0d5c84a2 100644 (file)
--- a/gettime.c
+++ b/gettime.c
@@ -232,6 +232,7 @@ static unsigned long get_cycles_per_usec(void)
        struct timeval s, e;
        uint64_t c_s, c_e;
        enum fio_cs old_cs = fio_clock_source;
+       uint64_t elapsed;
 
 #ifdef CONFIG_CLOCK_GETTIME
        fio_clock_source = CS_CGETTIME;
@@ -242,8 +243,6 @@ static unsigned long get_cycles_per_usec(void)
 
        c_s = get_cpu_clock();
        do {
-               uint64_t elapsed;
-
                __fio_gettime(&e);
 
                elapsed = utime_since(&s, &e);
@@ -254,7 +253,7 @@ static unsigned long get_cycles_per_usec(void)
        } while (1);
 
        fio_clock_source = old_cs;
-       return (c_e - c_s + 127) >> 7;
+       return (c_e - c_s) / elapsed;
 }
 
 #define NR_TIME_ITERS  50
@@ -300,16 +299,11 @@ static int calibrate_cpu_clock(void)
        }
 
        S /= (double) NR_TIME_ITERS;
-       mean /= 10.0;
 
        for (i = 0; i < NR_TIME_ITERS; i++)
-               dprint(FD_TIME, "cycles[%d]=%llu\n", i,
-                                       (unsigned long long) cycles[i] / 10);
+               dprint(FD_TIME, "cycles[%d]=%llu\n", i, (unsigned long long) cycles[i]);
 
        avg /= samples;
-       avg = (avg + 5) / 10;
-       minc /= 10;
-       maxc /= 10;
        dprint(FD_TIME, "avg: %llu\n", (unsigned long long) avg);
        dprint(FD_TIME, "min=%llu, max=%llu, mean=%f, S=%f\n",
                        (unsigned long long) minc,
@@ -387,8 +381,7 @@ void fio_clock_init(void)
 
 uint64_t utime_since(const struct timeval *s, const struct timeval *e)
 {
-       long sec, usec;
-       uint64_t ret;
+       int64_t sec, usec;
 
        sec = e->tv_sec - s->tv_sec;
        usec = e->tv_usec - s->tv_usec;
@@ -403,22 +396,26 @@ uint64_t utime_since(const struct timeval *s, const struct timeval *e)
        if (sec < 0 || (sec == 0 && usec < 0))
                return 0;
 
-       ret = sec * 1000000ULL + usec;
-
-       return ret;
+       return usec + (sec * 1000000);
 }
 
 uint64_t utime_since_now(const struct timeval *s)
 {
        struct timeval t;
+#ifdef FIO_DEBUG_TIME
+       void *p = __builtin_return_address(0);
 
+       fio_gettime(&t, p);
+#else
        fio_gettime(&t, NULL);
+#endif
+
        return utime_since(s, &t);
 }
 
 uint64_t mtime_since(const struct timeval *s, const struct timeval *e)
 {
-       long sec, usec, ret;
+       long sec, usec;
 
        sec = e->tv_sec - s->tv_sec;
        usec = e->tv_usec - s->tv_usec;
@@ -430,19 +427,22 @@ uint64_t mtime_since(const struct timeval *s, const struct timeval *e)
        if (sec < 0 || (sec == 0 && usec < 0))
                return 0;
 
-       sec *= 1000UL;
-       usec /= 1000UL;
-       ret = sec + usec;
-
-       return ret;
+       sec *= 1000;
+       usec /= 1000;
+       return sec + usec;
 }
 
 uint64_t mtime_since_now(const struct timeval *s)
 {
        struct timeval t;
+#ifdef FIO_DEBUG_TIME
        void *p = __builtin_return_address(0);
 
        fio_gettime(&t, p);
+#else
+       fio_gettime(&t, NULL);
+#endif
+
        return mtime_since(s, &t);
 }