インストールと、CPUを最も使用しているプロセスを監視して、CPUに過度の負荷がかかっていないかどうかを確認しようとしています。
現在、カウンターを使用してperfmonでインストールを監視しています
\Processor(_Total)\% Processor Time
(全体的な使用法)\Process(*)\% Processor Time
(プロセスごとの使用量)。私が気が進まないのは、ログをCSVに出力すると、
\Processor(_Total)\% Processor Time
!= Process(_Total)\% Processor Time
\Process(_Total)\% Processor Time
!=実行中のすべてのプロセスの\Process(x)\% Processor Time
の合計(x
)私は何が間違っているのですか?
使用された合計プロセッサ時間(\ Processor(_Total)\%Processor Time)とプロセスの合計CPU時間(Process(_Total)\%Processor Time\Process(_Total)\%Processor Time)の不一致は、おそらく時間によるものです。高架IRQLで過ごしました。これは、PerfMonでは「%割り込み時間」および「%DPC時間」として表示されます。
割り込み時間は、割り込みサービスルーチンで費やされた時間、またはそれらとシリアル化された時間です。このようなコードは、IRQL3以降で実行されます。 DPC時間は、「DPCルーチン」、またはそれらでシリアル化されたコードで費やされた時間です。このようなコードはIRQL2で実行されます。DPCルーチンは主に、割り込みによってトリガーされる作業を処理するために使用されますが、ISRと同じシリアル化コンテキストで実行する必要はありません。
DPCレベル以上で費やされたCPU時間は合計プロセッサ時間に含まれますが、スレッドまたはプロセスのCPU時間には含まれないため、不一致が存在します。これは、そのようなコードが必ずしも現在のスレッドのアクティビティに関連付けられているとは限らないため、その間、現在のスレッドを「充電」する意味がないためです。
実行中のすべてのプロセスの\ Process(_Total)\%プロセッサ時間と\ Process(x)\%プロセッサ時間の合計のわずかな違いは、PerfMonでのデータ収集の問題が原因である可能性があります。ご覧のとおり、「_ Total」と呼ばれるプロセスオブジェクトはなく、その概念に対応するCPU使用率カウンターのセットもありません。 PerfMonは、収集時に存在する各プロセスのCPU時間を合計するだけで、この合計を計算します。同様に、すべてのプロセスのCPU時間の割合が同時に収集されるわけではありません。したがって、PerfMonによって観測された合計と、ディスプレイに表示されるすべてのカウンターを合計したときに得られる合計との間にわずかな「ずれ」が発生する可能性があります。