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

时间:2017-08-10 15:50:03

标签: linux-kernel ftrace kprobe

在Linux内核中提供kprobe事件支持ftrace时使用跟踪点事件的用例有哪些?似乎使用“跟踪点事件”可以使用kprobe事件完成所有可能的事情,因为可以在跟踪点事件可用的同一点设置kprobe事件。

我错过了什么吗?

1 个答案:

答案 0 :(得分:6)

由于kprobes跟踪任意函数,依赖它们的工具可能很容易从一个Linux版本突破到下一个版本。例如,可以更改函数的名称或其参数之一,或者可以删除整个函数。这种变化经常发生,可能会破坏基于kprobe的工具。

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

# 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