Thread (47 messages) 47 messages, 5 authors, 2023-08-08

Re: [PATCH v4 3/9] bpf/btf: Add a function to search a member of a struct/union

From: Alexei Starovoitov <hidden>
Date: 2023-08-02 21:29:08
Also in: bpf, lkml

On Wed, Aug 2, 2023 at 1:12 PM Steven Rostedt [off-list ref] wrote:
On Wed, 2 Aug 2023 12:48:14 -0700
Alexei Starovoitov [off-list ref] wrote:
quoted
On Wed, Aug 2, 2023 at 11:38 AM Steven Rostedt [off-list ref] wrote:
quoted
On Wed, 2 Aug 2023 11:24:12 -0700
Alexei Starovoitov [off-list ref] wrote:
quoted
This is a non starter.
bpf progs expect arch dependent 'struct pt_regs *' and we cannot change that.
If the progs are compiled into native code, isn't there optimizations that
could be done? That is, if ftrace_regs is available, and the bpf program is
just using the subset of pt_regs, is it possible that it could be compiled
to use ftrace_regs?

Forgive my ignorance on how BPF programs turn into executables when running
in the kernel.
Right. It's possible for the verifier to do an offset rewrite,
forbid certain access, always return 0 on load from certain offset,
and so on.
It's all non trivial amount of work.
ftrace_partial_regs() from ftrace_regs into pt_regs is so much simpler.
Sure, and the copy could be the solution we have in the near future, but if
we could optimize it in the future, then perhaps it would be worth doing it.

Also, how are the bpf programs referencing the pt_regs?
Typically through macros that abstract arch differences away in
tools/lib/bpf/bpf_tracing.h
PT_REGS_PARM1
PT_REGS_PARM1_CORE
PT_REGS_PARM1_SYSCALL

pt_regs at syscall entry is special, since syscall calling convention
is different from the rest of the kernel.
ftrace_regs cannot help with that either.
Could a ftrace_regs
API be added too?
Potentially yes, but I don't see the value.
bpf users are slowly migrating to fentry/fexit that has accurate
args and return value and much faster.
kprobes are still heavily used, of course.
multi-kprobe (with fprobe_ips underneath) is a new addition that is
also very important to some users.
If the verifier sees that the program is using
ftrace_regs, it could then use the lighter weight fprobes for access,
otherwise it falls back to the kprobe version.

-- Steve
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help