• Ian Rogers's avatar
    perf hist: Fix reference counting of branch_info · b2f70c99
    Ian Rogers authored
    iter_finish_branch_entry() doesn't put the branch_info from/to map
    elements creating memory leaks. This can be seen with:
    
    ```
    $ perf record -e cycles -b perf test -w noploop
    $ perf report -D
    ...
    Direct leak of 984344 byte(s) in 123043 object(s) allocated from:
        #0 0x7fb2654f3bd7 in malloc libsanitizer/asan/asan_malloc_linux.cpp:69
        #1 0x564d3400d10b in map__get util/map.h:186
        #2 0x564d3400d10b in ip__resolve_ams util/machine.c:1981
        #3 0x564d34014d81 in sample__resolve_bstack util/machine.c:2151
        #4 0x564d34094790 in iter_prepare_branch_entry util/hist.c:898
        #5 0x564d34098fa4 in hist_entry_iter__add util/hist.c:1238
        #6 0x564d33d1f0c7 in process_sample_event tools/perf/builtin-report.c:334
        #7 0x564d34031eb7 in perf_session__deliver_event util/session.c:1655
        #8 0x564d3403ba52 in do_flush util/ordered-events.c:245
        #9 0x564d3403ba52 in __ordered_events__flush util/ordered-events.c:324
        #10 0x564d3402d32e in perf_session__process_user_event util/session.c:1708
        #11 0x564d34032480 in perf_session__process_event util/session.c:1877
        #12 0x564d340336ad in reader__read_event util/session.c:2399
        #13 0x564d34033fdc in reader__process_events util/session.c:2448
        #14 0x564d34033fdc in __perf_session__process_events util/session.c:2495
        #15 0x564d34033fdc in perf_session__process_events util/session.c:2661
        #16 0x564d33d27113 in __cmd_report tools/perf/builtin-report.c:1065
        #17 0x564d33d27113 in cmd_report tools/perf/builtin-report.c:1805
        #18 0x564d33e0ccb7 in run_builtin tools/perf/perf.c:350
        #19 0x564d33e0d45e in handle_internal_command tools/perf/perf.c:403
        #20 0x564d33cdd827 in run_argv tools/perf/perf.c:447
        #21 0x564d33cdd827 in main tools/perf/perf.c:561
    ...
    ```
    
    Clearing up the map_symbols properly creates maps reference count
    issues so resolve those. Resolving this issue doesn't improve peak
    heap consumption for the test above.
    
    Committer testing:
    
      $ sudo dnf install libasan
      $ make -k CORESIGHT=1 EXTRA_CFLAGS="-fsanitize=address" CC=clang O=/tmp/build/$(basename $PWD)/ -C tools/perf install-bin
    Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarIan Rogers <irogers@google.com>
    Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Sun Haiyong <sunhaiyong@loongson.cn>
    Cc: Yanteng Si <siyanteng@loongson.cn>
    Link: https://lore.kernel.org/r/20240807065136.1039977-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
    b2f70c99
hist.c 69.6 KB