0 前言
Perf工具是随 Linux 内核一起发布的系统级性能调优工具,官网和Wiki对 Perf 工具做了详细介绍。
1 背景
在工作中开发车道线融合模块CtApLaneFusion
时曾经出现过偶发的模块卡死的情况,通过查阅资料,使用 Perf 工具排查出了问题所在。
2 实践
通过 Linux top
命令查看时发现,CtApLaneFusion
进程 CPU 占用率很高。使用 Perf 工具排查具体原因:
- 从整体视角查看当前 iECU 各进程运行状态,登录 iECU 终端,输入
1
perf top
记录并分析指定进程的调用情况及资源使用情况
- 首先,登录 iECU 终端,使用
top
命令查看CtApLaneFusion
模块所在进程的 PID1
top
- 然后,记录 perf 数据。
-p
后指定的为 PID 号,sleep
后指定的为数据记录持续时间(s),数据文件名称默认为perf.data
,保存在打开终端的目录下,应注意--
与sleep
间有空格符1
perf record -e cpu-clock -g -p 3729 -- sleep 120
最后,分析 perf 数据
1
perf report
可将 perf 数据文件拷贝至台架 iECU 的任意目录进行离线分析,
Self
是最后一列的符号(可以理解为函数)本身所占比例,Self
列所有数据的和为 100%,Children
是这个符号调用的其它符号(可以理解为子函数,包括直接和间接调用)占用的比例之和。若Children
列和Self
列的数据都比较高(飙红),说明该进程或函数存在资源消耗过高的情况,可按回车键展开该进程查看调用情况,如下图所示:图中从上至下表明 CPU 占用较高进程的函数调用层级关系,可以发现,CPU 占用较高的原因是使用 ipc 库时出现了读写锁死锁。
- 首先,登录 iECU 终端,使用
3 参考
- perf Examples
- perf: Linux profiling with performance counters
- Linux kernel profiling with perf