Re: [PATCH 2/5] perf kmem: Analyze page allocator events also

From: Namhyung Kim
Date: Mon Mar 23 2015 - 20:25:17 EST


On Tue, Mar 24, 2015 at 02:32:17AM +0900, Joonsoo Kim wrote:
> 2015-03-23 15:30 GMT+09:00 Namhyung Kim <namhyung@xxxxxxxxxx>:
> > The perf kmem command records and analyze kernel memory allocation
> > only for SLAB objects. This patch implement a simple page allocator
> > analyzer using kmem:mm_page_alloc and kmem:mm_page_free events.
> >
> > It adds two new options of --slab and --page. The --slab option is
> > for analyzing SLAB allocator and that's what perf kmem currently does.
> >
> > The new --page option enables page allocator events and analyze kernel
> > memory usage in page unit. Currently, 'stat --alloc' subcommand is
> > implemented only.
> >
> > If none of these --slab nor --page is specified, --slab is implied.
> >
> > # perf kmem stat --page --alloc --line 10
> >
> > -------------------------------------------------------------------------------------
> > Page | Total alloc (KB) | Hits | Order | Migration type | GFP flags
> > -------------------------------------------------------------------------------------
> > ffffea0015e48e00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea0015e47400 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea001440f600 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea001440cc00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c6300 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c5c00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c5000 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c4f00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c4e00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ffffea00140c4d00 | 16 | 1 | 2 | RECLAIMABLE | 00285250
> > ... | ... | ... | ... | ... | ...
> > -------------------------------------------------------------------------------------
>
> Tracepoint on mm_page_alloc print out pfn as well as pointer of struct page.
> How about printing pfn rather than pointer of struct page?

I'd really like to have pfn rather than struct page. But I don't know
how to convert page pointer to pfn in userspace.

The output of tracepoint via $debugfs/tracing/trace file is generated
from kernel-side, so it can easily have pfn from page pointer. But
tracepoint itself only saves page pointer and we need to convert/print
it in userspace.

Yes, perf script (or libtraceevent) shows pfn when printing those
events. But that's bogus since it cannot determine the size of the
struct page so the pointer arithmetic in open-coded page_to_pfn()
which is saved in the print_fmt of the tracepoint will end up with an
normal integer arithmatic.

Do I miss something?

Thanks,
Namhyung
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/