Re: [PATCH tip 0/9] tracing: attach eBPF programs to tracepoints/syscalls/kprobe
From: Alexei Starovoitov <hidden>
Date: 2015-01-19 20:49:14
Also in:
linux-api, lkml
On Mon, Jan 19, 2015 at 1:52 AM, Masami Hiramatsu [off-list ref] wrote:
If we can write the script as
int bpf_prog4(s64 write_size)
{
...
}
This will be much easier to play with.yes. that's the intent for user space to do.
quoted
The example of this arbitrary pointer walking is tracex1_kern.c which does skb->dev->name == "lo" filtering.At least I would like to see this way on kprobes event too, since it should be treated as a traceevent.
it's done already... one can do the same skb->dev->name logic in kprobe attached program... so from bpf program point of view, tracepoints and kprobes feature-wise are exactly the same. Only input is different.
quoted
- kprobe programs are architecture dependent and need user scripting language like ktap/stap/dtrace/perf that will dynamically generate them based on debug info in vmlinuxIf we can use kprobe event as a normal traceevent, user scripting can be architecture independent too. Only perf-probe fills the gap. All other userspace tools can collaborate with perf-probe to setup the events. If so, we can avoid redundant works on debuginfo. That is my point.
yes. perf already has infra to read debug info and it can be extended
to understand C like script as:
int kprobe:sys_write(int fd, char *buf, size_t count)
{
// do stuff with 'count'
}
perf can be made to parse this text, recognize that it wants
to create kprobe on 'sys_write' function. Then based on
debuginfo figure out where 'count' is (either register or stack)
and generate corresponding bpf program either
using llvm/gcc backends or directly.
perf facility of extracting debug info can be made into
library too and used by ktap/dtrace tools for their
languages.
User space can innovate in many directions.
and, yes, once we have a scripting language whether
it's C like with perf or else, this language hides architecture
depend things from users.
Such scripting language will also hide the kernel
side differences between tracepoint and kprobe.
Just look how ktap scripts look alike for kprobes and tracepoints.
Whether ktap syntax becomes part of perf or perf invents
its own language, it's going to be good for users regardless.
The C examples here are just examples. Something
users can play with already until more user friendly
tools are being worked on.