# HG changeset patch # Parent a80a577c34ca421fe97141eee329fb14b100faa2 Improved xl scheduling support from Juergen. This is here as a single patch, just for convenience, in case one wants to test the series. For details see http://osdir.com/ml/xen-development/2011-11/msg01097.html . diff -r a80a577c34ca docs/man/xl.pod.1 --- a/docs/man/xl.pod.1 Wed Nov 23 15:36:22 2011 +0100 +++ b/docs/man/xl.pod.1 Wed Nov 23 15:41:32 2011 +0100 @@ -579,25 +579,30 @@ default B is used for scheduling =over 4 -=item B [ B<-d> I [ B<-w>[B<=>I] | B<-c>[B<=>I] ] ] +=item B [I] -Set credit scheduler parameters. The credit scheduler is a +Set or get credit scheduler parameters. The credit scheduler is a proportional fair share CPU scheduler built from the ground up to be work conserving on SMP hosts. Each domain (including Domain0) is assigned a weight and a cap. -B +B =over 4 -=item I +=item B<-d DOMAIN>, B<--domain=DOMAIN> + +Specify domain for which scheduler parameters are to be modified or retrieved. +Mandatory for modifying scheduler parameters. + +=item B<-w WEIGHT>, B<--weight=WEIGHT> A domain with a weight of 512 will get twice as much CPU as a domain with a weight of 256 on a contended host. Legal weights range from 1 to 65535 and the default is 256. -=item I +=item B<-c CAP>, B<--cap=CAP> The cap optionally fixes the maximum amount of CPU a domain will be able to consume, even if the host system has idle CPU cycles. The cap @@ -605,6 +610,81 @@ is expressed in percentage of one physic 50 is half a CPU, 400 is 4 CPUs, etc. The default, 0, means there is no upper cap. +=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL> + +Restrict output to domains in the specified cpupool. + +=back + +=item B [I] + +Set or get credit2 scheduler parameters. The credit2 scheduler is a +proportional fair share CPU scheduler built from the ground up to be +work conserving on SMP hosts. + +Each domain (including Domain0) is assigned a weight. + +B + +=over 4 + +=item B<-d DOMAIN>, B<--domain=DOMAIN> + +Specify domain for which scheduler parameters are to be modified or retrieved. +Mandatory for modifying scheduler parameters. + +=item B<-w WEIGHT>, B<--weight=WEIGHT> + +A domain with a weight of 512 will get twice as much CPU as a domain +with a weight of 256 on a contended host. Legal weights range from 1 +to 65535 and the default is 256. + +=item B<-p CPUPOOL>, B<--cpupool=CPUPOOL> + +Restrict output to domains in the specified cpupool. + +=back + +=item B [I] + +Set or get Simple EDF (Earliest Deadline First) scheduler parameters. This +scheduler provides weighted CPU sharing in an intuitive way and uses +realtime-algorithms to ensure time guarantees. For more information see +docs/misc/sedf_scheduler_mini-HOWTO.txt in the Xen distribution. + +B + +=over 4 + +=item B<-d DOMAIN>, B<--domain=DOMAIN> + +Specify domain for which scheduler parameters are to be modified or retrieved. +Mandatory for modifying scheduler parameters. + +=item B<-p PERIOD>, B<--period=PERIOD> + +The normal EDF scheduling usage in milliseconds. + +=item B<-s SLICE>, B<--slice=SLICE> + +The normal EDF scheduling usage in milliseconds. + +=item B<-l LATENCY>, B<--latency=LATENCY> + +Scaled period if domain is doing heavy I/O. + +=item B<-e EXTRA>, B<--extra=EXTRA> + +Flag for allowing domain to run in extra time (0 or 1). + +=item B<-w WEIGHT>, B<--weight=WEIGHT> + +Another way of setting CPU slice. + +=item B<-c CPUPOOL>, B<--cpupool=CPUPOOL> + +Restrict output to domains in the specified cpupool. + =back =back diff -r a80a577c34ca tools/libxl/libxl.c --- a/tools/libxl/libxl.c Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/libxl.c Wed Nov 23 15:41:32 2011 +0100 @@ -361,6 +361,7 @@ static void xcinfo2xlinfo(const xc_domai xlinfo->cpu_time = xcinfo->cpu_time; xlinfo->vcpu_max_id = xcinfo->max_vcpu_id; xlinfo->vcpu_online = xcinfo->nr_online_vcpus; + xlinfo->cpupool = xcinfo->cpupool; } libxl_dominfo * libxl_list_domain(libxl_ctx *ctx, int *nb_domain) @@ -2678,7 +2679,7 @@ int libxl_sched_credit_domain_get(libxl_ rc = xc_sched_credit_domain_get(ctx->xch, domid, &sdom); if (rc != 0) { - LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "setting domain sched credit"); + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched credit"); return ERROR_FAIL; } @@ -2728,6 +2729,103 @@ int libxl_sched_credit_domain_set(libxl_ return 0; } +int libxl_sched_credit2_domain_get(libxl_ctx *ctx, uint32_t domid, libxl_sched_credit2 *scinfo) +{ + struct xen_domctl_sched_credit2 sdom; + int rc; + + rc = xc_sched_credit2_domain_get(ctx->xch, domid, &sdom); + if (rc != 0) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched credit2"); + return ERROR_FAIL; + } + + scinfo->weight = sdom.weight; + + return 0; +} + +int libxl_sched_credit2_domain_set(libxl_ctx *ctx, uint32_t domid, libxl_sched_credit2 *scinfo) +{ + struct xen_domctl_sched_credit2 sdom; + xc_domaininfo_t domaininfo; + int rc; + + rc = xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo); + if (rc < 0) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain info list"); + return ERROR_FAIL; + } + if (rc != 1 || domaininfo.domain != domid) + return ERROR_INVAL; + + + if (scinfo->weight < 1 || scinfo->weight > 65535) { + LIBXL__LOG_ERRNOVAL(ctx, LIBXL__LOG_ERROR, rc, + "Cpu weight out of range, valid values are within range from 1 to 65535"); + return ERROR_INVAL; + } + + sdom.weight = scinfo->weight; + + rc = xc_sched_credit2_domain_set(ctx->xch, domid, &sdom); + if ( rc < 0 ) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "setting domain sched credit2"); + return ERROR_FAIL; + } + + return 0; +} + +int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid, libxl_sched_sedf *scinfo) +{ + uint64_t period; + uint64_t slice; + uint64_t latency; + uint16_t extratime; + uint16_t weight; + int rc; + + rc = xc_sedf_domain_get(ctx->xch, domid, &period, &slice, &latency, &extratime, &weight); + if (rc != 0) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain sched sedf"); + return ERROR_FAIL; + } + + scinfo->period = period / 1000000; + scinfo->slice = slice / 1000000; + scinfo->latency = latency / 1000000; + scinfo->extratime = extratime; + scinfo->weight = weight; + + return 0; +} + +int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid, libxl_sched_sedf *scinfo) +{ + xc_domaininfo_t domaininfo; + int rc; + + rc = xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo); + if (rc < 0) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "getting domain info list"); + return ERROR_FAIL; + } + if (rc != 1 || domaininfo.domain != domid) + return ERROR_INVAL; + + + rc = xc_sedf_domain_set(ctx->xch, domid, scinfo->period * 1000000, + scinfo->slice * 1000000, scinfo->latency * 1000000, + scinfo->extratime, scinfo->weight); + if ( rc < 0 ) { + LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "setting domain sched sedf"); + return ERROR_FAIL; + } + + return 0; +} + static int trigger_type_from_string(char *trigger_name) { if (!strcmp(trigger_name, "nmi")) diff -r a80a577c34ca tools/libxl/libxl.h --- a/tools/libxl/libxl.h Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/libxl.h Wed Nov 23 15:41:32 2011 +0100 @@ -567,6 +567,14 @@ int libxl_sched_credit_domain_get(libxl_ libxl_sched_credit *scinfo); int libxl_sched_credit_domain_set(libxl_ctx *ctx, uint32_t domid, libxl_sched_credit *scinfo); +int libxl_sched_credit2_domain_get(libxl_ctx *ctx, uint32_t domid, + libxl_sched_credit2 *scinfo); +int libxl_sched_credit2_domain_set(libxl_ctx *ctx, uint32_t domid, + libxl_sched_credit2 *scinfo); +int libxl_sched_sedf_domain_get(libxl_ctx *ctx, uint32_t domid, + libxl_sched_sedf *scinfo); +int libxl_sched_sedf_domain_set(libxl_ctx *ctx, uint32_t domid, + libxl_sched_sedf *scinfo); int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid, char *trigger_name, uint32_t vcpuid); int libxl_send_sysrq(libxl_ctx *ctx, uint32_t domid, char sysrq); diff -r a80a577c34ca tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/libxl_types.idl Wed Nov 23 15:41:32 2011 +0100 @@ -109,6 +109,7 @@ SHUTDOWN_* constant."""), ("cpu_time", uint64), ("vcpu_max_id", uint32), ("vcpu_online", uint32), + ("cpupool", uint32), ], dispose_fn=None) libxl_cpupoolinfo = Struct("cpupoolinfo", [ @@ -374,3 +375,15 @@ libxl_sched_credit = Struct("sched_credi ("weight", integer), ("cap", integer), ], dispose_fn=None) + +libxl_sched_credit2 = Struct("sched_credit2", [ + ("weight", integer), + ], dispose_fn=None) + +libxl_sched_sedf = Struct("sched_sedf", [ + ("period", integer), + ("slice", integer), + ("latency", integer), + ("extratime", integer), + ("weight", integer), + ], dispose_fn=None) diff -r a80a577c34ca tools/libxl/xl.h --- a/tools/libxl/xl.h Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/xl.h Wed Nov 23 15:41:32 2011 +0100 @@ -55,6 +55,8 @@ int main_vcpuset(int argc, char **argv); int main_memmax(int argc, char **argv); int main_memset(int argc, char **argv); int main_sched_credit(int argc, char **argv); +int main_sched_credit2(int argc, char **argv); +int main_sched_sedf(int argc, char **argv); int main_domid(int argc, char **argv); int main_domname(int argc, char **argv); int main_rename(int argc, char **argv); diff -r a80a577c34ca tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/xl_cmdimpl.c Wed Nov 23 15:41:32 2011 +0100 @@ -3699,29 +3699,204 @@ static int sched_credit_domain_set( return rc; } -static void sched_credit_domain_output( - int domid, libxl_sched_credit *scinfo) +static int sched_credit_domain_output( + int domid) { char *domname; + libxl_sched_credit scinfo; + int rc; + + if (domid < 0) { + printf("%-33s %4s %6s %4s\n", "Name", "ID", "Weight", "Cap"); + return 0; + } + rc = sched_credit_domain_get(domid, &scinfo); + if (rc) + return rc; domname = libxl_domid_to_name(ctx, domid); printf("%-33s %4d %6d %4d\n", domname, domid, - scinfo->weight, - scinfo->cap); + scinfo.weight, + scinfo.cap); free(domname); + return 0; +} + +static int sched_credit2_domain_get( + int domid, libxl_sched_credit2 *scinfo) +{ + int rc; + + rc = libxl_sched_credit2_domain_get(ctx, domid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_credit2_domain_get failed.\n"); + + return rc; +} + +static int sched_credit2_domain_set( + int domid, libxl_sched_credit2 *scinfo) +{ + int rc; + + rc = libxl_sched_credit2_domain_set(ctx, domid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_credit2_domain_set failed.\n"); + + return rc; +} + +static int sched_credit2_domain_output( + int domid) +{ + char *domname; + libxl_sched_credit2 scinfo; + int rc; + + if (domid < 0) { + printf("%-33s %4s %6s\n", "Name", "ID", "Weight"); + return 0; + } + rc = sched_credit2_domain_get(domid, &scinfo); + if (rc) + return rc; + domname = libxl_domid_to_name(ctx, domid); + printf("%-33s %4d %6d\n", + domname, + domid, + scinfo.weight); + free(domname); + return 0; +} + +static int sched_sedf_domain_get( + int domid, libxl_sched_sedf *scinfo) +{ + int rc; + + rc = libxl_sched_sedf_domain_get(ctx, domid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_sedf_domain_get failed.\n"); + + return rc; +} + +static int sched_sedf_domain_set( + int domid, libxl_sched_sedf *scinfo) +{ + int rc; + + rc = libxl_sched_sedf_domain_set(ctx, domid, scinfo); + if (rc) + fprintf(stderr, "libxl_sched_sedf_domain_set failed.\n"); + + return rc; +} + +static int sched_sedf_domain_output( + int domid) +{ + char *domname; + libxl_sched_sedf scinfo; + int rc; + + if (domid < 0) { + printf("%-33s %4s %6s %-6s %7s %5s %6s\n", "Name", "ID", "Period", "Slice", "Latency", "Extra", "Weight"); + return 0; + } + rc = sched_sedf_domain_get(domid, &scinfo); + if (rc) + return rc; + domname = libxl_domid_to_name(ctx, domid); + printf("%-33s %4d %6d %6d %7d %5d %6d\n", + domname, + domid, + scinfo.period, + scinfo.slice, + scinfo.latency, + scinfo.extratime, + scinfo.weight); + free(domname); + return 0; +} + +static int sched_domain_output( + uint32_t sched, int (*output)(int), const char *cpupool) +{ + libxl_dominfo *info; + libxl_cpupoolinfo *poolinfo = NULL; + uint32_t poolid; + char *poolname; + int nb_domain, n_pools = 0, i, p; + int rc = 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; + } + } + + info = libxl_list_domain(ctx, &nb_domain); + if (!info) { + fprintf(stderr, "libxl_domain_infolist failed.\n"); + return 1; + } + poolinfo = libxl_list_cpupool(ctx, &n_pools); + if (!poolinfo) { + fprintf(stderr, "error getting cpupool info\n"); + return -ERROR_NOMEM; + } + + for (p = 0; !rc && (p < n_pools); p++) { + if ((poolinfo[p].sched_id != sched) || + (cpupool && (poolid != poolinfo[p].poolid))) + continue; + + poolname = libxl_cpupoolid_to_name(ctx, poolinfo[p].poolid); + printf("Cpupool %s:\n", poolname); + free(poolname); + + output(-1); + for (i = 0; i < nb_domain; i++) { + if (info[i].cpupool != poolinfo[p].poolid) + continue; + rc = output(info[i].domid); + if (rc) + break; + } + } + if (poolinfo) { + for (p = 0; p < n_pools; p++) { + libxl_cpupoolinfo_dispose(poolinfo + p); + } + } + return 0; } int main_sched_credit(int argc, char **argv) { - libxl_dominfo *info; libxl_sched_credit scinfo; - int nb_domain, i; const char *dom = NULL; + const char *cpupool = NULL; int weight = 256, cap = 0, opt_w = 0, opt_c = 0; int opt, rc; - - while ((opt = def_getopt(argc, argv, "d:w:c:", "sched-credit", 0)) != -1) { + int option_index = 0; + static struct option long_options[] = { + {"domain", 1, 0, 'd'}, + {"weight", 1, 0, 'w'}, + {"cap", 1, 0, 'c'}, + {"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, &option_index); + if (opt == -1) + break; switch (opt) { case 0: case 2: return opt; @@ -3736,28 +3911,26 @@ int main_sched_credit(int argc, char **a cap = strtol(optarg, NULL, 10); opt_c = 1; break; + case 'p': + cpupool = optarg; + break; + case 'h': + help("sched-credit"); + return 0; } } + if (cpupool && (dom || opt_w || opt_c)) { + fprintf(stderr, "Specifying a cpupool is not allowed with other 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 */ - info = libxl_list_domain(ctx, &nb_domain); - if (!info) { - fprintf(stderr, "libxl_domain_infolist failed.\n"); - return 1; - } - - printf("%-33s %4s %6s %4s\n", "Name", "ID", "Weight", "Cap"); - for (i = 0; i < nb_domain; i++) { - rc = sched_credit_domain_get(info[i].domid, &scinfo); - if (rc) - return -rc; - sched_credit_domain_output(info[i].domid, &scinfo); - } + return -sched_domain_output(XEN_SCHEDULER_CREDIT, sched_credit_domain_output, cpupool); } else { find_domain(dom); @@ -3766,8 +3939,8 @@ int main_sched_credit(int argc, char **a return -rc; if (!opt_w && !opt_c) { /* output credit scheduler info */ - printf("%-33s %4s %6s %4s\n", "Name", "ID", "Weight", "Cap"); - sched_credit_domain_output(domid, &scinfo); + sched_credit_domain_output(-1); + return -sched_credit_domain_output(domid); } else { /* set credit scheduler paramaters */ if (opt_w) scinfo.weight = weight; @@ -3782,6 +3955,191 @@ int main_sched_credit(int argc, char **a return 0; } +int main_sched_credit2(int argc, char **argv) +{ + libxl_sched_credit2 scinfo; + const char *dom = NULL; + const char *cpupool = NULL; + int weight = 256, opt_w = 0; + int opt, rc; + int option_index = 0; + static struct option long_options[] = { + {"domain", 1, 0, 'd'}, + {"weight", 1, 0, 'w'}, + {"cpupool", 1, 0, 'p'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + while (1) { + opt = getopt_long(argc, argv, "d:w:p:h", long_options, &option_index); + if (opt == -1) + break; + switch (opt) { + case 0: case 2: + return opt; + case 'd': + dom = optarg; + break; + case 'w': + weight = strtol(optarg, NULL, 10); + opt_w = 1; + break; + case 'p': + cpupool = optarg; + break; + case 'h': + help("sched-credit"); + return 0; + } + } + + if (cpupool && (dom || opt_w)) { + fprintf(stderr, "Specifying a cpupool is not allowed with other options.\n"); + return 1; + } + if (!dom && opt_w) { + fprintf(stderr, "Must specify a domain.\n"); + return 1; + } + + if (!dom) { /* list all domain's credit scheduler info */ + return -sched_domain_output(XEN_SCHEDULER_CREDIT2, sched_credit2_domain_output, cpupool); + } else { + find_domain(dom); + + rc = sched_credit2_domain_get(domid, &scinfo); + if (rc) + return -rc; + + if (!opt_w) { /* output credit2 scheduler info */ + sched_credit2_domain_output(-1); + return -sched_credit2_domain_output(domid); + } else { /* set credit2 scheduler paramaters */ + if (opt_w) + scinfo.weight = weight; + rc = sched_credit2_domain_set(domid, &scinfo); + if (rc) + return -rc; + } + } + + return 0; +} + +int main_sched_sedf(int argc, char **argv) +{ + libxl_sched_sedf scinfo; + const char *dom = NULL; + const char *cpupool = NULL; + int period = 0, opt_p = 0; + int slice = 0, opt_s = 0; + int latency = 0, opt_l = 0; + int extra = 0, opt_e = 0; + int weight = 0, opt_w = 0; + int opt, rc; + int option_index = 0; + static struct option long_options[] = { + {"period", 1, 0, 'p'}, + {"slice", 1, 0, 's'}, + {"latency", 1, 0, 'l'}, + {"extra", 1, 0, 'e'}, + {"weight", 1, 0, 'w'}, + {"cpupool", 1, 0, 'c'}, + {"help", 0, 0, 'h'}, + {0, 0, 0, 0} + }; + + while (1) { + opt = getopt_long(argc, argv, "d:p:s:l:e:w:c:h", long_options, &option_index); + if (opt == -1) + break; + switch (opt) { + case 0: case 2: + return opt; + case 'd': + dom = optarg; + break; + case 'p': + period = strtol(optarg, NULL, 10); + opt_p = 1; + break; + case 's': + slice = strtol(optarg, NULL, 10); + opt_s = 1; + break; + case 'l': + latency = strtol(optarg, NULL, 10); + opt_l = 1; + break; + case 'e': + extra = strtol(optarg, NULL, 10); + opt_e = 1; + break; + case 'w': + weight = strtol(optarg, NULL, 10); + opt_w = 1; + break; + case 'c': + cpupool = optarg; + break; + case 'h': + help("sched-sedf"); + return 0; + } + } + + if (cpupool && (dom || opt_p || opt_s || opt_l || opt_e || opt_w)) { + fprintf(stderr, "Specifying a cpupool is not allowed with other options.\n"); + return 1; + } + if (!dom && (opt_p || opt_s || opt_l || opt_e || opt_w)) { + fprintf(stderr, "Must specify a domain.\n"); + return 1; + } + if (opt_w && (opt_p || opt_s)) { + fprintf(stderr, "Specifying a weight AND period or slice is not allowed.\n"); + } + + if (!dom) { /* list all domain's credit scheduler info */ + return -sched_domain_output(XEN_SCHEDULER_SEDF, sched_sedf_domain_output, cpupool); + } else { + find_domain(dom); + + rc = sched_sedf_domain_get(domid, &scinfo); + if (rc) + return -rc; + + if (!opt_p && !opt_s && !opt_l && !opt_e && !opt_w) { /* output sedf scheduler info */ + sched_sedf_domain_output(-1); + return -sched_sedf_domain_output(domid); + } else { /* set sedf scheduler paramaters */ + if (opt_p) { + scinfo.period = period; + scinfo.weight = 0; + } + if (opt_s) { + scinfo.slice = slice; + scinfo.weight = 0; + } + if (opt_l) + scinfo.latency = latency; + if (opt_e) + scinfo.extratime = extra; + if (opt_w) { + scinfo.weight = weight; + scinfo.period = 0; + scinfo.slice = 0; + } + rc = sched_sedf_domain_set(domid, &scinfo); + if (rc) + return -rc; + } + } + + return 0; +} + int main_domid(int argc, char **argv) { int opt; diff -r a80a577c34ca tools/libxl/xl_cmdtable.c --- a/tools/libxl/xl_cmdtable.c Wed Nov 23 15:36:22 2011 +0100 +++ b/tools/libxl/xl_cmdtable.c Wed Nov 23 15:41:32 2011 +0100 @@ -192,10 +192,35 @@ struct cmd_spec cmd_table[] = { { "sched-credit", &main_sched_credit, 0, "Get/set credit scheduler parameters", - "[-d [-w[=WEIGHT]|-c[=CAP]]]", + "[-d [-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)" + "-c CAP, --cap=CAP Cap (int)\n" + "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" + }, + { "sched-credit2", + &main_sched_credit2, 0, + "Get/set credit2 scheduler parameters", + "[-d [-w[=WEIGHT]]] [-p CPUPOOL]", + "-d DOMAIN, --domain=DOMAIN Domain to modify\n" + "-w WEIGHT, --weight=WEIGHT Weight (int)\n" + "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" + }, + { "sched-sedf", + &main_sched_sedf, 0, + "Get/set sedf scheduler parameters", + "[options]", + "-d DOMAIN, --domain=DOMAIN Domain to modify\n" + "-p MS, --period=MS Relative deadline(ms)\n" + "-s MS, --slice=MS Worst-case execution time(ms). (slice <\n" + " period)\n" + "-l MS, --latency=MS Scaled period (ms) when domain performs\n" + " heavy I/O\n" + "-e FLAG, --extra=FLAG Flag (0 or 1) controls if domain can run\n" + " in extra time\n" + "-w FLOAT, --weight=FLOAT CPU Period/slice (do not set with\n" + " --period/--slice)\n" + "-c CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" }, { "domid", &main_domid, 0,