2013年10月20日,WPT终于迎来了新一轮的更新,在这次更新之后,我们在WPT的目录下已经找不到xperfview的身影了,而WPA则添加了多项新的功能。由于平时用WPA还算用的比较多,而且这工具实在相当好用,所以在这里打算写一些文章介绍一下它。
1. WPT简介
WPT的全名是Windows Performance Toolkit,是Windows下用来进行性能分析的一套工具,它的功能非常强大,你可以使用它来监控CPU,内存,磁盘和网络等等的活动,从而来确定当前系统的性能瓶颈。虽然它功能强大,但是却完全免费。它包含在Windows Assessment and Deployment Kit (Windows ADK)中,最新的版本是8.1,你可以通过MSDN来下载并随意使用它:http://www.microsoft.com/en-US/download/details.aspx?id=39982。
WPT主要包含两个部分:Windows Performance Recorder (WPR)和Windows Performance Analyzer (WPA)。从名字我们就很容易看出来,前者是用来记录性能数据的,后者是用来分析性能数据的了,后面我们会更加详细的介绍这两个工具。
2. 这东西怎么做到的?
原理,我们喜欢原理。和其他的性能分析工具不同,它是由Windows本身的事件机制来提供支持的——Event Tracing for Windows (ETW)。
2.1. Event Tracing for Windows (ETW)
ETW是从Windows 2000开始就引入的一种高速的事件记录机制,而在Vista之后,Windows又对其进行了完善,使其可以记录比之前多的多的信息,比如系统CPU上正在运行的堆栈,而现在它已经成为Windows中最主要的一种分析性能问题的方法了。
下面这张图来自MSDN,展现了ETW的主要基本架构,主要分成4个部分:Session,Controller,Provider和Consumer。
- Provider:ETW的事件提供者,我们在最后的记录文件中看到的事件就是来自于他们。
- Consumer:ETW的事件接收者,比如我们实现一个实时的Consumer来查看系统中当前有那些事件正在发生。
- Controller:用于开关ETW的事件。
- Session:它存在在内核中,用于表示一个ETW事件记录会话。系统中可以存在多个Session,每个Session都可以接收来自于多个Provider的事件,最后我们可以将多个Session中的事件写入一个日志文件中,这个日志文件就叫做Trace。
通过ETW,我们可以将系统所有关键的地方都加入事件,记录其行为和堆栈,比如CPU执行,线程切换和读写磁盘,这样我们就可以利用这些信息来进行分析了。