VTUNE 性能分析器之寻找和分析热点

提交新文章

2011年12月27日 07:00


5.3 寻找和分析热点



5.3.1快速性能分析(Quick Performance Analysis)

Vtune性能分析器提供几种分析方式用来帮助用户定位到瓶颈代码段。但是作为一般用户,使用Quick Performance Analysis (QPA) wizard就可以了。用户使用QPA wizard,可以指定要优化的应用程序,并且可以配置分析器,使用采样、调用图和计数器监视器来收集性能信息。



5.3.2创建一个工程和收集数据信息

使用QPA wizard可以快速分析来应用程序。Vtune性能分析器在QPA wizard下创建一个工程(Project),在这个Project下的Activity默认包含了采用(sampling),调用图( call graph)和计数器监视器(Counter monitor)。下面是使用QPA wizard创建Project和收集性能数据信息的步骤:

  1. 打开QPA wizard
    • 点击“New Projcet”按钮图标,打开新建Project对话框。在对话框中Vtune根据几种类型的activity提供几种不同建立Project的wizard选项。这里一般选择“Quick Performance Analysis wizard”就可以了。
    • 给要创建的Project一个名字,点击“ok”

  2. 定义在Activity的基本配置
    • 用户可以选定右上角的“No Application to Launch”选项,这样Vtune性能分析器将不再启动任何应用程序,但是假如用户要把调用图(Graph call)加入到activity中,则必须要添加应用程序。一般来说,只有当用户使用Vtune 来分析整个系统的时候,才会选定“No Application to Launch”选项。
    • 添加要分析的应用程序到“application to Launch”域中
    • 用户可以更改Vtune性能分析器的工作目录
    • 如果有必要可定义在“Command Line Arguments”栏中定义命令行参数。
    • 配置该activity所要收集的数据信息(sampling,graph call,counter monitor)。

  3. 运行Activity
    • 点击“go”按钮,创建activity成功。Vtune性能分析器将启动指定的应用程序,并且开始收集数据信息
    • Acitvity默认计数器监视器数据收集器在收集数据信息的过程中将以图形化的形式显示计数器的值
    • 点击output窗口的标题栏,选择“Floating”选项。Output窗口用来数据信息收集的进展
    • 一旦数据收集结束,Vtune将会提醒用户先看哪类型数据。不同的用户可能会有自己优化程序的方法,这里以intel推荐使用的性能优化方法为例,展示优化的过程。



5.3.3 计数器监视器的数据收集器(The Counter Monitor Collector)

计数器监视器数据收集器是用来监视和图形化显示性能计数器数据的一个工具。性能计数器能够帮助你理解计算机子系统与用户的应用程序之间的原因和影响结果的关系。对于使用QPA wizard建立Activity,Vtune性能分析器将自动地监视一些默认的操作系统计数器。这些计数器对于不同的系统将各有区别。对于Windows 2000的默认计数器是:

System: Processor Queue Length
- System: Context Switches/sec
- Memory: Available Bytes
- Processor (_Total): % Privileged Time
- Processor (_Total): % Processor Time
- Redirector: Network Errors/sec

