From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Peng Subject: [PATCH v5 5/6] tools: code refactoring for MBM Date: Wed, 21 Jan 2015 19:19:23 +0800 Message-ID: <1421839164-26037-6-git-send-email-chao.p.peng@linux.intel.com> References: <1421839164-26037-1-git-send-email-chao.p.peng@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1421839164-26037-1-git-send-email-chao.p.peng@linux.intel.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: wei.liu2@citrix.com, Ian.Campbell@citrix.com, stefano.stabellini@eu.citrix.com, Ian.Jackson@eu.citrix.com, will.auld@intel.com, JBeulich@suse.com, keir@xen.org List-Id: xen-devel@lists.xenproject.org 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 Acked-by: Wei Liu --- 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 8fce979..1827c63 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -7807,12 +7807,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; @@ -7822,15 +7823,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; @@ -7866,19 +7873,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"); - for (socketid = 0; socketid < nr_sockets; socketid++) { - rc = libxl_psr_cmt_get_l3_cache_size(ctx, socketid, &l3_cache_size); - if (rc < 0) { - fprintf(stderr, - "Failed to get system l3 cache size for socket:%d\n", - socketid); - return -1; - } - printf("%13u KB", l3_cache_size); + if (type == LIBXL_PSR_CMT_TYPE_CACHE_OCCUPANCY) { + /* Total L3 cache size */ + printf("%-46s", "Total L3 Cache Size"); + for (socketid = 0; socketid < nr_sockets; socketid++) { + rc = libxl_psr_cmt_get_l3_cache_size(ctx, socketid, + &l3_cache_size); + if (rc < 0) { + fprintf(stderr, + "Failed to get system l3 cache size for socket:%d\n", + socketid); + return -1; + } + printf("%13u KB", l3_cache_size); + } + printf("\n"); } - printf("\n"); /* Each domain */ if (domid != INVALID_DOMID) { @@ -7887,7 +7897,7 @@ static int psr_cmt_show_cache_occupancy(uint32_t domid) fprintf(stderr, "Failed to get domain info for %d\n", domid); return -1; } - psr_cmt_print_domain_cache_occupancy(&dominfo, nr_sockets); + psr_cmt_print_domain_l3_info(&dominfo, type, nr_sockets); } else { @@ -7897,7 +7907,7 @@ static int psr_cmt_show_cache_occupancy(uint32_t domid) return -1; } for (i = 0; i < nr_domains; i++) - psr_cmt_print_domain_cache_occupancy(list + i, nr_sockets); + psr_cmt_print_domain_l3_info(list + i, type, nr_sockets); libxl_dominfo_list_free(list, nr_domains); } return 0; @@ -7956,7 +7966,7 @@ int main_psr_cmt_show(int argc, char **argv) switch (type) { case LIBXL_PSR_CMT_TYPE_CACHE_OCCUPANCY: - ret = psr_cmt_show_cache_occupancy(domid); + ret = psr_cmt_show_l3_info(type, domid); break; default: help("psr-cmt-show"); -- 1.9.1