|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xl cpupool-list: add option to list domains
On 2/18/2014 2:38 AM, Juergen Gross wrote:
> It is rather complicated to obtain the cpupool a domain lives in. Add an
> option -d (or --domains) to list all domains running in a cpupool.
>
> Signed-off-by: Juergen Gross <juergen.gross@xxxxxxxxxxxxxx>
FWIW, this patch works as advertised.
arlx@arlx-dw-47:~$ sudo xl cpupool-list -d
Name CPUs Sched Active Domain list
Pool-0 1 credit y Domain-0
test 1 arinc653 y dom1, dom2
arlx@arlx-dw-47:~$ sudo xl cpupool-list -c
Name CPU list
Pool-0 0
test 1
arlx@arlx-dw-47:~$ sudo xl cpupool-list -c -d
specifying both cpu- and domain-list not allowed
arlx@arlx-dw-47:~$ sudo xl cpupool-list -c test
Name CPU list
test 1
arlx@arlx-dw-47:~$ sudo xl cpupool-list -d test
Name CPUs Sched Active Domain list
test 1 arinc653 y dom1, dom2
--
Nathan Studer
> ---
> docs/man/xl.pod.1 | 5 ++++-
> tools/libxl/xl_cmdimpl.c | 47
> ++++++++++++++++++++++++++++++++++++++-------
> tools/libxl/xl_cmdtable.c | 5 +++--
> 3 files changed, 47 insertions(+), 10 deletions(-)
>
> diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
> index e7b9de2..547af6d 100644
> --- a/docs/man/xl.pod.1
> +++ b/docs/man/xl.pod.1
> @@ -1019,10 +1019,13 @@ Use the given configuration file.
>
> =back
>
> -=item B<cpupool-list> [I<-c|--cpus>] [I<cpu-pool>]
> +=item B<cpupool-list> [I<-c|--cpus>] [I<-d|--domains>] [I<cpu-pool>]
>
> List CPU pools on the host.
> If I<-c> is specified, B<xl> prints a list of CPUs used by I<cpu-pool>.
> +If I<-d> is specified, B<xl> prints a list of domains in I<cpu-pool> instead
> +of the domain count.
> +I<-c> and I<-d> are mutually exclusive.
>
> =item B<cpupool-destroy> I<cpu-pool>
>
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index aff6f90..c7b9fce 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -6754,23 +6754,32 @@ int main_cpupoollist(int argc, char **argv)
> int opt;
> static struct option opts[] = {
> {"cpus", 0, 0, 'c'},
> + {"domains", 0, 0, 'd'},
> COMMON_LONG_OPTS,
> {0, 0, 0, 0}
> };
> - int opt_cpus = 0;
> + int opt_cpus = 0, opt_domains = 0;
> const char *pool = NULL;
> libxl_cpupoolinfo *poolinfo;
> - int n_pools, p, c, n;
> + libxl_dominfo *dominfo = NULL;
> + int n_pools, n_domains, p, c, n;
> uint32_t poolid;
> char *name;
> int ret = 0;
>
> - SWITCH_FOREACH_OPT(opt, "hc", opts, "cpupool-list", 0) {
> + SWITCH_FOREACH_OPT(opt, "hcd", opts, "cpupool-list", 0) {
> case 'c':
> opt_cpus = 1;
> break;
> + case 'd':
> + opt_domains = 1;
> + break;
> }
>
> + if (opt_cpus && opt_domains) {
> + fprintf(stderr, "specifying both cpu- and domain-list not
> allowed\n");
> + return -ERROR_FAIL;
> + }
> if (optind < argc) {
> pool = argv[optind];
> if (libxl_name_to_cpupoolid(ctx, pool, &poolid)) {
> @@ -6784,12 +6793,21 @@ int main_cpupoollist(int argc, char **argv)
> fprintf(stderr, "error getting cpupool info\n");
> return -ERROR_NOMEM;
> }
> + if (opt_domains) {
> + dominfo = libxl_list_domain(ctx, &n_domains);
> + if (!dominfo) {
> + fprintf(stderr, "error getting domain info\n");
> + ret = -ERROR_NOMEM;
> + goto out;
> + }
> + }
>
> printf("%-19s", "Name");
> if (opt_cpus)
> printf("CPU list\n");
> else
> - printf("CPUs Sched Active Domain count\n");
> + printf("CPUs Sched Active Domain %s\n",
> + opt_domains ? "list" : "count");
>
> for (p = 0; p < n_pools; p++) {
> if (!ret && (!pool || (poolinfo[p].poolid == poolid))) {
> @@ -6808,15 +6826,30 @@ int main_cpupoollist(int argc, char **argv)
> n++;
> }
> if (!opt_cpus) {
> - printf("%3d %9s y %4d", n,
> - libxl_scheduler_to_string(poolinfo[p].sched),
> - poolinfo[p].n_dom);
> + printf("%3d %9s y ", n,
> + libxl_scheduler_to_string(poolinfo[p].sched));
> + if (opt_domains) {
> + c = 0;
> + for (n = 0; n < n_domains; n++) {
> + if (poolinfo[p].poolid == dominfo[n].cpupool) {
> + name = libxl_domid_to_name(ctx,
> dominfo[n].domid);
> + printf("%s%s", c ? ", " : "", name);
> + free(name);
> + c++;
> + }
> + }
> + }
> + else
> + printf(" %4d", poolinfo[p].n_dom);
> }
> printf("\n");
> }
> }
> }
>
> + if (dominfo)
> + libxl_dominfo_list_free(dominfo, n_domains);
> +out:
> libxl_cpupoolinfo_list_free(poolinfo, n_pools);
>
> return ret;
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index ebe0220..8a52d26 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -426,8 +426,9 @@ struct cmd_spec cmd_table[] = {
> { "cpupool-list",
> &main_cpupoollist, 0, 0,
> "List CPU pools on host",
> - "[-c|--cpus] [<CPU Pool>]",
> - "-c, --cpus Output list of CPUs used by a pool"
> + "[-c|--cpus] [-d|--domains] [<CPU Pool>]",
> + "-c, --cpus Output list of CPUs used by a pool\n"
> + "-d, --domains Output list of domains running in a
> pool"
> },
> { "cpupool-destroy",
> &main_cpupooldestroy, 0, 1,
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |