Add TRACE_BPF as a new trace type to establish infrastruction for bpf output data to perf. This new trace type creates a static singleton ftrace entry in kernel, userspace perf tools can detect and use this new ftrace entry just as using the existing tracepoint events.
This added a new bpf ftrace entry in debugfs: /sys/kernel/debug/tracing/events/ftrace/bpf Userspace perf tools detect the new tracepoint event as: ftrace:bpf [Tracepoint event] Data in ring-buffer of perf events added to this ftrace:bpf event can be polled out, sample types and other attributes can be adjusted to those events directly without touching the original kprobe events. Signed-off-by: He Kuang <heku...@huawei.com> --- kernel/trace/trace.h | 1 + kernel/trace/trace_entries.h | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h index d261201..d135f55 100644 --- a/kernel/trace/trace.h +++ b/kernel/trace/trace.h @@ -38,6 +38,7 @@ enum trace_type { TRACE_USER_STACK, TRACE_BLK, TRACE_BPUTS, + TRACE_BPF, __TRACE_LAST_TYPE, }; diff --git a/kernel/trace/trace_entries.h b/kernel/trace/trace_entries.h index ee7b94a..c237212 100644 --- a/kernel/trace/trace_entries.h +++ b/kernel/trace/trace_entries.h @@ -322,3 +322,21 @@ FTRACE_ENTRY(branch, trace_branch, FILTER_OTHER ); +#define TRACE_BPF_MAX_ENTRY 64 +#define TRACE_BPF_MAX_SIZE (TRACE_BPF_MAX_ENTRY * sizeof(u64)) + +FTRACE_ENTRY_REG(bpf, trace_bpf, + + TRACE_BPF, + + F_STRUCT( + __field(long, size) + __array(u64, raw_data, TRACE_BPF_MAX_ENTRY) + ), + + F_printk("%ld: (%016llx, ...)", __entry->size, __entry->raw_data[0]), + + FILTER_OTHER, + + perf_ftrace_event_register +); -- 1.8.5.2 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/