This patch enables the names of callbacks in mm_shrink_slab_start and mm_shrink_slab_end to be seen by userspace tools. This should give some information regarding the identity of the shrinkers being run. Signed-off-by: Janani Ravichandran <janani.rvchndrn@xxxxxxxxx> --- include/trace/events/vmscan.h | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h index c88fd09..7091c29 100644 --- a/include/trace/events/vmscan.h +++ b/include/trace/events/vmscan.h @@ -16,6 +16,8 @@ #define RECLAIM_WB_SYNC 0x0004u /* Unused, all reclaim async */ #define RECLAIM_WB_ASYNC 0x0008u +#define SHRINKER_NAME_LEN (size_t)32 + #define show_reclaim_flags(flags) \ (flags) ? __print_flags(flags, "|", \ {RECLAIM_WB_ANON, "RECLAIM_WB_ANON"}, \ @@ -196,6 +198,7 @@ TRACE_EVENT(mm_shrink_slab_start, TP_STRUCT__entry( __field(struct shrinker *, shr) __field(void *, shrink) + __array(char, shrinker_name, SHRINKER_NAME_LEN) __field(int, nid) __field(long, nr_objects_to_shrink) __field(gfp_t, gfp_flags) @@ -207,8 +210,12 @@ TRACE_EVENT(mm_shrink_slab_start, ), TP_fast_assign( + char sym[KSYM_SYMBOL_LEN]; + __entry->shr = shr; __entry->shrink = shr->scan_objects; + sprint_symbol(sym, (unsigned long)__entry->shrink); + strlcpy(__entry->shrinker_name, sym, SHRINKER_NAME_LEN); __entry->nid = sc->nid; __entry->nr_objects_to_shrink = nr_objects_to_shrink; __entry->gfp_flags = sc->gfp_mask; @@ -219,9 +226,10 @@ TRACE_EVENT(mm_shrink_slab_start, __entry->total_scan = total_scan; ), - TP_printk("%pF %p: nid: %d objects to shrink %ld gfp_flags %s pgs_scanned %ld lru_pgs %ld cache items %ld delta %lld total_scan %ld", + TP_printk("%pF %p name:%s nid: %d objects to shrink %ld gfp_flags %s pgs_scanned %ld lru_pgs %ld cache items %ld delta %lld total_scan %ld", __entry->shrink, __entry->shr, + __entry->shrinker_name, __entry->nid, __entry->nr_objects_to_shrink, show_gfp_flags(__entry->gfp_flags), @@ -242,6 +250,7 @@ TRACE_EVENT(mm_shrink_slab_end, TP_STRUCT__entry( __field(struct shrinker *, shr) __field(int, nid) + __array(char, shrinker_name, SHRINKER_NAME_LEN) __field(void *, shrink) __field(long, unused_scan) __field(long, new_scan) @@ -250,18 +259,23 @@ TRACE_EVENT(mm_shrink_slab_end, ), TP_fast_assign( + char sym[KSYM_SYMBOL_LEN]; + __entry->shr = shr; __entry->nid = nid; __entry->shrink = shr->scan_objects; + sprint_symbol(sym, (unsigned long)__entry->shrink); + strlcpy(__entry->shrinker_name, sym, SHRINKER_NAME_LEN); __entry->unused_scan = unused_scan_cnt; __entry->new_scan = new_scan_cnt; __entry->retval = shrinker_retval; __entry->total_scan = total_scan; ), - TP_printk("%pF %p: nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", + TP_printk("%pF %p name:%s nid: %d unused scan count %ld new scan count %ld total_scan %ld last shrinker return val %d", __entry->shrink, __entry->shr, + __entry->shrinker_name, __entry->nid, __entry->unused_scan, __entry->new_scan, -- 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>