首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在"xdp“(”tracepoint/xdp/ xdp_devmap_xmit“)中,”xdp_devmap_xmit是什么--这是否意味着为某些内核函数设置陷阱处理程序代码?“

在"xdp“(”tracepoint/xdp/ xdp_devmap_xmit“)中,”xdp_devmap_xmit是什么--这是否意味着为某些内核函数设置陷阱处理程序代码?“
EN

Stack Overflow用户
提问于 2022-01-19 11:37:06
回答 1查看 294关注 0票数 1

我有一个带精灵部分功能的ebpf xdp程序。

代码语言:javascript
复制
  SEC("tracepoint/xdp/xdp_devmap_xmit")

在上面我想知道的是,这是一个钩子,哪个内核函数是tracepoint/xdp/xdp_devmap_xmit

  • 是什么?

所以问题是

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

因此,如果它是正确的,那么在tracepoint/中的tracepoint/xdp/xdp_devmap_xmit中,还有哪些其他选项可用。我可以看到xdptracepoint/中显然是可用的,因为tracepoint/[xdp]/xdp_dexmap_xmit显然是可用的,还有一些示例程序可以使用,请大家解释一下,在tracepoint/中还有哪些选项可用呢?我可以在内核中为我的某些函数定制跟踪点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-19 16:48:51

章节名称指的是什么?

和什么是tracepoint/xdp/xdp_devmap_xmit

tracepoint/xdp/xdp_devmap_xmit是这个BPF程序的ELF部分的名称。加载程序(这里是libbpf)将使用这个节名来知道它是哪种BPF程序类型,在本例中是在哪里附加它。

tracepoint类型的BPF程序的节名采用以下格式:

代码语言:javascript
复制
tracepoint/<category>/<name>

name是跟踪点本身的名称。跟踪点是按类别组织的。您可以用perf list '<category>:*'列出一个类别的所有跟踪点。例如,对于XDP:

代码语言:javascript
复制
$ 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]

这个追踪点是什么?

,我想在上面知道,这是一个钩子,对于哪个内核函数

您可以获得关于该跟踪点的以下信息:

代码语言:javascript
复制
$ 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程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70769922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档