Perfview快速使用指南
https://github.com/microsoft/perfview
步骤一:收集程序运行数据,生成由ETW数据组成的.etl文件
Perfview提供两种收集数据的方式,Run
和Collect
。“Run
”是直接指定需要启动的应用程序的名称,以便启动该程序。“Collect”则是直接启动Perfview并开始收集。但不要以为"Run"方式只收集指定程序的数据。事实上无论哪种方式,Perfview都会收集系统范围内全部数据,并且收集完成后,需要选择某一个进程以进行分析
💡Perfview收集和处理数据的时间比较长。在处理过程中,Perfview的右下角会闪动,并且可以查看运行日志
,了解到当前Perfview在执行什么工作
步骤二:选择需要分析的进程
在收集完毕后,在左边选择“PerfViewData.etl.zip
”,并在展开的选择项中双击选择“CPU Stacks
”,此时,会弹出进程选择对话框,选择需要进行CPU分析的进程。这里选择我们运行的Tutorial.exe进程
步骤三:查看执行栈视图
在双击选择了“Tutorial.exe”的进程后,进入到程序详细的执行栈的视图中。这里记录着Tutorial.exe的函数调用树,以及函数的执行时间
在该视图中,你可以看到Tutorial.exe的函数调用情况,包括函数调用树(Call-Tree),某个函数的调用者(Calls)和被该函数调用的函数(Callees),另外,在视图右侧,是函数的执行时间,其中,“Exc”是指 Exclusive,是指函数自己(不包含该函数里执行的子函数)的执行时间,而“Inc”是指Inclusive,指该函数及该函数中执行的子函数的总的执行时间
另外,这个执行时间是怎么认定的呢? 答案是CPU采样。Perfview对CPU进行采样,默认每个CPU采样是1毫秒(在Prefview的高级设置中可以设置到0.125毫秒~1毫秒),每次采样中可以得到当前CPU正则执行什么代码。例如DateTime_getNow()有3250采样,则可以说明在整个程序运行中,DateTime_getNow()占用了3250毫秒的CPU时间,占整个运行时间的66.2%。通过比较各个函数的执行时间,我们就可以知道程序中哪个函数占用比较多的CPU时间。
以上便是Prefview的基本的使用步骤。Prefview提供了非常多并强大的功能,例如分组(Grouping),折叠(Folding),时间范围选择,这些在后续教程里再聊。而更强大的是,F1帮助手册
里,有着非常详细的使用说明和术语解析,而且界面上几乎每个功能都有说明的ToolTip和说明的超链接如果对某个功能用法不是很清楚,可以方便地找到说明,真是业界良心