2011-01-06 6 views
1

時には、システムが応答しなくなるまで、コードはデバイスドライバを利用することがあります。私のプログラムによるデバイスドライバのCPU/IO使用率の測定

最近、システムをほとんど反応させないWIN32/VC++コードを最適化しました。しかし、CPU使用率は非常に低かった。その理由は、1000年代のGDIオブジェクト(ペン、ブラシなど)の作成と破壊でした。いったんすべてのオブジェクトを作成するコードを一度しかリファクタリングしないと、システムは再び反応しました。

これは、与えられたプログラム/関数/コード行のデバイスドライバ(GPU /ディスク/ etc)のCPU/IO使用量を測定する方法はありますか?

+0

プログラム全体の効果を確認するには、プロセスエクスプローラを開き、システムプロセスの下にあるスレッドとcsrss.exeの下にあるスレッドを確認します。それがライン/メソッドなどにそれを相関させることが可能かどうかは分かりません。 –

+0

[この方法](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)を見てください。その測定値は非常に荒いですが、コード行、時間の経過、I/OかCPUかを正確に示しています。 –

答えて

3

ジャンプする前に基本的なアイデアを与えるには、SysInternals Utilitiesのさまざまなツール(現在Microsoft製品、http://technet.microsoft.com/en-us/sysinternals/bb545027を参照)を使用できます。プロセスエクスプローラ(procexp)とプロセスモニタ(procmon)ドリルダウンのプロファイリングを行う前に、どのタイプの遅さについての基本的な考えを得るために使用できます。

次に、xperf http://msdn.microsoft.com/en-us/performance/defaultを使用してドリルダウンすることができます。正しいセットアップで、このツールを使用すると、プロファイリングコードを既存のプログラムに注入することなく、遅さを引き起こす正確な機能を実現できます。それを使用する方法について話しているPDCのビデオは既にあります。http://www.microsoftpdc.com/2009/CL16と私はこのツールを強くお勧めします。自分の経験によれば、properxp/procmonを最初に使用し、疑わしいものをxperfでターゲティングする方が良いです。なぜなら、xperfはスマートな方法でフィルタリングされなければ圧倒的な情報量を生み出す可能性があるからです。

競合をロックする特定の困難なケースでは、Windows用のデバッグツール(windbg)は非常に便利で、その使用法について話している専用の書籍があります。これらの書籍では、通常、ハング検出について説明していますが、ここでは速度の低下を検出するために使用できる技術がかなりあります。

2

多分ETWを使用できますか?それがどの行が何を引き起こすのかを理解するのには役立ちませんが、アプリの仕組みの全体像を把握しておく必要があります。

0

プログラムのCPU /メモリ/ディスクの使用状況をリアルタイムで確認するには、Windowsに付属のリソースモニタとタスクマネージャプログラムを使用します。 systimeを出力することによって、コードのブロックが他のコードブロックとの相対的な時間を見つけることができます。一度に多くの監視を行わないことを忘れないでください。

プログラムのCPU時間とコードブロックの時間の割合を知っていれば、コードブロックにかかるCPU時間のおおよその時間を見積もることができます。

関連する問題