特集
Windows XPとは何か?

18.アプリケーション起動の高速化

デジタルアドバンテージ
2001/12/04
Windows XPとは何か?

 Windows XPでは、システムやアプリケーションの起動、休止状態からのリジュームなどを高速化するために「プリフェッチ」という機能が追加されている。システムやアプリケーションの起動時間は短い方がよいに決まっている。マシンの性能にもよるが、Windows 2000では、起動に1分以上はかかっていた。Windows XPでは、この起動時間を、一般的なクライアントPCでは30秒以内、休止状態からの再開を20秒以内、サスペンドからの復帰を5秒以内にするという目標を立てて、高速化のためのさまざまなの対策を施している。例えば筆者が手元で使っているマシン(Athlon 600MHz+メモリ384Mbytes、ディスクはIDEが2台のほかにSCSIが1台接続されているので、初期のプローブ時間がIDEのみのマシンに比べてやや長い。詳細は後述)では30秒ではなく、ブート・セクタを読み始めてから「ようこそ画面」が表示されるまで40秒程度かかっていたが、それでも従来のWindows 2000と比べれば高速になっている(Windows 2000 Proだと1分10秒程度であった)。

 高速化のために行われた対策としては、例えばデバイス・ドライバの初期化や各種のサービスの起動などをすべて同時並行的に行い(従来は各デバイスやサービスを1つずつ順番に初期化、起動していた)、全体的な待ち時間をなるべく少なくするなどの工夫を行っている。しかし一番効果の大きなものは、プログラムのプリフェッチによるロード時間の短縮であろう。

 Windows 9x/Me/2000/XPのような仮想記憶を採用したOSでは、最初にプログラム全体を物理メモリ上に読み込むのではなく、必要に応じて随時ディスクからメモリへとプログラムのコードを読み込みながら実行している。最初にすべて読み込むとすると、非常に大量のメモリが必要になるが、このようなオンデマンドの仮想記憶方式(要求があったページを随時読み込む方式)ならば、少ないメモリ量でも大きな(多数の)プログラムを効率よく実行することができる。だがこれではシステムやプログラムを高速に起動することは難しい。実際にプログラムがページ・フォルト(まだ読み込んでいない部分へのアクセス)を起こして初めてディスクへのアクセスが行われるので、ディスクI/O処理が逐次的な処理になってしまうからだ。

 そこで新しく導入されたのがWindows XPの「プリフェッチ」機能である。これはプログラムの動作をトレースして、ディスク上のプログラム・ファイルがどのようにアクセスされるかを調べておき、その結果に基づいてあらかじめディスクから先読みしておくという機能である。これによりページ・フォルトの発生とそれに伴うディスクからの読み出し待ち時間が抑えられ、結果として起動を高速化することができる。最初の1回はトレース・ログのデータが存在しないので起動は速くならないが、2回目以降の実行ではそのログに基づいてディスクが先読みされるので、高速に起動することができる。ディスクへのアクセス・ログは、システムが起動したり、プログラムがロード/実行される場合に自動的に採取される。デフォルトでは、システムの起動直後の2分間や、各アプリケーション起動直後の10秒間などのディスクのアクセス・ログが記録される。

 アクセス・ログは各プログラム・ファイルごとに記録され、その結果は%windir%\Prefetchディレクトリに格納される。各ファイルには、それぞれのプログラムごとのディスクへのアクセス・パターンのデータが記録されており、プログラム起動時には、これらのデータに基づいて積極的に先読みすることにより、起動時間を短縮するようになっている。実際には、プログラムを構成するファイルだけでなく、ディレクトリ領域やNTFSのMFT領域(NTFSファイル・システムにおいて、ディスクの管理用として使われる特別な領域)などもプリフェッチの対象となっているので、より高速化の効果が高くなっている。

ディスク・プリフェッチのログ
ディスク・プリフェッチのログ
プログラムが起動すると、その最初の何秒間かのディスク・アクセスの結果がこのログ・ファイルに記録される。ログ・ファイルはそれぞれのプログラムごとに作成される。例えばNOTEPAD.EXEのログ・ファイルはNOTEPAD.EXE-336351A9.pfなどという名前になる。次回以降はこのファイルの内容に基づいてあらかじめディスク上のデータが先読みされるので、ディスクのI/O待ち時間が短縮され、起動が速くなる。
  プリフェッチの結果を格納するディレクトリはデフォルトでは%windir%\Prefetch。
  プログラムごとのディスクへのアクセス・ログ・ファイル。この内容に基づいて次回起動時にはディスクからのプリフェッチ(先読み)が行われる。ブート時のログは特別にNTOSBOOT-B00DFAAD.pfというファイルに記録される。

 実際にブート・シーケンスにおけるディスク・アクセスなどがどのように高速化されているかを以下に示す。これはWindows XPのブート状況を表示するツール(bootvis.exe。http://www.microsoft.com/hwdev/fastboot/より入手可能)である。ディスクのプローブ(システムに接続されている各種のディスク・ドライブの検出)が終了したあと、プリフェッチ機構が働いてブート・シーケンスで使用するプログラムを最初にいっせいにロードしていることが分かる。

Windows XP Professionalのブート・シーケンス
Windows XP Professionalのブート・シーケンス
BootvisによるWindows XP Professional起動時のCPU/ディスク・アクティビティ・レポート。NT LOADER起動後からの秒数とその後の動作状態が分かる。最初にディスクのプローブ(検出)が14秒あるが、これはディスク・ドライブがあるかどうかをタイム・アウトするまで待つ方法で調査しているので、これ以上高速化できない。ディスクが接続されていないインターフェイスやポートがあるなら、BIOSなどで設定を「なし(NONE)」にしておくと、無駄なプローブ処理が省かれるのでより高速化できる。15秒〜29秒までがプリフェッチ・シーケンス。その後はディスク・アクセスの頻度が少なくなり、CPUがフルに稼働している。最終的には46秒で「ようこそ画面」が表示された。
  BIOSの時間。Windows XPシステムとは関係ない部分なので、これを短くすることは不可能。
  NTLOADERの稼働時間。これも短くすることはほぼ不可能(実際にはほんの1、2秒なのでこれ以上は短くならないが)。
 ディスクのプローブ(検出)シーケンス。タイム・アウトするまで待ってディスクの有無を調べているので、CPUもディスクもほとんど稼働していない。
  プリフェッチ・シーケンス。ここで一気に必要なデータをディスクから読み込む。
  デバイス・ドライバの初期化。プリフェッチとほぼ並行している。
  レジストリ・アクセスとページ・ファイルの初期化。
  ビデオ関連の初期化と表示の準備。
  ログオン処理。このあたりで「ようこそ画面」が表示される。
  CPUのアクティビティ。ブート・シーケンスの後半はほぼフル稼働。
  ディスクのアクティビティ。プリフェッチの部分がフル稼働しているので、後半はアクティビティが低くなる(それだけプリフェッチが効果的ということ)。


 INDEX
  [特集]Windows XPとは何か?
     1. Windows XPのパッケージ構成
     2. プロダクト認証の影響は?
     3.Windows XPのインストール
     4. ユーザーから見たWindows XP
     5. 改良されたデスクトップ・パーツ
     6. 初心者向け/熟練ユーザー向け双方の機能拡張がなされたエクスプローラ
     7. 液晶ディスプレイの解像度を擬似的に向上させるClearType
     8. 遠隔地からのデスクトップ操作を可能にするリモート・デスクトップ
     9. SOHOユーザーや家族での簡易なデスクトップ切り替えを可能にする「ユーザーの簡易切り替え」
    10. ヘルプデスク業務を効率化するリモート・アシスタンス
    11. Home EditionとProfessionalで大きく変わるユーザー管理
    12. ファイルの共有設定
    13. ファイルのセキュリティ設定
    14. 暗号化ファイル・システム:EFS
    15. システム管理ツール
    16. バックアップ・ツール(システムの復元)
    17. バックアップ・ツール(自動システム回復)
  18. アプリケーション起動の高速化
    19. ファイル・システム関連の強化点
    20. Windows XPのネットワーク機能(その1)
    21. Windows XPのネットワーク機能(その2)

 特集


Windows Server Insider フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Windows Server Insider 記事ランキング

本日 月間