Vista版 bootvis

bootvisはXPの起動プロセスの詳細を分析し、また起動を高速化する(かもしれない)機能を持っていることで有名なツール。わたしも高速化機能に加え、ブートプロセスの詳細を意味もわからず眺めるのが好きで、日本語化パッチなどを作ったりしていた。

ところでVistaではbootvisは使うことが出来ない。代わりにWindows Performance Tools Kitを利用することができる。これにはいくつかのロギングツールと、そのログファイルのビューアが含まれる。

早速インストールしてみよう

システム要件として、OSはWindows Vista (RTM, SP1) and Windows Server 2008. アーキテクチャはnative 32bit x86, native 64bit x64(and native 64bit IA64 は試験的)となっている。

インストールを完了すると、スタートメニューにビューア(xperfview.exe)へのリンクが作成される。起動するとこんな感じのGUIが表示される。

アイコンが!!


さて、まだ表示するべきログがないので、Windows再起動のログを収集してみる。準備として、必須ではないが、自動でログインしてくれたほうが分析しやすいので、自動ログオンを構成することを推奨する。
また、ReadyBoostサービスが[自動]になっていないと次のステップで失敗するので注意。


ブート関連のロギングには xbootmgr.exe を使用する。管理者権限でコンソールを開き、以下を実行すると reboot の trace を行う。つまり再起動する(オプションの意味はヘルプを参照してね)。

>xbootmgr -trace rebootCycle -noPrepReboot 

ちなみにPATH環境変数にインストールディレクトリのパスが追加されるため、いちいちcdする必要は無い。


再起動してログインが完了すると、さらに120秒間のロギングが行われる。

ロギングが完了すると管理者権限を要求してくるので昇格させる。

また少しの間処理が行われる。


上記ウィンドウが消えたらスタートメニューからビューアを起動し、openメニューでログファイルを開く。ログファイルの場所は、xbootmgrコマンドを実行したディレクトリ。

きた bootvis風きた!
左側に表示されている種類のグラフを表示できる。

シンボルで詳細情報の取得する

「CPU Sampling by CPU」グラフを右クリックして「Load Symbols」にチェックした後、「Summary Table」を表示させる。

Unknownの文字がいっぱい。シンボルが無い場合、使用されたAPIまでは調べることが出来ない。

API情報まで取得するには、ビューアがデバッグシンボルを参照できる必要がある。以下のシステム環境変数を設定する。
環境変数名前:_NT_SYMBOL_PATH
値:SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols *1


ビューアを再起動し、同じく「Summary Table」を表示させると、必要なシンボルをhttp://msdl.microsoft.com/download/symbolsからC:\Symbolsにダウンロードするため、プロンプトが表示されるので [Yes]

非常に長い時間がかかることがあるが、これが完了すると呼び出された関数を判別できるようになる。みゅーん。

起動を最適化してみる

最適化を行うには、boot(もしくは rebootCycle)に -prepSystem オプションを渡す。

xbootmgr -trace boot -prepSystem

実行すると、計3回再起動する。2度再起動したあと、処理中を示すウインドウが表示されっぱなしになるが、この間はデフラグが実行されている*2ので10分程度待つ。完了すると3回目の再起動が行われる。


さて、上記ログから起動時間の指標として userinit.exe の終了時間を参照してみる。プロセスの情報は「Process Lifetimes」で確認することが出来るので、この結果を最適化前後で比較してみる。

  :プロセス名   (PID) , 開始時間    , 終了時間    , 活動時間
前:userinit.exe (1812), 38.242937300, 64.818710199, 26.575772899
後:userinit.exe (1832), 20.089975401, 53.429253159, 33.339277758
                      ▲18.152961899▲11.389457040  +6.763504859

ちゃんと速くなってるっぽい。たぶん。まあ、その辺は興味がある人は試してみれば良いのではないかと。
ちなみに2008では最適化機能は動作しない仕様。残念。


一連の処理を途中で中止したいときは -remove オプションを渡す。

xbootmgr -remove


実行中の処理が終わった段階でメッセージが表示され、以降の再起動などを含む処理がキャンセルされる。


ネタ元:マイクロソフトのEngineering Windows 7 ブログ - ブートのパフォーマンス

追記 2009/02/12

起動速度関連として、KB958909 Windows Vista にアンチウイルスソフトウェアをインストールすると、ログオンに時間がかかるようになり、Setupapi.app.log ファイルが巨大化するも確実に対応すること。私の環境では45秒ほど短縮された。

(beforeではログオン処理開始まで40秒程度空きがある。この間はservices.exeが特定の関数を継続して呼び出しているようだ。)

*1:ディレクトリ指定は任意。

*2:このとき、defrag.exe には -p <n> -s <XXXXXXXX> -b C: という非公開形式のコマンドラインが渡されている。-b は bootだろうか。