查看所有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_<name>
,如trace_event_raw_kfree_skb
。但有时内核中的少量Tracepoints会重用常用的类型,因此如果上述模式不起作用,则需要在内核源码(或 vmlinux.h
)中查找具体的类型名称,一般命名为trace_event_raw_<name>_template
。例如vmlinux.h
中不存在napi_gro_receive_entry
对应的类型,但通过cat /sys/kernel/debug/tracing/events/net/napi_gro_receive_entry/format
,能够查看到其参数如下
根据红框中的数据结构可以找到对应的trace_event_raw_net_dev_rx_verbose_template
查看可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