[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/4] tools: add total/local memory bandwith monitoring
On Tue, Dec 23, 2014 at 04:54:39PM +0800, Chao Peng wrote: [...] > +static int libxl__psr_cmt_get_mem_bandwidth(libxl__gc *gc, uint32_t domid, > + xc_psr_cmt_type type, uint32_t socketid, uint32_t *bandwidth) > +{ > + uint64_t sample1, sample2; > + uint32_t upscaling_factor; > + int rc; > + > + rc = libxl__psr_cmt_get_l3_monitoring_data(gc, domid, > + type, socketid, &sample1); > + if (rc < 0) > + return ERROR_FAIL; > + > + usleep(10000); > + > + rc = libxl__psr_cmt_get_l3_monitoring_data(gc, domid, > + type, socketid, &sample2); > + if (rc < 0) > + return ERROR_FAIL; > + > + if (sample2 < sample1) { > + LOGE(ERROR, "event counter overflowed between two samplings"); > + return ERROR_FAIL; > + } > + What's the likelihood of counter overflows? Can we handle this more gracefully? Say, retry (with maximum retry cap) when counter overflows? > + rc = xc_psr_cmt_get_l3_upscaling_factor(CTX->xch, &upscaling_factor); > + if (rc < 0) { > + LOGE(ERROR, "failed to get L3 upscaling factor"); > + return ERROR_FAIL; > + } > + > + *bandwidth = (sample2 - sample1) * 100 * upscaling_factor / 1024; > + return rc; > +} > + > +int libxl_psr_cmt_get_total_mem_bandwidth(libxl_ctx *ctx, uint32_t domid, > + uint32_t socketid, uint32_t *bandwidth) > +{ > + GC_INIT(ctx); > + int rc; > + > + rc = libxl__psr_cmt_get_mem_bandwidth(gc, domid, > + XC_PSR_CMT_TOTAL_MEM_BANDWIDTH, socketid, bandwidth); > + GC_FREE; > + return rc; > +} > + > +int libxl_psr_cmt_get_local_mem_bandwidth(libxl_ctx *ctx, uint32_t domid, > + uint32_t socketid, uint32_t *bandwidth) > +{ > + GC_INIT(ctx); > + int rc; > + > + rc = libxl__psr_cmt_get_mem_bandwidth(gc, domid, > + XC_PSR_CMT_LOCAL_MEM_BANDWIDTH, socketid, bandwidth); > + GC_FREE; > + return rc; > +} > + > /* > * Local variables: > * mode: C > diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl > index f7fc695..8029a39 100644 > --- a/tools/libxl/libxl_types.idl > +++ b/tools/libxl/libxl_types.idl > @@ -693,4 +693,6 @@ libxl_event = Struct("event",[ > > libxl_psr_cmt_type = Enumeration("psr_cmt_type", [ > (1, "CACHE_OCCUPANCY"), > + (2, "TOTAL_MEM_BANDWIDTH"), > + (3, "LOCAL_MEM_BANDWIDTH"), > ]) > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index f4534ec..e0435dd 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -7867,6 +7867,16 @@ static void psr_cmt_print_domain_l3_info(libxl_dominfo > *dominfo, > socketid, &data) ) > printf("%13u KB", data); > break; > + case LIBXL_PSR_CMT_TYPE_TOTAL_MEM_BANDWIDTH: > + if ( !libxl_psr_cmt_get_total_mem_bandwidth(ctx, dominfo->domid, Coding style. > + socketid, &data) ) > + printf("%11u KB/s", data); > + break; > + case LIBXL_PSR_CMT_TYPE_LOCAL_MEM_BANDWIDTH: > + if ( !libxl_psr_cmt_get_local_mem_bandwidth(ctx, dominfo->domid, Ditto. Wei. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |