[PATCH] Add support for giving multiple job files
[fio.git] / log.c
diff --git a/log.c b/log.c
index 42aedf270ff0882c56de0f13b78614f1c88bfff6..4c7742b28fcde79529a5b405f6c16701054430ec 100644 (file)
--- a/log.c
+++ b/log.c
@@ -122,7 +122,7 @@ int init_iolog(struct thread_data *td)
                struct io_piece *ipo;
 
                if (sscanf(p, "%d,%llu,%u", &rw, &offset, &bytes) != 3) {
-                       fprintf(stderr, "bad iolog: %s\n", p);
+                       log_err("bad iolog: %s\n", p);
                        continue;
                }
                if (rw == DDIR_READ)
@@ -130,7 +130,7 @@ int init_iolog(struct thread_data *td)
                else if (rw == DDIR_WRITE)
                        writes++;
                else {
-                       fprintf(stderr, "bad ddir: %d\n", rw);
+                       log_err("bad ddir: %d\n", rw);
                        continue;
                }
 
@@ -160,3 +160,52 @@ int init_iolog(struct thread_data *td)
 
        return 0;
 }
+
+int setup_rate(struct thread_data *td)
+{
+       int nr_reads_per_sec;
+
+       if (!td->rate)
+               return 0;
+
+       if (td->rate < td->ratemin) {
+               log_err("min rate larger than nominal rate\n");
+               return -1;
+       }
+
+       nr_reads_per_sec = (td->rate * 1024) / td->min_bs;
+       td->rate_usec_cycle = 1000000 / nr_reads_per_sec;
+       td->rate_pending_usleep = 0;
+       return 0;
+}
+
+void setup_log(struct io_log **log)
+{
+       struct io_log *l = malloc(sizeof(*l));
+
+       l->nr_samples = 0;
+       l->max_samples = 1024;
+       l->log = malloc(l->max_samples * sizeof(struct io_sample));
+       *log = l;
+}
+
+void finish_log(struct thread_data *td, struct io_log *log, const char *name)
+{
+       char file_name[256];
+       FILE *f;
+       unsigned int i;
+
+       snprintf(file_name, 200, "client%d_%s.log", td->thread_number, name);
+       f = fopen(file_name, "w");
+       if (!f) {
+               perror("fopen log");
+               return;
+       }
+
+       for (i = 0; i < log->nr_samples; i++)
+               fprintf(f, "%lu, %lu, %u\n", log->log[i].time, log->log[i].val, log->log[i].ddir);
+
+       fclose(f);
+       free(log->log);
+       free(log);
+}