sock: enable placement_id configuration in sock layer

This patch is used to enable placement_id getting
in sock layer and also add the rpc support.

Signed-off-by: Ziye Yang <ziye.yang@intel.com>
Change-Id: I70de57b0ed392a0aefce9d3ff1f61ef924015a87
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/4146
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Community-CI: Broadcom CI
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Ziye Yang 2020-09-11 01:22:24 +08:00 committed by Tomasz Zawadzki
parent ebb903d46e
commit a6db2f3590
9 changed files with 53 additions and 5 deletions

View File

@ -19,6 +19,17 @@ Updated ISA-L submodule to v2.29.0.
Updated OCF submodule to v20.03.1
### sock
The `enable_placement_id` field was added in the struct spdk_sock_impl_opts to
make the placement_id feature configurable by users. The default setting is
not enabled.
### rpc
A new optional parameter `enable_placement_id` was added to the `sock_impl_set_options`
RPC.
## v20.07: SPDK CSI driver, new accel_fw commands, I/O abort support
### accel

View File

@ -6929,6 +6929,7 @@ send_buf_size | Optional | number | Size of socket send buffer in
enable_recv_pipe | Optional | boolean | Enable or disable receive pipe
enable_zerocopy_send | Optional | boolean | Enable or disable zero copy on send
enable_quick_ack | Optional | boolean | Enable or disable quick ACK
enable_placement_id | Optional | boolean | Enable or disable placement_id
### Response
@ -6949,7 +6950,8 @@ Example request:
"send_buf_size": 2097152,
"enable_recv_pipe": false,
"enable_zerocopy_send": true,
"enable_quick_ack": false
"enable_quick_ack": false,
"enable_placement_id": false
}
}
~~~

View File

