2025-02-13
trace-cmd
是一个用于控制Linux
内核跟踪工具ftrace
的命令行工具。ftrace
是Linux
内核内置的跟踪框架,能够帮助开发者调试和分析内核行为。trace-cmd
简化了ftrace
的使用,提供了更友好的接口来配置、启动、停止和查看跟踪数据。
记录跟踪数据:通过trace-cmd record
命令,可以捕获内核事件、函数调用等跟踪信息。
查看跟踪数据:使用trace-cmd report
命令,可以解析和显示记录的跟踪数据。
启动/停止跟踪:通过trace-cmd start
和trace-cmd stop
命令,可以控制跟踪的开始和结束。
配置跟踪选项:支持设置事件、过滤器、缓冲区大小等参数。
sudo apt install trace-cmd
record - 将跟踪信息记录到`trace.dat`文件中
set - 设置`ftrace`配置参数
start - 开始跟踪,但不将信息记录到文件中
extract - 从内核中提取跟踪信息
stop - 停止内核记录跟踪数据
restart - 重新启动内核跟踪数据记录
show - 显示内核跟踪缓冲区的内容
reset - 禁用所有内核跟踪并清除跟踪缓冲区
clear - 清除跟踪缓冲区
report - 读取存储在`trace.dat`文件中的跟踪信息
stream - 开始跟踪并直接读取输出
profile - 开始性能分析并直接读取输出
hist - 显示`trace.dat`信息的直方图
stat - 显示正在运行的跟踪(ftrace)系统的状态
split - 将 trace.dat 文件解析为更小的文件
options - 列出可用于`trace-cmd report`的插件选项
listen - 在网络套接字上监听跟踪客户端
agent - 在虚拟套接字上监听跟踪客户端
setup-guest - 为跟踪来宾虚拟机创建 FIFO 文件
list - 列出可用的事件、插件或选项
restore - 恢复崩溃的记录
snapshot - 对正在运行的跟踪进行快照
stack - 输出、启用或禁用内核堆栈跟踪
check-events - 解析跟踪事件格式
dump - 从跟踪文件中读取元数据
attach - 将主机和来宾的`trace.dat`文件关联起来
convert - 将跟踪文件转换为不同的版本
记录跟踪数据: trace-cmd record -e sched_switch
记录指定进程数据: trace-cmd record -P <pid> -e kmem_cache_free
追踪kmem_cache_free
函数并输出函数调用图:trace-cmd record -p function_graph -g kmem_cache_free -O funcgraph-proc
查看跟踪数据: trace-cmd report
gnome-shell-1468 [002] 61057.636462: sched_switch: gnome-shell:1468 [120] S ==> swapper/2:0 [120]
<idle>-0 [002] 61057.730187: sched_switch: swapper/2:0 [120] R ==> kworker/2:2:47656 [120]
kworker/2:2-47656 [002] 61057.730217: sched_switch: kworker/2:2:47656 [120] I ==> swapper/2:0 [120]
<idle>-0 [006] 61057.730364: sched_switch: swapper/6:0 [120] R ==> kworker/6:3:417 [120]
kworker/6:3-417 [006] 61057.730429: sched_switch: kworker/6:3:417 [120] I ==> kcompactd0:79 [120]
<idle>-0 [004] 61057.730451: sched_switch: swapper/4:0 [120] R ==> kworker/u21:9:50084 [120]
kcompactd0-79 [006] 61057.730525: sched_switch: kcompactd0:79 [120] S ==> swapper/6:0 [120]
更直观的显示trace.dat
的数据:trace-cmd hist
启动跟踪:trace-cmd start -e irq_handler_entry
停止跟踪:trace-cmd stop
显示信息:trace-cmd show
# /sys/kernel/debug/tracing/trace
...
<idle>-0 [005] d.h1. 61307.455484: irq_handler_entry: irq=19 name=enp0s3
<idle>-0 [005] d.h1. 61307.474852: irq_handler_entry: irq=19 name=ehci_hcd:usb2
<idle>-0 [005] d.h1. 61307.474897: irq_handler_entry: irq=19 name=enp0s3
<idle>-0 [005] d.h1. 61307.476283: irq_handler_entry: irq=19 name=ehci_hcd:usb2
...
希望上面的内容对你有所帮助。