Option for changing log files to use Unix epoch instead of being
[fio.git] / libfio.c
index 790c0364b493f77606171ac6b6e399d110c140bf..d88ed4ed2032ecccfad5435b0de10abc42157973 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -33,6 +33,7 @@
 #include "smalloc.h"
 #include "os/os.h"
 #include "filelock.h"
+#include "helper_thread.h"
 
 /*
  * Just expose an empty list, if the OS does not support disk util stats
@@ -46,6 +47,7 @@ unsigned long arch_flags = 0;
 uintptr_t page_mask = 0;
 uintptr_t page_size = 0;
 
+/* see os/os.h */
 static const char *fio_os_strings[os_nr] = {
        "Invalid",
        "Linux",
@@ -61,6 +63,7 @@ static const char *fio_os_strings[os_nr] = {
        "DragonFly",
 };
 
+/* see arch/arch.h */
 static const char *fio_arch_strings[arch_nr] = {
        "Invalid",
        "x86-64",
@@ -74,6 +77,8 @@ static const char *fio_arch_strings[arch_nr] = {
        "arm",
        "sh",
        "hppa",
+       "mips",
+       "aarch64",
        "generic"
 };
 
@@ -129,7 +134,6 @@ void clear_io_state(struct thread_data *td, int all)
 
 void reset_all_stats(struct thread_data *td)
 {
-       struct timeval tv;
        int i;
 
        reset_io_counters(td, 1);
@@ -143,11 +147,10 @@ void reset_all_stats(struct thread_data *td)
                td->rwmix_issues = 0;
        }
 
-       fio_gettime(&tv, NULL);
-       memcpy(&td->epoch, &tv, sizeof(tv));
-       memcpy(&td->start, &tv, sizeof(tv));
-       memcpy(&td->iops_sample_time, &tv, sizeof(tv));
-       memcpy(&td->bw_sample_time, &tv, sizeof(tv));
+       set_epoch_time(td, td->o.log_unix_epoch);
+       memcpy(&td->start, &td->epoch, sizeof(struct timeval));
+       memcpy(&td->iops_sample_time, &td->epoch, sizeof(struct timeval));
+       memcpy(&td->bw_sample_time, &td->epoch, sizeof(struct timeval));
 
        lat_target_reset(td);
        clear_rusage_stat(td);
@@ -273,14 +276,18 @@ int fio_running_or_pending_io_threads(void)
 {
        struct thread_data *td;
        int i;
+       int nr_io_threads = 0;
 
        for_each_td(td, i) {
                if (td->flags & TD_F_NOIO)
                        continue;
+               nr_io_threads++;
                if (td->runstate < TD_EXITED)
                        return 1;
        }
 
+       if (!nr_io_threads)
+               return -1; /* we only had cpuio threads to begin with */
        return 0;
 }