[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAP-5=fWnD_Ov+rf6sUxrSqu3MSy_TW+xFdD8gXOkz7nn=fUHkg@mail.gmail.com>
Date: Tue, 24 Oct 2023 20:42:45 -0700
From: Ian Rogers <irogers@...gle.com>
To: Namhyung Kim <namhyung@...nel.org>
Cc: Arnaldo Carvalho de Melo <acme@...nel.org>,
Jiri Olsa <jolsa@...nel.org>,
Adrian Hunter <adrian.hunter@...el.com>,
Peter Zijlstra <peterz@...radead.org>,
Ingo Molnar <mingo@...nel.org>,
LKML <linux-kernel@...r.kernel.org>,
linux-perf-users@...r.kernel.org
Subject: Re: [PATCH] perf report: Fix hierarchy mode on pipe input
On Tue, Oct 24, 2023 at 5:31 PM Namhyung Kim <namhyung@...nel.org> wrote:
>
> The hierarchy mode needs to setup output formats for each evsel.
> Normally setup_sorting() handles this at the beginning, but it cannot
> do that if data comes from a pipe since there's no evsel info before
> reading the data. And then perf report cannot process the samples
> in hierarchy mode and think as if there's no sample.
>
> Let's check the condition and setup the output formats after reading
> data so that it can find evsels.
>
> Before:
>
> $ ./perf record -o- true | ./perf report -i- --hierarchy -q
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.000 MB - ]
> Error:
> The - data has no samples!
>
> After:
>
> $ ./perf record -o- true | ./perf report -i- --hierarchy -q
> [ perf record: Woken up 1 times to write data ]
> [ perf record: Captured and wrote 0.000 MB - ]
> 94.76% true
> 94.76% [kernel.kallsyms]
> 94.76% [k] filemap_fault
> 5.24% perf-ex
> 5.24% [kernel.kallsyms]
> 5.06% [k] __memset
> 0.18% [k] native_write_msr
>
> Signed-off-by: Namhyung Kim <namhyung@...nel.org>
Acked-by: Ian Rogers <irogers@...gle.com>
Thanks,
Ian
> ---
> tools/perf/builtin-report.c | 15 +++++++++++++++
> 1 file changed, 15 insertions(+)
>
> diff --git a/tools/perf/builtin-report.c b/tools/perf/builtin-report.c
> index dcedfe00f04d..ca8f2331795c 100644
> --- a/tools/perf/builtin-report.c
> +++ b/tools/perf/builtin-report.c
> @@ -691,10 +691,25 @@ static int report__browse_hists(struct report *rep)
>
> static int report__collapse_hists(struct report *rep)
> {
> + struct perf_session *session = rep->session;
> + struct evlist *evlist = session->evlist;
> struct ui_progress prog;
> struct evsel *pos;
> int ret = 0;
>
> + /*
> + * The pipe data needs to setup hierarchy hpp formats now, because it
> + * cannot know about evsels in the data before reading the data. The
> + * normal file data saves the event (attribute) info in the header
> + * section, but pipe does not have the luxury.
> + */
> + if (perf_data__is_pipe(session->data)) {
> + if (perf_hpp__setup_hists_formats(&perf_hpp_list, evlist) < 0) {
> + ui__error("Failed to setup hierachy output formats\n");
> + return -1;
> + }
> + }
> +
> ui_progress__init(&prog, rep->nr_entries, "Merging related events...");
>
> evlist__for_each_entry(rep->session->evlist, pos) {
> --
> 2.42.0.758.gaed0368e0e-goog
>
Powered by blists - more mailing lists