[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 15/24] xl: allow to set the ratelimit value online for Credit2
On 17/08/16 18:19, Dario Faggioli wrote: > 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> > + This is a bit of a strange interface, but it follows suit with what the credit1 command does, so: Reviewed-by: George Dunlap <george.dunlap@xxxxxxxxxx> > =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 |