On Wed, Nov 1, 2023 at 3:29 AM Dmitry Rokosov <ddrokosov@xxxxxxxxxxxxxxxxx> wrote: > > Sometimes it is necessary to understand in which memcg tracepoint event > occurred. The function cgroup_name() is a useful tool for this purpose. > To integrate cgroup_name() into the existing memcg tracepoints, this > patch introduces a new tracepoint template for the begin() and end() > events, utilizing static __array() to store the cgroup name. > > Signed-off-by: Dmitry Rokosov <ddrokosov@xxxxxxxxxxxxxxxxx> > --- > include/trace/events/vmscan.h | 77 +++++++++++++++++++++++++++++------ > mm/vmscan.c | 8 ++-- > 2 files changed, 69 insertions(+), 16 deletions(-) > > diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h > index d2123dd960d5..124bc22866c8 100644 > --- a/include/trace/events/vmscan.h > +++ b/include/trace/events/vmscan.h > @@ -141,19 +141,47 @@ DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_direct_reclaim_b > ); > > #ifdef CONFIG_MEMCG > -DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, mm_vmscan_memcg_reclaim_begin, > > - TP_PROTO(int order, gfp_t gfp_flags), > +DECLARE_EVENT_CLASS(mm_vmscan_memcg_reclaim_begin_template, > > - TP_ARGS(order, gfp_flags) > + TP_PROTO(const struct mem_cgroup *memcg, int order, gfp_t gfp_flags), > + > + TP_ARGS(memcg, order, gfp_flags), By adding memcg in front of existing tracepoint arguments, you unnecessarily break everyone who currently has some scripts based on this tracepoint. Given there is no reason why memcg has to be the very first argument, it would be nice if you can just append it at the end to make it nicely backwards compatible. Same for other tracepoints below. Tracepoints are not an ABI, but there is also no point in arbitrarily breaking all current scripts for such a trivial reason. > + > + TP_STRUCT__entry( > + __field(int, order) > + __field(unsigned long, gfp_flags) > + __array(char, name, NAME_MAX + 1) > + ), > + > + TP_fast_assign( > + __entry->order = order; > + __entry->gfp_flags = (__force unsigned long)gfp_flags; > + cgroup_name(memcg->css.cgroup, > + __entry->name, > + sizeof(__entry->name)); > + ), > + > + TP_printk("memcg=%s order=%d gfp_flags=%s", > + __entry->name, > + __entry->order, > + show_gfp_flags(__entry->gfp_flags)) > ); [...]