Xperf系列第一章——Xperf,Windows SDK中的新工具(译文)

译注:Xperf是一个非常强大(也许还不是非常易用)的Windows系统性能分析工具,但是与之相关的文档却很少。Pigs Can Fly是微软Windows组的一个官方博客,里面有一系列关于Xperf的入门及提高文章。现在尽我的能力翻译翻译一些(翻译的比较栏,可能看原文会更清楚^_^),希望能给大家一些帮助。

Update:为了节省大家下载SDK的时间,我把最新的安装文件和文档(4.6版)放在了这里,感兴趣的话可以试试。

原文地址:http://blogs.msdn.com/pigscanfly/archive/2008/02/09/xperf-a-new-tool-in-the-windows-sdk.aspx

 

Windows SDK组刚刚发布了Windows Server 2008和Vista SP1 SDK的最新版本(译注:现在最新的SDK版本当然是Windows7 SDK),里面包含了Windows性能分析小组的一个很重要的工具:Windows性能工具箱(Windows Performance Tool Kit ,我们下面简称为Xperf)。

作为整个系统范围的性能分析工具,Xperf一直被性能分析小组以及整个Windows组内部广泛使用。多年前Xperf作为一个生成Windows内核ETW事件分析报告的命令行工具被开发出来[1]。现在Windows系统中除内核外很多其他应用程序和模块也都被注入了ETW事件,可以用Xperf来激活,转储和分析。

对于在Windows系统上做性能分析工作的人来说,Xperf是一个很重要的工具,因为它是特意为长时间(几十秒到几分钟)系统范围的性能视图而设计的。要想处理Windows内核所有的事件,分析它们之间的联系,得到一些有意义的结论,唯一的工具就是Xperf。

举个例子,下面是在我的笔记本上打开,编辑,关闭Live Writer过程中,系统盘上所有的磁盘输入输出的详图:

screen-capture[5]

这是在Outlook 2007的启动过程中CPU和磁盘的使用率:

image

跟上图是同一组数据,不过下面的图包括了所有的进程:

image

image

除了显示图形,Xperf还可以把数据用表格的形式展现出来(我们称之为"summary data")。右边的截图显示了在用时6.5秒的对源代码树搜索字符串的过程中,所有的sample profile事件。在这段时间中,73.93%的总CPU时间被idle线程占用,6.78%被find string工具占用,其他还有各个windows服务进程,System进程和Xperf自己(3%)等等。在看summary table的时候,试着拖拽各个列,以得到这些数据的不同角度的视图;以磁盘IO为例,可以根据不同进程,不同IO类型(读,写,……),IO大小,IO服务时间等等来分组所有的IO事件。

上面几个例子只是浅尝辄止,很难说清Xperf可以收集的数据种类之多,可以表达的信息之丰富。这个工具还包括下面一些重要功能:

  • 完整支持对符号(symbol)的解析,包括公开的Windows symbol以及你自己的symbol。这里使用的机制与Debugging Tools for Windows相同。
  • 支持将所有事件转储到CSV文件中。如果Xperf自带的summary table不能满足你的需要,你可以使用Xperf处理工具得到这些事件的文本转储,或者Xperf命令的输出结果(一般是基于XML的),然后写自己的工具来进一步处理。
  • Windows Vista(以及更高版本,包括Server 2008, Windows 7, Server 2008 R2)支持得到所有内核事件的调用栈信息。比如对于sample profile(CPU取样)事件来说,要想理解为什么一个程序耗费了CPU时间,调用栈的信息就很重要。
  • Xperf命令行工具可以用来控制ETW事件的提供者,包括所有的内核事件。
  • 安装后的Xperf包含了一个快速入门指导和基本参考手册(在安装目录中找Performance.Analyzer.QuickStart.docx,同时还有XPS格式)。

在接下来的几个星期,这个博客会介绍更多关于Xperf以及ETW内核事件的信息。Xperf已经有了一个官方主页。在主页上你可以找到关于Xperf的更新,文档,论坛。

说了这么多,在哪才能找到Xperf呢?

  1. 下载iso文件安装Windows 7 SDK,或者使用web安装包
  2. 在SDK安装后的bin目录下找到Xperf的MSI安装文件(xperf_x86.msixperf_x64.msi或者xperf_ia64.msi)。
  3. 双击MSI安装即可。当然,你也可以将MSI文件拷贝到任何一台机器上安装(注意x86,x64,ia64版本的差别)。

[1] 你可以在EVENT_TRACE_PROPERTIES结构体中的EnableFlags字段找到内核支持的事件信息。

[2] Windows性能工具箱中的Xperf工具是对SysInternals tools的很好的补充。

posted on 2009-11-06 00:11  palo  阅读(7157)  评论(0编辑  收藏  举报