diff --git a/lib/event/app_rpc.c b/lib/event/app_rpc.c index f7e1d346d..0732d17c8 100644 --- a/lib/event/app_rpc.c +++ b/lib/event/app_rpc.c @@ -432,6 +432,7 @@ SPDK_RPC_REGISTER("framework_get_reactors", rpc_framework_get_reactors, SPDK_RPC struct rpc_set_scheduler_ctx { char *name; + uint64_t period; }; static void @@ -442,6 +443,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} }; static void @@ -460,6 +462,10 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request, goto end; } + if (req.period != 0) { + _spdk_scheduler_period_set(req.period); + } + ret = _spdk_scheduler_set(req.name); if (ret) { spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, diff --git a/scripts/rpc.py b/scripts/rpc.py index c57cef1ea..d5efc29e9 100755 --- a/scripts/rpc.py +++ b/scripts/rpc.py @@ -159,11 +159,13 @@ if __name__ == "__main__": def framework_set_scheduler(args): rpc.app.framework_set_scheduler(args.client, - name=args.name) + name=args.name, + period=args.period) p = subparsers.add_parser( - 'framework_set_scheduler', help='Select thread scheduler that will be activated (experimental)') + '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.set_defaults(func=framework_set_scheduler) # bdev diff --git a/scripts/rpc/app.py b/scripts/rpc/app.py index d6bbff77e..38cd682de 100644 --- a/scripts/rpc/app.py +++ b/scripts/rpc/app.py @@ -37,15 +37,18 @@ def framework_get_reactors(client): return client.call('framework_get_reactors') -def framework_set_scheduler(client, name): - """Select threads scheduler that will be activated. +def framework_set_scheduler(client, name, period): + """Select threads scheduler that will be activated and its period. Args: name: Name of a scheduler + period: Scheduler period in microseconds Returns: True or False """ params = {'name': name} + if period is not None: + params['period'] = period return client.call('framework_set_scheduler', params)