下面将介绍“计数器视图”(the counter monitor view)的一些使用:

  1. 导入数据视图(the Logged Data view)
    • 在运行默认的QPA activity的时候,Vtune性能分析器在运行数据视图(Runtime data view)中以图形化的形式展示了受监督计数器的值。当运行activity结束,可以通过对话框选择要察看“the counter monitor results”。这是弹出的窗口就是导入数据视图(the Logged Data view)窗口。这个窗口同通过图表的形式把一些性能计数器在数据收集过程中的轨迹展示出来。
    • 在图表中的每一条线都代表着一个相应性能计数器。
    • 图表中的每一个波峰都代表着一个比较高的计数器值,通过这个图表,用户可以轻易地确定在收集数据信息的过程中哪个时间点,计数器的值最高。
    • 当把鼠标放置到图表的某个点上,Vtune将自动给出一个在该点处相应计数器值的提示

  2. 图例(legend)
    • legend窗口在logged data view 窗口的最低下。在这个窗口中,Vtune详细地解释了在图表中使用的名称和符号。Legend窗口还提供了计数器值得最大、最小和平均值,同时还有值的标准差。
    • 双击legend窗口下的计数器行,那么logged data view的图表中对于的计数器(counter)将高亮度显示。如果当前已经有计数器处于高亮状态,那么此时只需单击其他counter,即可更换到其他counter高亮显示。
    • 右击legend窗口中的某个计数器(counter),然后再弹出菜单中选择“explain”,这是Vtune将弹出一个有关于该counter的解释(explaination)窗口。

  3. Summary data 视图
    • 点击计数器监视器工具栏上的“Logged Data or Summary View”(即第三个)按钮,Vtune将弹出“Summary view”视图窗口,该窗口提供了在logged data view中所有的计数器(counter)的统计信息。
    • 在summary data视图中,每一个计数器(counter)的summary data都以条形图表示,条形图的顶端对应的值是计数器的最大值,条形图的底部对应的值是计数器的最小值,而中间的蓝紫色条形图代表的是计数器的平均值范围。

  4. 数据表(data table)
    • 点击计数器监视器工具栏上的“data table”按钮,Vtune将显示出数据表。数据表顾名思义就是以表格的形式显示导入数据视图(logged data view)中信息
    • 在数据表中,每一个计数器(counter)都有两行的信息。其中第一行是信息收集的时间间隔,第二行显示同一列的第一行对应时间下的计数器(counter)的值。值得注意的是对于不同的性能计数器的信息收集时间间隔是有可能不一样的。

  5. intel优化帮助(the intel tuning Assistant)
    • 用户可以点击“Select Range”按钮,然后再图表中点击拖动鼠标来选定图表中的一段峰值。
    • 点击优化帮助(tuning assistant)按钮,Vtune性能分析器将弹出“intel tuning assistant”窗口。Vtune将对用户在a)中选中的计数器数据区间进行分析,然后将分析的结果和改进的建议等信息在这个窗口中显示出来。



5.3.4 采用数据信息收集器(the sampling collector)

用户可以使用两种采样机制来收集数据信息:

  1. 基于时间的采样(TBS)——在规则的时间间隔收集采样数据
  2. 基数事件的采样(EBS)——在特定的一序列处理器事件发生后,中断处理器,同时存储指令指示器。

下面是采用视图(the sampling view)的使用:

  1. 采样视图定位
    • 采样数据能够展示下面所列层次上的细节。
      • 进程视图——在数据收集期间运行在用户系统上的所有进程
      • 线程试图——运行在进程视图中所有进程上的所有线程
      • 模块视图——运行在选定的进程与线程上的所有模块
      • 热点视图——在模块视图里用户选定模块的所有函数

    • 用户可以通过在弹出菜单的“view as”选项中选择“table”和“Horizontal Bar Chart”,来查看进程(process)、线程(thread)、模块(module)和热点(hotspot)试图中的信息。
    • 当前视图为进程试图,用户可以选定视图中的某项,然后点击工具栏中的其他视图图标按钮。这时Vtune将显示所选项目下的对应试图。默认的drill down顺序是process view —〉thread view —〉module view —〉hotspot view 。用户可以跳过其中的某一步骤,但是不能逆序drill down

  2. 图例(legend)
    • 点击legend图标可以隐藏或者显示legend窗口。
    • 在直方条形图视图下,legend窗口提供了进程、线程、模块和热点中事件的细节信息。
    • Legend窗口中的绿色箭头便是的是以当前事件为依据排序所有项。对于lengend窗口中进一步的信息,读者可以参考用户手册。

  3. 多处理器视图
    • 点击工具栏中的“show/hide”图标按钮,Vtune将显示出多处理器视图。对于多处理器系统,该视图能够让用户看到每个处理器的事件采样。
    • 在多处理器试图下,直方条形图将被分成两份,每份代表这不同的cpu两份分别着上不同的颜色。同时每个cpu的每个事件下的信息都显示在legend窗口中。
    • 把鼠标放到某块直方条形图上,Vtune就自动显示事件和处理器的相关信息

  4. selected items 控制板
    • 点击左侧的selected items按钮,可以隐藏和显示selected items 控制板。在selected items 控制板下,用户可以看到当前视图drill down的的路径。
    • 在selected items 控制板下,用户可以选中和取消一些项。然后再点击“sync”刷新当前视图。
    • 用户可以使用selected items 控制板不一些不必要项去掉,然后在隐藏selected items 控制板。

  5. Selection Summary
    • 点击Selection Summary按钮,可以显示或隐藏Selection Summary.窗口。Selection Summary窗口提供了一种快速的方式查看图表中所选项的采样或监视事件的累积数目。用户可以选择单项或者多项。
    • 选择图表中某一项,Selection Summary窗口中将显示出相关的事件信息。Selection Summary窗口的进一步信息,请读者参考用户手册。

  6. 导出excel
  7. 点击工具栏上的Export Data to Exce图标按钮,Vtune性能分析器将把采样的数据信息导出到通用办公软件Microsoft的电子表格Excel中,同时Vtune也将以电子表格的形式显示采样数据。

  8. 查看热点代码
  9. 用户可以在采样视图下,以process view —〉thread view —〉module view —〉hotspot view 的顺序drill down采样数据。当然可以跳过其中的某些步骤,最终用户到达hotspot view,此时视图中最长的直方条形图对应的函数块就是应用程序的热点(hotspot),用户只需双击该项,Vtune会自动定位到该函数的源代码。



