From mboxrd@z Thu Jan 1 00:00:00 1970 From: Milian Wolff Subject: Re: [PATCH v6 6/6] perf util: use correct IP mapping to find srcline for hist entry Date: Thu, 19 Oct 2017 12:54:18 +0200 Message-ID: <3026429.kO1GvhRXjL@agathebauer> References: <20171018185350.14893-1-milian.wolff@kdab.com> <20171018185350.14893-7-milian.wolff@kdab.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7Bit Return-path: Received: from mail.kdab.com ([176.9.126.58]:49288 "EHLO mail.kdab.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751824AbdJSKyW (ORCPT ); Thu, 19 Oct 2017 06:54:22 -0400 In-Reply-To: <20171018185350.14893-7-milian.wolff@kdab.com> Sender: linux-perf-users-owner@vger.kernel.org List-ID: To: acme@kernel.org Cc: jolsa@kernel.org, namhyung@kernel.org, Linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Arnaldo Carvalho de Melo , Yao Jin , Jiri Olsa On Mittwoch, 18. Oktober 2017 20:53:50 CEST Milian Wolff wrote: > When inline frame resolution is disabled, a bogus srcline is obtained > for hist entries: > > ~~~~~ > $ perf report -s sym,srcline --no-inline --stdio -g none > 95.21% 0.00% [.] __libc_start_main > > __libc_start_main+18446603358170398953 95.21% 0.00% [.] _start > > _start+18446650082411225129 46.67% 0.00% [.] > main > main+18446650082411225208 38.75% > 0.00% [.] hypot > > hypot+18446603358164312084 23.75% 0.00% [.] main > > main+18446650082411225151 20.83% 20.83% [.] > std::generate_canonical std::linear_congruential_engine > > random.h:143 18.12% 0.00% [.] main > > main+18446650082411225165 13.12% 13.12% [.] > std::generate_canonical std::linear_congruential_engine > > random.tcc:3330 4.17% 4.17% [.] __hypot_finite > > __hypot_finite+163 4.17% 4.17% [.] std::generate_canonical 53ul, std::linear_congruential_engine 2147483647ul> > random.tcc:3333 4.17% 0.00% [.] __hypot_finite > > __hypot_finite+18446603358164312227 4.17% 0.00% [.] > std::generate_canonical std::linear_congruential_engine > > std::generate_canonical std::generate_canonical std::linear_congruential_engine > > std::generate_canonical __hypot_finite > __hypot_finite+11 2.50% 2.50% > [.] __hypot_finite > __hypot_finite+24 2.50% > 0.00% [.] __hypot_finite > > __hypot_finite+18446603358164312075 2.50% 0.00% [.] __hypot_finite > > __hypot_finite+18446603358164312088 ~~~~~ > > Note how we get very large offsets to main and cannot see any srcline > from one of the complex or random headers, even though the instruction > pointers actually lie in code inlined from there. > > This patch fixes the mapping to use map__objdump_2mem instead of > map__objdump_2mem in hist_entry__get_srcline. This fixes the srcline > values for me when inline resolution is disabled: > > ~~~~~ > $ perf report -s sym,srcline --no-inline --stdio -g none > 95.21% 0.00% [.] __libc_start_main > > __libc_start_main+233 95.21% 0.00% [.] _start > > _start+41 46.88% 0.00% [.] main > > complex:589 43.96% 0.00% [.] main > > random.h:185 38.75% 0.00% [.] hypot > > hypot+20 20.83% 0.00% [.] std::generate_canonical std::linear_congruential_engine > > random.h:143 13.12% 0.00% [.] std::generate_canonical std::linear_congruential_engine > > random.tcc:3330 4.17% 4.17% [.] __hypot_finite > > __hypot_finite+140715545239715 4.17% 4.17% [.] > std::generate_canonical std::linear_congruential_engine > > std::generate_canonical __hypot_finite > __hypot_finite+163 4.17% 0.00% > [.] std::generate_canonical std::linear_congruential_engine > > random.tcc:3333 2.92% 2.92% [.] std::generate_canonical 53ul, std::linear_congruential_engine 2147483647ul> > std::generate_canonical 2.50% [.] __hypot_finite > > __hypot_finite+140715545239563 2.50% 2.50% [.] __hypot_finite > > __hypot_finite+140715545239576 2.50% 2.50% [.] > std::generate_canonical std::linear_congruential_engine > > std::generate_canonical std::generate_canonical std::linear_congruential_engine > > std::generate_canonical __hypot_finite > __hypot_finite+11 ~~~~~ > > Cc: Arnaldo Carvalho de Melo > Cc: Namhyung Kim > Cc: Yao Jin > Cc: Jiri Olsa > Signed-off-by: Milian Wolff > > Note how most of the large offset values are now gone. Most notably, > we get proper srcline resolution for the random.h and complex headers. > --- > tools/perf/util/sort.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c > index 006d10a0dc96..6f3d109078a3 100644 > --- a/tools/perf/util/sort.c > +++ b/tools/perf/util/sort.c > @@ -334,7 +334,7 @@ char *hist_entry__get_srcline(struct hist_entry *he) > if (!map) > return SRCLINE_UNKNOWN; > > - return get_srcline(map->dso, map__rip_2objdump(map, he->ip), > + return get_srcline(map->dso, map__objdump_2mem(map, he->ip), > he->ms.sym, true, true); > } Sorry, this patch was declined by Nahmyung before, please discard it - I forgot to do that before resending v6. Bye -- Milian Wolff | milian.wolff@kdab.com | Senior Software Engineer KDAB (Deutschland) GmbH&Co KG, a KDAB Group company Tel: +49-30-521325470 KDAB - The Qt Experts