Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-21 Thread Namhyung Kim
Hi Steve,

On Sat, Jul 18, 2020 at 4:44 AM Steven Rostedt  wrote:
>
> On Fri, 17 Jul 2020 16:34:55 -0300
> Arnaldo Carvalho de Melo  wrote:
>
> Thinking a bit more, I have to ask. Does perf use the kernel when
> getting all the children of an existing task, or is that done only in
> userspace?
>
> That is, is there a perf syscall that says "start tracing this task and
> all its existing children"?
>
> Or is it done by perf user space looking at the /proc filesystem (like
> ps does).

Yep, perf does look up the /proc to get a list of threads in a process.

Thanks
Namhyung


>
> I'm asking because if perf has a syscall to do that, then I probably
> should add a way to do that with ftrace as well. But that's really
> trivial, because all it would take is grabbing the task_list lock and
> iterating over all the children. Getting new children was the
> non-trivial part, which was what I focused on (with the fork options).
>
> If perf does it with proc files, then we don't need to change anything
> as that could still be used with ftrace.
>
> > Changbin, you can take from here :-)
> >
> > And to reiterate, for me the value of 'perf ftrace' is to allow people
> > used to perf to be able to switch to ftrace quickly, just changing:
> >
> >perf record/top/stat/trace/report/script/etc --pid 1234
> >
> > by:
> >
> >perf ftrace --pid 1234
> >
> > And have the tracefs ftrace knobs set up to have what is expected in
> > terms of targets to trace as the other perf tools.
> >
> > And not just --pid and --tid, but --cgroup, --cpu, etc.
> >
> > i.e., 'perf ftrace' being _a_ front-end aplication to ftrace.
> >
> > :-)
>
>
> I have no problem with this, and I'm quite excited about it. I would
> like it to use libtracefs, as it looks to be exactly what we are
> working on. And this is now a high priority to get out, and I don't
> expect another year (or two) in doing so ;-)
>
> -- Steve


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Changbin Du
On Fri, Jul 17, 2020 at 01:01:24PM -0400, Steven Rostedt wrote:
> On Fri, 17 Jul 2020 21:26:50 +0800
> Changbin Du  wrote:
> 
> > On Thu, Jul 16, 2020 at 12:36:30PM -0300, Arnaldo Carvalho de Melo wrote:
> > > Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:  
> > > > This allows us to trace single thread instead of the whole process.
> > > > 
> > > > Signed-off-by: Changbin Du 
> > > > ---
> > > >  tools/perf/Documentation/perf-ftrace.txt | 4 
> > > >  tools/perf/builtin-ftrace.c  | 2 ++
> > > >  2 files changed, 6 insertions(+)
> > > > 
> > > > diff --git a/tools/perf/Documentation/perf-ftrace.txt 
> > > > b/tools/perf/Documentation/perf-ftrace.txt
> > > > index d79560dea19f..e204bf6d50d8 100644
> > > > --- a/tools/perf/Documentation/perf-ftrace.txt
> > > > +++ b/tools/perf/Documentation/perf-ftrace.txt
> > > > @@ -38,6 +38,10 @@ OPTIONS
> > > >  --pid=::
> > > > Trace on existing process id (comma separated list).
> > > >  
> > > > +-t::
> > > > +--tid=::
> > > > +   Trace on existing thread id (comma separated list).
> > > > +  
> > > 
> > > 
> > > Humm, I just  tried:
> > > 
> > > [root@five ~]# yes > /dev/null &
> > > [1] 18265
> > > [root@five ~]# perf ftrace --tid 18265
> > > ^C[root@five ~]#
> > > 
> > > After waiting for a while, nothing, what am I doing wrong?
> > >  
> > I got it wrong. Currently ftrace only can filter by pid. If the pid is not
> > the main thread it won't work.
> 
> Wait what?
> 
> The "pid" for ftrace is really a "task id" which is a thread id.
>
My bad. I traced a sleeping thread yesterday so no event generated.

Now it works:
$ pstree -p 2378
qemu-system-x86(2378)─┬─{qemu-system-x86}(2379)
  ├─{qemu-system-x86}(2382)
  ├─{qemu-system-x86}(2385)
  ├─{qemu-system-x86}(2387)
  ├─{qemu-system-x86}(2388)
  ├─{qemu-system-x86}(2389)
  ├─{qemu-system-x86}(2390)
  ├─{qemu-system-x86}(2391)
  ├─{qemu-system-x86}(2392)
