type
status
date
slug
summary
tags
category
created days
new update day
icon
password
Created_time
Jan 6, 2023 09:15 AM
Last edited time
Mar 1, 2025 01:50 AM
跟踪点是内核代码的静态标记,可用于将代码附加在运行的内核中。跟踪点跟 kprobes 的主要区别在于跟踪点由内核开发人员在内核中编写和修改。这就是我们将跟踪点称作静态的原因。由于跟踪点是静态存在的,所以跟踪点的 ABI更稳定。内核保证旧版本上跟踪点将在新版本上存在。但是,考虑到跟踪点添加是由内核开发人员添加的,所以跟踪点可能并不会涵盖到内核的所有子系统。
通过查看
/sys/kernel/debug/tracing/events
目录下的内容可以查看系统中所有可用的跟踪点。例如查看 BPF 可用的所有的跟踪点:
编写使用跟踪点的 BPF 程序与编写 kprobes 跟踪程序类似。下面的示例是使用 BPF 程序跟踪系统中加载的其他 BPF 程序:
example.py
程序的主要区别是:不是将程序附加到
kprobe
上,而是将其附加到跟踪点上。BCC 遵循追踪点命名约定,首先是指定要跟踪的子系统,这里是 syscalls:
,然后是子系统中的跟踪点 sys_enter_bpf
。这意味着每次内核执行 sys_enter_bpf
函数时,该程序将会收到该事件,并打印执行 sys_enter_bpf
指令的应用程序名称。内核探针和跟踪点提供了对内核的完全访问。由于跟踪点更加安全,我们推荐尽可能使用跟踪点,当然这不是强制的。在某些场景下,我们也需要利用内核探针的动态性质。
运行结果展示
结果分析
分析一下 update 程序的源码,可以看到在代码里面首先是加载 bpf 对象(第一次进入 bpf ),然后是更新对应键的值(第二次进入 bpf)与上面的运行结果一致。
- 作者:tangcuyu
- 链接:https://expoli.tech/articles/2023/01/06/bpf-example-program-tracepoint
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章