1. Sep 06, 2022
    • Athira Rajeev's avatar
      perf affinity: Fix out of bound access to "sched_cpus" mask · 72cd652b
      Athira Rajeev authored
      
      
      The affinity code in "affinity_set" function access array named
      "sched_cpus". The size for this array is allocated in affinity_setup
      function which is nothing but value from get_cpu_set_size. This is used
      to contain the cpumask value for each cpu.
      
      While setting bit for each cpu, it calls "set_bit" function which access
      index in sched_cpus array.  If we provide a command-line option to -C
      which is more than the number of CPU's present in the system, the
      set_bit could access an array member which is out-of the array size.
      This is because currently, there is no boundary check for the CPU.  This
      will result in seg fault:
      
      <<>>
         ./perf stat -C 12323431 ls
        Perf can support 2048 CPUs. Consider raising MAX_NR_CPUS
        Segmentation fault (core dumped)
      <<>>
      
      Fix this by adding boundary check for the array.
      
      After the fix from powerpc system:
      
      <<>>
        ./perf stat -C 12323431 ls 1>out
        Perf can support 2048 CPUs. Consider raising MAX_NR_CPUS
      
         Performance counter stats for 'CPU(s) 12323431':
      
           <not supported> msec cpu-clock
           <not supported>      context-switches
           <not supported>      cpu-migrations
           <not supported>      page-faults
           <not supported>      cycles
           <not supported>      instructions
           <not supported>      branches
           <not supported>      branch-misses
      
               0.001192373 seconds time elapsed
      <<>>
      
      Reported-by: default avatarNageswara R Sastry <rnsastry@linux.ibm.com>
      Signed-off-by: default avatarAthira Jajeev <atrajeev@linux.vnet.ibm.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: default avatarNageswara R Sastry <rnsastry@linux.ibm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kajol Jain <kjain@linux.ibm.com>
      Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>
      Cc: Michael Ellerman <mpe@ellerman.id.au>
      Cc: linuxppc-dev@lists.ozlabs.org
      Link: https://lore.kernel.org/r/20220905141929.7171-1-atrajeev@linux.vnet.ibm.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      72cd652b
  2. Sep 03, 2022
    • Zhengjun Xing's avatar
      perf stat: Fix L2 Topdown metrics disappear for raw events · f0c86a2b
      Zhengjun Xing authored
      In perf/Documentation/perf-stat.txt, for "--td-level" the default "0" means
      the max level that the current hardware support.
      
      So we need initialize the stat_config.topdown_level to TOPDOWN_MAX_LEVEL
      when “--td-level=0” or no “--td-level” option. Otherwise, for the
      hardware with a max level is 2, the 2nd level metrics disappear for raw
      events in this case.
      
      The issue cannot be observed for the perf stat default or "--topdown"
      options. This commit fixes the raw events issue and removes the
      duplicated code for the perf stat default.
      
      Before:
      
       # ./perf stat -e "cpu-clock,context-switches,cpu-migrations,page-faults,instructions,cycles,ref-cycles,branches,branch-misses,{slots,topdown-retiring,topdown-bad-spec,topdown-fe-bound,topdown-be-bound,topdown-heavy-ops,topdown-br-mispredict,topdown-fetch-lat,topdown-mem-bound}" sleep 1
      
       Performance counter stats for 'sleep 1':
      
                    1.03 msec cpu-clock                        #    0.001 CPUs utilized
                       1      context-switches                 #  966.216 /sec
                       0      cpu-migrations                   #    0.000 /sec
                      60      page-faults                      #   57.973 K/sec
               1,132,112      instructions                     #    1.41  insn per cycle
                 803,872      cycles                           #    0.777 GHz
               1,909,120      ref-cycles                       #    1.845 G/sec
                 236,634      branches                         #  228.640 M/sec
                   6,367      branch-misses                    #    2.69% of all branches
               4,823,232      slots                            #    4.660 G/sec
               1,210,536      topdown-retiring                 #     25.1% Retiring
                 699,841      topdown-bad-spec                 #     14.5% Bad Speculation
               1,777,975      topdown-fe-bound                 #     36.9% Frontend Bound
               1,134,878      topdown-be-bound                 #     23.5% Backend Bound
                 189,146      topdown-heavy-ops                #  182.756 M/sec
                 662,012      topdown-br-mispredict            #  639.647 M/sec
               1,097,048      topdown-fetch-lat                #    1.060 G/sec
                 416,121      topdown-mem-bound                #  402.063 M/sec
      
             1.002423690 seconds time elapsed
      
             0.002494000 seconds user
             0.000000000 seconds sys
      
      After:
      
       # ./perf stat -e "cpu-clock,context-switches,cpu-migrations,page-faults,instructions,cycles,ref-cycles,branches,branch-misses,{slots,topdown-retiring,topdown-bad-spec,topdown-fe-bound,topdown-be-bound,topdown-heavy-ops,topdown-br-mispredict,topdown-fetch-lat,topdown-mem-bound}" sleep 1
      
       Performance counter stats for 'sleep 1':
      
                    1.13 msec cpu-clock                        #    0.001 CPUs utilized
                       1      context-switches                 #  882.128 /sec
                       0      cpu-migrations                   #    0.000 /sec
                      61      page-faults                      #   53.810 K/sec
               1,137,612      instructions                     #    1.29  insn per cycle
                 881,477      cycles                           #    0.778 GHz
               2,093,496      ref-cycles                       #    1.847 G/sec
                 236,356      branches                         #  208.496 M/sec
                   7,090      branch-misses                    #    3.00% of all branches
               5,288,862      slots                            #    4.665 G/sec
               1,223,697      topdown-retiring                 #     23.1% Retiring
                 767,403      topdown-bad-spec                 #     14.5% Bad Speculation
               2,053,322      topdown-fe-bound                 #     38.8% Frontend Bound
               1,244,438      topdown-be-bound                 #     23.5% Backend Bound
                 186,665      topdown-heavy-ops                #      3.5% Heavy Operations       #     19.6% Light Operations
                 725,922      topdown-br-mispredict            #     13.7% Branch Mispredict      #      0.8% Machine Clears
               1,327,400      topdown-fetch-lat                #     25.1% Fetch Latency          #     13.7% Fetch Bandwidth
                 497,775      topdown-mem-bound                #      9.4% Memory Bound           #     14.1% Core Bound
      
             1.002701530 seconds time elapsed
      
             0.002744000 seconds user
             0.000000000 seconds sys
      
      Fixes: 63e39aa6
      
       ("perf stat: Support L2 Topdown events")
      Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
      Signed-off-by: default avatarXing Zhengjun <zhengjun.xing@linux.intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20220826140057.3289401-1-zhengjun.xing@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f0c86a2b
  3. Sep 01, 2022
  4. Aug 31, 2022
    • Ian Rogers's avatar
      perf metric: Return early if no CPU PMU table exists · 3f5df3ac
      Ian Rogers authored
      Previous behavior is to segfault if there is no CPU PMU table and a
      metric is sought. To reproduce compile with NO_JEVENTS=1 then request a
      metric, for example, "perf stat -M IPC true".
      
      Committer testing:
      
      Before:
      
        $ make -k NO_JEVENTS=1 BUILD_BPF_SKEL=1 O=/tmp/build/perf-urgent -C tools/perf install-bin
        $ perf stat -M IPC true
        Segmentation fault (core dumped)
        $
      
      After:
      
        $ perf stat -M IPC true
      
         Usage: perf stat [<options>] [<command>]
      
            -M, --metrics <metric/metric group list>
                                  monitor specified metrics or metric groups (separated by ,)
        $
      
      Fixes: 00facc76
      
       ("perf jevents: Switch build to use jevents.py")
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Caleb Biggers <caleb.biggers@intel.com>
      Cc: Florian Fischer <florian.fischer@muhq.space>
      Cc: Ian Rogers <rogers.email@gmail.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: John Garry <john.garry@huawei.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Kshipra Bopardikar <kshipra.bopardikar@intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Miaoqian Lin <linmq006@gmail.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Perry Taylor <perry.taylor@intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: Xing Zhengjun <zhengjun.xing@linux.intel.com>
      Link: https://lore.kernel.org/r/20220830164846.401143-3-irogers@google.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      3f5df3ac
  5. Aug 30, 2022
  6. Aug 29, 2022
  7. Aug 28, 2022
  8. Aug 27, 2022
    • Zhengjun Xing's avatar
      perf stat: Capitalize topdown metrics' names · 48648548
      Zhengjun Xing authored
      
      
      Capitalize topdown metrics' names to follow the intel SDM.
      
      Before:
      
       # ./perf stat -a  sleep 1
      
       Performance counter stats for 'system wide':
      
              228,094.05 msec cpu-clock                        #  225.026 CPUs utilized
                     842      context-switches                 #    3.691 /sec
                     224      cpu-migrations                   #    0.982 /sec
                      70      page-faults                      #    0.307 /sec
              23,164,105      cycles                           #    0.000 GHz
              29,403,446      instructions                     #    1.27  insn per cycle
               5,268,185      branches                         #   23.097 K/sec
                  33,239      branch-misses                    #    0.63% of all branches
             136,248,990      slots                            #  597.337 K/sec
              32,976,450      topdown-retiring                 #     24.2% retiring
               4,651,918      topdown-bad-spec                 #      3.4% bad speculation
              26,148,695      topdown-fe-bound                 #     19.2% frontend bound
              72,515,776      topdown-be-bound                 #     53.2% backend bound
               6,008,540      topdown-heavy-ops                #      4.4% heavy operations       #     19.8% light operations
               3,934,049      topdown-br-mispredict            #      2.9% branch mispredict      #      0.5% machine clears
              16,655,439      topdown-fetch-lat                #     12.2% fetch latency          #      7.0% fetch bandwidth
              41,635,972      topdown-mem-bound                #     30.5% memory bound           #     22.7% Core bound
      
             1.013634593 seconds time elapsed
      
      After:
      
       # ./perf stat -a  sleep 1
      
       Performance counter stats for 'system wide':
      
              228,081.94 msec cpu-clock                        #  225.003 CPUs utilized
                     824      context-switches                 #    3.613 /sec
                     224      cpu-migrations                   #    0.982 /sec
                      67      page-faults                      #    0.294 /sec
              22,647,423      cycles                           #    0.000 GHz
              28,870,551      instructions                     #    1.27  insn per cycle
               5,167,099      branches                         #   22.655 K/sec
                  32,383      branch-misses                    #    0.63% of all branches
             133,411,074      slots                            #  584.926 K/sec
              32,352,607      topdown-retiring                 #     24.3% Retiring
               4,456,977      topdown-bad-spec                 #      3.3% Bad Speculation
              25,626,487      topdown-fe-bound                 #     19.2% Frontend Bound
              70,955,316      topdown-be-bound                 #     53.2% Backend Bound
               5,834,844      topdown-heavy-ops                #      4.4% Heavy Operations       #     19.9% Light Operations
               3,738,781      topdown-br-mispredict            #      2.8% Branch Mispredict      #      0.5% Machine Clears
              16,286,803      topdown-fetch-lat                #     12.2% Fetch Latency          #      7.0% Fetch Bandwidth
              40,802,069      topdown-mem-bound                #     30.6% Memory Bound           #     22.6% Core Bound
      
             1.013683125 seconds time elapsed
      
      Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
      Signed-off-by: default avatarXing Zhengjun <zhengjun.xing@linux.intel.com>
      Acked-by: default avatarIan Rogers <irogers@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: https://lore.kernel.org/r/20220825015458.3252239-1-zhengjun.xing@linux.intel.com
      
      
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      48648548