1. 03 Jan, 2024 2 commits
  2. 24 Dec, 2023 15 commits
    • Namhyung Kim's avatar
      perf annotate: Add --insn-stat option for debugging · 58824fa0
      Namhyung Kim authored
      This is for a debugging purpose.  It'd be useful to see per-instrucion
      level success/failure stats.
      
        $ perf annotate --data-type --insn-stat
        Annotate Instruction stats
        total 264, ok 143 (54.2%), bad 121 (45.8%)
      
          Name      :  Good   Bad
        -----------------------------------------------------------
          movq      :    45    31
          movl      :    22    11
          popq      :     0    19
          cmpl      :    16     3
          addq      :     8     7
          cmpq      :    11     3
          cmpxchgl  :     3     7
          cmpxchgq  :     8     0
          incl      :     3     3
          movzbl    :     4     2
          incq      :     4     2
          decl      :     6     0
          ...
      
      Committer notes:
      
      So these are about being able to find the type for accesses from these
      instructions, we should improve the naming, but it is for debugging, we
      can improve this later:
      
        @@ -3726,6 +3759,10 @@ struct annotated_data_type *hist_entry__get_data_type(struct hist_entry *he)
                                continue;
      
                        mem_type = find_data_type(ms, ip, op_loc->reg, op_loc->offset);
        +               if (mem_type)
        +                       istat->good++;
        +               else
        +                       istat->bad++;
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-18-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      58824fa0
    • Namhyung Kim's avatar
      perf annotate: Add --type-stat option for debugging · 61a9741e
      Namhyung Kim authored
      The --type-stat option is to be used with --data-type and to print
      detailed failure reasons for the data type annotation.
      
        $ perf annotate --data-type --type-stat
        Annotate data type stats:
        total 294, ok 116 (39.5%), bad 178 (60.5%)
        -----------------------------------------------------------
                30 : no_sym
                40 : no_insn_ops
                33 : no_mem_ops
                63 : no_var
                 4 : no_typeinfo
                 8 : bad_offset
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-17-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      61a9741e
    • Namhyung Kim's avatar
      perf annotate: Support event group display · 227ad323
      Namhyung Kim authored
      When events are grouped together, it'd be natural to show them at once
      like in other mode.  Handle group leaders with members to collect the
      number of samples together and display like below:
      
        $ perf annotate --data-type --group
        ...
        Annotate type: 'struct page' in vmlinux (1 samples):
         event[0] = cpu/mem-loads,ldlat=30/P
         event[1] = cpu/mem-stores/P
         event[2] = dummy:u
        ============================================================================
                                  samples     offset       size  field
                  1          0          0          0         64  struct page     {
                  0          0          0          0          8      long unsigned int  flags;
                  0          0          0          8         40      union       {
                  0          0          0          8         40          struct          {
                  0          0          0          8         16              union       {
                  0          0          0          8         16                  struct list_head       lru {
                  0          0          0          8          8                      struct list_head*  next;
                  0          0          0         16          8                      struct list_head*  prev;
                                                                                 };
                  0          0          0          8         16                  struct          {
                  0          0          0          8          8                      void*      __filler;
                  0          0          0         16          4                      unsigned int       mlock_count;
                                                                                 };
                  0          0          0          8         16                  struct list_head       buddy_list {
                  0          0          0          8          8                      struct list_head*  next;
                  0          0          0         16          8                      struct list_head*  prev;
                                                                                 };
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-16-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      227ad323
    • Namhyung Kim's avatar
      perf annotate: Add --data-type option · 263925bf
      Namhyung Kim authored
      Support data type annotation with new --data-type option.  It internally
      uses type sort key to collect sample histogram for the type and display
      every members like below.
      
        $ perf annotate --data-type
        ...
        Annotate type: 'struct cfs_rq' in [kernel.kallsyms] (13 samples):
        ============================================================================
            samples     offset       size  field
                 13          0        640  struct cfs_rq         {
                  2          0         16      struct load_weight       load {
                  2          0          8          unsigned long        weight;
                  0          8          4          u32  inv_weight;
                                               };
                  0         16          8      unsigned long    runnable_weight;
                  0         24          4      unsigned int     nr_running;
                  1         28          4      unsigned int     h_nr_running;
        ...
      
      For simplicity it prints the number of samples per field for now.
      But it should be easy to show the overhead percentage instead.
      
      The number at the outer struct is a sum of the numbers of the inner
      members.  For example, struct cfs_rq got total 13 samples, and 2 came
      from the load (struct load_weight) and 1 from h_nr_running.  Similarly,
      the struct load_weight got total 2 samples and they all came from the
      weight field.
      
      I've added two new flags in the symbol_conf for this.  The
      annotate_data_member is to get the members of the type.  This is also
      needed for perf report with typeoff sort key.  The annotate_data_sample
      is to update sample stats for each offset and used only in annotate.
      
      Currently it only support stdio output mode, TUI support can be added
      later.
      
      Committer testing:
      
      With the perf.data from the previous csets, a very simple, short
      duration one:
      
        # perf annotate --data-type
        Annotate type: 'struct list_head' in [kernel.kallsyms] (1 samples):
        ============================================================================
            samples     offset       size  field
                  1          0         16  struct list_head      {
                  0          0          8      struct list_head*        next;
                  1          8          8      struct list_head*        prev;
                                           };
      
        Annotate type: 'char' in [kernel.kallsyms] (1 samples):
        ============================================================================
            samples     offset       size  field
                  1          0          1  char ;
      
        #
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-15-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      263925bf
    • Namhyung Kim's avatar
      perf report: Add 'symoff' sort key · e2c1c8ff
      Namhyung Kim authored
      The symoff sort key is to print symbol and offset of sample.  This is
      useful for data type profiling to show exact instruction in the function
      which refers the data.
      
        $ perf report -s type,sym,typeoff,symoff --hierarchy
        ...
        #       Overhead  Data Type / Symbol / Data Type Offset / Symbol Offset
        # ..............  .....................................................
        #
            1.23%         struct cfs_rq
              0.84%         update_blocked_averages
                0.19%         struct cfs_rq +336 (leaf_cfs_rq_list.next)
                   0.19%         [k] update_blocked_averages+0x96
                0.19%         struct cfs_rq +0 (load.weight)
                   0.14%         [k] update_blocked_averages+0x104
                   0.04%         [k] update_blocked_averages+0x31c
                0.17%         struct cfs_rq +404 (throttle_count)
                   0.12%         [k] update_blocked_averages+0x9d
                   0.05%         [k] update_blocked_averages+0x1f9
                0.08%         struct cfs_rq +272 (propagate)
                   0.07%         [k] update_blocked_averages+0x3d3
                   0.02%         [k] update_blocked_averages+0x45b
        ...
      
      Committer testing:
      
        # perf report --stdio -s type,typeoff,symoff
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Data Type  Data Type Offset  Symbol Offset
        # ........  .........  ................  .............
        #
            42.86%  struct list_head  struct list_head +8 (prev)  [k] __list_del_entry_valid_or_report+0x7
            28.57%  (unknown)  (unknown) +0 (no field)  [.] _nl_intern_locale_data+0x25
            14.29%  char       char +0 (no field)  [k] strncpy_from_user+0xa5
            14.29%  (unknown)  (unknown) +0 (no field)  [.] _dl_lookup_symbol_x+0x50
      
        #
        # (Tip: To change sampling frequency to 100 Hz: perf record -F 100)
        #
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-14-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e2c1c8ff
    • Namhyung Kim's avatar
      perf report: Add 'typeoff' sort key · 871304a7
      Namhyung Kim authored
      The typeoff sort key shows the data type name, offset and the name of
      the field.  This is useful to see which field in the struct is accessed
      most frequently.
      
        $ perf report -s type,typeoff --hierarchy --stdio
        ...
        #     Overhead  Data Type / Data Type Offset
        # ............  ............................
        #
        ...
              1.23%     struct cfs_rq
                 0.19%    struct cfs_rq +404 (throttle_count)
                 0.19%    struct cfs_rq +0 (load.weight)
                 0.19%    struct cfs_rq +336 (leaf_cfs_rq_list.next)
                 0.09%    struct cfs_rq +272 (propagate)
                 0.09%    struct cfs_rq +196 (removed.nr)
                 0.09%    struct cfs_rq +80 (curr)
                 0.09%    struct cfs_rq +544 (lt_b_children_throttled)
                 0.06%    struct cfs_rq +320 (rq)
      
      Committer testing:
      
      Again with the perf.data from the previous csets:
      
        # perf report --stdio -s type,typeoff
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Data Type  Data Type Offset
        # ........  .........  ................
        #
            42.86%  struct list_head  struct list_head +8 (prev)
            42.86%  (unknown)  (unknown) +0 (no field)
            14.29%  char       char +0 (no field)
      
        #
        # (Tip: To see callchains in a more compact form: perf report -g folded)
        #
        # perf report --stdio -s dso,type,typeoff
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Shared Object         Data Type  Data Type Offset
        # ........  ....................  .........  ................
        #
            42.86%  [kernel.kallsyms]     struct list_head  struct list_head +8 (prev)
            28.57%  libc.so.6             (unknown)  (unknown) +0 (no field)
            14.29%  [kernel.kallsyms]     char       char +0 (no field)
            14.29%  ld-linux-x86-64.so.2  (unknown)  (unknown) +0 (no field)
      
        #
        # (Tip: If you have debuginfo enabled, try: perf report -s sym,srcline)
        #
        #
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-13-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      871304a7
    • Namhyung Kim's avatar
      perf annotate-data: Update sample histogram for type · 9bd7ddd1
      Namhyung Kim authored
      The annotated_data_type__update_samples() to get histogram for data type
      access.
      
      It'll be called by perf annotate to show which fields in the data type
      are accessed frequently.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-12-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9bd7ddd1
    • Namhyung Kim's avatar
      perf annotate-data: Add member field in the data type · 4a111cad
      Namhyung Kim authored
      Add child member field if the current type is a composite type like a
      struct or union.  The member fields are linked in the children list and
      do the same recursively if the child itself is a composite type.
      
      Add 'self' member to the annotated_data_type to handle the members in
      the same way.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-11-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      4a111cad
    • Namhyung Kim's avatar
      perf report: Support data type profiling · 81e57dee
      Namhyung Kim authored
      Enable type annotation when the 'type' sort key is used.
      
      It shows type of variables the samples access at the moment.  Users can
      see which types are accessed frequently.
      
        $ perf report -s dso,type --stdio
        ...
        # Overhead  Shared Object      Data Type
        # ........  .................  .........
        #
            35.47%  [kernel.kallsyms]  (unknown)
             1.62%  [kernel.kallsyms]  struct sched_entry
             1.23%  [kernel.kallsyms]  struct cfs_rq
             0.83%  [kernel.kallsyms]  struct task_struct
             0.34%  [kernel.kallsyms]  struct list_head
             0.30%  [kernel.kallsyms]  struct mem_cgroup
        ...
      
      Committer testing:
      
      With the perf.data file collected in the previous cset:
      
        # perf report --stdio -s type
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Data Type
        # ........  .........
        #
            42.86%  struct list_head
            42.86%  (unknown)
            14.29%  char
      
        #
        # (Tip: To record callchains for each sample: perf record -g)
        #
        # perf report --stdio -s dso,type
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Shared Object         Data Type
        # ........  ....................  .........
        #
            42.86%  [kernel.kallsyms]     struct list_head
            28.57%  libc.so.6             (unknown)
            14.29%  [kernel.kallsyms]     char
            14.29%  ld-linux-x86-64.so.2  (unknown)
      
        #
        # (Tip: Save output of perf stat using: perf stat record <target workload>)
        #
        #
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-10-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      81e57dee
    • Namhyung Kim's avatar
      perf report: Add 'type' sort key · 2f2c41bd
      Namhyung Kim authored
      The 'type' sort key is to aggregate hist entries by data type they
      access.  Add mem_type field to hist_entry struct to save the type.  If
      hist_entry__get_data_type() returns NULL, it'd use the 'unknown_type'
      instance.
      
      Committer testing:
      
      Before:
      
        # perf mem record  sleep 2s
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.037 MB perf.data (4 samples) ]
        root@number:/home/acme/Downloads# perf report --stdio -s type
        Error:
        Unknown --sort key: `type'
         Usage: perf report [<options>]
      
            -s, --sort <key[,key2...]>
                                  sort by key(s): overhead overhead_sys overhead_us overhead_guest_sys
                                  overhead_guest_us overhead_children sample period
                                  pid comm dso symbol parent cpu socket srcline srcfile
                                  local_weight weight transaction trace symbol_size
                                  dso_size cgroup cgroup_id ipc_null time code_page_size
                                  local_ins_lat ins_lat local_p_stage_cyc p_stage_cyc
                                  addr local_retire_lat retire_lat simd dso_from dso_to
                                  symbol_from symbol_to mispredict abort in_tx cycles
                                  srcline_from srcline_to ipc_lbr addr_from addr_to
                                  symbol_daddr dso_daddr locked tlb mem snoop dcacheline
                                  symbol_iaddr phys_daddr data_page_size blocked
        #
      
      After:
      
        # perf report --stdio -s type
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 4  of event 'cpu_atom/mem-loads,ldlat=30/P'
        # Event count (approx.): 7
        #
        # Overhead  Data Type
        # ........  .........
        #
           100.00%  (unknown)
      
        #
        # (Tip: Print event counts in CSV format with: perf stat -x,)
        #
        # rpm -q kernel-debuginfo
        kernel-debuginfo-6.6.4-200.fc39.x86_64
        # uname -r
        6.6.4-200.fc39.x86_64
        #
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org>
      Cc: linux-trace-devel@vger.kernel.org>
      Link: https://lore.kernel.org/r/20231213001323.718046-9-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2f2c41bd
    • Namhyung Kim's avatar
      perf annotate: Implement hist_entry__get_data_type() · 67bc54bb
      Namhyung Kim authored
      It's the function to find out the type info from the given sample data
      and will be called from the hist_entry sort logic when 'type' sort key
      is used.
      
      It first calls objdump to disassemble the instructions and figure out
      information about memory access at the location.  Maybe we can do it
      better by analyzing the instruction directly, but I'll leave it for
      later work.
      
      The memory access is determined by checking instruction operands to
      have "(" and then extract register name and offset.  It'll return NULL
      if no data type is found.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-8-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      67bc54bb
    • Namhyung Kim's avatar
      perf annotate: Add annotate_get_insn_location() · 3a0c26ed
      Namhyung Kim authored
      The annotate_get_insn_location() is to get the detailed information of
      instruction locations like registers and offset.  It has source and
      target operands locations in an array.  Each operand can have a register
      and an offset.  The offset is meaningful when mem_ref flag is set.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-7-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3a0c26ed
    • Namhyung Kim's avatar
      perf annotate: Factor out evsel__get_arch() · 0669729e
      Namhyung Kim authored
      The evsel__get_arch() is to get architecture info from the environment.
      
      It'll be used by other places later so let's factor it out.
      
      Also add arch__is() to check the arch info by name.
      
      Committer notes:
      
      "get" is usually associated with refcounting, so we better rename this
      at some point to a better name.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-6-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0669729e
    • Namhyung Kim's avatar
      perf annotate-data: Add dso->data_types tree · fc044c53
      Namhyung Kim authored
      To aggregate accesses to the same data type, add 'data_types' tree in
      DSO to maintain data types and find it by name and size.
      
      It might have different data types that happen to have the same name,
      so it also compares the size of the type.
      
      Even if it doesn't 100% guarantee, it reduces the possibility of
      mis-handling of such conflicts.
      
      And I don't think it's common to have different types with the same
      name.
      
      Committer notes:
      
      Very few cases on the Linux kernel, but there are some different types
      with the same name, unsure if there is a debug mode in libbpf dedup that
      warns about such cases, but there are provisions in pahole for that,
      see:
      
        "emit: Notice type shadowing, i.e. multiple types with the same name (enum, struct, union, etc)"
          https://git.kernel.org/pub/scm/devel/pahole/pahole.git/commit/?id=4f332dbfd02072e4f410db7bdcda8d6e3422974b
      
        $ pahole --compile > vmlinux.h
        $ rm -f a ; make a
        cc     a.c   -o a
        $ grep __[0-9] vmlinux.h
        union irte__1 {
        struct map_info__1;
        struct map_info__1 {
        	struct map_info__1 *       next;                 /*     0     8 */
        $
      
        drivers/iommu/amd/amd_iommu_types.h 'union irte'
        include/linux/dmar.h                'struct irte'
      
        include/linux/device-mapper.h:
      
          union map_info {
                  void *ptr;
          };
      
        include/linux/mtd/map.h:
      
          struct map_info {
              const char *name;
              unsigned long size;
              resource_size_t phys;
         <SNIP>
      
        kernel/events/uprobes.c:
      
         struct map_info {
              struct map_info *next;
              struct mm_struct *mm;
              unsigned long vaddr;
        };
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-5-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      fc044c53
    • Namhyung Kim's avatar
      perf annotate-data: Add find_data_type() to get type from memory access · b9c87f53
      Namhyung Kim authored
      The find_data_type() is to get a data type from the memory access at the
      given address (IP) using a register and an offset.
      
      It requires DWARF debug info in the DSO and searches the list of
      variables and function parameters in the scope.
      
      In a pseudo code, it does basically the following:
      
        find_data_type(dso, ip, reg, offset)
        {
            pc = map__rip_2objdump(ip);
            CU = dwarf_addrdie(dso->dwarf, pc);
            scopes = die_get_scopes(CU, pc);
            for_each_scope(S, scopes) {
                V = die_find_variable_by_reg(S, pc, reg);
                if (V && V.type == pointer_type) {
                    T = die_get_real_type(V);
                    if (offset < T.size)
                        return T;
                }
            }
            return NULL;
        }
      
      Committer notes:
      
      The 'size' variable in check_variable() is 64-bit, so use PRIu64 and
      inttypes.h to debug it.
      
      Ditto at find_data_type_die().
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@kernel.org>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Linus Torvalds <torvalds@linux-foundation.org>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: linux-toolchains@vger.kernel.org
      Cc: linux-trace-devel@vger.kernel.org
      Link: https://lore.kernel.org/r/20231213001323.718046-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b9c87f53
  3. 23 Dec, 2023 2 commits
  4. 21 Dec, 2023 2 commits
  5. 20 Dec, 2023 15 commits
    • Ian Rogers's avatar
      perf maps: Fix up overlaps during fixup_end · 7887097c
      Ian Rogers authored
      Maps are sometimes made overlapping, in particular kernel maps. If the
      end of a map overlaps the start of the next, shorten the overlapping
      map. This should remove potential non-determinism in maps__find, ie
      finding maps by address.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-23-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7887097c
    • Ian Rogers's avatar
      perf maps: Reduce scope of map_rb_node and maps internals · 631bb236
      Ian Rogers authored
      Avoid exposing the implementation of maps so that the internals can be
      refactored.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-22-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      631bb236
    • Ian Rogers's avatar
      perf maps: Add find next entry to give entry after the given map · 75858007
      Ian Rogers authored
      Use to remove map_rb_node use from machine.c.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-21-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      75858007
    • Ian Rogers's avatar
      perf maps: Add maps__load_first() · e77b0236
      Ian Rogers authored
      Avoid bpf_lock_contention_read touching the internal maps data structure
      by adding a helper function. As access is done directly on the map in
      maps, hold the read lock to stop it being removed.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-20-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e77b0236
    • Ian Rogers's avatar
      perf maps: Rename clone to copy from · 90849527
      Ian Rogers authored
      Rename maps__clone() to maps__copy_from() to be more intention revealing
      of its behavior. Pass the underlying maps rather than the thread.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-19-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      90849527
    • Ian Rogers's avatar
      perf maps: Do simple merge if given map doesn't overlap · 980d7927
      Ian Rogers authored
      Simplify merge in for the simple case of a non-overlapping map.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-18-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      980d7927
    • Ian Rogers's avatar
      perf maps: Refactor maps__fixup_overlappings() · 07ef14d5
      Ian Rogers authored
      Rename to maps__fixup_overlap_and_insert() as the given mapping is
      always inserted. Factor out first_ending_after() as a utility
      function. Minor variable name changes. Switch to using debug_file()
      rather than passing a debug FILE*.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-17-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      07ef14d5
    • Ian Rogers's avatar
      perf debug: Expose debug file · ec49230c
      Ian Rogers authored
      Some dumping call backs need to be passed a FILE*. Expose debug file
      via an accessor API for a consistent way to do this. Catch the
      unlikely failure of it not being set. Switch two cases where stderr
      was being used instead of debug_file.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-16-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ec49230c
    • Ian Rogers's avatar
      perf maps: Add remove maps function to remove a map based on callback · 8d5847a6
      Ian Rogers authored
      Removing maps wasn't being done under the write lock. Similar to
      maps__for_each_map(), iterate the entries but in this case remove the
      entry based on the result of the callback. If an entry was removed
      then maps_by_name() also needs updating, so add missed flush.
      
      In dso__load_kcore(), the test of map to save would always be false with
      REFCNT_CHECKING because of a missing RC_CHK_ACCESS/RC_CHK_EQUAL.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Acked-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-15-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8d5847a6
    • Ian Rogers's avatar
      perf maps: Reduce scope of maps__for_each_entry() · 9cce3a16
      Ian Rogers authored
      Reduce scope of maps__for_each_entry() as maps__for_each_map() is a safer
      alternative holding the maps lock during iteration.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-14-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9cce3a16
    • Ian Rogers's avatar
      perf vdso: Use function to add missing maps lock · 51ab715e
      Ian Rogers authored
      Switch machine__thread_dso_type() from loop macro maps__for_each_entry()
      to maps__for_each_map() function that takes a callback. The function
      holds the maps lock, which should be held during iteration.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-13-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      51ab715e
    • Ian Rogers's avatar
      perf unwind: Use function to add missing maps lock · 16f533ad
      Ian Rogers authored
      Switch read_unwind_spec_eh_frame() from loop macro
      maps__for_each_entry() to maps__for_each_map() function that takes a
      callback. The function holds the maps lock, which should be held during
      iteration.
      
      Committer notes:
      
      Fixed up conflict with:
      
        4fb54994 ("perf unwind-libunwind: Fix base address for .eh_frame")
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Cc: changbin du <changbin.du@huawei.com>
      Cc: colin ian king <colin.i.king@gmail.com>
      Cc: dmitrii dolgov <9erthalion6@gmail.com>
      Cc: guilherme amadio <amadio@gentoo.org>
      Cc: huacai chen <chenhuacai@kernel.org>
      Cc: k prateek nayak <kprateek.nayak@amd.com>
      Cc: li dong <lidong@vivo.com>
      Cc: liam howlett <liam.howlett@oracle.com>
      Cc: miguel ojeda <ojeda@kernel.org>
      Cc: ming wang <wangming01@loongson.cn>
      Cc: sean christopherson <seanjc@google.com>
      Cc: vincent whitchurch <vincent.whitchurch@axis.com>
      Link: http://lore.kernel.org/lkml/20231207011722.1220634-12-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      16f533ad
    • Ruidong Tian's avatar
      perf scripts python arm-cs-trace-disasm.py: Do not ignore disam first sample · 2d98dbb4
      Ruidong Tian authored
      arm-cs-trace-disasm ignore disam the first branch sample, For example as
      follow, the instructions beteween 0x0000ffffae878750 and
      0x0000ffffae878754 is lose:
      
        ARM CoreSight Trace Data Assembler Dump
        Event type: branches:uH
        Sample = { cpu: 0000 addr: 0x0000ffffae878750 phys_addr: 0x0000000000000000 ip: 0x0000000000000000 pid: 4003489 tid: 4003489 period: 1 time: 26765151766034 }
        Event type: branches:uH
        Sample = { cpu: 0000 addr: 0x0000000000000000 phys_addr: 0x0000000000000000 ip: 0x0000ffffae878754 pid: 4003489 tid: 4003489 period: 1 time: 26765151766034 }
      
      Initialize cpu_data earlier to fix it:
      
        ARM CoreSight Trace Data Assembler Dump
        Event type: branches:uH
        Sample = { cpu: 0000 addr: 0x0000000000000000 phys_addr: 0x0000000000000000 ip: 0x0000ffffae878754 pid: 4003489 tid: 4003489 period: 1 time: 26765151766034 }
              0000000000028740 <ioctl>: (base address is 0x0000ffffae850000)
                 28750: b13ffc1f      cmn     x0, #4095
                 28754: 54000042      b.hs    0x2875c <ioctl+0x1c>
                  test 4003489/4003489 [0000]     26765.151766034  __GI___ioctl+0x14                        /usr/lib64/libc-2.32.so
        Event type: branches:uH
        Sample = { cpu: 0000 addr: 0x0000ffffa67535ac phys_addr: 0x0000000000000000 ip: 0x0000000000000000 pid: 4003489 tid: 4003489 period: 1 time: 26765151766034 }
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarRuidong Tian <tianruidong@linux.alibaba.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Al Grant <al.grant@arm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Tor Jeremiassen <tor@ti.com>
      Link: https://lore.kernel.org/r/20231214123304.34087-4-tianruidong@linux.alibaba.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2d98dbb4
    • Ruidong Tian's avatar
      perf scripts python arm-cs-trace-disasm.py: Set start vm addr of exectable file to 0 · c344675a
      Ruidong Tian authored
      For exectable ELF file, which e_type is ET_EXEC, dso start address is a
      absolute address other than offset. Just set vm_start to zero when dso
      start is 0x400000, which means it is a exectable file.
      Reviewed-by: default avatarJames Clark <james.clark@arm.com>
      Signed-off-by: default avatarRuidong Tian <tianruidong@linux.alibaba.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Al Grant <al.grant@arm.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Mike Leach <mike.leach@linaro.org>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Tor Jeremiassen <tor@ti.com>
      Link: https://lore.kernel.org/r/20231214123304.34087-3-tianruidong@linux.alibaba.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c344675a
    • Veronika Molnarova's avatar
      perf archive: Add new option '--unpack' to expand tarballs · e43c64c9
      Veronika Molnarova authored
      Archives generated by the command 'perf archive' have to be unpacked
      manually.
      
      Following the addition of option '--all' now there also exist a nested
      structure of tars, and after further discussion with Red Hat Global
      Support Services, they found a feature correctly unpacking archives of
      'perf archive' convenient.
      
      Option '--unpack' of 'perf archive' unpacks archives generated by the
      command 'perf archive' as well as archives generated when used with
      option '--all'.
      
      The 'perf.data' file is placed in the current directory, while debug
      symbols are unpacked in '~/.debug' directory. A tar filename can be
      passed as an argument, and if not provided the command tries to find a
      viable perf.tar file for unpacking.
      Signed-off-by: default avatarVeronika Molnarova <vmolnaro@redhat.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Michael Petlan <mpetlan@redhat.com>
      Link: https://lore.kernel.org/r/20231212165909.14459-2-vmolnaro@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e43c64c9
  6. 19 Dec, 2023 4 commits
    • Veronika Molnarova's avatar
      perf archive: Add new option '--all' to pack perf.data with DSOs · 624dda10
      Veronika Molnarova authored
      'perf archive' has limited functionality and people from Red Hat Global
      Support Services sent a request for a new feature that would pack
      perf.data file together with an archive with debug symbols created by
      the command 'perf archive' as customers were being confused and often
      would forget to send perf.data file with the debug symbols.
      
      With this patch 'perf archive' now accepts an option '--all' that
      generates archive 'perf.all-hostname-date-time.tar.bz2' that holds file
      'perf.data' and a sub-tar 'perf.symbols.tar.bz2' with debug symbols. The
      functionality of the command 'perf archive' was not changed.
      
      Committer testing:
      
      Run 'perf record' on a Intel 14900K machine, hybrid:
      
        root@number:~# perf record -a sleep 5s
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 4.006 MB perf.data (15427 samples) ]
        root@number:~# perf archive --all
        Now please run:
      
        $ tar xvf perf.all-number-20231219-104854.tar.bz2 && tar xvf perf.symbols.tar.bz2 -C ~/.debug
      
        wherever you need to run 'perf report' on.
        root@number:~#
      
        root@number:~# perf report --header-only
        # ========
        # captured on    : Tue Dec 19 10:48:48 2023
        # header version : 1
        # data offset    : 1008
        # data size      : 4199936
        # feat offset    : 4200944
        # hostname : number
        # os release : 6.6.4-200.fc39.x86_64
        # perf version : 6.7.rc6.gca90f8e17b84
        # arch : x86_64
        # nrcpus online : 28
        # nrcpus avail : 28
        # cpudesc : Intel(R) Core(TM) i7-14700K
        # cpuid : GenuineIntel,6,183,1
        # total memory : 32610508 kB
        # cmdline : /home/acme/bin/perf (deleted) record -a sleep 5s
        # event : name = cpu_atom/cycles/P, , id = { 5088024, 5088025, 5088026, 5088027, 5088028, 5088029, 5088030, 5088031, 5088032, 5088033, 5088034, 5088035 }, type = 0 (PERF_TYPE_HARDWARE), size>
        # event : name = cpu_core/cycles/P, , id = { 5088036, 5088037, 5088038, 5088039, 5088040, 5088041, 5088042, 5088043, 5088044, 5088045, 5088046, 5088047, 5088048, 5088049, 5088050, 5088051 },>
        # event : name = dummy:u, , id = { 5088052, 5088053, 5088054, 5088055, 5088056, 5088057, 5088058, 5088059, 5088060, 5088061, 5088062, 5088063, 5088064, 5088065, 5088066, 5088067, 5088068, 50>
        # CPU_TOPOLOGY info available, use -I to display
        # NUMA_TOPOLOGY info available, use -I to display
        # pmu mappings: cpu_atom = 10, cpu_core = 4, breakpoint = 5, cstate_core = 34, cstate_pkg = 35, i915 = 14, intel_bts = 11, intel_pt = 12, kprobe = 8, msr = 13, power = 36, software = 1, trac>
        # CACHE info available, use -I to display
        # time of first sample : 124739.850375
        # time of last sample : 124744.855181
        # sample duration :   5004.806 ms
        # sample duration :   5004.806 ms
        # MEM_TOPOLOGY info available, use -I to display
        # bpf_prog_info 2: bpf_prog_7cc47bbf07148bfe_hid_tail_call addr 0xffffffffc0000978 size 113
        # bpf_prog_info 47: bpf_prog_713a545fe0530ce7_restrict_filesystems addr 0xffffffffc0000748 size 305
        # bpf_prog_info 163: bpf_prog_bd834b0730296056 addr 0xffffffffc000df14 size 331
        # bpf_prog_info 258: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc001fc08 size 264
        # bpf_prog_info 259: bpf_prog_40ddf486530245f5_sd_devices addr 0xffffffffc00204bc size 318
        # bpf_prog_info 260: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc0020630 size 63
        # bpf_prog_info 261: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc0020688 size 63
        # bpf_prog_info 262: bpf_prog_b37200ab714f0e17_sd_devices addr 0xffffffffc002072c size 110
        # bpf_prog_info 263: bpf_prog_b90a282ee45cfed9_sd_devices addr 0xffffffffc00207d8 size 393
        # bpf_prog_info 264: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc002099c size 264
        # bpf_prog_info 265: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc0020ad4 size 63
        # bpf_prog_info 266: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc0020b50 size 63
        # bpf_prog_info 267: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc002d98c size 264
        # bpf_prog_info 268: bpf_prog_be31ae23198a0378_sd_devices addr 0xffffffffc002dac8 size 297
        # bpf_prog_info 269: bpf_prog_ccbbf91f3c6979c7_sd_devices addr 0xffffffffc002dc54 size 360
        # bpf_prog_info 270: bpf_prog_3a0ef5414c2f6fca_sd_devices addr 0xffffffffc002dde8 size 456
        # bpf_prog_info 271: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc0020bd4 size 63
        # bpf_prog_info 272: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc00299b4 size 63
        # bpf_prog_info 273: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc002dfd0 size 264
        # bpf_prog_info 274: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc0029a3c size 63
        # bpf_prog_info 275: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc002d71c size 63
        # bpf_prog_info 276: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc002d7a8 size 63
        # bpf_prog_info 277: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc002e13c size 63
        # bpf_prog_info 278: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc002e1a8 size 63
        # bpf_prog_info 279: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc002e234 size 63
        # bpf_prog_info 280: bpf_prog_be31ae23198a0378_sd_devices addr 0xffffffffc002e2ac size 297
        # bpf_prog_info 281: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc002e42c size 63
        # bpf_prog_info 282: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc002e49c size 63
        # bpf_prog_info 290: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc0004b18 size 264
        # bpf_prog_info 294: bpf_prog_0b1566e4b83190c5_sd_devices addr 0xffffffffc0004c50 size 360
        # bpf_prog_info 295: bpf_prog_ee0e253c78993a24_sd_devices addr 0xffffffffc001cfc8 size 264
        # bpf_prog_info 296: bpf_prog_6deef7357e7b4530_sd_fw_egress addr 0xffffffffc0013abc size 63
        # bpf_prog_info 297: bpf_prog_6deef7357e7b4530_sd_fw_ingress addr 0xffffffffc0013b24 size 63
        # btf info of id 2
        # btf info of id 52
        # HYBRID_TOPOLOGY info available, use -I to display
        # cpu_atom pmu capabilities: branches=32, max_precise=3, pmu_name=alderlake_hybrid
        # cpu_core pmu capabilities: branches=32, max_precise=3, pmu_name=alderlake_hybrid
        # intel_pt pmu capabilities: topa_multiple_entries=1, psb_cyc=1, single_range_output=1, mtc_periods=249, ip_filtering=1, output_subsys=0, cr3_filtering=1, psb_periods=3f, event_trace=0, cycl>
        # missing features: TRACING_DATA BRANCH_STACK GROUP_DESC AUXTRACE STAT CLOCKID DIR_FORMAT COMPRESSED CPU_PMU_CAPS CLOCK_DATA
        # ========
        #
        root@number:~#
      
      And then transferring it to a ARM64 machine, a Libre Computer RK3399-PC:
      
        root@number:~# scp perf.all-number-20231219-104854.tar.bz2 acme@192.168.86.114:.
        acme@192.168.86.114's password:
        perf.all-number-20231219-104854.tar.bz2                           100%  145MB  85.4MB/s   00:01
        root@number:~#
        root@number:~# ssh acme@192.168.86.114
        acme@192.168.86.114's password:
        Welcome to Ubuntu 23.04 (GNU/Linux 6.1.68-12200-g1c40dda3081e aarch64)
      
         * Documentation:  https://help.ubuntu.com
         * Management:     https://landscape.canonical.com
         * Support:        https://ubuntu.com/advantage
        Last login: Tue Dec 19 14:53:18 2023 from 192.168.86.42
        acme@roc-rk3399-pc:~$ tar xvf perf.all-number-20231219-104854.tar.bz2 && tar xvf perf.symbols.tar.bz2 -C ~/.debug
        perf.data
        perf.symbols.tar.bz2
        .build-id/ad/acc227f470409213308050b71f664322e2956c
        [kernel.kallsyms]/adacc227f470409213308050b71f664322e2956c/
        [kernel.kallsyms]/adacc227f470409213308050b71f664322e2956c/kallsyms
        [kernel.kallsyms]/adacc227f470409213308050b71f664322e2956c/probes
        .build-id/76/c91f4d62baa06bb52e07e20aba36d21a8f9797
        usr/lib64/libz.so.1.2.13/76c91f4d62baa06bb52e07e20aba36d21a8f9797/
        <SNIP>
        .build-id/09/d7e96bc1e3f599d15ca28b36959124b2d74410
        usr/lib64/librpm_sequoia.so.1/09d7e96bc1e3f599d15ca28b36959124b2d74410/
        usr/lib64/librpm_sequoia.so.1/09d7e96bc1e3f599d15ca28b36959124b2d74410/elf
        usr/lib64/librpm_sequoia.so.1/09d7e96bc1e3f599d15ca28b36959124b2d74410/probes
        acme@roc-rk3399-pc:~$
        acme@roc-rk3399-pc:~$ perf report --stdio | head -40
        # To display the perf.data header info, please use --header/--header-only options.
        #
        # Total Lost Samples: 0
        #
        # Samples: 6K of event 'cpu_atom/cycles/P'
        # Event count (approx.): 4519946621
        #
        # Overhead  Command          Shared Object                                   Symbol
        # ........  ...............  ..............................................  .........................................................................................................................................................
        #
             1.73%  swapper          [kernel.kallsyms]                               [k] intel_idle
             1.43%  sh               [kernel.kallsyms]                               [k] next_uptodate_folio
             0.94%  make             ld-linux-x86-64.so.2                            [.] do_lookup_x
             0.90%  sh               ld-linux-x86-64.so.2                            [.] do_lookup_x
             0.82%  sh               [kernel.kallsyms]                               [k] perf_event_mmap_output
             0.74%  sh               [kernel.kallsyms]                               [k] filemap_map_pages
             0.72%  sh               ld-linux-x86-64.so.2                            [.] _dl_relocate_object
             0.69%  cc1              [kernel.kallsyms]                               [k] clear_page_erms
             0.61%  sh               [kernel.kallsyms]                               [k] unmap_page_range
             0.56%  swapper          [kernel.kallsyms]                               [k] poll_idle
             0.52%  cc1              ld-linux-x86-64.so.2                            [.] do_lookup_x
             0.47%  make             ld-linux-x86-64.so.2                            [.] _dl_relocate_object
             0.44%  cc1              cc1                                             [.] make_node(tree_code)
             0.43%  sh               [kernel.kallsyms]                               [k] native_irq_return_iret
             0.38%  sh               libc.so.6                                       [.] _int_malloc
             0.38%  cc1              cc1                                             [.] decl_attributes(tree_node**, tree_node*, int, tree_node*)
             0.38%  sh               [kernel.kallsyms]                               [k] clear_page_erms
             0.37%  cc1              cc1                                             [.] ht_lookup_with_hash(ht*, unsigned char const*, unsigned long, unsigned int, ht_lookup_option)
             0.37%  make             [kernel.kallsyms]                               [k] perf_event_mmap_output
             0.37%  make             ld-linux-x86-64.so.2                            [.] _dl_lookup_symbol_x
             0.35%  sh               [kernel.kallsyms]                               [k] _compound_head
             0.35%  make             make                                            [.] hash_find_slot
             0.33%  sh               libc.so.6                                       [.] __strlen_avx2
             0.33%  cc1              cc1                                             [.] ggc_internal_alloc(unsigned long, void (*)(void*), unsigned long, unsigned long)
             0.33%  sh               [kernel.kallsyms]                               [k] perf_iterate_ctx
             0.31%  make             make                                            [.] jhash_string
             0.31%  sh               [kernel.kallsyms]                               [k] page_remove_rmap
             0.30%  cc1              libc.so.6                                       [.] _int_malloc
             0.30%  make             libc.so.6                                       [.] _int_malloc
        acme@roc-rk3399-pc:~$
      Signed-off-by: default avatarVeronika Molnarova <vmolnaro@redhat.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Michael Petlan <mpetlan@redhat.com>
      Link: https://lore.kernel.org/r/20231212165909.14459-1-vmolnaro@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      624dda10
    • Arnaldo Carvalho de Melo's avatar
      Merge remote-tracking branch 'torvalds/master' into perf-tools-next · ab1c2470
      Arnaldo Carvalho de Melo authored
      To pick up fixes that went thru perf-tools for v6.7 and to get in sync
      with upstream to check for drift in the copies of headers, etc.
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ab1c2470
    • Ian Rogers's avatar
      perf thread: Use function to add missing maps lock · 71225af1
      Ian Rogers authored
      Switch thread__prepare_access from loop macro maps__for_each_entry
      to maps__for_each_map function that takes a callback. The function
      holds the maps lock, which should be held during iteration.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-11-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      71225af1
    • Ian Rogers's avatar
      perf synthetic-events: Use function to add missing maps lock · 228493d0
      Ian Rogers authored
      Switch perf_event__synthesize_modules from loop macro
      maps__for_each_entry to maps__for_each_map function that takes
      a callback. The function holds the maps lock, which should be
      held during iteration.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
      Cc: Changbin Du <changbin.du@huawei.com>
      Cc: Colin Ian King <colin.i.king@gmail.com>
      Cc: Dmitrii Dolgov <9erthalion6@gmail.com>
      Cc: German Gomez <german.gomez@arm.com>
      Cc: Guilherme Amadio <amadio@gentoo.org>
      Cc: Huacai Chen <chenhuacai@kernel.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: K Prateek Nayak <kprateek.nayak@amd.com>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Leo Yan <leo.yan@linaro.org>
      Cc: Li Dong <lidong@vivo.com>
      Cc: Liam Howlett <liam.howlett@oracle.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Miguel Ojeda <ojeda@kernel.org>
      Cc: Ming Wang <wangming01@loongson.cn>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Terrell <terrelln@fb.com>
      Cc: Paolo Bonzini <pbonzini@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi Bangoria <ravi.bangoria@amd.com>
      Cc: Sandipan Das <sandipan.das@amd.com>
      Cc: Sean Christopherson <seanjc@google.com>
      Cc: Steinar H. Gunderson <sesse@google.com>
      Cc: Vincent Whitchurch <vincent.whitchurch@axis.com>
      Cc: Wenyu Liu <liuwenyu7@huawei.com>
      Cc: Yang Jihong <yangjihong1@huawei.com>
      Link: https://lore.kernel.org/r/20231207011722.1220634-10-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      228493d0