CPU DPC 時間の割合

Microsoft.Windows.Server.6.2.Processor.PercentDPCTime (UnitMonitor)

DPC 時間の割合を監視します

Knowledge Base article:

概要

プロセッサの DPC 時間の割合 (Processor Information\% DPC Time) がしきい値を超えました。システム全体のパフォーマンスが著しく低下する可能性があります。その場合は、オペレーティング システムとアプリケーションのパフォーマンスが低下します。

% DPC Time は、プロセッサが遅延プロシージャ呼び出し (DPC) の受け取り、処理に費やした時間の割合です。DPC は標準割り込みより低い優先順位で実行される割り込みです。高い % DPC Time 値が継続する場合は、プロセッサがボトルネックになっているか、アプリケーションまたはハードウェアに関連する問題によって、全体的なシステム パフォーマンスが大きく低下している可能性があります。

原因

高い % DPC Time 値は、次の 1 つまたは複数の原因によって引き起こされることがあります。

解決方法

プロセッサ関連のパフォーマンス カウンターの最近の履歴を見るには、次の表示を使用できます。

プロセッサ パフォーマンス ビューの起動

高い DPC 率の根本原因を特定するには、次の手順に従います。

割り込みと DPC の処理に費やしたプロセッサ時間の割合を監視します。これを行うには、システム モニターを使用して次のカウンターをリアル タイムで監視します。

% Interrupt Time カウンターと % DPC Time カウンターの値を、各プロセッサ インスタンスの Processor Information\% Processor Time カウンターの値と比較します。

プロセッサ インスタンスの実行中に % Processor Time が持続して 85% を超え、その中で割り込みや DPC の処理に費やされる時間の割合が 15% を超えている場合は、プロセッサがパフォーマンス ボトルネックの原因になっている可能性があります。このボトルネックは、コンピューターのプロセッサをアップグレードするか、プロセッサを追加することで対処できます。

プロセッサ実行中の % Processor Time が持続して 85% 未満であり、その中で割り込みや DPC の処理に費やされる時間の割合が 15% を超えている場合は、パフォーマンスの問題がアプリケーションとハードウェアのいずれかに関する問題の結果である可能性があります。

ハードウェア デバイスが根本原因である場合は、% DPC Time が短時間で著しく増加しているはずです。これは、新しいハードウェアをインストールしたとき、またはドライバーをアップグレードしたときに多く発生します。問題がハードウェアまたはデバイス ドライバーによるものと特定できる場合は、ベンダーと協力して対処してください。

割り込みを対称的に分散しないマルチプロセッサ システムを管理している場合は、ネットワーク アダプターを追加して、プロセッサ 1 台あたりアダプターを 1 台にすると、プロセッサの負荷分散を向上することができます。一般に、アダプターはシステムのスループットを向上させる必要がある場合にのみ追加します。ネットワーク アダプターには、ほかのハードウェアと同様に、固有のオーバーヘッドがあります。ただし、プロセッサの 1 つがほとんど常にアクティブな状態 (つまり、Processor Information\% Processor Time = 100) で、そのプロセッサ時間の半分以上を DPC の処理に費やしている (Processor Information\% DPC Time > 50) 場合は、利用可能なネットワーク帯域幅が既に飽和状態になっていなければ、通常はアダプターの追加によってシステム パフォーマンスが向上します。

アプリケーションが根本原因の場合は、ほとんどの場合、完了に非常に長い時間がかかっている呼び出しを発行したアプリケーションによって、DPC がブロックされています。この間、DPC はブロックされ、キューに入れられます。根本原因となっているアプリケーションを特定するには、上級のパフォーマンス、トレース、および診断を実行して、パフォーマンスに関する問題を引き起こしているアプリケーションを特定する必要があります。

Element properties:

TargetMicrosoft.Windows.Server.6.2.Processor
Parent MonitorSystem.Health.PerformanceState
CategoryPerformanceHealth
EnabledFalse
Instance NameProcessor Information
Counter Name\% DPC Time
Frequency120
Alert GenerateFalse
Alert Auto ResolveTrue
Monitor TypeSystem.Performance.ConsecutiveSamplesThreshold
RemotableTrue
AccessibilityPublic
RunAsDefault

Source Code:

<UnitMonitor ID="Microsoft.Windows.Server.6.2.Processor.PercentDPCTime" Accessibility="Public" Enabled="false" Target="WindowsServer!Microsoft.Windows.Server.6.2.Processor" ParentMonitorID="SystemHealth!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="SystemPerf!System.Performance.ConsecutiveSamplesThreshold" ConfirmDelivery="false">
<Category>PerformanceHealth</Category>
<OperationalStates>
<OperationalState ID="OverThreshold" MonitorTypeStateID="ConditionTrue" HealthState="Error"/>
<OperationalState ID="UnderThreshold" MonitorTypeStateID="ConditionFalse" HealthState="Success"/>
</OperationalStates>
<Configuration>
<ComputerName>$Target/Host/Property[Type="Windows!Microsoft.Windows.Computer"]/NetworkName$</ComputerName>
<CounterName>% DPC Time</CounterName>
<ObjectName>Processor Information</ObjectName>
<InstanceName>$Target/Property[Type="WindowsServer!Microsoft.Windows.Server.Processor"]/PerfmonInstance$</InstanceName>
<Frequency>120</Frequency>
<Threshold>15</Threshold>
<Direction>greaterequal</Direction>
<NumSamples>5</NumSamples>
</Configuration>
</UnitMonitor>