Re: [PATCH net-next 1/2] perf, bpf: add support for HW_CACHE and RAW events

From: Alexei Starovoitov
Date: Tue May 23 2017 - 13:06:09 EST


On 5/23/17 9:31 AM, Peter Zijlstra wrote:
On Tue, May 23, 2017 at 07:38:08AM -0700, Alexei Starovoitov wrote:
On 5/23/17 12:42 AM, Peter Zijlstra wrote:
On Mon, May 22, 2017 at 03:48:39PM -0700, Alexei Starovoitov wrote:
From: Teng Qin <qinteng@xxxxxx>

This commit adds support for attach BPF program to RAW and HW_CACHE type
events, and support for read HW_CACHE type event counters in BPF
program. Existing code logic already supports them, so this commit is
just update Enum value checks.

So what I'm missing is why they were not supported previously, and what
changed to allow it now.

that code path simply wasn't tested previously. Nothing changed on
bpf side and on perf side.
Why it wasn't added on day one? There was no demand. Now people
use bpf more and more and few folks got confused that these types
of perf events were not supported, hence we're adding it.

OK. Is there anything stopping people from wanting to use the dynamic
types, as found in:

/sys/bus/event_source/devices/*/type

?

In which case, do we want something like this instead?


diff --git a/kernel/events/core.c b/kernel/events/core.c
index 971f7259108f..4aa5f3011cf8 100644
--- a/kernel/events/core.c
+++ b/kernel/events/core.c
@@ -8063,12 +8063,8 @@ static int perf_event_set_bpf_prog(struct perf_event *event, u32 prog_fd)
bool is_kprobe, is_tracepoint;
struct bpf_prog *prog;

- if (event->attr.type == PERF_TYPE_HARDWARE ||
- event->attr.type == PERF_TYPE_SOFTWARE)
- return perf_event_set_bpf_handler(event, prog_fd);
-
if (event->attr.type != PERF_TYPE_TRACEPOINT)
- return -EINVAL;
+ return perf_event_set_bpf_handler(event, prog_fd);

Good point. We were actually looking at how to deal with msr and cstate
events. That should indeed address it.
Will respin.
Thanks for the feedback!