[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 15/24] xl: allow to set the ratelimit value online for Credit2
Last part of the wiring necessary for allowing to change the value of the ratelimit_us parameter online, for Credit2 (like it is already for Credit1). Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --- Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> Cc: Wei Liu <wei.liu2@xxxxxxxxxx> Cc: George Dunlap <george.dunlap@xxxxxxxxxxxxx> --- docs/man/xl.pod.1.in | 9 ++++ tools/libxl/xl_cmdimpl.c | 91 +++++++++++++++++++++++++++++++++++++-------- tools/libxl/xl_cmdtable.c | 2 + 3 files changed, 86 insertions(+), 16 deletions(-) diff --git a/docs/man/xl.pod.1.in b/docs/man/xl.pod.1.in index 1adf322..013591b 100644 --- a/docs/man/xl.pod.1.in +++ b/docs/man/xl.pod.1.in @@ -1089,6 +1089,15 @@ to 65535 and the default is 256. Restrict output to domains in the specified cpupool. +=item B<-s>, B<--schedparam> + +Specify to list or set pool-wide scheduler parameters. + +=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT> + +Attempts to limit the rate of context switching. It is basically the same +as B<--ratelimit_us> in B<sched-credit> + =back =item B<sched-rtds> [I<OPTIONS>] diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 7f961e3..5bdeda8 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -6452,8 +6452,29 @@ static int sched_credit_pool_output(uint32_t poolid) return 0; } -static int sched_credit2_domain_output( - int domid) +static int sched_credit2_params_set(int poolid, + libxl_sched_credit2_params *scinfo) +{ + if (libxl_sched_credit2_params_set(ctx, poolid, scinfo)) { + fprintf(stderr, "libxl_sched_credit2_params_set failed.\n"); + return 1; + } + + return 0; +} + +static int sched_credit2_params_get(int poolid, + libxl_sched_credit2_params *scinfo) +{ + if (libxl_sched_credit2_params_get(ctx, poolid, scinfo)) { + fprintf(stderr, "libxl_sched_credit2_params_get failed.\n"); + return 1; + } + + return 0; +} + +static int sched_credit2_domain_output(int domid) { char *domname; libxl_domain_sched_params scinfo; @@ -6478,6 +6499,22 @@ static int sched_credit2_domain_output( return 0; } +static int sched_credit2_pool_output(uint32_t poolid) +{ + libxl_sched_credit2_params scparam; + char *poolname = libxl_cpupoolid_to_name(ctx, poolid); + + if (sched_credit2_params_get(poolid, &scparam)) + printf("Cpupool %s: [sched params unavailable]\n", poolname); + else + printf("Cpupool %s: ratelimit=%dus\n", + poolname, scparam.ratelimit_us); + + free(poolname); + + return 0; +} + static int sched_rtds_domain_output( int domid) { @@ -6577,17 +6614,6 @@ static int sched_rtds_pool_output(uint32_t poolid) return 0; } -static int sched_default_pool_output(uint32_t poolid) -{ - char *poolname; - - poolname = libxl_cpupoolid_to_name(ctx, poolid); - printf("Cpupool %s:\n", - poolname); - free(poolname); - return 0; -} - static int sched_domain_output(libxl_scheduler sched, int (*output)(int), int (*pooloutput)(uint32_t), const char *cpupool) { @@ -6833,17 +6859,22 @@ int main_sched_credit2(int argc, char **argv) { const char *dom = NULL; const char *cpupool = NULL; + int ratelimit = 0; int weight = 256; + bool opt_s = false; + bool opt_r = false; bool opt_w = false; int opt, rc; static struct option opts[] = { {"domain", 1, 0, 'd'}, {"weight", 1, 0, 'w'}, + {"schedparam", 0, 0, 's'}, + {"ratelimit_us", 1, 0, 'r'}, {"cpupool", 1, 0, 'p'}, COMMON_LONG_OPTS }; - SWITCH_FOREACH_OPT(opt, "d:w:p:", opts, "sched-credit2", 0) { + SWITCH_FOREACH_OPT(opt, "d:w:p:r:s", opts, "sched-credit2", 0) { case 'd': dom = optarg; break; @@ -6851,6 +6882,13 @@ int main_sched_credit2(int argc, char **argv) weight = strtol(optarg, NULL, 10); opt_w = true; break; + case 's': + opt_s = true; + break; + case 'r': + ratelimit = strtol(optarg, NULL, 10); + opt_r = true; + break; case 'p': cpupool = optarg; break; @@ -6866,10 +6904,31 @@ int main_sched_credit2(int argc, char **argv) return EXIT_FAILURE; } - if (!dom) { /* list all domain's credit scheduler info */ + if (opt_s) { + libxl_sched_credit2_params scparam; + uint32_t poolid = 0; + + if (cpupool) { + if (libxl_cpupool_qualifier_to_cpupoolid(ctx, cpupool, + &poolid, NULL) || + !libxl_cpupoolid_is_valid(ctx, poolid)) { + fprintf(stderr, "unknown cpupool \'%s\'\n", cpupool); + return EXIT_FAILURE; + } + } + + if (!opt_r) { /* Output scheduling parameters */ + if (sched_credit2_pool_output(poolid)) + return EXIT_FAILURE; + } else { /* Set scheduling parameters (so far, just ratelimit) */ + scparam.ratelimit_us = ratelimit; + if (sched_credit2_params_set(poolid, &scparam)) + return EXIT_FAILURE; + } + } else if (!dom) { /* list all domain's credit scheduler info */ if (sched_domain_output(LIBXL_SCHEDULER_CREDIT2, sched_credit2_domain_output, - sched_default_pool_output, + sched_credit2_pool_output, cpupool)) return EXIT_FAILURE; } else { diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index 85c1e0f..a420415 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -265,6 +265,8 @@ struct cmd_spec cmd_table[] = { "[-d <Domain> [-w[=WEIGHT]]] [-p CPUPOOL]", "-d DOMAIN, --domain=DOMAIN Domain to modify\n" "-w WEIGHT, --weight=WEIGHT Weight (int)\n" + "-s --schedparam Query / modify scheduler parameters\n" + "-r RLIMIT, --ratelimit_us=RLIMIT Set the scheduling rate limit, in microseconds\n" "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" }, { "sched-rtds", _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |