tools/perf/builtin-trace.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-)
It needs to synthesize task info for the comm name. The mmap
information is only needed for callchain symbolization which is not used
by the summary mode. Also total or cgroup summary mode don't require
the task info. Let's skip the processing if possible.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/builtin-trace.c | 22 +++++++++++++++++-----
1 file changed, 17 insertions(+), 5 deletions(-)
diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
index f487fbaa0ad60028..d09d78b3222717d1 100644
--- a/tools/perf/builtin-trace.c
+++ b/tools/perf/builtin-trace.c
@@ -2004,11 +2004,23 @@ static int trace__symbols_init(struct trace *trace, int argc, const char **argv,
if (err < 0)
goto out;
- err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
- evlist->core.threads, trace__tool_process,
- /*needs_mmap=*/callchain_param.enabled,
- /*mmap_data=*/false,
- /*nr_threads_synthesize=*/1);
+ if (trace->summary_only) {
+ if (trace->summary_mode == SUMMARY__BY_THREAD) {
+ err = __machine__synthesize_threads(trace->host, &trace->tool,
+ &trace->opts.target,
+ evlist->core.threads,
+ trace__tool_process,
+ /*needs_mmap=*/false,
+ /*mmap_data=*/false,
+ /*nr_threads_synthesize=*/1);
+ }
+ } else {
+ err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
+ evlist->core.threads, trace__tool_process,
+ /*needs_mmap=*/callchain_param.enabled,
+ /*mmap_data=*/false,
+ /*nr_threads_synthesize=*/1);
+ }
out:
if (err) {
perf_env__exit(&trace->host_env);
--
2.53.0.1185.g05d4b7b318-goog
On Mon, Mar 30, 2026 at 1:14 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> It needs to synthesize task info for the comm name. The mmap
> information is only needed for callchain symbolization which is not used
> by the summary mode. Also total or cgroup summary mode don't require
> the task info. Let's skip the processing if possible.
>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/builtin-trace.c | 22 +++++++++++++++++-----
> 1 file changed, 17 insertions(+), 5 deletions(-)
>
> diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> index f487fbaa0ad60028..d09d78b3222717d1 100644
> --- a/tools/perf/builtin-trace.c
> +++ b/tools/perf/builtin-trace.c
> @@ -2004,11 +2004,23 @@ static int trace__symbols_init(struct trace *trace, int argc, const char **argv,
> if (err < 0)
> goto out;
>
> - err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
> - evlist->core.threads, trace__tool_process,
> - /*needs_mmap=*/callchain_param.enabled,
> - /*mmap_data=*/false,
> - /*nr_threads_synthesize=*/1);
> + if (trace->summary_only) {
> + if (trace->summary_mode == SUMMARY__BY_THREAD) {
> + err = __machine__synthesize_threads(trace->host, &trace->tool,
> + &trace->opts.target,
> + evlist->core.threads,
> + trace__tool_process,
> + /*needs_mmap=*/false,
> + /*mmap_data=*/false,
> + /*nr_threads_synthesize=*/1);
> + }
> + } else {
> + err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
> + evlist->core.threads, trace__tool_process,
> + /*needs_mmap=*/callchain_param.enabled,
> + /*mmap_data=*/false,
> + /*nr_threads_synthesize=*/1);
> + }
Could this be simplified to something like:
```
if (!trace->summary_only || trace->summary_mode == SUMMARY__BY_THREAD) {
err = __machine__synthesize_threads(trace->host, &trace->tool,
&trace->opts.target,
evlist->core.threads,
trace__tool_process,
/*needs_mmap=*/callchain_param.enabled && !trace->summary_only,
/*mmap_data=*/false,
/*nr_threads_synthesize=*/1);
}
```
Thanks,
Ian
> out:
> if (err) {
> perf_env__exit(&trace->host_env);
> --
> 2.53.0.1185.g05d4b7b318-goog
>
On Mon, Mar 30, 2026 at 02:00:08PM -0700, Ian Rogers wrote:
> On Mon, Mar 30, 2026 at 1:14 PM Namhyung Kim <namhyung@kernel.org> wrote:
> >
> > It needs to synthesize task info for the comm name. The mmap
> > information is only needed for callchain symbolization which is not used
> > by the summary mode. Also total or cgroup summary mode don't require
> > the task info. Let's skip the processing if possible.
> >
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> > ---
> > tools/perf/builtin-trace.c | 22 +++++++++++++++++-----
> > 1 file changed, 17 insertions(+), 5 deletions(-)
> >
> > diff --git a/tools/perf/builtin-trace.c b/tools/perf/builtin-trace.c
> > index f487fbaa0ad60028..d09d78b3222717d1 100644
> > --- a/tools/perf/builtin-trace.c
> > +++ b/tools/perf/builtin-trace.c
> > @@ -2004,11 +2004,23 @@ static int trace__symbols_init(struct trace *trace, int argc, const char **argv,
> > if (err < 0)
> > goto out;
> >
> > - err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
> > - evlist->core.threads, trace__tool_process,
> > - /*needs_mmap=*/callchain_param.enabled,
> > - /*mmap_data=*/false,
> > - /*nr_threads_synthesize=*/1);
> > + if (trace->summary_only) {
> > + if (trace->summary_mode == SUMMARY__BY_THREAD) {
> > + err = __machine__synthesize_threads(trace->host, &trace->tool,
> > + &trace->opts.target,
> > + evlist->core.threads,
> > + trace__tool_process,
> > + /*needs_mmap=*/false,
> > + /*mmap_data=*/false,
> > + /*nr_threads_synthesize=*/1);
> > + }
> > + } else {
> > + err = __machine__synthesize_threads(trace->host, &trace->tool, &trace->opts.target,
> > + evlist->core.threads, trace__tool_process,
> > + /*needs_mmap=*/callchain_param.enabled,
> > + /*mmap_data=*/false,
> > + /*nr_threads_synthesize=*/1);
> > + }
>
> Could this be simplified to something like:
> ```
> if (!trace->summary_only || trace->summary_mode == SUMMARY__BY_THREAD) {
> err = __machine__synthesize_threads(trace->host, &trace->tool,
> &trace->opts.target,
> evlist->core.threads,
> trace__tool_process,
>
> /*needs_mmap=*/callchain_param.enabled && !trace->summary_only,
> /*mmap_data=*/false,
> /*nr_threads_synthesize=*/1);
> }
> ```
Looks good, will update.
Btw, it'd be nice if you could find a mail client that can turn off the
line wrapping. :)
Thanks,
Namhyung
© 2016 - 2026 Red Hat, Inc.