All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v8 00/15] perf annotate arm64: Support instruction tracking for data type profiling
@ 2026-10-20 13:44 Tengda Wu
  2026-10-20 13:44 ` [PATCH v8 01/15] perf annotate-data: Extract invalidate_reg_state() as a common helper Tengda Wu
                   ` (15 more replies)
  0 siblings, 16 replies; 35+ messages in thread
From: Tengda Wu @ 2026-10-20 13:44 UTC (permalink / raw)
  To: Namhyung Kim, james.clark, xueshuai, Arnaldo Carvalho de Melo
  Cc: Peter Zijlstra, leo.yan, Li Huafei, Ian Rogers, Kim Phillips,
	Mark Rutland, Ingo Molnar, Bill Wendling, Nick Desaulniers,
	Alexander Shishkin, Adrian Hunter, Zecheng Li, linux-perf-users,
	linux-kernel, llvm, Tengda Wu

This series adds arm64 support to perf's data type profiling by
implementing instruction tracking for the arm64 architecture.

The main changes since v7 include:
v7: https://lore.kernel.org/all/cover.1791629326.git.wutengda@huaweicloud.com/

  * Patch 02: Minor optimizations to update_insn_state_arm64 to facilitate
    future extension, including:
    - Encapsulating call instruction handling into update_call_insn_state()
    - Encapsulating invalidate dst regs handling into invalidate_unhandled_insn_regs()
    - Renaming is_readonly_branch_or_cmp() to is_readonly_insn()
    No functional changes.

  * Fix issues raised by Sashiko:
    - Patch 06: Complete the status register invalidation logic for
      exclusive stores.
    - Patch 13 & 15: Complete the lifetime invalidation logic for adrp
      and mrs instructions.
    Regarding the status register invalidation issue for instructions
    such as cas/swp as well, we plan to support this incrementally
    after the relevant instructions are refined; this patch temporarily
    ignores and does not handle it (a TODO marker has already been
    reserved in patch 02)

Patch organization
==================

  Patches 1-3:   Shared infrastructure. Extract invalidate_reg_state() as
                 a common helper, add the arch_get_reg_offset() helper for
                 computing operand base offsets, and wire up the arm64
                 entry points (arch_supports_insn_tracking(),
                 init_type_state(), and update_insn_state_arm64()).

  Patches 4-6:   Core instruction tracking for arm64: function return
                 types after calls, load instructions (ldr/ldp and their
                 addressing modes), and store instructions (str/stp).

  Patches 7-9:   Shared data structure improvements and an x86 fix.
                 Expand type_state_reg.imm_value to u64 so 64-bit
                 addresses can be tracked, preserve imm_value for stack
                 variables, and delete stale stack state on store of an
                 untracked register on x86.

  Patches 10-15: Remaining arm64 patterns: stack variable tracking,
                 'mov' (register and immediate forms), 'add' member
                 address calculation, 'adrp' global variable tracking,
                 per-cpu variable access, and 'mrs sp_el0' to resolve the
                 'current' pointer.

Each patch's type profiling results are as follows:

Patch | Feature                    | no_sym | no_var | no_typeinfo | bad_offset | insn_track | ok(%)
------+----------------------------+--------+--------+-------------+------------+------------+------
base  | baseline                   | 6      | 493    | -           | -          | -          | 56.2%
0002  | enable insn tracking       | 6      | 42     | 437         | 2          | 12         | 57.2%
0005  | support 'load' insn        | 6      | 42     | 398         | 1          | 52         | 60.7%
0006  | support 'store' insn       | 6      | 42     | 398         | 1          | 52         | 60.7%
0010  | support stack variable     | 6      | 42     | 391         | 1          | 59         | 61.3%
0011  | support 'mov' insn         | 6      | 42     | 372         | 3          | 76         | 62.8%
0012  | support 'add' insn         | 6      | 42     | 318         | 7          | 126        | 67.2%
0013  | support 'adrp' insn        | 6      | 42     | 238         | 8          | 205        | 74.2%
0014  | support per-cpu variable   | 6      | 42     | 233         | 8          | 210        | 74.6%
0015  | support 'mrs' insn         | 6      | 42     | 230         | 8          | 213        | 74.9%

Testing
=======

Tested on arm64 (all passed):

  # perf test -v "perf data type profiling tests"
  81: perf data type profiling tests                                                                  : Ok

  === Test Summary ===
  Passed main tests : 1
  Passed subtests   : 0
  Skipped tests     : 0
  Failed tests      : 0

Tested on x86. The profiling results show no change before/after applying
this patch series:

  before : total 880, ok 711 (80.8%), bad 169 (19.2%)
  after  : total 880, ok 711 (80.8%), bad 169 (19.2%)

