ebpf代码编写小技巧

查看所有tracepoint

perf list 

perf追踪tracepoint

perf trace --no-syscalls --event 'net:*'

查看tracepoint的具体参数

sudo python3 /usr/share/bcc/tools/tplist -v 'net:napi_gro_receive_entry'
cat /sys/kernel/debug/tracing/events/net/netif_rx/format

内核vmlinux.h生成

sudo bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

根据tracepoint的具体参数找到vmlinux.h中对应的结构体

内核已经提供了所有Tracepoint数据的类似类型,一般命名为trace_event_raw_,如trace_event_raw_kfree_skb。但有时内核中的少量Tracepoints会重用常用的类型,因此如果上述模式不起作用,则需要在内核源码(或 vmlinux.h)中查找具体的类型名称,一般命名为trace_event_raw__template。例如vmlinux.h中不存在napi_gro_receive_entry对应的类型,但通过cat /sys/kernel/debug/tracing/events/net/napi_gro_receive_entry/format,能够查看到其参数如下
ebpf代码编写小技巧_第1张图片

根据红框中的数据结构可以找到对应的trace_event_raw_net_dev_rx_verbose_template
ebpf代码编写小技巧_第2张图片

查看可probe的函数符号

并非所有的函数都可probe,例如一些内联的函数无法probe,可通过如下办法查看可probe的内核函数
sudo cat /sys/kernel/debug/tracing/available_filter_functions
或者
cat /proc/kallsyms

查看bpf_trace_printk()的输出

sudo cat /sys/kernel/debug/tracing/trace_pipe

你可能感兴趣的:(eBPF,kernel)