3

Windows プロセスの I/O を監視するオーバーヘッドの少ない方法が必要です。

Windows のプロセスによって実行される特定のシステム コールを監視することについて、いくつかの役立つ回答を得ました。最も有望なのは、Windows Performance Toolkit を使用してカーネル イベント トレースを取得することでした。必要なすべての情報は実際にそこから引き出すことができますが、WPT は私が必要とするものに対して非常に過剰であり、その後法外なオーバーヘッドが生じます。

私のアイデアは、C/C++ 依存関係グラフを検出する別のアプローチを実装することでした。通常、これはオプション (-M など) をコンパイラに渡すことによって行われます。これは、そのようなオプションを持つコンパイラとツールでは問題なく機能しますが、すべてが機能するわけではなく、それらを異なる方法で実装することがよくあります。そのため、どのファイルが開かれているかを検出するために strace を使用して Linux でこれを行う別の方法を実装しました。この方法で (たとえば) gcc を実行すると、50% のオーバーヘッド (概算図) が発生します。同様のオーバーヘッドを持つ Windows でこれを行う方法を見つけたいと思っていました。

ツールの xperf セットには 2 つの問題があり、この場合は使用できません。

  • 単一プロセスのファイル I/O イベントを監視する方法はありません。すべてのプロセスをトレースするカーネル イベント トレースを使用する必要があるため、膨大な量のデータが生成されます (gcc、YMMV の実行にかかる時間は 15Mb)。
  • カーネル イベント トレースを使用する必要があるため、管理者として実行する必要があります。

カーネル レベルでのイベントは本当に必要ありません。たとえば、Win32 API 呼び出しの CreateFile() を監視できれば、同様に管理できると思います。また、フォークされたプロセスをキャッチしたい場合は、CreateProcess() を呼び出すこともできます。

何か賢いアイデアはありますか?

4

3 に答える 3

0

Dr. Memory の System Call Tracer for Windowsはまさに私が探していたものです。これは基本的straceに Windows 向けの実装です。

于 2014-04-03T16:02:35.403 に答える