Commit 48e226e4 authored by Eric Gouriou's avatar Eric Gouriou Committed by Jim Harris
Browse files

fio nvme plugin: add option to enable interrupts



Offer a boolean option named "enable_interrupts" to use the spdk engine in interrupt mode, versus the traditional polling mode. Polling mode (enable_interrupts = 0) remains the default setting.

Per the check in spdk_nvme_ctrlr_alloc_io_qpair(), we have to disable the Queue Pair option "delay_cmd_submit" if the enable interrupts on the controller.

Change-Id: If0fead1cce8405544ab30648e74c402c9ba10130
Signed-off-by: default avatarEric Gouriou <egouriou@google.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/25651


Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarTom Nabarro <tom.nabarro@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeliu@tencent.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarJim Harris <jim.harris@nvidia.com>
Reviewed-by: default avatarAnkit Kumar <ankit.kumar@samsung.com>
parent e6b2c096
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@

#include "config-host.h"
#include "fio.h"
#include "parse.h"
#include "optgroup.h"

#ifdef for_each_rw_ddir
@@ -53,6 +54,7 @@ static uint16_t g_spdk_apptag_mask;
struct spdk_fio_options {
	void	*pad;	/* off1 used in option descriptions may not be 0 */
	int	enable_wrr;
	int	enable_interrupts;
	int	arbitration_burst;
	int	low_weight;
	int	medium_weight;
@@ -206,6 +208,10 @@ probe_cb(void *cb_ctx, const struct spdk_nvme_transport_id *trid,
		opts->high_priority_weight	= fio_options->high_weight;
	}

	if (fio_options->enable_interrupts) {
		opts->enable_interrupts = true;
	}

	if (fio_options->digest_enable) {
		if (strcasecmp(fio_options->digest_enable, "HEADER") == 0) {
			opts->header_digest = true;
@@ -752,7 +758,8 @@ spdk_fio_open(struct thread_data *td, struct fio_file *f)

	assert(fio_qpair->qpair == NULL);
	spdk_nvme_ctrlr_get_default_io_qpair_opts(fio_ctrlr->ctrlr, &qpopts, sizeof(qpopts));
	qpopts.delay_cmd_submit = true;
	/* Interrupt mode and delay_cmd_submit are incompatible */
	qpopts.delay_cmd_submit = !fio_options->enable_interrupts;
	if (fio_options->enable_wrr) {
		qpopts.qprio = fio_options->wrr_priority;
	}
@@ -1722,6 +1729,16 @@ static struct fio_option options[] = {
		.category       = FIO_OPT_C_ENGINE,
		.group          = FIO_OPT_G_INVALID,
	},
	{
		.name           = "enable_interrupts",
		.lname          = "Enable interrupts mode",
		.type           = FIO_OPT_BOOL,
		.off1           = offsetof(struct spdk_fio_options, enable_interrupts),
		.def            = "0",
		.help           = "Enable interrupt mode, event FD and blocking poll",
		.category       = FIO_OPT_C_ENGINE,
		.group          = FIO_OPT_G_INVALID,
	},
	{
		.name           = "arbitration_burst",
		.lname          = "Arbitration Burst",