系统性能分析工具:perf

perf是Linux的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。

系统性能优化通常可以分为两个阶段:性能分析和性能优化。

性能分析的目的是查找性能瓶颈、热点代码,分析引发性能问题的原因;

基于性能分析,可以进行性能优化,包括:算法优化(空间复杂度和时间复杂度的权衡)和代码优化(提高执行速度、减少内存占用)。

1、perf的原理

Linux性能计数器是一个基于内核的子系统,它提供一个性能分析框架,比如硬件(CPU、PMU(PerformanceMonitoringUnit))功能和软件(软件计数器、tracepoint)功能。

通过perf,应用程序可以利用PMU、tracepoint和内核中的计数器来进行性能统计。

Perf可以对程序进行函数级别的采样,从而了解程序的性能瓶颈在哪里。其基本原理是:每隔一个固定时间,就是CPU上产生一个中断,看当前是哪个进程、哪个函数,然后给对应的进程和函数加一个统计值,这样就知道CPU有多少时间在某个进程或某个函数上了。

2、perf的安装

在终端输入下面命令即可:

sudoaptinstalllinux-tools-commonlinux-tools-genericlinux-tools-`uname-r`
3、top的使用

top命令也是Linux下的性能分析工具,能够实时显示系统中各个进程的资源占用状况。

使用perf之前,可以先用top命令查看指定进程(xxx)的CPU占用率是否异常,命令如下:

top-p`psaux|grep"xxx"|grep-vgrep|cut-c9-15`-d1-b

上面命令的含义是通过top查看指定进程(xxx)的整体运行情况,其中,

top-p:指定进程

top-d1:指定屏幕刷新时间,1s刷新一次

top-b:表示以批处理模式操作

psaux:列出所有进程

grep:查找指定进程

grep-v:反向查找

cut-c9-15:选择每行指定列的字符

4、perf的使用

使用perf进行性能分析,主要使用下面两个命令:

perfrecord:保存perf追踪的内容,文件名为

perfreport:解析的内容

比如要分析进程xxx,启动该进程后,首先启动使用下面命令:

sudoperfrecord-a--call-graphdwarf-p`psaux|grep"xxx"|grep-vgrep|cut-c9-15`

其中,

-a:表示对所有CPU采样

--call-graphdward:表示分析调用栈的关系

-p:表示分析指定的进程

通过Ctrl+C结束后,会生成文件,然后通过report导出报告,即可以查看main函数和子函数的CPU平均占用率。

5、perf使用示例

比如,有下面一段代码。

includecmathusingnamespacestd;voidfor_loop(){for(inti=0;i1000;i++){for(intj=0;j10000;j++){intx=sin(i)+cos(j);}}}voidloop_small(){for(inti=0;i10;i++){for_loop();}}voidloop_big(){for(inti=0;i100;i++){for_loop();}}intmain(){loop_big();loop_small();return0;}

其中,

for_loop()是一个两层循环,每次都要计算正弦和余弦的和,这是一个比较耗时的函数;

loop_small()把for_loop()循环10次;

loop_big()把for_loop()循环100次。

可以明显看出main()函数中loop_big()函数会占大部分CPU,下面通过perf命令验证下。

1)假设指定可执行文件的名称为“perf_for”,

g++perf__for

2)运行perf_for之后,启动perfrecord:

sudoperfrecord-a--call-graphdwarf-p`psaux|grep"perf_for"|grep-vgrep|cut-c9-15`-d1-b

3)结束后,通过perfreport导出报告:

如下图所示,可以看出main函数90%的CPU都花在loop_big()函数上。

优化时就可以考虑:

首先考虑优化for_loop()函数,主要是sin和cos的计算;

若for_loop()函数无法优化,就考虑优化loop_big(),比如减少for_loop()函数的调用次数。

版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。

相关推荐