@ -112,6 +112,12 @@ struct spdk_sock_impl_opts {
* Enable or disable quick ACK. Used by posix and uring socket modules.
*/
bool enable_quickack;
/**
* Enable or disable placement_id. Used by posix and uring socket modules.
*/
bool enable_placement_id;
};
/**

View File

@ -34,7 +34,7 @@
SPDK_ROOT_DIR := $(abspath $(CURDIR)/../..)
include $(SPDK_ROOT_DIR)/mk/spdk.common.mk
SO_VER := 4
SO_VER := 5
SO_MINOR := 0
C_SRCS = sock.c net_framework.c sock_rpc.c

View File

@ -76,6 +76,7 @@ rpc_sock_impl_get_options(struct spdk_jsonrpc_request *request,
spdk_json_write_named_bool(w, "enable_recv_pipe", sock_opts.enable_recv_pipe);
spdk_json_write_named_bool(w, "enable_zerocopy_send", sock_opts.enable_zerocopy_send);
spdk_json_write_named_bool(w, "enable_quickack", sock_opts.enable_quickack);
spdk_json_write_named_bool(w, "enable_placement_id", sock_opts.enable_placement_id);
spdk_json_write_object_end(w);
spdk_jsonrpc_end_result(request, w);
free(impl_name);
@ -113,6 +114,11 @@ static const struct spdk_json_object_decoder rpc_sock_impl_set_opts_decoders[] =
"enable_quickack", offsetof(struct spdk_rpc_sock_impl_set_opts, sock_opts.enable_quickack),
spdk_json_decode_bool, true
},
{
"enable_placement_id", offsetof(struct spdk_rpc_sock_impl_set_opts, sock_opts.enable_placement_id),
spdk_json_decode_bool, true
},
};
static void

View File

@ -83,6 +83,7 @@ static struct spdk_sock_impl_opts g_spdk_posix_sock_impl_opts = {
.enable_recv_pipe = true,
.enable_zerocopy_send = true,
.enable_quickack = false,
.enable_placement_id = false,
};
static int
@ -1103,6 +1104,10 @@ posix_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
int rc = -1;
if (!g_spdk_posix_sock_impl_opts.enable_placement_id) {
return rc;
}
#if defined(SO_INCOMING_NAPI_ID)
struct spdk_posix_sock *sock = __posix_sock(_sock);
socklen_t salen = sizeof(int);
@ -1356,6 +1361,7 @@ posix_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len)
GET_FIELD(enable_recv_pipe);
GET_FIELD(enable_zerocopy_send);
GET_FIELD(enable_quickack);
GET_FIELD(enable_placement_id);
#undef GET_FIELD
#undef FIELD_OK
@ -1385,6 +1391,7 @@ posix_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len)
SET_FIELD(enable_recv_pipe);
SET_FIELD(enable_zerocopy_send);
SET_FIELD(enable_quickack);
SET_FIELD(enable_placement_id);
#undef SET_FIELD
#undef FIELD_OK

View File

@ -104,6 +104,7 @@ static struct spdk_sock_impl_opts g_spdk_uring_sock_impl_opts = {
.send_buf_size = MIN_SO_SNDBUF_SIZE,
.enable_recv_pipe = true,
.enable_quickack = false,
.enable_placement_id = false,
};
#define SPDK_URING_SOCK_REQUEST_IOV(req) ((struct iovec *)((uint8_t *)req + sizeof(struct spdk_sock_request)))
@ -1140,6 +1141,10 @@ uring_sock_get_placement_id(struct spdk_sock *_sock, int *placement_id)
{
int rc = -1;
if (!g_spdk_uring_sock_impl_opts.enable_placement_id) {
return rc;
}
#if defined(SO_INCOMING_NAPI_ID)
struct spdk_uring_sock *sock = __uring_sock(_sock);
socklen_t salen = sizeof(int);
@ -1325,6 +1330,7 @@ uring_sock_impl_get_opts(struct spdk_sock_impl_opts *opts, size_t *len)
GET_FIELD(send_buf_size);
GET_FIELD(enable_recv_pipe);
GET_FIELD(enable_quickack);
GET_FIELD(enable_placement_id);
#undef GET_FIELD
#undef FIELD_OK
@ -1353,6 +1359,7 @@ uring_sock_impl_set_opts(const struct spdk_sock_impl_opts *opts, size_t len)
SET_FIELD(send_buf_size);
SET_FIELD(enable_recv_pipe);
SET_FIELD(enable_quickack);
SET_FIELD(enable_placement_id);
#undef SET_FIELD
#undef FIELD_OK

View File

@ -2521,7 +2521,8 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
send_buf_size=args.send_buf_size,
enable_recv_pipe=args.enable_recv_pipe,
enable_zerocopy_send=args.enable_zerocopy_send,
enable_quickack=args.enable_quickack)
enable_quickack=args.enable_quickack,
enable_placement_id=args.enable_placement_id)
p = subparsers.add_parser('sock_impl_set_options', help="""Set options of socket layer implementation""")
p.add_argument('-i', '--impl', help='Socket implementation name, e.g. posix', required=True)
@ -2539,8 +2540,12 @@ Format: 'user:u1 secret:s1 muser:mu1 msecret:ms1,user:u2 secret:s2 muser:mu2 mse
action='store_true', dest='enable_quickack')
p.add_argument('--disable-quickack', help='Disable quick ACK',
action='store_false', dest='enable_quickack')
p.add_argument('--enable-placement_id', help='Enable placement_id',
action='store_true', dest='enable_placement_id')
p.add_argument('--disable-placement_id', help='Disable placement_id',
action='store_false', dest='enable_placement_id')
p.set_defaults(func=sock_impl_set_options, enable_recv_pipe=None, enable_zerocopy_send=None,
enable_quickack=None)
enable_quickack=None, enable_placement_id=None)
def check_called_name(name):
if name in deprecated_aliases:

View File

@ -17,7 +17,8 @@ def sock_impl_set_options(client,
send_buf_size=None,
enable_recv_pipe=None,
enable_zerocopy_send=None,
enable_quickack=None):
enable_quickack=None,
enable_placement_id=None):
"""Set parameters for the socket layer implementation.
Args:
@ -27,6 +28,7 @@ def sock_impl_set_options(client,
enable_recv_pipe: enable or disable receive pipe (optional)
enable_zerocopy_send: enable or disable zerocopy on send (optional)
enable_quickack: enable or disable quickack (optional)
enable_placement_id: enable or disable placement_id (optional)
"""
params = {}
@ -41,5 +43,7 @@ def sock_impl_set_options(client,
params['enable_zerocopy_send'] = enable_zerocopy_send
if enable_quickack is not None:
params['enable_quickack'] = enable_quickack
if enable_placement_id is not None:
params['enable_placement_id'] = enable_placement_id
return client.call('sock_impl_set_options', params)