perf/core: Add new branch sample type for HW index of raw branch records
authorKan Liang <kan.liang@linux.intel.com>
Mon, 27 Jan 2020 16:53:54 +0000 (08:53 -0800)
committerIngo Molnar <mingo@kernel.org>
Tue, 11 Feb 2020 12:23:49 +0000 (13:23 +0100)
commitbbfd5e4fab63703375eafaf241a0c696024a59e1
treed3710969e9950bdcf7fe048ce3fd23bbe622dba7
parent6c1c07b33eb093e5a2a313ece89baa596ba6135e
perf/core: Add new branch sample type for HW index of raw branch records

The low level index is the index in the underlying hardware buffer of
the most recently captured taken branch which is always saved in
branch_entries[0]. It is very useful for reconstructing the call stack.
For example, in Intel LBR call stack mode, the depth of reconstructed
LBR call stack limits to the number of LBR registers. With the low level
index information, perf tool may stitch the stacks of two samples. The
reconstructed LBR call stack can break the HW limitation.

Add a new branch sample type to retrieve low level index of raw branch
records. The low level index is between -1 (unknown) and max depth which
can be retrieved in /sys/devices/cpu/caps/branches.

Only when the new branch sample type is set, the low level index
information is dumped into the PERF_SAMPLE_BRANCH_STACK output.
Perf tool should check the attr.branch_sample_type, and apply the
corresponding format for PERF_SAMPLE_BRANCH_STACK samples.
Otherwise, some user case may be broken. For example, users may parse a
perf.data, which include the new branch sample type, with an old version
perf tool (without the check). Users probably get incorrect information
without any warning.

Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lkml.kernel.org/r/20200127165355.27495-2-kan.liang@linux.intel.com
arch/powerpc/perf/core-book3s.c
arch/x86/events/intel/lbr.c
include/linux/perf_event.h
include/uapi/linux/perf_event.h
kernel/events/core.c