5.3.5 源码视图

源码视图能够帮助用户找到源码中的问题区域。Vtune性能分析器能够显示任何带有调试信息的已编译程序的源代码。通常用户会在采样和图调用等分析操作后使用源码视图。只有当应用程序的源文件和符号和行号等信息存在可用时,用户才能够查看到模块(module)或函数的源码,否则,Vtune性能分析器将显示汇编代码。

下面介绍源码视图界面的一些使用:

  1. 源码视图(source view)界面
  2. 源码视图界面主要由两个窗口组成:源码窗口(source pane)和概要窗口(summary pane)。其中source pane 中显示的是vtune定位到的源码,summary pane 显示的是所有在函数项,用户可以双击选定的函数项来在source pane中查看对应的源码。

  3. 源码格式
  4. 用户可以通过窗口左上角的“Source Only”,“Mixed” 和“Disassembly Only ”按钮来选择在source view pane 下显示代码的格式。

  5. intel 优化帮助(the intel tuning assistant)
    • 在source pane中选择一行或者一段代码,然后点击工具栏中的“Tuning Assistant”图标按钮,Vtune将自动分析所选代码,然后将分析的结果和改进的建议等信息在弹出窗口中显示出来。
    • 用户可以在弹出窗口中点击相关建议项来查看更加详细的信息。



5.3.6 调用图信息收集器

调用图提供了应用程序的程序流程信息:一个函数调用其它函数的次数;每个函数的执行代码与调用其它函数的时间花销;一个函数可以调用函数,也可以被调用。调用图信息收集器还提供了函数的调用入口信息。

下面将介绍调用图视图的界面和使用:

  1. 调用图视图界面
    • 调用图视图主要由两个部分组成,一部分是函数概述面板(the function summary pane),另一个部分则是调用图面板(the call graph pane)。函数概述面板以表格的形式显示函数的信息,而调用图面板则把函数的信息以图的形式显示。调用图把信息收集期间的所有线程都展示在视图中。每个图中的第一个节点代表中一个线程的开始,其他节点代表中该线程下调用的函数
    • 用户可以点击界面下方的“call list”图标,Vtune将切换到调用列表面板(the call list pane)。在调用列表面板中,Vtune以表格的形式展示了函数之间的调用关系。调用列表面板又分为三个窗口,顶上的是“focus function”窗口,该窗口显示的是当前焦点(查看)函数;中间的是“caller function”窗口,该窗口显示的是调用焦点函数的函数;底下的是“callee function”窗口,该窗口显示的焦点函数调用的函数。

  2. 调用图面板
    • 用户可以点击界面下方的“graph”图标从“call list”切换到调用图面板。在调用图面板中程序的的关键调用用红边联系起来,所谓关键调用是指适用时间最长的调用序列。点用图中的边的粗细代表着该调用的执行时间。
    • 和边一样,调用图节点的颜色也代表着不同该函数执行时间的长短,这里的执行时间只包括函数自身的代码不包括调用其它函数的执行时间。在调用图中,节点是灰色的表示执行时间很短,而深橙色则表示执行时间较长。
    • 把鼠标放置到调用图的边上或节点上,Vtune将提供相关的详细信息。有关调用图面板的其他信息请读者参考用户手册。

  3. 函数概述面板
    • a) 用户还可以通过函数概述面板来查看函数的调用路径。在该面板中,用户还可以选择以线程、模块和函数的组合顺序来组织函数数据。同时该面板还提供了按各种时间花销的排序方法。详细信息请用户自行参考用户手册。
    • 值得一提的是,在函数概述面板中选中一个函数,在调用图面板中对应的函数节点也会被选中。假如该函数在调用图中尚是不可见的,用户只需双击该函数,那么在调用图中将自动显示该函数并被选中。