[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2 of 2] xl: Implement sched-credit schedule parameter command-line interface
Add features to the sched-credit interface to allow querying and displaying scheduler parameters. v2: - Change function line breaks - Pool output deals gracefully with other schedulers - Add new parameters, as well as a description of how they interact, to the xl man page Signed-off-by: George Dunlap <george.dunlap@xxxxxxxxxxxxx> diff -r 70b0b974a29b -r 3fd100808072 docs/man/xl.pod.1 --- a/docs/man/xl.pod.1 Fri Mar 02 10:45:06 2012 +0000 +++ b/docs/man/xl.pod.1 Fri Mar 02 10:45:37 2012 +0000 @@ -714,6 +714,53 @@ no upper cap. Restrict output to domains in the specified cpupool. +=item B<-s>, B<--schedparam> + +Specify to list or set pool-wide scheduler parameters. + +=item B<-t TSLICE>, B<--tslice_ms=TSLICE> + +Timeslice tells the scheduler how long to allow VMs to run before +pre-empting. The default is 30ms. Valid ranges are 1ms to 1000ms. +The length of the timeslice (in ms) must be higher than the length of +the ratelimit (see below). + +=item B<-r RLIMIT>, B<--ratelimit_us=RLIMIT> + +Ratelimit attempts to limit the number of schedules per second. It +sets a minimum amount of time (in microseconds) a VM must run before +we will allow a higher-prioirty VM to pre-empt it. The default value +is 1000 microseconds (1ms). Valid range is 100 to 500000 (500ms). +The ratelimit length must be lower than the timeslice length. + +=back + +B<COMBINATION> + +The following is the effect of combining the above options: + +=over 4 + +=item B<E<lt>nothingE<gt>> : List all domain params and sched params from all pools + +=item B<-d [domid]> : List domain params for domain [domid] + +=item B<-d [domid] [params]> : Set domain params for domain [domid] + +=item B<-p [pool]> : list all domains and sched params for [pool] + +=item B<-s> : List sched params for poolid 0 + +=item B<-s [params]> : Set sched params for poolid 0 + +=item B<-p [pool] -s> : List sched params for [pool] + +=item B<-p [pool] -s [params]> : Set sched params for [pool] + +=item B<-p [pool] -d>... : Illegal + +=item + =back =item B<sched-credit2> [I<OPTIONS>] diff -r 70b0b974a29b -r 3fd100808072 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Fri Mar 02 10:45:06 2012 +0000 +++ b/tools/libxl/xl_cmdimpl.c Fri Mar 02 10:45:37 2012 +0000 @@ -3905,8 +3905,7 @@ int main_sharing(int argc, char **argv) return 0; } -static int sched_credit_domain_get( - int domid, libxl_sched_credit_domain *scinfo) +static int sched_credit_domain_get(int domid, libxl_sched_credit_domain *scinfo) { int rc; @@ -3917,8 +3916,7 @@ static int sched_credit_domain_get( return rc; } -static int sched_credit_domain_set( - int domid, libxl_sched_credit_domain *scinfo) +static int sched_credit_domain_set(int domid, libxl_sched_credit_domain *scinfo) { int rc; @@ -3930,8 +3928,29 @@ static int sched_credit_domain_set( return rc; } -static int sched_credit_domain_output( - int domid) +static int sched_credit_params_set(int poolid, libxl_sched_credit_params *scinfo) +{ + int rc; + + rc = libxl_sched_credit_params_set(ctx, poolid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_credit_params_set failed.\n"); + + return rc; +} + +static int sched_credit_params_get(int poolid, libxl_sched_credit_params *scinfo) +{ + int rc; + + rc = libxl_sched_credit_params_get(ctx, poolid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_credit_params_get failed.\n"); + + return rc; +} + +static int sched_credit_domain_output(int domid) { char *domname; libxl_sched_credit_domain scinfo; @@ -3955,6 +3974,27 @@ static int sched_credit_domain_output( return 0; } +static int sched_credit_pool_output(uint32_t poolid) +{ + libxl_sched_credit_params scparam; + char *poolname; + int rc; + + poolname = libxl_cpupoolid_to_name(ctx, poolid); + rc = sched_credit_params_get(poolid, &scparam); + if (rc) { + printf("Cpupool %s: [sched params unavailable]\n", + poolname); + } else { + printf("Cpupool %s: tslice=%dms ratelimit=%dus\n", + poolname, + scparam.tslice_ms, + scparam.ratelimit_us); + } + free(poolname); + return 0; +} + static int sched_credit2_domain_get( int domid, libxl_sched_credit2_domain *scinfo) { @@ -4118,25 +4158,41 @@ static int sched_domain_output(libxl_sch return 0; } +/* + * <nothing> : List all domain params and sched params from all pools + * -d [domid] : List domain params for domain + * -d [domid] [params] : Set domain params for domain + * -p [pool] : list all domains and sched params for pool + * -s : List sched params for poolid 0 + * -s [params] : Set sched params for poolid 0 + * -p [pool] -s : List sched params for pool + * -p [pool] -s [params] : Set sched params for pool + * -p [pool] -d... : Illegal + */ int main_sched_credit(int argc, char **argv) { libxl_sched_credit_domain scinfo; const char *dom = NULL; const char *cpupool = NULL; int weight = 256, cap = 0, opt_w = 0, opt_c = 0; + int opt_s = 0; + int tslice = 0, opt_t = 0, ratelimit = 0, opt_r = 0; int opt, rc; int option_index = 0; static struct option long_options[] = { {"domain", 1, 0, 'd'}, {"weight", 1, 0, 'w'}, {"cap", 1, 0, 'c'}, + {"schedparam", 0, 0, 's'}, + {"tslice_ms", 1, 0, 't'}, + {"ratelimit_us", 1, 0, 'r'}, {"cpupool", 1, 0, 'p'}, {"help", 0, 0, 'h'}, {0, 0, 0, 0} }; while (1) { - opt = getopt_long(argc, argv, "d:w:c:p:h", long_options, + opt = getopt_long(argc, argv, "d:w:c:p:t:r:hs", long_options, &option_index); if (opt == -1) break; @@ -4154,6 +4210,17 @@ int main_sched_credit(int argc, char **a cap = strtol(optarg, NULL, 10); opt_c = 1; break; + case 't': + tslice = strtol(optarg, NULL, 10); + opt_t = 1; + break; + case 'r': + ratelimit = strtol(optarg, NULL, 10); + opt_r = 1; + break; + case 's': + opt_s = 1; + break; case 'p': cpupool = optarg; break; @@ -4163,20 +4230,54 @@ int main_sched_credit(int argc, char **a } } - if (cpupool && (dom || opt_w || opt_c)) { - fprintf(stderr, "Specifying a cpupool is not allowed with other " - "options.\n"); + if ((cpupool || opt_s) && (dom || opt_w || opt_c)) { + fprintf(stderr, "Specifying a cpupool or schedparam is not " + "allowed with domain options.\n"); return 1; } if (!dom && (opt_w || opt_c)) { fprintf(stderr, "Must specify a domain.\n"); return 1; } - - if (!dom) { /* list all domain's credit scheduler info */ + if (!opt_s && (opt_t || opt_r)) { + fprintf(stderr, "Must specify schedparam to set schedule " + "parameter values.\n"); + return 1; + } + + if (opt_s) { + libxl_sched_credit_params scparam; + uint32_t poolid = 0; + + if (cpupool) { + if (cpupool_qualifier_to_cpupoolid(cpupool, &poolid, NULL) || + !libxl_cpupoolid_to_name(ctx, poolid)) { + fprintf(stderr, "unknown cpupool \'%s\'\n", cpupool); + return -ERROR_FAIL; + } + } + + if (!opt_t && !opt_r) { /* Output scheduling parameters */ + return -sched_credit_pool_output(poolid); + } else { /* Set scheduling parameters*/ + rc = sched_credit_params_get(poolid, &scparam); + if (rc) + return -rc; + + if (opt_t) + scparam.tslice_ms = tslice; + + if (opt_r) + scparam.ratelimit_us = ratelimit; + + rc = sched_credit_params_set(poolid, &scparam); + if (rc) + return -rc; + } + } else if (!dom) { /* list all domain's credit scheduler info */ return -sched_domain_output(LIBXL_SCHEDULER_CREDIT, sched_credit_domain_output, - sched_default_pool_output, + sched_credit_pool_output, cpupool); } else { find_domain(dom); diff -r 70b0b974a29b -r 3fd100808072 tools/libxl/xl_cmdtable.c --- a/tools/libxl/xl_cmdtable.c Fri Mar 02 10:45:06 2012 +0000 +++ b/tools/libxl/xl_cmdtable.c Fri Mar 02 10:45:37 2012 +0000 @@ -204,11 +204,14 @@ struct cmd_spec cmd_table[] = { { "sched-credit", &main_sched_credit, 0, "Get/set credit scheduler parameters", - "[-d <Domain> [-w[=WEIGHT]|-c[=CAP]]] [-p CPUPOOL]", - "-d DOMAIN, --domain=DOMAIN Domain to modify\n" - "-w WEIGHT, --weight=WEIGHT Weight (int)\n" - "-c CAP, --cap=CAP Cap (int)\n" - "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" + "[-d <Domain> [-w[=WEIGHT]|-c[=CAP]]] [-s [-t TSLICE] [-r RATELIMIT]] [-p CPUPOOL]", + "-d DOMAIN, --domain=DOMAIN Domain to modify\n" + "-w WEIGHT, --weight=WEIGHT Weight (int)\n" + "-c CAP, --cap=CAP Cap (int)\n" + "-s --schedparam Query / modify scheduler parameters\n" + "-t TSLICE, --tslice_ms=TSLICE Set the timeslice, in milliseconds\n" + "-r RLIMIT, --ratelimit_us=RLIMIT Set the scheduling rate limit, in microseconds\n" + "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" }, { "sched-credit2", &main_sched_credit2, 0, _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |