Re: [GIT PULL 0/6] perf/core improvements and fixes

From: Wangnan (F)
Date: Thu Jun 04 2015 - 06:06:53 EST




On 2015/6/4 15:21, Ingo Molnar wrote:
* Wangnan (F) <wangnan0@xxxxxxxxxx> wrote:

On 2015/6/4 13:48, Ingo Molnar wrote:
* Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> wrote:

Hi Ingo,

Please consider applying.

One of the next requests probably will have the eBPF work by Wang Nan,
but I am still going thru it and want to test it thoroughly.

BTW: Have you looked at it lately? It is at:

http://lkml.kernel.org/r/1433144296-74992-1-git-send-email-wangnan0@xxxxxxxxxx

Super summary from the above cover letter:

---------------------
It enables 'perf record' to filter events using eBPF programs like:

# perf record --event bpf-file.o sleep 1

Events are selected and filtered according to definitions in bpf-file.o.
Looks useful, but I think the UI needs one more tweak: could you fix it to be able
to filter based on the eBPF _source_ file, not just the object file?

People want to tweak such filters as they profile, so we should use the eBPF
source code as the primary interface. We can compile it internally to the .o just
fine. The .o file is a totally uninteresting intermediate product in itself.

I.e. we need to first think through such profiling workflows from beginning to end
before allowing them upstream.
In a private mail Alexei Starovoitov disscussed with me about this. He said that
he is working on a shared object which can compile C program into BPF bytecode
on the fly. After he done his work, I think perf can support dtrace-like
profiling that, users will be able to feed source code to perf directly on
cmdline. He said he can release it on June. I added him to the CC-list.

However I think the '.o' intermediate is still needed. [...]
So how do you generate the .o? Why cannot the tool, if it sees that the filter
parameter is eBPF source code, do that automatically?

I think compiling on the fly is our goal, and Alexei is working on it. However,
it looks like some limitations are still exist. For example, the BPF program may
require the definition of kernel structure for it to derefrernce struct pointers.
Therefore, the machine on which compiling occures should have kernel header and
configuration installed. However, most of production environment doesn't have
them for security and reasons.

I think BPF should be used to profile not only development environment but also
production systems. If we only concern development systems, why not recompiling
kernel with stub core or using kProbe modules?

What about this:

Give perf the ability to generate the '.o' file (to memory or dump to a real file)
on development environment. If we are willing to profiling that system, we can make
load the generated object into kernel and start trace by (perf record --event bpf_file.c ...).
If we are willing to profile systems on which the compiling environment is missing, we can
make perf to create a '.o' file (perf bpf compile bpf_file.c -o bpf_file.o) then copy
it onto target environment, use perf record --event bpf_file.o ... to filter events.

Thank you.

I.e. you are making the user jump through hoops for no good reason - that's a bad
UI and a bad workflow. Please don't do that!

Thanks,

Ingo


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/