The following changes since commit cf2511565f40be1b78b3fc1194e823baf305f0a0: Merge branch 'master' of https://github.com/bvanassche/fio (2022-02-24 12:40:19 -0700) are available in the Git repository at: git://git.kernel.dk/fio.git master for you to fetch changes up to c3773c171dffb79f771d213d94249cefc4b9b6de: windowsaio: open file for write if we have syncs (2022-02-26 10:43:20 -0700) ---------------------------------------------------------------- Jens Axboe (2): Add TD_F_SYNCS thread flag windowsaio: open file for write if we have syncs blktrace.c | 4 ++++ engines/windowsaio.c | 2 +- fio.h | 6 ++++-- ioengines.h | 2 +- iolog.c | 9 +++++++-- 5 files changed, 17 insertions(+), 6 deletions(-) --- Diff of recent changes: diff --git a/blktrace.c b/blktrace.c index e1804765..ead60130 100644 --- a/blktrace.c +++ b/blktrace.c @@ -297,6 +297,10 @@ static bool handle_trace_flush(struct thread_data *td, struct blk_io_trace *t, 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; } diff --git a/engines/windowsaio.c b/engines/windowsaio.c index d82c8053..6681f8bb 100644 --- a/engines/windowsaio.c +++ b/engines/windowsaio.c @@ -248,7 +248,7 @@ static int fio_windowsaio_open_file(struct thread_data *td, struct fio_file *f) log_err("fio: unknown fadvise type %d\n", td->o.fadvise_hint); } - if (!td_write(td) || read_only) + if ((!td_write(td) && !(td->flags & TD_F_SYNCS)) || read_only) access = GENERIC_READ; else access = (GENERIC_READ | GENERIC_WRITE); diff --git a/fio.h b/fio.h index 88df117d..c314f0a8 100644 --- a/fio.h +++ b/fio.h @@ -97,6 +97,7 @@ enum { __TD_F_MMAP_KEEP, __TD_F_DIRS_CREATED, __TD_F_CHECK_RATE, + __TD_F_SYNCS, __TD_F_LAST, /* not a real bit, keep last */ }; @@ -118,6 +119,7 @@ enum { 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 { @@ -678,8 +680,8 @@ 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) { diff --git a/ioengines.h b/ioengines.h index b3f755b4..acdb0071 100644 --- a/ioengines.h +++ b/ioengines.h @@ -8,7 +8,7 @@ #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 diff --git a/iolog.c b/iolog.c index a2cf0c1c..724ec1fe 100644 --- a/iolog.c +++ b/iolog.c @@ -402,6 +402,7 @@ static bool read_iolog2(struct thread_data *td) 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); @@ -417,7 +418,7 @@ static bool read_iolog2(struct thread_data *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; @@ -492,7 +493,9 @@ static bool read_iolog2(struct thread_data *td) 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; } @@ -547,6 +550,8 @@ static bool read_iolog2(struct thread_data *td) " 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) {