第366回
遅いHDDにこそ“よく効く”Windows ReadyBoost



 前回はWindows Vistaをインストールすることで、バッテリ持続時間が短くなってしまうという話を書いたが、一方で確実にメリットを見いだせる部分もある。しかも、1.8インチHDDなど、遅いHDDを用いた小型モバイルPCを利用しているユーザーほど、その効果は大きい。

 もちろん、Vistaを導入する際にはプロセッサやメモリ容量、GPUパワーなどの要素も勘案した上で、機種固有の機能に関して必要なドライバが揃えられるかどうかなど、ノートPCユーザーがVistaをインストールする場合には、気をつけなければないポイントは多い。Vista対応が正式に謳われていないノートPCに対しては、パッケージのインストールよりもVistaプリインストールマシンの導入を勧めるが、既にインストールしたユーザーには、Windows ReadyBoostがHDDアクセスのイライラを解消してくれるだろう。

●手軽に試せて効果的なパフォーマンスアップ

Ready Boostの概要(2006年9月のVistaモビリティ機能解説から)

 ReadyBoostは、簡単に言えばフラッシュメモリを利用してアプリケーションの起動速度を向上させる機能だ。この機能を称して「メインメモリをフラッシュメモリで拡張しているようなもの」と説明されている場合もあるが、実際にはもっと複雑な仕組みで動作している。

 その動作の仕組みは後ほど紹介するが、手軽に試せる割には効果的なパフォーマンスアップを期待できる。これをもってVistaのインストールを推奨するとまでは行かないが、すでにVistaユーザーならば、ぜひとも試してみるべきだろう。

 この機能はWinHEC 2006などでもテクニカルセッションでの説明があったのだが、具体的な速度アップの手法に関して、大まかな仕組みは明らかにしつつも、肝心なところでは“上手に処理する”といった表現が多く(すなわち、状況に応じてさまざまな手法を組み合わせているのだろう)、またβ版時代にはさほど効果的に速度アップを体験できなかったこともあり、あまり大きな話題にはなっていなかった。

 しかし製品版では非常にうまく動作しているようだ。

 先週、紹介した筆者のThinkPad X60sは1.5GBのメモリと5,400rpmの80GB HDDが内蔵されている。必要十分なメモリ容量だが、しかしWindows XPの場合、利用シーンによってはメモリのスワップが激しく発生したり、バックグラウンドの処理(たとえばウィルスチェックなど)にメモリを取られ、その後、フォアグラウンドのアプリケーションを切り替えた時に、レスポンスが落ちるといった事があった。

 ところがX60sのSDカードスロットに2GBのSDカードを挿入し、ReadyBoostの設定を行なってみたところ、Windowsやアプリケーションの起動速度に顕著な改善が見られた。

 たとえばWindowsの起動直後(つまりディスクキャッシュにアプリケーションが入っていない状態)に、Photoshop CS3 β、Bridge CS3 β、Outlook 2007、Word 2007を連続して起動するバッチファイルを動かしてみたところ、ReadyBoostをONにすることで30〜35%も起動時間が短縮された。

 ReadyBoostはある程度使わないと学習効果が発揮されないため、上記アプリケーションの起動パターンを何度か実行した上で、しばらく他の仕事を1日ほどやったあとに実験を行なっている。おそらく効果は環境によって大きく異なるだろう。別途、ThinkPad X41 Tablet(1.8インチHDD搭載で、メモリスワップなどの処理が遅い)でも試したところ、こちらは起動時間が半分以下になった。どうやら、ディスクが遅い環境ほど、効果的に働くようだ。小型のVista搭載ノートPCユーザーは、ぜひともトライしてほしい。

