[RFC GIT PULL] perf tooling updates for v5.2

From: Ingo Molnar
Date: Sat May 18 2019 - 17:01:00 EST


Linus,

Please pull the latest perf-core-for-linus git tree from:

git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf-core-for-linus

# HEAD: 62e1c09418fc16d27720b128275cac61367e2c1b Merge tag 'perf-core-for-mingo-5.2-20190517' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core

I have marked this RFC too, because Arnaldo was on vaction until a few
days ago, so these changes were both delayed and committed late.

But perf tooling has been exceptionally good in test coverage and in
handling of any regressions quickly, and it's also largely decoupled from
the kernel proper and these changes don't change the kernel side, so I
think an exception might be warranted.

Should you decide to pull it, here's the tooling changes in the tree:

* perf.data:

Alexey Budankov:

- Streaming compression of perf ring buffer into PERF_RECORD_COMPRESSED
user space records, resulting in ~3-5x perf.data file size reduction
on variety of tested workloads what saves storage space on larger
server systems where perf.data size can easily reach several tens or
even hundreds of GiBs, especially when profiling with DWARF-based
stacks and tracing of context switches.

* perf record:

Arnaldo Carvalho de Melo

- Improve -user-regs/intr-regs suggestions to overcome errors.

* perf annotate:

Jin Yao:

- Remove hist__account_cycles() from callback, speeding up branch processing
(perf record -b).

* perf stat:

- Add a 'percore' event qualifier, e.g.: -e cpu/event=0,umask=0x3,percore=1/,
that sums up the event counts for both hardware threads in a core.

We can already do this with --per-core, but it's often useful to do
this together with other metrics that are collected per hardware thread.

I.e. now its possible to do this per-event, and have it mixed with other
events not aggregated by core.

* arm64:

Florian Fainelli:

- Map Brahma-B53 CPUID to cortex-a53 events.

- Add Cortex-A57 and Cortex-A72 events.

* csky:

Mao Han:

- Add DWARF register mappings for libdw, allowing --call-graph=dwarf to work
on the C-SKY arch.

* x86:

Andi Kleen/Kan Liang:

- Add support for recording and printing XMM registers, available, for
instance, on Icelake.

Kan Liang:

