このページの本文へ

前へ 1 2 3 次へ

ここが変わったWindows Vista 100連発! ― 第32回

【ここが変わったWindows Vista:Vol.32】

特別編 Vistaの知られざる機能を探る――USBメモリーでパフォーマンスが上がる!?“ReadyBoost”とは何か

2007年02月15日 11時00分更新

文● 山本雅史

  • この記事をはてなブックマークに追加
  • 本文印刷

ReadyBoostを設定したUSBメモリーのプロパティ
ReadyBoostを設定したUSBメモリーのプロパティ

マイクロソフト(株)の『Windows Vista』には、日常的な作業でのパフォーマンスを改善するための、新しい技術や機能が盛り込まれている。その中でも注目を集めているのが、高価なメモリーモジュールを使わずに、USB接続のフラッシュメモリーデバイスを使ってパフォーマンスを向上させる技術“ReadyBoost”(レディブースト)である。本稿ではマイクロソフトへの取材に基づき、ReadyBoostを構築しているアーキテクチャーと、実際のパフォーマンスについて解説する。

パフォーマンスを向上させるReadyBoostとReadyDrive

Vistaでは、ReadyBoostやフラッシュメモリー内蔵型HDDを活用した“ReadyDrive”など、新たな高速化機能が用意されている。これらの機能を利用すれば、メインメモリーが少ない環境でもある程度のパフォーマンスアップが可能になるとされている。

まず最初に、ReadyBoostとReadyDriveについて説明しておこう。ReadyBoostはUSBメモリーなど外部接続型のフラッシュメモリーデバイスを利用して、パフォーマンスを向上させるものだ。ただし、USBメモリーをメインメモリーとして利用するわけではない。HDDのキャッシュとして使うものだ。

一方のReadyDriveは、HDDの内部にフラッシュメモリーを搭載した“ハイブリッドHDD”(フラッシュメモリー+HDD)を使う高速化機能だ。2007年1月現在では、ハイブリッドHDDはまだ製品として出荷されていないため、残念ながら実際に試すことはできない。マイクロソフトの説明ではOSのブート時の起動を速くするために、ブート関連のデータをハイブリッドHDD上のフラッシュメモリー領域に格納しておいたり、HDDのリード/ライトキャッシュとして利用されるという。

XPで導入されたPreFetchテクノロジーが元に

ReadyBoostやReadyDriveのテクノロジーの基盤となっているものは、Vistaで新たに採用された“SuperFetchテクノロジー”だ。そしてSuperFetchはそもそも、Windows XPで導入された“PreFetchテクノロジー”がベースとなっている。

Windows OSはメモリー管理の仕組みとして、“仮想記憶システム”を備えている。OSがアプリケーションを実行する時、HDDからプログラムやデータをメインメモリーにロードする。しかしWindowsなどのマルチタスクOSは、動作しているアプリケーションのプログラムやデータを、すべて一度にメインメモリーへとロードするのではなく、動作に必要な部分だけをメインメモリー上にロードして、ほかの部分はHDD上の仮想記憶領域(ページングファイル、スワップファイル)に置いている。このメモリー内容のHDDへの書き出しを、“スワップ”と称する。仮想記憶を使うメリットは、HDDを仮想的にメモリー空間として利用できるため、実際に搭載しているメインメモリーの容量以上のメモリーが利用可能になることにある。ちなみにWindows XPでは、メモリーの内容は64KB単位でHDDに記憶される。それがVistaでは、最大64MBに拡張されている。

仮想記憶はHDD上に作るページングファイルを使い、メインメモリーを拡張する技術。しかし低速なHDDを使うため、メインメモリーと比べればアクセスに要する時間は桁違いに長い 仮想記憶はHDD上に作るページングファイルを使い、メインメモリーを拡張する技術。しかし低速なHDDを使うため、メインメモリーと比べればアクセスに要する時間は桁違いに長い

仮想記憶システムはメインメモリーの制限を超えるという大きなメリットを持つ。その半面、ユーザーの体感パフォーマンスに影響を及ぼすことも多い。例えば、メインメモリーの容量が512MBで、アプリケーションが使える容量が256MBしかないパソコンで500MBのメモリーを使用するメールソフトを使う場合を考えてみよう。この場合メモリー量が足らないため、メモリー上に読み込まれたメールソフトのメモリーイメージを分割して、不必要な部分をHDDに書き込む動作が発生する。ところが、この状態でさらに500MBのメモリーを使用するワープロソフトを起動すると、HDDのアクセス頻度が急速に上がってしまう(これを“ページフォルト”と称する)。

ページングファイルは当然ながらHDD上にあるため、読み込まなければならないページがあっても、すぐに読み込めるわけではない。CPUやメインメモリーと比べれば、HDDからの読み込みには膨大な待ち時間が必要だ。そのためメインメモリーが少ないコンピューターでメモリー容量を上回る処理を行なうと、ページフォルトが頻発してHDDアクセスの頻度が上がり、必然的に動作が遅くなる。

そこで、Windows XPではPreFetchという機能が用意された。ページ管理の工夫によって、無駄なページフォルトやHDDアクセスを最低限に抑えようというものだ。PreFetchではOS起動直後や、各アプリケーションによるHDDアクセスをログに記録しておき、次からはそのログに基づいて、HDDの内容を先読みしてメインメモリー空間に置いておく。これにより、アプリケーションが必要とされた時にはHDDではなく先読みしたメモリーから読み込むことで、アプリケーションの起動を高速化できる(PreFetchファイルは、%SystemRoot%\PreFetchというフォルダーに置かれている)。

