public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>,
	linux-kernel@vger.kernel.org,
	Adrian Hunter <adrian.hunter@intel.com>,
	Ingo Molnar <mingo@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>, Jiri Olsa <jolsa@redhat.com>
Subject: [PATCH perf/core  00/13] perf memory/refcnt leak fixes
Date: Wed, 18 Nov 2015 15:40:09 +0900	[thread overview]
Message-ID: <20151118064009.30709.74354.stgit@localhost.localdomain> (raw)

Hi,

Here is a series to fix some memory leaks and refcount
leaks on map and dso. This also includes the refcnt APIs
with backtrace debugging feature.

The story has started from the posible memory leak report
reported by Wnag Nan.
I've tried to use valgrind to ensure the perf probe doesn't
have other memory leaks. The result is here:

  ----
  # valgrind ./perf probe vfs_read
  ==17521== Memcheck, a memory error detector
  ==17521== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
  ==17521== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
  ==17521== Command: ./perf probe vfs_read
  ==17521==
  Added new event:
    probe:vfs_read       (on vfs_read)
  
  You can now use it in all perf tools, such as:
  
          perf record -e probe:vfs_read -aR sleep 1
  
  ==17521==
  ==17521== HEAP SUMMARY:
  ==17521==     in use at exit: 3,512,761 bytes in 38,012 blocks
  ==17521==   total heap usage: 74,723 allocs, 36,711 frees, 24,014,927
  bytes allocated
  ==17521==
  ==17521== LEAK SUMMARY:
  ==17521==    definitely lost: 6,857 bytes in 49 blocks
  ==17521==    indirectly lost: 3,501,287 bytes in 37,891 blocks
  ==17521==      possibly lost: 0 bytes in 0 blocks
  ==17521==    still reachable: 4,617 bytes in 72 blocks
  ==17521==         suppressed: 0 bytes in 0 blocks
  ==17521== Rerun with --leak-check=full to see details of leaked memory
  ==17521==
  ==17521== For counts of detected and suppressed errors, rerun with: -v
  ==17521== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
  ----

Oops! It leaked almost 4 MB memories. I've tried to find
the root causes, and what I've found is there are many
leaks in not only perf-probe specific code, but also maps
and dsos (and some other pieces).

The first 3 patches are just fixing 'easy' memory leaks. However,
most of the leaks are caused by refcnt. Since valgrind seems not
able to debug this kind of issues, I introduced a hand-made refcnt
backtrace APIs for debugging.
The rest of patches are for fixing refcnt leak bugs and replcing
refcnt apis.

After all, most of the issues are gone, except for just a few issues
in elfutils. I'll continue to investigate that.

  ----
  valgrind ./perf probe vfs_read
  ==29521== Memcheck, a memory error detector
  ==29521== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
  ==29521== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info
  ==29521== Command: ./perf probe vfs_read
  ==29521==
  Added new event:
    probe:vfs_read       (on vfs_read)
  
  You can now use it in all perf tools, such as:
  
          perf record -e probe:vfs_read -aR sleep 1
  
  ==29521==
  ==29521== HEAP SUMMARY:
  ==29521==     in use at exit: 5,137 bytes in 75 blocks
  ==29521==   total heap usage: 74,723 allocs, 74,648 frees, 24,014,927
  bytes allocated
  ==29521==
  ==29521== LEAK SUMMARY:
  ==29521==    definitely lost: 520 bytes in 3 blocks
  ==29521==    indirectly lost: 0 bytes in 0 blocks
  ==29521==      possibly lost: 0 bytes in 0 blocks
  ==29521==    still reachable: 4,617 bytes in 72 blocks
  ==29521==         suppressed: 0 bytes in 0 blocks
  ==29521== Rerun with --leak-check=full to see details of leaked memory
  ==29521==
  ==29521== For counts of detected and suppressed errors, rerun with: -v
  ==29521== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
  ----

Anyway, I decided to release these fixes and the debugging feature
because at least this will improve perf quality.

Thank you,

---

