测试目的:使用测试工具给出协议解码库的性能指标
测试工具:Intel公司的VTune和AMD公司的CodeAnalyst
采用方式:回放文件
VTune(TM) Performance Analyzer 是针对Intel芯片的一款性能分析软件,安装文件位于\\ngwbuild01\Wupeng目录下。
1.1 在虚拟机环境下运行很不正常,有时可以使用,有时会报出如下错误
Figure 1 Error Message
对于此类错误开始以为是操作方法的问题,与帮助文档验证操作过程后仍频繁出现,经网络搜索后证明是与虚拟机不兼容,参考网页:
http://blog.shuva.in/comments.php?y=07&m=09&entry=entry070923-222018
1.2 VTune基本操作。
VTune有三种分析方法:
Sampling :时间采样(主要方式)
Call graph :以图表方式表现
Counter monitor collectors:时钟监视结果
Step.1新建一个工程:File->new project,一般选Quick Performance Analysis Wizard就可以了。
Step.2选择要测试的程序,在弹出的对话框中有Application to Launch,填入Debug文件下的exe程序就行了。
Step.3 Run Activity:按工具栏上的绿色三角按钮就行了, 一般会自动运行程序,这时你执行你想要的操作。本来还有些配置可以配的,不过比较麻烦,没有深入研究。
完成一次测试后,会看到run1总表,如下图所示
Figure 2 Overview
包含第一层次的性能计数器:
1) INST_RETIRED.ANY - 表示指令的有效执行的计数
2) CPU_CLK_UNHALTED.CORE - 表示非停机状态花费的机器周期
CPI(每次执行消耗的时钟时间) = CPU_CLK_UNHALTED.CORE / INST_RETIRE.ANY
表示一段代码(函数,模块)平均每条指令花费的机器周期,愈小愈好。这样可以找到那些CPU_CLK_UNHALTED.CORE大的函数且CPI也大的函数去关注(通常称之为热点函数)。
双击待测试的进程,进入Threads视图,如下所示
Figure 3 Threads视图
显示了当前进程的所有线程,需要逐个线程查看所要观察的dll在哪个线程中,下图显示该线程用到的所有module。
Figure 4 Modules视图
双击module显示此module的信息,如下图所示
Figure 5 Hotpots视图
如果此module为debug版,可以继续观察代码的执行情况,且与pdb文件同级,在查看Process的Detail过程中会要求指定源码的位置,从而给出各段代码执行时间。如下图所示:
Figure 6 Code |
1.3 附加功能
VTune还有另外两个功能是关于多线程的优化,在这里没有使用。
CodeAnaylyst操作与VTune类似,但软件相对简单,而且目前运行环境的硬件架构是在Intel CPU上,只能使用此软件的Time Sampling功能。
与SART配合使用时出现多次测试,发现在CodeAnalyst中看到加载的动态库每次不同,如以下三张截图所示:
Figure 7 CodeAnalyst test1
Figure 8 CodeAnalyst test2
Figure 9 CodeAnalyst test4
CodeAnalyst可以完成对代码执行效率的分析,比如可以分析到某段程序的瓶颈出现在那行代码,可以用于指导编程人员去修改,但此工具不能用来定位某动态库效率指标。