VTune性能分析器简介

原文地址:http://blog.sina.com.cn/s/blog_704f9d530100pzu3.html

7.2.1 VTune简介

Intel VTune性能分析器即Intel? VTune? Performance Analyzer可以帮助程序员定位并定性程序中与性能有关方面的内容。

Intel? VTune性能分析器也可以在程序运行的系统平台上自动收集性能数据,并将所获得的性能数据在各个不同的层次,大到系统层,小到程序源代码级,甚至可以到处理器指令集,进行不同粒度的交互式可视化,帮助查找可能的性能瓶颈,并提供可能的解决方案。

VTune既可以在本地,也可以远程收集性能数据,并在本地进行数据的处理、分析以及显示。

既支持图形界面,又有灵活的命令行模式(支持脚本语言批处理)

英特尔VTune的性能数据收集及优化分析无需对程序进行重新编译 ,支持包括Microsoft Visual Studio.NET、英特尔C/C++与Fortran编译器、Compaq Visual Fortran、JAVA、Borland编译器(Delphi、C++ Builder)以及IBM Visual Age。

VTune性能分析器的主要功能包括:

l     低开销采样给系统性能评测提供依据

VTune性能分析器中的采样功能能够帮助开发者寻找程序中的热点区域——最耗时间的模块、函数、代码或汇编指令,并提供当前操作系统中运行的应用程序的进程、线程、模块、函数以及代码等的各种视图,并在性能参数表格内将具体参数值列出来。

l     提供源代码级的性能问题信息

VTune源代码视图和反汇编代码视图中确切地显示出哪些代码行最耗时,占用最多的CPU执行时间等等。

l     使用调用曲线图评测查找关键路径

调用曲线图通过分析程序运行时函数的入口点和出发点,生成一张调用曲线图并且确定调用顺序和以图形方式显示关键路径,它还可以显示瓶颈的上下文。通过调用曲线图,开发人员不仅可以了解到应用程序将时间花费在何处,还可以了解应用程序是如何达到此处的,并可以查看哪些函数花费的处理时间或被堵塞的时间最长。

l     使用计数器监视器确定系统问题

计数器监控器在运行时跟踪系统活动,确定是否会因为可用内存减少或文件输入输出性能的问题而导致应用程序速度变慢,使用计数器监视器可在运行时跟踪系统活动与资源消耗情况,从而有助于快速确定系统层面的性能问题。例如,它可以指示可用内存减少或同文件 I/O 相关的性能问题是否会降低应用程序的运行速度等。

l     使用英特尔? 调试助理查询专家知识库

英特尔? 调试助理可根据丰富的知识库分析性能问题,自动推荐代码改进的办法,进而可提高开发者的工作效率。

l     可以对基于Intel PXA250PXA255PXA27x处理器系统上的应用程序进行取样和分析。

7.2.2 VTune性能分析的使用

Intel VTune性能分析器从使用功能上,可分为:采样、调优助手、计数器监视器和调用曲线图四大模块,下面将针对Windows操作系统环境Intel VTune安装目录下的范例程序VTuneDemo.exe(例如:C:\Program Files\Intel\VTune\Examples\ VTuneDemo.exe)为具体的实例,讲解这几个主要功能模块的使用方法。

1、采样(Sampling

Sampling通过统计的方法来找到HotspotsSampling收集器周期性的中断处理器以获取可执行的程序信息,采样主要有两种方式:

① 基于时间的采样(TBS),即由操作系统定时服务和每n个处理器时钟点触发分析器按照周期性的时间间隔收集信息,例如操作系统定时器、N(N>1)个处理器时钟等;

②基于事件的采样(EBS),即分析器按照特定处理器事件的触发收集信息,检测程序执行中处理器的内部事件(Performance Monitor Unit:PMU)发生次数(及样本),例如:L2级缓存遗失、分支误预测、浮点指令过时(retired)等等事件所触发。

下面我们介绍如何使用VTune对应用程序进行采样(Sampling)分析。

(1)启动Intel VTune性能分析器,运行界面如图7.2.1所示。

 

图7.2.1 VTune性能分析器启动界面

2)选择“New Project”按钮,建立新的工程,执行界面如图7.2.2 所示。

 

图7.2.2 VTune性能分析器功能选择界面

(3)选择“Sampling Wizard”按钮,选择采样向导后,出现如图7.2.3所示采样向导界面。

 

图7.2.3 采样向导界面

(4)选择文件类型,在我们的系统环境下选择第一项“Window/Window CE/Linux Profiling”,出现如图7.2.4所示界面。

 