$ sudo ./perf ftrace --tid 2388
[sudo] password for changbin:
# tracer: function
#
# entries-in-buffer/entries-written: 0/0   #P:8
#
#   TASK-PID CPU#   TIMESTAMP  FUNCTION
#  | | |   | |
  -0 [001]   6561.553989: switch_mm_irqs_off <-__schedule
  -0 [001]   6561.553996: load_new_mm_cr3 <-switch_mm_irqs_off
 qemu-system-x86-2388  [001]   6561.553997: finish_task_switch <-__schedule
 qemu-system-x86-2388  [001]   6561.553998: smp_irq_work_interrupt 
<-irq_work_interrupt
 qemu-system-x86-2388  [001]   6561.553999: irq_enter <-smp_irq_work_interrupt
 qemu-system-x86-2388  [001]   6561.553999: rcu_irq_enter <-irq_enter
 qemu-system-x86-2388  [001]   6561.554000: __wake_up <-rb_wake_up_waiters
 qemu-system-x86-2388  [001]   6561.554000: __wake_up_common_lock <-__wake_up
 qemu-system-x86-2388  [001]   6561.554000: _raw_spin_lock_irqsave 
<-__wake_up_common_lock
 qemu-system-x86-2388  [001]   6561.554000: __wake_up_common 
<-__wake_up_common_lock
 ...
> [root@bxtest ~]# yes > /dev/null &
> [1] 6799
> [root@bxtest ~]# trace-cmd record -e all -P 6799
> Hit Ctrl^C to stop recording
> ^CCPU 0: 3573031 events lost
> CPU0 data recorded at offset=0x838000
> 627675136 bytes in size
> CPU1 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU2 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU3 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU4 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU5 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU6 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU7 data recorded at offset=0x25ed1000
> 0 bytes in size
> [root@bxtest ~]# trace-cmd report | head 
> CPU 1 is empty
> CPU 2 is empty
> CPU 3 is empty
> CPU 4 is empty
> CPU 5 is empty
> CPU 6 is empty
> CPU 7 is empty
> cpus=8
>  yes-6799  [000] 67825.580902: sys_exit: NR 1 = 8192
>  yes-6799  [000] 67825.580903: sys_exit_write:   0x2000
> 
> 
> What's different about tid vs pid?
> 
> -- Steve
> 
> 
> 
> > 
> > So this patch makes no sense. will drop this.
> > 

-- 
Cheers,
Changbin Du


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Steven Rostedt
On Fri, 17 Jul 2020 16:34:55 -0300
Arnaldo Carvalho de Melo  wrote:

Thinking a bit more, I have to ask. Does perf use the kernel when
getting all the children of an existing task, or is that done only in
userspace?

That is, is there a perf syscall that says "start tracing this task and
all its existing children"?

Or is it done by perf user space looking at the /proc filesystem (like
ps does).

I'm asking because if perf has a syscall to do that, then I probably
should add a way to do that with ftrace as well. But that's really
trivial, because all it would take is grabbing the task_list lock and
iterating over all the children. Getting new children was the
non-trivial part, which was what I focused on (with the fork options).

If perf does it with proc files, then we don't need to change anything
as that could still be used with ftrace.

> Changbin, you can take from here :-)
> 
> And to reiterate, for me the value of 'perf ftrace' is to allow people
> used to perf to be able to switch to ftrace quickly, just changing:
> 
>perf record/top/stat/trace/report/script/etc --pid 1234
> 
> by:
> 
>perf ftrace --pid 1234
> 
> And have the tracefs ftrace knobs set up to have what is expected in
> terms of targets to trace as the other perf tools.
> 
> And not just --pid and --tid, but --cgroup, --cpu, etc.
> 
> i.e., 'perf ftrace' being _a_ front-end aplication to ftrace.
> 
> :-)


I have no problem with this, and I'm quite excited about it. I would
like it to use libtracefs, as it looks to be exactly what we are
working on. And this is now a high priority to get out, and I don't
expect another year (or two) in doing so ;-)

-- Steve


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Arnaldo Carvalho de Melo
Em Fri, Jul 17, 2020 at 01:53:51PM -0400, Steven Rostedt escreveu:
> On Fri, 17 Jul 2020 14:40:53 -0300 Arnaldo Carvalho de Melo  
> wrote:
 
> > Say you use:

> > ^C[root@ssdandy ~]# cyclictest --smp -um -p95
> > # /dev/cpu_dma_latency set to 0us
> > policy: fifo: loadavg: 0.05 0.03 0.06 2/409 29072

