2018-08-29 02:43:19

by Stephane Eranian

[permalink] [raw]
Subject: [RFC] perf script: callchain handling is not useful

Hi,

I am doing the following simple collection with callchain and load profiling:

$ perf record -g -d -e cpu/event=0xd0,umask=0x81/pp my_test_program

But when I type:
$ perf script -F ip,addr
ffff9d4821346878
ffffffff9d58df25
ffffffff9d58e054
ffffffff9d5965bb
ffffffff9d640650
ffffffff9d697d06
ffffffff9d63ec60
ffffffff9d640322
ffffffff9d64070c
ffffffff9d455a60
7030c7

ffff9d4638ba84a0
ffffffff9d5df447
ffffffff9d5eaf4a
ffffffff9d63e165
ffffffff9d63e439
ffffffff9d697d98
ffffffff9d63ec60
ffffffff9d640322
ffffffff9d64070c
ffffffff9d455a60
7030c7
I also see the callchain and it is not clear which is the IP. Further
more parsing becomes more difficult because of multiple lines per
sample. I understand that multiline is likely because of
symbolization. But if I don't want symbolization, it should be
possible to print all in one line.

The current output is not very useful. You expect perf script to give
you one line per sample and only what you want. Callchain != IP.

I think the following should happen:
- do not print callchain when asked for the IP. Create a callchain filter.
- print callchain on the same line, much like what is done for brstack

It is not clear to me why callchain and ip were lumped together.
Any opinion on my proposal?
Thanks.


2018-08-29 13:56:38

by Arnaldo Carvalho de Melo

[permalink] [raw]
Subject: Re: [RFC] perf script: callchain handling is not useful

Em Tue, Aug 28, 2018 at 07:41:31PM -0700, Stephane Eranian escreveu:
> Hi,
>
> I am doing the following simple collection with callchain and load profiling:
>
> $ perf record -g -d -e cpu/event=0xd0,umask=0x81/pp my_test_program
>
> But when I type:
> $ perf script -F ip,addr
> ffff9d4821346878
> ffffffff9d58df25
> ffffffff9d58e054
> ffffffff9d5965bb
> ffffffff9d640650
> ffffffff9d697d06
> ffffffff9d63ec60
> ffffffff9d640322
> ffffffff9d64070c
> ffffffff9d455a60
> 7030c7
>
> ffff9d4638ba84a0
> ffffffff9d5df447
> ffffffff9d5eaf4a
> ffffffff9d63e165
> ffffffff9d63e439
> ffffffff9d697d98
> ffffffff9d63ec60
> ffffffff9d640322
> ffffffff9d64070c
> ffffffff9d455a60
> 7030c7
> I also see the callchain and it is not clear which is the IP. Further
> more parsing becomes more difficult because of multiple lines per
> sample. I understand that multiline is likely because of
> symbolization. But if I don't want symbolization, it should be
> possible to print all in one line.

Humm, to have this not break possibly existing scripts, perhaps we can
have something like:

$ perf script -F ip,-callchain,addr

?

And if asked explicitely for the callchain, then it gets added in the
same line?

- Arnaldo


> The current output is not very useful. You expect perf script to give
> you one line per sample and only what you want. Callchain != IP.
>
> I think the following should happen:
> - do not print callchain when asked for the IP. Create a callchain filter.
> - print callchain on the same line, much like what is done for brstack
>
> It is not clear to me why callchain and ip were lumped together.
> Any opinion on my proposal?
> Thanks.

2018-08-29 15:14:55

by Stephane Eranian

[permalink] [raw]
Subject: Re: [RFC] perf script: callchain handling is not useful

On Wed, Aug 29, 2018 at 6:54 AM Arnaldo Carvalho de Melo
<[email protected]> wrote:
>
> Em Tue, Aug 28, 2018 at 07:41:31PM -0700, Stephane Eranian escreveu:
> > Hi,
> >
> > I am doing the following simple collection with callchain and load profiling:
> >
> > $ perf record -g -d -e cpu/event=0xd0,umask=0x81/pp my_test_program
> >
> > But when I type:
> > $ perf script -F ip,addr
> > ffff9d4821346878
> > ffffffff9d58df25
> > ffffffff9d58e054
> > ffffffff9d5965bb
> > ffffffff9d640650
> > ffffffff9d697d06
> > ffffffff9d63ec60
> > ffffffff9d640322
> > ffffffff9d64070c
> > ffffffff9d455a60
> > 7030c7
> >
> > ffff9d4638ba84a0
> > ffffffff9d5df447
> > ffffffff9d5eaf4a
> > ffffffff9d63e165
> > ffffffff9d63e439
> > ffffffff9d697d98
> > ffffffff9d63ec60
> > ffffffff9d640322
> > ffffffff9d64070c
> > ffffffff9d455a60
> > 7030c7
> > I also see the callchain and it is not clear which is the IP. Further
> > more parsing becomes more difficult because of multiple lines per
> > sample. I understand that multiline is likely because of
> > symbolization. But if I don't want symbolization, it should be
> > possible to print all in one line.
>
> Humm, to have this not break possibly existing scripts, perhaps we can
> have something like:
>
> $ perf script -F ip,-callchain,addr
>
> ?
>
> And if asked explicitely for the callchain, then it gets added in the
> same line?
>
Yeah, that should do it.
Thanks.

