【IT168 专稿】在Visual Studio 2010中,我们可以利用性能计数器对应用程序的性能进行实时的监视,以发现应用程序的性能瓶颈的所在。当我们发现问题后,如果想解决问题,就需要更多的信息。这个时候,就该ETW上场了。
Event Tracing for Windows (ETW)
Event Tracing for Windows (ETW)是由操作系统提供的一种通用的,系统开销较低(与性能日志和警报相比)的事件追踪手段,用以监控具有负载的系统的性能。ETW主要用于必须频繁记录事件、错误、警告或审核的服务器应 用程序。ETW提供用户模式的应用程序和内核模式的设备驱动程序所触发的事件追踪机制。此外,ETW还能够动态地启用或者禁用日志记录,便于进行详细的追踪,而无需重新启动操作系统或者应用程序。
ETW最先在Windows 2000中被引入。自那时以后,各种Windows操作系统核心和服务组件都通过ETW记录其活动,它现在是Windows平台上的关键系统仪表技术之一。在Windows 7中,ETW得到了进一步的增强。首先是更强的功能,可伸缩性和鲁棒性,增加了多个新的Windows事件和事件提供者。在ETW的开发方面,增加了设计时严重,从XML自动生成代码等。正是基于ETW的优秀性能和强大功能,越来越多的第三方应用程序开始放弃自己的日志系统,逐渐开始使用ETW来追踪和记录其状态和活动。在这里,我们就利用ETW来记录我们自己开发的应用程序的各种事件活动,从而进行性能调优或者是进行应用程序的日常维护。
ETW的架构
图1 ETW的架构
整个ETW系统由Provider,Customer和Controller三个部分构成:
• Provider
所谓的Provider,就是事件的提供者,它可以是系统组件,驱动程序或者是我们开发的应用程序。首先,它需要向系统进行注册一个Event Trace,然后当这个Provider被Controller启动(Enable)后,它就可以开始向相应的Event Trace Session发送事件了。
• Controller
顾名思义,Controller就是一个控制器。它的主要任务有两个:一是Event Trace Session的控制管理。它利用StartTrace在内存中创建一个Event Trace session,这样Provider就知道该往哪里发生事件。而Controller也会负责将Session里记录的事件送到Consumer。Controller的第二个任务就是对Provider进行管理,启动或是停止Provider。为了避免额外的开销,Provider不会一直都在工作,只有当被Enable的时候,才开始工作。
• Consumer
Consumer实时地从Event Trace Session或者是日志文件中订阅事件。Consumer主要的作用是提供Event Trace Callback。我们可以设计一个通用的callback来处理所有的事件,也可以为特定的我们感兴趣的事件设计callback。对于通用事件的callback,我们可以在OpenTrace的时候通过参数指定,而对于特定时间的callback,则可以通过SetTraceCallback指定。