> > T: 0 (29065) P:95 I:1000 C:518 Min:  2 Act:2 Avg:2 Max: 
> >   6
> > T: 1 (29066) P:95 I:1500 C:343 Min:  2 Act:2 Avg:2 Max: 
> >   5
> > T: 2 (29067) P:95 I:2000 C:256 Min:  2 Act:2 Avg:2 Max: 
> >   7
> > T: 3 (29068) P:95 I:2500 C:203 Min:  2 Act:2 Avg:2 Max: 
> >   5
> > T: 4 (29069) P:95 I:3000 C:168 Min:  2 Act:2 Avg:3 Max: 
> >   6
> > T: 5 (29070) P:95 I:3500 C:143 Min:  2 Act:2 Avg:2 Max: 
> >   6
> > T: 6 (29071) P:95 I:4000 C:124 Min:  2 Act:2 Avg:2 Max: 
> >   7
> > T: 7 (29072) P:95 I:4500 C:110 Min:  2 Act:2 Avg:2 Max:

> > Then we do:

> > # pidof cyclictest
> > 29064
> > #

> > If we use:

> > [root@ssdandy ~]# perf record --pid 29064
> > ^C[ perf record: Woken up 1 times to write data ]
> > [ perf record: Captured and wrote 0.052 MB perf.data (866 samples) ]

> > [root@ssdandy ~]# perf report --task
> > #  pid  tid ppid  comm
> >  00   -1 |swapper
> >  2906429064   -1 |cyclictest
> >  2906429065   -1 |cyclictest
> >  2906429066   -1 |cyclictest
> >  2906429067   -1 |cyclictest
> >  2906429068   -1 |cyclictest
> >  2906429069   -1 |cyclictest
> >  2906429070   -1 |cyclictest
> >  2906429071   -1 |cyclictest
> >  2906429072   -1 |cyclictest
> > [root@ssdandy ~]#

> "ftrace" is inside the kernel. But you could specify all those PIDs in
> the set_ftrace_pid and set_event_pid files, and they will be traced. If
> you want to trace the children of those PIDs, you would need to set the
> options function function-fork and event-fork respectively. And then
> any time a process with a pid in the set_ftrace_pid or set_event_pid
> file forks, its child will also be added to that file and it too will
> be traced. If the fork options are set, then when a task exits, its pid
> will be removed from the file.

>  echo 1 > options/function-fork
>  echo 1 > options/event-fork

cool, so its possible to have the same sort of behaviour one expects
using --pid or --tid and --inherit with perf record/trace/top/etc

Its just some confusion about what perf understands by --pid and --tid
and the jargon used by ftrace, we can make 'perf ftrace' use the knobs
you mentioned and achieve the expected results as with other perf
subcommands, good.
 
> > If we are interested only on the thread running on CPU3 we can do:
> > 
> > [root@ssdandy ~]# perf report --task
> > #  pid  tid ppid  comm
> >  00   -1 |swapper
> >  2906429064   -1 |cyclictest
> >  2906429068   -1 |cyclictest
> > [root@ssdandy ~]#

> > The first 29064 is just to have info on who created 29068, i.e.:

> > Its just the synthesized info for 29068 creator:

> > [root@ssdandy ~]# perf report -D | grep -w 29064/29064
> > 0 0x4690 [0x30]: PERF_RECORD_COMM: cyclictest:29064/29064
> > 0 0x46c0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x40(0xa000) @ 0 fd:00 
> > 136246288 0]: r-xp /usr/bin/cyclictest
> > 0 0x4730 [0x80]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f505000(0x15000) @ 
> > 0 fd:00 201479398 0]: r-xp /usr/lib64/libgcc_s-4.8.5-20150702.so.1
> > 0 0x47b0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f71b000(0x1c3000) @ 
> > 0 fd:00 201334455 0]: r-xp /usr/lib64/libc-2.17.so
> > 0 0x4820 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990fae9000(0xa000) @ 0 
> > fd:00 204604380 0]: r-xp /usr/lib64/libnuma.so.1.0.0
> > 0 0x4898 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990fcf5000(0x17000) @ 
> > 0 fd:00 201335636 0]: r-xp /usr/lib64/libpthread-2.17.so
> > 0 0x4910 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990ff11000(0x7000) @ 0 
> > fd:00 201335640 0]: r-xp /usr/lib64/librt-2.17.so
> > 0 0x4988 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x7f9910119000(0x22000) @ 
> > 0 fd:00 203595299 0]: r-xp /usr/lib64/ld-2.17.so
> > 0 0x49f8 [0x60]: PERF_RECORD_MMAP2 29064/29064: [0x7fff0b52d000(0x2000) @ 0 
> > 00:00 0 0]: r-xp [vdso]
> > 0 0x4a58 [0x68]: PERF_RECORD_MMAP2 29064/29064: [0xff60(0x1000) 
> > @ 0 00:00 0 0]: r-xp [vsyscall]
> > [root@ssdandy ~]#

