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列的数据都比较高(飙红),说明该进程或函数存在资源消耗过高的情况,可按回车键展开该进程查看调用情况,如下图所示:![perf report数据分析示例]()
图中从上至下表明 CPU 占用较高进程的函数调用层级关系,可以发现,CPU 占用较高的原因是使用 ipc 库时出现了读写锁死锁。
- 首先,登录 iECU 终端,使用
3 参考
- perf Examples
- perf: Linux profiling with performance counters
- Linux kernel profiling with perf
