[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Support cpupools in xl sched-credit
# HG changeset patch # User Juergen Gross <juergen.gross@xxxxxxxxxxxxxx> # Date 1322483235 -3600 # Node ID 9aaa11d5fab3a47d545a07797e80f7cb5ff7b57e # Parent 864029f7f60083e4f1876f16d97319d972ef6164 Support cpupools in xl sched-credit Adds cpupool awareness to output of xl sched-credit. Output can now be restricted to a specific cpupool. The domains are printed for each cpupool seperately. The loop over cpupools and domains is seperated from the main command implementation to be able to support other schedulers as well. Signed-off-by: juergen.gross@xxxxxxxxxxxxxx Acked-by: Ian Jackson <ian.jackson.citrix.com> Committed-by: Ian Jackson <ian.jackson.citrix.com> --- diff -r 864029f7f600 -r 9aaa11d5fab3 docs/man/xl.pod.1 --- a/docs/man/xl.pod.1 Mon Nov 28 13:23:31 2011 +0100 +++ b/docs/man/xl.pod.1 Mon Nov 28 13:27:15 2011 +0100 @@ -670,6 +670,10 @@ 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 =back diff -r 864029f7f600 -r 9aaa11d5fab3 tools/libxl/libxl.c --- a/tools/libxl/libxl.c Mon Nov 28 13:23:31 2011 +0100 +++ b/tools/libxl/libxl.c Mon Nov 28 13:27:15 2011 +0100 @@ -361,6 +361,7 @@ 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) diff -r 864029f7f600 -r 9aaa11d5fab3 tools/libxl/libxl_types.idl --- a/tools/libxl/libxl_types.idl Mon Nov 28 13:23:31 2011 +0100 +++ b/tools/libxl/libxl_types.idl Mon Nov 28 13:27:15 2011 +0100 @@ -116,6 +116,7 @@ ("cpu_time", uint64), ("vcpu_max_id", uint32), ("vcpu_online", uint32), + ("cpupool", uint32), ], dispose_fn=None) libxl_cpupoolinfo = Struct("cpupoolinfo", [ diff -r 864029f7f600 -r 9aaa11d5fab3 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Mon Nov 28 13:23:31 2011 +0100 +++ b/tools/libxl/xl_cmdimpl.c Mon Nov 28 13:27:15 2011 +0100 @@ -3783,25 +3783,90 @@ 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_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; int option_index = 0; @@ -3809,12 +3874,14 @@ {"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:h", long_options, &option_index); + opt = getopt_long(argc, argv, "d:w:c:p:h", long_options, + &option_index); if (opt == -1) break; switch (opt) { @@ -3831,31 +3898,28 @@ 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); @@ -3864,8 +3928,8 @@ 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; diff -r 864029f7f600 -r 9aaa11d5fab3 tools/libxl/xl_cmdtable.c --- a/tools/libxl/xl_cmdtable.c Mon Nov 28 13:23:31 2011 +0100 +++ b/tools/libxl/xl_cmdtable.c Mon Nov 28 13:27:15 2011 +0100 @@ -192,10 +192,11 @@ { "sched-credit", &main_sched_credit, 0, "Get/set credit scheduler parameters", - "[-d <Domain> [-w[=WEIGHT]|-c[=CAP]]]", + "[-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)" + "-c CAP, --cap=CAP Cap (int)\n" + "-p CPUPOOL, --cpupool=CPUPOOL Restrict output to CPUPOOL" }, { "domid", &main_domid, 0, _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |