Re: Wrong Perf Backtraces

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


I traced the code and it jumped into PLT and .... Therefore, it seems that it is actually a function call and is incorrectly reported as inline. In other words, this is a called function incorrectly reported as inline, while the "gmallocn" case was an inline incorrectly omitted. Hopefully, I'm right.


On 2020-04-11 21:12, ahmadkhorrami wrote:

I found the problem by building the libraries from source code. The "gmallocn()"s were inlines. So, perhaps it would be better if Perf had reported it as "(inlined)" as in the common case. The second problematic case (repeated "gtk_action_muxer_query_action()"s) was purely due to my lack of knowledge. Sorry for wasting your time, specially, Mr. Olsa, :D. It was inter-library tail-call elimination, which I did not know is possible (I thought tail-calls happen only inside each translation unit). In other words, the last operation in the callee at "gtk_action_muxer_query_action+0x6c" is a jump to the beginning of "gtk_action_muxer_query_action()". And the debug info for the dbg-packages (Ubuntu in my case), seems to be OK. I wonder why source lines were reported as 0. Perhaps, the unwinding library is bogus.

Finally, I have a new (hopefully, unsilly) question, :D. In the following backtrace, __GI___libc_malloc+0x197 is reported as inline. While its address (i.e., 0x7ffff4b07207) does not match that of its parent function call point (i.e., gmalloc+0x59 which is 0x7fffd9872fb9). Is this logical? And, again, there are many such instances in the Perf output.

EvJobScheduler 10021 8653.926478: 100 mem_load_uops_retired.l3_miss:uppp: 7fffd1062a00 5080022 N/A|SNP N/A|TLB N/A|LCK N/A
7ffff4b07207 tcache_get+0x197 (inlined)
7ffff4b07207 __GI___libc_malloc+0x197 (inlined)
7fffd9872fb9 gmalloc+0x59 (inlined)
7fffd9872fb9 gmallocn+0x59 (/usr/lib/x86_64-linux-gnu/ 7fffd9872fb9 gmallocn+0x59 (/usr/lib/x86_64-linux-gnu/ 7fffd9951e6f _ZN8TextLine8coalesceEP10UnicodeMap+0xff (/usr/lib/x86_64-linux-gnu/ 7fffd9952f82 _ZN9TextBlock8coalesceEP10UnicodeMapd+0x752 (/usr/lib/x86_64-linux-gnu/ 7fffd995bc37 _ZN8TextPage8coalesceEbdb+0x1507 (/usr/lib/x86_64-linux-gnu/ 7fffd995cb71 _ZN13TextOutputDev7endPageEv+0x31 (/usr/lib/x86_64-linux-gnu/ 7fffe803c6d2 _ZL26poppler_page_get_text_pageP12_PopplerPage+0x92 (/usr/lib/x86_64-linux-gnu/ 7fffe803deb3 poppler_page_get_selection_region+0x63 (/usr/lib/x86_64-linux-gnu/ 7fffe82ab650 [unknown] (/opt/evince-3.28.4/lib/evince/4/backends/ 7ffff795f165 ev_job_page_data_run+0x2f5 (/opt/evince-3.28.4/lib/
7ffff7961309 ev_job_thread+0xe9 (inlined)
7ffff7961309 ev_job_thread_proxy+0xe9 (/opt/evince-3.28.4/lib/ 7ffff5492194 g_thread_proxy+0x54 (/usr/lib/x86_64-linux-gnu/ 7ffff4e686da start_thread+0xda (/lib/x86_64-linux-gnu/
7ffff4b9188e __GI___clone+0x3e (inlined)

I am looking forward to any help or suggestions.

On 2020-04-04 05:31, ahmadkhorrami wrote:

I think that I should give up and assume that all illogical repeated addresses are inlines. Thanks everybody, especially, Jirka, Milian, Arnaldo and Steven. Perhaps some day I will be back and try to dig deeper (with your hints and assistance).

On 2020-04-01 01:27, ahmadkhorrami wrote:

On 2020-03-31 19:59, Milian Wolff wrote:

On Dienstag, 31. März 2020 17:02:37 CEST ahmadkhorrami wrote:

Hi Milian,
Thanks for the detailed answer. Well, the bug you mentioned is bad news.
Because I sample using uppp. Perhaps this leads to these weird traces.
Please read the full thread from here on:

But as I said - it should be easy to check if this is really the issue are running into or not: Try to see if you see the problem when you sample without `ppp`. If not, then you can be pretty sure it's this issue. If you still see it, then it's something different. Well, the problem exists even when ":uppp" is changed to ":u".

Is this a purely software bug?
I wouldn't call it that, personally. Rather, it's a limitation in the hardware and software. We would need something completely different to "fix" this, i.e. something like a deeper LBR. That's btw another alternative you could try: `perf record --call-graph lbr` and live with the short call stacks. But at least these should be correct (afaik). For me personally they are always far
too short and thus not practical to use in reality.


[Index of Archives]     [Linux USB Development]     [Linux USB Development]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux