Electronic Joint Business

Solution for E-Business

etw

Windows事件追踪入门与使用方法

文章评价:
大多数 Windows 开发者或多或少都知道 Windows 事件追踪(Event Tracing for Windows,ETW),ETW 是由 Windows 操作系统提供的一种通用的,系统开销较低(与性能日志和警报相比)的事件追踪手段,用以监控具有负载的系统的性能, 它在内核中运行,可以追踪用户模式应用程序、操作系统内核和内核模式设备驱动引发的事件。此外,ETW 还能够动态地启用或者禁用日志记录,便于进行详细的追踪,而无需重新启动操作系统或者应用程序。
一些操作系统核心组件和第三方应用程序使用 Windows 事件追踪来提供事件日志记录和追踪。

ETW 是随着 Windows 2000 中第一次出现在其发布版本中的,对于后续的 Windows 来说, ETW 已经是内置工具。

ETW的架构
ETW 主要包含四种类型的组件,其核心体系架构如图1-1 所示:

  • 事件提供程序
  • 控制器
  • 使用者
  • 事件跟踪会话

事件跟踪会话(Session) 负责缓存和日志记录,会话接受事件并创建一个跟踪文件。ETW 会话可以使用多种日志记录模式。例如,可以对会话进行配置,直接向使用者应用程序传送事件,或在文件达到特定大小时通过回绕在某个文件中重写旧事件。为每个会话创建的单独写线程会将这些事件刷新到文件或实时使用者应用程序中。如果要实现高性能,还可以使用每服务器的缓冲区,这样无需在日志记录路径中设置锁定。

事件提供程序 (Provider)指的是一种可以将事件写入 ETW 会话的逻辑实体。任何可记录的重要活动均可作为事件,每个活动由记录到 ETW 中的一个事件表示。事件提供程序可以是用户模式应用程序、托管应用程序、驱动程序或任何其他软件实体。唯一的要求是,事件提供程序必须通过注册 API 向 ETW 注册一个提供程序 ID。提供程序首先向 ETW 注册,然后调用 ETW 日志记录 API 如EventWriteEx, EventWriteString 或者 EventWriteTransfer 写入来自代码内多个点的事件。

>>> 阅读全文

 

, , ,

XPerf — Windows Performance Toolkit 使用简介

文章评价:

从 Windows 2000 开始,Windows 中就带了事件跟踪机制。所谓事件跟踪,是一种从各种系统组件触发事件的基础设施,只为少量的内核模式下的实体所使用。在 Windows XP 中, MOF 文件 (与 WMI 提供程序的元数据类似)被用来描述事件。在 Windows Vista 和 Windows Server 2008 中,事件用 XML 装配清单来描述事件,这个设计使得 ETW 的使用更为普遍,成百上千的新的事件提供程序( Event Proivder ) 被添加到系统中。

这些提供程序会产生什么信息呢?首先, Windows事件日志(Windows Event Log) 使用这些 ETW 提供程序生成的一部分信息(但不是全部)。因此可以获得有关系统事件的各种诊断消息。另一个提供程序是性能监视器(Performance Monitor), 特点是能够查询成组的 ETW 事件。将这些不同源的信息组织在一起并不是件容易的事。尤其利用同样的跟踪,在对系统的整体的分析和对某些特定应用的分析中不断切换的时候。

这种整合的需求最终导致了 Windows 性能工具包(Windows Performance Toolkit, WPT) 的诞生,它致力于数据收集和集成,是正确地解释和利用 ETW 输出不可缺少的工具。特别的是,它能用一致的方式查看大量的信息,让你能够对系统内正发生的事情有一个整体印象。另外,通过利用内核采样中断,你可以使用全局的采样事件探查器 (包括调用堆栈分析)。更棒的是,它是完全免费的。

下面让我们来看看 WPT 的功能。从 Windows 7 开始,WPT 被包括在 Windows SDK 中,你需要下载 Windows SDK 并安装它。

>>> 阅读全文

 

, , , , , , , ,

使用 ETW 改善调试和性能优化

当下的软件系统正变得日益庞大复杂,随之对软件的开发和管理就成为了一项艰巨挑战。此外,不同的硬件组合和工作负载特征也增加了各种软件故障诊断的难度。因此,可靠性和可管理性本身成为重要功能也就不足为奇了。而正是这些功能催生了对软件检测的需求。

在软件执行过程中,针对某些关键错误状态添加智能检测手段可以极大地缩短故障调试时间。在其他某些方面,检测也是非常有用。如在企业环境中,需要对大量计算机的软硬件故障和资源冲突等不良情况进行监视并采取措施。此外,检测还非常有助于解决性能问题,因为性能问题对于外部的工作负载、配置参数以及底层硬件和软件状态都十分敏感,所以诊断起来比较困难。当性能下降时,有关人员可以根据实际工作环境的追踪文件(trace) 来确定性能不佳的组件或服务,或者发现开发阶段未预见到的性能瓶颈。最后,IT 专家可以使用各种管理工具从事务追踪中得出资源使用率的统计数据用于容量规划和趋势分析。

Windows® 事件追踪 (ETW) 是操作系统提供的一个追踪工具,具有高速通用的特点。它使用内核中的缓冲和日志记录机制,追踪用户模式应用程序和内核模式设备驱动程序所引发的事件。此外,你可以动态地启用和禁用 ETW 日志记录,从而轻松地在生产环境下进行详细追踪,而无需重新启动系统或重新启动应用程序。日志记录机制使用每处理器独立的缓冲区,通过异步写线程将这些缓冲区写入磁盘,从而将写入事件对大规模服务器应用程序的干扰降至最小。

最初引入 ETW 的操作系统是 Windows 2000。自此开始,各版本操作系统和服务器组件开始纷纷采用 ETW 对其活动进行检测。现在,ETW 已成为 Windows 平台中的主要检测技术之一。越来越多的第三方应用程序也开始采用 ETW 进行检测。ETW 还被提取到 Windows 预处理器 (WPP) 软件追踪技术中,为追踪类似“printf”样式的消息提供了一组简单易用的宏,以便用于开发过程中的调试。

在 Windows Vista™ 上,ETW 发生了改头换面的变化,其中最重大的变化之一就是引入了统一的事件提供者模型和 API。简而言之,新的统一 API 对追踪结果进行日志记录并将结果写至事件查看器,为事件提供程序提供了一种一致的、简单易用的机制。同时,还添加了一些用于改善开发人员和用户体验的新功能。在本文中,我们将介绍新的 ETW 提供程序模型,并为大家讲解开发人员应如何在基于 Windows Vista 的应用程序中采用这一新模型。

>>> 阅读全文

 

, ,