It's not enough to just track writes, some operating systems require
a file to be opened for write to issue a file sync. Which does kind
of make sense...
Add such a flag and set it for iolog/blktrace replay, if we see a sync
in there.
This does mean we need to bump the IO engine version, as the engine
flags need to get shifted.
Link: https://github.com/axboe/fio/issues/1352
Signed-off-by: Jens Axboe <axboe@kernel.dk>
ios[DDIR_SYNC]++;
dprint(FD_BLKTRACE, "store flush delay=%lu\n", ipo->delay);
+
+ if (!(td->flags & TD_F_SYNCS))
+ td->flags |= TD_F_SYNCS;
+
queue_io_piece(td, ipo);
return true;
}
__TD_F_MMAP_KEEP,
__TD_F_DIRS_CREATED,
__TD_F_CHECK_RATE,
+ __TD_F_SYNCS,
__TD_F_LAST, /* not a real bit, keep last */
};
TD_F_MMAP_KEEP = 1U << __TD_F_MMAP_KEEP,
TD_F_DIRS_CREATED = 1U << __TD_F_DIRS_CREATED,
TD_F_CHECK_RATE = 1U << __TD_F_CHECK_RATE,
+ TD_F_SYNCS = 1U << __TD_F_SYNCS,
};
enum {
TD_NR,
};
-#define TD_ENG_FLAG_SHIFT 17
-#define TD_ENG_FLAG_MASK ((1U << 17) - 1)
+#define TD_ENG_FLAG_SHIFT 18
+#define TD_ENG_FLAG_MASK ((1U << 18) - 1)
static inline void td_set_ioengine_flags(struct thread_data *td)
{
#include "io_u.h"
#include "zbd_types.h"
-#define FIO_IOOPS_VERSION 30
+#define FIO_IOOPS_VERSION 31
#ifndef CONFIG_DYNAMIC_ENGINES
#define FIO_STATIC static
enum fio_ddir rw;
bool realloc = false;
int64_t items_to_fetch = 0;
+ int syncs;
if (td->o.read_iolog_chunked) {
items_to_fetch = iolog_items_to_fetch(td);
rfname = fname = malloc(256+16);
act = malloc(256+16);
- reads = writes = waits = 0;
+ syncs = reads = writes = waits = 0;
while ((p = fgets(str, 4096, td->io_log_rfile)) != NULL) {
struct io_piece *ipo;
int r;
continue;
waits++;
} else if (rw == DDIR_INVAL) {
- } else if (!ddir_sync(rw)) {
+ } else if (ddir_sync(rw)) {
+ syncs++;
+ } else {
log_err("bad ddir: %d\n", rw);
continue;
}
" read-only\n", td->o.name, writes);
writes = 0;
}
+ if (syncs)
+ td->flags |= TD_F_SYNCS;
if (td->o.read_iolog_chunked) {
if (td->io_log_current == 0) {