Re: [PATCH RFC V9 2/3] perf,tools: per-event callgraph support

From: Arnaldo Carvalho de Melo
Date: Mon Aug 10 2015 - 15:39:55 EST


Em Mon, Aug 10, 2015 at 06:57:20PM +0000, Liang, Kan escreveu:
> > <SNIP>

> > > > I get:

> > > > Samples: 2K of event 'cpu/instructions,call-
> > > > graph=no,time=0,period=20000/p', Event count (approx.): 46956518
> > > > Children Self Command Shared Object Symbol â
> > > > - 67.56% 0.00% qemu-system-x86 [unknown] [.]
> > > > 0xad5e258d4c544155 â
> > > > 0xad5e258d4c544155 â
> > > > - 67.56% 0.00% qemu-system-x86 libc-2.20.so [.] __libc_start_main
> > > > __libc_start_main â
> > > > 0xad5e258d4c544155 â

> > > > This is in the 'perf report' TUI, why, for an event with
> > > > 'callgraph=no', we get callchains? How come?

> > > That's the design.
> > > For sampling multiple events, it may not be needed to collect
> > > callgraphs for all of them. Because the sample sites are usually
> > > nearby. It's enough to collect the callgraphs on a reference event.
> > > For other events, it can still show callgraphs according to the callgraphs on
> > a reference event.

> > So, "call-graph=no" doesn't mean you don't want callchains for a particular
> > events _if_ there is another event in the group for which callchains is
> > available.

> > But if "call-graph=no" for all events, then, yes, "no" means really "no". :-)

> > I think we should use "call-graph=ref" to mean that no callchains should be
> > requested to the kernel infrastructure for that particular event, but that
> > when doing the report, use callchains available in some other event
> > (perhaps would be good to specify which one), while "call-graph=no"
> > really means "no", i.e. no callchains asked from the kernel for this event,
> > and _no_ callchains to appear on report.

> > If "ref" is used and no callchains are available anywhere, that is a bug as
> > well, i.e. I asked for callchains up to a event to be used, by getting that info
> > from another event, but no event has callchains:
> > error.

> If we use " call-graph=ref", it means "ref" is a new callchain mode. But it's not.
> I think the "ref" thing should only impact the perf report.

I don't have much of a problem with that, but using "ref" to make the
intention, i.e. use reference callchains, documented, clear, makes sense to me.

I.e. when you ask for two events, one with callchains and the other without it
doesn't necessarily means we want callchains appearing on the ones we have not
enabled them.

> So we may introduce a new option "--show-callchain-ref" for that purpose.
> If it applied, the available callchain information from other event will be
> printed for "call-graph=no" event.

Ok, if the user explicitely asked for "--show-callchain-ref", then
he/she will not get confused seeing callchains for an event with
"call-graph=no".

Ah, probably --show-ref-call-graph should be better, to keep it consistent with
all the other options dealing with call-graph stuff.

> If not, no callchain information is printed for "call-graph=no" event.
> The default is no print.

Agreed, I think this almost completely reduces the possible source of
confusion.

> Is it OK?

Ok.

One possible improvement to your proposal: When showing callchains in
reference mode, make that extra explicit by adding some marker on the
side of the event name.

I.e. right now we will see callchains, when this is with another event with
callchains:

Samples: 24 of event 'cpu/instructions,call-graph=no,time=0,period=20000/p', Event count (approx.): 480000
Overhead Command Shared Object Symbol
12.50% usleep libc-2.20.so [.] _dl_addr

My suggestion is to have something like:

Samples: 24 of event 'cpu/instructions,call-graph=no,time=0,period=20000/p', ref cg, Event count (approx.): 480000
Overhead Command Shared Object Symbol
12.50% usleep libc-2.20.so [.] _dl_addr

See that ", ref cg"?

But would be just to remove the confusion of seeing, on the same screen,
"call-graph=no" when one _sees_ call graphs.

- Arnaldo
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/