在 "xdp ebpf SEC("tracepoint/xdp/xdp_devmap_xmit")" 什么是 xdp_devmap_xmit -- 这个跟踪是否意味着某些内核函数的陷阱处理程序代码启动

In "xdp ebpf SEC("tracepoint/xdp/xdp_devmap_xmit")" what is xdp_devmap_xmit -- is this trace means trap handler code start for some kernel function

我有 ebpf xdp 程序,其功能带有 elf 部分

  SEC("tracepoint/xdp/xdp_devmap_xmit")
  1. 我想知道上面是哪个内核函数的钩子
  2. 什么是tracepoint/xdp/xdp_devmap_xmit

所以问题是

上面的 SEC elf 部分是否使我的 ebpf 程序成为 XDP 程序?

所以如果它是真的那么在 tracepoint/ 里面 tracepoint/xdp/xdp_devmap_xmit 还有哪些其他选项可用。我可以看到 xdp 显然在 tracepoint/ 中可用,因为 tracepoint/[xdp]/xdp_dexmap_xmit 显然可用并且那里有示例程序和 |谁能解释一下 tracepoint/ 中还有哪些选项可用?我可以制作自定义跟踪点吗 对于我在内核中的一些功能

章节名称指的是什么?

and what is 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]

这个跟踪点是什么?

I like to know in above is this a hook for which kernel function

您可以通过以下方式获取有关该跟踪点的信息:

$ 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 的 link 是什么?

does this above SEC elf section makes my ebpf program an XDP program?

不,此部分名称使您的 BPF 程序成为跟踪点程序。这是一个跟踪点程序,将跟踪 XDP 的接收挂钩的执行。

如何跟踪内核函数?

can I make custom tracepoint for my some function in kernel

跟踪点仅为内核中的特定点定义(例如上面的 XDP 接收挂钩)。为了能够跟踪大多数内核函数,您可能需要使用 kprobes BPF 程序。