From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Namhyung Kim <namhyung@kernel.org>
Cc: Jiri Olsa <jolsa@kernel.org>, Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
LKML <linux-kernel@vger.kernel.org>,
Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
linux-perf-users@vger.kernel.org
Subject: Re: [PATCH v2 2/2] perf record: Save DSO build-ID for synthesizing
Date: Wed, 21 Sep 2022 14:50:23 +0100 [thread overview]
Message-ID: <YysWn/W3+dXlZnYG@kernel.org> (raw)
In-Reply-To: <20220920222822.2171056-2-namhyung@kernel.org>
Em Tue, Sep 20, 2022 at 03:28:22PM -0700, Namhyung Kim escreveu:
> When synthesizing MMAP2 with build-id, it'd read the same file repeatedly as
> it has no idea if it's done already. Maintain a dsos to check that and skip
> the file access if possible.
>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> v2 change)
> * Remove perf_event__synthesize_{start,stop} and use machine->dsos (Adrian)
Will wait till I merge perf/urgent into perf/core so that this applies.
- Arnaldo
> tools/perf/util/synthetic-events.c | 25 ++++++++++++++++++++++---
> 1 file changed, 22 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/util/synthetic-events.c b/tools/perf/util/synthetic-events.c
> index 289ea17ac5f7..cccd293b5312 100644
> --- a/tools/perf/util/synthetic-events.c
> +++ b/tools/perf/util/synthetic-events.c
> @@ -364,11 +364,14 @@ static bool read_proc_maps_line(struct io *io, __u64 *start, __u64 *end,
> }
>
> static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *event,
> + struct machine *machine,
> bool is_kernel)
> {
> struct build_id bid;
> struct nsinfo *nsi;
> struct nscookie nc;
> + struct dso *dso = NULL;
> + struct dso_id id;
> int rc;
>
> if (is_kernel) {
> @@ -376,6 +379,18 @@ static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *event,
> goto out;
> }
>
> + id.maj = event->maj;
> + id.min = event->min;
> + id.ino = event->ino;
> + id.ino_generation = event->ino_generation;
> +
> + dso = dsos__findnew_id(&machine->dsos, event->filename, &id);
> + if (dso && dso->has_build_id) {
> + bid = dso->bid;
> + rc = 0;
> + goto out;
> + }
> +
> nsi = nsinfo__new(event->pid);
> nsinfo__mountns_enter(nsi, &nc);
>
> @@ -391,12 +406,16 @@ static void perf_record_mmap2__read_build_id(struct perf_record_mmap2 *event,
> event->header.misc |= PERF_RECORD_MISC_MMAP_BUILD_ID;
> event->__reserved_1 = 0;
> event->__reserved_2 = 0;
> +
> + if (dso && !dso->has_build_id)
> + dso__set_build_id(dso, &bid);
> } else {
> if (event->filename[0] == '/') {
> pr_debug2("Failed to read build ID for %s\n",
> event->filename);
> }
> }
> + dso__put(dso);
> }
>
> int perf_event__synthesize_mmap_events(struct perf_tool *tool,
> @@ -507,7 +526,7 @@ int perf_event__synthesize_mmap_events(struct perf_tool *tool,
> event->mmap2.tid = pid;
>
> if (symbol_conf.buildid_mmap2)
> - perf_record_mmap2__read_build_id(&event->mmap2, false);
> + perf_record_mmap2__read_build_id(&event->mmap2, machine, false);
>
> if (perf_tool__process_synth_event(tool, event, machine, process) != 0) {
> rc = -1;
> @@ -690,7 +709,7 @@ int perf_event__synthesize_modules(struct perf_tool *tool, perf_event__handler_t
> memcpy(event->mmap2.filename, pos->dso->long_name,
> pos->dso->long_name_len + 1);
>
> - perf_record_mmap2__read_build_id(&event->mmap2, false);
> + perf_record_mmap2__read_build_id(&event->mmap2, machine, false);
> } else {
> size = PERF_ALIGN(pos->dso->long_name_len + 1, sizeof(u64));
> event->mmap.header.type = PERF_RECORD_MMAP;
> @@ -1126,7 +1145,7 @@ static int __perf_event__synthesize_kernel_mmap(struct perf_tool *tool,
> event->mmap2.len = map->end - event->mmap.start;
> event->mmap2.pid = machine->pid;
>
> - perf_record_mmap2__read_build_id(&event->mmap2, true);
> + perf_record_mmap2__read_build_id(&event->mmap2, machine, true);
> } else {
> size = snprintf(event->mmap.filename, sizeof(event->mmap.filename),
> "%s%s", machine->mmap_name, kmap->ref_reloc_sym->name) + 1;
> --
> 2.37.3.968.ga6b4b080e4-goog
--
- Arnaldo
next prev parent reply other threads:[~2022-09-21 13:50 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-20 22:28 [PATCH v2 1/2] perf tools: Honor namespace when synthesizing build-id Namhyung Kim
2022-09-20 22:28 ` [PATCH v2 2/2] perf record: Save DSO build-ID for synthesizing Namhyung Kim
2022-09-21 13:50 ` Arnaldo Carvalho de Melo [this message]
2022-09-21 17:55 ` Namhyung Kim
2022-10-05 17:50 ` Namhyung Kim
2022-10-05 18:24 ` Arnaldo Carvalho de Melo
2022-09-21 13:49 ` [PATCH v2 1/2] perf tools: Honor namespace when synthesizing build-id Arnaldo Carvalho de Melo
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=YysWn/W3+dXlZnYG@kernel.org \
--to=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=irogers@google.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@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.