Skip to content
  • Linus Torvalds's avatar
    Merge branch 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · e71c2c1e
    Linus Torvalds authored
    Pull perf updates from Ingo Molnar:
     "Main kernel side changes:
    
       - Big reorganization of the x86 perf support code.  The old code grew
         organically deep inside arch/x86/kernel/cpu/perf* and its naming
         became somewhat messy.
    
         The new location is under arch/x86/events/, using the following
         cleaner hierarchy of source code files:
    
           perf/x86: Move perf_event.c .................. => x86/events/core.c
           perf/x86: Move perf_event_amd.c .............. => x86/events/amd/core.c
           perf/x86: Move perf_event_amd_ibs.c .......... => x86/events/amd/ibs.c
           perf/x86: Move perf_event_amd_iommu.[ch] ..... => x86/events/amd/iommu.[ch]
           perf/x86: Move perf_event_amd_uncore.c ....... => x86/events/amd/uncore.c
           perf/x86: Move perf_event_intel_bts.c ........ => x86/events/intel/bts.c
           perf/x86: Move perf_event_intel.c ............ => x86/events/intel/core.c
           perf/x86: Move perf_event_intel_cqm.c ........ => x86/events/intel/cqm.c
           perf/x86: Move perf_event_intel_cstate.c ..... => x86/events/intel/cstate.c
           perf/x86: Move perf_event_intel_ds.c ......... => x86/events/intel/ds.c
           perf/x86: Move perf_event_intel_lbr.c ........ => x86/events/intel/lbr.c
           perf/x86: Move perf_event_intel_pt.[ch] ...... => x86/events/intel/pt.[ch]
           perf/x86: Move perf_event_intel_rapl.c ....... => x86/events/intel/rapl.c
           perf/x86: Move perf_event_intel_uncore.[ch] .. => x86/events/intel/uncore.[ch]
           perf/x86: Move perf_event_intel_uncore_nhmex.c => x86/events/intel/uncore_nmhex.c
           perf/x86: Move perf_event_intel_uncore_snb.c   => x86/events/intel/uncore_snb.c
           perf/x86: Move perf_event_intel_uncore_snbep.c => x86/events/intel/uncore_snbep.c
           perf/x86: Move perf_event_knc.c .............. => x86/events/intel/knc.c
           perf/x86: Move perf_event_p4.c ............... => x86/events/intel/p4.c
           perf/x86: Move perf_event_p6.c ............... => x86/events/intel/p6.c
           perf/x86: Move perf_event_msr.c .............. => x86/events/msr.c
    
         (Borislav Petkov)
    
       - Update various x86 PMU constraint and hw support details (Stephane
         Eranian)
    
       - Optimize kprobes for BPF execution (Martin KaFai Lau)
    
       - Rewrite, refactor and fix the Intel uncore PMU driver code (Thomas
         Gleixner)
    
       - Rewrite, refactor and fix the Intel RAPL PMU code (Thomas Gleixner)
    
       - Various fixes and smaller cleanups.
    
      There are lots of perf tooling updates as well.  A few highlights:
    
      perf report/top:
    
         - Hierarchy histogram mode for 'perf top' and 'perf report',
           showing multiple levels, one per --sort entry: (Namhyung Kim)
    
           On a mostly idle system:
    
             # perf top --hierarchy -s comm,dso
    
           Then expand some levels and use 'P' to take a snapshot:
    
             # cat perf.hist.0
             -  92.32%         perf
                   58.20%         perf
                   22.29%         libc-2.22.so
                    5.97%         [kernel]
                    4.18%         libelf-0.165.so
                    1.69%         [unknown]
             -   4.71%         qemu-system-x86
                    3.10%         [kernel]
                    1.60%         qemu-system-x86_64 (deleted)
             +   2.97%         swapper
             #
    
         - Add 'L' hotkey to dynamicly set the percent threshold for
           histogram entries and callchains, i.e.  dynamicly do what the
           --percent-limit command line option to 'top' and 'report' does.
           (Namhyung Kim)
    
      perf mem:
    
         - Allow specifying events via -e in 'perf mem record', also listing
           what events can be specified via 'perf mem record -e list' (Jiri
           Olsa)
    
      perf record:
    
         - Add 'perf record' --all-user/--all-kernel options, so that one
           can tell that all the events in the command line should be
           restricted to the user or kernel levels (Jiri Olsa), i.e.:
    
             perf record -e cycles:u,instructions:u
    
           is equivalent to:
    
             perf record --all-user -e cycles,instructions
    
         - Make 'perf record' collect CPU cache info in the perf.data file header:
    
             $ perf record usleep 1
             [ perf record: Woken up 1 times to write data ]
             [ perf record: Captured and wrote 0.017 MB perf.data (7 samples) ]
             $ perf report --header-only -I | tail -10 | head -8
             # CPU cache info:
             #  L1 Data                 32K [0-1]
             #  L1 Instruction          32K [0-1]
             #  L1 Data                 32K [2-3]
             #  L1 Instruction          32K [2-3]
             #  L2 Unified             256K [0-1]
             #  L2 Unified             256K [2-3]
             #  L3 Unified            4096K [0-3]
    
           Will be used in 'perf c2c' and eventually in 'perf diff' to
           allow, for instance running the same workload in multiple
           machines and then when using 'diff' show the hardware difference.
           (Jiri Olsa)
    
         - Improved support for Java, using the JVMTI agent library to do
           jitdumps that then will be inserted in synthesized
           PERF_RECORD_MMAP2 events via 'perf inject' pointed to synthesized
           ELF files stored in ~/.debug and keyed with build-ids, to allow
           symbol resolution and even annotation with source line info, see
           the changeset comments to see how to use it (Stephane Eranian)
    
      perf script/trace:
    
         - Decode data_src values (e.g.  perf.data files generated by 'perf
           mem record') in 'perf script': (Jiri Olsa)
    
             # perf script
               perf 693 [1] 4.088652: 1 cpu/mem-loads,ldlat=30/P: ffff88007d0b0f40 68100142 L1 hit|SNP None|TLB L1 or L2 hit|LCK No <SNIP>
                                                                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         - Improve support to 'data_src', 'weight' and 'addr' fields in
           'perf script' (Jiri Olsa)
    
         - Handle empty print fmts in 'perf script -s' i.e. when running
           python or perl scripts (Taeung Song)
    
      perf stat:
    
         - 'perf stat' now shows shadow metrics (insn per cycle, etc) in
           interval mode too.  E.g:
    
             # perf stat -I 1000 -e instructions,cycles sleep 1
             #         time   counts unit events
                1.000215928  519,620      instructions     #  0.69 insn per cycle
                1.000215928  752,003      cycles
             <SNIP>
    
         - Port 'perf kvm stat' to PowerPC (Hemant Kumar)
    
         - Implement CSV metrics output in 'perf stat' (Andi Kleen)
    
      perf BPF support:
    
         - Support converting data from bpf events in 'perf data' (Wang Nan)
    
         - Print bpf-output events in 'perf script': (Wang Nan).
    
             # perf record -e bpf-output/no-inherit,name=evt/ -e ./test_bpf_output_3.c/map:channel.event=evt/ usleep 1000
             # perf script
                usleep  4882 21384.532523:   evt:  ffffffff810e97d1 sys_nanosleep ([kernel.kallsyms])
                 BPF output: 0000: 52 61 69 73 65 20 61 20  Raise a
                             0008: 42 50 46 20 65 76 65 6e  BPF even
                             0010: 74 21 00 00              t!..
                 BPF string: "Raise a BPF event!"
             #
    
         - Add API to set values of map entries in a BPF object, be it
           individual map slots or ranges (Wang Nan)
    
         - Introduce support for the 'bpf-output' event (Wang Nan)
    
         - Add glue to read perf events in a BPF program (Wang Nan)
    
         - Improve support for bpf-output events in 'perf trace' (Wang Nan)
    
      ... and tons of other changes as well - see the shortlog and git log
      for details!"
    
    * 'perf-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (342 commits)
      perf stat: Add --metric-only support for -A
      perf stat: Implement --metric-only mode
      perf stat: Document CSV format in manpage
      perf hists browser: Check sort keys before hot key actions
      perf hists browser: Allow thread filtering for comm sort key
      perf tools: Add sort__has_comm variable
      perf tools: Recalc total periods using top-level entries in hierarchy
      perf tools: Remove nr_sort_keys field
      perf hists browser: Cleanup hist_browser__fprintf_hierarchy_entry()
      perf tools: Remove hist_entry->fmt field
      perf tools: Fix command line filters in hierarchy mode
      perf tools: Add more sort entry check functions
      perf tools: Fix hist_entry__filter() for hierarchy
      perf jitdump: Build only on supported archs
      tools lib traceevent: Add '~' operation within arg_num_eval()
      perf tools: Omit unnecessary cast in perf_pmu__parse_scale
      perf tools: Pass perf_hpp_list all the way through setup_sort_list
      perf tools: Fix perf script python database export crash
      perf jitdump: DWARF is also needed
      perf bench mem: Prepare the x86-64 build for upstream memcpy_mcsafe() changes
      ...
    e71c2c1e