[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH 6/7] xl: report per-CPU cache occupancy up to libxl
Now that the functionallity is wired, from within Xen up to libxl, use that to implement a new mode for `xl psr-cmt-show', by means of the '-c' switch. With some pCPUs attached to CMT, the output looks as follows: [root@redbrick ~]# xl psr-cmt-show -c cache_occupancy Socket 0: 46080 KB Total L3 Cache Size CPU 0: 936 KB CPU 1: 72 KB CPU 3: 0 KB Socket 1: 46080 KB Total L3 Cache Size CPU 36: 144 KB CPU 48: 0 KB Socket 2: 46080 KB Total L3 Cache Size CPU 74: 0 KB CPU 92: 0 KB Socket 3: 46080 KB Total L3 Cache Size CPU 121: 0 KB XXX Columns can be aligned better, I know. ;-P Signed-off-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> --- tools/libxl/xl_cmdimpl.c | 88 +++++++++++++++++++++++++++++++++++++++++---- tools/libxl/xl_cmdtable.c | 2 + 2 files changed, 82 insertions(+), 8 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 394b55d..d314947 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -8098,6 +8098,62 @@ static void psr_cmt_print_domain_info(libxl_dominfo *dominfo, printf("\n"); } +static bool psr_cmt_print_cpu_info(unsigned int cpu) +{ + uint32_t l3_occ; + + if (libxl_psr_cmt_get_cpu_cache_occupancy(ctx, cpu, &l3_occ)) { + fprintf(stderr, "can't read the cache occupancy for cpu %u\n", cpu); + return false; + } + + fprintf(stdout, " CPU %u: %11"PRIu32" KB\n", cpu, l3_occ); + + return true; +} + +static int psr_cmt_show_cpus(int cpu) +{ + libxl_cputopology *info; + int i, rc = 0, nr_cpus = 0; + int socket; + + info = libxl_get_cpu_topology(ctx, &nr_cpus); + if (info == NULL) { + fprintf(stderr, "libxl_get_topologyinfo failed.\n"); + return 1; + } + + socket = -1; + for (i = cpu > 0 ? cpu : 0; i <= (cpu > 0 ? cpu : nr_cpus-1); i++) { + uint32_t l3_size; + + if (!libxl_psr_cmt_cpu_attached(ctx, i)) + continue; + + if (socket != info[i].socket) { + if (libxl_psr_cmt_get_l3_cache_size(ctx, info[i].socket, + &l3_size)) { + fprintf(stderr, "Failed to get L3 cache size for socket:%d\n", + info[i].socket); + rc = 1; + goto out; + } + fprintf(stdout, "Socket %u:%11"PRIu32" KB Total L3 Cache Size\n", + info[i].socket, l3_size); + socket = info[i].socket; + } + if (!psr_cmt_print_cpu_info(i)) { + rc = 1; + goto out; + } + } + + out: + libxl_cputopology_list_free(info, nr_cpus); + return rc; +} + static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) { uint32_t i, socketid, nr_sockets, total_rmid; @@ -8105,11 +8161,6 @@ static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) libxl_physinfo info; int rc, nr_domains; - if (!libxl_psr_cmt_enabled(ctx)) { - fprintf(stderr, "CMT is disabled in the system\n"); - return -1; - } - if (!libxl_psr_cmt_type_supported(ctx, type)) { fprintf(stderr, "Monitor type '%s' is not supported in the system\n", libxl_psr_cmt_type_to_string(type)); @@ -8213,11 +8264,20 @@ int main_psr_cmt_detach(int argc, char **argv) int main_psr_cmt_show(int argc, char **argv) { int opt, ret = 0; + bool cpus = false; uint32_t domid; libxl_psr_cmt_type type; + static struct option opts[] = { + {"cpus", 0, 0, 'c'}, + COMMON_LONG_OPTS, + {0, 0, 0, 0} + }; - SWITCH_FOREACH_OPT(opt, "", NULL, "psr-cmt-show", 1) { - /* No options */ + + SWITCH_FOREACH_OPT(opt, "c", opts, "psr-cmt-show", 1) { + case 'c': + cpus = true; + break; } if (!strcmp(argv[optind], "cache_occupancy")) @@ -8231,6 +8291,15 @@ int main_psr_cmt_show(int argc, char **argv) return 2; } + if (cpus) { + if (type != LIBXL_PSR_CMT_TYPE_CACHE_OCCUPANCY) { + fprintf(stderr, "CPU monitoring supported for cache only\n"); + return -1; + } + ret = psr_cmt_show_cpus(-1); + return ret; + } + if (optind + 1 >= argc) domid = INVALID_DOMID; else if (optind + 1 == argc - 1) @@ -8240,6 +8309,11 @@ int main_psr_cmt_show(int argc, char **argv) return 2; } + if (!libxl_psr_cmt_enabled(ctx)) { + fprintf(stderr, "CMT is disabled in the system\n"); + return -1; + } + ret = psr_cmt_show(type, domid); return ret; diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index 9284887..5bbe406 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -537,7 +537,7 @@ struct cmd_spec cmd_table[] = { { "psr-cmt-show", &main_psr_cmt_show, 0, 1, "Show Cache Monitoring Technology information", - "<PSR-CMT-Type> <Domain>", + "<PSR-CMT-Type> [-c | <Domain>]", "Available monitor types:\n" "\"cache_occupancy\": Show L3 cache occupancy(KB)\n" "\"total_mem_bandwidth\": Show total memory bandwidth(KB/s)\n" _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |