From: Ingo Molnar <mingo@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Arnaldo Carvalho de Melo <acme@kernel.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Paul Mackerras <paulus@samba.org>,
Namhyung Kim <namhyung.kim@lge.com>,
LKML <linux-kernel@vger.kernel.org>, Jiri Olsa <jolsa@redhat.com>,
David Ahern <dsahern@gmail.com>,
Adrian Hunter <adrian.hunter@intel.com>,
Stephane Eranian <eranian@google.com>,
Andi Kleen <andi@firstfloor.org>,
stable@vger.kernel.org
Subject: Re: [PATCH v4] perf tools: Fix build-id matching on vmlinux
Date: Wed, 24 Sep 2014 09:33:56 +0200 [thread overview]
Message-ID: <20140924073356.GB1962@gmail.com> (raw)
In-Reply-To: <1411373053-24250-1-git-send-email-namhyung@kernel.org>
* Namhyung Kim <namhyung@kernel.org> wrote:
> There's a problem on finding correct kernel symbols when perf report
> runs on a different kernel. Although a part of the problem was solved
> by the prior commit 0a7e6d1b6844 ("perf tools: Check recorded kernel
> version when finding vmlinux"), there's a remaining problem still.
>
> When perf records samples, it synthesizes the kernel map using
> machine__mmap_name() and ref_reloc_sym like "[kernel.kallsyms]_text".
> You can easily see it using 'perf report -D' command.
>
> After finishing record, it goes through the recorded events to find
> maps/dsos actually used. And then record build-id info of them.
>
> During this process, it needs to load symbols in a dso and it'd call
> dso__load_vmlinux() since the default value of the symbol_conf.try_
> vmlinux_path is true. However it changes dso->long_name to a real
> path of the vmlinux file (e.g. /lib/modules/3.16.0-rc2+/build/vmlinux)
> if one is running on a custom kernel.
>
> It resulted in that perf report reads the build-id of the vmlinux, but
> cannot use it since it only knows about the [kernel.kallsyms] map. It
> then falls back to possible vmlinux paths by using the recorded kernel
> version (in case of a recent version) or a running kernel silently.
>
> Even with the recent tools, this still has a possibility of breaking
> the result. As the build directory is a symbolic link, if one built a
> new kernel in the same directory with different source/config, the old
> link to vmlinux will point the new file. So it's absolutely needed to
> use build-id when finding a kernel image.
>
> In this patch, it's now changed to try to search a kernel dso in the
> existing dso list which was constructed during build-id table parsing
> so it'll always have a build-id. If not found, search "[kernel.kallsyms]".
>
> Before:
>
> $ perf report
> # Children Self Command Shared Object Symbol
> # ........ ........ ....... ................. ...............................
> #
> 72.15% 0.00% swapper [kernel.kallsyms] [k] set_curr_task_rt
> 72.15% 0.00% swapper [kernel.kallsyms] [k] native_calibrate_tsc
> 72.15% 0.00% swapper [kernel.kallsyms] [k] tsc_refine_calibration_work
> 71.87% 71.87% swapper [kernel.kallsyms] [k] module_finalize
> ...
>
> After (for the same perf.data):
>
> 72.15% 0.00% swapper vmlinux [k] cpu_startup_entry
> 72.15% 0.00% swapper vmlinux [k] arch_cpu_idle
> 72.15% 0.00% swapper vmlinux [k] default_idle
> 71.87% 71.87% swapper vmlinux [k] native_safe_halt
> ...
>
> Cc: stable@vger.kernel.org
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/util/machine.c | 23 +++++++++++++++++++++--
> 1 file changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/tools/perf/util/machine.c b/tools/perf/util/machine.c
> index b2ec38bf211e..5661195a8cf6 100644
> --- a/tools/perf/util/machine.c
> +++ b/tools/perf/util/machine.c
> @@ -12,6 +12,7 @@
> #include <stdbool.h>
> #include <symbol/kallsyms.h>
> #include "unwind.h"
> +#include "asm/bug.h"
>
> int machine__init(struct machine *machine, const char *root_dir, pid_t pid)
> {
> @@ -1062,8 +1063,26 @@ static int machine__process_kernel_mmap_event(struct machine *machine,
> * Should be there already, from the build-id table in
> * the header.
> */
> - struct dso *kernel = __dsos__findnew(&machine->kernel_dsos,
> - kmmap_prefix);
> + struct dso *kernel = NULL;
> + struct dso *dso;
> +
> + list_for_each_entry(dso, &machine->kernel_dsos, node) {
> + const char *suffix;
> + size_t len = strlen(dso->long_name);
> +
> + if (WARN_ONCE(len <= 3, "Too short dso name"))
> + continue;
> +
> + suffix = dso->long_name + len - 3;
> + if (strcmp(suffix, ".ko")) {
> + kernel = dso;
> + break;
> + }
> + }
> +
> + if (kernel == NULL)
> + kernel = __dsos__findnew(&machine->kernel_dsos,
> + kmmap_prefix);
Please don't break the line just to pacify checkpatch.pl. Other
than that:
Acked-by: Ingo Molnar <mingo@kernel.org>
Thanks,
Ing
next prev parent reply other threads:[~2014-09-24 7:34 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-09-22 8:04 [PATCH v4] perf tools: Fix build-id matching on vmlinux Namhyung Kim
2014-09-24 7:33 ` Ingo Molnar [this message]
2014-09-29 4:45 ` Namhyung Kim
-- strict thread matches above, loose matches on Subject: below --
2014-11-03 7:27 [PATCHSET 0/8] perf tools: Fix build-id matching on vmlinux (v5) Namhyung Kim
2014-11-03 7:27 ` [PATCH 1/8] perf tools: Preparation for compressed kernel module support Namhyung Kim
2014-11-03 13:51 ` Jiri Olsa
2014-11-03 15:01 ` Namhyung Kim
2014-11-03 7:27 ` [PATCH 2/8] perf tools: Add gzip decompression support for kernel module Namhyung Kim
2014-11-03 13:54 ` Jiri Olsa
2014-11-03 15:02 ` Namhyung Kim
2014-11-03 7:27 ` [PATCH 3/8] perf tools: Get rid of unused dsos__hit_all() Namhyung Kim
2014-11-03 7:35 ` Adrian Hunter
2014-11-03 7:39 ` Namhyung Kim
2014-11-03 7:51 ` Adrian Hunter
2014-11-03 7:27 ` [PATCH 4/8] perf tools: Rename dsos__write_buildid_table() Namhyung Kim
2014-11-03 7:27 ` [PATCH 5/8] perf build-id: Move build-id related functions to util/build-id.c Namhyung Kim
2014-11-03 7:27 ` [PATCH 6/8] perf record: Do not save pathname in ./debug/.build-id directory for vmlinux Namhyung Kim
2014-11-03 7:27 ` [PATCH 7/8] perf tools: Fix build-id matching on vmlinux Namhyung Kim
2014-11-03 7:27 ` [PATCH 8/8] perf tools: Make vmlinux short name more like kallsyms short name Namhyung Kim
2014-11-04 1:14 [PATCHSET 0/8] perf tools: Fix build-id matching on vmlinux (v6) Namhyung Kim
2014-11-04 1:14 ` [PATCH 1/8] perf tools: Preparation for compressed kernel module support Namhyung Kim
2014-11-04 10:58 ` Jiri Olsa
2014-11-07 5:29 ` [tip:perf/core] perf symbols: " tip-bot for Namhyung Kim
2014-11-04 1:14 ` [PATCH 2/8] perf tools: Add gzip decompression support for kernel module Namhyung Kim
2014-11-04 11:00 ` Jiri Olsa
2014-11-04 13:42 ` Arnaldo Carvalho de Melo
2014-11-05 2:59 ` Namhyung Kim
2014-11-07 5:30 ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-11-04 14:15 ` [PATCH 2/8] " Arnaldo Carvalho de Melo
2014-11-05 3:04 ` Namhyung Kim
2014-11-04 1:14 ` [PATCH 3/8] perf tools: Rename dsos__write_buildid_table() Namhyung Kim
2014-11-07 5:30 ` [tip:perf/core] perf build-id: " tip-bot for Namhyung Kim
2014-11-04 1:14 ` [PATCH 4/8] perf build-id: Move build-id related functions to util/build-id.c Namhyung Kim
2014-11-07 5:30 ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-11-04 1:14 ` [PATCH 5/8] perf tools: Move disable_buildid_cache() " Namhyung Kim
2014-11-04 1:14 ` [PATCH 6/8] perf record: Do not save pathname in ./debug/.build-id directory for vmlinux Namhyung Kim
2014-11-04 13:29 ` Arnaldo Carvalho de Melo
2014-11-05 2:54 ` Namhyung Kim
2014-11-07 5:30 ` [tip:perf/core] perf record: Do not save pathname in ./debug/ .build-id " tip-bot for Namhyung Kim
2014-11-04 1:14 ` [PATCH 7/8] perf tools: Fix build-id matching on vmlinux Namhyung Kim
2014-11-07 5:31 ` [tip:perf/core] " tip-bot for Namhyung Kim
2014-11-04 1:14 ` [PATCH 8/8] perf tools: Make vmlinux short name more like kallsyms short name Namhyung Kim
2014-11-07 5:31 ` [tip:perf/core] " tip-bot for Namhyung Kim
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=20140924073356.GB1962@gmail.com \
--to=mingo@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=andi@firstfloor.org \
--cc=dsahern@gmail.com \
--cc=eranian@google.com \
--cc=jolsa@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=namhyung.kim@lge.com \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
--cc=stable@vger.kernel.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.