From a870d6ff25d7d453891763a83f5f297df653ac38 Mon Sep 17 00:00:00 2001 From: Alberto Faria Date: Thu, 1 Dec 2022 22:07:57 +0000 Subject: [PATCH] engines/libblkio: Add support for poll queues Configure a poll queue instead of a "regular" queue when option hipri is set. Signed-off-by: Alberto Faria Signed-off-by: Vincent Fu --- HOWTO.rst | 4 ++++ engines/libblkio.c | 25 +++++++++++++++++++++++-- fio.1 | 3 +++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/HOWTO.rst b/HOWTO.rst index 69ca1e79..2b3fe9c2 100644 --- a/HOWTO.rst +++ b/HOWTO.rst @@ -2335,6 +2335,10 @@ with the caveat that when used on the command line, they must come after the by the application. The benefits are more efficient IO for high IOPS scenarios, and lower latencies for low queue depth IO. + [libblkio] + + Use poll queues. + [pvsync2] Set RWF_HIPRI on I/O, indicating to the kernel that it's of higher priority diff --git a/engines/libblkio.c b/engines/libblkio.c index 11f45e2a..6decfd39 100644 --- a/engines/libblkio.c +++ b/engines/libblkio.c @@ -37,6 +37,8 @@ struct fio_blkio_options { char *driver; char *pre_connect_props; char *pre_start_props; + + unsigned int hipri; }; static struct fio_option options[] = { @@ -67,6 +69,15 @@ static struct fio_option options[] = { .category = FIO_OPT_C_ENGINE, .group = FIO_OPT_G_LIBBLKIO, }, + { + .name = "hipri", + .lname = "Use poll queues", + .type = FIO_OPT_STR_SET, + .off1 = offsetof(struct fio_blkio_options, hipri), + .help = "Use poll queues", + .category = FIO_OPT_C_ENGINE, + .group = FIO_OPT_G_LIBBLKIO, + }, { .name = NULL, }, @@ -223,6 +234,7 @@ out_blkio_destroy: static int fio_blkio_init(struct thread_data *td) { + const struct fio_blkio_options *options = td->eo; struct fio_blkio_data *data; /* @@ -246,7 +258,13 @@ static int fio_blkio_init(struct thread_data *td) if (fio_blkio_create_and_connect(td, &data->b) != 0) goto err_free; - if (blkio_set_int(data->b, "num-queues", 1) != 0) { + if (blkio_set_int(data->b, "num-queues", options->hipri ? 0 : 1) != 0) { + fio_blkio_log_err(blkio_set_int); + goto err_blkio_destroy; + } + + if (blkio_set_int(data->b, "num-poll-queues", + options->hipri ? 1 : 0) != 0) { fio_blkio_log_err(blkio_set_int); goto err_blkio_destroy; } @@ -256,7 +274,10 @@ static int fio_blkio_init(struct thread_data *td) goto err_blkio_destroy; } - data->q = blkio_get_queue(data->b, 0); + if (options->hipri) + data->q = blkio_get_poll_queue(data->b, 0); + else + data->q = blkio_get_queue(data->b, 0); /* Set data last so cleanup() does nothing if init() fails. */ td->io_ops_data = data; diff --git a/fio.1 b/fio.1 index 18428774..7f97e940 100644 --- a/fio.1 +++ b/fio.1 @@ -2631,6 +2631,9 @@ before starting the libblkio instance. Each property must have the format the engine sets any other properties, so those can be overriden. Available properties depend on the libblkio version in use and are listed at \fIhttps://libblkio.gitlab.io/libblkio/blkio.html#properties\fR +.TP +.BI (libblkio)hipri +Use poll queues. .SS "I/O depth" .TP .BI iodepth \fR=\fPint -- 2.25.1