Windows ReadyBoost

Windows ReadyBoost（ウィンドウズ レディブースト） は、Windows Vista、およびWindows 7、Windows 8/8.1、Windows 10、Windows 11の一機能。フラッシュメモリなどの外部メモリーを、ハードディスクドライブのキャッシュとして利用することで、ソフトウェアなどの読み込みを高速化する機能のこと。

**概要**
Windows ReadyBoostを使用すると、フラッシュメモリの記憶領域をキャッシュメモリとして使用し、総合的なパフォーマンスを向上させる
。
ハードディスクはディスク上のデータをヘッドを使って読み書きしている。この時、数キロバイトといった小さなデータが散らばっていると、ヘッドの物理的な移動量が増え、実転送以外の動作によって、アクセス速度が極端に低下する。Windows ReadyBoostはこの小さなデータ群を、物理的なヘッドの存在しないフラッシュメモリにキャッシュすることで、ハードディスクのランダムアクセス時の性能低下という弱点を補助しようという技術である。そのため、使用するフラッシュメモリにはこれまで重視されてきたシーケンシャルアクセス速度ではなく、ランダムアクセス速度が重視される。
PCに搭載しているメインメモリと同じ容量か、それよりも多いものを使用することが推奨されており、小容量で大きな効果が出るわけではない。マイクロソフトによると、搭載されたメインメモリの「3倍の容量のフラッシュメモリ」を使用することで、最も優れたパフォーマンスを得ることができるとされる。

**対応メディア**
使用するUSBメモリなどの外部記録メディアには、最低でも4kBデータのランダムリードで2.5MB/s、512kBデータのランダムライトで1.75MB/sの速度が必要である。前述のとおり、ランダムアクセス性能を補完するための仕組みであるため、高速タイプ（4kBデータのランダムリードを5MB/s、512kBデータのランダイムライトを3MB/s）のメディアを用いれば更に効果が大きくなる。USB2.0のバスは高速とは言い難いが、データは暗号化だけではなく、最大1/3に圧縮されて処理される事で、転送量そのものを減らす努力がされている。市販のUSBメモリやSDメモリーカード等は然程高速ではないバスに繋がれることもあり、必ずしも使用可能な性能を持っているわけではなく、対応可能や、高速性をうたった製品以外では利用できない可能性が高いことにも注意が必要である。
*2014年3月現在の時点において、64GB以上の外部ストレージ接続時にWindows ReadyBoostを有効にできない現象が確認されている。Windows 8/8.1とWindows 10、Windows 11では設定できるものの、1デバイスあたりに設定できる最大容量は32GB。
フラッシュメモリの容量が多いほど効果を得られると思われがちであるが、実際には容量よりも速度性能を重視すべき仕組みである。システムの制限で、Windows Vista環境下では4GB以上のフラッシュメモリを接続しても4GBまでの使用となるが、Windows 7以降のWindowsの環境下ではexFATによるフォーマットをした大容量フラッシュメモリにおいて4GBを超えた使用が可能になった。
またWindows Vistaでは、1台のPCに複数のフラッシュメモリを接続しても1つしか利用できなかったが、Windows 7以降のWindowsでは複数のフラッシュメモリを利用できるようになった。

**機能**

**基本**
ReadyBoostは、HDDの読み出し時の物理的なシークタイムを隠蔽する事で、体感速度を改善する。
HDDとの読み書きのデータが全てフラッシュメモリにキャッシングされるわけではない。高速なHDDでの大量のシーケンシャルアクセスの場合には、フラッシュメモリよりも高スループットでアクセスできることが多く、そのような場合はフラッシュメモリへのキャッシング処理はなされない。
ランダムアクセスのように、HDDではヘッドのシーク待ちやディスクの回転待ちが原因で極端にスループットが落ちる場合、フラッシュメモリへのキャッシング処理がなされ、ReadyBoostとして機能する。
フラッシュメモリの書き換え回数に上限がある特性を考慮し、ReadyBoostではデータを書き込む位置を非局在化（ウェアレベリング）しており、フラッシュメモリの寿命にも配慮されているが、管理領域の不良や、故障の影響は使用領域以外にも出ることになるので、データを保存する物とは別で用意することが望ましい。

