在ftrace支持kprobes之后,Linux内核中的跟踪点是否是多余的?

9

当Linux内核中已经支持ftrace的kprobe事件时,使用tracepoint事件有哪些用例呢?似乎所有可以使用“tracepoint事件”完成的操作都可以使用kprobe事件完成,因为可以在与tracepoint事件相同的位置设置kprobe事件。

我是否漏掉了什么?

1个回答

16

由于kprobes可以跟踪任意函数,依赖它们的工具可能会在Linux版本之间轻易地出现问题。例如,函数的名称或其参数之一可能会更改,或者整个函数可能会被删除。这种变化经常发生,可能会破坏基于kprobe的工具。

相反,tracepoints更加稳定。它们应该保持大致相同并提供相同的信息。此外,它们是有文档记录的;您可以在/sys/kernel/debug/tracing中找到tracepoints提供的信息类型和位置:

# cat /sys/kernel/debug/tracing/events/skb/kfree_skb/format 
name: kfree_skb
ID: 1122
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:void * skbaddr;   offset:8;   size:8; signed:0;
    field:void * location;  offset:16;  size:8; signed:0;
    field:unsigned short protocol;  offset:24;  size:2; signed:0;

print fmt: "skbaddr=%p protocol=%u location=%p", REC->skbaddr, REC->protocol, REC->location

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接