The librpma_apm_client, librpma_gpspm_client, and rdma ioengines have commit functions that record submission latency. In order to avoid setting issue_time twice add the FIO_ASYNCIO_SETS_ISSUE_TIME flag. Also add code to update the iolog issue time when needed. I don't have the means to test this patch. Signed-off-by: Vincent Fu <vincent.fu@xxxxxxxxxxx> --- engines/librpma_apm.c | 2 +- engines/librpma_fio.c | 9 ++++++++- engines/librpma_gpspm.c | 2 +- engines/rdma.c | 9 ++++++++- 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/engines/librpma_apm.c b/engines/librpma_apm.c index d1166ad8..896240dd 100644 --- a/engines/librpma_apm.c +++ b/engines/librpma_apm.c @@ -208,7 +208,7 @@ FIO_STATIC struct ioengine_ops ioengine_client = { .errdetails = librpma_fio_client_errdetails, .close_file = librpma_fio_file_nop, .cleanup = client_cleanup, - .flags = FIO_DISKLESSIO, + .flags = FIO_DISKLESSIO | FIO_ASYNCIO_SETS_ISSUE_TIME, .options = librpma_fio_options, .option_struct_size = sizeof(struct librpma_fio_options_values), }; diff --git a/engines/librpma_fio.c b/engines/librpma_fio.c index 34818904..a78a1e57 100644 --- a/engines/librpma_fio.c +++ b/engines/librpma_fio.c @@ -621,9 +621,16 @@ int librpma_fio_client_commit(struct thread_data *td) } } - if ((fill_time = fio_fill_issue_time(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/librpma_gpspm.c b/engines/librpma_gpspm.c index 5cf97472..f00717a7 100644 --- a/engines/librpma_gpspm.c +++ b/engines/librpma_gpspm.c @@ -352,7 +352,7 @@ FIO_STATIC struct ioengine_ops ioengine_client = { .errdetails = librpma_fio_client_errdetails, .close_file = librpma_fio_file_nop, .cleanup = client_cleanup, - .flags = FIO_DISKLESSIO, + .flags = FIO_DISKLESSIO | FIO_ASYNCIO_SETS_ISSUE_TIME, .options = librpma_fio_options, .option_struct_size = sizeof(struct librpma_fio_options_values), }; diff --git a/engines/rdma.c b/engines/rdma.c index 4eb86652..e3bb2567 100644 --- a/engines/rdma.c +++ b/engines/rdma.c @@ -832,6 +832,12 @@ 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) @@ -1404,7 +1410,8 @@ FIO_STATIC struct ioengine_ops ioengine = { .cleanup = fio_rdmaio_cleanup, .open_file = fio_rdmaio_open_file, .close_file = fio_rdmaio_close_file, - .flags = FIO_DISKLESSIO | FIO_UNIDIR | FIO_PIPEIO, + .flags = FIO_DISKLESSIO | FIO_UNIDIR | FIO_PIPEIO | + FIO_ASYNCIO_SETS_ISSUE_TIME, .options = options, .option_struct_size = sizeof(struct rdmaio_options), }; -- 2.25.1