0%

Linux Perf性能优化工具使用说明

0 前言

Perf工具是随 Linux 内核一起发布的系统级性能调优工具,官网Wiki对 Perf 工具做了详细介绍。

1 背景

在工作中开发车道线融合模块CtApLaneFusion时曾经出现过偶发的模块卡死的情况,通过查阅资料,使用 Perf 工具排查出了问题所在。

2 实践

通过 Linux top命令查看时发现,CtApLaneFusion进程 CPU 占用率很高。使用 Perf 工具排查具体原因:

  • 从整体视角查看当前 iECU 各进程运行状态,登录 iECU 终端,输入
    1
    perf top
  • 记录并分析指定进程的调用情况及资源使用情况

    • 首先,登录 iECU 终端,使用top命令查看CtApLaneFusion模块所在进程的 PID
      1
      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 库时出现了读写锁死锁。

3 参考

  1. perf Examples
  2. perf: Linux profiling with performance counters
  3. Linux kernel profiling with perf
Thank you for your donate!