酒飲んで、車いじって、トロンボーン吹いて、寝る。そんな生活に憬れる今日この頃。
日記の更新は気の向くまま、つれづれなるままに・・・

Deferred Procedure Call

最近なぜかメインPCが重たくなっている。特に動画とかがカクカクになっている。はて?以前はそうではなかったのに、突然なんで?とずっと悩んでいた。
元々メインPCのシステムはP-III 1GHz×2のデュアルCPU構成になっているのでマルチプロセッサ対応のアプリなんかでは、早いときは早い(笑)。なので「もしかして片肺飛行になっているのでは・・・」と思ったのだが、タスクマネージャでもProcess Explorerで見ても問題ない。
で、ふとProcess Explorerのプロセスを眺めていたら「DPC」に対する負荷が異常に大きい。「DPCって何?」って調べてみると

DPC(Deferred Procedure Calls)
プライオリティの低くてもいい処理を後回しにして、高いプライオリティでの動作時間を減らす処理方法

とある。うーん、よくわからない。


で、もうちょっと調べてみるとSun ONE Directory Serverのインストール&チューニングガイドのサイトに

マルチプロセッサシステムでネットワークカードからCPUへの割り込みが入った場合、それが緊急度が高くないと判断されるとDPCとなって延期される。この延期されたDPCが特定のCPUに多くなってくると、もう片方のCPUに送られてしまい更に負荷が高くなってしまう。これはWindowsのデフォルト動作である

んだそうです。なるほど、24時間ネットに繋ぎっぱなしでOpenVPNとかも利用しているから、結果としてCPUに見えない負荷を与えているのだろう。


解決する方法として
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NDIS\Parameters
にあるProcessorAffinityMaskの値を0にする(無ければ追加)して再起動すると、

  • 割り込みを処理したCPUが、そのCPUに対応するDPCの処理も行うようになる
  • 1つまたは複数のネットワークインタフェースカードが特定のCPUに固定されない
  • その結果、割り込みとネットワークインタフェースカードで生成されるDPCに対するCPUの処理が改善される。

わけで、結果として重たくなくなりました(^-^)

以上、またしても覚書にて。