Masami Hiramatsu (13):
      perf probe: Fix to free temporal Dwarf_Frame
      perf: Make perf_exec_path always returns malloc'd string
      perf: Introduce generic refcount APIs with debug feature
      perf: make map to use refcnt
      perf: Fix machine__findnew_module_map to put registered map
      perf: Fix machine__destroy_kernel_maps to put vmlinux_maps
      perf: Fix to destroy kernel maps when machine exits
      perf: Fix to put new map after inserting to map_groups in dso__load_sym
      perf: Make dso to use refcnt for debug
      perf: Fix __dsos__addnew to put dso after adding it to the list
      perf: Fix machine__create_kernel_maps to put kernel dso
      perf: Fix machine__findnew_module_map to put dso
      perf: Fix dso__load_sym to put dso


 tools/perf/config/Makefile     |    5 ++
 tools/perf/util/Build          |    1 
 tools/perf/util/dso.c          |    9 ++-
 tools/perf/util/exec_cmd.c     |   20 ++++--
 tools/perf/util/exec_cmd.h     |    5 +-
 tools/perf/util/help.c         |    6 +-
 tools/perf/util/machine.c      |   17 ++++-
 tools/perf/util/map.c          |    7 +-
 tools/perf/util/map.h          |    3 +
 tools/perf/util/probe-finder.c |    9 ++-
 tools/perf/util/refcnt.c       |  125 ++++++++++++++++++++++++++++++++++++++++
 tools/perf/util/refcnt.h       |   65 +++++++++++++++++++++
 tools/perf/util/symbol-elf.c   |    4 +
 13 files changed, 250 insertions(+), 26 deletions(-)
 create mode 100644 tools/perf/util/refcnt.c
 create mode 100644 tools/perf/util/refcnt.h


-- 
Masami HIRAMATSU
Linux Technology Research Center, System Productivity Research Dept.
Center for Technology Innovation - Systems Engineering 
Hitachi, Ltd., Research & Development Group
E-mail: masami.hiramatsu.pt@hitachi.com

             reply	other threads:[~2015-11-18  6:47 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-18  6:40 Masami Hiramatsu [this message]
2015-11-18  6:40 ` [PATCH perf/core 01/13] perf probe: Fix to free temporal Dwarf_Frame Masami Hiramatsu
2015-11-18 22:36   ` Arnaldo Carvalho de Melo
2015-11-18 23:32     ` Namhyung Kim
2015-11-19  3:12       ` 平松雅巳 / HIRAMATU,MASAMI
2015-11-20  1:46         ` Namhyung Kim
2015-11-23 16:10   ` [tip:perf/core] " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 02/13] perf: Make perf_exec_path always returns malloc'd string Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 03/13] perf: Introduce generic refcount APIs with debug feature Masami Hiramatsu
2015-11-20  2:52   ` Namhyung Kim
2015-11-20  4:12     ` 平松雅巳 / HIRAMATU,MASAMI
2015-11-20  5:53       ` Namhyung Kim
2015-11-18  6:40 ` [PATCH perf/core 04/13] perf: make map to use refcnt Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 05/13] perf: Fix machine__findnew_module_map to put registered map Masami Hiramatsu
2015-11-18 22:36   ` Arnaldo Carvalho de Melo
2015-11-23 16:10   ` [tip:perf/core] perf machine: " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 06/13] perf: Fix machine__destroy_kernel_maps to put vmlinux_maps Masami Hiramatsu
2015-11-18 22:38   ` Arnaldo Carvalho de Melo
2015-11-23 16:11   ` [tip:perf/core] perf machine: Fix machine__destroy_kernel_maps to drop vmlinux_maps references tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 07/13] perf: Fix to destroy kernel maps when machine exits Masami Hiramatsu
2015-11-23 16:11   ` [tip:perf/core] perf machine: " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 08/13] perf: Fix to put new map after inserting to map_groups in dso__load_sym Masami Hiramatsu
2015-11-23 16:12   ` [tip:perf/core] perf tools: " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 09/13] perf: Make dso to use refcnt for debug Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 10/13] perf: Fix __dsos__addnew to put dso after adding it to the list Masami Hiramatsu
2015-11-23 16:12   ` [tip:perf/core] perf tools: " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 11/13] perf: Fix machine__create_kernel_maps to put kernel dso Masami Hiramatsu
2015-11-23 16:12   ` [tip:perf/core] perf tools: Fix machine__create_kernel_maps to put kernel dso refcount tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 12/13] perf: Fix machine__findnew_module_map to put dso Masami Hiramatsu
2015-11-23 16:13   ` [tip:perf/core] perf machine: " tip-bot for Masami Hiramatsu
2015-11-18  6:40 ` [PATCH perf/core 13/13] perf: Fix dso__load_sym " Masami Hiramatsu
2015-11-18 12:46 ` [PATCH perf/core 00/13] perf memory/refcnt leak fixes Arnaldo Carvalho de Melo
2015-11-19  2:56   ` 平松雅巳 / HIRAMATU,MASAMI

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=20151118064009.30709.74354.stgit@localhost.localdomain \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=a.p.zijlstra@chello.nl \
    --cc=acme@kernel.org \
    --cc=adrian.hunter@intel.com \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=namhyung@kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox