Windows7 の起動時間改善メモ
ドキュメント履歴:2012年 3月17日初回アップ
起動が早いはずの Windows7+iCore7 マシンが何故か異常にモタモタしていることに気づいた。O/Sの起動も遅いが、起動直後はアプリを起動して文字入力しようとすると 辞書変換がまた遅い。酷い時は1秒くらいして変換されるので、次の次辺りまで入力が終わっていて、変換候補の選択が間に合わないでエンターキーを押してしまっていることもザラ。1か月ほど時間が取れずに Sleepを多用したりして我慢していたが、I-Oデータの地デジボードのように、Sleepからの復帰でたまに録画エラーが発生するものもあり、さすがに我慢の緒が切れて徹底的に解析してやろう!と腰を上げた。
結論からいえば、起動が遅い原因はWestern Digital のHDDは 低温(<18℃)では書き込み速度が低下するのだと分かったが、このページはその解析過程で使用した各種の解析ツールや起動時の HDDアクセス分散方法についてまとめたもの。
- 解析編 (結論から知りたければここ)
- Process Explorer
- Soluto
- Windows Performance Analyzer
- スタートアッププログラムの見直し
- 自分自身の実行に必要なプログラム(System)
- パソコンの土台部分でアプリのために働くプログラム(Explorer.exeなどサービス)
- LANなどの各種ハードウェアを動作させるために必要なドライバ
- その後、ユーザがログオンするとユーザ毎のデスクトップなどの固有な設定を行ないつつ、「スタートアップ」に登録された常駐アプリを HDDから読み込んで起動していく。
- ユーザが操作したアプリの起動
- 実行はするがタイミングをずらす
- 「順太郎クン」を使って起動順の詳細な制御をおこなう
- 起動時間の改善結果
- 番外編
- その他の情報
まずは若干紆余曲折した起動時間解析の顛末から
起動が遅い時に、ガジェットの CPUメータを見ても、ほとんど振れていない。一方、HDDのアクセスランプは点きっ放し。明らかに HDDアクセスが込み合って待たされている感じだ。
そこで まずはどんなプロセスがHDDアクセスを占有してるのかチェックしたいと思って探すと、ProcessExplorerという目的ズバリなツールが見つかった。プロセスやサービスごとにメモリの占有量などを表示してくれる。設定により HDDのアクセス量も表示してくれ、アクセス量でソートすると多い順にサービスやアプリを並べてくれる。

起動後30分ほどこの ProcessExplorerを起動しておいた結果では、上図のように圧倒的に mtvManager.exe(I-Oデータの地デジTVアプリ)が HDDから多くのデータを読み込んでいることがわかった。30GBくらいも読み込んでいることもある。この値は私の場合、ほとんど録画ファイルの総量だ。毎回起動後に録画済みファイルを全部読みこんでチェックしているような<姑息な>感じ。コイツか!と思って、サービスやスタートアップの中から I-Oの地デジ関連のヤツを探し出して、すべて自動起動しないように設定してみた。
で、再起動してみると 確かに起動が早い。今まで デスクトップが表示されて、アプリを起動させ操作できるようになるのは 5分くらいかかっていた気がするが、2分くらいで操作開始できる。
やっぱりコイツか! と半ば納得した。ところが・・・・翌日になって、起動すると再びモタモタしている! エッ!と思って、ProcessExplorerを見ると 地デジ関連のアプリは起動していなさそう。??? で、再起動。今度は早っ! 何度か再起動して確認するが、何故か早い。
(沈思黙考)・・・・どうも朝一番の起動時が問題なようだ。で、次に俎上にあげたのが セキュリティソフト(Avast)。1日に 1回だけスキャンするような設定になっていたのかな?と設定画面を眺めるが、特にそんな設定はない。基本的な動作として、(1日の)最初の起動時に、全部サービスやアプリの実行ファイルをまず Avastがチェックしている・・・だから安心というような話も頭のどこかにあって、どうしようか悩んだ。しばらくウイルスの洗礼は受けていないとは言うものの、外すには手間と勇気がいる。2~3日他の部分を触ってみたものの、やはり朝一番の起動だけは改善のキザシはないので思い切って Avastをアンインストール。
しかし、翌日の立ち上げではやっぱりそれほど改善しない。Avastは起動時の処理に 20~30秒かかっているのでその分だけは速くなったんだろうけど、4~5分かかっている全体の中では、2度目の起動(2分程度)に較べて体感できるほどではない。毎回 ストップウォッチと睨めっこで起動時間を計るのも面倒だし・・・と、起動時間・計測などのワードで検索すると Solutoという毎回の起動時間を自動で記録して、遅くなったと気づいた場合に後からでも、いつから遅くなったのか確かめることができ、その前にどんな変更を加えたのかが自動で記録されるというツールが見つかった。しかもO/S起動時に自動起動されるサービス毎の処理時間と、そのうちの不要と思われるサービスをリストしてアドバイスをしてくれる‥等々という「超」のつくくらい便利なツールだ。
Solutoがサービスとして起動されるとデスクトップ左下に出現する表示
起動中は前回起動時間との差がカウントダウン、カウントアップしていきすべてのサービスの起動終了でチェックマークになって起動時間が表示される(数秒間だけ)。
Soluto の起動時間 詳細表示画面

緑色のバーが、「オススメ」で自動起動を外していいサービスでこれを外せば 0.4秒縮まることが分かる。橙色のサービスは「かなり外せる可能性がある」サービス、灰色は Solutoが外せないと判断したサービス。下の右端に並んでいる青い帯は既に起動時には外してしまったサービス(Solutoの設定で「Pause」したものだけ)。
但し私の場合、橙色のサービスには グラボ関連のものやオーディオ関連のものも含まれており、外した場合それらの機能が使えなくなるものがほとんど。もし「Pause」させて問題あれば後から、右下の青いバーの該当サービス部分にカーソルを当てて「In Boot」をクリックすれば元通り起動するようになるので かなり気軽に試すことはできる。
更に 親切なことに、各サービスの帯の上にカーソルを当てると、下の図のようにそのサービスの詳細や他のユーザの何割が Pauseさせているのかなどの情報が表示される(逆にそうした情報を送信しているらしいが)。

今回は、同様の目的で BootTracerというツールも一緒にインストールしてみたが、私の場合 圧倒的に Solutoの方が役に立った。
Solutoには、その他 サービスがクラッシュした時にそのクラッシュの情報を記録して対応策があれば表示する機能など、これでもかというくらい沢山の機能が盛り込まれている。

サービスがクラッシュした時に出現する「天使」(左図の天使の羽のマークがデスクトップの右端から出現してフワフワ上昇していく。まさに「お亡くなりになりました」というギャグらしい) と解決策の提示(下図:この場合なし・・・ほとんどの場合ないと思われるが、Power Userをクリックして解決策を記入し送信すると他のユーザの Solution として使われるようだ)

起動時間の改善で Soluto自身の起動時に2秒くらいかかるという矛盾はあるものの、それさえ覚悟すればかなりお勧めのフリーウェアだと思う。
悪あがきで、とうとう MSの開発ツールキットの中に含まれる WPAをインストール。
単に起動時間の解析だけのためだけに、どう考えても大げさなSDKをインストールして、しかもその中から Performance Analyzer だけを利用するという「ネズミ一匹捕えるのにトラの檻を持ち出す」ような準備だったが、どうにかインストールできてトライアンドエラーしながらも初歩的な使用は出来るようになった(と思う)。
まずは コマンドラインから xbootmgr を起動して ブート時のトレースを行う。
xbootmgr -trace boot -postBootDelay 480 -resultPath D:\temp
のような感じでコマンドラインから xbootmgr を起動して起動後のトレース時間(秒)と ログの保存場所などを指定して実行する。
xbootmgrコマンドが実行されるとすぐ自動でシステムが再起動してトレースが開始される。朝一番の(長時間放置後の)トレースをしたければ、再起動前に一瞬パワーが切れる瞬間があるのでその間に ACラインをオフしておいて、次の起動時に再び ACラインをオンにしてから PCの電源ボタンを押して立ちあげるとトレースが実行される。そんな苦労をしつつトレースのログをとると 保存フォルダに *.etl という数百MBのファイルが生成される。コマンドの -resultPath にファイル名を指定しない場合は毎回同じファイル名となって古いものは上書きされて消えるので注意。
そのファイルを インストールした Windows Performance Analyzerに読み込むと幾つものグラフが表示される。
下の図はそのグラフの中 全てのディスクアクセス(上)と、プロセス毎の個別のディスクアクセス(下)を表示したもの。恐らく 下の細かな個別のグラフのトータルが上のグラフになっていると思われる。
朝一番の起動の場合のトレース結果:HDD温度は 18℃以下

