bdev/nvme: Add an option for the RDMA SRQ size
Signed-off-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Change-Id: I8e678b5681c8039ccd359de8a797ede4eaddf8b5 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14914 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Aleksey Marchuk <alexeymar@nvidia.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
2085362d89
commit
a3ae6eaa75
@ -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
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
||||
|
||||
|
@ -561,7 +561,8 @@ if __name__ == "__main__":
|
||||
disable_auto_failback=args.disable_auto_failback,
|
||||
generate_uuids=args.generate_uuids,
|
||||
transport_tos=args.transport_tos,
|
||||
nvme_error_stat=args.nvme_error_stat)
|
||||
nvme_error_stat=args.nvme_error_stat,
|
||||
rdma_srq_size=args.rdma_srq_size)
|
||||
|
||||
p = subparsers.add_parser('bdev_nvme_set_options',
|
||||
help='Set options for the bdev nvme type. This is startup command.')
|
||||
@ -634,6 +635,8 @@ if __name__ == "__main__":
|
||||
help="""IPv4 Type of Service value. Only applicable for RDMA transports.
|
||||
The default is 0 which means no TOS is applied.""", type=int)
|
||||
p.add_argument('-m', '--nvme-error-stat', help="Enable collecting NVMe error counts.", action='store_true')
|
||||
p.add_argument('-q', '--rdma-srq-size',
|
||||
help='Set the size of a shared rdma receive queue. Default: 0 (disabled)', type=int)
|
||||
|
||||
p.set_defaults(func=bdev_nvme_set_options)
|
||||
|
||||
|
@ -52,6 +52,12 @@ DEFINE_RETURN_MOCK(spdk_nvme_ctrlr_get_memory_domains, int);
|
||||
DEFINE_STUB_V(spdk_jsonrpc_send_error_response, (struct spdk_jsonrpc_request *request,
|
||||
int error_code, const char *msg));
|
||||
|
||||
DEFINE_STUB_V(spdk_nvme_transport_get_opts, (struct spdk_nvme_transport_opts *opts,
|
||||
size_t opts_size));
|
||||
|
||||
DEFINE_STUB(spdk_nvme_transport_set_opts, int, (const struct spdk_nvme_transport_opts *opts,
|
||||
size_t opts_size), 0);
|
||||
|
||||
int
|
||||
spdk_nvme_ctrlr_get_memory_domains(const struct spdk_nvme_ctrlr *ctrlr,
|
||||
struct spdk_memory_domain **domains, int array_size)
|
||||
|
Loading…
Reference in New Issue
Block a user