> > No PERF_RECORD_SAMPLEs.

> > Those are only for:

> > [root@ssdandy ~]# perf report -D | grep PERF_RECORD_SAMPLE | head -5
> > 147224656598815 0x4ac0 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> > 0xa8e5b568 period: 1 addr: 0
> > 147224656606270 0x4ae8 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> > 0xa8e5b568 period: 1 addr: 0
> > 147224656611284 0x4b10 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> > 

Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Steven Rostedt
On Fri, 17 Jul 2020 14:40:53 -0300
Arnaldo Carvalho de Melo  wrote:

> Say you use:
> 
> ^C[root@ssdandy ~]# cyclictest --smp -um -p95
> # /dev/cpu_dma_latency set to 0us
> policy: fifo: loadavg: 0.05 0.03 0.06 2/409 29072
> 
> T: 0 (29065) P:95 I:1000 C:518 Min:  2 Act:2 Avg:2 Max:   
> 6
> T: 1 (29066) P:95 I:1500 C:343 Min:  2 Act:2 Avg:2 Max:   
> 5
> T: 2 (29067) P:95 I:2000 C:256 Min:  2 Act:2 Avg:2 Max:   
> 7
> T: 3 (29068) P:95 I:2500 C:203 Min:  2 Act:2 Avg:2 Max:   
> 5
> T: 4 (29069) P:95 I:3000 C:168 Min:  2 Act:2 Avg:3 Max:   
> 6
> T: 5 (29070) P:95 I:3500 C:143 Min:  2 Act:2 Avg:2 Max:   
> 6
> T: 6 (29071) P:95 I:4000 C:124 Min:  2 Act:2 Avg:2 Max:   
> 7
> T: 7 (29072) P:95 I:4500 C:110 Min:  2 Act:2 Avg:2 Max:
> 
> Then we do:
> 
> # pidof cyclictest
> 29064
> #
> 
> If we use:
> 
> [root@ssdandy ~]# perf record --pid 29064
> ^C[ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.052 MB perf.data (866 samples) ]
> 
> [root@ssdandy ~]# perf report --task
> #  pid  tid ppid  comm
>  00   -1 |swapper
>  2906429064   -1 |cyclictest
>  2906429065   -1 |cyclictest
>  2906429066   -1 |cyclictest
>  2906429067   -1 |cyclictest
>  2906429068   -1 |cyclictest
>  2906429069   -1 |cyclictest
>  2906429070   -1 |cyclictest
>  2906429071   -1 |cyclictest
>  2906429072   -1 |cyclictest
> [root@ssdandy ~]#

"ftrace" is inside the kernel. But you could specify all those PIDs in
the set_ftrace_pid and set_event_pid files, and they will be traced. If
you want to trace the children of those PIDs, you would need to set the
options function function-fork and event-fork respectively. And then
any time a process with a pid in the set_ftrace_pid or set_event_pid
file forks, its child will also be added to that file and it too will
be traced. If the fork options are set, then when a task exits, its pid
will be removed from the file.

 echo 1 > options/function-fork
 echo 1 > options/event-fork


