diff --git a/CHANGELOG.md b/CHANGELOG.md index 034a0823d82..2424dd19f21 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## v20.04: (Upcoming Release) +### rpc + +Add optional 'no_wr_batching' parameter to 'nvmf_create_transport' RPC method. + ### nvmf Add 'no_wr_batching' parameter in 'spdk_nvmf_transport_opts' for the ability disable WR batching RDMA. diff --git a/doc/jsonrpc.md b/doc/jsonrpc.md index 7aff53c501a..14b00883b71 100644 --- a/doc/jsonrpc.md +++ b/doc/jsonrpc.md @@ -3844,6 +3844,7 @@ no_srq | Optional | boolean | Disable shared receive queue c2h_success | Optional | boolean | Disable C2H success optimization (TCP only) dif_insert_or_strip | Optional | boolean | Enable DIF insert for write I/O and DIF strip for read I/O DIF (TCP only) sock_priority | Optional | number | The socket priority of the connection owned by this transport (TCP only) +no_wr_batching | Optional | boolean | Disable work requests batching (RDMA only) ### Example: diff --git a/lib/nvmf/nvmf_rpc.c b/lib/nvmf/nvmf_rpc.c index 9855c942a0a..56913a51078 100644 --- a/lib/nvmf/nvmf_rpc.c +++ b/lib/nvmf/nvmf_rpc.c @@ -1602,6 +1602,10 @@ static const struct spdk_json_object_decoder nvmf_rpc_create_transport_decoder[] "tgt_name", offsetof(struct nvmf_rpc_create_transport_ctx, tgt_name), spdk_json_decode_string, true }, + { + "no_wr_batching", offsetof(struct nvmf_rpc_create_transport_ctx, opts.no_wr_batching), + spdk_json_decode_bool, false + }, }; static void @@ -1745,6 +1749,7 @@ dump_nvmf_transport(struct spdk_json_write_ctx *w, struct spdk_nvmf_transport *t if (type == SPDK_NVME_TRANSPORT_RDMA) { spdk_json_write_named_uint32(w, "max_srq_depth", opts->max_srq_depth); spdk_json_write_named_bool(w, "no_srq", opts->no_srq); + spdk_json_write_named_bool(w, "no_wr_batching", opts->no_wr_batching); } else if (type == SPDK_NVME_TRANSPORT_TCP) { spdk_json_write_named_bool(w, "c2h_success", opts->c2h_success); spdk_json_write_named_uint32(w, "sock_priority", opts->sock_priority); diff --git a/scripts/rpc.py b/scripts/rpc.py index 2660d3a72a1..c8a53e88106 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -1684,7 +1684,8 @@ def nvmf_create_transport(args): no_srq=args.no_srq, c2h_success=args.c2h_success, dif_insert_or_strip=args.dif_insert_or_strip, - sock_priority=args.sock_priority) + sock_priority=args.sock_priority, + no_wr_batching=args.no_wr_batching) p = subparsers.add_parser('nvmf_create_transport', help='Create NVMf transport') p.add_argument('-t', '--trtype', help='Transport type (ex. RDMA)', type=str, required=True) @@ -1702,6 +1703,7 @@ def nvmf_create_transport(args): p.add_argument('-o', '--c2h-success', action='store_false', help='Disable C2H success optimization. Relevant only for TCP transport') p.add_argument('-f', '--dif-insert-or-strip', action='store_true', help='Enable DIF insert/strip. Relevant only for TCP transport') p.add_argument('-y', '--sock-priority', help='The sock priority of the tcp connection. Relevant only for TCP transport', type=int) + p.add_argument('-b', '--no-wr-batching', action='store_false', help='Disable work requests batching. Relevant only for RDMA transport', default=False) p.set_defaults(func=nvmf_create_transport) def nvmf_get_transports(args): diff --git a/scripts/rpc/nvmf.py b/scripts/rpc/nvmf.py index c471f63373f..e30133718cb 100644 --- a/scripts/rpc/nvmf.py +++ b/scripts/rpc/nvmf.py @@ -106,7 +106,8 @@ def nvmf_create_transport(client, no_srq=False, c2h_success=True, dif_insert_or_strip=None, - sock_priority=None): + sock_priority=None, + no_wr_batching=None): """NVMf Transport Create options. Args: @@ -123,7 +124,7 @@ def nvmf_create_transport(client, no_srq: Boolean flag to disable SRQ even for devices that support it - RDMA specific (optional) c2h_success: Boolean flag to disable the C2H success optimization - TCP specific (optional) dif_insert_or_strip: Boolean flag to enable DIF insert/strip for I/O - TCP specific (optional) - + no_wr_batching: Boolean flag to disable work requests batching - RDMA specific (optional) Returns: True or False """ @@ -158,6 +159,8 @@ def nvmf_create_transport(client, params['dif_insert_or_strip'] = dif_insert_or_strip if sock_priority: params['sock_priority'] = sock_priority + if no_wr_batching is not None: + params['no_wr_batching'] = no_wr_batching return client.call('nvmf_create_transport', params)