* [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians
@ 2025-03-07 6:12 Namhyung Kim
2025-03-07 6:12 ` [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode Namhyung Kim
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Namhyung Kim @ 2025-03-07 6:12 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Ian Rogers, Kan Liang
Cc: Jiri Olsa, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users
It seems there are places to miss updating refcount of maps.
Let's use map_symbol__copy() helper to properly copy them with
refcounts updated.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/util/callchain.c | 10 +++-------
1 file changed, 3 insertions(+), 7 deletions(-)
diff --git a/tools/perf/util/callchain.c b/tools/perf/util/callchain.c
index 0c7564747a14e539..d7b7eef740b9d6ed 100644
--- a/tools/perf/util/callchain.c
+++ b/tools/perf/util/callchain.c
@@ -589,9 +589,7 @@ fill_node(struct callchain_node *node, struct callchain_cursor *cursor)
return -ENOMEM;
}
call->ip = cursor_node->ip;
- call->ms = cursor_node->ms;
- call->ms.map = map__get(call->ms.map);
- call->ms.maps = maps__get(call->ms.maps);
+ map_symbol__copy(&call->ms, &cursor_node->ms);
call->srcline = cursor_node->srcline;
if (cursor_node->branch) {
@@ -1094,9 +1092,7 @@ int callchain_cursor_append(struct callchain_cursor *cursor,
node->ip = ip;
map_symbol__exit(&node->ms);
- node->ms = *ms;
- node->ms.maps = maps__get(ms->maps);
- node->ms.map = map__get(ms->map);
+ map_symbol__copy(&node->ms, ms);
node->branch = branch;
node->nr_loop_iter = nr_loop_iter;
node->iter_cycles = iter_cycles;
@@ -1564,7 +1560,7 @@ int callchain_node__make_parent_list(struct callchain_node *node)
goto out;
*new = *chain;
new->has_children = false;
- new->ms.map = map__get(new->ms.map);
+ map_symbol__copy(&new->ms, &chain->ms);
list_add_tail(&new->list, &head);
}
parent = parent->parent;
--
2.49.0.rc0.332.g42c0ae87b1-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode
2025-03-07 6:12 [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
@ 2025-03-07 6:12 ` Namhyung Kim
2025-03-07 16:28 ` Falcon, Thomas
2025-03-07 18:55 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Markus Elfring
2025-03-08 18:24 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
2 siblings, 1 reply; 9+ messages in thread
From: Namhyung Kim @ 2025-03-07 6:12 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Ian Rogers, Kan Liang
Cc: Jiri Olsa, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users
Ian told me that there are many memory leaks in the hierarchy mode. I
can easily reproduce it with the follwing command.
$ make DEBUG=1 EXTRA_CFLAGS=-fsanitize=leak
$ perf record --latency -g -- ./perf test -w thloop
$ perf report -H --stdio
...
Indirect leak of 168 byte(s) in 21 object(s) allocated from:
#0 0x7f3414c16c65 in malloc ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:75
#1 0x55ed3602346e in map__get util/map.h:189
#2 0x55ed36024cc4 in hist_entry__init util/hist.c:476
#3 0x55ed36025208 in hist_entry__new util/hist.c:588
#4 0x55ed36027c05 in hierarchy_insert_entry util/hist.c:1587
#5 0x55ed36027e2e in hists__hierarchy_insert_entry util/hist.c:1638
#6 0x55ed36027fa4 in hists__collapse_insert_entry util/hist.c:1685
#7 0x55ed360283e8 in hists__collapse_resort util/hist.c:1776
#8 0x55ed35de0323 in report__collapse_hists /home/namhyung/project/linux/tools/perf/builtin-report.c:735
#9 0x55ed35de15b4 in __cmd_report /home/namhyung/project/linux/tools/perf/builtin-report.c:1119
#10 0x55ed35de43dc in cmd_report /home/namhyung/project/linux/tools/perf/builtin-report.c:1867
#11 0x55ed35e66767 in run_builtin /home/namhyung/project/linux/tools/perf/perf.c:351
#12 0x55ed35e66a0e in handle_internal_command /home/namhyung/project/linux/tools/perf/perf.c:404
#13 0x55ed35e66b67 in run_argv /home/namhyung/project/linux/tools/perf/perf.c:448
#14 0x55ed35e66eb0 in main /home/namhyung/project/linux/tools/perf/perf.c:556
#15 0x7f340ac33d67 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58
...
$ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
93
I found that hist_entry__delete() missed to release child entries in the
hierarchy tree (hroot_{in,out}). It needs to iterate the child entries
and call hist_entry__delete() recursively.
After this change:
$ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
0
Reported-by: Ian Rogers <irogers@google.com>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
v2) Use rbtree_postorder_for_each_entry_safe() (Ian)
tools/perf/util/hist.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
index fbf131aeae7ffe9b..d65228c1141251fb 100644
--- a/tools/perf/util/hist.c
+++ b/tools/perf/util/hist.c
@@ -1385,6 +1385,16 @@ void hist_entry__delete(struct hist_entry *he)
{
struct hist_entry_ops *ops = he->ops;
+ if (symbol_conf.report_hierarchy) {
+ struct rb_root *root = &he->hroot_out.rb_root;
+ struct hist_entry *child, *tmp;
+
+ rbtree_postorder_for_each_entry_safe(child, tmp, root, rb_node)
+ hist_entry__delete(child);
+
+ *root = RB_ROOT;
+ }
+
thread__zput(he->thread);
map_symbol__exit(&he->ms);
--
2.49.0.rc0.332.g42c0ae87b1-goog
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode
2025-03-07 6:12 ` [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode Namhyung Kim
@ 2025-03-07 16:28 ` Falcon, Thomas
2025-03-07 17:33 ` Ian Rogers
0 siblings, 1 reply; 9+ messages in thread
From: Falcon, Thomas @ 2025-03-07 16:28 UTC (permalink / raw)
To: namhyung@kernel.org, acme@kernel.org, irogers@google.com,
kan.liang@linux.intel.com
Cc: jolsa@kernel.org, peterz@infradead.org, Hunter, Adrian,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
mingo@kernel.org
On Thu, 2025-03-06 at 22:12 -0800, Namhyung Kim wrote:
> Ian told me that there are many memory leaks in the hierarchy mode.
> I
> can easily reproduce it with the follwing command.
>
> $ make DEBUG=1 EXTRA_CFLAGS=-fsanitize=leak
>
> $ perf record --latency -g -- ./perf test -w thloop
>
> $ perf report -H --stdio
> ...
> Indirect leak of 168 byte(s) in 21 object(s) allocated from:
> #0 0x7f3414c16c65 in malloc
> ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:75
> #1 0x55ed3602346e in map__get util/map.h:189
> #2 0x55ed36024cc4 in hist_entry__init util/hist.c:476
> #3 0x55ed36025208 in hist_entry__new util/hist.c:588
> #4 0x55ed36027c05 in hierarchy_insert_entry util/hist.c:1587
> #5 0x55ed36027e2e in hists__hierarchy_insert_entry
> util/hist.c:1638
> #6 0x55ed36027fa4 in hists__collapse_insert_entry
> util/hist.c:1685
> #7 0x55ed360283e8 in hists__collapse_resort util/hist.c:1776
> #8 0x55ed35de0323 in report__collapse_hists
> /home/namhyung/project/linux/tools/perf/builtin-report.c:735
> #9 0x55ed35de15b4 in __cmd_report
> /home/namhyung/project/linux/tools/perf/builtin-report.c:1119
> #10 0x55ed35de43dc in cmd_report
> /home/namhyung/project/linux/tools/perf/builtin-report.c:1867
> #11 0x55ed35e66767 in run_builtin
> /home/namhyung/project/linux/tools/perf/perf.c:351
> #12 0x55ed35e66a0e in handle_internal_command
> /home/namhyung/project/linux/tools/perf/perf.c:404
> #13 0x55ed35e66b67 in run_argv
> /home/namhyung/project/linux/tools/perf/perf.c:448
> #14 0x55ed35e66eb0 in main
> /home/namhyung/project/linux/tools/perf/perf.c:556
> #15 0x7f340ac33d67 in __libc_start_call_main
> ../sysdeps/nptl/libc_start_call_main.h:58
> ...
>
> $ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
> 93
>
> I found that hist_entry__delete() missed to release child entries in
> the
> hierarchy tree (hroot_{in,out}). It needs to iterate the child
> entries
> and call hist_entry__delete() recursively.
>
> After this change:
>
> $ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
> 0
>
> Reported-by: Ian Rogers <irogers@google.com>
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Tested on an Arrow Lake system.
Tested-by Thomas Falcon <thomas.falcon@intel.com>
> ---
> v2) Use rbtree_postorder_for_each_entry_safe() (Ian)
>
> tools/perf/util/hist.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/tools/perf/util/hist.c b/tools/perf/util/hist.c
> index fbf131aeae7ffe9b..d65228c1141251fb 100644
> --- a/tools/perf/util/hist.c
> +++ b/tools/perf/util/hist.c
> @@ -1385,6 +1385,16 @@ void hist_entry__delete(struct hist_entry *he)
> {
> struct hist_entry_ops *ops = he->ops;
>
> + if (symbol_conf.report_hierarchy) {
> + struct rb_root *root = &he->hroot_out.rb_root;
> + struct hist_entry *child, *tmp;
> +
> + rbtree_postorder_for_each_entry_safe(child, tmp,
> root, rb_node)
> + hist_entry__delete(child);
> +
> + *root = RB_ROOT;
> + }
> +
> thread__zput(he->thread);
> map_symbol__exit(&he->ms);
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode
2025-03-07 16:28 ` Falcon, Thomas
@ 2025-03-07 17:33 ` Ian Rogers
0 siblings, 0 replies; 9+ messages in thread
From: Ian Rogers @ 2025-03-07 17:33 UTC (permalink / raw)
To: Falcon, Thomas
Cc: namhyung@kernel.org, acme@kernel.org, kan.liang@linux.intel.com,
jolsa@kernel.org, peterz@infradead.org, Hunter, Adrian,
linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
mingo@kernel.org
On Fri, Mar 7, 2025 at 8:28 AM Falcon, Thomas <thomas.falcon@intel.com> wrote:
>
> On Thu, 2025-03-06 at 22:12 -0800, Namhyung Kim wrote:
> > Ian told me that there are many memory leaks in the hierarchy mode.
> > I
> > can easily reproduce it with the follwing command.
> >
> > $ make DEBUG=1 EXTRA_CFLAGS=-fsanitize=leak
> >
> > $ perf record --latency -g -- ./perf test -w thloop
> >
> > $ perf report -H --stdio
> > ...
> > Indirect leak of 168 byte(s) in 21 object(s) allocated from:
> > #0 0x7f3414c16c65 in malloc
> > ../../../../src/libsanitizer/lsan/lsan_interceptors.cpp:75
> > #1 0x55ed3602346e in map__get util/map.h:189
> > #2 0x55ed36024cc4 in hist_entry__init util/hist.c:476
> > #3 0x55ed36025208 in hist_entry__new util/hist.c:588
> > #4 0x55ed36027c05 in hierarchy_insert_entry util/hist.c:1587
> > #5 0x55ed36027e2e in hists__hierarchy_insert_entry
> > util/hist.c:1638
> > #6 0x55ed36027fa4 in hists__collapse_insert_entry
> > util/hist.c:1685
> > #7 0x55ed360283e8 in hists__collapse_resort util/hist.c:1776
> > #8 0x55ed35de0323 in report__collapse_hists
> > /home/namhyung/project/linux/tools/perf/builtin-report.c:735
> > #9 0x55ed35de15b4 in __cmd_report
> > /home/namhyung/project/linux/tools/perf/builtin-report.c:1119
> > #10 0x55ed35de43dc in cmd_report
> > /home/namhyung/project/linux/tools/perf/builtin-report.c:1867
> > #11 0x55ed35e66767 in run_builtin
> > /home/namhyung/project/linux/tools/perf/perf.c:351
> > #12 0x55ed35e66a0e in handle_internal_command
> > /home/namhyung/project/linux/tools/perf/perf.c:404
> > #13 0x55ed35e66b67 in run_argv
> > /home/namhyung/project/linux/tools/perf/perf.c:448
> > #14 0x55ed35e66eb0 in main
> > /home/namhyung/project/linux/tools/perf/perf.c:556
> > #15 0x7f340ac33d67 in __libc_start_call_main
> > ../sysdeps/nptl/libc_start_call_main.h:58
> > ...
> >
> > $ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
> > 93
> >
> > I found that hist_entry__delete() missed to release child entries in
> > the
> > hierarchy tree (hroot_{in,out}). It needs to iterate the child
> > entries
> > and call hist_entry__delete() recursively.
> >
> > After this change:
> >
> > $ perf report -H --stdio 2>&1 | grep -c '^Indirect leak'
> > 0
> >
> > Reported-by: Ian Rogers <irogers@google.com>
> > Signed-off-by: Namhyung Kim <namhyung@kernel.org>
>
> Tested on an Arrow Lake system.
>
> Tested-by Thomas Falcon <thomas.falcon@intel.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Thanks!
Ian
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians
2025-03-07 6:12 [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
2025-03-07 6:12 ` [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode Namhyung Kim
@ 2025-03-07 18:55 ` Markus Elfring
2025-03-07 22:08 ` Namhyung Kim
2025-03-08 18:24 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
2 siblings, 1 reply; 9+ messages in thread
From: Markus Elfring @ 2025-03-07 18:55 UTC (permalink / raw)
To: Namhyung Kim, linux-perf-users
Cc: LKML, Adrian Hunter, Arnaldo Carvalho de Melo, Ian Rogers,
Ingo Molnar, Jiri Olsa, Kan Liang, Peter Zijlstra
* Please avoid a typo in the summary phrase.
* Can a cover letter be helpful for such a patch series?
Regards,
Markus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians
2025-03-07 18:55 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Markus Elfring
@ 2025-03-07 22:08 ` Namhyung Kim
2025-03-08 7:56 ` [v2 1/2] perf report: Use map_symbol__copy() when copying call chains Markus Elfring
0 siblings, 1 reply; 9+ messages in thread
From: Namhyung Kim @ 2025-03-07 22:08 UTC (permalink / raw)
To: Markus Elfring
Cc: linux-perf-users, LKML, Adrian Hunter, Arnaldo Carvalho de Melo,
Ian Rogers, Ingo Molnar, Jiri Olsa, Kan Liang, Peter Zijlstra
Hello,
On Fri, Mar 07, 2025 at 07:55:25PM +0100, Markus Elfring wrote:
> * Please avoid a typo in the summary phrase.
Thanks for pointing this out, will fix.
>
> * Can a cover letter be helpful for such a patch series?
It's just two patches and they are independent. I don't think it needs
a cover letter.
Thanks,
Namhyung
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [v2 1/2] perf report: Use map_symbol__copy() when copying call chains
2025-03-07 22:08 ` Namhyung Kim
@ 2025-03-08 7:56 ` Markus Elfring
2025-03-08 18:20 ` Namhyung Kim
0 siblings, 1 reply; 9+ messages in thread
From: Markus Elfring @ 2025-03-08 7:56 UTC (permalink / raw)
To: Namhyung Kim, linux-perf-users
Cc: LKML, Adrian Hunter, Arnaldo Carvalho de Melo, Ian Rogers,
Ingo Molnar, Jiri Olsa, Kan Liang, Peter Zijlstra
> It's just two patches and they are independent.
How do you think about to offer the desired changes as single items then
(without the context of a patch series in this case)?
Regards,
Markus
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [v2 1/2] perf report: Use map_symbol__copy() when copying call chains
2025-03-08 7:56 ` [v2 1/2] perf report: Use map_symbol__copy() when copying call chains Markus Elfring
@ 2025-03-08 18:20 ` Namhyung Kim
0 siblings, 0 replies; 9+ messages in thread
From: Namhyung Kim @ 2025-03-08 18:20 UTC (permalink / raw)
To: Markus Elfring
Cc: linux-perf-users, LKML, Adrian Hunter, Arnaldo Carvalho de Melo,
Ian Rogers, Ingo Molnar, Jiri Olsa, Kan Liang, Peter Zijlstra
On Sat, Mar 08, 2025 at 08:56:37AM +0100, Markus Elfring wrote:
> > It's just two patches and they are independent.
>
> How do you think about to offer the desired changes as single items then
> (without the context of a patch series in this case)?
It could be. But they are loosely related as I found the issue during
investigation of memory leaks so I sent them together. I think I added
enough explanation in each commit.
Thanks,
Namhyung
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians
2025-03-07 6:12 [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
2025-03-07 6:12 ` [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode Namhyung Kim
2025-03-07 18:55 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Markus Elfring
@ 2025-03-08 18:24 ` Namhyung Kim
2 siblings, 0 replies; 9+ messages in thread
From: Namhyung Kim @ 2025-03-08 18:24 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo, Ian Rogers, Kan Liang, Namhyung Kim
Cc: Jiri Olsa, Adrian Hunter, Peter Zijlstra, Ingo Molnar, LKML,
linux-perf-users
On Thu, 06 Mar 2025 22:12:49 -0800, Namhyung Kim wrote:
> It seems there are places to miss updating refcount of maps.
> Let's use map_symbol__copy() helper to properly copy them with
> refcounts updated.
>
>
Applied to perf-tools-next, thanks!
Best regards,
Namhyung
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2025-03-08 18:24 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-07 6:12 [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
2025-03-07 6:12 ` [PATCH v2 2/2] perf report: Fix memory leaks in the hierarchy mode Namhyung Kim
2025-03-07 16:28 ` Falcon, Thomas
2025-03-07 17:33 ` Ian Rogers
2025-03-07 18:55 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Markus Elfring
2025-03-07 22:08 ` Namhyung Kim
2025-03-08 7:56 ` [v2 1/2] perf report: Use map_symbol__copy() when copying call chains Markus Elfring
2025-03-08 18:20 ` Namhyung Kim
2025-03-08 18:24 ` [PATCH v2 1/2] perf report: Use map_symbol__copy() when copying callchians Namhyung Kim
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).