特集
|
|
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待ち時間が短縮され、起動が速くなる。 | ||||||
|
実際にブート・シーケンスにおけるディスク・アクセスなどがどのように高速化されているかを以下に示す。これはWindows XPのブート状況を表示するツール(bootvis.exe。http://www.microsoft.com/hwdev/fastboot/より入手可能)である。ディスクのプローブ(システムに接続されている各種のディスク・ドライブの検出)が終了したあと、プリフェッチ機構が働いてブート・シーケンスで使用するプログラムを最初にいっせいにロードしていることが分かる。
Windows XP Professionalのブート・シーケンス | ||||||||||||||||||||||||||||||
BootvisによるWindows XP Professional起動時のCPU/ディスク・アクティビティ・レポート。NT LOADER起動後からの秒数とその後の動作状態が分かる。最初にディスクのプローブ(検出)が14秒あるが、これはディスク・ドライブがあるかどうかをタイム・アウトするまで待つ方法で調査しているので、これ以上高速化できない。ディスクが接続されていないインターフェイスやポートがあるなら、BIOSなどで設定を「なし(NONE)」にしておくと、無駄なプローブ処理が省かれるのでより高速化できる。15秒〜29秒までがプリフェッチ・シーケンス。その後はディスク・アクセスの頻度が少なくなり、CPUがフルに稼働している。最終的には46秒で「ようこそ画面」が表示された。 | ||||||||||||||||||||||||||||||
|
特集 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|