projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
blktrace: add option to iterate over a trace multiple times
[fio.git]
/
blktrace.c
diff --git
a/blktrace.c
b/blktrace.c
index 14acc6991cd0343157605c2fd1875a2b4c57aeee..1d33c6a43f6002b4f5c0de892398a6f9b8e54351 100644
(file)
--- 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)
{
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 */
*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));
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");
return ret;
} else if (ret < (int) sizeof(*t)) {
log_err("fio: short fifo get\n");
@@
-697,7
+707,7
@@
read_skip:
goto 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;
}
return ret;
}
@@
-728,6
+738,15
@@
int merge_blktrace_iologs(struct thread_data *td)
goto err_param;
}
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);
/* setup output file */
merge_fp = fopen(td->o.merge_blktrace_file, "w");
merge_buf = malloc(128 * 1024);