projects
/
fio.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Decrement io_issue count when requeuing an io_u
[fio.git]
/
blktrace.c
diff --git
a/blktrace.c
b/blktrace.c
index 8ebbae6f2fbe788c3c2ee353385535dac68c90ce..538bcd71b9091b02b558d362fafabc6b15b630c2 100644
(file)
--- a/
blktrace.c
+++ b/
blktrace.c
@@
-34,6
+34,7
@@
static int refill_fifo(struct thread_data *td, struct fifo *fifo, int fd)
if (ret > 0)
ret = fifo_put(fifo, buf, ret);
if (ret > 0)
ret = fifo_put(fifo, buf, ret);
+ dprint(FD_BLKTRACE, "refill: filled %d bytes\n", ret);
return ret;
}
return ret;
}
@@
-62,6
+63,7
@@
static int discard_pdu(struct thread_data *td, struct fifo *fifo, int fd,
if (t->pdu_len == 0)
return 0;
if (t->pdu_len == 0)
return 0;
+ dprint(FD_BLKTRACE, "discard pdu len %u\n", t->pdu_len);
return trace_fifo_get(td, fifo, fd, NULL, t->pdu_len);
}
return trace_fifo_get(td, fifo, fd, NULL, t->pdu_len);
}
@@
-75,10
+77,8
@@
int is_blktrace(const char *filename)
int fd, ret;
fd = open(filename, O_RDONLY);
int fd, ret;
fd = open(filename, O_RDONLY);
- if (fd < 0) {
- perror("open blktrace");
+ if (fd < 0)
return 0;
return 0;
- }
ret = read(fd, &t, sizeof(t));
close(fd);
ret = read(fd, &t, sizeof(t));
close(fd);
@@
-132,6
+132,7
@@
static int lookup_device(char *path, unsigned int maj, unsigned int min)
continue;
if (maj == major(st.st_rdev) && min == minor(st.st_rdev)) {
continue;
if (maj == major(st.st_rdev) && min == minor(st.st_rdev)) {
+ dprint(FD_BLKTRACE, "device lookup: %d/%d\n", maj,min);
strcpy(path, full_path);
found = 1;
break;
strcpy(path, full_path);
found = 1;
break;
@@
-170,8
+171,10
@@
static void trace_add_file(struct thread_data *td, __u32 device)
return;
strcpy(dev, "/dev");
return;
strcpy(dev, "/dev");
- if (lookup_device(dev, maj, min))
+ if (lookup_device(dev, maj, min)) {
+ dprint(FD_BLKTRACE, "add devices %s\n", dev);
add_file(td, dev);
add_file(td, dev);
+ }
}
/*
}
/*
@@
-195,6
+198,9
@@
static void store_ipo(struct thread_data *td, unsigned long long offset,
else
ipo->ddir = DDIR_READ;
else
ipo->ddir = DDIR_READ;
+ dprint(FD_BLKTRACE, "store ddir=%d, off=%llu, len=%lu, delay=%lu\n",
+ ipo->ddir, ipo->offset,
+ ipo->len, ipo->delay);
list_add_tail(&ipo->list, &td->io_log_list);
}
list_add_tail(&ipo->list, &td->io_log_list);
}
@@
-235,7
+241,7
@@
int load_blktrace(struct thread_data *td, const char *filename)
{
unsigned long long ttime, delay;
struct blk_io_trace t;
{
unsigned long long ttime, delay;
struct blk_io_trace t;
- unsigned long ios[2];
+ unsigned long ios[2]
, skipped_writes
;
unsigned int cpu;
unsigned int rw_bs[2];
struct fifo *fifo;
unsigned int cpu;
unsigned int rw_bs[2];
struct fifo *fifo;
@@
-255,6
+261,7
@@
int load_blktrace(struct thread_data *td, const char *filename)
ttime = 0;
ios[0] = ios[1] = 0;
rw_bs[0] = rw_bs[1] = 0;
ttime = 0;
ios[0] = ios[1] = 0;
rw_bs[0] = rw_bs[1] = 0;
+ skipped_writes = 0;
do {
int ret = trace_fifo_get(td, fifo, fd, &t, sizeof(t));
do {
int ret = trace_fifo_get(td, fifo, fd, &t, sizeof(t));
@@
-283,6
+290,8
@@
int load_blktrace(struct thread_data *td, const char *filename)
log_err("fio: discarded %d of %d\n", ret, t.pdu_len);
goto err;
}
log_err("fio: discarded %d of %d\n", ret, t.pdu_len);
goto err;
}
+ if (t.action & BLK_TC_ACT(BLK_TC_NOTIFY))
+ continue;
if (!ttime) {
ttime = t.time;
cpu = t.cpu;
if (!ttime) {
ttime = t.time;
cpu = t.cpu;
@@
-290,7
+299,10
@@
int load_blktrace(struct thread_data *td, const char *filename)
delay = 0;
if (cpu == t.cpu)
delay = t.time - ttime;
delay = 0;
if (cpu == t.cpu)
delay = t.time - ttime;
- handle_trace(td, &t, delay, ios, rw_bs);
+ if ((t.action & BLK_TC_ACT(BLK_TC_WRITE)) && read_only)
+ skipped_writes++;
+ else
+ handle_trace(td, &t, delay, ios, rw_bs);
ttime = t.time;
cpu = t.cpu;
} while (1);
ttime = t.time;
cpu = t.cpu;
} while (1);
@@
-298,6
+310,9
@@
int load_blktrace(struct thread_data *td, const char *filename)
fifo_free(fifo);
close(fd);
fifo_free(fifo);
close(fd);
+ if (skipped_writes)
+ log_err("fio: <%s> skips replay of %lu writes due to read-only\n", td->o.name, skipped_writes);
+
if (!ios[DDIR_READ] && !ios[DDIR_WRITE]) {
log_err("fio: found no ios in blktrace data\n");
return 1;
if (!ios[DDIR_READ] && !ios[DDIR_WRITE]) {
log_err("fio: found no ios in blktrace data\n");
return 1;