CPU を食べているドライバは誰?
ネットワークファイルコピー中にWindows Server 2008 カーネルが高負荷
https://www.m-tea.info/2009/11/windows-server-2008.html より。
“System” による CPU の消費が激しいなど、タスクマネージャでは特定できない妙な現象に遭った時には KernRate を使ってみましょう。
KernRate は Windows Driver Kit に同梱されています。Windows Driver Kit は Device Driver を書くためのものですが、Driver なんて書かないよ、という方も問題解決の最終手段として是非お使いください。
(当方、問題なく動いている環境ですが…) 実際に問題を特定してみましょう。
まずは WDK をダウンロード、インストールします。
Windows Driver Kit Version 7.0.0
https://www.microsoft.com/downloads/details.aspx?FamilyID=2105564e-1a9a-4bf4-8d74-ec5b52da3d00&displaylang=en
既定では C:\WinDDK\7600.16385.0 に WDK がインストールされます。
その下の tools\other\%PROCESSOR_ARCHITECTURE% に移動すると以下のファイルが用意されていると思います。
それでは Let's 解析!
まず、コマンドプロンプトを管理者権限で起動します。コマンドは単純明快
> kernrate.exe
問題を再現させて数十秒程度待ち、Ctrl+C で終了させます。すると、以下のような出力がなされます。
…おお。NTOSKRNL (NT Kernel) がほとんどの時間を消費している!(99.7% が Idle時間なので 0.3% のうちの 98% ですが…)
では、ntoskrnl のどの部分が最も時間を消費しているのか調べて見ましょう。krnlrate.exe に –z moduleName オプションをつけるだけです。
> kernrate.exe –z ntoskrnl
このことから、”System” と呼ばれていた謎の 0.3% の CPU 使用率の正体が KeUpdateSystemTime() であることがわかりました。
(単純にタイマー割り込みを処理しているだけです)
おかしな現象にはまったらぜひこのようなツールをご活用ください。
Windows 7 で Core Parking を利用する方法 もよろしくです。