mbox series

[PATCHSET,0/9] perf tools: More updates on data type profiling (v4)

Message ID 20240117062657.985479-1-namhyung@kernel.org (mailing list archive)
Headers show
Series perf tools: More updates on data type profiling (v4) | expand

Message

Namhyung Kim Jan. 17, 2024, 6:26 a.m. UTC
Hello,

This is a continuation of the data type profiling series.  Now the basic
part (v3) which uses pointer variables is merged to the perf-tools-next
tree.  And this part is for memory accesses without pointers as well as
small updates to handle some corner cases.  Still mores to come to
complete the original series.

There's no change from the previous version.  For background and usages,
pleaes refer the posting of previous version [1] and a LWN article [2].

Basically most memory accesses happen with pointers, but there are cases
don't use pointers - direct accesses to global and local variables.

Global variables are located in a static memory at a specific address.
So the DWARF location expression for the global vairable would also have
the static address.  And it's common to access them using PC-relative
addressing mode.  Thus it needs a special handling for global variables.

On the other hand, local variables are located in the stack which varies
as program executes.  So the local variables are accessed either by the
(stack) frame pointer or (current) stack pointer.  But sometimes DWARF
location expression uses a frame base address (CFA) to specify location
of local variables.  So it may need to convert or normalize the location
extracted from the instruction to match DWARF expression.

Lastly, there are some cases DWARF location expressions end up having
complex (or not straight-forward) location.  In that case, it cannot
simply match just the first expression with the instruction location.
It'd be safer to reject them.

The code is available at 'perf/data-profile-update-v4' branch in the tree
below.  The full version of the code is in 'perf/data-profile-v4' branch.

  git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git

Thanks,
Namhyung


Cc: Ben Woodard <woodard@redhat.com> 
Cc: Joe Mario <jmario@redhat.com>
CC: Kees Cook <keescook@chromium.org>
Cc: David Blaikie <blaikie@google.com>
Cc: Xu Liu <xliuprof@google.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Mark Wielaard <mark@klomp.org>
Cc: Jason Merrill <jason@redhat.com>
Cc: Jose E. Marchesi <jose.marchesi@oracle.com>
Cc: William Huang <williamjhuang@google.com>

[1] https://lore.kernel.org/linux-perf-users/20231213001323.718046-1-namhyung@kernel.org/
[2] https://lwn.net/Articles/955709/


Namhyung Kim (9):
  perf annotate-data: Parse 'lock' prefix from llvm-objdump
  perf annotate-data: Handle macro fusion on x86
  perf annotate-data: Handle array style accesses
  perf annotate-data: Add stack operation pseudo type
  perf annotate-data: Handle PC-relative addressing
  perf annotate-data: Support global variables
  perf dwarf-aux: Add die_get_cfa()
  perf annotate-data: Support stack variables
  perf dwarf-aux: Check allowed DWARF Ops

 tools/perf/util/annotate-data.c | 119 ++++++++++++++++----
 tools/perf/util/annotate-data.h |   8 +-
 tools/perf/util/annotate.c      | 153 ++++++++++++++++++++++++--
 tools/perf/util/annotate.h      |  12 +-
 tools/perf/util/dwarf-aux.c     | 187 ++++++++++++++++++++++++++++----
 tools/perf/util/dwarf-aux.h     |  18 +++
 6 files changed, 439 insertions(+), 58 deletions(-)


base-commit: d988c9f511af71a3445b6a4f3a2c67208ff8e480

Comments

