tracing, mm: Record pfn instead of pointer to struct page
The struct page is opaque for userspace tools, so it'd be better to save pfn in order to identify page frames. The textual output of $debugfs/tracing/trace file remains unchanged and only raw (binary) data format is changed - but thanks to libtraceevent, userspace tools which deal with the raw data (like perf and trace-cmd) can parse the format easily. So impact on the userspace will also be minimal. Signed-off-by: Namhyung Kim <namhyung@kernel.org> Based-on-patch-by: Joonsoo Kim <js1304@gmail.com> Acked-by: Ingo Molnar <mingo@kernel.org> Acked-by: Steven Rostedt <rostedt@goodmis.org> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: Minchan Kim <minchan@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/1428298576-9785-3-git-send-email-namhyung@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
066450be41
commit
9fdd8a875c
|
@ -18,14 +18,14 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache,
|
||||||
TP_ARGS(page),
|
TP_ARGS(page),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct page *, page)
|
__field(unsigned long, pfn)
|
||||||
__field(unsigned long, i_ino)
|
__field(unsigned long, i_ino)
|
||||||
__field(unsigned long, index)
|
__field(unsigned long, index)
|
||||||
__field(dev_t, s_dev)
|
__field(dev_t, s_dev)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page_to_pfn(page);
|
||||||
__entry->i_ino = page->mapping->host->i_ino;
|
__entry->i_ino = page->mapping->host->i_ino;
|
||||||
__entry->index = page->index;
|
__entry->index = page->index;
|
||||||
if (page->mapping->host->i_sb)
|
if (page->mapping->host->i_sb)
|
||||||
|
@ -37,8 +37,8 @@ DECLARE_EVENT_CLASS(mm_filemap_op_page_cache,
|
||||||
TP_printk("dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu",
|
TP_printk("dev %d:%d ino %lx page=%p pfn=%lu ofs=%lu",
|
||||||
MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
|
MAJOR(__entry->s_dev), MINOR(__entry->s_dev),
|
||||||
__entry->i_ino,
|
__entry->i_ino,
|
||||||
__entry->page,
|
pfn_to_page(__entry->pfn),
|
||||||
page_to_pfn(__entry->page),
|
__entry->pfn,
|
||||||
__entry->index << PAGE_SHIFT)
|
__entry->index << PAGE_SHIFT)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -154,18 +154,18 @@ TRACE_EVENT(mm_page_free,
|
||||||
TP_ARGS(page, order),
|
TP_ARGS(page, order),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field( struct page *, page )
|
__field( unsigned long, pfn )
|
||||||
__field( unsigned int, order )
|
__field( unsigned int, order )
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page_to_pfn(page);
|
||||||
__entry->order = order;
|
__entry->order = order;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu order=%d",
|
TP_printk("page=%p pfn=%lu order=%d",
|
||||||
__entry->page,
|
pfn_to_page(__entry->pfn),
|
||||||
page_to_pfn(__entry->page),
|
__entry->pfn,
|
||||||
__entry->order)
|
__entry->order)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -176,18 +176,18 @@ TRACE_EVENT(mm_page_free_batched,
|
||||||
TP_ARGS(page, cold),
|
TP_ARGS(page, cold),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field( struct page *, page )
|
__field( unsigned long, pfn )
|
||||||
__field( int, cold )
|
__field( int, cold )
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page_to_pfn(page);
|
||||||
__entry->cold = cold;
|
__entry->cold = cold;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu order=0 cold=%d",
|
TP_printk("page=%p pfn=%lu order=0 cold=%d",
|
||||||
__entry->page,
|
pfn_to_page(__entry->pfn),
|
||||||
page_to_pfn(__entry->page),
|
__entry->pfn,
|
||||||
__entry->cold)
|
__entry->cold)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -199,22 +199,22 @@ TRACE_EVENT(mm_page_alloc,
|
||||||
TP_ARGS(page, order, gfp_flags, migratetype),
|
TP_ARGS(page, order, gfp_flags, migratetype),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field( struct page *, page )
|
__field( unsigned long, pfn )
|
||||||
__field( unsigned int, order )
|
__field( unsigned int, order )
|
||||||
__field( gfp_t, gfp_flags )
|
__field( gfp_t, gfp_flags )
|
||||||
__field( int, migratetype )
|
__field( int, migratetype )
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page ? page_to_pfn(page) : -1UL;
|
||||||
__entry->order = order;
|
__entry->order = order;
|
||||||
__entry->gfp_flags = gfp_flags;
|
__entry->gfp_flags = gfp_flags;
|
||||||
__entry->migratetype = migratetype;
|
__entry->migratetype = migratetype;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s",
|
TP_printk("page=%p pfn=%lu order=%d migratetype=%d gfp_flags=%s",
|
||||||
__entry->page,
|
__entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL,
|
||||||
__entry->page ? page_to_pfn(__entry->page) : 0,
|
__entry->pfn != -1UL ? __entry->pfn : 0,
|
||||||
__entry->order,
|
__entry->order,
|
||||||
__entry->migratetype,
|
__entry->migratetype,
|
||||||
show_gfp_flags(__entry->gfp_flags))
|
show_gfp_flags(__entry->gfp_flags))
|
||||||
|
@ -227,20 +227,20 @@ DECLARE_EVENT_CLASS(mm_page,
|
||||||
TP_ARGS(page, order, migratetype),
|
TP_ARGS(page, order, migratetype),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field( struct page *, page )
|
__field( unsigned long, pfn )
|
||||||
__field( unsigned int, order )
|
__field( unsigned int, order )
|
||||||
__field( int, migratetype )
|
__field( int, migratetype )
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page ? page_to_pfn(page) : -1UL;
|
||||||
__entry->order = order;
|
__entry->order = order;
|
||||||
__entry->migratetype = migratetype;
|
__entry->migratetype = migratetype;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d",
|
TP_printk("page=%p pfn=%lu order=%u migratetype=%d percpu_refill=%d",
|
||||||
__entry->page,
|
__entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL,
|
||||||
__entry->page ? page_to_pfn(__entry->page) : 0,
|
__entry->pfn != -1UL ? __entry->pfn : 0,
|
||||||
__entry->order,
|
__entry->order,
|
||||||
__entry->migratetype,
|
__entry->migratetype,
|
||||||
__entry->order == 0)
|
__entry->order == 0)
|
||||||
|
@ -260,7 +260,7 @@ DEFINE_EVENT_PRINT(mm_page, mm_page_pcpu_drain,
|
||||||
TP_ARGS(page, order, migratetype),
|
TP_ARGS(page, order, migratetype),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu order=%d migratetype=%d",
|
TP_printk("page=%p pfn=%lu order=%d migratetype=%d",
|
||||||
__entry->page, page_to_pfn(__entry->page),
|
pfn_to_page(__entry->pfn), __entry->pfn,
|
||||||
__entry->order, __entry->migratetype)
|
__entry->order, __entry->migratetype)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -275,7 +275,7 @@ TRACE_EVENT(mm_page_alloc_extfrag,
|
||||||
alloc_migratetype, fallback_migratetype),
|
alloc_migratetype, fallback_migratetype),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field( struct page *, page )
|
__field( unsigned long, pfn )
|
||||||
__field( int, alloc_order )
|
__field( int, alloc_order )
|
||||||
__field( int, fallback_order )
|
__field( int, fallback_order )
|
||||||
__field( int, alloc_migratetype )
|
__field( int, alloc_migratetype )
|
||||||
|
@ -284,7 +284,7 @@ TRACE_EVENT(mm_page_alloc_extfrag,
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page_to_pfn(page);
|
||||||
__entry->alloc_order = alloc_order;
|
__entry->alloc_order = alloc_order;
|
||||||
__entry->fallback_order = fallback_order;
|
__entry->fallback_order = fallback_order;
|
||||||
__entry->alloc_migratetype = alloc_migratetype;
|
__entry->alloc_migratetype = alloc_migratetype;
|
||||||
|
@ -294,8 +294,8 @@ TRACE_EVENT(mm_page_alloc_extfrag,
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d",
|
TP_printk("page=%p pfn=%lu alloc_order=%d fallback_order=%d pageblock_order=%d alloc_migratetype=%d fallback_migratetype=%d fragmenting=%d change_ownership=%d",
|
||||||
__entry->page,
|
pfn_to_page(__entry->pfn),
|
||||||
page_to_pfn(__entry->page),
|
__entry->pfn,
|
||||||
__entry->alloc_order,
|
__entry->alloc_order,
|
||||||
__entry->fallback_order,
|
__entry->fallback_order,
|
||||||
pageblock_order,
|
pageblock_order,
|
||||||
|
|
|
@ -336,18 +336,18 @@ TRACE_EVENT(mm_vmscan_writepage,
|
||||||
TP_ARGS(page, reclaim_flags),
|
TP_ARGS(page, reclaim_flags),
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
TP_STRUCT__entry(
|
||||||
__field(struct page *, page)
|
__field(unsigned long, pfn)
|
||||||
__field(int, reclaim_flags)
|
__field(int, reclaim_flags)
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->page = page;
|
__entry->pfn = page_to_pfn(page);
|
||||||
__entry->reclaim_flags = reclaim_flags;
|
__entry->reclaim_flags = reclaim_flags;
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("page=%p pfn=%lu flags=%s",
|
TP_printk("page=%p pfn=%lu flags=%s",
|
||||||
__entry->page,
|
pfn_to_page(__entry->pfn),
|
||||||
page_to_pfn(__entry->page),
|
__entry->pfn,
|
||||||
show_reclaim_flags(__entry->reclaim_flags))
|
show_reclaim_flags(__entry->reclaim_flags))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue