Implement new Rate Control
[fio.git] / libfio.c
index 1abf39a84edff09b4cdf571361c6356d7706641f..d4cad3ec5aba0a5b4d9d926bc3675e27acc5471a 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -58,6 +58,7 @@ static const char *fio_os_strings[os_nr] = {
        "Solaris",
        "Windows",
        "Android",
+       "DragonFly",
 };
 
 static const char *fio_arch_strings[arch_nr] = {
@@ -87,6 +88,9 @@ static void reset_io_counters(struct thread_data *td)
                td->this_io_blocks[ddir] = 0;
                td->rate_bytes[ddir] = 0;
                td->rate_blocks[ddir] = 0;
+               td->bytes_done[ddir] = 0;
+               td->rate_io_issue_bytes[ddir] = 0;
+               td->rate_next_io_time[ddir] = 0;
        }
        td->zone_bytes = 0;
 
@@ -114,9 +118,10 @@ void clear_io_state(struct thread_data *td)
        }
 
        /*
-        * Set the same seed to get repeatable runs
+        * Re-Seed random number generator if rand_repeatable is true
         */
-       td_fill_rand_seeds(td);
+       if (td->o.rand_repeatable)
+               td_fill_rand_seeds(td);
 }
 
 void reset_all_stats(struct thread_data *td)
@@ -166,13 +171,38 @@ const char *fio_get_arch_string(int nr)
        return NULL;
 }
 
+static const char *td_runstates[] = {
+       "NOT_CREATED",
+       "CREATED",
+       "INITIALIZED",
+       "RAMP",
+       "SETTING_UP",
+       "RUNNING",
+       "PRE_READING",
+       "VERIFYING",
+       "FSYNCING",
+       "FINISHING",
+       "EXITED",
+       "REAPED",
+};
+
+static const char *runstate_to_name(int runstate)
+{
+       compiletime_assert(TD_LAST == 12, "td runstate list");
+       if (runstate >= 0 && runstate < TD_LAST)
+               return td_runstates[runstate];
+
+       return "invalid";
+}
+
 void td_set_runstate(struct thread_data *td, int runstate)
 {
        if (td->runstate == runstate)
                return;
 
-       dprint(FD_PROCESS, "pid=%d: runstate %d -> %d\n", (int) td->pid,
-                                               td->runstate, runstate);
+       dprint(FD_PROCESS, "pid=%d: runstate %s -> %s\n", (int) td->pid,
+                                               runstate_to_name(td->runstate),
+                                               runstate_to_name(runstate));
        td->runstate = runstate;
 }
 
@@ -351,3 +381,8 @@ int initialize_fio(char *envp[])
        fio_keywords_init();
        return 0;
 }
+
+void deinitialize_fio(void)
+{
+       fio_keywords_exit();
+}