Changelog
=========
v7 -> v8:
  - v7: https://lore.kernel.org/all/cover.1791629326.git.wutengda@huaweicloud.com/
  - Encapsulate invalidate dst regs handling into invalidate_unhandled_insn_regs()
  - Encapsulate invalidate dst regs handling into invalidate_unhandled_insn_regs()
  - Rename is_readonly_branch_or_cmp() to is_readonly_insn()
  - Complete the status register invalidation logic for exclusive stores.
  - Complete the lifetime invalidation logic for adrp and mrs instructions.
v6 -> v7:
  - v6: https://lore.kernel.org/all/cover.1789521520.git.wutengda@huaweicloud.com/
  - Invalidate lifetime in propagate_load_reg_state().
  - Remove the has_reg_type() guard in update_store_insn_state().
  - Fix the issue where TSR_KIND_PERCPU_BASE fails to retry as expected.

Please let me know if you have any feedback.

Thanks,
Tengda

Tengda Wu (15):
  perf annotate-data: Extract invalidate_reg_state() as a common helper
  perf annotate-arm64: Enable instruction tracking support
  perf annotate-data: Add arch_get_reg_offset helper
  perf annotate-arm64: Track return type after call instructions
  perf annotate-arm64: Support load instruction tracking
  perf annotate-arm64: Support store instruction tracking
  perf annotate-data: Expand type_state_reg imm_value to u64
  perf annotate-data: Track imm_value for stack variables
  perf annotate-x86: Delete stale stack state on store of untracked
    register
  perf annotate-arm64: Support stack variable tracking
  perf annotate-arm64: Support 'mov' instruction tracking
  perf annotate-arm64: Support 'add' instruction tracking
  perf annotate-arm64: Support 'adrp' instruction to track global
    variables
  perf annotate-arm64: Support per-cpu variable access tracking
  perf annotate-arm64: Support 'mrs' instruction to track 'current'
    pointer

 .../perf/util/annotate-arch/annotate-arm64.c  | 774 ++++++++++++++++++
 tools/perf/util/annotate-arch/annotate-x86.c  |  38 +-
 tools/perf/util/annotate-data.c               | 209 ++++-
 tools/perf/util/annotate-data.h               |  14 +-
 4 files changed, 987 insertions(+), 48 deletions(-)


base-commit: 2efb7a11f1aa4d2dc285fe2680cca22cb9f72f64
-- 
2.34.1


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

end of thread, other threads:[~2026-10-23 21:10 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-20 13:44 [PATCH v8 00/15] perf annotate arm64: Support instruction tracking for data type profiling Tengda Wu
2026-10-20 13:44 ` [PATCH v8 01/15] perf annotate-data: Extract invalidate_reg_state() as a common helper Tengda Wu
2026-10-20 13:57   ` sashiko-bot
2026-10-20 13:44 ` [PATCH v8 02/15] perf annotate-arm64: Enable instruction tracking support Tengda Wu
2026-10-20 14:05   ` sashiko-bot
2026-10-20 13:44 ` [PATCH v8 03/15] perf annotate-data: Add arch_get_reg_offset helper Tengda Wu
2026-10-20 14:13   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 04/15] perf annotate-arm64: Track return type after call instructions Tengda Wu
2026-10-20 14:15   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 05/15] perf annotate-arm64: Support load instruction tracking Tengda Wu
2026-10-20 14:36   ` sashiko-bot
2026-10-21  1:58     ` Tengda Wu
2026-10-20 13:45 ` [PATCH v8 06/15] perf annotate-arm64: Support store " Tengda Wu
2026-10-20 14:39   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 07/15] perf annotate-data: Expand type_state_reg imm_value to u64 Tengda Wu
2026-10-20 14:43   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 08/15] perf annotate-data: Track imm_value for stack variables Tengda Wu
2026-10-20 14:46   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 09/15] perf annotate-x86: Delete stale stack state on store of untracked register Tengda Wu
2026-10-20 14:50   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 10/15] perf annotate-arm64: Support stack variable tracking Tengda Wu
2026-10-20 14:59   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 11/15] perf annotate-arm64: Support 'mov' instruction tracking Tengda Wu
2026-10-20 15:01   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 12/15] perf annotate-arm64: Support 'add' " Tengda Wu
2026-10-20 15:05   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 13/15] perf annotate-arm64: Support 'adrp' instruction to track global variables Tengda Wu
2026-10-20 15:15   ` sashiko-bot
2026-10-21  2:07     ` Tengda Wu
2026-10-20 13:45 ` [PATCH v8 14/15] perf annotate-arm64: Support per-cpu variable access tracking Tengda Wu
2026-10-20 15:24   ` sashiko-bot
2026-10-20 13:45 ` [PATCH v8 15/15] perf annotate-arm64: Support 'mrs' instruction to track 'current' pointer Tengda Wu
2026-10-20 15:30   ` sashiko-bot
2026-10-21  2:25 ` [PATCH v8 00/15] perf annotate arm64: Support instruction tracking for data type profiling Tengda Wu
2026-10-23 21:10   ` Arnaldo Carvalho de Melo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.