kernel/trace 内核追踪(ftrace/tracing)机制与原理详解

kernel/trace 内核追踪(ftrace/tracing)机制与原理详解

源码路径rk3588/kernel-6.1/kernel/trace/
内核版本:Linux 6.1(RK3588 平台)
平台:RK3588(4×Cortex-A76 + 4×Cortex-A55 big.LITTLE,ARM64)

该目录实现 Linux 内核 ftrace / tracing 子系统:函数追踪、tracepoint 事件、延迟分析、动态探针(kprobe/uprobe)、BPF 挂载、块 I/O 追踪、Runtime Verification 等。数据经 per-CPU ring buffer 缓冲,通过 tracefs/sys/kernel/debug/tracing/)对用户空间暴露控制与读取接口。

定位:内核可观测性核心;tracepoint 定义分散于各子系统 include/trace/events/,架构 ftrace 入口在 arch/arm64/kernel/ftrace.centry-common.S


目录


一、追踪子系统概览

Linux tracing 解决「在不改内核源码的前提下,观测内核运行时行为」:

能力 机制 典型用途
函数追踪 mcount/fentry + dynamic ftrace 调用链、性能热点
静态事件 TRACE_EVENT tracepoint sched、irq、block、power
动态探针 kprobe/uprobe 任意内核/用户函数探测
延迟分析 irqsoff/wakeup/hwlat tracer 实时性、中断延迟
BPF bpf_trace.c 可编程追踪、perf 集成
聚合 hist trigger + tracing_map 直方图、延迟分布

设计原则:写路径 per-CPU 无锁;关闭 tracing 时 dynamic ftrace patch 为 NOP,接近零开销。


二、源码目录结构

2.1 Kconfig 依赖树

1
2
3
4
5
6
7
8
9
10
11
12
TRACING_SUPPORT
└── FTRACE (menuconfig "Tracers")
├── RING_BUFFER ← 环形缓冲区
├── TRACING ← trace.c 核心框架
├── FUNCTION_TRACER ← ftrace.c 函数追踪
├── EVENT_TRACING ← trace_events.c
├── KPROBE_EVENTS ← trace_kprobe.c
├── UPROBE_EVENTS ← trace_uprobe.c
├── BPF_EVENTS ← bpf_trace.c
├── HIST_TRIGGERS ← trace_events_hist.c
├── FPROBE / RETHOOK ← fprobe.c / rethook.c
└── RV ← rv/ 运行时验证

2.2 编译依赖(Makefile)

1
2
3
4
5
6
7
8
9
obj-$(CONFIG_FUNCTION_TRACER) += libftrace.o          # ftrace.c
obj-$(CONFIG_RING_BUFFER) += ring_buffer.o
obj-$(CONFIG_TRACING) += trace.o trace_output.o trace_seq.o ...
obj-$(CONFIG_EVENT_TRACING) += trace_events.o trace_events_filter.o ...
obj-$(CONFIG_KPROBE_EVENTS) += trace_kprobe.o
obj-$(CONFIG_BPF_EVENTS) += bpf_trace.o
obj-$(CONFIG_FPROBE) += fprobe.o
obj-$(CONFIG_RETHOOK) += rethook.o
obj-$(CONFIG_RV) += rv/

注意ccflags-remove-$(CONFIG_FUNCTION_TRACER) += $(CC_FLAGS_FTRACE) — trace 目录自身 不被 ftrace 插桩,避免递归。

2.3 源文件分类

分类 主要文件 说明
核心 trace.c, trace.h tracefs、tracer 管理、读写迭代器
存储 ring_buffer.c per-CPU 环形缓冲区
ftrace ftrace.c, fgraph.c dynamic patch、filter、function graph 辅助
输出 trace_output.c, trace_seq.c entry → 文本格式化
事件 trace_events.c, trace_events_*.c 注册、filter、trigger、hist
Tracer trace_functions*.c, trace_irqsoff.c, … 各 tracer 插件
探针 trace_kprobe.c, trace_uprobe.c, trace_probe.c 动态 event
BPF bpf_trace.c BPF 挂载 tracepoint/kprobe
钩子 fprobe.c, rethook.c 基于 ftrace 的 entry/exit 探针
RV rv/rv.c, rv/monitors/ 运行时形式化验证
辅助 trace_clock.c, pid_list.c, trace_boot.c 时钟、PID 过滤、启动 tracing

三、Kconfig 与 RK3588 默认配置

3.1 关键配置项

配置项 默认 说明
CONFIG_FUNCTION_TRACER 架构 select 函数入口插桩
CONFIG_DYNAMIC_FTRACE y 运行时 NOP ↔ call patch
CONFIG_DYNAMIC_FTRACE_WITH_REGS ARM64 y 回调可获 pt_regs
CONFIG_FUNCTION_GRAPH_TRACER y 函数调用图 + 耗时
CONFIG_EVENT_TRACING FUNCTION_TRACER 时 tracepoint 框架
CONFIG_KPROBE_EVENTS y(KPROBES) 动态 kprobe event
CONFIG_UPROBE_EVENTS y(ARM64) 用户态探针
CONFIG_BPF_EVENTS BPF+PERF BPF 程序挂载
CONFIG_FPROBE n 轻量 ftrace 探针
CONFIG_RV n Runtime Verification

3.2 RK3588 defconfig

arch/arm64/configs/rockchip_linux_defconfig

1
CONFIG_FUNCTION_TRACER=y

ARM64 Kconfig 自动 select:

  • HAVE_FUNCTION_TRACER / HAVE_DYNAMIC_FTRACE
  • HAVE_DYNAMIC_FTRACE_WITH_REGS(GCC/Clang)
  • FTRACE_MCOUNT_USE_PATCHABLE_FUNCTION_ENTRY — 使用 __patchable_function_entries
  • HAVE_FTRACE_MCOUNT_RECORD

启用 FUNCTION_TRACER 后,通常连带启用 DYNAMIC_FTRACEFUNCTION_GRAPH_TRACEREVENT_TRACINGKPROBE_EVENTS 等(Kconfig default y)。


四、整体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌─────────────────────────────────────────────────────────────┐
│ 用户空间: trace-cmd / perf / bpftool / cat trace_pipe │
└──────────────────────────┬──────────────────────────────────┘
│ tracefs (/sys/kernel/debug/tracing)
┌──────────────────────────▼──────────────────────────────────┐
│ trace.c — trace_array / tracer / trace_iterator / instances │
└───┬──────────┬───────────┬──────────┬─────────────────────┘
│ │ │ │
┌───▼───┐ ┌────▼────┐ ┌────▼────┐ ┌───▼──────────┐
│Tracer │ │ Events │ │ ftrace │ │ k/u/e probe │
│Plugins│ │ System │ │ Engine │ │ + BPF │
└───┬───┘ └────┬────┘ └────┬────┘ └───┬──────────┘
└──────────┴───────────┴──────────┘

┌────────────▼────────────┐
│ ring_buffer.c │
│ per-CPU Ring Buffer │
└────────────┬────────────┘

┌────────────▼────────────┐
│ 插桩: mcount/fentry │
│ tracepoint / kprobe │
│ uprobe / BPF / fprobe │
└─────────────────────────┘

数据流:插桩点触发 → ring_buffer_lock_reserve() 预留空间 → 写入 trace_entryring_buffer_unlock_commit() → 用户读 trace/trace_pipeprint_line / event format 格式化。


五、核心数据结构

5.1 trace_entry — 事件通用头

1
2
3
4
5
6
7
struct trace_entry {
unsigned short type; /* enum trace_type */
unsigned char flags;
unsigned char preempt_count;
int pid;
int padding;
};

5.2 trace_type — 内置类型

类型 含义
TRACE_FN 函数调用(function tracer)
TRACE_GRAPH_ENT/RET 函数图入口/返回
TRACE_CTX 上下文切换
TRACE_WAKE 唤醒
TRACE_PRINT trace_printk
TRACE_BLK 块 I/O
TRACE_HWLAT / TRACE_OSNOISE / TRACE_TIMERLAT 延迟/噪声

5.3 trace_array — 追踪实例

1
2
3
4
5
6
7
8
9
10
11
struct trace_array {
char *name;
struct array_buffer array_buffer; /* 主 ring buffer */
struct array_buffer max_buffer; /* 快照/最大延迟 buffer */
struct tracer *current_trace; /* 当前 tracer */
unsigned int trace_flags;
struct list_head events; /* 已注册 event */
struct dentry *dir; /* tracefs 目录 */
cpumask_var_t tracing_cpumask;
/* FUNCTION_TRACER: ftrace_ops, function_enabled */
};
  • 全局实例:top_trace_array() / global_trace_array
  • 子实例:/instances/<name>/ 独立 buffer 与 tracer

5.4 tracer — 插件虚函数表

1
2
3
4
5
6
7
8
9
10
11
12
struct tracer {
const char *name;
int (*init)(struct trace_array *tr);
void (*reset)(struct trace_array *tr);
void (*start)(struct trace_array *tr);
void (*stop)(struct trace_array *tr);
enum print_line_t (*print_line)(struct trace_iterator *iter);
int (*set_flag)(struct trace_array *tr, u32 old, u32 bit, int set);
struct tracer *next;
bool print_max;
bool allow_instances;
};

注册:register_tracer();用户选择:echo xxx > current_tracer


六、Ring Buffer 环形缓冲区

ring_buffer.c(~6234 行)是 tracing 的统一存储引擎。

6.1 设计要点

  • per-CPU buffer:写者只写本 CPU 页链表,无全局写锁
  • Reader page:读者专用页,读完后与 ring 中页 swap
  • 压缩时间戳:5-bit type_len + 27-bit delta;必要时 TIME_EXTEND / TIME_STAMP
  • 嵌套写入:中断/NMI 上下文可嵌套 reserve/commit
  • Splice:已读页可零拷贝传给用户态

6.2 页面模型

1
2
3
4
5
6
reader page          ring pages (per-CPU)
+--------+ +---+ → +---+ → +---+
| 读缓冲 | ←swap→ | | | | | |
+--------+ +---+ +---+ +---+
↑ │
└──────── writer 顺序写入 ──────────┘

6.3 主要 API

函数 功能
ring_buffer_alloc() 分配 per-CPU buffer
ring_buffer_lock_reserve() 预留 event 空间
ring_buffer_unlock_commit() 提交写入
ring_buffer_read() 读取下一 event
ring_buffer_overwrite() 覆盖模式(丢最旧)
ring_buffer_resize() 动态调整 buffer 大小

启动时 buffer 为最小尺寸(ring_buffer_expanded),首次启用 tracing 时扩展,避免空闲占内存。


七、ftrace 函数追踪引擎

7.1 编译期插桩(ARM64)

RK3588 使用 patchable function entries

  • 编译器 -mrecord-mcount-mfentry 在每个函数入口留下可 patch 点
  • __patchable_function_entries / mcount_loc 段记录所有位置
  • 架构代码:arch/arm64/kernel/ftrace.centry-ftrace.S

7.2 Dynamic Ftrace

ftrace.c(~8479 行)核心流程:

  1. Boot:所有插桩点 patch 为 AArch64 NOP(或 branch stub)
  2. Enable:NOP → bl ftrace_caller(或等价指令)
  3. Filterset_ftrace_filter / set_ftrace_notrace hash 表 per-ops 过滤
1
2
3
4
5
struct ftrace_ops *function_trace_op;
ftrace_func_t ftrace_trace_function;

int register_ftrace_function(struct ftrace_ops *ops);
int unregister_ftrace_function(struct ftrace_ops *ops);

ftrace_ops 字段:func 回调、flags(PID 过滤、SAVE_REGS、IPMODIFY 等)、func_hash filter。

7.3 Function Tracer 写入路径

1
2
3
4
5
6
7
some_func()
→ fentry/mcount stub
→ ftrace_caller
→ function_trace_call() [trace_functions.c]
→ ring_buffer_lock_reserve()
→ ftrace_entry { ip, parent_ip }
→ ring_buffer_unlock_commit()

7.4 Function Graph

trace_functions_graph.c + fgraph.c:在 entry 压栈返回地址,return 时弹栈计算 duration,输出缩进调用图。


八、Tracer 插件机制

8.1 已注册 Tracer

Tracer 源文件 功能
nop trace_nop.c 空 tracer,仅 tracepoint
function trace_functions.c 记录函数调用
function_graph trace_functions_graph.c 调用图 + 耗时
irqsoff / preemptoff / preemptirqsoff trace_irqsoff.c 中断/抢占关闭延迟
wakeup / wakeup_rt / wakeup_dl trace_sched_wakeup.c 唤醒延迟
hwlat trace_hwlat.c 硬件延迟(SMI 等)
osnoise / timerlat trace_osnoise.c OS 噪声 / 定时器延迟
branch trace_branch.c likely/unlikely 分支
blk blktrace.c 块 I/O
mmio trace_mmiotrace.c MMIO 访问

8.2 生命周期

1
2
3
4
5
6
7
register_tracer()  [模块 init]
→ echo xxx > current_tracer
→ tracer->init(tr) → tracer->start(tr)
→ ftrace_startup / 注册 tracepoint
... 运行中 print_line 格式化 ...
→ echo nop > current_tracer
→ tracer->stop(tr) → tracer->reset(tr)

8.3 Max Trace / Snapshot

支持 CONFIG_TRACER_MAX_TRACE 的 tracer(irqsoff、wakeup 等):

  • 延迟超过 tracing_max_latency 时 swap 到 max_buffer
  • snapshot 文件手动触发快照
  • trace 读 live 数据;max buffer 保留 worst-case 记录

九、Trace Event 事件系统

9.1 事件定义

静态 tracepoint(各子系统 include/trace/events/*.h):

1
2
3
4
5
6
7
TRACE_EVENT(sched_switch,
TP_PROTO(...),
TP_ARGS(...),
TP_STRUCT__entry(...),
TP_fast_assign(...),
TP_printk(...)
);

内置 ftrace entrytrace_entries.h):

1
FTRACE_ENTRY_REG(function, ftrace_entry, TRACE_FN, ...);

9.2 注册与管理(trace_events.c)

1
2
3
4
5
trace_event_reg()
→ 加入 ftrace_events 链表
→ tracefs: events/<system>/<event>/{enable,format,filter,id}
echo 1 > events/sched/sched_switch/enable
→ tracepoint 注册回调 → 写入 ring buffer

9.3 Filter(trace_events_filter.c)

1
echo 'pid == 1234 && comm == "myapp"' > events/.../filter

表达式编译为 predicate 字节码,写入前求值。

9.4 Trigger(trace_events_trigger.c)

Trigger 动作
snapshot 触发 buffer 快照
stacktrace 记录栈
traceon / traceoff 开关 tracing
enable_event / disable_event 控制其他 event
hist 直方图聚合

9.5 Histogram(trace_events_hist.c + tracing_map.c)

  • 按字段 hash 聚合(pid、comm、latency 桶)
  • onmatch / onmax 跨 event 延迟追踪
  • trace_events_synth.c 合成新 event 类型

9.6 常见 Event 子系统

子系统 典型事件
sched sched_switch, sched_wakeup, sched_waking
irq irq_handler_entry/exit
power cpu_idle, cpu_frequency
block block_rq_issue, block_rq_complete
kmem kmalloc, kfree
syscalls sys_enter/exit_*(trace_syscalls.c

十、动态探针、fprobe 与 BPF

10.1 动态 Event 框架(trace_dynevent.c)

1
2
3
/sys/kernel/debug/tracing/dynamic_events
/sys/kernel/debug/tracing/kprobe_events
/sys/kernel/debug/tracing/uprobe_events
类型 文件 说明
kprobe / kretprobe trace_kprobe.c 内核函数/指令探针
uprobe / uretprobe trace_uprobe.c 用户态探针
eprobe trace_eprobe.c eBPF-based probe
synthetic trace_events_synth.c 运行时合成 event

公共解析:trace_probe.c(参数 fetch、format 生成)。

kprobe 示例

1
2
echo 'p:myprobe do_sys_openat2 dfd=%di filename=%si flags=%dx' >> kprobe_events
echo 1 > events/kprobes/myprobe/enable

10.2 rethook + fprobe

rethook.cCONFIG_RETHOOK):通用函数返回 hook 基础设施,维护 per-task 返回 hook 链表,供 kretprobe/fprobe 复用。

fprobe.cCONFIG_FPROBE):基于 ftrace_ops + rethook 的轻量探针:

  • 支持 entry/exit handler
  • 可一次 probe 多个函数
  • 比 kprobe 开销更低,但仅限函数 entry/exit
1
2
/* fprobe 回调链 */
fprobe_handler() → entry_handler() → rethook_hook() → [函数执行] → exit_handler()

10.3 BPF 集成(bpf_trace.c)

BPF 程序可挂载:

类型 BPF_PROG_TYPE
tracepoint TRACING
kprobe/uprobe KPROBE
fentry/fexit 基于 ftrace
raw tracepoint RAW_TRACEPOINT

Helper:bpf_get_stackidbpf_probe_readbpf_printk 等。与 perf 事件桥接:trace_event_perf.c


十一、Latency 延迟追踪器

11.1 irqsoff / preemptoff(trace_irqsoff.c)

1
2
3
local_irq_disable() → trace_hardirqs_off()   /* 记录起始 */
... 临界区 ...
local_irq_enable() → trace_hardirqs_on() /* 超阈值则 swap max_buffer */

11.2 wakeup latency(trace_sched_wakeup.c)

1
2
try_to_wake_up() → trace_sched_waking()
schedule() → trace_sched_wakeup() /* 计算 wakeup→running 延迟 */

模式:wakeup(CFS)、wakeup_rtwakeup_dl

11.3 hwlat(trace_hwlat.c)

内核线程关中断 spin,检测 SMI/NMI 等 硬件引入的延迟空隙

11.4 osnoise / timerlat(trace_osnoise.c)

  • osnoise:统计 NMI/IRQ/SoftIRQ/线程/hw 各来源噪声
  • timerlat:测量 hrtimer 唤醒延迟,用于 PREEMPT_RT 调优

十二、追踪时钟(trace_clock.c)

时钟 API 特点
local trace_clock_local() 仅本 CPU,sched_clock(),最快
medium trace_clock() local_clock(),跨 CPU 有小 jitter
global trace_clock_global() 全局单调,有序列化开销
mono trace_clock_mono() 单调 boot time
jiffies trace_clock_jiffies() 以 jiffy 为单位

用户设置:echo global > trace_clock

RK3588 跨 CPU 分析建议用 globalmono,避免 big.LITTLE 间 local 时钟不一致。


十三、Runtime Verification(rv/)

rv/ 子目录(~1731 行)实现在线 形式化规范验证

1
2
3
Tracing 插桩 → Monitor 实例 ← Reference Model(规范)

Reaction(printk / panic / 自定义)
1
2
3
4
5
6
struct rv_monitor {
const char *name;
int (*enable)(void);
int (*disable)(void);
};
int rv_register_monitor(struct rv_monitor *monitor);

用户接口:/sys/kernel/debug/tracing/rv/available_monitors

内置 monitor:

Monitor 文件 说明
wip rv/monitors/wip/wip.c Work In Progress 状态
wwnr rv/monitors/wwnr/wwnr.c Wait/Wakeup Not Running

Reaction:reactor_panic.creactor_printk.crv_reactors.c)。


十四、tracefs 用户接口

挂载点:/sys/kernel/debug/tracing/(需 debugfs 挂载)。

14.1 常用控制文件

文件 功能
current_tracer 设置当前 tracer
available_tracers 列出可用 tracer
tracing_on 全局开关 0/1
trace 读追踪数据(读后清空)
trace_pipe 阻塞持续读
buffer_size_kb ring buffer 大小
trace_clock 时钟源
tracing_cpumask 限定 CPU
set_ftrace_filter / set_ftrace_notrace 函数 filter
snapshot 手动快照
tracing_max_latency 最大延迟阈值
events/ event 树
instances/ 独立实例

14.2 快速示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 函数图追踪(含耗时)
echo function_graph > current_tracer
echo funcgraph-abstime > trace_options
echo 1 > tracing_on
cat trace

# sched 事件 + nop tracer
echo 1 > events/sched/sched_switch/enable
echo nop > current_tracer
cat trace_pipe

# 中断关闭最大延迟
echo irqsoff > current_tracer
echo 0 > tracing_max_latency
cat trace

# kprobe
echo 'p:open do_sys_openat2 filename=%si' >> kprobe_events
echo 1 > events/kprobes/open/enable

14.3 启动时 tracing(trace_boot.c)

CONFIG_BOOTTIME_TRACING:通过内核命令行 ftrace= / trace_event= 在 boot 早期启用 tracing,便于启动路径分析。


十五、RK3588/ARM64 平台说明

15.1 架构支持总结

能力 ARM64/RK3588
FUNCTION_TRACER ✓(-mrecord-mcount / patchable entries)
DYNAMIC_FTRACE
DYNAMIC_FTRACE_WITH_REGS ✓(回调默认可获 pt_regs)
FUNCTION_GRAPH_TRACER ✓(default y)
KPROBE / UPROBE
HAVE_GENERIC_VDSO ✓(与 trace 独立,用户态 gettimeofday)

15.2 defconfig 与开销

Rockchip defconfig 显式启用 CONFIG_FUNCTION_TRACER=yDYNAMIC_FTRACE 默认 y,未启用 tracing 时接近零开销(NOP patch)。

15.3 常用调试场景

场景 推荐配置
驱动 probe/初始化 function_graph + set_ftrace_filter 限定驱动符号
调度延迟 wakeup tracer 或 events/sched/sched_wakeup/enable
CPU 频率/idle events/power/cpu_frequency/enable
中断延迟 irqsoff tracer
I/O 性能 events/block/enableblk tracer
多媒体 pipeline function_graph + tracepoint dma_fence
实时性评估 osnoise / timerlat

15.4 big.LITTLE 注意点

  • tracing_cpumask 限定 A76 或 A55 簇,减少交叉 CPU 噪声
  • trace_clockglobal/mono 保证跨核时间戳可比
  • 8 核建议 buffer_size_kb ≥ 4096,避免 function tracer 溢出
  • deep idle 时部分 little 核 clockevent 停,tracing 本身不依赖 periodic tick,但 hwlat/osnoise 测试需考虑 CPU 隔离

15.5 与 perf 的关系

  • perf 可复用 tracepoint(trace_event_perf.c
  • perf record -e sched:* 与 ftrace events 共享底层 tracepoint
  • BPF 程序可通过 bpf_trace.c 同时服务 tracing 与 perf

十六、完整追踪时序

内核函数ring_bufferftrace (ftrace.c)tracefs (trace.c)用户空间内核函数ring_bufferftrace (ftrace.c)tracefs (trace.c)用户空间per-CPU 无锁写入echo function > current_tracerecho 1 > tracing_onftrace_startup(ops)NOP → call ftrace_caller (dynamic patch)函数入口 mcount/fentrylock_reserve → ftrace_entry → commitcat trace_pipetrace_iterator 遍历print_line 格式化输出

十七、总结

要点 说明
Ring Buffer per-CPU 无锁存储,tracing 数据中枢
Dynamic ftrace 关闭时 NOP,启用时 patch,ARM64 patchable entries
Tracer 插件 struct tracer 扩展,覆盖函数/延迟/I/O
Trace Event tracepoint/kprobe/synthetic 统一框架 + filter/trigger/hist
fprobe/rethook 轻量 entry/exit 探针基础设施
tracefs 标准用户态控制面
RK3588 FUNCTION_TRACER + dynamic ftrace + graph;8 核 big.LITTLE 需注意 clock/buffer

kernel/trace 是内核开发、驱动调试、调度分析与实时性评估的核心工具链;与 perfBPFdebugfs 深度集成。


附录:源文件清单

文件 行数 分类
trace.c 10493 核心框架
ftrace.c 8479 ftrace 引擎
trace_events_hist.c 6757 直方图 trigger
ring_buffer.c 6234 环形缓冲区
trace_events.c 4112 事件框架
bpf_trace.c 2838 BPF 集成
trace_events_filter.c 2475 Event 过滤
trace_osnoise.c 2444 OS 噪声 / timerlat
trace_events_synth.c 2351 合成事件
trace_kprobe.c 2133 kprobe event
trace_events_trigger.c 1984 Event trigger
trace_events_user.c 1922 用户 event
blktrace.c 1922 块 I/O tracer
trace_uprobe.c 1675 uprobe event
trace_output.c 1583 输出格式化
trace_functions_graph.c 1367 函数图 tracer
trace_selftest.c 1287 自测
trace_probe.c 1234 探针公共代码
tracing_map.c 1139 无锁 hash map
trace_eprobe.c 1095 eprobe
trace_functions.c 974 function tracer
trace_hwlat.c 893 hwlat tracer
trace_sched_wakeup.c 820 wakeup tracer
trace_syscalls.c 808 syscall 事件
rv/rv.c 801 RV 框架
trace_irqsoff.c 752 irqsoff tracer
trace_boot.c 671 启动 tracing
fgraph.c 664 function graph 辅助
trace_stack.c 582 栈深度 tracer
trace_event_perf.c 529 perf 桥接
trace_dynevent.c 483 动态 event 控制
trace_branch.c 455 branch tracer
trace_seq.c 405 序列化输出
trace_printk.c 400 trace_printk
trace_stat.c 364 统计输出
trace_mmiotrace.c 362 MMIO tracer
rethook.c 346 返回 hook
fprobe.c 334 fprobe 探针
trace_events_inject.c 335 event 注入
pid_list.c 495 PID 过滤
trace_clock.c 158 追踪时钟
trace_nop.c 100 nop tracer
rv/rv_reactors.c 510 RV reaction
其他测试/辅助 ~3000 selftest、benchmark 等
合计(含 rv/) 83027 81 个 .c/.h 文件

行数统计:Linux 6.1,find kernel/trace -name '*.c' -o -name '*.h' | xargs wc -l

文章互动

阅读 --

留言

0 条留言

正在加载留言…