diff --git a/engines/io_uring.c b/engines/io_uring.c index 5393758aa6..0ee5a82227 100644 --- a/engines/io_uring.c +++ b/engines/io_uring.c @@ -613,12 +613,6 @@ static void fio_ioring_queued(struct thread_data *td, int start, int nr) start++; } - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &now, sizeof(now)); } static int fio_ioring_commit(struct thread_data *td) diff --git a/engines/libaio.c b/engines/libaio.c index 33b8c12f96..da5279f485 100644 --- a/engines/libaio.c +++ b/engines/libaio.c @@ -368,12 +368,6 @@ static void fio_libaio_queued(struct thread_data *td, struct io_u **io_us, memcpy(&io_u->issue_time, &now, sizeof(now)); io_u_queued(td, io_u); } - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &now, sizeof(now)); } static int fio_libaio_commit(struct thread_data *td) diff --git a/engines/librpma_fio.c b/engines/librpma_fio.c index 42d6163ea1..3e7ec16696 100644 --- a/engines/librpma_fio.c +++ b/engines/librpma_fio.c @@ -597,16 +597,6 @@ int librpma_fio_client_commit(struct thread_data *td) } } - if ((fill_time = fio_fill_issue_time(td))) { - fio_gettime(&now, NULL); - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &now, sizeof(now)); - - } /* move executed io_us from queued[] to flight[] */ for (i = 0; i < ccd->io_u_queued_nr; i++) { struct io_u *io_u = ccd->io_us_queued[i]; diff --git a/engines/rdma.c b/engines/rdma.c index fcb4106889..dd088e6aba 100644 --- a/engines/rdma.c +++ b/engines/rdma.c @@ -832,12 +832,6 @@ static void fio_rdmaio_queued(struct thread_data *td, struct io_u **io_us, memcpy(&io_u->issue_time, &now, sizeof(now)); io_u_queued(td, io_u); } - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &now, sizeof(now)); } static int fio_rdmaio_commit(struct thread_data *td) diff --git a/init.c b/init.c index 442dab4273..549a25600f 100644 --- a/init.c +++ b/init.c @@ -628,13 +628,6 @@ static int fixup_options(struct thread_data *td) } #endif - if (o->write_iolog_file && o->read_iolog_file) { - log_err("fio: read iolog overrides write_iolog\n"); - free(o->write_iolog_file); - o->write_iolog_file = NULL; - ret |= warnings_fatal; - } - if (o->zone_mode == ZONE_MODE_NONE && o->zone_size) { log_err("fio: --zonemode=none and --zonesize are not compatible.\n"); ret |= 1; diff --git a/ioengines.c b/ioengines.c index e2316ee4e3..f5719baf4c 100644 --- a/ioengines.c +++ b/ioengines.c @@ -358,16 +358,8 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u) if (td_ioengine_flagged(td, FIO_SYNCIO) || async_ioengine_sync_trim(td, io_u)) { - if (fio_fill_issue_time(td)) { + if (fio_fill_issue_time(td)) fio_gettime(&io_u->issue_time, NULL); - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &io_u->issue_time, - sizeof(io_u->issue_time)); - } } @@ -444,16 +436,8 @@ enum fio_q_status td_io_queue(struct thread_data *td, struct io_u *io_u) if (!td_ioengine_flagged(td, FIO_SYNCIO) && !async_ioengine_sync_trim(td, io_u)) { if (fio_fill_issue_time(td) && - !td_ioengine_flagged(td, FIO_ASYNCIO_SETS_ISSUE_TIME)) { + !td_ioengine_flagged(td, FIO_ASYNCIO_SETS_ISSUE_TIME)) fio_gettime(&io_u->issue_time, NULL); - - /* - * only used for iolog - */ - if (td->o.read_iolog_file) - memcpy(&td->last_issue, &io_u->issue_time, - sizeof(io_u->issue_time)); - } } return ret; diff --git a/iolog.c b/iolog.c index cc2cbc65ef..8268330528 100644 --- a/iolog.c +++ b/iolog.c @@ -80,23 +80,23 @@ void log_file(struct thread_data *td, struct fio_file *f, static void iolog_delay(struct thread_data *td, unsigned long delay) { - uint64_t usec = utime_since_now(&td->last_issue); - unsigned long orig_delay = delay; + uint64_t usec; + unsigned long delay_wanted; uint64_t this_delay; - struct timespec ts; + struct timespec ts, ts_after_sleep; - if (delay < td->time_offset) { - td->time_offset = 0; - return; - } + fio_gettime(&ts, NULL); + usec = utime_since(&td->last_issue, &ts) + td->time_offset; - delay -= td->time_offset; - if (delay < usec) + if (delay <= usec) { + td->time_offset = usec-delay; + td->last_issue = ts; return; + } delay -= usec; - fio_gettime(&ts, NULL); + delay_wanted = delay; while (delay && !td->terminate) { this_delay = delay; if (this_delay > 500000) @@ -106,11 +106,13 @@ static void iolog_delay(struct thread_data *td, unsigned long delay) delay -= this_delay; } - usec = utime_since_now(&ts); - if (usec > orig_delay) - td->time_offset = usec - orig_delay; + fio_gettime(&ts_after_sleep, NULL); + usec = utime_since(&ts, &ts_after_sleep); + if (usec > delay_wanted) + td->time_offset = usec - delay_wanted; else td->time_offset = 0; + td->last_issue = ts_after_sleep; } static int ipo_special(struct thread_data *td, struct io_piece *ipo)