【发布时间】:2009-05-19 16:55:38
【问题描述】:
我想要一种低开销的方法来监视 Windows 进程的 I/O。
我得到了几个对Monitoring certain system calls done by a process in Windows 有用的答案。最有希望的是使用 Windows Performance Toolkit 来获取内核事件跟踪。确实可以从那里提取所有必要的信息,但是 WPT 对我需要的东西来说是一个巨大的过度杀伤力,因此会产生令人望而却步的开销。
我的想法是实现一种检测 C/C++ 依赖图的替代方法。通常这是通过向编译器传递一个选项来完成的(例如,-M)。这适用于具有此类选项的编译器和工具,但并非所有编译器和工具都这样做,而且那些经常以不同方式实现它们的编译器和工具。因此,我在 Linux 上实现了一种替代方法,使用 strace 来检测打开了哪些文件。以这种方式运行 gcc(例如)有 50% 的开销(大概的数字),我希望能找到一种方法在具有相似开销的 Windows 上执行此操作。
xperf 工具集有两个问题使我无法在这种情况下使用它们:
- 无法监控单个进程的文件 I/O 事件;我必须使用内核事件跟踪来跟踪每个进程,从而生成大量数据(运行 gcc、YMMV 所需的时间为 15Mb)。
- 由于必须使用内核事件跟踪,我必须以管理员身份运行。
我真的不需要内核级别的事件;我想如果我可以监控 Win32 API 调用 CreateFile() 以及如果我想捕获分叉的进程,可能还可以监控 CreateProcess(),我也可以做到。
有什么聪明的想法吗?
【问题讨论】: