我有一个带精灵部分功能的ebpf xdp程序。
SEC("tracepoint/xdp/xdp_devmap_xmit")在上面我想知道的是,这是一个钩子,哪个内核函数是tracepoint/xdp/xdp_devmap_xmit,
所以问题是
这上面的SEC精灵部分是否使我的ebpf程序成为XDP程序?
因此,如果它是正确的,那么在tracepoint/中的tracepoint/xdp/xdp_devmap_xmit中,还有哪些其他选项可用。我可以看到xdp在tracepoint/中显然是可用的,因为tracepoint/[xdp]/xdp_dexmap_xmit显然是可用的,还有一些示例程序可以使用,请大家解释一下,在tracepoint/中还有哪些选项可用呢?我可以在内核中为我的某些函数定制跟踪点吗?
发布于 2022-01-19 16:48:51
章节名称指的是什么?
和什么是tracepoint/xdp/xdp_devmap_xmit
tracepoint/xdp/xdp_devmap_xmit是这个BPF程序的ELF部分的名称。加载程序(这里是libbpf)将使用这个节名来知道它是哪种BPF程序类型,在本例中是在哪里附加它。
tracepoint类型的BPF程序的节名采用以下格式:
tracepoint/<category>/<name>name是跟踪点本身的名称。跟踪点是按类别组织的。您可以用perf list '<category>:*'列出一个类别的所有跟踪点。例如,对于XDP:
$ sudo ./perf list 'xdp:*'
List of pre-defined events (to be used in -e):
xdp:mem_connect [Tracepoint event]
xdp:mem_disconnect [Tracepoint event]
xdp:mem_return_failed [Tracepoint event]
xdp:xdp_bulk_tx [Tracepoint event]
xdp:xdp_cpumap_enqueue [Tracepoint event]
xdp:xdp_cpumap_kthread [Tracepoint event]
xdp:xdp_devmap_xmit [Tracepoint event]
xdp:xdp_exception [Tracepoint event]
xdp:xdp_redirect [Tracepoint event]
xdp:xdp_redirect_err [Tracepoint event]
xdp:xdp_redirect_map [Tracepoint event]
xdp:xdp_redirect_map_err [Tracepoint event]这个追踪点是什么?
,我想在上面知道,这是一个钩子,对于哪个内核函数
您可以获得关于该跟踪点的以下信息:
$ cat /sys/kernel/debug/tracing/events/xdp/xdp_devmap_xmit/format
name: xdp_devmap_xmit
ID: 467
format:
field:unsigned short common_type; offset:0; size:2; signed:0;
field:unsigned char common_flags; offset:2; size:1; signed:0;
field:unsigned char common_preempt_count; offset:3; size:1; signed:0;
field:int common_pid; offset:4; size:4; signed:1;
field:int map_id; offset:8; size:4; signed:1;
field:u32 act; offset:12; size:4; signed:0;
field:u32 map_index; offset:16; size:4; signed:0;
field:int drops; offset:20; size:4; signed:1;
field:int sent; offset:24; size:4; signed:1;
field:int from_ifindex; offset:28; size:4; signed:1;
field:int to_ifindex; offset:32; size:4; signed:1;
field:int err; offset:36; size:4; signed:1;
print fmt: "ndo_xdp_xmit map_id=%d map_index=%d action=%s sent=%d drops=%d from_ifindex=%d to_ifindex=%d err=%d", REC->map_id, REC->map_index, __print_symbolic(REC->act, { 0, "ABORTED" }, { 1, "DROP" }, { 2, "PASS" }, { 3, "TX" }, { 4, "REDIRECT" }, { -1, ((void *)0) }), REC->sent, REC->drops, REC->from_ifindex, REC->to_ifindex, REC->err这个特定的跟踪点将跟踪函数ndo_xdp_xmit的执行情况。
到XDP的链接是什么?
上面的SEC精灵部分让我的ebpf程序成为XDP程序吗?
不,这个节名使您的BPF程序成为一个跟踪点程序。这是一个跟踪程序,它将跟踪XDP接收钩子的执行情况。
如何跟踪内核函数?
我可以为内核中的某些函数定制跟踪点吗?
只为内核中的特定点(如上面的XDP接收钩子)定义了跟踪点。为了能够跟踪大多数内核函数,您可能需要使用k探测BPF程序。
https://stackoverflow.com/questions/70769922
复制相似问题