Skip to content

ftrace,bpf: Use single direct ops for bpf trampolines

Jiri Olsa bpf linux-arm-kernel linux-trace-kernel lkml oe-kbuild-all 7 versions – Applied

Status from this message: This series was applied to bpf/bpf-next.git (master)

Get series with b4
b4 am [email protected]

Versions newest first · linked by author and title

  1. v6 Latest9 patches 16 repliesApplied 9/9
  2. v59 patches 16 repliesSuperseded
  3. v49 patches 3 repliesSuperseded
Earlier versions · 4
VersionPostedPatchesRepliesStatus
v38 patches2 repliesSuperseded
v2 posting 2/28 patches4 repliesSuperseded
v2 posting 1/20 of 9 patches0 repliesSuperseded
v19 patches4 repliesSuperseded

Changes in v6 from the cover letter

- rename add_hash_entry_direct to add_ftrace_hash_entry_direct [Steven]
- factor hash_add/hash_sub [Steven]
- add kerneldoc header for update_ftrace_direct_* functions [Steven]
- few assorted smaller fixes [Steven]
- added missing direct_ops wrappers for !CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS case [Steven]

Patches in v6 All 9 applied

#Subject and filesSizeRepliesApplied
1/9ftrace,bpf: Remove FTRACE_OPS_FL_JMP ftrace_ops flaginclude/linux/ftrace.h kernel/bpf/trampoline.c kernel/trace/ftrace.c+14 -331 replyApplied
2/9ftrace: Make alloc_and_copy_ftrace_hash direct friendlykernel/trace/ftrace.c+9 -20 repliesApplied
3/9ftrace: Export some of hash related functionsinclude/linux/ftrace.h kernel/trace/ftrace.c+15 -70 repliesApplied
4/9ftrace: Add update_ftrace_direct_add functioninclude/linux/ftrace.h kernel/trace/ftrace.c+147 -00 repliesApplied
5/9ftrace: Add update_ftrace_direct_del functioninclude/linux/ftrace.h kernel/trace/ftrace.c+133 -00 repliesApplied
6/9ftrace: Add update_ftrace_direct_mod functioninclude/linux/ftrace.h kernel/trace/ftrace.c+100 -00 repliesApplied
7/9bpf: Add trampoline ip hash tableinclude/linux/bpf.h kernel/bpf/trampoline.c+24 -134 repliesApplied
8/9ftrace: Factor ftrace_ops ops_func interfaceinclude/linux/ftrace.h kernel/bpf/trampoline.c kernel/trace/ftrace.c+6 -50 repliesApplied
9/9bpf,x86: Use single ftrace_ops for direct callsarch/x86/Kconfig kernel/bpf/trampoline.c kernel/trace/Kconfig +1 more+200 -318 repliesApplied

Reviews trailers per patch

3 of 9 patches have a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchSteven Rostedt (Google)Andrii NakryikoIhor Solodrai
SeriesR-b
1/9A-b
2/9
3/9
4/9
5/9
6/9
7/9
8/9A-b
9/9A-b T-b

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes. Scroll the table sideways for all 3 reviewers.

Read the v6 thread

Cover letter [PATCHv6 bpf-next 0/9] ftrace,bpf: Use single direct ops for bpf trampolines

hi,
while poking the multi-tracing interface I ended up with just one ftrace_ops object to attach all trampolines.

This change allows to use less direct API calls during the attachment changes in the future code, so in effect speeding up the attachment.

In current code we get a speed up from using just a single ftrace_ops object.

- with current code:

Performance counter stats for 'bpftrace -e fentry:vmlinux:ksys_* {} -c true':

     6,364,157,902      cycles:k
       828,728,902      cycles:u
     1,064,803,824      instructions:u                   #    1.28  insn per cycle
    23,797,500,067      instructions:k                   #    3.74  insn per cycle
       4.416004987 seconds time elapsed

       0.164121000 seconds user
       1.289550000 seconds sys

- with the fix:

Performance counter stats for 'bpftrace -e fentry:vmlinux:ksys_* {} -c true':

     6,535,857,905      cycles:k
       810,809,429      cycles:u
     1,064,594,027      instructions:u                   #    1.31  insn per cycle
    23,962,552,894      instructions:k                   #    3.67  insn per cycle
       1.666961239 seconds time elapsed

       0.157412000 seconds user
       1.283396000 seconds sys

The speedup seems to be related to the fact that with single ftrace_ops object we don't call ftrace_shutdown anymore (we use ftrace_update_ops instead) and we skip the synchronize rcu calls (each ~100ms) at the end of that function.

rfc: https://lore.kernel.org/bpf/[email protected]/
v1:  https://lore.kernel.org/bpf/[email protected]/
v2:  https://lore.kernel.org/bpf/[email protected]/
v3:  https://lore.kernel.org/bpf/[email protected]/
v4:  https://lore.kernel.org/bpf/[email protected]/
v5:  https://lore.kernel.org/bpf/[email protected]/

v6 changes:
- rename add_hash_entry_direct to add_ftrace_hash_entry_direct [Steven]
- factor hash_add/hash_sub [Steven]
- add kerneldoc header for update_ftrace_direct_* functions [Steven]
- few assorted smaller fixes [Steven]
- added missing direct_ops wrappers for !CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS case [Steven]

v5 changes:
- do not export ftrace_hash object [Steven]
- fix update_ftrace_direct_add new_filter_hash leak [ci]

v4 changes:
- rebased on top of bpf-next/master (with jmp attach changes) added patch 1 to deal with that
- added extra checks for update_ftrace_direct_del/mod to address the ci bot review

v3 changes:
- rebased on top of bpf-next/master
- fixed update_ftrace_direct_del cleanup path
- added missing inline to update_ftrace_direct_* stubs

v2 changes:
- rebased on top fo bpf-next/master plus Song's livepatch fixes [1]
- renamed the API functions [2] [Steven]
- do not export the new api [Steven]
- kept the original direct interface:

I'm not sure if we want to melt both *_ftrace_direct and the new interface into single one. It's bit different in semantic (hence the name change as Steven suggested [2]) and I don't think the changes are not that big so we could easily keep both APIs.

v1 changes:
- make the change x86 specific, after discussing with Mark options for arm64 [Mark]

thanks,
jirka

[1] https://lore.kernel.org/bpf/[email protected]/
[2] https://lore.kernel.org/bpf/[email protected]/
---
Jiri Olsa (9):
ftrace,bpf: Remove FTRACE_OPS_FL_JMP ftrace_ops flag
ftrace: Make alloc_and_copy_ftrace_hash direct friendly
ftrace: Export some of hash related functions
ftrace: Add update_ftrace_direct_add function
ftrace: Add update_ftrace_direct_del function
ftrace: Add update_ftrace_direct_mod function
bpf: Add trampoline ip hash table
ftrace: Factor ftrace_ops ops_func interface
bpf,x86: Use single ftrace_ops for direct calls

 arch/x86/Kconfig        |   1 +
 include/linux/bpf.h     |   7 ++-
 include/linux/ftrace.h  |  31 +++++++++-
 kernel/bpf/trampoline.c | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
 kernel/trace/Kconfig    |   3 +
 kernel/trace/ftrace.c   | 406 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------
 6 files changed, 632 insertions(+), 75 deletions(-)