Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751957AbbGJWKq (ORCPT ); Fri, 10 Jul 2015 18:10:46 -0400 Received: from mail-pa0-f44.google.com ([209.85.220.44]:33201 "EHLO mail-pa0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751198AbbGJWKj (ORCPT ); Fri, 10 Jul 2015 18:10:39 -0400 Message-ID: <55A042DC.6030809@plumgrid.com> Date: Fri, 10 Jul 2015 15:10:36 -0700 From: Alexei Starovoitov User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: He Kuang , rostedt@goodmis.org, masami.hiramatsu.pt@hitachi.com, acme@kernel.org, a.p.zijlstra@chello.nl, mingo@redhat.com, namhyung@kernel.org, jolsa@kernel.org CC: wangnan0@huawei.com, pi3orama@163.com, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v4 3/3] bpf: Introduce function for outputing data to perf event References: <1436522587-136825-1-git-send-email-hekuang@huawei.com> <1436522587-136825-4-git-send-email-hekuang@huawei.com> In-Reply-To: <1436522587-136825-4-git-send-email-hekuang@huawei.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1672 Lines: 51 On 7/10/15 3:03 AM, He Kuang wrote: > There're scenarios that we need an eBPF program to record not only > kprobe point args, but also the PMU counters, time latencies or the > number of cache misses between two probe points and other information > when the probe point is entered. > > This patch adds a new trace event to establish infrastruction for bpf to > output data to perf. Userspace perf tools can detect and use this event > as using the existing tracepoint events. > > New bpf trace event entry in debugfs: > > /sys/kernel/debug/tracing/events/bpf/bpf_output_data > > Userspace perf tools detect the new tracepoint event as: > > bpf:bpf_output_data [Tracepoint event] Nice! This approach looks cleanest so far. > +TRACE_EVENT(bpf_output_data, > + > + TP_PROTO(u64 *src, int len), > + > + TP_ARGS(src, len), > + > + TP_STRUCT__entry( > + __dynamic_array(u64, buf, len) > + ), > + > + TP_fast_assign( > + memcpy(__get_dynamic_array(buf), src, len * sizeof(u64)); may be make it 'u8' array? The extra multiply and... > +static u64 bpf_output_trace_data(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5) > +{ > + void *src = (void *) (long) r1; > + int size = (int) r2; > + > + trace_bpf_output_data(src, size / sizeof(u64)); .. and this silent round down could be confusing to use. With array of u8, the program can push any structured data into it and let user space interpret it. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/