下:シャットダウン直後に起動(普通の再起動)した場合のトレース結果:HDD 18℃以上

プロセス毎のアクセスは「Process」という部分をクリックするとプルダウンでプロセスの一覧が表示されるので、必要なプロセスにだけチェックマークするとそのプロセスのアクセスグラフだけが表示されて見やすくなる。
上の二つの図を見比べても、明らかに朝一番の起動時にディスクアクセスが輻輳して 100%近い時間が 400秒近く連続しているのがわかる。おそらくこの期間にアプリを立ち上げてもディスクアクセスは待たされてしまうのだろう。
(後になってから考えると、このグラフの縦軸は「率」であって「量」ではないのだが、当初何となく「量」と思ってしまい、朝一番の起動時には余分なプロセスが走っているんじゃないかと一生懸命プロセスを見比べてしまった)
上記のグラフの上で、右クリックして表示されるメニューから「Summary Table」を選ぶと、各プロセルごとのディスクアクセス量が表で表示される。
しかしトレース時間は長めに設定したいので、全トレース期間の Summary Table表示をしたのではアクセスが輻輳中だけのデータが得られない可能性もある。その場合 あらかじめ、グラフの時間軸上で表示範囲をドラッグしてズームしておく。こうして期間をクリップしてから Summary Tableを表示させると、その時間内だけのアクセス量が表示される。朝一番と再起動時それぞれのログについて 0-120秒の間のアクセスの Summary Tableを表示させた結果が下の図。
朝一番の起動時のディスクアクセステーブル

再起動時のディスクアクセステーブル

一目して 朝一番の起動では、2分以内に読み込まれるプロセスの数が少ないのが分かる。この表では 各プロセスのトータルが表示されないようなので、エクスポートして Excelに読み込ませてトータルを計算したのが以下の図

Quick は再起動時、Slow は朝一番の起動時のトレース結果のトータルで、起動後 2分までに読み込まれるサイズ合計の比が、再起動では朝一番の 1.5倍程度になっており 朝一番の起動時の HDDアクセスが遅いことが裏付けられた。
Windowsは起動時に、
など多種多様なファイルを HDDからメモリ上に読み込んでいく。
これらの一連の動作が終わってからやっと
通常、A~C まではパソコンの動作に必須、或いは作業環境の構築に必須なプログラムで、例えばインターネットもLANも使わないから LANのドライバや TCP/IPなどのネット関連のドライバやライブラリは必要ない・・・等という特殊な使い方以外は端折ることはできない。比較的簡単に起動の処理ルーチンを見直せるのは Dのスタートアップのプログラムということになる。
ということで、まず「コントロールパネル」>「管理ツール」で「システム構成」を表示させ「スタートアップ」タブで、登録・実行されているアプリを確認する。

ここには Windowsが起動するときに実行され、メモリに常駐して実行されるプログラムのリストが並んでいる。ここで必要ないものは左側のチェックをはずすと、起動時に自動的に実行されることはなくなる。アプリやプリンタなどのハードをインストールすると、起動時に勝手にアップデートをチェックしてアップデータが存在する場合に知らせるようなお節介なアプリがインストールされることが多いが、それらはチェックを外した方がいい。
ただし、例えば、ウイルスチェックのようなプログラムを外してしまうとセキュリティ上問題が出るし、オーディオやビデオについても動作に問題が出ることがありうるので注意が必要。チェックを外してもアンインストールしない限りこのリストから消えることはないので、もし問題が出たらここのチェックを戻せばいい。
例えば、DVDドライブを監視して挿入されたディスクのタイプによってアプリを起動するようなプログラムがスタートアップに登録されていると、起動後にそのプログラムがメモリにロードされるだけでなく DVDドライブをチェックしに行くのでドライブのチェックが終わるまで数秒間の無駄になる場合もあり、(少なくとも私は)そうしたアプリに常駐の必要はなく、アプリを起動したときに一緒に起動してくれれば構わないと思って積極的に外している。
しかし、実際に スタートアップから外せるプログラムを外してみても、体感できるほど大きな改善効果が出る可能性は低い。
スタートアップに登録されたプログラムはユーザのログオン後、HDDへのアクセスが可能になり次第次々にメモリにロードされて実行される。この時、プログラムによっては順次動作に必要な関連ファイルの読み込みや過去に処理したデータもHDDからメモリに読み込んでチェックしたりするので HDDへのアクセスが かなり輻輳することになる。
例えば、ウイルスソフト等は起動された後にメモリやHDD上のシステムファイルのチェックを行った後、まず新しいチェックパターンがダウンロード可能になっていないか Webにアクセスして確認し、可能ならダウンロードしてHDDに一旦記録してから必要なファイルをメモリに読みだして監視を行う。あるいはメールソフトが登録されていれば、起動後に受信トレーなどのファイルを読み込んで未読メールをチェックしたり、ゴミ箱トレー内のファイル整理を行ったりする。
それらは 通常優先順位が設定されておらず、ほとんどの処理が HDDにアクセスする順番待ちとなって待たされるので一見応答なし状態になることも多い。
しかし、スタートアップに登録されたプログラムも全てが最初から常駐しなければ困るプログラムばかりではない。サービスもしかり。私の場合 起動後 5分~10分くらいはメールチェックなどしかやらないので、その間には使わないサービスも多い。したがって、これらのプログラムの起動の順番やタイミングを個別に調節できれば、少なからず起動時の HDDアクセスの改善が期待できる。
Windowsにはプログラムの起動を制御するためにタスクスケジューラなどの機能が備わっているしサービスにも遅延起動(約 2分で固定)というオプションがあるが、「システム起動の 5分後に実行」などの細かな設定をしようと思うと簡単にはいかない。
このアプリは、登録したアプリの起動の順番だけでなく、「○分後に実行」とか「HDDや CPUの使用率が○%以下になったら実行」などの詳細な制御条件が設定できるので、今回の目的にはピッタリ。
順太郎クンをスタートアップに登録して、逆にスタートアップやサービスに登録されているプログラムのいくつかをこちらに移して起動をコントロールしてみる。
「順太郎クン」のメイン画面

「順太郎クン」は(インストールは標準的なものなので割愛)インストールしたら、まず「グループの追加」で新規にグループを作る。

グループ情報の設定ウインドウが開く

グループ名称を適当に付ける。「監視プログラム」は ここに登録したプログラムが起動するまでこのグループの起動は待機する。Windows起動後無条件で実行したい場合は空欄。手動で実行するプログラムを登録すると、そのプログラムを実行しない限り 順太郎クンとそこに登録したプログラムが起動しなくなるので注意。
回数指定は、「無し」以外をチェックした場合その下の開始時刻を指定して、その時刻まで順太郎クンが常駐後実行待ちとするか毎日/毎週などの繰り返し間隔を指定する。例えばウイルススキャンや定期バックアップのように HDDへのアクセスが集中する作業は昼休みや、帰宅後などの時間を指定するなどの使い方だろうか。(最近のウイルススキャンは昔と違って、定期的に全ファイルを検査というより「リアルタイムシールド」等という「入り口でシャットアウト」式に変わってきているようだが)
「実行画面を表示する」のチェックは、外すと順太郎クンに待機時間を設定したりした場合、忘れてしまったときになぜ起動しないのか混乱するなどの懸念がありそう。逆に 毎週1回などの場合はうるさいので外した方が良いのだろうか?
次に、上記で作ったグループに実行プログラムを登録していく。「ファイル」メニューの「ファイル追加」を実行する。

ファイル設定ウインドウが開く

名称は適当に分かりやすい名称を決める。「プログラム設定」の「プログラム」欄に実行させたい実行ファイルを D&Dするか参照ボタンを押して指定する。
そのプログラムに毎回必ず決まったファイルを読ませて起動したい場合などは、引数に指定すればいい。
その下の「待ち設定」が順太郎クンの一番の特徴。「タイムアウト」は 「-1」か「0」なら即実行。600秒なら 10分待機してから指定したプログラムが実行される。
「HDD使用率」はその右側のドライブに指定したドライブへのアクセスが指定%以下になるまで待機する。今回は、ここで指定を加減してみた。1%刻みで設定が変えられるが、HDDへのアクセスは Windows起動の度に結構変動するので 10~20%単位で変更してもそれほど有意差が出と感じることはなさそう。
目的のプログラムを上記手順で全て 「ファイル追加」で追加したら今度はそのグループをスタートアップに登録する。「グループ」メニューの「スタートアップにショートカット作成」を選ぶ。

一通り以上の設定を行った後、試しに Windowsを再起動してみる。
再起動後デスクトップが表示されて暫くすると、「順太郎クン」のウインドウが表示されるが、プログラムの起動条件に HDD使用率や待機時間などの条件を設定した場合は 「ただいま待機中」となる。HDDのアクセスが設定値以下になったり待機時間が過ぎると、0/4 → 1/4 → 2/4 などと順次実行されていく。

全部の登録プログラムの実行が終わると「順太郎クン」は終了しこのウインドウは消える。
何かの都合で、待機中のプログラムをすぐに実行させたければ「即実行」ボタンを押す。逆にそのプログラムを実行させたくなければ「スキップ」、当面そのまま待機させるなら「一時停止」ボタンを押す。

というような感じで設定して使ってみているが、さすがに 10分くらい待ってから mtvGuideDigital を実行すると他のプログラムのHDDアクセスも減ってきているので、当初の問題であった 一般のアプリを実行させたときの日本語変換などのモタツキ感はなくなった。
mtvGuideDigital 以外にこんなに HDDアクセスが邪魔っけなアプリは多くないと思うが、起動時のHDDアクセス集中を分散させるにはとても有効なツールだと思われる。
上記のように、遠大な解析と対策を講じたが 残念ながらこうした「小細工」は、やはり小細工に過ぎず 起動時間というパラメータだけで見ると、1.5分~5.5分くらいの間を行ったり来たりしている。確かに短い方(再起動などHDD温度が高い時)は30秒くらい縮まった感じはするが、長い方はあまり変わらない(所詮 6分のうちの 30秒が縮まっても体感できない)。 しかし、HDDのアクセス集中は分散できたので、起動した後の 日本語変換などのモタツキ感はかなり改善したように思う。
結局、ここまで時間をかけて検討しておきながら「何だ!」と言われそうだが、無理をして Western DigitalのHDDを使い続ける「義理」もないので、当面寒い間は O/Sだけは Seagateに戻して、そのうちに SSDに移行しようと計画している。
<3月27日追記>
ほとんど使っていない 2ndマシンに、Hitachiの 7200rpm、1TB HDDの HDS721010 を搭載していたことを思い出した。Hitachiはアクセス音が独特な「ドコドコ」という感じの低音で何となく TV録画の時に気になっておりメインマシンには使わなかったが、上記の WDの低温特性で考え直して換装してみた。3日ほど運用してみたところ 今朝の起動時に何と 1分を切って 58秒という起動時間を計測した。しかも、下の Solutoの履歴グラフでわかるとおり 起動を繰り返すたびに着実に時間が短縮されていることが分かる。これは O/Sの Prefetchや起動ファイルの再配置などの起動時間改善機能が正常に働いて時間が短縮しているようにも思えるが、WDの時には低温起動時と再起動時でアクセススピードが違いすぎて正常にフィードバックがかからなかった可能性と、ばらつきが大きすぎてこの程度の差は埋もれて表面化しなかったような気がする。

<4月1日追記>
Hitachi に換装して 1週間ほど運用した後の Solutoの履歴画面(下図)。Avastのアップデートがあるときだけは 30秒ほど起動時間が延びることもあるが、それ以外は 1分~1分10秒程度に納まっておりグラフからも換装前後の起動時間の差は歴然。

なお、上図の左側の Western Digitalの起動時間で、谷(1分台)の部分があるのは、今回の検討のために再起動した場合のデータであり、一日1回の通常の使い方だと 5~6分台の時間に張り付いたままとなる。
ハムズソフトのページを見ていて、もう一つ面白いツールに目がとまった。ディスクアクセス参照ツール「PerfDiskTransfer」 というツールで、よくある CPUメータなどのように HDD(ドライブ)の使用状態・処理待ち状態などの情報を表示してくれるツール。

