linux-perf-users.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHSET 0/9] perf annotate-data: Update data-type profiling quality (v1)
@ 2024-08-16 23:58 Namhyung Kim
  2024-08-16 23:58 ` [PATCH 1/9] perf dwarf-aux: Check allowed location expressions when collecting variables Namhyung Kim
                   ` (9 more replies)
  0 siblings, 10 replies; 13+ messages in thread
From: Namhyung Kim @ 2024-08-16 23:58 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, Athira Rajeev

Hello,

I've found a couple of bugs in the DWARF location handling and had
some updates to improve the quality of the type resolution.

The current code only checks the first variable it found in the
closest scope but sometimes it's not good because macro expansions
like container_of (which is used by many list/rb tree manipulation
routines) only gives a very limited information (like void *) with
type cast.  So it needs to lookup other variables in the upper scope.
See the patch 8 for more details.

Also sometimes it can have more information for the parent type if the
pointer is for an embedded type.  For example, a list_head is
typically a part of bigger struct.  Even if it found a variable for
the list_head, it'd be nice if it can tell which list it is.

To compare two type information in general, I've added a heuristic to
take a pointer to a bigger data type.

This is an example data, the portion of unknown type went down a bit
and the atomic_t turned out to be _mapcount in the struct page.

Before:
  #
  # Overhead  Data Type
  # ........  .........
  #
      37.24%  (unknown)
      14.40%  atomic_t 
       8.81%  (stack operation)
       5.54%  struct psi_group_cpu
       3.40%  struct task_struct
       2.99%  struct pcpu_hot
       2.99%  struct cfs_rq
       2.18%  struct audit_krule
       1.93%  struct psi_group
       1.62%  struct sched_entity

After:
  #
  # Overhead  Data Type
  # ........  .........
  #
      36.87%  (unknown)
      14.40%  struct page
       8.81%  (stack operation)
       6.00%  struct psi_group_cpu
       3.40%  struct task_struct
       3.36%  struct cfs_rq
       2.99%  struct pcpu_hot
       2.18%  struct audit_krule
       1.93%  struct psi_group
       1.62%  struct sched_entity

Also updated the debug message and the statistics to help debugging.

The code is available at 'perf/data-profile-update-v1' branch in
git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git


Thanks,
Namhyung


Namhyung Kim (9):
  perf dwarf-aux: Check allowed location expressions when collecting
    variables
  perf annotate-data: Fix off-by-one in location range check
  perf annotate-data: Add enum type_match_result
  perf annotate-data: Add variable_state_str()
  perf annotate-data: Change return type of find_data_type_block()
  perf annotate-data: Add is_pointer_type() helper
  perf annotate-data: Add is_better_type() helper
  perf annotate-data: Check variables in every scope
  perf annotate-data: Update type stat at the end of
    find_data_type_die()

 tools/perf/util/annotate-data.c | 359 ++++++++++++++++++++------------
 tools/perf/util/dwarf-aux.c     |   5 +-
 2 files changed, 230 insertions(+), 134 deletions(-)

-- 
2.46.0.184.g6999bdac58-goog


^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2024-08-19 19:35 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-16 23:58 [PATCHSET 0/9] perf annotate-data: Update data-type profiling quality (v1) Namhyung Kim
2024-08-16 23:58 ` [PATCH 1/9] perf dwarf-aux: Check allowed location expressions when collecting variables Namhyung Kim
2024-08-17 16:24   ` Masami Hiramatsu
2024-08-16 23:58 ` [PATCH 2/9] perf annotate-data: Fix off-by-one in location range check Namhyung Kim
2024-08-18 13:22   ` Masami Hiramatsu
2024-08-16 23:58 ` [PATCH 3/9] perf annotate-data: Add enum type_match_result Namhyung Kim
2024-08-16 23:58 ` [PATCH 4/9] perf annotate-data: Add variable_state_str() Namhyung Kim
2024-08-16 23:58 ` [PATCH 5/9] perf annotate-data: Change return type of find_data_type_block() Namhyung Kim
2024-08-16 23:58 ` [PATCH 6/9] perf annotate-data: Add is_pointer_type() helper Namhyung Kim
2024-08-16 23:58 ` [PATCH 7/9] perf annotate-data: Add is_better_type() helper Namhyung Kim
2024-08-16 23:58 ` [PATCH 8/9] perf annotate-data: Check variables in every scope Namhyung Kim
2024-08-16 23:58 ` [PATCH 9/9] perf annotate-data: Update type stat at the end of find_data_type_die() Namhyung Kim
2024-08-19 19:35 ` [PATCHSET 0/9] perf annotate-data: Update data-type profiling quality (v1) Arnaldo Carvalho de Melo

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).