●メモリカードスロットの有効利用に

 上記のテストでは、手元にあったトランセンド製の120倍速SDカード(2GB)を用いたが、実はMicrosoftはこうしたデジタルカメラ用メモリをReadyBoostに用いることを推奨していない。デジタルカメラ用メモリカードは、大容量のデータを連続して転送するのは高速だが、ランダムアクセスは遅いからだ。一般的には、高速型のUSBメモリの方がReadyBoostに向いており、MicrosoftもUSBメモリでデモすることがほとんどだ。

 ちなみに利用可能なメモリの条件は4KBのデータブロックをランダムリードをする際に2.5MB/secの転送速度を持つ256MB以上のメモリであることが必要。また、512KBのデータブロックを1.75MB/sec以上で書き込めなければならない。利用可能かどうかはVistaが自動的に判断する(ドライブのプロパティを開き、ReadyBoostタブを設定できなければ利用できない)が、FAT16で再フォーマットすると利用可能になる場合もあった。

 後述するように、ReadyBoostで利用しているフラッシュメモリなどを実行中に抜き差ししても、Windows自身の動作には影響しない設計になっている。“必要な時にフラッシュメモリでBoostしてください。あらかじめ設定しておいたフラッシュメモリには、高速化するためのデータが保管されています”というのが、この機能を使うユーザーに対するメッセージなのだろう。

 しかし、いくらコンパクトとはいえ、USBメモリを毎度、差し込んで使うというのも、少々面倒。では挿入したままなら? というと、今度は持ち歩く時に邪魔になる。

ノートPCにはほぼ標準搭載されているメモリカードスロット

 今時のモバイルPCは、何らかのメモリカードスロットを持っていることが多いので、このスロットに余っているメモリカードを差し込んで使うというのが、コスト対効果と運用のしやすさなどを考えるとお勧めしやすい。

 もちろん、最初から“最速”を求めるならば、ReadyBoostでの高速化を謳ったUSBメモリが登場しているので、それらを活用すればいい。だが、そこまで気張らなくても、もっと手軽に使いこなすだけでも、十分に効果的であることも知っておくといい。メモリカードスロットは、デジタルカメラ画像を読み込む際以外は、ほとんど空いたままという人が多いハズだ。せっかくのメモリカードスロットを有効利用するするためにも、ぜひ、1枚ReadyBoost用メモリを差し込んでおくことをお勧めしたい。いざとなったら、ReadyBoostで使っている領域を開放し、データの受け渡しに使うことだってできるのだから。