使用頻度の高いアプリケーションの起動を早めるSuperFetch

Vistaで導入されたSuperFetchは、このPreFetchを進化させた技術である。SuperFetchのアルゴリズムに関して、マイクロソフトは詳細を公開していない。しかし同社へのインタビューなどから明らかになったのだが、PreFetchでは単一のプロセスだけを分析していたのが、SuperFetchでは複数のプロセスを長期間分析しているという。さらにコンピューターの動作状況を分析して、スワップするページを管理している。つまり、SuperFetchはユーザーがどのようにVistaを使っているかを分析して、アプリケーションの起動を速くしているわけだ。

SuperFetchはOSが起動してすぐに動作し始める。そしてユーザーがアプリケーションを使うパターンを、パソコンが利用されている間中ずっとデータとして記録し続ける。これにより、ユーザーがどのアプリケーションをどれくらいの頻度で利用しているのかが分析できるので、SuperFetchは利用頻度の高いアプリケーションのメモリー上のイメージを優先して、HDDから先読みするよう動作する。ユーザーがさまざまなアプリケーションを使い、SuperFetchのデータが集まれば集まるほど、ユーザーの使用パターンを理解してメモリー管理がうまくなり、パフォーマンスが上がっていく。

SupreFetchはページングファイルやデータベースを、HDDだけではなくフラッシュメモリーに配置。通常は高速なフラッシュメモリーから読み込み、ヒットしないときはHDDから読み込む SupreFetchはページングファイルやデータベースを、HDDだけではなくフラッシュメモリーに配置。通常は高速なフラッシュメモリーから読み込み、ヒットしないときはHDDから読み込む

SuperFetchのアルゴリズムには、曜日や時間帯(朝/昼/夜)といった時刻に関する要素もある。例えば自宅のパソコンなどは、平日と休日では使うアプリケーションが異なることもある。そうした違いをSuperFetchは認識して、パフォーマンス改善に応用する。またSuperFetchのデータはユーザーアカウントごとに記録されるため、複数のユーザーで1台のパソコンを使っていても、アカウントが異なればチューニングの仕方も変わってくる。つまり、平日夜はお父さんが仕事に、休日は子供がゲームに使うような場合でも、それぞれのユーザーや日時に応じて最適な動作を行なえるわけだ。

SuperFetchは、日々のパソコンの動作をデータベース化している。このデータベースを使うことで、よく使われるアプリケーションを高速に起動できるように、あらかじめメモリー上に用意しておく SuperFetchは、日々のパソコンの動作をデータベース化している。このデータベースを使うことで、よく使われるアプリケーションを高速に起動できるように、あらかじめメモリー上に用意しておく

またPreFetchでは、アイドル時から復帰する際などに、多くのディスクスワップが発生していた。例えば、お昼休みにパソコンの電源を入れたまま離席していたときに、バックグラウンドでウイルスチェッカーなどが動作したとする。席に戻ってパソコンを使おうとすると、操作に対する反応が悪かったりすることがある。PreFetchは直前に動作したアプリケーションの状態しか記録しない。このため、少し前の状況(上記の例では離席直後の状態)に戻すには、時間がかかっていたためだ。

そこでSuperFetchでは、バックグラウンド・アプリケーション(上記の例ではウイルスチェッカー)の実行完了を検出すると、アイドルになる前のメモリーの状態(上記の例ではウイルスチェッカーが動作する前)に戻しておくことができる。アイドル時間を利用してデスクトップ検索用のインデックスデータを作成するVistaでは、SuperFetchのこの機能はパフォーマンス低下を防ぐのに有効だ。

さらにSuperFetchでは、頻繁に利用されるアプリケーションのメモリーイメージを優先的にメモリー空間にロードするように動作するため、結果としてスリープや休止状態からの復帰を高速化する効果もある。

もうひとつ、体感速度に関わる重要な違いは、SuperFetchではHDDからページを事前にロードする際に、Vistaで採用された“ロープライオリティI/O”(Low-Priority I/O)を利用することだ。ロープライオリティI/OはVistaで導入された優先順位の低いI/O操作で、一般的なアプリケーションによるHDDアクセスが行なわれていないタイミングを見計らってアクセスを行なう。これによって、フォアグラウンドで動作しているアプリケーションのパフォーマンスに、最小限の影響しか与えないようになっている。

SuperFetchはサービスとして起動されている。そのため、その必要があれば、SuperFetchを停止することも可能だ SuperFetchはサービスとして起動されている。そのため、その必要があれば、SuperFetchを停止することも可能だ

マイクロソフトではSuperFetchのアルゴリズムについて、まだ改良の余地があると考えているようだ。このため将来のWindowsでは、SuperFetchに新しいアルゴリズムが追加され、よりチューニングされていくかもしれない。

前へ 1 2 3 次へ

この連載の記事

注目ニュース

ASCII倶楽部

最新記事

ASCII.jp特設サイト

ASCII.jpメール デジタルMac/iPodマガジン

ASCII.jp RSS2.0 配信中

ピックアップ

富士通パソコンFMVの直販サイト富士通 WEB MART