> 
> If we are interested only on the thread running on CPU3 we can do:
> 
> [root@ssdandy ~]# perf report --task
> #  pid  tid ppid  comm
>  00   -1 |swapper
>  2906429064   -1 |cyclictest
>  2906429068   -1 |cyclictest
> [root@ssdandy ~]#
> 
> The first 29064 is just to have info on who created 29068, i.e.:
> 
> Its just the synthesized info for 29068 creator:
> 
> [root@ssdandy ~]# perf report -D | grep -w 29064/29064
> 0 0x4690 [0x30]: PERF_RECORD_COMM: cyclictest:29064/29064
> 0 0x46c0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x40(0xa000) @ 0 fd:00 
> 136246288 0]: r-xp /usr/bin/cyclictest
> 0 0x4730 [0x80]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f505000(0x15000) @ 0 
> fd:00 201479398 0]: r-xp /usr/lib64/libgcc_s-4.8.5-20150702.so.1
> 0 0x47b0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f71b000(0x1c3000) @ 0 
> fd:00 201334455 0]: r-xp /usr/lib64/libc-2.17.so
> 0 0x4820 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990fae9000(0xa000) @ 0 
> fd:00 204604380 0]: r-xp /usr/lib64/libnuma.so.1.0.0
> 0 0x4898 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990fcf5000(0x17000) @ 0 
> fd:00 201335636 0]: r-xp /usr/lib64/libpthread-2.17.so
> 0 0x4910 [0x78]: PERF_RECORD_MMAP2 29064/29064: [0x7f990ff11000(0x7000) @ 0 
> fd:00 201335640 0]: r-xp /usr/lib64/librt-2.17.so
> 0 0x4988 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x7f9910119000(0x22000) @ 0 
> fd:00 203595299 0]: r-xp /usr/lib64/ld-2.17.so
> 0 0x49f8 [0x60]: PERF_RECORD_MMAP2 29064/29064: [0x7fff0b52d000(0x2000) @ 0 
> 00:00 0 0]: r-xp [vdso]
> 0 0x4a58 [0x68]: PERF_RECORD_MMAP2 29064/29064: [0xff60(0x1000) @ 
> 0 00:00 0 0]: r-xp [vsyscall]
> [root@ssdandy ~]#
> 
> No PERF_RECORD_SAMPLEs.
> 
> Those are only for:
> 
> [root@ssdandy ~]# perf report -D | grep PERF_RECORD_SAMPLE | head -5
> 147224656598815 0x4ac0 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> 0xa8e5b568 period: 1 addr: 0
> 147224656606270 0x4ae8 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> 0xa8e5b568 period: 1 addr: 0
> 147224656611284 0x4b10 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> 0xa8e5b568 period: 5 addr: 0
> 147224656616225 0x4b38 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> 0xa8e5b568 period: 35 addr: 0
> 147224656621152 0x4b60 [0x28]: PERF_RECORD_SAMPLE(IP, 0x4001): 29064/29068: 
> 0xa8e5b568 period: 252 addr: 0
> [root@ssdandy ~]#
> 
> [root@ssdandy ~]# perf report -D | grep PERF_RECORD_SAMPLE | cut -d: -f3 | 
> sort -u
>  29064/29068

The above can somewhat be done in trace-cmd, but not fully. But that's
all userspace commands, nothing with the kernel.

> [root@ssdandy ~]#
> 
> Is there a way in ftrace to ask for a pid 

Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Arnaldo Carvalho de Melo
Em Fri, Jul 17, 2020 at 01:01:24PM -0400, Steven Rostedt escreveu:
> On Fri, 17 Jul 2020 21:26:50 +0800
> Changbin Du  wrote:
> 
> > On Thu, Jul 16, 2020 at 12:36:30PM -0300, Arnaldo Carvalho de Melo wrote:
> > > Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:  
> > > > This allows us to trace single thread instead of the whole process.
> > > > 
> > > > Signed-off-by: Changbin Du 
> > > > ---
> > > >  tools/perf/Documentation/perf-ftrace.txt | 4 
> > > >  tools/perf/builtin-ftrace.c  | 2 ++
> > > >  2 files changed, 6 insertions(+)
> > > > 
> > > > diff --git a/tools/perf/Documentation/perf-ftrace.txt 
> > > > b/tools/perf/Documentation/perf-ftrace.txt
> > > > index d79560dea19f..e204bf6d50d8 100644
> > > > --- a/tools/perf/Documentation/perf-ftrace.txt
> > > > +++ b/tools/perf/Documentation/perf-ftrace.txt
> > > > @@ -38,6 +38,10 @@ OPTIONS
> > > >  --pid=::
> > > > Trace on existing process id (comma separated list).
> > > >  
> > > > +-t::
> > > > +--tid=::
> > > > +   Trace on existing thread id (comma separated list).
> > > > +  

> > > Humm, I just  tried:

> > > [root@five ~]# yes > /dev/null &
> > > [1] 18265
> > > [root@five ~]# perf ftrace --tid 18265
> > > ^C[root@five ~]#

> > > After waiting for a while, nothing, what am I doing wrong?

> > I got it wrong. Currently ftrace only can filter by pid. If the pid is not
> > the main thread it won't work.
 
> Wait what?
 
> The "pid" for ftrace is really a "task id" which is a thread id.
 
> [root@bxtest ~]# yes > /dev/null &
> [1] 6799
> [root@bxtest ~]# trace-cmd record -e all -P 6799
> Hit Ctrl^C to stop recording
> ^CCPU 0: 3573031 events lost
> CPU0 data recorded at offset=0x838000
> 627675136 bytes in size
> CPU1 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU2 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU3 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU4 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU5 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU6 data recorded at offset=0x25ed1000
> 0 bytes in size
> CPU7 data recorded at offset=0x25ed1000
> 0 bytes in size
> [root@bxtest ~]# trace-cmd report | head 
> CPU 1 is empty
> CPU 2 is empty
> CPU 3 is empty
> CPU 4 is empty
> CPU 5 is empty
> CPU 6 is empty
> CPU 7 is empty
> cpus=8
>  yes-6799  [000] 67825.580902: sys_exit: NR 1 = 8192
>  yes-6799  [000] 67825.580903: sys_exit_write:   0x2000
> 
> 
> What's different about tid vs pid?

