Ready or not Ready?

2009年2月6日金曜日

 

Vistaで導入された新機能のうち、HDDのアクセスを回避してシステム全体のパフォーマンスを底上げする技術がSuperFetchである。これは単純なファイルキャッシュではなく、「次に使用されると判断されたデータ」を自動的にHDDからメインメモリに転送する技術だ。いつ?どんなシチュエーションで?どんなデータが使用されるのかをOS起動時からのアプリケーションの使用状態を記録して判断しているというのだ。

従来のファイルキャッシュではユーザーがアプリを起動しない限りデータは転送されない。しかしVistaではユーザーがよく使うアプリをCPUが空いている時間にあらかじめメインメモリに転送する。実際にアプリが起動するときにすでにメインメモリ上にデータがあればHDDから読まなくて済むわけだ。しかしいくら前もってHDDから転送するとはいえ、そのHDDが遅いとユーザーが実際にアプリを起動するときに間に合わなかったりする訳で、だったらよく使うデータをHDDではなくUSBメモリに一旦溜めておいて、そこから読み出せばいいんじゃね?というのがReadyBoost技術だ。最初ReadyBoostとなったUSBメモリの中は空っぽだが、CPU負荷を上げない様にVistaから導入されたLow Priority I/Oって技術で人知れずユックリとHDDからデータが転送される。(このため書き込み速度が多少遅いUSBメモリでも読み込みさえ速ければReadyBoost用メモリとして利用できる)そしてSuperFetchは読み込み速度が早いUSBからどんどんデータをメインメモリに転送していく。メインメモリに転送するときにUSBメモリからは読むだけで、もしそのタイミングでUSBメモリが使えなかったら、元々のデータがあるHDDから読みこめばいい。ということで、ReadyBoostのUSBメモリは突然抜いても大丈夫ということになっている。(この点、単純ファイルキャッシュだと読み込むべきモノが突然無くなるため、最悪の場合OSがクラッシュする)

Vista登場当時と違い、昨今の価格暴落(2Gで千円!!)でメモリも手軽に買えるようになった。メインメモリはOS管理限界の4G(正確にはもうちょっと少ない)まで積んでおまけにUSBメモリも4Gや8G当たり前ってご時世、ReadyBoostのような先回りしてメモリに転送するという奥ゆかしい動作よりも、単純にでかいファイルキャッシュとしての方がパフォーマンスが上がるんじゃないか?という感じだ。特にReadyBoostは1PCにつき1つのメモリデバイスしか設定できない。複数のUSBメモリを刺していてもReadyBoostに設定できるのはそのうちの1個だけだしそのサイズもOS側で最大4Gに制限されている。(NTFSでの動作も可能なだが、やはり上限は4Gだ)

アプリの起動状況を監視して先回り予測するという、なんかこう、CPUを無駄に使ってるんじゃないか?とも思えるVistaのSuperFetchだが、パフォーマンスモニタを使ってReadyBoostにどれだけキャッシュが転送されているか、また、どれだけ先回りできたか(ReadyBoostのキャッシュヒット率)をリアルタイムに監視することが出来る。HDDのアクセスランプだけでは判断できない。なぜならCPUが暇なときはせっせとLowPriorityI/O機能でSuperFetchがこれから使うであろうデータをのんびりとHDDからUSBに転送しているからだ。このSuperFetchの学習機能、起動時間が長くなればなるほど学習するため、よく使うアプリケーションはOS起動時にはReadyBoostによりあらかじめ準備された状態でメインメモリ上で待っているとのことだが、なかなかヒット率が上がらないのは何故なんだろう・・・

0 コメント: