深入了解 Windows 事件跟踪(ETW)
1. ETW 架构
ETW 的诞生源于为用户模式和内核模式代码提供通用跟踪平台的需求,同时要尽量减少对被跟踪软件性能的影响。这一需求决定了 ETW 在操作系统中的基本设计原则。
1.1 ETW 设计原则
传统的代码插桩方法,如使用 fprintf 将消息记录到控制台或文件,存在诸多缺陷。而 ETW 解决了这些问题:
- 避免性能开销和重入问题 : printf 调用会涉及操作系统的大量后台工作,包括进程间通信,可能导致重入问题。ETW 跟踪在内核模式实现,不依赖操作系统架构中较高层次的组件。
- 标准化日志框架 : fprintf 记录的自由格式事件难以解析和查看,ETW 对日志框架进行了标准化,引入了明确的事件架构,便于构建版本兼容的复杂查看工具。
- 减少性能影响 :频繁写入文件或控制台会对性能产生显著影响,通常在发布版本中需要禁用。ETW 事件日志调用的成本极低,直到启用跟踪时才会产生开销,且跟踪开启时也非常轻量级。
- 解决数据丢失问题 :将事件保存到内存数据结构并定期刷新到磁盘的方法,在进程崩溃时会导致未保存的跟踪消息永久丢失。ETW 则将事件记录到内核管理的无锁缓冲区,内核会定期将其刷新到磁盘。
1.2 ETW 组件
ETW 为其设计中的组件赋予了特殊名称:
- ETW
超级会员免费看
订阅专栏 解锁全文
731

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