私の環境では、CPU処理が 100%になることはまずないが、HDDアクセスが待機状態になることは多いので、どんな時にアクセスが集中するのか表示してくれるのはありがたい。 今回の解析に使った ProcessExplorer というツールも同じ目的だが、「PerfDiskTransfer」の方は、プロセス名など細かな表示ではなく、ドライブ全体の情報をバーの長さで直感的に表示してくれる。しかも ProcessExplorer は起動後の累積バイト数で表示するので、瞬間的に多くの転送をおこなっているプロセスが分かりづらいが、とにかく今 C:ドライブがどんな状態か知りたい、というような場合には瞬間的な「転送量」(赤いバー) 「転送待機量」(青色のバー)が分かっていい。通常はこちらを使用して、何か問題があった場合 解析するのに ProcessExplorer を使うというような使い方が良さそう。
尚、右図の 緑のバーは 空き容量(%)、一番下の 「+」は 赤:CPU使用率、青:ネットワークの転送量、緑:物理メモリの使用率%で、ネットワークの応答が遅い場合などの参考にもなりそう。
蛇足:今回 起動時の時間を見直すためにいろいろ調べた結果、いくつか役立ちそうなツールが見つかったので、リストしておく。アイコンがあるツールは上記に説明があるもの。
スタートアッププログラムの管理 | |||
スタートアップ プログラムなどの起動支援(順番・遅延・HDD監視など) | |||
![]() |
順太郎クン | XP/Vista/7 | |
---|---|---|---|
スタートアップやサービスなどの常駐プログラムの起動制御ツール プログラムの起動時に待機時間や CPU/HDDの使用率など細かな起動条件の設定が可能で O/Sの起動時に HDD負荷を分散してスムーズな操作をすることが可能 |
|||
スタートアップに登録されているソフトの管理・監視 | |||
スタートアップチェッカー | XP/Vista/7 | ||
スタートアッププログラム・サービス・プロセスの管理(コントロールパネルの機能が集約されている)や変更の監視等も出来る | |||
スタートアップを監視し、スタートアップに登録されているソフトの無効化や追加ができる | |||
Startup Guard | XP/Vista/7 | ||
スタートアップアプリの待ち時間を指定できるソフト | |||
Startup Delayer | XP/2003/Vista/7 | ||
スタートアッププログラムの遅延実行等の管理 | |||
StartupEX | 公式にはWin2Kまでの対応 | ||
Win7で動いたという報告もある | |||
起動時間の測定ツール | |||
プログラムごとの処理時間を測定し、要/不要なプログラムの分析をする | |||
![]() |
Soluto | XP/Vista/7 | |
起動時間を測定し起動したサービスの実行時間と不要・停止可/不可の案を提示してくれる。 O/Sの起動中だけの記録で遅延起動されるサービスによる起動後のHDD/CPU負荷状態は解析できない | |||
起動する度にPCの起動時間を測定して記録・表示する | |||
BootRacer | XP/2003/Vista/2008/7 | ||
毎回起動時間を測定して履歴を表示してくれるので気づいたら遅くなっていた場合などは、何時から遅くなったかなど事後の追跡も可能 上記 Solutoよりも計測時間は短めで実感とは若干の差がある | |||
プロセスの解析・表示ツール | |||
Windows SDK の解析ツール | |||
![]() | Windows Performance Toolkit (Analyzer) | Vista/7 | |
アプリケーション開発の際に CPUや開発者用ツール(Windows SDKの一部)で敷居は高いが詳細な解析が可能 Windows起動後の CPU/HDD負荷も解析可能なので遅延起動されるサービスの分析等も可能 | |||
プロセスツリーの表示ツール | |||
![]() | Process Explorer | Xp/Vista/7 | |
プロセスごとの CPU使用率、HDD転送量などをツリー状に表示するツール。上位のプログラムから下位のプロセスまでがツリー状に表示されるのでわかりやすい。 |
このページのトップへ Y.Nakajima's Top page HDD 低温性能測定ページ