[RFC PATCH 0/1] perf scripts flamegraph: Add --asm option
Tudor-Stefan Magirescu <[email protected]>
| Newsgroups | org.kernel.vger.linux-perf-users,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
Flame graphs report samples at function granularity, so a wide frame shows which function is hot but not which part of it. Obtaining that requires perf annotate, which reports per-instruction counts without the calling context of a flame graph. This adds an --asm option that appends the sampled instruction as a leaf node, so both views are available at once. While testing locally on x86_64 I noticed that when recording using --call-graph fp and :p event modifiers, the top stack frame of the callchain and the sample information don't agree. In my case, it appears that the callchain's ip is exactly one instruction after the sample's ip. perf annotate seems to ignore the callchain information and only uses the sample ip to record the distributions, which I replicated in the script, so that both tools attribute a sample to the same instruction. This approach has 2 problems: 1) (Occurs only when recording with --call-graph fp and :p) The sample and top of callchain might not refer to the same function, which means that some instructions might be misattributed to a wrong call stack. Is a fixup wanted here, and if so should it live in this script or where the callchain is built? 2) A binary object might contain 2 or more symbols with the same name but different code (e.g., when defining 2 static functions with the same name in different translation units). In this case, the approach cannot disambiguate between them, so instructions might get misattributed. Would exporting the symbol start and end for the sample, as already present for callchain entries, be acceptable? This would also remove the objdump -t call entirely. Tudor-Stefan Magirescu (1): perf scripts flamegraph: Add --asm option tools/perf/scripts/python/flamegraph.py | 120 ++++++++++++++++++++++++ 1 file changed, 120 insertions(+) -- 2.43.0