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 | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
index 93a9a9ba9405d..d438abfa03ebb 100644
--- a/include/trace/events/vmscan.h
+++ b/include/trace/events/vmscan.h
@@ -121,19 +121,23 @@ 
DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
        TP_STRUCT__entry(
                __field(        unsigned long,  gfp_flags       )
                __field(        int,    order           )
+               __field(        int,    pid             )
                __field(        unsigned short, memcg_id        )
        ),
 
        TP_fast_assign(
                __entry->gfp_flags      = (__force unsigned long)gfp_flags;
                __entry->order          = order;
+               __entry->pid            = current->pid;
                __entry->memcg_id       = memcg_id;
        ),
 
-       TP_printk("order=%d gfp_flags=%s memcg_id=%u",
+       TP_printk("order=%d gfp_flags=%s pid=%d memcg_id=%u %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,
@@ -167,17 +171,21 @@ DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_end_template,
 
        TP_STRUCT__entry(
                __field(        unsigned long,  nr_reclaimed    )
+               __field(        int,    pid             )
                __field(        unsigned short, memcg_id        )
        ),
 
        TP_fast_assign(
                __entry->nr_reclaimed   = nr_reclaimed;
+               __entry->pid            = current->pid;
                __entry->memcg_id       = memcg_id;
        ),
 
-       TP_printk("nr_reclaimed=%lu memcg_id=%u",
+       TP_printk("nr_reclaimed=%lu pid=%d memcg_id=%u %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,
@@ -222,6 +230,7 @@ TRACE_EVENT(mm_shrink_slab_start,
                __field(unsigned long, total_scan)
                __field(int, priority)
                __field(int, nid)
+               __field(int, pid)
                __field(unsigned short, memcg_id)
        ),
 
@@ -235,20 +244,23 @@ TRACE_EVENT(mm_shrink_slab_start,
                __entry->total_scan = total_scan;
                __entry->priority = priority;
                __entry->nid = sc->nid;
+               __entry->pid = current->pid;
                __entry->memcg_id = sc->memcg ? 
cgroup_id(sc->memcg->css.cgroup) : 0;
        ),
 
-       TP_printk("%pS %p: nid: %d memcg_id: %u 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: %u 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(unsigned short, memcg_id)
        ),
 
        TP_fast_assign(
                __entry->shr = shr;
-               __entry->shrink = shr->scan_objects;
                __entry->unused_scan = unused_scan_cnt;
                __entry->new_scan = new_scan_cnt;
                __entry->total_scan = total_scan;
                __entry->nid = sc->nid;
                __entry->retval = shrinker_retval;
+               __entry->pid = current->pid;
                __entry->memcg_id = cgroup_id(sc->memcg->css.cgroup);
        ),
 
-       TP_printk("%pS %p: nid: %d memcg_id: %u 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: %u 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