Hello Andrii! Thank you for quick feedback! On Wed, Nov 01, 2023 at 10:08:34AM -0700, Andrii Nakryiko wrote: > 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. > You are absolutely correct. I didn't consider the scripts that rely on these tracepoints, because tracepoints are not an ABI, as you mentioned. Additionally, I added the memcg parameter as the first argument based on my personal programming patterns, where the context object should always come first :) I apologize for that and will prepare new version. > > + > > + 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)) > > ); > > [...] -- Thank you, Dmitry