一、目的
为了实现监控磁盘活动的进程信息(微软自带资源监视器软件)
二、了解ETW
ETW是Event Tracing for Windows的简称,它是Windows提供的原生的事件跟踪日志系统。由于采用内核(Kernel)层面的缓冲和日志记录机制,所以ETW提供了一种非常高效的事件跟踪日志解决方案。
-
事件监测(Event Instrumentation)总会包含两个基本的实体,事件的提供者(ETW Provider)和消费者(ETW Consumer),ETW框架可以视为它们的中介。ETW Provider会预先注册到ETW框架上,提供者程序在某个时刻触发事件,并将标准化定义的事件提供给ETW框架。Consumer同样需要注册到ETW框架上,在注册的时候可以设置事件的删选条件和接收处理事件的回掉。对于接收到的事件,如果它满足某个注册ETW Consumer的筛选条件,ETW会调用相应的回调来处理该事件。
-
ETW针对事件的处理是在某个会话(ETW Session)中进行的,ETW Session提供了一个接收、存储、处理和分发事件的执行上下文。ETW框架可以创建多一个会话来处理由提供者程序发送的事件,但是ETW Session并不会与某个单一的提供者绑定在一起,多个提供者程序可以向同一个ETW Session发送事件。对于接收到的事件,ETW Session可以将它保存在创建的日志文件中,也可以实时地分发给注册的消费者应用。ETW会话的开启和终止是通过 Session的开启和终止是通过ETW控制器(ETW Controller)进行管理的。除了管理ETW Session之外,ETW Controller还可以禁用(Disable)或者恢复(Enable)注册到某个ETW Session上的ETW Provider。
整个ETW模型由ETW框架本身和ETW Provider、ETW Consumer以及ETW Controller组成
三、分析
通过Microsoft Message Analyzer工具(网上自行下载,这个工具很强大,可以监控很多东西,需要自己多研究)看看是否有我们需要的数据(打个样,想要监控其他性能数据的话思路差不多)
这里可以添加系统或自定义的提供者,我们优先找系统的
关键字搜索,找到disk相关的provider,如果不清楚的话可以全选,后面再从实时的数据中筛选出有用的。开启监控后可以看到很多数据
其中Windows_Kernel_Trace数据是一定有的,红色圈起来部分是Windows_Kernel_Trace数据解析的结构体,结构体详情在下面显示
其中Etw部分对应的是结构体EVENT_RECORD的数据。将Windows_Kernel_Trace过滤,得到我们真正想要的磁盘io数据
可以看到Microsoft_Windows_Kernel_Disk是我们真正需要关注的provider,这其中包括写事件(EventID:11),读事件(EventID:10),刷缓冲事件(EventID:14)。不同事件的数据结构也很清楚了,现在要做的就是在代码中关注对应事件并解析即可
注:在这个文档中我们也可以看到该一些事件和结构体信息github.com/repnz/etw-p…
作者:头微凉
链接:https://juejin.cn/post/6998491308687884301
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
原文始发于微信公众号(汇编语言):C++监视磁盘活动进程信息(ETW同理适用其他性能监控)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论