(5)在“Application To Launch”栏中指定要分析的应用程序文件“VTuneDemo.exe”(如以C:\Program Files\Intel\VTune\Examples\VTuneDemo.exe为例),“Command line arguments”栏中设置应用程序的运行参数,这里程序“VTuneDemo.exe”没有运行参数,故该项设置为空,点击“Finish”按钮开始进行基于事件(系统默认)的采样分析,待采样完成后,可以看到VTune分析器对当前系统中所有进程的采样分析的结果和性能指标的排序视图。如图7.2.5所示,此时,“Process”进程采样功能按钮处于激活态(图7.2.5中红色圈所标示),视图区中以横向柱形图方式显示当前系统中所有进程(Process)按“Instructions Retired”事件发生多少进行升序排序后的结果,当前触发事件还包括:Clocktick和CPI性能,其中,红色三角符号所标示的为当前选定要分析的进程。

如图7.2.5所示,对各进程按其它事件排序或重排序,可点击视图区下面的视图说明区中对应的事件前面的“sort”表格,此时,会在该事件前面出现绿色方向箭头进行标示;要在VTune视图区中以表格形式显示采样数据信息,可在视图区中单击鼠标右键,依次选择:View As -> Table;重新进行采样,可直接点击“Sampling”快捷键图标“  ”。

 

 

图7.2.5 分析当前CPU中各进程执行情况

图中,CPU_CLK_UNHALTED.CORE - 表示处理器非停机状态花费的机器周期数;INST_RETIRED.ANY - 表示退出的指令数,即指令的有效执行的计数;一般来说,CPI = CPU_CLK_UNHALTED.CORE / INST_RETIRE.ANY, 表示一段代码(函数,模块)平均每条指令花费的机器周期,其值是愈小愈好,那些CPI值大,亦CPU_CLK_UNHALTED.CORE值也大的函数,即通常所说的热点函数。

(6)双击需要进行进一步分析的进程,或者单击选择需要进行进一步分析的进程,并点击VTune 分析器中的“Thread”按钮,“Thread”按钮处于激活态(图7.2.6中红色圈所标示),进入到线程分析状态,从视图区可以看到步骤(5)中选定的进程中各个线程的运行情况,如图7.2.6所示,在其中可以看到每条线程的Clocktick,Instructions Reyired和CPI性能情况。

 

图7.2.6 分析应用程序各线程性能指标

(7)在线程分析状态,双击需要进行进一步分析的某个线程,或者单击选择需要进行进一步分析的该线程,并点击VTune 分析器中的“Module”按钮,“Module”按钮处于激活态(图7.2.7中红色圈所标示),进入到模块分析状态,从视图区可以看到步骤(6)中选定的线程中各个系统模块的运行情况,如图7.2.7所示,在其中可以看到各模块的Clocktick,Instructions Reyired和CPI性能情况。

 

图7.2.7 分析当前线程中各模块执行情况

2、热点(Hotspot)问题分析及调优助手

针对应用程序的采样结果(以 C:\Program Files\Intel\VTune\Examples\ VTuneDemo.exe为例,采样过程请参考本小节1中的相关内容),运行至模块分析状态,在视图区选择应用程序模块“VTuneDemo.exe”,点击VTune分析器中的“Hotspot”按钮(图7.2.8中红色圈所标示),VTune分析器将程序分割成若干部分进行热点分析,并显示分析结果,如图7.2.8 所示,从分析出的具体函数的Clocktick,Instructions Reyired 和CPI,从中可以找到该应用程序的热点。

此时,“Source”按钮变亮(图7.2.8中绿色圈所标示,只有在Hotspot状态下“Source”按钮才可操作),点击“Source”按钮可以对程序的具体源代码进行分析,分析结果如图7.2.9所示,根据VTune提示出的Hotspot部分的源代码,我们可以考虑对这部分代码进行改进,以此来提高应用程序的性能。

 

7.2.8 对应用程序进行热点分析

 

7.2.9 热点问题的源代码级分析

如果需要VTune提供关于优化的建议或解决参考方案,可以点击图中右上角图标按钮(图7.2.10中红色圈所标示),弹出调优助手设置窗口,如图7.2.10所示。

 

7.2.10 调优助手设置窗口

点选“OK”按钮,我们在系统默认设置下通过VTune调优助手对程序进行性能分析得到结果,其中在VTune的界面右侧,可以看到“Intel Tuning Assistant”窗口对具体的代码提出了优化意见。如图7.2.11所示。

 

7.2.11 使用调优助手分析结果

3、计数器监视器的使用

根据占处理器时间找Hotspot的方式

(1)启动Intel VTune性能分析器,选择“New Project”按钮,建立新的工程,然后选择“Counter Monitor Wizard”选项(图7.2.12中红色圈所标示),选择计数器监视器向导,如图7.2.12 所示,选择“OK”按钮。

 

图7.2.12 计数器监视器(Counter Monitor)选项界面

(2)在“Application To Launch”对话框中选择要分析的应用程序文件(如以C:\Program Files\Intel\VTune\Examples\VTuneDemo.exe为例),如图7.2.13 所,选择“Finish”按钮。

 