- Add uncore_upi (Intel's "Ultra Path Interconnect" events) JSON support.
UPI replaced the Intel QuickPath Interconnect (QPI) in Xeon Skylake-SP.

* Intel PT:

Adrian Hunter

- Fix instructions sampling rate.

- Timestamp fixes.

- Improve exported-sql-viewer GUI, allowing, for instance, to copy'n'paste
the trees, useful for e-mailing.

Thanks,

Ingo

------------------>
Adrian Hunter (9):
perf scripts python: exported-sql-viewer.py: Move view creation
perf scripts python: exported-sql-viewer.py: Fix error when shrinking / enlarging font
perf scripts python: exported-sql-viewer.py: Add tree level
perf scripts python: exported-sql-viewer.py: Add copy to clipboard
perf scripts python: exported-sql-viewer.py: Add context menu
perf scripts python: exported-sql-viewer.py: Add 'About' dialog box
perf intel-pt: Fix instructions sampling rate
perf intel-pt: Fix improved sample timestamp
perf intel-pt: Fix sample timestamp wrt non-taken branches

Alexey Budankov (11):
perf session: Define 'bytes_transferred' and 'bytes_compressed' metrics
perf record: Implement COMPRESSED event record and its attributes
perf mmap: Implement dedicated memory buffer for data compression
perf tools: Introduce Zstd streaming based compression API
perf record: Implement compression for serial trace streaming
perf record: Implement compression for AIO trace streaming
perf report: Add stub processing of compressed events for -D
perf record: Implement -z,--compression_level[=<n>] option
perf report: Implement perf.data record decompression
perf inject: Enable COMPRESSED record decompression
perf tests: Implement Zstd comp/decomp integration test

Andi Kleen (1):
perf tools x86: Add support for recording and printing XMM registers

Arnaldo Carvalho de Melo (8):
tools arch: Update arch/x86/lib/memcpy_64.S copy used in 'perf bench mem memcpy'
tools arch uapi: Sync the x86 kvm.h copy
tools x86 uapi asm: Sync the pt_regs.h copy with the kernel sources
tools pci: Do not delete pcitest.sh in 'make clean'
perf record: Fix suggestion to get list of registers usable with --user-regs and --intr-regs
perf parse-regs: Improve error output when faced with unknown register name
perf build tests: Add NO_LIBZSTD=1 to make_minimal
perf test zstd: Fixup verbose mode output

Colin Ian King (1):
perf test: Fix spelling mistake "leadking" -> "leaking"

Donald Yandt (1):
perf machine: Null-terminate version char array upon fgets(/proc/version) error

Florian Fainelli (3):
perf vendor events arm64: Remove [[:xdigit:]] wildcard
perf vendor events arm64: Map Brahma-B53 CPUID to cortex-a53 events
perf vendor events arm64: Add Cortex-A57 and Cortex-A72 events

Jin Yao (4):
perf annotate: Remove hist__account_cycles() from callback
perf tools: Add a 'percore' event qualifier
perf stat: Factor out aggregate counts printing
perf stat: Support 'percore' event qualifier

Jiri Olsa (1):
perf tools: Speed up report for perf compiled with linwunwind

Kan Liang (4):
perf vendor events intel: Add uncore_upi JSON support
perf parse-regs: Split parse_regs
perf parse-regs: Add generic support for arch__intr/user_reg_mask()
perf regs x86: Add X86 specific arch__intr_reg_mask()

Mao Han (1):
csky: Add support for libdw

Thomas Richter (1):
perf docs: Add description for stderr

Tzvetomir Stoyanov (27):
tools lib traceevent: Remove hard coded install paths from pkg-config file
tools lib traceevent: Introduce man pages
tools lib traceevent: Add support for man pages with multiple names
tools lib traceevent: Man pages for tep_handler related APIs
tools lib traceevent: Man page for header_page APIs
tools lib traceevent: Man page for get/set cpus APIs
tools lib traceevent: Man page for file endian APIs
tools lib traceevent: Man page for host endian APIs
tools lib traceevent: Man page for page size APIs
tools lib traceevent: Man page for tep_strerror()
tools lib traceevent: Man pages for event handler APIs
tools lib traceevent: Man pages for function related libtraceevent APIs
tools lib traceevent: Man pages for registering print function
tools lib traceevent: Man page for tep_read_number()
tools lib traceevent: Man pages for event find APIs
tools lib traceevent: Man page for list events APIs
tools lib traceevent: Man pages for libtraceevent event get APIs
tools lib traceevent: Man pages for find field APIs
tools lib traceevent: Man pages for get field value APIs
tools lib traceevent: Man pages for print field APIs
tools lib traceevent: Man page for tep_read_number_field()
tools lib traceevent: Man pages for event fields APIs
tools lib traceevent: Man pages for event filter APIs
tools lib traceevent: Man pages for parse event APIs
tools lib traceevent: Man page for tep_parse_header_page()
tools lib traceevent: Man pages for APIs used to extract common fields from a record
tools lib traceevent: Man pages for trace sequences APIs

Zenghui Yu (1):
perf jevents: Remove unused variable


tools/arch/x86/include/uapi/asm/kvm.h | 1 +
tools/arch/x86/include/uapi/asm/perf_regs.h | 23 +-
tools/arch/x86/lib/memcpy_64.S | 3 +-
tools/lib/traceevent/Documentation/Makefile | 207 +++++++++++++
tools/lib/traceevent/Documentation/asciidoc.conf | 120 ++++++++
.../Documentation/libtraceevent-commands.txt | 153 ++++++++++
.../Documentation/libtraceevent-cpus.txt | 77 +++++
.../Documentation/libtraceevent-endian_read.txt | 78 +++++
.../Documentation/libtraceevent-event_find.txt | 103 +++++++
.../Documentation/libtraceevent-event_get.txt | 99 ++++++
.../Documentation/libtraceevent-event_list.txt | 122 ++++++++
.../Documentation/libtraceevent-field_find.txt | 118 +++++++
.../Documentation/libtraceevent-field_get_val.txt | 122 ++++++++
.../Documentation/libtraceevent-field_print.txt | 126 ++++++++
.../Documentation/libtraceevent-field_read.txt | 81 +++++
.../Documentation/libtraceevent-fields.txt | 105 +++++++
.../Documentation/libtraceevent-file_endian.txt | 91 ++++++
.../Documentation/libtraceevent-filter.txt | 209 +++++++++++++
.../Documentation/libtraceevent-func_apis.txt | 183 +++++++++++
.../Documentation/libtraceevent-func_find.txt | 88 ++++++
.../Documentation/libtraceevent-handle.txt | 101 ++++++
.../Documentation/libtraceevent-header_page.txt | 102 +++++++
.../Documentation/libtraceevent-host_endian.txt | 104 +++++++
.../Documentation/libtraceevent-long_size.txt | 78 +++++
.../Documentation/libtraceevent-page_size.txt | 82 +++++
.../Documentation/libtraceevent-parse_event.txt | 90 ++++++
.../Documentation/libtraceevent-parse_head.txt | 82 +++++
.../Documentation/libtraceevent-record_parse.txt | 137 +++++++++
.../libtraceevent-reg_event_handler.txt | 156 ++++++++++
.../Documentation/libtraceevent-reg_print_func.txt | 155 ++++++++++
.../Documentation/libtraceevent-set_flag.txt | 104 +++++++
.../Documentation/libtraceevent-strerror.txt | 85 ++++++
.../Documentation/libtraceevent-tseq.txt | 158 ++++++++++
.../lib/traceevent/Documentation/libtraceevent.txt | 203 ++++++++++++
.../lib/traceevent/Documentation/manpage-1.72.xsl | 14 +
.../lib/traceevent/Documentation/manpage-base.xsl | 35 +++
.../Documentation/manpage-bold-literal.xsl | 17 ++
.../traceevent/Documentation/manpage-normal.xsl | 13 +
.../Documentation/manpage-suppress-sp.xsl | 21 ++
tools/lib/traceevent/Makefile | 46 ++-
tools/lib/traceevent/libtraceevent.pc.template | 4 +-
tools/pci/Makefile | 2 +-
tools/perf/Documentation/perf-list.txt | 12 +
tools/perf/Documentation/perf-record.txt | 8 +-
tools/perf/Documentation/perf-stat.txt | 4 +
tools/perf/Documentation/perf.data-file-format.txt | 24 ++
tools/perf/Documentation/perf.txt | 2 +
tools/perf/arch/x86/include/perf_regs.h | 26 +-
tools/perf/arch/x86/util/perf_regs.c | 44 +++
tools/perf/builtin-annotate.c | 4 +-
tools/perf/builtin-inject.c | 4 +
tools/perf/builtin-record.c | 229 ++++++++++++--
tools/perf/builtin-report.c | 16 +-
tools/perf/builtin-stat.c | 21 ++
tools/perf/perf.h | 1 +
.../arm64/arm/cortex-a57-a72/core-imp-def.json | 179 +++++++++++
tools/perf/pmu-events/arch/arm64/mapfile.csv | 5 +-
tools/perf/pmu-events/jevents.c | 2 +-
tools/perf/scripts/python/exported-sql-viewer.py | 340 ++++++++++++++++++++-
tools/perf/tests/dso-data.c | 4 +-
tools/perf/tests/make | 2 +-
tools/perf/tests/shell/record+zstd_comp_decomp.sh | 34 +++
tools/perf/util/Build | 2 +
tools/perf/util/annotate.c | 2 +-
tools/perf/util/compress.h | 53 ++++
tools/perf/util/env.h | 11 +
tools/perf/util/event.c | 1 +
tools/perf/util/event.h | 7 +
tools/perf/util/evlist.c | 8 +-
tools/perf/util/evlist.h | 2 +-
tools/perf/util/evsel.c | 2 +
tools/perf/util/evsel.h | 3 +
tools/perf/util/header.c | 53 ++++
tools/perf/util/header.h | 1 +
.../perf/util/intel-pt-decoder/intel-pt-decoder.c | 31 +-
tools/perf/util/machine.c | 3 +-
tools/perf/util/mmap.c | 102 ++-----
tools/perf/util/mmap.h | 16 +-
tools/perf/util/parse-events.c | 27 ++
tools/perf/util/parse-events.h | 1 +
tools/perf/util/parse-events.l | 1 +
tools/perf/util/parse-regs-options.c | 33 +-
tools/perf/util/parse-regs-options.h | 3 +-
tools/perf/util/perf_regs.c | 10 +
tools/perf/util/perf_regs.h | 3 +
tools/perf/util/session.c | 133 +++++++-
tools/perf/util/session.h | 14 +
tools/perf/util/stat-display.c | 107 +++++--
tools/perf/util/stat.c | 8 +-
tools/perf/util/thread.c | 3 +-
tools/perf/util/tool.h | 2 +
tools/perf/util/unwind-libunwind-local.c | 6 -
tools/perf/util/unwind-libunwind.c | 10 +
tools/perf/util/zstd.c | 111 +++++++
94 files changed, 5414 insertions(+), 214 deletions(-)
create mode 100644 tools/lib/traceevent/Documentation/Makefile
create mode 100644 tools/lib/traceevent/Documentation/asciidoc.conf
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-commands.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-cpus.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-endian_read.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_find.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_get.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-event_list.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_find.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_get_val.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_print.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-field_read.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-fields.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-file_endian.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-filter.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-func_apis.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-func_find.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-handle.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-header_page.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-host_endian.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-long_size.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-page_size.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-parse_event.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-parse_head.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-record_parse.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-reg_event_handler.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-reg_print_func.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-set_flag.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-strerror.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent-tseq.txt
create mode 100644 tools/lib/traceevent/Documentation/libtraceevent.txt
create mode 100644 tools/lib/traceevent/Documentation/manpage-1.72.xsl
create mode 100644 tools/lib/traceevent/Documentation/manpage-base.xsl
create mode 100644 tools/lib/traceevent/Documentation/manpage-bold-literal.xsl
create mode 100644 tools/lib/traceevent/Documentation/manpage-normal.xsl
create mode 100644 tools/lib/traceevent/Documentation/manpage-suppress-sp.xsl
create mode 100644 tools/perf/pmu-events/arch/arm64/arm/cortex-a57-a72/core-imp-def.json
create mode 100755 tools/perf/tests/shell/record+zstd_comp_decomp.sh
create mode 100644 tools/perf/util/zstd.c