Say you use:

^C[root@ssdandy ~]# cyclictest --smp -um -p95
# /dev/cpu_dma_latency set to 0us
policy: fifo: loadavg: 0.05 0.03 0.06 2/409 29072

T: 0 (29065) P:95 I:1000 C:518 Min:  2 Act:2 Avg:2 Max:   6
T: 1 (29066) P:95 I:1500 C:343 Min:  2 Act:2 Avg:2 Max:   5
T: 2 (29067) P:95 I:2000 C:256 Min:  2 Act:2 Avg:2 Max:   7
T: 3 (29068) P:95 I:2500 C:203 Min:  2 Act:2 Avg:2 Max:   5
T: 4 (29069) P:95 I:3000 C:168 Min:  2 Act:2 Avg:3 Max:   6
T: 5 (29070) P:95 I:3500 C:143 Min:  2 Act:2 Avg:2 Max:   6
T: 6 (29071) P:95 I:4000 C:124 Min:  2 Act:2 Avg:2 Max:   7
T: 7 (29072) P:95 I:4500 C:110 Min:  2 Act:2 Avg:2 Max:

Then we do:

# pidof cyclictest
29064
#

If we use:

[root@ssdandy ~]# perf record --pid 29064
^C[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.052 MB perf.data (866 samples) ]

[root@ssdandy ~]# perf report --task
#  pid  tid ppid  comm
 00   -1 |swapper
 2906429064   -1 |cyclictest
 2906429065   -1 |cyclictest
 2906429066   -1 |cyclictest
 2906429067   -1 |cyclictest
 2906429068   -1 |cyclictest
 2906429069   -1 |cyclictest
 2906429070   -1 |cyclictest
 2906429071   -1 |cyclictest
 2906429072   -1 |cyclictest
[root@ssdandy ~]#

If we are interested only on the thread running on CPU3 we can do:

[root@ssdandy ~]# perf report --task
#  pid  tid ppid  comm
 00   -1 |swapper
 2906429064   -1 |cyclictest
 2906429068   -1 |cyclictest
[root@ssdandy ~]#

The first 29064 is just to have info on who created 29068, i.e.:

Its just the synthesized info for 29068 creator:

[root@ssdandy ~]# perf report -D | grep -w 29064/29064
0 0x4690 [0x30]: PERF_RECORD_COMM: cyclictest:29064/29064
0 0x46c0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x40(0xa000) @ 0 fd:00 
136246288 0]: r-xp /usr/bin/cyclictest
0 0x4730 [0x80]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f505000(0x15000) @ 0 
fd:00 201479398 0]: r-xp /usr/lib64/libgcc_s-4.8.5-20150702.so.1
0 0x47b0 [0x70]: PERF_RECORD_MMAP2 29064/29064: [0x7f990f71b000(0x1c3000) @ 0 
fd:00 201334455 0]: r-xp /usr/lib64/libc-2.17.so
0 0x4820 [0x78]: PERF_RECORD_MMAP2 29064/29064: 

Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Steven Rostedt
On Fri, 17 Jul 2020 21:26:50 +0800
Changbin Du  wrote:

> On Thu, Jul 16, 2020 at 12:36:30PM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:  
> > > This allows us to trace single thread instead of the whole process.
> > > 
> > > Signed-off-by: Changbin Du 
> > > ---
> > >  tools/perf/Documentation/perf-ftrace.txt | 4 
> > >  tools/perf/builtin-ftrace.c  | 2 ++
> > >  2 files changed, 6 insertions(+)
> > > 
> > > diff --git a/tools/perf/Documentation/perf-ftrace.txt 
> > > b/tools/perf/Documentation/perf-ftrace.txt
> > > index d79560dea19f..e204bf6d50d8 100644
> > > --- a/tools/perf/Documentation/perf-ftrace.txt
> > > +++ b/tools/perf/Documentation/perf-ftrace.txt
> > > @@ -38,6 +38,10 @@ OPTIONS
> > >  --pid=::
> > >   Trace on existing process id (comma separated list).
> > >  
> > > +-t::
> > > +--tid=::
> > > + Trace on existing thread id (comma separated list).
> > > +  
> > 
> > 
> > Humm, I just  tried:
> > 
> > [root@five ~]# yes > /dev/null &
> > [1] 18265
> > [root@five ~]# perf ftrace --tid 18265
> > ^C[root@five ~]#
> > 
> > After waiting for a while, nothing, what am I doing wrong?
> >  
> I got it wrong. Currently ftrace only can filter by pid. If the pid is not
> the main thread it won't work.

