[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.6] tools/libxl: fix socket display error for CMT
commit e56cca18f33ad58bdafb0a5dcede4bf9953a786e Author: Chao Peng <chao.p.peng@xxxxxxxxxxxxxxx> AuthorDate: Tue Sep 29 15:49:51 2015 +0800 Commit: Ian Campbell <ian.campbell@xxxxxxxxxx> CommitDate: Tue Sep 29 10:59:52 2015 +0100 tools/libxl: fix socket display error for CMT When displaying the CMT information for all the sockets, we assume socket number is continuous. This is not true in the hotplug case. For instance, when the 3rd socket is plugged out on a 4-socket system, the available sockets numbers are 1,2,4 but current we will display the CMT information for socket 1,2,3. The fix is getting the socket bitmap for all the sockets on the system first and then displaying CMT information for_each_set_bit in that bitmap. Signed-off-by: Chao Peng <chao.p.peng@xxxxxxxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> Reviewed-by: Dario Faggioli <dario.faggioli@xxxxxxxxxx> (cherry picked from commit a4943f6bdd2bcef9e20020a74e41aaeb77e42905) --- tools/libxl/xl_cmdimpl.c | 43 +++++++++++++++++++++++-------------------- 1 files changed, 23 insertions(+), 20 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 7dbf37f..c61d2dc 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -8183,7 +8183,7 @@ static int psr_cmt_get_mem_bandwidth(uint32_t domid, static void psr_cmt_print_domain_info(libxl_dominfo *dominfo, libxl_psr_cmt_type type, - uint32_t nr_sockets) + libxl_bitmap *socketmap) { char *domain_name; uint32_t socketid; @@ -8196,7 +8196,7 @@ static void psr_cmt_print_domain_info(libxl_dominfo *dominfo, printf("%-40s %5d", domain_name, dominfo->domid); free(domain_name); - for (socketid = 0; socketid < nr_sockets; socketid++) { + libxl_for_each_set_bit(socketid, *socketmap) { switch (type) { case LIBXL_PSR_CMT_TYPE_CACHE_OCCUPANCY: if (!libxl_psr_cmt_get_sample(ctx, dominfo->domid, type, socketid, @@ -8219,9 +8219,9 @@ static void psr_cmt_print_domain_info(libxl_dominfo *dominfo, static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) { - uint32_t i, socketid, nr_sockets, total_rmid; + uint32_t i, socketid, total_rmid; uint32_t l3_cache_size; - libxl_physinfo info; + libxl_bitmap socketmap; int rc, nr_domains; if (!libxl_psr_cmt_enabled(ctx)) { @@ -8235,41 +8235,39 @@ static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) return -1; } - libxl_physinfo_init(&info); - rc = libxl_get_physinfo(ctx, &info); + libxl_bitmap_init(&socketmap); + libxl_socket_bitmap_alloc(ctx, &socketmap, 0); + rc = libxl_get_online_socketmap(ctx, &socketmap); if (rc < 0) { - fprintf(stderr, "Failed getting physinfo, rc: %d\n", rc); - libxl_physinfo_dispose(&info); - return -1; + fprintf(stderr, "Failed getting available sockets, rc: %d\n", rc); + goto out; } - nr_sockets = info.nr_cpus / info.threads_per_core / info.cores_per_socket; - libxl_physinfo_dispose(&info); rc = libxl_psr_cmt_get_total_rmid(ctx, &total_rmid); if (rc < 0) { fprintf(stderr, "Failed to get max RMID value\n"); - return -1; + goto out; } printf("Total RMID: %d\n", total_rmid); /* Header */ printf("%-40s %5s", "Name", "ID"); - for (socketid = 0; socketid < nr_sockets; socketid++) + libxl_for_each_set_bit(socketid, socketmap) printf("%14s %d", "Socket", socketid); printf("\n"); 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++) { + libxl_for_each_set_bit(socketid, socketmap) { 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; + goto out; } printf("%13u KB", l3_cache_size); } @@ -8283,9 +8281,10 @@ static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) libxl_dominfo_init(&dominfo); if (libxl_domain_info(ctx, &dominfo, domid)) { fprintf(stderr, "Failed to get domain info for %d\n", domid); - return -1; + rc = -1; + goto out; } - psr_cmt_print_domain_info(&dominfo, type, nr_sockets); + psr_cmt_print_domain_info(&dominfo, type, &socketmap); libxl_dominfo_dispose(&dominfo); } else @@ -8293,13 +8292,17 @@ static int psr_cmt_show(libxl_psr_cmt_type type, uint32_t domid) libxl_dominfo *list; if (!(list = libxl_list_domain(ctx, &nr_domains))) { fprintf(stderr, "Failed to get domain info for domain list.\n"); - return -1; + rc = -1; + goto out; } for (i = 0; i < nr_domains; i++) - psr_cmt_print_domain_info(list + i, type, nr_sockets); + psr_cmt_print_domain_info(list + i, type, &socketmap); libxl_dominfo_list_free(list, nr_domains); } - return 0; + +out: + libxl_bitmap_dispose(&socketmap); + return rc; } int main_psr_cmt_attach(int argc, char **argv) -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.6 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |