超开心! uprobe-multi 的最后一程终于也走完了,集成到了 cilium/ebpf : https://github.com/cilium/ebpf/pull/1269
作者 jiri olsa 在 https://lore.kernel.org/bpf/[email protected]/ 里给出的测试数据是:
Attaching current bpftrace to 1000 uprobes:
# BPFTRACE_MAX_PROBES=100000 perf stat -e cycles,instructions \
./bpftrace -e 'uprobe:./uprobe_multi:uprobe_multi_func_* { }, i:ms:1 { exit(); }'
...
126,666,390,509 cycles
29,973,207,307 instructions # 0.24 insn per cycle
85.284833554 seconds time elapsed
Same bpftrace setup with uprobe_multi support:
# perf stat -e cycles,instructions \
./bpftrace -e 'uprobe:./uprobe_multi:uprobe_multi_func_* { }, i:ms:1 { exit(); }'
...
6,818,470,649 cycles
13,275,510,122 instructions # 1.95 insn per cycle
1.943269451 seconds time elapsed
85s -> 2s !!!
如果和 bpftime 相比,数据出处是 https://lpc.events/event/17/contributions/1639/attachments/1280/2585/userspace-ebpf-bpftime-lpc.pdf 第20页,bpftime 把 load time 性能提高了十倍,但是 uprobe multi 提升了不止十倍啊!
大规模 uprobe 观测有救了!哭出声!我的破玩具项目似乎又可以捡起来了!
作者 jiri olsa 在 https://lore.kernel.org/bpf/[email protected]/ 里给出的测试数据是:
Attaching current bpftrace to 1000 uprobes:
# BPFTRACE_MAX_PROBES=100000 perf stat -e cycles,instructions \
./bpftrace -e 'uprobe:./uprobe_multi:uprobe_multi_func_* { }, i:ms:1 { exit(); }'
...
126,666,390,509 cycles
29,973,207,307 instructions # 0.24 insn per cycle
85.284833554 seconds time elapsed
Same bpftrace setup with uprobe_multi support:
# perf stat -e cycles,instructions \
./bpftrace -e 'uprobe:./uprobe_multi:uprobe_multi_func_* { }, i:ms:1 { exit(); }'
...
6,818,470,649 cycles
13,275,510,122 instructions # 1.95 insn per cycle
1.943269451 seconds time elapsed
85s -> 2s !!!
如果和 bpftime 相比,数据出处是 https://lpc.events/event/17/contributions/1639/attachments/1280/2585/userspace-ebpf-bpftime-lpc.pdf 第20页,bpftime 把 load time 性能提高了十倍,但是 uprobe multi 提升了不止十倍啊!
大规模 uprobe 观测有救了!哭出声!我的破玩具项目似乎又可以捡起来了!