
2009年11月6日
译注: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过程中,系统盘上所有的磁盘输入输出的详图:
这是在Outlook 2007的启动过程中CPU和磁盘的使用率:
跟上图是同一组数据,不过下面的图包括了所有的进程:
除了显示图形,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可以收集的数据种类之多,可以表达的信息之丰富。这个工具还包括下面一些重要功能:
在接下来的几个星期,这个博客会介绍更多关于Xperf以及ETW内核事件的信息。Xperf已经有了一个官方主页。在主页上你可以找到关于Xperf的更新,文档,论坛。
说了这么多,在哪才能找到Xperf呢?
- 下载iso文件安装Windows 7 SDK,或者使用web安装包。
- 在SDK安装后的bin目录下找到Xperf的MSI安装文件(xperf_x86.msi,xperf_x64.msi或者xperf_ia64.msi)。
- 双击MSI安装即可。当然,你也可以将MSI文件拷贝到任何一台机器上安装(注意x86,x64,ia64版本的差别)。
[1] 你可以在EVENT_TRACE_PROPERTIES结构体中的EnableFlags字段找到内核支持的事件信息。
[2] Windows性能工具箱中的Xperf工具是对SysInternals tools的很好的补充。
posted @ 2009-11-06 00:11 palo 阅读(1551) 评论(0)
编辑

2009年6月2日
posted @ 2009-06-02 21:56 palo 阅读(2920) 评论(3)
编辑

2009年3月30日
基本功能:
- 输入正则表达式及需要匹配的文本,可以显示是否匹配,如果匹配,显示所有的match及group。右边可以选择正则表达式的选项。
- 如果正则表达式有误,无法编译,会在状态栏显示错误信息
- 可以在附带的RegExp.xml文件中加入预定义的正则表达式,启动程序后选择相应的名称,就会把定义好的正则表达式添加到文本框的末尾
<RegularExpression>
<Name>
E-Mail
</Name>
<Value>
<![CDATA[
([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})
]]>
</Value>
</RegularExpression>
预计下一个版本会加入:
- 将搜索结果显示为树形结构,点击其节点可以加亮相应文本
- 支持replace
可以在这里下载程序及源代码:
http://regexp.codeplex.com/
posted @ 2009-03-30 21:10 palo 阅读(292) 评论(0)
编辑

2009年3月29日
跟T61P的对比:
背后是一台19宽的显示器:
屏幕的黑边太大,导致可视范围太小,分辨率也上不去:
老中青三代:

顺便贴一下组里用的服务器(4*4核CPU,32G内存):

posted @ 2009-03-29 22:10 palo 阅读(158) 评论(0)
编辑

2009年3月3日
简单写了个小程序,比较了一下C#中各种Lock的速度(前提是都没有进入wait状态)。
各进入离开Lock 1kw次,结果如下:
| Lock |
Time (ms) |
| No lock |
58 |
| CriticalSection |
726 |
| Interlocked |
344 |
| Readerslim |
1932 |
| Writerslim |
1513 |
| Reader |
3754 |
| Writer |
3430 |
| Mutex |
24998 |
| Semaphore |
24197 |
| Event |
22549 |
结论如下:
- Interlocked可以直接编译为CPU指令,速度最快,虽然功能较少但能用则用。
- CriticalSection(也就是lock关键字或者Monitor.Enter()方法)仅比Interlocked慢,建议使用。
- 对于ReaderWriterLock和ReaderWriterLockSlim,Slim快近一倍,但缺点是不能track owner,也就是同一线程不能多次进入同一个lock。Reader比Writer要慢,估计是要维护reader count的原因。
- Mutex,Semaphore,Event即使可以获得lock也要进入内核模式,所以最慢,要尽量避免使用。
代码下载:
http://usayjq.bay.livefilestore.com/y1pbebZJ6xcesXSXcujFmihM0LVhFuA62IJ37Gz0vgDI2CLDpEGuwwB_E1E5CnDpJBQoVgilKW-61Y/LockSpeedTester.zip?download
posted @ 2009-03-03 23:55 palo 阅读(921) 评论(3)
编辑

2009年3月1日
posted @ 2009-03-01 17:22 palo 阅读(13983) 评论(37)
编辑