From: Alberto Faria <afaria@redhat.com>
To: fio@vger.kernel.org
Cc: Vincent Fu <vincentfu@gmail.com>,
Stefano Garzarella <sgarzare@redhat.com>,
Kevin Wolf <kwolf@redhat.com>,
Stefan Hajnoczi <stefanha@redhat.com>,
Damien Le Moal <damien.lemoal@opensource.wdc.com>,
Alberto Faria <afaria@redhat.com>
Subject: [PATCH v2 08/10] engines/libblkio: Add option libblkio_force_enable_completion_eventfd
Date: Thu, 1 Dec 2022 22:08:01 +0000 [thread overview]
Message-ID: <20221201220803.52057-9-afaria@redhat.com> (raw)
In-Reply-To: <20221201220803.52057-1-afaria@redhat.com>
When set, the queue's completion fd is enabled even when it isn't used,
i.e., even if option libblkio_wait_mode is _not_ set to "eventfd".
Depending on the libblkio driver, this can have an impact on
performance. This option allows evaluating that overhead.
Signed-off-by: Alberto Faria <afaria@redhat.com>
---
HOWTO.rst | 9 ++++++++-
engines/libblkio.c | 21 +++++++++++++++++++--
fio.1 | 10 +++++++++-
3 files changed, 36 insertions(+), 4 deletions(-)
diff --git a/HOWTO.rst b/HOWTO.rst
index e9602f59..1cea16c4 100644
--- a/HOWTO.rst
+++ b/HOWTO.rst
@@ -2338,7 +2338,8 @@ with the caveat that when used on the command line, they must come after the
[libblkio]
Use poll queues. This is incompatible with
- :option:`libblkio_wait_mode=eventfd <libblkio_wait_mode>`.
+ :option:`libblkio_wait_mode=eventfd <libblkio_wait_mode>` and
+ :option:`libblkio_force_enable_completion_eventfd`.
[pvsync2]
@@ -2907,6 +2908,12 @@ with the caveat that when used on the command line, they must come after the
**loop**
Use a busy loop with a non-blocking call to ``blkioq_do_io()``.
+.. option:: libblkio_force_enable_completion_eventfd : [libblkio]
+
+ Enable the queue's completion eventfd even when unused. This may impact
+ performance. The default is to enable it only if
+ :option:`libblkio_wait_mode=eventfd <libblkio_wait_mode>`.
+
I/O depth
~~~~~~~~~
diff --git a/engines/libblkio.c b/engines/libblkio.c
index 8a4828c3..7f5dcf36 100644
--- a/engines/libblkio.c
+++ b/engines/libblkio.c
@@ -24,7 +24,7 @@
struct fio_blkio_data {
struct blkio *b;
struct blkioq *q;
- int completion_fd; /* -1 if not FIO_BLKIO_WAIT_MODE_EVENTFD */
+ int completion_fd; /* may be -1 if not FIO_BLKIO_WAIT_MODE_EVENTFD */
bool has_mem_region; /* whether mem_region is valid */
struct blkio_mem_region mem_region; /* only if allocated by libblkio */
@@ -50,6 +50,7 @@ struct fio_blkio_options {
unsigned int vectored;
unsigned int write_zeroes_on_trim;
enum fio_blkio_wait_mode wait_mode;
+ unsigned int force_enable_completion_eventfd;
};
static struct fio_option options[] = {
@@ -132,6 +133,16 @@ static struct fio_option options[] = {
.category = FIO_OPT_C_ENGINE,
.group = FIO_OPT_G_LIBBLKIO,
},
+ {
+ .name = "libblkio_force_enable_completion_eventfd",
+ .lname = "Force enable the completion eventfd, even if unused",
+ .type = FIO_OPT_STR_SET,
+ .off1 = offsetof(struct fio_blkio_options,
+ force_enable_completion_eventfd),
+ .help = "This can impact performance",
+ .category = FIO_OPT_C_ENGINE,
+ .group = FIO_OPT_G_LIBBLKIO,
+ },
{
.name = NULL,
},
@@ -276,6 +287,11 @@ static int fio_blkio_setup(struct thread_data *td)
return 1;
}
+ if (options->hipri && options->force_enable_completion_eventfd) {
+ log_err("fio: option hipri is incompatible with option libblkio_force_enable_completion_eventfd\n");
+ return 1;
+ }
+
if (fio_blkio_create_and_connect(td, &b) != 0)
return 1;
@@ -342,7 +358,8 @@ static int fio_blkio_init(struct thread_data *td)
else
data->q = blkio_get_queue(data->b, 0);
- if (options->wait_mode == FIO_BLKIO_WAIT_MODE_EVENTFD) {
+ if (options->wait_mode == FIO_BLKIO_WAIT_MODE_EVENTFD ||
+ options->force_enable_completion_eventfd) {
/* enable completion fd and make it blocking */
blkioq_set_completion_fd_enabled(data->q, true);
data->completion_fd = blkioq_get_completion_fd(data->q);
diff --git a/fio.1 b/fio.1
index 1a810214..da548303 100644
--- a/fio.1
+++ b/fio.1
@@ -2633,7 +2633,8 @@ 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. This is incompatible with \fBlibblkio_wait_mode=eventfd\fR.
+Use poll queues. This is incompatible with \fBlibblkio_wait_mode=eventfd\fR and
+\fBlibblkio_force_enable_completion_eventfd\fR.
.TP
.BI (libblkio)libblkio_vectored
Submit vectored read and write requests.
@@ -2654,6 +2655,13 @@ Use a blocking call to \fBread()\fR on the completion eventfd.
.TP
.B loop
Use a busy loop with a non-blocking call to \fBblkioq_do_io()\fR.
+.RE
+.RE
+.TP
+.BI (libblkio)libblkio_force_enable_completion_eventfd
+Enable the queue's completion eventfd even when unused. This may impact
+performance. The default is to enable it only if
+\fBlibblkio_wait_mode=eventfd\fR.
.SS "I/O depth"
.TP
.BI iodepth \fR=\fPint
--
2.38.1
next prev parent reply other threads:[~2022-12-01 22:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-01 22:07 [PATCH v2 00/10] Add a libblkio engine Alberto Faria
2022-12-01 22:07 ` [PATCH v2 01/10] " Alberto Faria
2022-12-01 22:07 ` [PATCH v2 02/10] Add engine flag FIO_SKIPPABLE_IOMEM_ALLOC Alberto Faria
2022-12-01 22:07 ` [PATCH v2 03/10] engines/libblkio: Allow setting option mem/iomem Alberto Faria
2022-12-01 22:07 ` [PATCH v2 04/10] engines/libblkio: Add support for poll queues Alberto Faria
2022-12-01 22:07 ` [PATCH v2 05/10] engines/libblkio: Add option libblkio_vectored Alberto Faria
2022-12-01 22:07 ` [PATCH v2 06/10] engines/libblkio: Add option libblkio_write_zeroes_on_trim Alberto Faria
2022-12-01 22:08 ` [PATCH v2 07/10] engines/libblkio: Add option libblkio_wait_mode Alberto Faria
2022-12-01 22:08 ` Alberto Faria [this message]
2022-12-01 22:08 ` [PATCH v2 09/10] engines/libblkio: Add options for some driver-specific properties Alberto Faria
2022-12-01 22:08 ` [PATCH v2 10/10] engines/libblkio: Share a single blkio instance among threads in same process Alberto Faria
2022-12-02 21:35 ` [PATCH v2 00/10] Add a libblkio engine Vincent Fu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221201220803.52057-9-afaria@redhat.com \
--to=afaria@redhat.com \
--cc=damien.lemoal@opensource.wdc.com \
--cc=fio@vger.kernel.org \
--cc=kwolf@redhat.com \
--cc=sgarzare@redhat.com \
--cc=stefanha@redhat.com \
--cc=vincentfu@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).