X-Git-Url: https://git.kernel.dk/?p=fio.git;a=blobdiff_plain;f=blktrace.c;fp=blktrace.c;h=1d33c6a43f6002b4f5c0de892398a6f9b8e54351;hp=14acc6991cd0343157605c2fd1875a2b4c57aeee;hb=55bfd8c81c25d7953b4d6f9320e46af5cb790b0c;hpb=87a48ada9768d3eec522a9f022aaa669c7582285 diff --git a/blktrace.c b/blktrace.c index 14acc699..1d33c6a4 100644 --- a/blktrace.c +++ b/blktrace.c @@ -654,6 +654,12 @@ static int find_earliest_io(struct blktrace_cursor *bcs, int nr_logs) static void merge_finish_file(struct blktrace_cursor *bcs, int i, int *nr_logs) { + bcs[i].iter++; + if (bcs[i].iter < bcs[i].nr_iter) { + lseek(bcs[i].fd, 0, SEEK_SET); + return; + } + *nr_logs -= 1; /* close file */ @@ -672,7 +678,11 @@ static int read_trace(struct thread_data *td, struct blktrace_cursor *bc) read_skip: /* read an io trace */ ret = trace_fifo_get(td, bc->fifo, bc->fd, t, sizeof(*t)); - if (ret <= 0) { + if (ret < 0) { + return ret; + } else if (!ret) { + if (!bc->length) + bc->length = bc->t.time; return ret; } else if (ret < (int) sizeof(*t)) { log_err("fio: short fifo get\n"); @@ -697,7 +707,7 @@ read_skip: goto read_skip; } - t->time = t->time * bc->scalar / 100; + t->time = (t->time + bc->iter * bc->length) * bc->scalar / 100; return ret; } @@ -728,6 +738,15 @@ int merge_blktrace_iologs(struct thread_data *td) goto err_param; } + ret = init_merge_param_list(td->o.merge_blktrace_iters, bcs, nr_logs, + 1, offsetof(struct blktrace_cursor, + nr_iter)); + if (ret) { + log_err("fio: merge_blktrace_iters(%d) != nr_logs(%d)\n", + ret, nr_logs); + goto err_param; + } + /* setup output file */ merge_fp = fopen(td->o.merge_blktrace_file, "w"); merge_buf = malloc(128 * 1024);