系统管理、诊断与追踪技术解析
1. DTrace 与 ETW 相关机制
DTrace 是一个强大的系统分析工具,它与 ETW(Event Tracing for Windows)紧密协作,为系统管理员提供了深入了解系统运行状态的能力。
1.1 ETW 提供者与 DTrace 的交互流程
ETW 提供者在 DTrace 驱动中实现。当 Pnp 管理器初始化跟踪引擎时,会向 DTrace 引擎注册所有提供者。注册时,ETW 提供者会配置一个名为 DTraceLoggingSession 的 ETW 会话,该会话将事件写入循环缓冲区。
从命令行启动 DTrace 时,它会向 DTrace 驱动发送一个 IOCTL。IOCTL 处理程序调用每个提供者的提供函数,内部的 DtEtwpCreate 函数会使用 EtwEnumTraceGuidList 函数代码调用 NtTraceControl API,这使得 DTrace 能够枚举系统中注册的所有 ETW 提供者,并为每个提供者创建一个探针。例如,使用 dtrace -l 命令可以显示 ETW 探针。
当编译并执行针对 ETW 提供者的 D 脚本时,内部的 DtEtwEnable 例程会被调用,以启用一个或多个 ETW 探针。如果注册时配置的日志会话尚未运行,则会启动该会话。通过跟踪扩展上下文(包含私有系统接口),DTrace 能够注册一个内核模式回调,每当有新事件记录到 DTrace 日志会话中时,该回调就会被调用。
第一次启动会话时,没有与之关联的提供者。与系统调用和 FBT 提供者类似,DTrace 会为每个探针创建一个跟踪数据结构,并将其插
超级会员免费看
订阅专栏 解锁全文
609

被折叠的 条评论
为什么被折叠?



