NXP i.MX8系列平台开发讲解 - 5.5 调试篇 - 掌握perf 工具调试(二)

专栏文章目录传送门返回专栏目录

Hi, 我是你们的老朋友,主要专注于嵌入式软件开发,有兴趣不要忘记点击关注【码思途远】


文章目录

目录

掌握perf 工具调试(二)

1. perf stat 整体性能分析

2. perf record 详细分析

3. 使用 perf annotate 查看热点代码

4. 使用perf top 进行监控

5. 总结


掌握perf 工具调试(二)

根据上一章节了解perf 工具的定义和用法,本章节将以实例进行去使用它,帮助在开发过程中去优化程序代码,让系统能够达到一个最优。

1. perf stat 整体性能分析

使用 perf stat 来获取程序的整体性能统计信息:

perf stat ./hywelstar_perf_demo

从这些统计信息中,我们可以得出以下结论:

  • 程序的总运行时间为 13 秒。

  • CPU 利用率非常高(1.010 CPUs utilized)。

  • 程序产生了 9831 次页面错误(page-faults),这可能是由于内存分配导致的。

  • 每个周期执行了 0.85 条指令,说明存在一定的性能瓶颈。

2. perf record 详细分析

为了进一步定位性能瓶颈,我们使用 perf record 记录程序运行期间的详细性能数据:

perf record -g ./hywelstar_perf_demo

然后使用 perf report 分析记录的数据:

perf report

通过这个reportperf report 中,我们可以看到各个函数的运行时间分布,以及各个函数的调用关系。通过这个工具,我们可以找出哪些函数占用了大部分的CPU时间。 cpu_intensive_task, 原函数确实是在做一些耗时工作。这样就可以进行去优化。

3. 使用 perf annotate 查看热点代码

对于占用大量CPU时间的函数,可以使用 perf annotate 查看这些函数的具体代码执行情况。

perf annotate

从图中将展现热点代码,左边是运行时间的比例,右边的对照的代码,可以通过方向上下移动,查看函数之间的关系。

4. 使用perf top 进行监控

开发过程中可以通过perf top进行实时的性能监控。

perf top -p <pid>

5. 总结

从上面这个例子查看,cpu_intensive_task 函数中,绝大部分时间消耗在以下几条指令上:

  • cvtsi2sdq 指令:将整数转换为双精度浮点数。

  • comisd 指令:比较两个双精度浮点数。

这种类型的任务是计算密集型的,优化方法包括:

  • 减少不必要的浮点数转换:检查算法是否可以优化,减少或避免浮点数的使用。

  • 并行化计算:如果可能,可以使用多线程或SIMD指令集来并行处理这些计算任务。

在实际开发过程中,优化也需要去查看自身的代码涉及性能相关的问题,一般来说通过perf 工具可以轻松的找到相关的问题,另外还可以通过生成火焰图进行更加直观得找到问题的位置。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码思途远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值