]> git.baikalelectronics.ru Git - kernel.git/commit
Merge branch 'bpf_read_branch_records'
authorAlexei Starovoitov <ast@kernel.org>
Wed, 19 Feb 2020 22:37:36 +0000 (14:37 -0800)
committerAlexei Starovoitov <ast@kernel.org>
Wed, 19 Feb 2020 23:01:12 +0000 (15:01 -0800)
commite18311a11d87ee8862586271fa44439d1c82f802
tree9017e0f53548a512619ec8dc4ffd13f2c5a37540
parent6178eb9c397404090b3288c0e5d77c813ecd3501
parent1adf3ea3021d46b02643fd78ec44e262be962e86
Merge branch 'bpf_read_branch_records'

Daniel Xu says:

====================
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 v8:
- Use globals instead of perf buffer
- Call test_perf_branches__detach() before destroying skeleton
- Fix typo in docs

Changes in v7:
- Const-ify and static-ify local var
- Documentation formatting

Changes in v6:
- Move #ifdef a little to avoid unused variable warnings on !x86
- Test negative condition in selftest (-EINVAL on improperly configured
  perf event)
- Skip positive condition selftest on setups that don't support branch
  records

Changes in v5:
- Rename bpf_perf_prog_read_branches() -> bpf_read_branch_records()
- Rename BPF_F_GET_BR_SIZE -> BPF_F_GET_BRANCH_RECORDS_SIZE
- Squash tools/ bpf.h sync into selftest commit

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
====================

Signed-off-by: Alexei Starovoitov <ast@kernel.org>