使用 ETW 改善调试和性能优化
2008-11-17 17:39:25 来源:WEB开发网EventWriteTransfer API 和 EventActivityIdControl API 是为了满足端到端跟踪检测需要而设计的。如前所述,端到端跟踪是一种针对同时为大量用户请求执行不同活动的服务器应用程序的检测方法。例如,网页上的脚本执行请求将从客户端计算机转移到服务器的网络层。随后,该请求会经过 HTTP 驱动程序、IIS、ASP.NET 引擎,可能还包括另一台计算机上的 Exchange Server。端到端跟踪的目的是通过 ETW 事件记录与此请求相关的所有活动,以便稍后进行调试和性能分析。这需要可以标识单个请求的唯一 ID。在使用期间,可以在该唯一活动 ID 的帮助下进行关联。
ETW 通过在每个事件中引入 ActivityId 来满足这一需要。使用新 API 记录的每个事件会自动选择存储在执行线程内的当前活动 ID。活动 ID 显示在 XML 转储的 <System> 部分的 <Correlation ActivityId> 标记内。提供程序可以为使用 EventActivityIdControl API 的执行线程获取、设置和创建活动 ID。该活动 ID 可以与请求一起在多个组件之间传输。遗憾的是,由于公共协议和设计等方面的限制,有时我们无法传播该活动 ID。EventWriteTransfer API 可以编写传输事件,以表示活动 ID 的传输。除了使用 EventWrite 的所有参数外,EventWriteTransfer 还使用另外两个参数,它们是 ActivityId 和 RelatedActivityId。
每个事件均标记有提供程序 ID,并被分配了名为事件描述符的实体。事件描述符定义了标准事件信息,并为其提供了进一步的标识和语义。开发人员在检测设计阶段确定检测点的事件描述符,并将相应的项写入事件清单。然后,开发环境中的消息编译器从给定的事件清单在头文件中生成事件描述符,该描述符随后被放入并用于源文件。从编程的角度看,事件说明符是一种包含下列字段的结构:Id、Version、Channel、Level、Opcode、Task 和 Keywords:
typedef struct _EVENT_DESCRIPTOR {
USHORT Id;
UCHAR Version;
UCHAR Channel;
UCHAR Level;
UCHAR Opcode;
USHORT Task;
ULONGLONG Keyword;
} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
更多精彩
赞助商链接