Ian Rogers Jan. 18, 2024, 4:36 p.m. UTC | #1
On Tue, Jan 16, 2024 at 10:27 PM Namhyung Kim <namhyung@kernel.org> wrote:
>
> Hello,
>
> This is a continuation of the data type profiling series.  Now the basic
> part (v3) which uses pointer variables is merged to the perf-tools-next
> tree.  And this part is for memory accesses without pointers as well as
> small updates to handle some corner cases.  Still mores to come to
> complete the original series.
>
> There's no change from the previous version.  For background and usages,
> pleaes refer the posting of previous version [1] and a LWN article [2].
>
> Basically most memory accesses happen with pointers, but there are cases
> don't use pointers - direct accesses to global and local variables.
>
> Global variables are located in a static memory at a specific address.
> So the DWARF location expression for the global vairable would also have
> the static address.  And it's common to access them using PC-relative
> addressing mode.  Thus it needs a special handling for global variables.
>
> On the other hand, local variables are located in the stack which varies
> as program executes.  So the local variables are accessed either by the
> (stack) frame pointer or (current) stack pointer.  But sometimes DWARF
> location expression uses a frame base address (CFA) to specify location
> of local variables.  So it may need to convert or normalize the location
> extracted from the instruction to match DWARF expression.
>
> Lastly, there are some cases DWARF location expressions end up having
> complex (or not straight-forward) location.  In that case, it cannot
> simply match just the first expression with the instruction location.
> It'd be safer to reject them.
>
> The code is available at 'perf/data-profile-update-v4' branch in the tree
> below.  The full version of the code is in 'perf/data-profile-v4' branch.
>
>   git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git
>
> Thanks,
> Namhyung
>
>
> Cc: Ben Woodard <woodard@redhat.com>
> Cc: Joe Mario <jmario@redhat.com>
> CC: Kees Cook <keescook@chromium.org>
> Cc: David Blaikie <blaikie@google.com>
> Cc: Xu Liu <xliuprof@google.com>
> Cc: Kan Liang <kan.liang@linux.intel.com>
> Cc: Ravi Bangoria <ravi.bangoria@amd.com>
> Cc: Mark Wielaard <mark@klomp.org>
> Cc: Jason Merrill <jason@redhat.com>
> Cc: Jose E. Marchesi <jose.marchesi@oracle.com>
> Cc: William Huang <williamjhuang@google.com>
>
> [1] https://lore.kernel.org/linux-perf-users/20231213001323.718046-1-namhyung@kernel.org/
> [2] https://lwn.net/Articles/955709/
>
>
> Namhyung Kim (9):
>   perf annotate-data: Parse 'lock' prefix from llvm-objdump
>   perf annotate-data: Handle macro fusion on x86
>   perf annotate-data: Handle array style accesses
>   perf annotate-data: Add stack operation pseudo type
>   perf annotate-data: Handle PC-relative addressing
>   perf annotate-data: Support global variables
>   perf dwarf-aux: Add die_get_cfa()
>   perf annotate-data: Support stack variables
>   perf dwarf-aux: Check allowed DWARF Ops

Series:
Reviewed-by: Ian Rogers <irogers@google.com>

Thanks,
Ian

>  tools/perf/util/annotate-data.c | 119 ++++++++++++++++----
>  tools/perf/util/annotate-data.h |   8 +-
>  tools/perf/util/annotate.c      | 153 ++++++++++++++++++++++++--
>  tools/perf/util/annotate.h      |  12 +-
>  tools/perf/util/dwarf-aux.c     | 187 ++++++++++++++++++++++++++++----
>  tools/perf/util/dwarf-aux.h     |  18 +++
>  6 files changed, 439 insertions(+), 58 deletions(-)
>
>
> base-commit: d988c9f511af71a3445b6a4f3a2c67208ff8e480
> --
> 2.43.0.381.gb435a96ce8-goog
>
Namhyung Kim Jan. 22, 2024, 8:37 p.m. UTC | #2
On Tue, 16 Jan 2024 22:26:48 -0800, Namhyung Kim wrote:
> This is a continuation of the data type profiling series.  Now the basic
> part (v3) which uses pointer variables is merged to the perf-tools-next
> tree.  And this part is for memory accesses without pointers as well as
> small updates to handle some corner cases.  Still mores to come to
> complete the original series.
> 
> There's no change from the previous version.  For background and usages,
> pleaes refer the posting of previous version [1] and a LWN article [2].
> 
> [...]

Applied to perf-tools-next, thanks!

Thanks,
Namhyung