scheduler: Add option to provide scheduler period in framework_set_scheduler RPC

Signed-off-by: Maciej Szwed <maciej.szwed@intel.com>
Change-Id: I96a8937ffe8751f093227589b076a5ae77fa5f16
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/5295
Community-CI: Broadcom CI
Community-CI: Mellanox Build Bot
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Tomasz Zawadzki <tomasz.zawadzki@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
Maciej Szwed 2020-11-26 11:18:16 +01:00 committed by Tomasz Zawadzki
parent cc0d13f7e6
commit 6e3346df5b
3 changed files with 15 additions and 4 deletions

View File

@ -432,6 +432,7 @@ SPDK_RPC_REGISTER("framework_get_reactors", rpc_framework_get_reactors, SPDK_RPC
struct rpc_set_scheduler_ctx { struct rpc_set_scheduler_ctx {
char *name; char *name;
uint64_t period;
}; };
static void 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[] = { static const struct spdk_json_object_decoder rpc_set_scheduler_decoders[] = {
{"name", offsetof(struct rpc_set_scheduler_ctx, name), spdk_json_decode_string}, {"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 static void
@ -460,6 +462,10 @@ rpc_framework_set_scheduler(struct spdk_jsonrpc_request *request,
goto end; goto end;
} }
if (req.period != 0) {
_spdk_scheduler_period_set(req.period);
}
ret = _spdk_scheduler_set(req.name); ret = _spdk_scheduler_set(req.name);
if (ret) { if (ret) {
spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR, spdk_jsonrpc_send_error_response(request, SPDK_JSONRPC_ERROR_INTERNAL_ERROR,

View File

@ -159,11 +159,13 @@ if __name__ == "__main__":
def framework_set_scheduler(args): def framework_set_scheduler(args):
rpc.app.framework_set_scheduler(args.client, rpc.app.framework_set_scheduler(args.client,
name=args.name) name=args.name,
period=args.period)
p = subparsers.add_parser( 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('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) p.set_defaults(func=framework_set_scheduler)
# bdev # bdev

View File

@ -37,15 +37,18 @@ def framework_get_reactors(client):
return client.call('framework_get_reactors') return client.call('framework_get_reactors')
def framework_set_scheduler(client, name): def framework_set_scheduler(client, name, period):
"""Select threads scheduler that will be activated. """Select threads scheduler that will be activated and its period.
Args: Args:
name: Name of a scheduler name: Name of a scheduler
period: Scheduler period in microseconds
Returns: Returns:
True or False True or False
""" """
params = {'name': name} params = {'name': name}
if period is not None:
params['period'] = period
return client.call('framework_set_scheduler', params) return client.call('framework_set_scheduler', params)