Hi Aaron, This looks good -- queued for crash-7.1.9: https://github.com/crash-utility/crash/commit/9578af8191033607db56219b87819bdb49a029ca Thanks, Dave ----- Original Message ----- > Provide basic hugetlb usage as seen in /proc/meminfo for example: > > crash> kmem -i > PAGES TOTAL PERCENTAGE > TOTAL MEM 1931928 7.4 GB ---- > FREE 210771 823.3 MB 10% of TOTAL MEM > USED 1721157 6.6 GB 89% of TOTAL MEM > SHARED 338699 1.3 GB 17% of TOTAL MEM > BUFFERS 61676 240.9 MB 3% of TOTAL MEM > CACHED 0 0 0% of TOTAL MEM > SLAB 34280 133.9 MB 1% of TOTAL MEM > > TOTAL HUGE 524288 2 GB ---- > HUGE FREE 524288 2 GB 100% of TOTAL HUGE > > TOTAL SWAP 1970175 7.5 GB ---- > SWAP USED 30 120 KB 0% of TOTAL SWAP > SWAP FREE 1970145 7.5 GB 99% of TOTAL SWAP > > COMMIT LIMIT 2673995 10.2 GB ---- > COMMITTED 2068155 7.9 GB 77% of TOTAL LIMIT > > Signed-off-by: Aaron Tomlin <atomlin@xxxxxxxxxx> > --- > help.c | 3 +++ > memory.c | 41 +++++++++++++++++++++++++++++++++++------ > 2 files changed, 38 insertions(+), 6 deletions(-) > > diff --git a/help.c b/help.c > index 4ce2e0a..3be7dc4 100644 > --- a/help.c > +++ b/help.c > @@ -5981,6 +5981,9 @@ char *help_kmem[] = { > " CACHED 1276196 4.9 GB 64% of TOTAL MEM", > " SLAB 120410 470.4 MB 6% of TOTAL MEM", > " ", > +" TOTAL HUGE 524288 2 GB ----", > +" HUGE FREE 524288 2 GB 100% of TOTAL HUGE", > +" ", > " TOTAL SWAP 2498559 9.5 GB ----", > " SWAP USED 81978 320.2 MB 3% of TOTAL SWAP", > " SWAP FREE 2416581 9.2 GB 96% of TOTAL SWAP", > diff --git a/memory.c b/memory.c > index 99ea8be..08b5794 100644 > --- a/memory.c > +++ b/memory.c > @@ -237,7 +237,7 @@ static int vm_area_page_dump(ulong, ulong, ulong, ulong, > ulong, > struct reference *); > static void rss_page_types_init(void); > static int dump_swap_info(ulong, ulong *, ulong *); > -static int get_hugetlb_total_pages(ulong *); > +static int get_hugetlb_total_pages(ulong *, ulong *); > static void swap_info_init(void); > static char *get_swapdev(ulong, char *); > static void fill_swap_info(ulong); > @@ -8111,7 +8111,8 @@ dump_kmeminfo(void) > long committed; > ulong overcommit_kbytes = 0; > int overcommit_ratio; > - ulong hugetlb_total_pages; > + ulong hugetlb_total_pages, hugetlb_total_free_pages = 0; > + int done_hugetlb_calc = 0; > long nr_file_pages, nr_slab; > ulong swapper_space_nrpages; > ulong pct; > @@ -8319,6 +8320,22 @@ dump_kmeminfo(void) > pages_to_size(freelowmem_pages, buf), pct); > } > > + if (get_hugetlb_total_pages(&hugetlb_total_pages, > + &hugetlb_total_free_pages)) { > + done_hugetlb_calc = 1; > + > + fprintf(fp, "\n%13s %7ld %11s ----\n", > + "TOTAL HUGE", hugetlb_total_pages, > + pages_to_size(hugetlb_total_pages, buf)); > + pct = hugetlb_total_free_pages ? > + (hugetlb_total_free_pages * 100) / > + hugetlb_total_pages : 0; > + fprintf(fp, "%13s %7ld %11s %3ld%% of TOTAL HUGE\n", > + "HUGE FREE", > + hugetlb_total_free_pages, > + pages_to_size(hugetlb_total_free_pages, buf), pct); > + } > + > /* > * get swap data from dump_swap_info(). > */ > @@ -8347,6 +8364,7 @@ dump_kmeminfo(void) > "swap_info[%ld].swap_map at %lx is inaccessible\n", > totalused_pages, totalswap_pages); > } > + > /* > * Show committed memory > */ > @@ -8364,7 +8382,7 @@ dump_kmeminfo(void) > get_symbol_data("sysctl_overcommit_ratio", > sizeof(int), &overcommit_ratio); > > - if (!get_hugetlb_total_pages(&hugetlb_total_pages)) > + if (!done_hugetlb_calc) > goto bailout; > > allowed = ((totalram_pages - hugetlb_total_pages) > @@ -15293,19 +15311,21 @@ next_physpage(ulonglong paddr, ulonglong > *nextpaddr) > } > > static int > -get_hugetlb_total_pages(ulong *nr_total_pages) > +get_hugetlb_total_pages(ulong *nr_total_pages, ulong *nr_total_free_pages) > { > ulong hstate_p, vaddr; > int i, len; > ulong nr_huge_pages; > + ulong free_huge_pages; > uint horder; > > - *nr_total_pages = 0; > + *nr_total_pages = *nr_total_free_pages = 0; > if (kernel_symbol_exists("hstates")) { > > if (INVALID_SIZE(hstate) || > INVALID_MEMBER(hstate_order) || > - INVALID_MEMBER(hstate_nr_huge_pages)) > + INVALID_MEMBER(hstate_nr_huge_pages) || > + INVALID_MEMBER(hstate_free_huge_pages)) > return FALSE; > > len = get_array_length("hstates", NULL, 0); > @@ -15325,7 +15345,12 @@ get_hugetlb_total_pages(ulong *nr_total_pages) > KVADDR, &nr_huge_pages, sizeof(ulong), > "hstate_nr_huge_pages", FAULT_ON_ERROR); > > + readmem(vaddr + OFFSET(hstate_free_huge_pages), > + KVADDR, &free_huge_pages, sizeof(ulong), > + "hstate_free_huge_pages", FAULT_ON_ERROR); > + > *nr_total_pages += nr_huge_pages * (1 << horder); > + *nr_total_free_pages += free_huge_pages * (1 << horder); > } > } else if (kernel_symbol_exists("nr_huge_pages")) { > unsigned long hpage_shift = 21; > @@ -15334,8 +15359,12 @@ get_hugetlb_total_pages(ulong *nr_total_pages) > hpage_shift = 22; > get_symbol_data("nr_huge_pages", > sizeof(ulong), &nr_huge_pages); > + get_symbol_data("free_huge_pages", > + sizeof(ulong), &free_huge_pages); > *nr_total_pages = nr_huge_pages * ((1 << hpage_shift) / > machdep->pagesize); > + *nr_total_free_pages = free_huge_pages * > + ((1 << hpage_shift) / machdep->pagesize); > } > return TRUE; > } > -- > 2.9.3 > > -- > Crash-utility mailing list > Crash-utility@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/crash-utility > -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/crash-utility