[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200124211705.24759-1-dxu@dxuuu.xyz>
Date: Fri, 24 Jan 2020 13:17:02 -0800
From: Daniel Xu <dxu@...uu.xyz>
To: bpf@...r.kernel.org, ast@...nel.org, daniel@...earbox.net,
songliubraving@...com, yhs@...com, andriin@...com
Cc: Daniel Xu <dxu@...uu.xyz>, linux-kernel@...r.kernel.org,
kernel-team@...com, peterz@...radead.org, mingo@...hat.com,
acme@...nel.org
Subject: [PATCH v4 bpf-next 0/3] Add bpf_perf_prog_read_branches() helper
Branch records are a CPU feature that can be configured to record
certain branches that are taken during code execution. This data is
particularly interesting for profile guided optimizations. perf has had
branch record support for a while but the data collection can be a bit
coarse grained.
We (Facebook) have seen in experiments that associating metadata with
branch records can improve results (after postprocessing). We generally
use bpf_probe_read_*() to get metadata out of userspace. That's why bpf
support for branch records is useful.
Aside from this particular use case, having branch data available to bpf
progs can be useful to get stack traces out of userspace applications
that omit frame pointers.
Changes in v4:
- Add BPF_F_GET_BR_SIZE flag
- Return -ENOENT on unsupported architectures
- Only accept initialized memory in helper
- Check buffer size is multiple of sizeof(struct perf_branch_entry)
- Use bpf skeleton in selftest
- Add commit messages
- Spelling and formatting
Changes in v3:
- Document filling unused buffer with zero
- Formatting fixes
- Rebase
Changes in v2:
- Change to a bpf helper instead of context access
- Avoid mentioning Intel specific things
Daniel Xu (3):
bpf: Add bpf_perf_prog_read_branches() helper
tools/bpf: Sync uapi header bpf.h
selftests/bpf: add bpf_perf_prog_read_branches() selftest
include/uapi/linux/bpf.h | 25 +++-
kernel/trace/bpf_trace.c | 41 +++++++
tools/include/uapi/linux/bpf.h | 25 +++-
.../selftests/bpf/prog_tests/perf_branches.c | 112 ++++++++++++++++++
.../selftests/bpf/progs/test_perf_branches.c | 74 ++++++++++++
5 files changed, 275 insertions(+), 2 deletions(-)
create mode 100644 tools/testing/selftests/bpf/prog_tests/perf_branches.c
create mode 100644 tools/testing/selftests/bpf/progs/test_perf_branches.c
--
2.21.1
Powered by blists - more mailing lists