> - Arnaldo
>
>
> > The current output is not very useful. You expect perf script to give
> > you one line per sample and only what you want. Callchain != IP.
> >
> > I think the following should happen:
> > - do not print callchain when asked for the IP. Create a callchain filter.
> > - print callchain on the same line, much like what is done for brstack
> >
> > It is not clear to me why callchain and ip were lumped together.
> > Any opinion on my proposal?
> > Thanks.

2018-08-30 00:35:09

by Namhyung Kim

[permalink] [raw]
Subject: Re: [RFC] perf script: callchain handling is not useful

Hi,

On Wed, Aug 29, 2018 at 08:14:12AM -0700, Stephane Eranian wrote:
> On Wed, Aug 29, 2018 at 6:54 AM Arnaldo Carvalho de Melo
> <[email protected]> wrote:
> >
> > Em Tue, Aug 28, 2018 at 07:41:31PM -0700, Stephane Eranian escreveu:
> > > Hi,
> > >
> > > I am doing the following simple collection with callchain and load profiling:
> > >
> > > $ perf record -g -d -e cpu/event=0xd0,umask=0x81/pp my_test_program
> > >
> > > But when I type:
> > > $ perf script -F ip,addr
> > > ffff9d4821346878
> > > ffffffff9d58df25
> > > ffffffff9d58e054
> > > ffffffff9d5965bb
> > > ffffffff9d640650
> > > ffffffff9d697d06
> > > ffffffff9d63ec60
> > > ffffffff9d640322
> > > ffffffff9d64070c
> > > ffffffff9d455a60
> > > 7030c7
> > >
> > > ffff9d4638ba84a0
> > > ffffffff9d5df447
> > > ffffffff9d5eaf4a
> > > ffffffff9d63e165
> > > ffffffff9d63e439
> > > ffffffff9d697d98
> > > ffffffff9d63ec60
> > > ffffffff9d640322
> > > ffffffff9d64070c
> > > ffffffff9d455a60
> > > 7030c7
> > > I also see the callchain and it is not clear which is the IP. Further
> > > more parsing becomes more difficult because of multiple lines per
> > > sample. I understand that multiline is likely because of
> > > symbolization. But if I don't want symbolization, it should be
> > > possible to print all in one line.
> >
> > Humm, to have this not break possibly existing scripts, perhaps we can
> > have something like:
> >
> > $ perf script -F ip,-callchain,addr
> >
> > ?
> >
> > And if asked explicitely for the callchain, then it gets added in the
> > same line?
> >
> Yeah, that should do it.
> Thanks.

I found this:

$ perf script -h |& grep -A1 hide
-G, --hide-call-graph
When printing symbols do not display call chain

Thanks,
Namhyung

2018-08-30 05:02:07

by Stephane Eranian

[permalink] [raw]
Subject: Re: [RFC] perf script: callchain handling is not useful

On Wed, Aug 29, 2018 at 5:33 PM Namhyung Kim <[email protected]> wrote:
>
> Hi,
>
> On Wed, Aug 29, 2018 at 08:14:12AM -0700, Stephane Eranian wrote:
> > On Wed, Aug 29, 2018 at 6:54 AM Arnaldo Carvalho de Melo
> > <[email protected]> wrote:
> > >
> > > Em Tue, Aug 28, 2018 at 07:41:31PM -0700, Stephane Eranian escreveu:
> > > > Hi,
> > > >
> > > > I am doing the following simple collection with callchain and load profiling:
> > > >
> > > > $ perf record -g -d -e cpu/event=0xd0,umask=0x81/pp my_test_program
> > > >
> > > > But when I type:
> > > > $ perf script -F ip,addr
> > > > ffff9d4821346878
> > > > ffffffff9d58df25
> > > > ffffffff9d58e054
> > > > ffffffff9d5965bb
> > > > ffffffff9d640650
> > > > ffffffff9d697d06
> > > > ffffffff9d63ec60
> > > > ffffffff9d640322
> > > > ffffffff9d64070c
> > > > ffffffff9d455a60
> > > > 7030c7
> > > >
> > > > ffff9d4638ba84a0
> > > > ffffffff9d5df447
> > > > ffffffff9d5eaf4a
> > > > ffffffff9d63e165
> > > > ffffffff9d63e439
> > > > ffffffff9d697d98
> > > > ffffffff9d63ec60
> > > > ffffffff9d640322
> > > > ffffffff9d64070c
> > > > ffffffff9d455a60
> > > > 7030c7
> > > > I also see the callchain and it is not clear which is the IP. Further
> > > > more parsing becomes more difficult because of multiple lines per
> > > > sample. I understand that multiline is likely because of
> > > > symbolization. But if I don't want symbolization, it should be
> > > > possible to print all in one line.
> > >
> > > Humm, to have this not break possibly existing scripts, perhaps we can
> > > have something like:
> > >
> > > $ perf script -F ip,-callchain,addr
> > >
> > > ?
> > >
> > > And if asked explicitely for the callchain, then it gets added in the
> > > same line?
> > >
> > Yeah, that should do it.
> > Thanks.
>
> I found this:
>
> $ perf script -h |& grep -A1 hide
> -G, --hide-call-graph
> When printing symbols do not display call chain
>
Yes, I had found it too. But my problem is twofold:
- ip should not include the callchain
- callchain should be printed in a single line
That would make things easier to parse.

> Thanks,
> Namhyung