Add tracepoints to the slowpath code to gather some information. The tracepoints can also be used to find out how much time was spent in the slowpath. Signed-off-by: Janani Ravichandran <janani.rvchndrn@xxxxxxxxx> --- include/trace/events/kmem.h | 40 ++++++++++++++++++++++++++++++++++++++++ mm/page_alloc.c | 5 +++++ 2 files changed, 45 insertions(+) diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index 6b2e154..c19ab9f 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h @@ -169,6 +169,46 @@ TRACE_EVENT(mm_page_free, __entry->order) ); +TRACE_EVENT(mm_slowpath_begin, + + TP_PROTO(gfp_t gfp_mask, int order), + + TP_ARGS(gfp_mask, order), + + TP_STRUCT__entry( + __field(gfp_t, gfp_mask) + __field(int, order) + ), + + TP_fast_assign( + __entry->gfp_mask = gfp_mask; + __entry->order = order; + ), + + TP_printk("gfp_mask:%s order=%d", + show_gfp_flags(__entry->gfp_mask), + __entry->order) +); + +TRACE_EVENT(mm_slowpath_end, + + TP_PROTO(struct page *page), + + TP_ARGS(page), + + TP_STRUCT__entry( + __field(unsigned long, pfn) + ), + + TP_fast_assign( + __entry->pfn = page ? page_to_pfn(page) : -1UL; + ), + + TP_printk("page=%p pfn=%lu", + __entry->pfn != -1UL ? pfn_to_page(__entry->pfn) : NULL, + __entry->pfn != -1UL ? __entry->pfn : 0) +); + TRACE_EVENT(mm_page_free_batched, TP_PROTO(struct page *page, int cold), diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 8b3e134..be9c688 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -3595,6 +3595,8 @@ __alloc_pages_slowpath(gfp_t gfp_mask, unsigned int order, (__GFP_ATOMIC|__GFP_DIRECT_RECLAIM))) gfp_mask &= ~__GFP_ATOMIC; + trace_mm_slowpath_begin(gfp_mask, order); + retry: if (gfp_mask & __GFP_KSWAPD_RECLAIM) wake_all_kswapds(order, ac); @@ -3769,6 +3771,9 @@ noretry: nopage: warn_alloc_failed(gfp_mask, order, NULL); got_pg: + + trace_mm_slowpath_end(page); + return page; } -- 2.7.0 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>