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 | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/include/trace/events/vmscan.h b/include/trace/events/vmscan.h
index afc9f80d03f34..eddb4e75e2e23 100644
--- a/include/trace/events/vmscan.h
+++ b/include/trace/events/vmscan.h
@@ -121,18 +121,21 @@ 
DECLARE_EVENT_CLASS(mm_vmscan_direct_reclaim_begin_template,
        TP_STRUCT__entry(
                __field(        int,    order           )
                __field(        unsigned long,  gfp_flags       )
+               __field(        int,    pid             )
                __field(        unsigned short, memcg_id        )
        ),
 
        TP_fast_assign(
                __entry->order          = order;
                __entry->gfp_flags      = (__force unsigned long)gfp_flags;
+               __entry->pid            = in_task() ? current->pid : -1;
                __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",
                __entry->order,
                show_gfp_flags(__entry->gfp_flags),
+               __entry->pid,
                __entry->memcg_id)
 );
 
@@ -167,16 +170,19 @@ 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            = in_task() ? current->pid : -1;
                __entry->memcg_id       = memcg_id;
        ),
 
-       TP_printk("nr_reclaimed=%lu memcg_id=%u",
+       TP_printk("nr_reclaimed=%lu pid=%d memcg_id=%u",
                __entry->nr_reclaimed,
+               __entry->pid,
                __entry->memcg_id)
 );
 
@@ -216,6 +222,7 @@ TRACE_EVENT(mm_shrink_slab_start,
                __field(struct shrinker *, shr)
                __field(void *, shrink)
                __field(int, nid)
+               __field(int, pid)
                __field(unsigned short, memcg_id)
                __field(long, nr_objects_to_shrink)
                __field(unsigned long, gfp_flags)
@@ -229,6 +236,7 @@ TRACE_EVENT(mm_shrink_slab_start,
                __entry->shr = shr;
                __entry->shrink = shr->scan_objects;
                __entry->nid = sc->nid;
+               __entry->pid = in_task() ? current->pid : -1;
                __entry->memcg_id = sc->memcg ? mem_cgroup_id(sc->memcg) : 0;
                __entry->nr_objects_to_shrink = nr_objects_to_shrink;
                __entry->gfp_flags = (__force unsigned long)sc->gfp_mask;
@@ -238,10 +246,11 @@ TRACE_EVENT(mm_shrink_slab_start,
                __entry->priority = priority;
        ),
 
-       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",
                __entry->shrink,
                __entry->shr,
                __entry->nid,
+               __entry->pid,
                __entry->memcg_id,
                __entry->nr_objects_to_shrink,
                show_gfp_flags(__entry->gfp_flags),
@@ -261,6 +270,7 @@ TRACE_EVENT(mm_shrink_slab_end,
        TP_STRUCT__entry(
                __field(struct shrinker *, shr)
                __field(int, nid)
+               __field(int, pid)
                __field(unsigned short, memcg_id)
                __field(void *, shrink)
                __field(long, unused_scan)
@@ -272,6 +282,7 @@ TRACE_EVENT(mm_shrink_slab_end,
        TP_fast_assign(
                __entry->shr = shr;
                __entry->nid = sc->nid;
+               __entry->pid = in_task() ? current->pid : -1;
                __entry->memcg_id = sc->memcg ? mem_cgroup_id(sc->memcg) : 0;
                __entry->shrink = shr->scan_objects;
                __entry->unused_scan = unused_scan_cnt;
@@ -280,10 +291,11 @@ TRACE_EVENT(mm_shrink_slab_end,
                __entry->total_scan = total_scan;
        ),
 
-       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",
                __entry->shrink,
                __entry->shr,
                __entry->nid,
+               __entry->pid,
                __entry->memcg_id,
                __entry->unused_scan,
                __entry->new_scan,
-- 
2.33.8


Reply via email to