489|0

66

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

《奔跑吧Linux内核(第2版)卷2:调试与案例分析》- 使用perf工具来进行性能分析 [复制链接]

本帖最后由 maskmoo 于 2024-4-13 21:04 编辑

Perf(Performance Counters for Linux)是一个在Linux系统上进行性能分析的工具,它利用了处理器的性能计数器和其他硬件特性来收集和分析系统和应用程序的性能数据。使用Perf可以了解程序的运行时间、CPU利用率、内存访问模式等信息,从而找出性能瓶颈并进行优化。

安装perf工具:通常,Perf工具包含在Linux内核中,但你可能需要安装额外的调试工具包才能使用完整功能。你可以通过以下命令来安装perf工具及其相关的调试工具

sudo apt update
sudo apt install linux-tools-common linux-tools-generic

验证安装:安装完成后,你可以通过运行以下命令来验证Perf是否正确安装:

perf --version

这将显示Perf工具的版本信息,确认安装成功。

使用Perf进行性能分析:一旦安装完成,你可以使用Perf对程序或系统进行性能分析。以下是一些常用的Perf命令示例:

  • perf stat:用于显示程序运行时的统计信息,如CPU周期、缓存命中率等。
  • perf record:用于记录程序执行过程中的性能数据。
  • perf report:用于分析并生成性能数据的报告。
  • perf top:类似于top命令,用于实时监视系统中消耗CPU资源最多的进程。

全部命令:

 

编写一个简单的测试程序

#include <stdio.h>
#include <stdlib.h>
void foo()
{
int i,j;
for(i=0; i< 10; i++)
j+=2;
}
int main(void)
{
int i;
for(i = 0; i< 100000000; i++)
foo();
return 0;
}

编译完成后通过perf统计运行时间:

perf stat ./test

 

增加sudo权限

 

通过record记录程序的性能数据,然后使用report来分析记录的数据

perf record ./test
perf report ./test

 

 

 

 

perf top查看系统相关资源消耗情况

 

 

采集 perf 数据生成火焰图

火焰图是一种用于可视化软件程序的性能数据的图形化工具,由性能专家Brendan Gregg开发。它以直观的方式展示了程序在执行过程中的函数调用关系和时间消耗,能够帮助开发人员快速定位性能瓶颈。

火焰图的基本原理是将程序的执行栈信息按照时间顺序进行堆叠,并通过不同颜色的矩形条来表示每个函数在整个执行过程中所占用的时间比例。这样就可以通过火焰图直观地看出哪些函数占用了大量的执行时间。

可以从GitHub上获取其源代码,并按照文档进行安装和使用:

git clone https://github.com/brendangregg/FlameGraph.git

 实验平台的虚拟机里runninglinuxkernel 代码里已经提前下载好了这个项目代码,接下来结合Perf工具来收集程序的性能数据,并使用火焰图来可视化这些数据,具体步骤如下:

cd /home/rlk/rlk/runninglinuxkernel_5.0/kmodules/rlk_lab/rlk_basic/chapter_12_debug/l
ab12_flame_graph
  1. 编译 test 测试程序
  2. 运行 perf record 来收集数据 test 测试程序的数据,运行一段时间即可,然后按“ctrl+c”键终止收集数据
  3. 使用 perf script 命令对 perf 数据进行解析
  4. 将 perf.unfold 中的符号进行折叠
  5. 最后生成 svg 图

 

 

 

最终生成的火焰图:

 

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表