event: use implemented set/get methods in RPC calls
Make use of code implemented in previous patches in the series to get and set dynamic scheduler values. Modifiy app.py and rpc.py to accomodate new changes and allow user to specify scheduler parameters in the RPC calls. Change-Id: I6173aefbf1d774b91b80ee5bce67eea80a2ab23d Signed-off-by: Krzysztof Karas <krzysztof.karas@intel.com> Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11449 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
This commit is contained in:
parent
32da70152f
commit
ca8e6d2361
@ -475,7 +475,7 @@ free_rpc_framework_set_scheduler(struct rpc_set_scheduler_ctx *r)
|
||||
|
||||
static const struct spdk_json_object_decoder rpc_set_scheduler_decoders[] = {
|
||||
{"name", offsetof(struct rpc_set_scheduler_ctx, name), spdk_json_decode_string},
|
||||
{"period", offsetof(struct rpc_set_scheduler_ctx, period), spdk_json_decode_uint64, true}
|
||||
{"period", offsetof(struct rpc_set_scheduler_ctx, period), spdk_json_decode_uint64, true},
|
||||
};
|
||||
|
||||
static void
|
||||
@ -483,11 +483,12 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request,
|
||||
const struct spdk_json_val *params)
|
||||
{
|
||||
struct rpc_set_scheduler_ctx req = {NULL};
|
||||
struct spdk_scheduler *scheduler = NULL;
|
||||
int ret;
|
||||
|
||||
ret = spdk_json_decode_object(params, rpc_set_scheduler_decoders,
|
||||
SPDK_COUNTOF(rpc_set_scheduler_decoders),
|
||||
&req);
|
||||
ret = spdk_json_decode_object_relaxed(params, rpc_set_scheduler_decoders,
|
||||
SPDK_COUNTOF(rpc_set_scheduler_decoders),
|
||||
&req);
|
||||
if (ret) {
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INVALID_PARAMS,
|
||||
"Invalid parameters");
|
||||
@ -505,6 +506,15 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request,
|
||||
goto end;
|
||||
}
|
||||
|
||||
scheduler = spdk_scheduler_get();
|
||||
if (scheduler != NULL && scheduler->set_opts != NULL) {
|
||||
ret = scheduler->set_opts(params);
|
||||
}
|
||||
if (ret) {
|
||||
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_strerror(ret));
|
||||
goto end;
|
||||
}
|
||||
|
||||
spdk_jsonrpc_send_bool_response(request, true);
|
||||
|
||||
end:
|
||||
@ -537,6 +547,11 @@ rpc_framework_get_scheduler(struct spdk_jsonrpc_request *request,
|
||||
if (governor != NULL) {
|
||||
spdk_json_write_named_string(w, "governor_name", governor->name);
|
||||
}
|
||||
|
||||
if (scheduler != NULL && scheduler->get_opts != NULL) {
|
||||
scheduler->get_opts(w);
|
||||
}
|
||||
|
||||
spdk_json_write_object_end(w);
|
||||
spdk_jsonrpc_end_result(request, w);
|
||||
}
|
||||
|
@ -160,12 +160,18 @@ if __name__ == "__main__":
|
||||
def framework_set_scheduler(args):
|
||||
rpc.app.framework_set_scheduler(args.client,
|
||||
name=args.name,
|
||||
period=args.period)
|
||||
period=args.period,
|
||||
load_limit=args.load_limit,
|
||||
core_limit=args.core_limit,
|
||||
core_busy=args.core_busy)
|
||||
|
||||
p = subparsers.add_parser(
|
||||
'framework_set_scheduler', help='Select thread scheduler that will be activated and its period (experimental)')
|
||||
p.add_argument('name', help="Name of a scheduler")
|
||||
p.add_argument('-p', '--period', help="Scheduler period in microseconds", type=int)
|
||||
p.add_argument('--load-limit', help="Scheduler load limit. Reserved for dynamic scheduler", type=int, required=False)
|
||||
p.add_argument('--core-limit', help="Scheduler core limit. Reserved for dynamic scheduler", type=int, required=False)
|
||||
p.add_argument('--core-busy', help="Scheduler core busy limit. Reserved for dynamic schedler", type=int, required=False)
|
||||
p.set_defaults(func=framework_set_scheduler)
|
||||
|
||||
def framework_get_scheduler(args):
|
||||
|
@ -37,7 +37,8 @@ def framework_get_reactors(client):
|
||||
return client.call('framework_get_reactors')
|
||||
|
||||
|
||||
def framework_set_scheduler(client, name, period=None):
|
||||
def framework_set_scheduler(client, name, period=None, load_limit=None, core_limit=None,
|
||||
core_busy=None):
|
||||
"""Select threads scheduler that will be activated and its period.
|
||||
|
||||
Args:
|
||||
@ -49,6 +50,12 @@ def framework_set_scheduler(client, name, period=None):
|
||||
params = {'name': name}
|
||||
if period is not None:
|
||||
params['period'] = period
|
||||
if load_limit is not None:
|
||||
params['load_limit'] = load_limit
|
||||
if core_limit is not None:
|
||||
params['core_limit'] = core_limit
|
||||
if core_busy is not None:
|
||||
params['core_busy'] = core_busy
|
||||
return client.call('framework_set_scheduler', params)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user