0

WinXp VmWare セッションで vc8 C++ プロジェクトをコンパイルしています。RedHat VmWare セッションでは gcc3.2 よりもはるかに遅いので、タスク マネージャーを調べています。私のコンパイルプロセスの非常に大きな割合がカーネルで費やされていると言っています。それは私には正しく聞こえません。

Win32 の strace に相当するものはありますか? 少なくとも、どのカーネル関数が呼び出されているかの概要を教えてくれるもの。犯人として際立っている何かがあるかもしれません。

4

3 に答える 3

3

Windows リソース キットには、 というツールが含まれていますkernrate。サンプリングプロファイラーです。システム全体または特定のプロセスをプロファイリングできます。デフォルトでは、解像度はモジュール レベルですが、数バイトまで調整できます。ほとんどの時間を消費しているモジュール/ドライバーが表示されるため、デフォルトの解像度で問題ないはずです。

ここでは、その使用に関するいくつかの情報を示します。

于 2008-11-27T18:35:56.243 に答える
2

正確には strace ではありませんが、カーネルのコール スタックを可視化する方法があり、CPU 使用率が高いときにそれをサンプリングすることで、常に何が使用されているかを推定できます。

Process Explorerをインストールし、シンボル サーバー サポートを使用して構成してください。これは次の方法で実行できます。

  1. 更新されたdbghelp.dllを取得するためのWinDebug のインストール
  2. [オプション] | [オプション] でパスを設定して、このバージョンの dbghelp.dll を使用するように Process Explorer を設定します。Process Explorer の Symbols メニューを構成します。
  3. また、同じダイアログで、MS シンボル サーバーとローカル キャッシュが含まれるようにシンボル パスを設定します。

シンボル パスの値の例を次に示します。

SRV*C:\symbolcache*http://msdl.microsoft.com/download/symbols

(_NT_SYMBOL_PATH 環境変数を同じ値に設定して、デバッグ ツールが同じシンボル サーバーとキャッシュ パスを使用するようにすることができます)。ローカルにシンボルがあります。

このように Process Explorer を設定したら、プロセスのプロパティを取得し、[スレッド] タブに移動して、最もビジーなスレッドをダブルクリックします。これにより、Process Explorer が一時的にプロセスにフックし、スレッドのスタックをスキャンしてから、スタック上のさまざまなリターン アドレスのシンボルを調べます。リターン アドレスのシンボルとモジュール名 (MS 以外のサード パーティ製ドライバーの場合) から、CPU 時間が費やされている場所に関する強力な手がかりが得られます。

于 2008-11-27T17:23:14.953 に答える
0

VmWare サポートはその質問に対処する必要があります。おそらく、VmWare 実装のどこかにあるでしょう。

たとえば、IrpTrackerを使用して、カーネルで何が起こっているかを把握できます。もう 1 つのオプションは、カーネル デバッガー、つまりWinDbgを使用することです。CPU 負荷が非常に高い場合は、デバッガーをランダムに中断してコール スタックを調べると、CPU 負荷の背後にあるドライバーが誰であるかがわかります。しかし、私が述べたように、それはいくつかの VmWare コンポーネントになると思います。エミュレーションなしで WinXP の同じコンピューターで問題が解決しないかどうかを確認する価値があります。

于 2008-11-27T19:35:01.163 に答える