From: "Steinar H. Gunderson" <sgunderson@bigfoot.com>
To: peterz@infradead.org
Cc: linux-kernel@vger.kernel.org
Subject: Inlined functions in perf report
Date: Tue, 20 Dec 2016 12:59:54 +0100 [thread overview]
Message-ID: <20161220115954.GA35897@sesse.net> (raw)
Hi Peter,
I can't find a good point of contact for perf, so I'm contacting you based on
the MAINTAINERS file; feel free to redirect somewhere if you're not the right
person.
I'm trying to figure out how to deal with perf report when there are inlined
functions; they don't generally seem to show up in the call stack, which
sometimes can make it very hard to figure out what is going, especially in
a code base one doesn't know too well. As an example, I threw together a
minimal test program:
#include <stdlib.h>
inline int foo()
{
int k = rand();
int sum = 1;
for (int i = 0; i < 10000000000; ++i)
{
sum ^= k;
sum += k;
}
return sum;
}
int main(void)
{
return foo();
}
Compiling with -O2 -g, and running perf record -g yields:
# Samples: 6K of event 'cycles:ppp'
# Event count (approx.): 5876825543
#
# Children Self Command Shared Object Symbol
# ........ ........ ....... ................. ......................
#
99.98% 99.98% inline inline [.] main
|
---0x706258d4c544155
main
99.98% 0.00% inline [unknown] [.] 0x0706258d4c544155
|
---0x706258d4c544155
main
Is there a way I can get it to show “foo” in the call graph? (I suppose also
ideally, “foo” and not “main” should show up in a non-graph run.) Of course,
this gets even more confusing if foo calls bar, since it now looks like the
call chain is main -> bar directly.
I have debug information that should be sufficient in the binary, because if
I break in gdb, I definitely get the call stack:
Program received signal SIGINT, Interrupt.
0x0000555555554589 in foo () at inline.c:5
5 int k = rand();
(gdb) bt
#0 0x0000555555554589 in foo () at inline.c:5
#1 main () at inline.c:17
(gdb)
FWIW, this is with perf from 4.10 (git as of a few days ago) and GCC 6.2.1.
/* Steinar */
--
Homepage: https://www.sesse.net/
next reply other threads:[~2016-12-20 12:35 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-20 11:59 Steinar H. Gunderson [this message]
2016-12-20 12:17 ` Inlined functions in perf report Peter Zijlstra
2016-12-20 13:27 ` Milian Wolff
2016-12-20 13:43 ` Steinar H. Gunderson
2016-12-20 14:03 ` Milian Wolff
2016-12-20 13:54 ` Arnaldo Carvalho de Melo
2016-12-20 14:05 ` Milian Wolff
2016-12-20 14:08 ` Steinar H. Gunderson
2016-12-20 14:37 ` Arnaldo Carvalho de Melo
2016-12-20 17:01 ` Steinar H. Gunderson
2016-12-21 0:53 ` Jin, Yao
2016-12-21 9:58 ` Steinar H. Gunderson
2016-12-21 10:09 ` Milian Wolff
2016-12-21 10:20 ` Steinar H. Gunderson
2016-12-21 22:56 ` Jin, Yao
2016-12-21 22:58 ` Steinar H. Gunderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161220115954.GA35897@sesse.net \
--to=sgunderson@bigfoot.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.