Commit a3ae6eaa authored by Shuhei Matsumoto's avatar Shuhei Matsumoto Committed by Jim Harris
Browse files

bdev/nvme: Add an option for the RDMA SRQ size



Signed-off-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Change-Id: I8e678b5681c8039ccd359de8a797ede4eaddf8b5
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14914


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 2085362d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -3617,6 +3617,7 @@ disable_auto_failback | Optional | boolean | Disable automatic failback
generate_uuids             | Optional | boolean     | Enable generation of UUIDs for NVMe bdevs that do not provide this value themselves.
transport_tos              | Optional | number      | IPv4 Type of Service value. Only applicable for RDMA transport. Default: 0 (no TOS is applied).
nvme_error_stat            | Optional | boolean     | Enable collecting NVMe error counts.
rdma_srq_size              | Optional | number      | Set the size of a shared rdma receive queue. Default: 0 (disabled).

#### Example

+16 −1
Original line number Diff line number Diff line
@@ -4621,7 +4621,9 @@ bdev_nvme_validate_opts(const struct spdk_bdev_nvme_opts *opts)
int
bdev_nvme_set_opts(const struct spdk_bdev_nvme_opts *opts)
{
	int ret = bdev_nvme_validate_opts(opts);
	int ret;

	ret = bdev_nvme_validate_opts(opts);
	if (ret) {
		SPDK_WARNLOG("Failed to set nvme opts.\n");
		return ret;
@@ -4633,6 +4635,19 @@ bdev_nvme_set_opts(const struct spdk_bdev_nvme_opts *opts)
		}
	}

	if (opts->rdma_srq_size != 0) {
		struct spdk_nvme_transport_opts drv_opts;

		spdk_nvme_transport_get_opts(&drv_opts, sizeof(drv_opts));
		drv_opts.rdma_srq_size = opts->rdma_srq_size;

		ret = spdk_nvme_transport_set_opts(&drv_opts, sizeof(drv_opts));
		if (ret) {
			SPDK_ERRLOG("Failed to set NVMe transport opts.\n");
			return ret;
		}
	}

	g_opts = *opts;

	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -263,6 +263,7 @@ struct spdk_bdev_nvme_opts {
	/* Type of Service - RDMA only */
	uint8_t transport_tos;
	bool nvme_error_stat;
	uint32_t rdma_srq_size;
};

struct spdk_nvme_qpair *bdev_nvme_get_io_qpair(struct spdk_io_channel *ctrlr_io_ch);
+1 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ static const struct spdk_json_object_decoder rpc_bdev_nvme_options_decoders[] =
	{"generate_uuids", offsetof(struct spdk_bdev_nvme_opts, generate_uuids), spdk_json_decode_bool, true},
	{"transport_tos", offsetof(struct spdk_bdev_nvme_opts, transport_tos), spdk_json_decode_uint8, true},
	{"nvme_error_stat", offsetof(struct spdk_bdev_nvme_opts, nvme_error_stat), spdk_json_decode_bool, true},
	{"rdma_srq_size", offsetof(struct spdk_bdev_nvme_opts, rdma_srq_size), spdk_json_decode_uint32, true},
};

static void
+5 −1
Original line number Diff line number Diff line
@@ -533,7 +533,7 @@ def bdev_nvme_set_options(client, action_on_timeout=None, timeout_us=None, timeo
                          delay_cmd_submit=None, transport_retry_count=None, bdev_retry_count=None,
                          transport_ack_timeout=None, ctrlr_loss_timeout_sec=None, reconnect_delay_sec=None,
                          fast_io_fail_timeout_sec=None, disable_auto_failback=None, generate_uuids=None,
                          transport_tos=None, nvme_error_stat=None):
                          transport_tos=None, nvme_error_stat=None, rdma_srq_size=None):
    """Set options for the bdev nvme. This is startup command.

    Args:
@@ -576,6 +576,7 @@ def bdev_nvme_set_options(client, action_on_timeout=None, timeout_us=None, timeo
        transport_tos: IPv4 Type of Service value. Only applicable for RDMA transports.
        The default is 0 which means no TOS is applied. (optional)
        nvme_error_stat: Enable collecting NVMe error counts. (optional)
        rdma_srq_size: Set the size of a shared rdma receive queue. Default: 0 (disabled) (optional)

    """
    params = {}
@@ -650,6 +651,9 @@ def bdev_nvme_set_options(client, action_on_timeout=None, timeout_us=None, timeo
    if nvme_error_stat is not None:
        params['nvme_error_stat'] = nvme_error_stat

    if rdma_srq_size is not None:
        params['rdma_srq_size'] = rdma_srq_size

    return client.call('bdev_nvme_set_options', params)


Loading