Make some internal routines common so that total/local memory bandwidth
monitoring in the next patch can make use of them.
Signed-off-by: Chao Peng chao.p.p...@linux.intel.com
---
tools/libxl/libxl_psr.c | 44 -
tools/libxl/xl_cmdimpl.c | 54 +++---
2 files changed, 61 insertions(+), 37 deletions(-)
diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c
index 84819e6..c88c421 100644
--- a/tools/libxl/libxl_psr.c
+++ b/tools/libxl/libxl_psr.c
@@ -176,20 +176,16 @@ int libxl_psr_cmt_get_l3_event_mask(libxl_ctx *ctx,
uint32_t *event_mask)
return rc;
}
-int libxl_psr_cmt_get_cache_occupancy(libxl_ctx *ctx,
- uint32_t domid,
- uint32_t socketid,
- uint32_t *l3_cache_occupancy)
+static int libxl__psr_cmt_get_l3_monitoring_data(libxl__gc *gc,
+ uint32_t domid,
+ xc_psr_cmt_type type,
+ uint32_t socketid,
+ uint64_t *data)
{
-GC_INIT(ctx);
-
unsigned int rmid;
-uint32_t upscaling_factor;
-uint64_t monitor_data;
int cpu, rc;
-xc_psr_cmt_type type;
-rc = xc_psr_cmt_get_domain_rmid(ctx-xch, domid, rmid);
+rc = xc_psr_cmt_get_domain_rmid(CTX-xch, domid, rmid);
if (rc 0 || rmid == 0) {
LOGE(ERROR, fail to get the domain rmid,
or domain is not attached with platform QoS monitoring service);
@@ -204,14 +200,32 @@ int libxl_psr_cmt_get_cache_occupancy(libxl_ctx *ctx,
goto out;
}
-type = XC_PSR_CMT_L3_OCCUPANCY;
-rc = xc_psr_cmt_get_data(ctx-xch, rmid, cpu, type, monitor_data);
+rc = xc_psr_cmt_get_data(CTX-xch, rmid, cpu, type, data);
if (rc 0) {
LOGE(ERROR, failed to get monitoring data);
rc = ERROR_FAIL;
-goto out;
}
+out:
+return rc;
+}
+
+int libxl_psr_cmt_get_cache_occupancy(libxl_ctx *ctx,
+ uint32_t domid,
+ uint32_t socketid,
+ uint32_t *l3_cache_occupancy)
+{
+GC_INIT(ctx);
+uint64_t data;
+uint32_t upscaling_factor;
+int rc;
+
+rc = libxl__psr_cmt_get_l3_monitoring_data(gc, domid,
+ XC_PSR_CMT_L3_OCCUPANCY,
+ socketid, data);
+if (rc 0)
+goto out;
+
rc = xc_psr_cmt_get_l3_upscaling_factor(ctx-xch, upscaling_factor);
if (rc 0) {
LOGE(ERROR, failed to get L3 upscaling factor);
@@ -219,8 +233,8 @@ int libxl_psr_cmt_get_cache_occupancy(libxl_ctx *ctx,
goto out;
}
-*l3_cache_occupancy = upscaling_factor * monitor_data / 1024;
-rc = 0;
+*l3_cache_occupancy = upscaling_factor * data / 1024;
+
out:
GC_FREE;
return rc;
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 24f3c8d..09ca73e 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -7846,12 +7846,13 @@ out:
}
#ifdef LIBXL_HAVE_PSR_CMT
-static void psr_cmt_print_domain_cache_occupancy(libxl_dominfo *dominfo,
- uint32_t nr_sockets)
+static void psr_cmt_print_domain_l3_info(libxl_dominfo *dominfo,
+ libxl_psr_cmt_type type,
+ uint32_t nr_sockets)
{
char *domain_name;
uint32_t socketid;
-uint32_t l3_cache_occupancy;
+uint32_t data;
if (!libxl_psr_cmt_domain_attached(ctx, dominfo-domid))
return;
@@ -7861,15 +7862,21 @@ static void
psr_cmt_print_domain_cache_occupancy(libxl_dominfo *dominfo,
free(domain_name);
for (socketid = 0; socketid nr_sockets; socketid++) {
-if (!libxl_psr_cmt_get_cache_occupancy(ctx, dominfo-domid, socketid,
- l3_cache_occupancy))
-printf(%13u KB, l3_cache_occupancy);
+switch (type) {
+case LIBXL_PSR_CMT_TYPE_CACHE_OCCUPANCY:
+if (!libxl_psr_cmt_get_cache_occupancy(ctx, dominfo-domid,
+ socketid, data))
+printf(%13u KB, data);
+break;
+default:
+return;
+}
}
printf(\n);
}
-static int psr_cmt_show_cache_occupancy(uint32_t domid)
+static int psr_cmt_show_l3_info(libxl_psr_cmt_type type, uint32_t domid)
{
uint32_t i, socketid, nr_sockets, total_rmid;
uint32_t l3_cache_size;
@@ -7905,19 +7912,22 @@ static int psr_cmt_show_cache_occupancy(uint32_t domid)
printf(%14s %d, Socket, socketid);
printf(\n);
-/* Total L3 cache size */
-printf(%-46s, Total L3 Cache Size);
-