1. 03 Apr, 2020 22 commits
    • Arnaldo Carvalho de Melo's avatar
      perf python: Fix clang detection to strip out options passed in $CC · 9ff76cea
      Arnaldo Carvalho de Melo authored
      The clang check in the python setup.py file expected $CC to be just the
      name of the compiler, not the compiler + options, i.e. all options were
      expected to be passed in $CFLAGS, this ends up making it fail in systems
      where CC is set to, e.g.:
      
       "aarch64-linaro-linux-gcc --sysroot=/oe/build/tmp/work/juno-linaro-linux/perf/1.0-r9/recipe-sysroot"
      
      Like this:
      
        $ python3
        >>> from subprocess import Popen
        >>> a = Popen(["aarch64-linux-gnu-gcc --sysroot=/oe/build/tmp/work/juno-linaro-linux/perf/1.0-r9/recipe-sysroot", "-v"])
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
          File "/usr/lib/python3.6/subprocess.py", line 729, in __init__
            restore_signals, start_new_session)
          File "/usr/lib/python3.6/subprocess.py", line 1364, in _execute_child
            raise child_exception_type(errno_num, err_msg, err_filename)
        FileNotFoundError: [Errno 2] No such file or directory: 'aarch64-linux-gnu-gcc --sysroot=/oe/build/tmp/work/juno-linaro-linux/perf/1.0-r9/recipe-sysroot': 'aarch64-linux-gnu-gcc --sysroot=/oe/build/tmp/work/juno-linaro-linux/perf/1.0-r9/recipe-sysroot'
        >>>
      
      Make it more robust, covering this case, by passing cc.split()[0] as the
      first arg to popen().
      
      Fixes: a7ffd416 ("perf python: Fix clang detection when using CC=clang-version")
      Reported-by: default avatarDaniel Díaz <daniel.diaz@linaro.org>
      Reported-by: default avatarNaresh Kamboju <naresh.kamboju@linaro.org>
      Tested-by: default avatarDaniel Díaz <daniel.diaz@linaro.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Ilie Halip <ilie.halip@gmail.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: http://lore.kernel.org/lkml/20200401124037.GA12534@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      9ff76cea
    • Sam Lunt's avatar
      perf tools: Support Python 3.8+ in Makefile · b9c9ce4e
      Sam Lunt authored
      Python 3.8 changed the output of 'python-config --ldflags' to no longer
      include the '-lpythonX.Y' flag (this apparently fixed an issue loading
      modules with a statically linked Python executable).  The libpython
      feature check in linux/build/feature fails if the Python library is not
      included in FEATURE_CHECK_LDFLAGS-libpython variable.
      
      This adds a check in the Makefile to determine if PYTHON_CONFIG accepts
      the '--embed' flag and passes that flag alongside '--ldflags' if so.
      
      tools/perf is the only place the libpython feature check is used.
      Signed-off-by: default avatarSam Lunt <samuel.j.lunt@gmail.com>
      Tested-by: default avatarHe Zhe <zhe.he@windriver.com>
      Link: http://lore.kernel.org/lkml/c56be2e1-8111-9dfe-8298-f7d0f9ab7431@windriver.comAcked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: trivial@kernel.org
      Cc: stable@kernel.org
      Link: http://lore.kernel.org/lkml/20200131181123.tmamivhq4b7uqasr@gmail.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b9c9ce4e
    • Andreas Gerstmayr's avatar
      perf script: Fix invalid read of directory entry after closedir() · 27486a85
      Andreas Gerstmayr authored
      closedir(lang_dir) frees the memory of script_dirent->d_name, which
      gets accessed in the next line in a call to scnprintf().
      
      Valgrind report:
      
        Invalid read of size 1
        ==413557==    at 0x483CBE6: strlen (vg_replace_strmem.c:461)
        ==413557==    by 0x4DD45FD: __vfprintf_internal (vfprintf-internal.c:1688)
        ==413557==    by 0x4DE6679: __vsnprintf_internal (vsnprintf.c:114)
        ==413557==    by 0x53A037: vsnprintf (stdio2.h:80)
        ==413557==    by 0x53A037: scnprintf (vsprintf.c:21)
        ==413557==    by 0x435202: get_script_path (builtin-script.c:3223)
        ==413557==  Address 0x52e7313 is 1,139 bytes inside a block of size 32,816 free'd
        ==413557==    at 0x483AA0C: free (vg_replace_malloc.c:540)
        ==413557==    by 0x4E303C0: closedir (closedir.c:50)
        ==413557==    by 0x4351DC: get_script_path (builtin-script.c:3222)
      Signed-off-by: default avatarAndreas Gerstmayr <agerstmayr@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200402124337.419456-1-agerstmayr@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      27486a85
    • Andreas Gerstmayr's avatar
      perf script report: Fix SEGFAULT when using DWARF mode · 1a4025f0
      Andreas Gerstmayr authored
      When running perf script report with a Python script and a callgraph in
      DWARF mode, intr_regs->regs can be 0 and therefore crashing the regs_map
      function.
      
      Added a check for this condition (same check as in builtin-script.c:595).
      Signed-off-by: default avatarAndreas Gerstmayr <agerstmayr@redhat.com>
      Tested-by: default avatarKim Phillips <kim.phillips@amd.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Link: http://lore.kernel.org/lkml/20200402125417.422232-1-agerstmayr@redhat.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      1a4025f0
    • Ian Rogers's avatar
      perf script: add -S/--symbols documentation · 628d736d
      Ian Rogers authored
      Capture both that this option exists and that symbols can be hexadecimal
      addresses.
      Signed-off-by: default avatarIan Rogers <irogers@google.com>
      Suggested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lore.kernel.org/lkml/20200402174130.140319-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      628d736d
    • Jin Yao's avatar
      perf pmu-events x86: Use CPU_CLK_UNHALTED.THREAD in Kernel_Utilization metric · 8ed1faf0
      Jin Yao authored
      The kernel utilization metric does multiplexing currently and is somewhat
      unreliable. The problem is that it uses two instances of the fixed counter,
      and the kernel has to multipleplex which causes errors. So should use
      CPU_CLK_UNHALTED.THREAD instead.
      
      Before:
      
        # perf stat -M Kernel_Utilization -- sleep 1
      
        Performance counter stats for 'sleep 1':
      
                1,419,425      cpu_clk_unhalted.ref_tsc:k
            <not counted>      cpu_clk_unhalted.ref_tsc	(0.00%)
      
      After:
      
        # perf stat -M Kernel_Utilization -- sleep 1
      
        Performance counter stats for 'sleep 1':
      
                  746,688      cpu_clk_unhalted.thread:k #      0.7 Kernel_Utilization
                1,088,348      cpu_clk_unhalted.thread
      Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
      Reviewed-by: default avatarAndi Kleen <ak@linux.intel.com>
      Reviewed-by: default avatarKan Liang <kan.liang@linux.intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jin Yao <yao.jin@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200309013125.7559-1-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8ed1faf0
    • Adrian Hunter's avatar
      perf events parser: Add missing Intel CPU events to parser · 47327f56
      Adrian Hunter authored
      perf list expects CPU events to be parseable by name, e.g.
      
          # perf list | grep el-capacity-read
            el-capacity-read OR cpu/el-capacity-read/          [Kernel PMU event]
      
      But the event parser does not recognize them that way, e.g.
      
          # perf test -v "Parse event"
          <SNIP>
          running test 54 'cycles//u'
          running test 55 'cycles:k'
          running test 0 'cpu/config=10,config1,config2=3,period=1000/u'
          running test 1 'cpu/config=1,name=krava/u,cpu/config=2/u'
          running test 2 'cpu/config=1,call-graph=fp,time,period=100000/,cpu/config=2,call-graph=no,time=0,period=2000/'
          running test 3 'cpu/name='COMPLEX_CYCLES_NAME:orig=cycles,desc=chip-clock-ticks',period=0x1,event=0x2/ukp'
          -> cpu/event=0,umask=0x11/
          -> cpu/event=0,umask=0x13/
          -> cpu/event=0x54,umask=0x1/
          failed to parse event 'el-capacity-read:u,cpu/event=el-capacity-read/u', err 1, str 'parser error'
          event syntax error: 'el-capacity-read:u,cpu/event=el-capacity-read/u'
                                 \___ parser error test child finished with 1
          ---- end ----
          Parse event definition strings: FAILED!
      
      This happens because the parser splits names by '-' in order to deal
      with cache events. For example 'L1-dcache' is a token in
      parse-events.l which is matched to 'L1-dcache-load-miss' by the
      following rule:
      
          PE_NAME_CACHE_TYPE '-' PE_NAME_CACHE_OP_RESULT '-' PE_NAME_CACHE_OP_RESULT opt_event_config
      
      And so there is special handling for 2-part PMU names i.e.
      
          PE_PMU_EVENT_PRE '-' PE_PMU_EVENT_SUF sep_dc
      
      but no handling for 3-part names, which are instead added as tokens e.g.
      
          topdown-[a-z-]+
      
      While it would be possible to add a rule for 3-part names, that would
      not work if the first parts were also a valid PMU name e.g.
      'el-capacity-read' would be matched to 'el-capacity' before the parser
      reached the 3rd part.
      
      The parser would need significant change to rationalize all this, so
      instead fix for now by adding missing Intel CPU events with 3-part names
      to the event parser as tokens.
      
      Missing events were found by using:
      
          grep -r EVENT_ATTR_STR arch/x86/events/intel/core.c
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Link: http://lore.kernel.org/lkml/90c7ae07-c568-b6d3-f9c4-d0c1528a0610@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      47327f56
    • Stephane Eranian's avatar
      perf script: Allow --symbol to accept hexadecimal addresses · d2bedb78
      Stephane Eranian authored
      This patch extends the perf script --symbols option to filter on
      hexadecimal addresses in addition to symbol names. This makes it easier
      to handle cases where symbols are aliased.
      
      With this patch, it is possible to mix and match symbols and hexadecimal
      addresses using the --symbols option.
      
        $ perf script --symbols=noploop,0x4007a0
      Signed-off-by: default avatarStephane Eranian <eranian@google.com>
      Reviewed-by: default avatarIan Rogers <irogers@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325220802.15039-1-irogers@google.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d2bedb78
    • Arnaldo Carvalho de Melo's avatar
      perf report/top TUI: Fix title line formatting · 376c3c22
      Arnaldo Carvalho de Melo authored
      In d10ec006 ("perf hists browser: Allow passing an initial hotkey")
      the hist_entry__title() call was cut'n'pasted to a function where the
      'title' variable is a pointer, not an array, so the sizeof(title)
      continues syntactically valid but ends up reducing the real size of the
      buffer where to format the first line in the screen to 8 bytes, which
      makes the formatting at the title at each refresh to produce just the
      string "Samples ", duh, fix it by passing the size of the buffer.
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Fixes: d10ec006 ("perf hists browser: Allow passing an initial hotkey")
      Link: http://lore.kernel.org/lkml/20200330154314.GB4576@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      376c3c22
    • Jin Yao's avatar
      perf top: Support hotkey to change sort order · 2605af0f
      Jin Yao authored
      It would be nice if we can use a hotkey in perf top browser to select a
      event for sorting.
      
      For example:
      
        perf top --group -e cycles,instructions,cache-misses
      
        Samples
                        Overhead  Shared Object             Symbol
          40.03%  45.71%   0.03%  div                       [.] main
          20.46%  14.67%   0.21%  libc-2.27.so              [.] __random_r
          20.01%  19.54%   0.02%  libc-2.27.so              [.] __random
           9.68%  10.68%   0.00%  div                       [.] compute_flag
           4.32%   4.70%   0.00%  libc-2.27.so              [.] rand
           3.84%   3.43%   0.00%  div                       [.] rand@plt
           0.05%   0.05%   2.33%  libc-2.27.so              [.] __strcmp_sse2_unaligned
           0.04%   0.08%   2.43%  perf                      [.] perf_hpp__is_dynamic_en
           0.04%   0.02%   6.64%  perf                      [.] rb_next
           0.04%   0.01%   3.87%  perf                      [.] dso__find_symbol
           0.04%   0.04%   1.77%  perf                      [.] sort__dso_cmp
      
      When user press hotkey '2' (event index, starting from 0), it indicates
      to sort output by the third event in group (cache-misses).
      
        Samples
                        Overhead  Shared Object               Symbol
           4.07%   1.28%   6.68%  perf                        [.] rb_next
           3.57%   3.98%   4.11%  perf                        [.] __hists__insert_output
           3.67%  11.24%   3.60%  perf                        [.] perf_hpp__is_dynamic_e
           3.67%   3.20%   3.20%  perf                        [.] hpp__sort_overhead
           0.81%   0.06%   3.01%  perf                        [.] dso__find_symbol
           1.62%   5.47%   2.51%  perf                        [.] hists__match
           2.70%   1.86%   2.47%  libc-2.27.so                [.] _int_malloc
           0.19%   0.00%   2.29%  [kernel]                    [k] copy_page
           0.41%   0.32%   1.98%  perf                        [.] hists__decay_entries
           1.84%   3.67%   1.68%  perf                        [.] sort__dso_cmp
           0.16%   0.00%   1.63%  [kernel]                    [k] clear_page_erms
      
      Now the output is sorted by cache-misses.
      
       v2:
       ---
       Zero the history if hotkey is pressed.
      Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
      Suggested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.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: Jin Yao <yao.jin@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200324220711.6025-2-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      2605af0f
    • Jin Yao's avatar
      perf top: Support --group-sort-idx to change the sort order · df7deb2c
      Jin Yao authored
      'perf report' supports the option --group-sort-idx, which sorts the
      output by the event at the index n in event group.
      
      For example:
      
        perf record -e cycles,instructions,cache-misses
        perf report --group --group-sort-idx 2 --stdio
      
      The perf-report output is sorted by cache-misses.
      
      This patch supports --group-sort-idx in perf-top.
      
      For example:
      
        perf top --group -e cycles,instructions,cache-misses --group-sort-idx 2
      
      The perf-top output is sorted by cache-misses.
      Signed-off-by: default avatarJin Yao <yao.jin@linux.intel.com>
      Suggested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.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: Jin Yao <yao.jin@intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200324220711.6025-1-yao.jin@linux.intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      df7deb2c
    • Kemeng Shi's avatar
      perf symbols: Fix arm64 gap between kernel start and module end · 78886f3e
      Kemeng Shi authored
      During execution of command 'perf report' in my arm64 virtual machine,
      this error message is showed:
      
      failed to process sample
      
      __symbol__inc_addr_samples(860): ENOMEM! sym->name=__this_module,
          start=0x1477100, addr=0x147dbd8, end=0x80002000, func: 0
      
      The error is caused with path:
      cmd_report
       __cmd_report
        perf_session__process_events
         __perf_session__process_events
          ordered_events__flush
           __ordered_events__flush
            oe->deliver (ordered_events__deliver_event)
             perf_session__deliver_event
              machines__deliver_event
               perf_evlist__deliver_sample
                tool->sample (process_sample_event)
                 hist_entry_iter__add
                  iter->add_entry_cb(hist_iter__report_callback)
                   hist_entry__inc_addr_samples
                    symbol__inc_addr_samples
                     __symbol__inc_addr_samples
                      h = annotated_source__histogram(src, evidx) (NULL)
      
      annotated_source__histogram failed is caused with path:
      ...
       hist_entry__inc_addr_samples
        symbol__inc_addr_samples
         symbol__hists
          annotated_source__alloc_histograms
           src->histograms = calloc(nr_hists, sizeof_sym_hist) (failed)
      
      Calloc failed as the symbol__size(sym) is too huge. As show in error
      message: start=0x1477100, end=0x80002000, size of symbol is about 2G.
      
      This is the same problem as 'perf annotate: Fix s390 gap between kernel
      end and module start (b9c0a649)'. Perf gets symbol information from
      /proc/kallsyms in __dso__load_kallsyms. A part of symbol in /proc/kallsyms
      from my virtual machine is as follows:
       #cat /proc/kallsyms | sort
       ...
       ffff000001475080 d rpfilter_mt_reg      [ip6t_rpfilter]
       ffff000001475100 d $d   [ip6t_rpfilter]
       ffff000001475100 d __this_module        [ip6t_rpfilter]
       ffff000080080000 t _head
       ffff000080080000 T _text
       ffff000080080040 t pe_header
       ...
      
      Take line 'ffff000001475100 d __this_module [ip6t_rpfilter]' as example.
      The start and end of symbol are both set to ffff000001475100 in
      dso__load_all_kallsyms. Then symbols__fixup_end will set the end of symbol
      to next big address to ffff000001475100 in /proc/kallsyms, ffff000080080000
      in this example. Then sizeof of symbol will be about 2G and cause the
      problem.
      
      The start of module in my machine is
       ffff000000a62000 t $x   [dm_mod]
      
      The start of kernel in my machine is
       ffff000080080000 t _head
      
      There is a big gap between end of module and begin of kernel if a samll
      amount of memory is used by module. And the last symbol in module will
      have a large address range as caotaining the big gap.
      
      Give that the module and kernel text segment sequence may change in
      the future, fix this by limiting range of last symbol in module and kernel
      to 4K in arch arm64.
      Signed-off-by: default avatarKemeng Shi <shikemeng@huawei.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Hewenliang <hewenliang4@huawei.com>
      Cc: Hu Shiyuan <hushiyuan@huawei.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Nick Desaulniers <ndesaulniers@google.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Link: http://lore.kernel.org/lkml/33fd24c4-0d5a-9d93-9b62-dffa97c992ca@huawei.com
      [ refreshed the patch on current codebase, added string.h include as strchr() is used ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      78886f3e
    • Arnaldo Carvalho de Melo's avatar
      perf build-test: Honour JOBS to override detection of number of cores · 7b1642f2
      Arnaldo Carvalho de Melo authored
      When one does:
      
        $ make -C tools/perf build-test
      
      The makefile in tools/perf/tests/ will, just like the main one, detect
      how many cores are in the system and use it with -j.
      
      Sometimes we may need to override that, for instance, when using
      icecream or distcc to use multiple machines in the build process, then
      we need to, as with the main makefile, use:
      
        $ make JOBS=N -C tools/perf build-test
      
      Fix the tests makefile to honour that.
      Acked-by: default avatarJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: http://lore.kernel.org/lkml/20200330130301.GA31702@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      7b1642f2
    • Namhyung Kim's avatar
      perf script: Add --show-cgroup-events option · 160d4af9
      Namhyung Kim authored
      The --show-cgroup-events option is to print CGROUP events in the
      output like others.
      
      Committer testing:
      
        [root@seventh ~]# perf record --all-cgroups --namespaces /wb/cgtest
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.039 MB perf.data (487 samples) ]
        [root@seventh ~]# perf script --show-cgroup-events | grep PERF_RECORD_CGROUP -B2 -A2
                 swapper     0     0.000000: PERF_RECORD_CGROUP cgroup: 1 /
                    perf 12145 11200.440730:          1 cycles:  ffffffffb900d58b __intel_pmu_enable_all.constprop.0+0x3b (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                    perf 12145 11200.440733:          1 cycles:  ffffffffb900d58b __intel_pmu_enable_all.constprop.0+0x3b (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
        --
                  cgtest 12145 11200.440739:     193472 cycles:  ffffffffb90f6fbc commit_creds+0x1fc (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                  cgtest 12145 11200.440790:    2691608 cycles:      7fa2cb43019b _dl_sysdep_start+0x7cb (/usr/lib64/ld-2.29.so)
                  cgtest 12145 11200.440962: PERF_RECORD_CGROUP cgroup: 83 /sub
                  cgtest 12147 11200.441054:          1 cycles:  ffffffffb900d58b __intel_pmu_enable_all.constprop.0+0x3b (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                  cgtest 12147 11200.441057:          1 cycles:  ffffffffb900d58b __intel_pmu_enable_all.constprop.0+0x3b (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
        --
                  cgtest 12148 11200.441103:      10227 cycles:  ffffffffb9a0153d end_repeat_nmi+0x48 (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                  cgtest 12148 11200.441106:     273295 cycles:  ffffffffb99ecbc7 copy_page+0x7 (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                  cgtest 12147 11200.441133: PERF_RECORD_CGROUP cgroup: 88 /sub/cgrp1
                  cgtest 12147 11200.441143:    2788845 cycles:  ffffffffb94676c2 security_genfs_sid+0x102 (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
                  cgtest 12148 11200.441162: PERF_RECORD_CGROUP cgroup: 93 /sub/cgrp2
                  cgtest 12148 11200.441182:    2669546 cycles:            401020 _init+0x20 (/wb/cgtest)
                  cgtest 12149 11200.441247:          1 cycles:  ffffffffb900d58b __intel_pmu_enable_all.constprop.0+0x3b (/lib/modules/5.6.0-rc6-00008-gfe2413eefd7f/build/vmlinux)
        [root@seventh ~]#
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-10-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      160d4af9
    • Namhyung Kim's avatar
      perf top: Add --all-cgroups option · f382842f
      Namhyung Kim authored
      The --all-cgroups option is to enable cgroup profiling support.  It
      tells kernel to record CGROUP events in the ring buffer so that 'perf
      top' can identify task/cgroup association later.
      
      Committer testing:
      
      Use:
      
        # perf top --all-cgroups -s cgroup_id,cgroup,pid
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-9-namhyung@kernel.org
      Link: http://lore.kernel.org/lkml/20200402015249.3800462-1-namhyung@kernel.org
      [ Extracted the HAVE_FILE_HANDLE from the followup patch ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      f382842f
    • Namhyung Kim's avatar
      perf record: Add --all-cgroups option · 8fb4b679
      Namhyung Kim authored
      The --all-cgroups option is to enable cgroup profiling support.  It
      tells kernel to record CGROUP events in the ring buffer so that perf
      report can identify task/cgroup association later.
      
        [root@seventh ~]# perf record --all-cgroups --namespaces /wb/cgtest
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.042 MB perf.data (558 samples) ]
        [root@seventh ~]# perf report --stdio -s cgroup_id,cgroup,pid
        # To display the perf.data header info, please use --header/--header-only options.
        #
        #
        # Total Lost Samples: 0
        #
        # Samples: 558  of event 'cycles'
        # Event count (approx.): 458017341
        #
        # Overhead  cgroup id (dev/inode)  Cgroup          Pid:Command
        # ........  .....................  ..........  ...............
        #
            33.15%  4/0xeffffffb           /sub           9615:looper0
            32.83%  4/0xf00002f5           /sub/cgrp2     9620:looper2
            32.79%  4/0xf00002f4           /sub/cgrp1     9619:looper1
             0.35%  4/0xf00002f5           /sub/cgrp2     9618:cgtest
             0.34%  4/0xf00002f4           /sub/cgrp1     9617:cgtest
             0.32%  4/0xeffffffb           /              9615:looper0
             0.11%  4/0xeffffffb           /sub           9617:cgtest
             0.10%  4/0xeffffffb           /sub           9618:cgtest
      
        #
        # (Tip: Sample related events with: perf record -e '{cycles,instructions}:S')
        #
        [root@seventh ~]#
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-8-namhyung@kernel.org
      Link: http://lore.kernel.org/lkml/20200402015249.3800462-1-namhyung@kernel.org
      [ Extracted the HAVE_FILE_HANDLE from the followup patch ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      8fb4b679
    • Namhyung Kim's avatar
      perf record: Support synthesizing cgroup events · ab64069f
      Namhyung Kim authored
      Synthesize cgroup events by iterating cgroup filesystem directories.
      The cgroup event only saves the portion of cgroup path after the mount
      point and the cgroup id (which actually is a file handle).
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-7-namhyung@kernel.org
      Link: http://lore.kernel.org/lkml/20200402015249.3800462-1-namhyung@kernel.org
      [ Extracted the HAVE_FILE_HANDLE from the followup patch, added missing __maybe_unused ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ab64069f
    • Namhyung Kim's avatar
      perf report: Add 'cgroup' sort key · b629f3e9
      Namhyung Kim authored
      The cgroup sort key is to show cgroup membership of each task.
      Currently it shows full path in the cgroupfs (not relative to the root
      of cgroup namespace) since it'd be more intuitive IMHO.  Otherwise root
      cgroup in different namespaces will all show same name - "/".
      
      The cgroup sort key should come before cgroup_id otherwise
      sort_dimension__add() will match it to cgroup_id as it only matches with
      the given substring.
      
      For example it will look like following.  Note that record patch adding
      --all-cgroups patch will come later.
      
        $ perf record -a --namespace --all-cgroups  cgtest
        [ perf record: Woken up 1 times to write data ]
        [ perf record: Captured and wrote 0.208 MB perf.data (4090 samples) ]
      
        $ perf report -s cgroup_id,cgroup,pid
        ...
        # Overhead  cgroup id (dev/inode)  Cgroup          Pid:Command
        # ........  .....................  ..........  ...............
        #
            93.96%  0/0x0                  /                 0:swapper
             1.25%  3/0xeffffffb           /               278:looper0
             0.86%  3/0xf000015f           /sub/cgrp1      280:cgtest
             0.37%  3/0xf0000160           /sub/cgrp2      281:cgtest
             0.34%  3/0xf0000163           /sub/cgrp3      282:cgtest
             0.22%  3/0xeffffffb           /sub            278:looper0
             0.20%  3/0xeffffffb           /               280:cgtest
             0.15%  3/0xf0000163           /sub/cgrp3      285:looper3
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-6-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      b629f3e9
    • Namhyung Kim's avatar
      perf cgroup: Maintain cgroup hierarchy · d1277aa3
      Namhyung Kim authored
      Each cgroup is kept in the perf_env's cgroup_tree sorted by the cgroup
      id.  Hist entries have cgroup id can compare it directly and later it
      can be used to find a group name using this tree.
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-5-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d1277aa3
    • Namhyung Kim's avatar
      perf tools: Basic support for CGROUP event · ba78c1c5
      Namhyung Kim authored
      Implement basic functionality to support cgroup tracking.  Each cgroup
      can be identified by inode number which can be read from userspace too.
      The actual cgroup processing will come in the later patch.
      Reported-by: default avatarkernel test robot <rong.a.chen@intel.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      [ fix perf test failure on sampling parsing ]
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-4-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      ba78c1c5
    • Namhyung Kim's avatar
      perf tools: Add file-handle feature test · 49f550ea
      Namhyung Kim authored
      The file handle (FHANDLE) support is configurable so some systems might not
      have it.  So add a config feature item to check it on build time so that we
      don't add the cgroup tracking feature based on that.
      
      Committer notes:
      
      Had to make the test use the same construct as its later use in
      synthetic-events.c, in the next patch in this series. i.e. make it be:
      
      	struct {
      		struct file_handle fh;
      		uint64_t cgroup_id;
      	} handle;
      
      To cope with:
      
          CC       /tmp/build/perf/util/cloexec.o
        util/synthetic-events.c:428:22: error: field 'fh' with   CC       /tmp/build/perf/util/call-path.o
        variable sized type 'struct file_handle' not at the end of a struct or class is a GNU
              extension [-Werror,-Wgnu-variable-sized-type-not-at-end]
                        struct file_handle fh;
                                           ^
        1 error generated.
      
      Deal with this at some point, i.e. investigate if the right thing is to
      remove that -Wgnu-variable-sized-type-not-at-end from our CFLAGS, for
      now do the test the same way as it is used looks more sensible.
      Reported-by: default avatarArnaldo Carvalho de Melo <acme@kernel.org>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200402015249.3800462-1-namhyung@kernel.org
      [ split from a larger patch, removed blank line at EOF ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      49f550ea
    • Arnaldo Carvalho de Melo's avatar
      perf python: Include rwsem.c in the pythong biding · 460c3ed9
      Arnaldo Carvalho de Melo authored
      We'll need it for the cgroup patches, and its better to have it in a
      separate patch in case we need to later revert the cgroup patches.
      
      I.e. without this we have:
      
        [root@five ~]# perf test -v python
        19: 'import perf' in python                               :
        --- start ---
        test child forked, pid 148447
        Traceback (most recent call last):
          File "<stdin>", line 1, in <module>
        ImportError: /tmp/build/perf/python/perf.cpython-37m-x86_64-linux-gnu.so: undefined symbol: down_write
        test child finished with -1
        ---- end ----
        'import perf' in python: FAILED!
        [root@five ~]#
      
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Link: http://lore.kernel.org/lkml/20200403123606.GC23243@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      460c3ed9
  2. 02 Apr, 2020 1 commit
  3. 27 Mar, 2020 5 commits
    • Namhyung Kim's avatar
      perf/core: Add PERF_SAMPLE_CGROUP feature · 6546b19f
      Namhyung Kim authored
      The PERF_SAMPLE_CGROUP bit is to save (perf_event) cgroup information in
      the sample.  It will add a 64-bit id to identify current cgroup and it's
      the file handle in the cgroup file system.  Userspace should use this
      information with PERF_RECORD_CGROUP event to match which cgroup it
      belongs.
      
      I put it before PERF_SAMPLE_AUX for simplicity since it just needs a
      64-bit word.  But if we want bigger samples, I can work on that
      direction too.
      
      Committer testing:
      
        $ pahole perf_sample_data | grep -w cgroup -B5 -A5
        	/* --- cacheline 4 boundary (256 bytes) was 56 bytes ago --- */
        	struct perf_regs           regs_intr;            /*   312    16 */
        	/* --- cacheline 5 boundary (320 bytes) was 8 bytes ago --- */
        	u64                        stack_user_size;      /*   328     8 */
        	u64                        phys_addr;            /*   336     8 */
        	u64                        cgroup;               /*   344     8 */
      
        	/* size: 384, cachelines: 6, members: 22 */
        	/* padding: 32 */
        };
        $
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-3-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      6546b19f
    • Namhyung Kim's avatar
      perf/core: Add PERF_RECORD_CGROUP event · 96aaab68
      Namhyung Kim authored
      To support cgroup tracking, add CGROUP event to save a link between
      cgroup path and id number.  This is needed since cgroups can go away
      when userspace tries to read the cgroup info (from the id) later.
      
      The attr.cgroup bit was also added to enable cgroup tracking from
      userspace.
      
      This event will be generated when a new cgroup becomes active.
      Userspace might need to synthesize those events for existing cgroups.
      
      Committer testing:
      
      From the resulting kernel, using /sys/kernel/btf/vmlinux:
      
        $ pahole perf_event_attr | grep -w cgroup -B5 -A1
        	__u64                      write_backward:1;     /*    40:27  8 */
        	__u64                      namespaces:1;         /*    40:28  8 */
        	__u64                      ksymbol:1;            /*    40:29  8 */
        	__u64                      bpf_event:1;          /*    40:30  8 */
        	__u64                      aux_output:1;         /*    40:31  8 */
        	__u64                      cgroup:1;             /*    40:32  8 */
        	__u64                      __reserved_1:31;      /*    40:33  8 */
        $
      Reported-by: default avatarkbuild test robot <lkp@intel.com>
      Signed-off-by: default avatarNamhyung Kim <namhyung@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Acked-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
      Acked-by: default avatarTejun Heo <tj@kernel.org>
      [staticize perf_event_cgroup function]
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Johannes Weiner <hannes@cmpxchg.org>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Zefan Li <lizefan@huawei.com>
      Link: http://lore.kernel.org/lkml/20200325124536.2800725-2-namhyung@kernel.orgSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      96aaab68
    • Hagen Paul Pfeifer's avatar
      perf script: Introduce --deltatime option · 26567ed7
      Hagen Paul Pfeifer authored
      For some kind of analysis a deltatime output is more human friendly and
      reduce the cognitive load for further analysis.
      
      The following output demonstrate the new option "deltatime": calculate
      the time difference in relation to the previous event.
      
        $ perf script --deltatime
        test  2525 [001]     0.000000:            sdt_libev:ev_add: (5635e72a5ebd)
        test  2525 [001]     0.000091:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     1.000051: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
        test  2525 [001]     0.000685:            sdt_libev:ev_add: (5635e72a5ebd)
        test  2525 [001]     0.000048:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     1.000104: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
        test  2525 [001]     0.003895:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     0.996034: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
        test  2525 [001]     0.000058:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     1.000004: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
        test  2525 [001]     0.000064:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     0.999934: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
        test  2525 [001]     0.000056:  sdt_libev:epoll_wait_enter: (5635e72a76a9)
        test  2525 [001]     0.999930: sdt_libev:epoll_wait_return: (5635e72a772e) arg1=1
      
      Committer testing:
      
      So go from default output to --reltime and then this new --deltatime, to
      contrast the various timestamp presentation modes for a random perf.data file I
      had laying around:
      
        [root@five ~]# perf script --reltime | head
           perf 442394 [000]     0.000000:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000002:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000004:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000006:  128 cycles: ffffffff972415a1 perf_event_update_userpage+0x1 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000009: 2597 cycles: ffffffff97463785 cap_task_setscheduler+0x5 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000036:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000038:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000040:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000041:  224 cycles: ffffffff9700a53a perf_ibs_handle_irq+0x1da (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000044: 4439 cycles: ffffffff97120d85 put_prev_entity+0x45 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
        [root@five ~]# perf script --deltatime | head
           perf 442394 [000]     0.000000:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000002:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000001:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000001:  128 cycles: ffffffff972415a1 perf_event_update_userpage+0x1 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]     0.000002: 2597 cycles: ffffffff97463785 cap_task_setscheduler+0x5 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000027:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000002:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000001:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000001:  224 cycles: ffffffff9700a53a perf_ibs_handle_irq+0x1da (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]     0.000002: 4439 cycles: ffffffff97120d85 put_prev_entity+0x45 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
        [root@five ~]# perf script | head
           perf 442394 [000]  7600.157861:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]  7600.157864:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]  7600.157866:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]  7600.157867:  128 cycles: ffffffff972415a1 perf_event_update_userpage+0x1 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [000]  7600.157870: 2597 cycles: ffffffff97463785 cap_task_setscheduler+0x5 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]  7600.157897:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]  7600.157900:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]  7600.157901:   16 cycles: ffffffff9706e544 native_write_msr+0x4 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]  7600.157903:  224 cycles: ffffffff9700a53a perf_ibs_handle_irq+0x1da (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
           perf 442394 [001]  7600.157906: 4439 cycles: ffffffff97120d85 put_prev_entity+0x45 (/usr/lib/debug/lib/modules/5.5.10-200.fc31.x86_64/vmlinux)
        [root@five ~]#
      
      Andi suggested we better implement it as a new field, i.e. -F deltatime, like:
      
        [root@five ~]# perf script -F deltatime
        Invalid field requested.
      
         Usage: perf script [<options>]
            or: perf script [<options>] record <script> [<record-options>] <command>
            or: perf script [<options>] report <script> [script-args]
            or: perf script [<options>] <script> [<record-options>] <command>
            or: perf script [<options>] <top-script> [script-args]
      
            -F, --fields <str>    comma separated output fields prepend with 'type:'. +field to add and -field to remove.Valid types: hw,sw,trace,raw,synth. Fields: comm,tid,pid,time,cpu,event,trace,ip,sym,dso,addr,symoff,srcline,period,iregs,uregs,brstack,brstacksym,flags,bpf-output,brstackinsn,brstackoff,callindent,insn,insnlen,synth,phys_addr,metric,misc,ipc
        [root@five ~]#
      
      I.e. we have -F for maximum flexibility:
      
        [root@five ~]# perf script -F comm,pid,cpu,time | head
                  perf 442394 [000]  7600.157861:
                  perf 442394 [000]  7600.157864:
                  perf 442394 [000]  7600.157866:
                  perf 442394 [000]  7600.157867:
                  perf 442394 [000]  7600.157870:
                  perf 442394 [001]  7600.157897:
                  perf 442394 [001]  7600.157900:
                  perf 442394 [001]  7600.157901:
                  perf 442394 [001]  7600.157903:
                  perf 442394 [001]  7600.157906:
        [root@five ~]#
      
      But since we already have --reltime, having --deltatime, documented one after
      the other is sensible.
      Signed-off-by: default avatarHagen Paul Pfeifer <hagen@jauu.net>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Jiri Olsa <jolsa@kernel.org>
      Link: http://lore.kernel.org/lkml/20200204173709.489161-1-hagen@jauu.net
      [ Added 'perf script' man page entry for --deltatime ]
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      26567ed7
    • Adrian Hunter's avatar
      perf test x86: Add CET instructions to the new instructions test · 26cec748
      Adrian Hunter authored
      Add to the "x86 instruction decoder - new instructions" test the
      following instructions:
      
      	incsspd
      	incsspq
      	rdsspd
      	rdsspq
      	saveprevssp
      	rstorssp
      	wrssd
      	wrssq
      	wrussd
      	wrussq
      	setssbsy
      	clrssbsy
      	endbr32
      	endbr64
      
      And the "notrack" prefix for indirect calls and jumps.
      
      For information about the instructions, refer Intel Control-flow
      Enforcement Technology Specification May 2019 (334525-003).
      
      Committer testing:
      
        $ perf test instr
        67: x86 instruction decoder - new instructions            : Ok
        $
      
      Then use verbose mode and check one of those new instructions:
      
        $ perf test -v instr |& grep saveprevssp
        Decoded ok: f3 0f 01 ea          	saveprevssp
        Decoded ok: f3 0f 01 ea          	saveprevssp
        $
      Signed-off-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Masami Hiramatsu <mhiramat@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi v. Shankar <ravi.v.shankar@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Tony Luck <tony.luck@intel.com>
      Cc: x86@kernel.org
      Link: http://lore.kernel.org/lkml/20200204171425.28073-3-yu-cheng.yu@intel.comSigned-off-by: default avatarYu-cheng Yu <yu-cheng.yu@intel.com>
      Signed-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      26cec748
    • Yu-cheng Yu's avatar
      x86/insn: Add Control-flow Enforcement (CET) instructions to the opcode map · 315a4af8
      Yu-cheng Yu authored
      Add the following CET instructions to the opcode map:
      
        INCSSP:
            Increment Shadow Stack pointer (SSP).
      
        RDSSP:
            Read SSP into a GPR.
      
        SAVEPREVSSP:
            Use "previous ssp" token at top of current Shadow Stack (SHSTK) to
            create a "restore token" on the previous (outgoing) SHSTK.
      
        RSTORSSP:
            Restore from a "restore token" to SSP.
      
        WRSS:
            Write to kernel-mode SHSTK (kernel-mode instruction).
      
        WRUSS:
            Write to user-mode SHSTK (kernel-mode instruction).
      
        SETSSBSY:
            Verify the "supervisor token" pointed by MSR_IA32_PL0_SSP, set the
            token busy, and set then Shadow Stack pointer(SSP) to the value of
            MSR_IA32_PL0_SSP.
      
        CLRSSBSY:
            Verify the "supervisor token" and clear its busy bit.
      
        ENDBR64/ENDBR32:
            Mark a valid 64/32 bit control transfer endpoint.
      
      Detailed information of CET instructions can be found in Intel Software
      Developer's Manual.
      Signed-off-by: default avatarYu-cheng Yu <yu-cheng.yu@intel.com>
      Reviewed-by: default avatarAdrian Hunter <adrian.hunter@intel.com>
      Reviewed-by: default avatarTony Luck <tony.luck@intel.com>
      Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Borislav Petkov <bp@alien8.de>
      Cc: Dave Hansen <dave.hansen@linux.intel.com>
      Cc: H. Peter Anvin <hpa@zytor.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Ravi v. Shankar <ravi.v.shankar@intel.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: x86@kernel.org
      Link: http://lore.kernel.org/lkml/20200204171425.28073-2-yu-cheng.yu@intel.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      315a4af8
  4. 26 Mar, 2020 2 commits
  5. 25 Mar, 2020 1 commit
  6. 24 Mar, 2020 9 commits
    • Ravi Bangoria's avatar
      perf dso: Fix dso comparison · 0d33b343
      Ravi Bangoria authored
      Perf gets dso details from two different sources. 1st, from builid
      headers in perf.data and 2nd from MMAP2 samples. Dso from buildid
      header does not have dso_id detail. And dso from MMAP2 samples does
      not have buildid information. If detail of the same dso is present
      at both the places, filename is common.
      
      Previously, __dsos__findnew_link_by_longname_id() used to compare only
      long or short names, but Commit 0e3149f8 ("perf dso: Move dso_id
      from 'struct map' to 'struct dso'") also added a dso_id comparison.
      Because of that, now perf is creating two different dso objects of the
      same file, one from buildid header (with dso_id but without buildid)
      and second from MMAP2 sample (with buildid but without dso_id).
      
      This is causing issues with archive, buildid-list etc subcommands. Fix
      this by comparing dso_id only when it's present. And incase dso is
      present in 'dsos' list without dso_id, inject dso_id detail as well.
      
      Before:
      
        $ sudo ./perf buildid-list -H
        0000000000000000000000000000000000000000 /usr/bin/ls
        0000000000000000000000000000000000000000 /usr/lib64/ld-2.30.so
        0000000000000000000000000000000000000000 /usr/lib64/libc-2.30.so
      
        $ ./perf archive
        perf archive: no build-ids found
      
      After:
      
        $ ./perf buildid-list -H
        b6b1291d0cead046ed0fa5734037fa87a579adee /usr/bin/ls
        641f0c90cfa15779352f12c0ec3c7a2b2b6f41e8 /usr/lib64/ld-2.30.so
        675ace3ca07a0b863df01f461a7b0984c65c8b37 /usr/lib64/libc-2.30.so
      
        $ ./perf archive
        Now please run:
      
        $ tar xvf perf.data.tar.bz2 -C ~/.debug
      
        wherever you need to run 'perf report' on.
      
      Committer notes:
      
      Renamed is_empty_dso_id() to dso_id__empty() and inject_dso_id() to
      dso__inject_id() to keep namespacing consistent.
      
      Fixes: 0e3149f8 ("perf dso: Move dso_id from 'struct map' to 'struct dso'")
      Reported-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Signed-off-by: default avatarRavi Bangoria <ravi.bangoria@linux.ibm.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Link: http://lore.kernel.org/lkml/20200324042424.68366-1-ravi.bangoria@linux.ibm.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      0d33b343
    • Christophe JAILLET's avatar
      perf cpumap: Fix snprintf overflow check · d74b181a
      Christophe JAILLET authored
      'snprintf' returns the number of characters which would be generated for
      the given input.
      
      If the returned value is *greater than* or equal to the buffer size, it
      means that the output has been truncated.
      
      Fix the overflow test accordingly.
      
      Fixes: 7780c25b ("perf tools: Allow ability to map cpus to nodes easily")
      Fixes: 92a7e127 ("perf cpumap: Add cpu__max_present_cpu()")
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Suggested-by: default avatarDavid Laight <David.Laight@ACULAB.COM>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Don Zickus <dzickus@redhat.com>
      Cc: He Zhe <zhe.he@windriver.com>
      Cc: Jan Stancek <jstancek@redhat.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Kan Liang <kan.liang@linux.intel.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: kernel-janitors@vger.kernel.org
      Link: http://lore.kernel.org/lkml/20200324070319.10901-1-christophe.jaillet@wanadoo.frSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d74b181a
    • John Garry's avatar
      perf test: Test pmu-events aliases · 956a7835
      John Garry authored
      Add creating event aliases to the pmu-events test.
      
      So currently we verify that the generated pmu-events.c is as expected for
      some test events. Now test that we generate aliases as expected for those
      events during normal operation.
      
      For that, we cycle through each HW PMU in the system, and use the test
      events to create aliases, and verify those against known, expected values.
      
      For core PMUs, we should create an alias for every event in
      test_cpu_events[].
      
      However, for uncore PMUs, they need to be matched by the pmu_event.pmu
      member, so use test_uncore_events[]; so check the match beforehand with
      pmu_uncore_alias_match().
      
      A sample run is as follows for my x86 machine:
      
        john@linux-3c19:~/linux> tools/perf/perf test -vv 10
        10: PMU events                                            :
        --- start ---
      
        ...
      
        testing PMU uncore_arb aliases: no events to match
        testing PMU cstate_pkg aliases: no events to match
        skipping testing PMU breakpoint
        testing aliases PMU uncore_cbox_1: matched event unc_cbo_xsnp_response.miss_eviction
        testing PMU uncore_cbox_1 aliases: pass
        testing PMU power aliases: no events to match
        testing aliases PMU cpu: matched event bp_l1_btb_correct
        testing aliases PMU cpu: matched event bp_l2_btb_correct
        testing aliases PMU cpu: matched event segment_reg_loads.any
        testing aliases PMU cpu: matched event dispatch_blocked.any
        testing aliases PMU cpu: matched event eist_trans
        testing PMU cpu aliases: pass
        testing PMU intel_pt aliases: no events to match
        skipping testing PMU software
        skipping testing PMU intel_bts
        testing PMU uncore_imc aliases: no events to match
        testing aliases PMU uncore_cbox_0: matched event unc_cbo_xsnp_response.miss_eviction
        testing PMU uncore_cbox_0 aliases: pass
        testing PMU cstate_core aliases: no events to match
        skipping testing PMU tracepoint
        testing PMU msr aliases: no events to match
        test child finished with 0
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.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: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-8-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      956a7835
    • John Garry's avatar
      perf pmu: Make pmu_uncore_alias_match() public · 5b9a5000
      John Garry authored
      The perf pmu-events test will want to use pmu_uncore_alias_match(), so
      make it public.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-7-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      5b9a5000
    • John Garry's avatar
      perf pmu: Add is_pmu_core() · d504fae9
      John Garry authored
      Add a function to decide whether a PMU is a core PMU.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-6-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d504fae9
    • John Garry's avatar
      perf test: Add pmu-events test · a6c925fd
      John Garry authored
      The initial test will verify that the test tables in generated pmu-events.c
      match against known, expected values.
      
      For known events added in pmu-events/arch/test, we need to add an entry
      in test_cpu_aliases_events[] or test_uncore_events[].
      
      A sample run is as follows for x86:
      
        john@linux-3c19:~/linux> tools/perf/perf test -vv 10
        10: PMU event aliases                                     :
        --- start ---
        test child forked, pid 5316
        testing event table bp_l1_btb_correct: pass
        testing event table bp_l2_btb_correct: pass
        testing event table segment_reg_loads.any: pass
        testing event table dispatch_blocked.any: pass
        testing event table eist_trans: pass
        testing event table uncore_hisi_ddrc.flux_wcmd: pass
        testing event table unc_cbo_xsnp_response.miss_eviction: pass
        test child finished with 0
        ---- end ----
        PMU event aliases: Ok
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Tested-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      [ Fixup test_cpu_events[] and test_uncore_events[] sentinels to initialize one of its members to NULL, fixing the build in older compilers ]
      Link: http://lore.kernel.org/lkml/1584442939-8911-5-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      a6c925fd
    • John Garry's avatar
      perf pmu: Refactor pmu_add_cpu_aliases() · e45ad701
      John Garry authored
      Create pmu_add_cpu_aliases_map() from pmu_add_cpu_aliases(), so the caller
      can pass the map; the pmu-events test would use this since there would
      be no CPUID matching to a mapfile there.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-4-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      e45ad701
    • John Garry's avatar
      perf jevents: Support test events folder · d8447808
      John Garry authored
      With the goal of supporting pmu-events test case, introduce support for
      a test events folder.
      
      These test events can be used for testing generation of pmu-event tables
      and alias creation for any arch.
      
      When running the pmu-events test case, these test events will be used as
      the platform-agnostic events, so aliases can be created per-PMU and
      validated against known expected values.
      
      To support the test events, add a "testcpu" entry in pmu_events_map[].
      The pmu-events test will be able to lookup the events map for "testcpu",
      to verify the generated tables against expected values.
      
      The resultant generated pmu-events.c will now look like the following:
      
        struct pmu_event pme_ampere_emag[] = {
        {
        	.name = "ldrex_spec",
        	.event = "event=0x6c",
        	.desc = "Exclusive operation spe...",
        	.topic = "intrinsic",
        	.long_desc = "Exclusive operation ...",
        },
        ...
        };
      
        struct pmu_event pme_test_cpu[] = {
        {
        	.name = "uncore_hisi_ddrc.flux_wcmd",
        	.event = "event=0x2",
        	.desc = "DDRC write commands. Unit: hisi_sccl,ddrc ",
        	.topic = "uncore",
        	.long_desc = "DDRC write commands",
        	.pmu = "hisi_sccl,ddrc",
        },
        {
        	.name = "unc_cbo_xsnp_response.miss_eviction",
        	.event = "umask=0x81,event=0x22",
        	.desc = "Unit: uncore_cbox A cross-core snoop resulted ...",
        	.topic = "uncore",
        	.long_desc = "A cross-core snoop resulted from L3 ...",
        	.pmu = "uncore_cbox",
        },
        {
        	.name = "eist_trans",
        	.event = "umask=0x0,period=200000,event=0x3a",
        	.desc = "Number of Enhanced Intel SpeedStep(R) ...",
        	.topic = "other",
        },
        {
        	.name = 0,
        },
        };
      
        struct pmu_events_map pmu_events_map[] = {
        ...
        {
        	.cpuid = "0x00000000500f0000",
        	.version = "v1",
        	.type = "core",
        	.table = pme_ampere_emag
        },
        ...
        {
        	.cpuid = "testcpu",
        	.version = "v1",
        	.type = "core",
        	.table = pme_test_cpu,
        },
        {
        	.cpuid = 0,
        	.version = 0,
        	.type = 0,
        	.table = 0,
        },
        };
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-3-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      d8447808
    • John Garry's avatar
      perf jevents: Add some test events · c52db67a
      John Garry authored
      Add some test PMU events. The events are randomly chosen from x86 and
      arm64 JSONs. The events include CPU and uncore events.
      Signed-off-by: default avatarJohn Garry <john.garry@huawei.com>
      Acked-by: default avatarJiri Olsa <jolsa@redhat.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: James Clark <james.clark@arm.com>
      Cc: Joakim Zhang <qiangqing.zhang@nxp.com>
      Cc: Mark Rutland <mark.rutland@arm.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Will Deacon <will@kernel.org>
      Cc: linuxarm@huawei.com
      Link: http://lore.kernel.org/lkml/1584442939-8911-2-git-send-email-john.garry@huawei.comSigned-off-by: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
      c52db67a