On Fri, 13 Feb 2026 10:15:37 -0800 Thomas Ballasi 
<[email protected]> wrote:

> The changes aims at adding additionnal tracepoints variables to help
> debuggers attribute them to specific processes.
> 
> The PID field uses in_task() to reliably detect when we're in process
> context and can safely access current->pid.  When not in process
> context (such as in interrupt or in an asynchronous RCU context), the
> field is set to -1 as a sentinel value.
> 
> Signed-off-by: Thomas Ballasi <[email protected]>
> ---
>  include/trace/events/vmscan.h | 35 +++++++++++++++++++++++++----------
>  1 file changed, 25 insertions(+), 10 deletions(-)
> 
> diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
> index 1212f6a7c223e..a68b712ef757a 100644
> --- a/include/trace/events/vmscan.h
> +++ b/include/trace/events/vmscan.h
> @@ -122,18 +122,22 @@ 
> DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
>               __field(        unsigned long,  gfp_flags       )
>               __field(        u64,    memcg_id        )
>               __field(        int,    order           )
> +             __field(        int,    pid             )
>       ),
>  
>       TP_fast_assign(
>               __entry->gfp_flags      = (__force unsigned long)gfp_flags;
>               __entry->order          = order;
> +             __entry->pid            = current->pid;
>               __entry->memcg_id       = mem_cgroup_id(memcg);
>       ),
>  
> -     TP_printk("order=%d gfp_flags=%s memcg_id=%llu",
> +     TP_printk("order=%d gfp_flags=%s pid=%d memcg_id=%llu %s",
>               __entry->order,
>               show_gfp_flags(__entry->gfp_flags),
> -             __entry->memcg_id)
> +             __entry->pid,
> +             __entry->memcg_id,
> +             __event_in_irq() ? "(in-irq)" : "")
>  );
>  
>  DEFINE_EVENT(mm_vmscan_direct_reclaim_begin_template, 
> mm_vmscan_direct_reclaim_begin,
> @@ -168,16 +172,20 @@ 
> DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
>       TP_STRUCT__entry(
>               __field(        unsigned long,  nr_reclaimed    )
>               __field(        u64,    memcg_id        )
> +             __field(        int,    pid             )
>       ),
>  
>       TP_fast_assign(
>               __entry->nr_reclaimed   = nr_reclaimed;
>               __entry->memcg_id       = mem_cgroup_id(memcg);
> +             __entry->pid            = current->pid;
>       ),
>  
> -     TP_printk("nr_reclaimed=%lu memcg_id=%llu",
> +     TP_printk("nr_reclaimed=%lu pid=%d memcg_id=%llu %s",
>               __entry->nr_reclaimed,
> -             __entry->memcg_id)
> +             __entry->pid,
> +             __entry->memcg_id,
> +             __event_in_irq() ? "(in-irq)" : "")
>  );
>  
>  DEFINE_EVENT(mm_vmscan_direct_reclaim_end_template, 
> mm_vmscan_direct_reclaim_end,
> @@ -220,9 +228,10 @@ TRACE_EVENT(mm_shrink_slab_start,
>               __field(unsigned long, cache_items)
>               __field(unsigned long long, delta)
>               __field(unsigned long, total_scan)
> +             __field(u64, memcg_id)
>               __field(int, priority)
>               __field(int, nid)
> -             __field(u64, memcg_id)
> +             __field(int, pid)
>       ),
>  
>       TP_fast_assign(
> @@ -236,19 +245,22 @@ TRACE_EVENT(mm_shrink_slab_start,
>               __entry->priority = priority;
>               __entry->nid = sc->nid;
>               __entry->memcg_id = mem_cgroup_id(memcg);
> +             __entry->pid = current->pid;
>       ),
>  
> -     TP_printk("%pS %p: nid: %d memcg_id: %llu objects to shrink %ld 
> gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d",
> +     TP_printk("%pS %p: nid: %d pid: %d memcg_id: %llu objects to shrink %ld 
> gfp_flags %s cache items %ld delta %lld total_scan %ld priority %d %s",
>               __entry->shrink,
>               __entry->shr,
>               __entry->nid,
> +             __entry->pid,
>               __entry->memcg_id,
>               __entry->nr_objects_to_shrink,
>               show_gfp_flags(__entry->gfp_flags),
>               __entry->cache_items,
>               __entry->delta,
>               __entry->total_scan,
> -             __entry->priority)
> +             __entry->priority,
> +             __event_in_irq() ? "(in-irq)" : "")
>  );
>  
>  TRACE_EVENT(mm_shrink_slab_end,
> @@ -266,29 +278,32 @@ TRACE_EVENT(mm_shrink_slab_end,
>               __field(long, total_scan)
>               __field(int, nid)
>               __field(int, retval)
> +             __field(int, pid)
>               __field(u64, memcg_id)
>       ),
>  
>       TP_fast_assign(
>               __entry->shr = shr;
> -             __entry->shrink = shr->scan_objects;

__entry->shrink is removed here, but still printed below. Was this an intended
change of this commit?

>               __entry->unused_scan = unused_scan_cnt;
>               __entry->new_scan = new_scan_cnt;
>               __entry->total_scan = total_scan;
>               __entry->nid = nid;
>               __entry->retval = shrinker_retval;
> +             __entry->pid = current->pid;
>               __entry->memcg_id = mem_cgroup_id(memcg);
>       ),
>  
> -     TP_printk("%pS %p: nid: %d memcg_id: %llu unused scan count %ld new 
> scan count %ld total_scan %ld last shrinker return val %d",
> +     TP_printk("%pS %p: nid: %d pid: %d memcg_id: %llu unused scan count %ld 
> new scan count %ld total_scan %ld last shrinker return val %d %s",
>               __entry->shrink,
>               __entry->shr,
>               __entry->nid,
> +             __entry->pid,
>               __entry->memcg_id,
>               __entry->unused_scan,
>               __entry->new_scan,
>               __entry->total_scan,
> -             __entry->retval)
> +             __entry->retval,
> +             __event_in_irq() ? "(in-irq)" : "")
>  );
>  
>  TRACE_EVENT(mm_vmscan_lru_isolate,
> -- 
> 2.33.8
> 
> 

Reply via email to