CPU を食べているドライバは誰?

ネットワークファイルコピー中にWindows Server 2008 カーネルが高負荷
http://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
http://www.microsoft.com/downloads/details.aspx?FamilyID=2105564e-1a9a-4bf4-8d74-ec5b52da3d00&displaylang=en

既定では C:\WinDDK\7600.16385.0 に WDK がインストールされます。

その下の tools\other\%PROCESSOR_ARCHITECTURE% に移動すると以下のファイルが用意されていると思います。

tools

それでは Let's 解析!

まず、コマンドプロンプトを管理者権限で起動します。コマンドは単純明快

> kernrate.exe

問題を再現させて数十秒程度待ち、Ctrl+C で終了させます。すると、以下のような出力がなされます。

kernrate

…おお。NTOSKRNL (NT Kernel) がほとんどの時間を消費している!(99.7% が Idle時間なので 0.3% のうちの 98% ですが…)

では、ntoskrnl のどの部分が最も時間を消費しているのか調べて見ましょう。krnlrate.exe に –z moduleName オプションをつけるだけです。

> kernrate.exe –z ntoskrnl

module

このことから、”System” と呼ばれていた謎の 0.3% の CPU 使用率の正体が KeUpdateSystemTime() であることがわかりました。
(単純にタイマー割り込みを処理しているだけです)

おかしな現象にはまったらぜひこのようなツールをご活用ください。

Windows 7 で Core Parking を利用する方法 もよろしくです。

Published 24 November 09 10:59 by masaki

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

No Comments

Leave a Comment

(required) 
(optional)
(required) 

  
Enter Code Here: Required

Search

This Blog

Syndication

Page view tracker