Wait what?

The "pid" for ftrace is really a "task id" which is a thread id.

[root@bxtest ~]# yes > /dev/null &
[1] 6799
[root@bxtest ~]# trace-cmd record -e all -P 6799
Hit Ctrl^C to stop recording
^CCPU 0: 3573031 events lost
CPU0 data recorded at offset=0x838000
627675136 bytes in size
CPU1 data recorded at offset=0x25ed1000
0 bytes in size
CPU2 data recorded at offset=0x25ed1000
0 bytes in size
CPU3 data recorded at offset=0x25ed1000
0 bytes in size
CPU4 data recorded at offset=0x25ed1000
0 bytes in size
CPU5 data recorded at offset=0x25ed1000
0 bytes in size
CPU6 data recorded at offset=0x25ed1000
0 bytes in size
CPU7 data recorded at offset=0x25ed1000
0 bytes in size
[root@bxtest ~]# trace-cmd report | head 
CPU 1 is empty
CPU 2 is empty
CPU 3 is empty
CPU 4 is empty
CPU 5 is empty
CPU 6 is empty
CPU 7 is empty
cpus=8
 yes-6799  [000] 67825.580902: sys_exit: NR 1 = 8192
 yes-6799  [000] 67825.580903: sys_exit_write:   0x2000


What's different about tid vs pid?

-- Steve



> 
> So this patch makes no sense. will drop this.
> 


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Arnaldo Carvalho de Melo
Em Fri, Jul 17, 2020 at 09:26:50PM +0800, Changbin Du escreveu:
> On Thu, Jul 16, 2020 at 12:36:30PM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:
> > > +++ b/tools/perf/Documentation/perf-ftrace.txt
> > > @@ -38,6 +38,10 @@ OPTIONS
> > >  --pid=::
> > >   Trace on existing process id (comma separated list).

> > > +-t::
> > > +--tid=::
> > > + Trace on existing thread id (comma separated list).

> > Humm, I just  tried:

> > [root@five ~]# yes > /dev/null &
> > [1] 18265
> > [root@five ~]# perf ftrace --tid 18265
> > ^C[root@five ~]#

> > After waiting for a while, nothing, what am I doing wrong?

> I got it wrong. Currently ftrace only can filter by pid. If the pid is not
> the main thread it won't work.
 
> So this patch makes no sense. will drop this.

I think you could alternatively keep it but inform the user that this
target, available to other perf commands, isn't available for ftrace as
it doesn't support it, this way when the user goes from:

perf trace|top|record|script|report --tid 1234

to:

perf ftrace --tid 1234

He gets a message like:

ERROR: 'ftrace' doesn't support the --tid target, try with --pid

And that would be more useful, provides an explanation as why that
target can't be used and suggests an alternative.

- Arnaldo


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-17 Thread Changbin Du
On Thu, Jul 16, 2020 at 12:36:30PM -0300, Arnaldo Carvalho de Melo wrote:
> Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:
> > This allows us to trace single thread instead of the whole process.
> > 
> > Signed-off-by: Changbin Du 
> > ---
> >  tools/perf/Documentation/perf-ftrace.txt | 4 
> >  tools/perf/builtin-ftrace.c  | 2 ++
> >  2 files changed, 6 insertions(+)
> > 
> > diff --git a/tools/perf/Documentation/perf-ftrace.txt 
> > b/tools/perf/Documentation/perf-ftrace.txt
> > index d79560dea19f..e204bf6d50d8 100644
> > --- a/tools/perf/Documentation/perf-ftrace.txt
> > +++ b/tools/perf/Documentation/perf-ftrace.txt
> > @@ -38,6 +38,10 @@ OPTIONS
> >  --pid=::
> > Trace on existing process id (comma separated list).
> >  
> > +-t::
> > +--tid=::
> > +   Trace on existing thread id (comma separated list).
> > +
> 
> 
> Humm, I just  tried:
> 
> [root@five ~]# yes > /dev/null &
> [1] 18265
> [root@five ~]# perf ftrace --tid 18265
> ^C[root@five ~]#
> 
> After waiting for a while, nothing, what am I doing wrong?
>
I got it wrong. Currently ftrace only can filter by pid. If the pid is not
the main thread it won't work.

