Re: [RFC PATCH V0 09/10] trace/kmmscand: Add tracing of scanning and migration

From: Steven Rostedt
Date: Fri Dec 06 2024 - 09:49:18 EST


On Fri, 6 Dec 2024 12:03:29 +0530
Raghavendra K T <raghavendra.kt@xxxxxxx> wrote:

> On 12/5/2024 11:16 PM, Steven Rostedt wrote:
> > On Sun, 1 Dec 2024 15:38:17 +0000
> > Raghavendra K T <raghavendra.kt@xxxxxxx> wrote:
> >
> >> Add tracing support to track
> >> - start and end of scanning.
> >> - migration.
> >>
> >> CC: Steven Rostedt <rostedt@xxxxxxxxxxx>
> >> CC: Masami Hiramatsu <mhiramat@xxxxxxxxxx>
> >> CC: linux-trace-kernel@xxxxxxxxxxxxxxx
> >>
>
> [...]
>
> >> +
> >> + TP_STRUCT__entry(
> >> + __array( char, comm, TASK_COMM_LEN )
> >
> > Is there a reason to record "comm"? There's other ways to retrieve it than
> > to always write it to the ring buffer.
> >
>
> Thank you for the review Steve. The motivation was to filter benchmark
> in the trace to understand the behavior.
> I will explore regarding other ways of retrieving comm.
> (or may be even PID is enough..)

You can filter on current comm for any event with trace-cmd and even with the
"filter" file. It doesn't need to be part of the event.

For the filter file:

# echo "COMM == rcu_preempt" > /sys/kernel/tracing/events/timer/hrtimer_cancel/filter

or with trace-cmd

# trace-cmd start -e hrtimer_cancel -f 'COMM == "rcu_preempt"'
# trace-cmd show
# tracer: nop
#
# entries-in-buffer/entries-written: 10/10 #P:8
#
# _-----=> irqs-off/BH-disabled
# / _----=> need-resched
# | / _---=> hardirq/softirq
# || / _--=> preempt-depth
# ||| / _-=> migrate-disable
# |||| / delay
# TASK-PID CPU# ||||| TIMESTAMP FUNCTION
# | | | ||||| | |
rcu_preempt-18 [001] d..3. 54968.170887: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.177704: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.181678: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.185679: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.186092: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.193676: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54968.193686: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54972.871315: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54972.875176: hrtimer_cancel: hrtimer=00000000456b5702
rcu_preempt-18 [001] d..3. 54972.881751: hrtimer_cancel: hrtimer=00000000456b5702

Or you can do it after the fact from a trace.dat file:

# trace-cmd record -e hrtimer_cancel sleep 10
# trace-cmd report | head
cpus=8
sleep-1641 [006] d.h2. 55109.598846: hrtimer_cancel: hrtimer=0xffff9800fdfa1888
sleep-1641 [006] d..3. 55109.599089: hrtimer_cancel: hrtimer=0xffff9800fdfb3140
<idle>-0 [006] d..2. 55109.599111: hrtimer_cancel: hrtimer=0xffff9800fdfa1888
<idle>-0 [006] d.h7. 55109.603848: hrtimer_cancel: hrtimer=0xffff9800fdfb3180
<idle>-0 [006] dN.2. 55109.603895: hrtimer_cancel: hrtimer=0xffff9800fdfa1888
<idle>-0 [000] d.h3. 55109.604478: hrtimer_cancel: hrtimer=0xffff9800fde33180
<idle>-0 [000] dN.2. 55109.604492: hrtimer_cancel: hrtimer=0xffff9800fde21888
rcu_preempt-18 [000] d..3. 55109.604549: hrtimer_cancel: hrtimer=0xffff9800fde33140
<idle>-0 [000] d..2. 55109.604573: hrtimer_cancel: hrtimer=0xffff9800fde21888

# trace-cmd report -F '.*:COMM == "rcu_preempt"'
cpus=8
rcu_preempt-18 [000] d..3. 55109.604549: hrtimer_cancel: hrtimer=0xffff9800fde33140
rcu_preempt-18 [000] d..3. 55109.609320: hrtimer_cancel: hrtimer=0xffff9800fde33140
rcu_preempt-18 [000] d..3. 55109.613350: hrtimer_cancel: hrtimer=0xffff9800fde33140
rcu_preempt-18 [000] d..3. 55119.609772: hrtimer_cancel: hrtimer=0xffff9800fde33140

-- Steve