From: He Kuang <hekuang@huawei.com>
To: Alexei Starovoitov <ast@plumgrid.com>, Ingo Molnar <mingo@kernel.org>
Cc: Steven Rostedt <rostedt@goodmis.org>,
Namhyung Kim <namhyung@kernel.org>,
Arnaldo Carvalho de Melo <acme@infradead.org>,
Jiri Olsa <jolsa@redhat.com>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
"David S. Miller" <davem@davemloft.net>,
Daniel Borkmann <daniel@iogearbox.net>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
<linux-api@vger.kernel.org>, <netdev@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <wangnan0@huawei.com>
Subject: Re: [PATCH v6 tip 3/8] tracing: allow BPF programs to call bpf_ktime_get_ns()
Date: Fri, 13 Mar 2015 19:24:27 +0800 [thread overview]
Message-ID: <5502C8EB.9070307@huawei.com> (raw)
In-Reply-To: <1426047534-8148-4-git-send-email-ast@plumgrid.com>
Hi, Alexei
I've followed up your bpf version. In bpf filter, sometimes we need to
get 'pid' and some other context informations to decide whether to
filter or not.
For example, to trace a vfs read procedure, we can insert bpf program to
'__vfs_read(struct file *file, char __user *buf ...)', mark some of
'buf' addresses and only trace the read procedure of these 'buf's. But
this parameter is a userspace pointer, the value is meaningless to other
processes, so we should also record 'pid' to make sense.
To a function like __vfs_read, 'pid' can't be extracted from function
parameters directly. What's your opinion on this issue?
Thanks!
On 2015/3/11 12:18, Alexei Starovoitov wrote:
> bpf_ktime_get_ns() is used by programs to compue time delta between events
> or as a timestamp
>
> Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
> ---
> include/uapi/linux/bpf.h | 1 +
> kernel/trace/bpf_trace.c | 11 +++++++++++
> 2 files changed, 12 insertions(+)
>
> diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h
> index 4486d36d2e9e..101e509d1001 100644
> --- a/include/uapi/linux/bpf.h
> +++ b/include/uapi/linux/bpf.h
> @@ -165,6 +165,7 @@ enum bpf_func_id {
> BPF_FUNC_map_update_elem, /* int map_update_elem(&map, &key, &value, flags) */
> BPF_FUNC_map_delete_elem, /* int map_delete_elem(&map, &key) */
> BPF_FUNC_probe_read, /* int bpf_probe_read(void *dst, int size, void *src) */
> + BPF_FUNC_ktime_get_ns, /* u64 bpf_ktime_get_ns(void) */
> __BPF_FUNC_MAX_ID,
> };
>
> diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
> index 450ea93ac4ab..ee7c2c629e75 100644
> --- a/kernel/trace/bpf_trace.c
> +++ b/kernel/trace/bpf_trace.c
> @@ -56,6 +56,12 @@ static u64 bpf_probe_read(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5)
> return probe_kernel_read(dst, unsafe_ptr, size);
> }
>
> +static u64 bpf_ktime_get_ns(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5)
> +{
> + /* NMI safe access to clock monotonic */
> + return ktime_get_mono_fast_ns();
> +}
> +
> static struct bpf_func_proto kprobe_prog_funcs[] = {
> [BPF_FUNC_probe_read] = {
> .func = bpf_probe_read,
> @@ -65,6 +71,11 @@ static struct bpf_func_proto kprobe_prog_funcs[] = {
> .arg2_type = ARG_CONST_STACK_SIZE,
> .arg3_type = ARG_ANYTHING,
> },
> + [BPF_FUNC_ktime_get_ns] = {
> + .func = bpf_ktime_get_ns,
> + .gpl_only = true,
> + .ret_type = RET_INTEGER,
> + },
> };
>
> static const struct bpf_func_proto *kprobe_prog_func_proto(enum bpf_func_id func_id)
next prev parent reply other threads:[~2015-03-13 11:28 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-11 4:18 [PATCH v6 tip 0/8] tracing: attach eBPF programs to kprobes Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 1/8] bpf: make internal bpf API independent of CONFIG_BPF_SYSCALL ifdefs Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 2/8] tracing: attach BPF programs to kprobes Alexei Starovoitov
2015-03-12 15:15 ` Peter Zijlstra
2015-03-12 16:18 ` Alexei Starovoitov
2015-03-12 16:23 ` Steven Rostedt
2015-03-12 16:43 ` Alexei Starovoitov
2015-03-12 16:47 ` Steven Rostedt
2015-03-11 4:18 ` [PATCH v6 tip 3/8] tracing: allow BPF programs to call bpf_ktime_get_ns() Alexei Starovoitov
2015-03-13 11:24 ` He Kuang [this message]
2015-03-13 16:38 ` Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 4/8] tracing: allow BPF programs to call bpf_trace_printk() Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 5/8] samples: bpf: simple non-portable kprobe filter example Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 6/8] samples: bpf: counting example for kfree_skb and write syscall Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 7/8] samples: bpf: IO latency analysis (iosnoop/heatmap) Alexei Starovoitov
2015-03-11 4:18 ` [PATCH v6 tip 8/8] samples: bpf: kmem_alloc/free tracker Alexei Starovoitov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5502C8EB.9070307@huawei.com \
--to=hekuang@huawei.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@infradead.org \
--cc=ast@plumgrid.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=jolsa@redhat.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=wangnan0@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox