ftrace 是 Linux 内核中的一个强大的跟踪工具,用于分析和调试内核行为。以下是 ftrace 的主要使用方法和配置说明。
基本概念
Tracer: ftrace 提供了多种跟踪器,如 function、function_graph、irqsoff 等
Trace events: 内核中预定义的静态跟踪点
Filter: 可以设置过滤器来限制跟踪的范围
Buffer: 跟踪数据存储在环形缓冲区中
准备工作
确保系统支持 ftrace:
1 | grep CONFIG_FTRACE /boot/config-$(uname -r) |
挂载 debugfs(通常已自动挂载):
1 | mount -t debugfs none /sys/kernel/debug |
基本使用步骤
切换到 tracing 目录:
1 | cd /sys/kernel/debug/tracing |
查看可用跟踪器:
1 | cat available_tracers |
设置当前跟踪器(例如 function_graph):
1 | echo function_graph > current_tracer |
开始/停止跟踪:
1 | echo 1 > tracing_on # 开始 |
查看跟踪结果:
1 | cat trace |
常用跟踪器
function: 函数调用跟踪
function_graph: 函数调用图,显示调用关系
blk: 块设备 I/O 跟踪
irqsoff: 跟踪中断禁用时间
wakeup: 跟踪最高优先级任务被唤醒的延迟
过滤设置
设置要跟踪的函数:
1 | echo sys_read > set_ftrace_filter |
示例用法
跟踪系统调用 open 的执行路径:
bash
echo function_graph > current_tracer
echo SyS_open > set_ftrace_filter
echo 1 > tracing_on
执行一些操作
echo 0 > tracing_on
cat trace
跟踪进程调度:
bash
echo ‘sched:*’ > set_event
echo 1 > tracing_on
观察调度行为
echo 0 > tracing_on
清理
使用完毕后,建议重置 ftrace:
bash
echo 0 > tracing_on
echo nop > current_tracer
echo > set_ftrace_filter
echo > set_event
图形化工具
对于更复杂的分析,可以考虑使用以下工具:
trace-cmd: 命令行工具,提供更友好的接口
KernelShark: GUI 工具,可视化 ftrace 数据
ftrace 是一个功能强大的工具,通过组合不同的跟踪器和过滤器,可以深入分析内核行为,诊断性能问题和异常情况。
- 本文作者: crazyboy
- 本文链接: http://crazyboy.www.crazyboy.info/blog/blog/2025/04/08/it/kernel/ftrace/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!