**ライトスルーキャッシュ**
基本的に、書き込みデータについてはハードディスクに対してデータ書き込みコマンドを送信した後で、フラッシュメモリにキャッシュするために（ライトスルー）、突然フラッシュメモリがUSB端子から抜けるといったような不測の事態が起きても、システムが不安定になることはない。また、シャットダウン後の取り外しなど、改変の可能性があるため、書き込まれたデータは、ReadyBoostとしては保持、記憶、蓄積はされない。
なお、書き込まれるデータはAES128ビットによる暗号化処理がされているため、万が一盗難にあった時にメモリやHDDの一部が閲覧されることは無いとされている。

**SuperFetchとの関係**
なお、Windows SuperFetchは、未使用のメインメモリを利用して、ReadyBoostと似たディスクキャッシュを行っている。両者の違いは、Superfetch はプロセスのページプール（コード、データなど）のキャッシングを制御するのに対して、ReadyBoostはHDDストレージへの読み書き全般をキャッシングすると言う点である。ReadyBoostサービスは、キャッシングの効率化（プリフェッチ等）に関して、SuperFetchサービスの助けを借りる。
大量のメインメモリを搭載し空きメモリ容量が潤沢にある状況では、SuperFetchの方にヒットする確率が高くなるので、ReadyBoost自体の貢献度は小さくなる。また、システムドライブにSSDを利用する環境では、もともと高速なシステムドライブであるため、ReadyBoostを利用できないことがある。
ReadyBoost、Superfetchのいずれも、仮想記憶・プロセスを邪魔しないように、バックグラウンドで最も低い優先度でキャッシング処理を行う。ReadyBoostが仮想記憶をフラッシュメモリに対し行うというのは誤解である。
一部のメディアの論評などでは、ReadyBoostにはメモリ増設と同様の効果があるかのような記述がみられるが、もともと、ノート型パソコンのような、- ハードディスクへのアクセスが遅い。- 搭載されているメインメモリ（物理メモリ）の容量が少ない。- デスクトップ型パソコンよりもメインメモリの拡張に高いコストがかかる。
等の条件にあたる環境で、「低コストで体感するレスポンスを改善する手段」であるとマイクロソフト自身が事前にプレゼンテーションでも述べており、実際には仮想記憶やメモリに関わる仕組みではなく、ストレージのアクセス性能を補助する仕組みであり、公式な説明や事実とは大きく異なるニュアンスの記述であるといえる。

**Windows ReadyBoot**
ReadyBoostサービスは、OSの起動時、起動直後にも稼動する。ただし、キャッシングのデバイスはフラッシュメモリではなくメインメモリ（700MB以上の場合に限る）である。
これは Windows ReadyBoot と名づけられた機能で、OSの起動直後に、起動中に読み込まれるファイルを分析して、予めキャッシング計画をする。次回のOS起動時に、その計画に基づきReadyBoostがシステム読み込みに対してキャッシングを行い、起動を高速化する。

**備考**
Windows ReadyBoostは、Windowsがシステムとして提供する機能の一つであるが、同様の機能を提供するソフトウェアとして eBoostr がある。これは、ReadyBoost 及び Windows SuperFetchの代替機能を提供するシステムソフトウェアであり、Windows 2000 や Windows XP など、Vista以外のWindows OSにも対応するなどの特徴を持つ。
Windows VistaにはWindows ReadyDriveという機能も実装されているが、これは別の仕組みである。
ReadyBoostの解説にはあたかもキャッシュデバイスは外付けUSBスティックに限るような表現がみられるが、そのようなことはなく内部SSDを含めてどのようなデバイスでも良い。例えば、30GB程度の小容量（=低価格）のSSDを恒久的に追加しても効果がある。
SanDiskには小容量の汎用SSDとドライバソフトウェアを組み合わせたReadyCacheと言う似たような原理と効果の製品があるが、こちらはSSD全体を（Windowsがドライブとして認識しない）ハードウェア・キャッシュデバイスとして扱い、しかも適用はWindowsのソフトウェアRAIDではない「シンプル・ボリューム」に限られるが、Windows ReadyBoostはWindowsが認識してマウントするドライブ上のファイルをキャッシュデバイスとして扱い、RAIDの「ダイナミック・ボリューム」にも適用可能な違いがある。

**関連項目**
 Windows SuperFetch- Windows ReadyDrive- eBoostr- ハイブリッドHDD

**脚注**

**注釈**

**出典 ===