●ユーザーはほとんど何も意識しなくてもいいイージーさ

 さて、そのReadyBoostの仕組みについても、紹介することにしたい。

 Windows Vistaには、アプリケーションのメモリ利用状況を学習しておき、先回りでメモリ管理を行なう「SuperFetch」、低優先順位でユーザーアプリケーションの動作を邪魔しない「Low-Priority I/O」という2つの機能が追加されている。この2つを上手に組み合わせて実現したのが、ReadyBoostだとWinHECでは説明されていた(のだが、実際にはもっと異なる処理も行なっているように感じることもある。詳しくは後述したい)。

 SuperFetchは、アプリケーションが起動する際、どんなモジュールをロードし、初期化でどの程度のメモリを確保するかといった、メモリ周りのアクティビティをトレース、記録しておき、メモリをどう使ったかを記録しておく。

 そして次回、同じアプリケーションが起動された際には、あらかじめ必要と予想されるスワップファイル上のメモリブロックを先回りしてディスクからロードしてしまう。“といった処理”を行なうそうだ。

 “といった処理”とは、なんともいい加減な書き方だと自分でも思うが、SuperFetchの具体的な動作に関して、Microsoftはほとんど話をしていないのだ。開発者はどうすれば高速化できるのか、試行錯誤しながらいろいろな事を試していると話していた。単一のソフトウェアの振る舞いだけならばコントロールしやすいが、複数のアプリケーションが同時に動作する中で、どのように必要なメモリをプリロードすれば良いのかを判断するのは難しい。経験則に沿ったロジックを組み、実際のアプリケーション利用の様子をモニタしながら自動的に分析を行なわなければならない。

 つまり、設計者としての基本的な方針はあるが、細かなチューニングは個別に詰めているということだろう。したがって、実際には状況に応じて多様な手法を用いているのだと予想される。

 たとえば、Microsoftが具体例として例示していたのは、ウィルスチェックが離席中などに走ったパターン。この場合、ウィルスチェックが走ることで、他のアプリケーションが利用しているメモリの一部がスワップアウトされてしまう。ほかにアクティブなソフトウェアが無ければ、ウィルスチェッカーは実メモリをガンガン消費していくが、当然、処理が終わればメモリを解放し、ウィルス活動をモニタするモードに変化する。

 席に戻って処理を行なおうとすると、それまで作業をしていたアプリケーションが利用しているメモリの一部はHDDに退避されてしまっているので、HDDが回り始めてしばらくレスポンスが悪くなる。

 こうしたケースの場合、SuperFetchはウィルスチェッカーがメモリを解放した時点で、元から動いていたソフトウェアが利用していたメモリを実メモリに書き出しておいてくれるそうだ。なんともカシコイ(のだが、当然、プログラマが想定していたケースでなければうまく動作しないのだろうから、カシコイわけではないのかもしれない。要はどれだけ実利用に即したプログラミングを行なっているかで、実際の印象が変化する)。

 SuperFetchで利用する作業用データは、HDDのシステムフォルダ内にある特定フォルダに記録され、常駐するソフトウェアの変化やユーザーの利用状況によって最適な状態に更新され続ける。ただし、SuperFetchでメモリ利用のパターンを上手に先回りし、待ち時間を減らすといっても、スワップファイルにアクセスするための物理的なヘッドシークやディスクの回転待ちまでは克服できない。

 そこでフラッシュメモリにSuperFetchで使う作業用データとスワップファイルの一部を保存しておき(この際、AES128による暗号化も行なわれる)、必要な際にはここから取り出して使えるようにしたのがReadyBoostだという。スワップファイルへのアクセスとは異なり、ランダムに配置されたメモリブロックを物理的なヘッドの移動時間を考慮せずに読み込めるため高速化が期待できる。

 フラッシュメモリは方式によっては書き込みがかなり遅いのだが、ReadyBoostでは書き込み速度の遅さは無視することが可能だ。なぜなら、SuperFetchが作成した作業用ファイルやスワップファイル上のメモリブロックは、まず最初にHDDに書き込まれるからだ。その後、Low-Priority I/Oを用いてバックグラウンドでフラッシュメモリに転送する。Low-Priority I/Oは、ほかにディスクアクセスがある場合にはセッションが中断されるので、他のソフトウェアやWindowsシステム自身の動作に影響を与えることはない。“そのうち”転送が終わればいい程度なので、フラッシュメモリの書き込み速度は関係ないことになる。

 また、直接、アプリケーションの実行に必要なワークメモリを保存しているわけではないので、ReadyBoostで使うメモリは突然抜き差ししても問題なく動作し、その中身は常に利用状況に応じて適当な内容へと更新される。ユーザーは、ただただ、速度向上のメリットを享受すればいい。

 なお、筆者の環境ではReadyBoostに利用するメモリは、FAT16でフォーマットした場合がもっとも高速に動作した。次いでFAT32。一番遅いのはNTFSだが、NTFS時のReadyBoost動作は保証されていない。

●追伸:Office 2007にはVistaが良い?

 さて最後にもう1つ。Windows Vistaと同時にコンシューマ向け出荷が開始されたOffice 2007だが、β版の頃からWindows XPとの組み合わせで使っていると、とても画面描画が遅かった。新ユーザーインターフェイスのリボンを表示する速度も、どこか“トロン”としているし、何をするにしてもパフォーマンスが低い。新グラフィックエンジンによる文書表示も、やっぱり遅いなぁと思っていた。

 これはβ版だからだろうと思っていたのだが、正式版になってある程度高速化された後でも、やはり“やや遅い”という印象を拭えなかった。

 しかし、Windows Vista上で使ってみると、(重いか軽いかと言えば、多少、今までよりは重いが)画面描画の軽快感がかなり向上して感じられる。きちんと定量的なテストを行なったわけではないが、ここで報告しておきたい。

□関連記事
【2006年6月12日】マイクロソフト、Vistaのビジネス利用における新機能を紹介
http://pc.watch.impress.co.jp/docs/2006/0612/ms.htm
【2006年5月27日】【元麻布】HDDを高速化するSuperFetchとReadyBoost
http://pc.watch.impress.co.jp/docs/2006/0527/hot429.htm

バックナンバー

(2007年2月26日)

[Text by 本田雅一]


【PC Watchホームページ】


PC Watch編集部 pc-watch-info@impress.co.jp ご質問に対して、個別にご回答はいたしません

Copyright (c) 2007 Impress Watch Corporation, an Impress Group company. All rights reserved.