On Sat, 8 Feb 2020 at 16:42, Jiri Olsa <jolsa@kernel.org> wrote:
>
> hi,
> this patchset adds trampoline and dispatcher objects
> to be visible in /proc/kallsyms. The last patch also
> adds sorting for all bpf objects in /proc/kallsyms.
>
Thanks for working on this!
I'm probably missing something with my perf setup; I've applied your
patches, and everything seem to work fine from an kallsyms
perspective:
# grep bpf_dispatcher_xdp /proc/kallsyms
...
ffffffffc0511000 t bpf_dispatcher_xdp [bpf]
However, when I run
# perf top
I still see the undecorated one:
0.90% [unknown] [k] 0xffffffffc0511037
Any ideas?
Björn

On Mon, Feb 10, 2020 at 04:51:08PM +0100, Björn Töpel wrote:
> On Sat, 8 Feb 2020 at 16:42, Jiri Olsa <jolsa@kernel.org> wrote:
> >
> > hi,
> > this patchset adds trampoline and dispatcher objects
> > to be visible in /proc/kallsyms. The last patch also
> > adds sorting for all bpf objects in /proc/kallsyms.
> >
>
> Thanks for working on this!
>
> I'm probably missing something with my perf setup; I've applied your
> patches, and everything seem to work fine from an kallsyms
> perspective:
>
> # grep bpf_dispatcher_xdp /proc/kallsyms
> ...
> ffffffffc0511000 t bpf_dispatcher_xdp [bpf]
>
> However, when I run
> # perf top
>
> I still see the undecorated one:
> 0.90% [unknown] [k] 0xffffffffc0511037
>
> Any ideas?
yea strange.. it should be picked up from /proc/kallsyms as
fallback if there's no other source, I'll check on that
(might be the problem with perf depending on address going
only higher in /proc/kallsyms, while bpf symbols are at the
end and start over from the lowest bpf address)
anyway, in perf we enumerate bpf_progs via the perf events
PERF_BPF_EVENT_PROG_LOAD,PERF_BPF_EVENT_PROG_UNLOAD interface
together with PERF_RECORD_KSYMBOL_TYPE_BPF events
we might need to add something like:
PERF_RECORD_KSYMBOL_TYPE_BPF_TRAMPOLINE
PERF_RECORD_KSYMBOL_TYPE_BPF_DISPATCHER
to notify about the area, I'll check on that
however the /proc/kallsyms fallback should work in any
case.. thanks for report ;-)
jirka

Em Wed, Feb 12, 2020 at 12:13:46PM +0100, Jiri Olsa escreveu:
> On Tue, Feb 11, 2020 at 04:32:23PM -0300, Arnaldo Carvalho de Melo wrote:
> > Historically vmlinux was preferred because it contains function sizes,
> > but with all these out of the blue symbols, we need to prefer starting
> > with /proc/kallsyms and, as we do now, continue getting updates via
> > PERF_RECORD_KSYMBOL.
> > Humm, but then trampolines don't generate that, right? Or does it? If it
> > doesn't, then we will know about just the trampolines in place when the
> > record/top session starts, reparsing /proc/kallsyms periodically seems
> > excessive?
> I plan to extend the KSYMBOL interface to contain trampolines/dispatcher
> data,
That seems like the sensible, without looking too much at all the
details, to do, yes.
> plus we could do some inteligent fallback to /proc/kallsyms in case
> vmlinux won't have anything
At this point what would be the good reason to prefer vmlinux instead of
going straight to using /proc/kallsyms?
We have support for taking a snapshot of it at 'perf top' start, i.e.
right at the point we need to resolve a kernel symbol, then we get
PERF_RECORD_KSYMBOL for things that gets in place after that.
And as well we save it to the build-id cache so that later, at 'perf
report/script' time we can resolve kernel symbols, etc.
vmlinux is just what is in there right before boot, after that, for
quite some time, _lots_ of stuff happens :-)
- Arnaldo

On Wed, Feb 12, 2020 at 10:31:25AM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Feb 12, 2020 at 12:13:46PM +0100, Jiri Olsa escreveu:
> > On Tue, Feb 11, 2020 at 04:32:23PM -0300, Arnaldo Carvalho de Melo wrote:
> > > Historically vmlinux was preferred because it contains function sizes,
> > > but with all these out of the blue symbols, we need to prefer starting
> > > with /proc/kallsyms and, as we do now, continue getting updates via
> > > PERF_RECORD_KSYMBOL.
>
> > > Humm, but then trampolines don't generate that, right? Or does it? If it
> > > doesn't, then we will know about just the trampolines in place when the
> > > record/top session starts, reparsing /proc/kallsyms periodically seems
> > > excessive?
>
> > I plan to extend the KSYMBOL interface to contain trampolines/dispatcher
> > data,
>
> That seems like the sensible, without looking too much at all the
> details, to do, yes.
>
> > plus we could do some inteligent fallback to /proc/kallsyms in case
> > vmlinux won't have anything
>
> At this point what would be the good reason to prefer vmlinux instead of
> going straight to using /proc/kallsyms?
symbol (with sizes) and code for dwarf unwind, processor trace
jirka
>
> We have support for taking a snapshot of it at 'perf top' start, i.e.
> right at the point we need to resolve a kernel symbol, then we get
> PERF_RECORD_KSYMBOL for things that gets in place after that.
>
> And as well we save it to the build-id cache so that later, at 'perf
> report/script' time we can resolve kernel symbols, etc.
>
> vmlinux is just what is in there right before boot, after that, for
> quite some time, _lots_ of stuff happens :-)
>
> - Arnaldo
>