So this patch makes no sense. will drop this.

> - Arnaldo
> 
> 
> >  -a::
> >  --all-cpus::
> > Force system-wide collection.  Scripts run without a 
> > diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
> > index 244cc8e6bd60..1188b82c6541 100644
> > --- a/tools/perf/builtin-ftrace.c
> > +++ b/tools/perf/builtin-ftrace.c
> > @@ -515,6 +515,8 @@ int cmd_ftrace(int argc, const char **argv)
> > "Show available functions to filter"),
> > OPT_STRING('p', "pid", , "pid",
> >"trace on existing process id"),
> > +   OPT_STRING('t', "tid", , "tid",
> > +  "trace on existing thread id (exclusive to --pid)"),
> > OPT_INCR('v', "verbose", ,
> >  "be more verbose"),
> > OPT_BOOLEAN('a', "all-cpus", _wide,
> > -- 
> > 2.25.1
> > 
> 
> -- 
> 
> - Arnaldo

-- 
Cheers,
Changbin Du


Re: [PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-16 Thread Arnaldo Carvalho de Melo
Em Sat, Jul 11, 2020 at 08:40:21PM +0800, Changbin Du escreveu:
> This allows us to trace single thread instead of the whole process.
> 
> Signed-off-by: Changbin Du 
> ---
>  tools/perf/Documentation/perf-ftrace.txt | 4 
>  tools/perf/builtin-ftrace.c  | 2 ++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/tools/perf/Documentation/perf-ftrace.txt 
> b/tools/perf/Documentation/perf-ftrace.txt
> index d79560dea19f..e204bf6d50d8 100644
> --- a/tools/perf/Documentation/perf-ftrace.txt
> +++ b/tools/perf/Documentation/perf-ftrace.txt
> @@ -38,6 +38,10 @@ OPTIONS
>  --pid=::
>   Trace on existing process id (comma separated list).
>  
> +-t::
> +--tid=::
> + Trace on existing thread id (comma separated list).
> +


Humm, I just  tried:

[root@five ~]# yes > /dev/null &
[1] 18265
[root@five ~]# perf ftrace --tid 18265
^C[root@five ~]#

After waiting for a while, nothing, what am I doing wrong?

- Arnaldo


>  -a::
>  --all-cpus::
>   Force system-wide collection.  Scripts run without a 
> diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
> index 244cc8e6bd60..1188b82c6541 100644
> --- a/tools/perf/builtin-ftrace.c
> +++ b/tools/perf/builtin-ftrace.c
> @@ -515,6 +515,8 @@ int cmd_ftrace(int argc, const char **argv)
>   "Show available functions to filter"),
>   OPT_STRING('p', "pid", , "pid",
>  "trace on existing process id"),
> + OPT_STRING('t', "tid", , "tid",
> +"trace on existing thread id (exclusive to --pid)"),
>   OPT_INCR('v', "verbose", ,
>"be more verbose"),
>   OPT_BOOLEAN('a', "all-cpus", _wide,
> -- 
> 2.25.1
> 

-- 

- Arnaldo


[PATCH v5 03/17] perf ftrace: add option -t/--tid to filter by thread id

2020-07-11 Thread Changbin Du
This allows us to trace single thread instead of the whole process.

Signed-off-by: Changbin Du 
---
 tools/perf/Documentation/perf-ftrace.txt | 4 
 tools/perf/builtin-ftrace.c  | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/tools/perf/Documentation/perf-ftrace.txt 
b/tools/perf/Documentation/perf-ftrace.txt
index d79560dea19f..e204bf6d50d8 100644
--- a/tools/perf/Documentation/perf-ftrace.txt
+++ b/tools/perf/Documentation/perf-ftrace.txt
@@ -38,6 +38,10 @@ OPTIONS
 --pid=::
Trace on existing process id (comma separated list).
 
+-t::
+--tid=::
+   Trace on existing thread id (comma separated list).
+
 -a::
 --all-cpus::
Force system-wide collection.  Scripts run without a 
diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index 244cc8e6bd60..1188b82c6541 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -515,6 +515,8 @@ int cmd_ftrace(int argc, const char **argv)
"Show available functions to filter"),
OPT_STRING('p', "pid", , "pid",
   "trace on existing process id"),
+   OPT_STRING('t', "tid", , "tid",
+  "trace on existing thread id (exclusive to --pid)"),
OPT_INCR('v', "verbose", ,
 "be more verbose"),
OPT_BOOLEAN('a', "all-cpus", _wide,
-- 
2.25.1