Make sure that exec_prerun/postrun work for shell commands
[fio.git] / gettime.c
index 80eeaf14bcbb75293a1621382eaa8d765fe2d015..b1431f329bec2e3ef9e32439035d896e9f8545ca 100644 (file)
--- a/gettime.c
+++ b/gettime.c
@@ -6,6 +6,7 @@
 #include <sys/time.h>
 
 #include "fio.h"
+#include "smalloc.h"
 
 #include "hash.h"
 
@@ -13,6 +14,10 @@ static int clock_gettime_works;
 static struct timeval last_tv;
 static int last_tv_valid;
 
+static struct timeval *fio_tv;
+int fio_gtod_offload = 0;
+int fio_gtod_cpu = -1;
+
 #ifdef FIO_DEBUG_TIME
 
 #define HASH_BITS      8
@@ -116,7 +121,10 @@ void fio_gettime(struct timeval *tp, void fio_unused *caller)
 
        gtod_log_caller(caller);
 #endif
-       if (!clock_gettime_works) {
+       if (fio_tv) {
+               memcpy(tp, fio_tv, sizeof(*tp));
+               return;
+       } else if (!clock_gettime_works) {
 gtod:
                gettimeofday(tp, NULL);
        } else {
@@ -145,3 +153,14 @@ gtod:
        last_tv_valid = 1;
        memcpy(&last_tv, tp, sizeof(*tp));
 }
+
+void fio_gtod_init(void)
+{
+       fio_tv = smalloc(sizeof(struct timeval));
+       assert(fio_tv);
+}
+
+void fio_gtod_update(void)
+{
+       gettimeofday(fio_tv, NULL);
+}