图7.2.13 选择待分析应用程序

(3)计数器监视器则开始对指定的应用程序实时监视,结果如图7.2.14 所示。

 

图7.2.14 使用计数器监视器监视程序运行状态

其中,计数监控器名称分别为:

转发器(Redirector):   每秒网络错误(NetWork Errors/sec);

内存(Memory):          可执行字节(Available Bytes);

系统(System):          处理器队列长度(Processor Queue Length );

系统(System):          每秒上下文切换次数(Context Switches/Sec);

处理器(Processor(_Total)):特权时间百分比(% Privileged Time);

处理器(Processor(_Total)):处理时间百分比(% Processor Time)。

(4)若需要对监视图中性能折线进行平滑处理,可单击图标工具按钮 (图7.2.15中红色圈所标示)来实现,如图7.2.15所示。

 

图7.2.15 计数监控器中显示平滑性能曲线

4、调用曲线图

调用曲线图采用寻迹的方式标示程序代码在运行时刻的函数进入点和退出点,并根据总时间找到关键路径、决定程序流向和调用结果。

(1)启动Intel VTune性能分析器,选择“New Project”按钮,建立新的工程,然后选择“Call Graph Wizard”选项,选择调用曲线图向导,点选“OK”按钮,如图7.2.16 所示

 

图7.2.16 调用曲线图(Call Graph)选项界面

(2)再选择“Window/Window CE/Linux Profiling”文件类型,选择要进行分析的应用程序文件( 如以C:\Program Files(x86)\Intel\VTune\Examples\VTuneDemo.exe为例),就可以得到如图7.2.17 所示的应用程序内部函数调用关系图,在其中显示了函数彼此之间的调用关系以及关键路径,其中,关键路径用红色连线进行了标注。

 

图7.2.17 使用调用曲线图(Call Graph)查找关键路径

7.2.3 利用VTune性能分析器优化分析应用程序性能

下面通过一个典型的应用实例实验:使用VTune性能分析器采用基于时钟事件采样方式对用于压缩文件处理的应用程序gzip.exe进行取样收集和分析,来指引读者掌握使用VTune性能分析器分析应用程序的性能指标,从而找到提高应用程序性能的基本方法。

1、寻找热点区域

实验例程路径:\code\VTuneBasics\

要求读者自己分析该程序中最耗时的函数,即热点区域,具体操作步骤如下:

1、关闭病毒扫描和监控程序;

2、运行Intel VTune Performance Analyzer,并新建工程项目;

3、启动Sampling向导,选择Windows*/Windows* CE/Linux Profile文件;

4、不选择Automatically generate tuning advice选项,然后选下一步;

5、选择gzip.exe程序的完整路径(\code\VTuneBasics\gzip\Release\);

6、在Command Line Arguments对话框中输入:-f testfile.dat,用于指定待压缩文件,其中,testfile.dat表示待压缩文件,该文件与gzip.exe应用程序处于同一目录下,读者可根据具体情况指定相应的待压缩文件;

7、使用VTune采样(Sampling)并分析采样结果;

        

重复以上步骤,多进行几次采样过程,然后根据结果及源程序代码分析以下问题:

         gzip.exe中那个函数消耗了最多的CPU运行时间?

         gzip.exe中那个函数的CPICycle Process Instruction)最高?

         gzip.exe源代码中哪一行时钟周期显示最多?

         gzip.exe是多线程程序吗?

2、采样(Sampling)

实验例程路径:\code\VTuneBasics\

1、运行Intel VTune Performance Analyzer,并新建工程项目;

2、启动Sampling向导,选择Windows*/Windows* CE/Linux Profile文件;

3、不选择Automatically generate tuning advice选项,然后选下一步;

4选择matrix.exe程序的完整路径(\code\VTuneBasics\gzip\Release\);

5、在Command Line Arguments对话框中输入:-f testfile.dat,用于存储采样过程信息;

6、单击Finish按钮,使用Vtune采样(Sampling)并分析程序matrix.exe

7、分析完毕,单击Process按钮;并按Ctrl+A组合键选择所有进程;

     说明以下各按钮的功能和作用:

3、调用图(Call Graph

实验例程路径:\code\VTuneBasics\

1、创建一个新的活动,单击Activity->New Activity选项;

2、双击Call Graph Wizard选项;

3、选择Windows*/Windows* CE/Linux Profile文件

4选择gzip.exe程序的完整路径(\code\VTuneBasics\matrix\release);

5、在Command Line Arguments对话框中输入:-f testfile.dat,用于存储采样过程信息;

6、单击Finish按钮,使用Vtune采样(Sampling)并按调用图方式显示并分析程序gzip.exe

根据实验结果分析以下问题:

      按照调用图上的显示,程序中那个函数消耗的时间最多,它被那些函数调用过?

你可能感兴趣的:(performance,performance,VTune)