|
[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 |