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