SuperfetchとPrefetchについて~(2)
一、
前回の「SuperfetchとPrefetchについて~(1)」で述べたように、メモリを12GBにしてSuperfetchの具合を見ることにする。
本来ならば、SuperfetchとPrefetcherのレジストリの設定値は、それぞれ4つあるから、両者の組合せは16通りであり、それらの相違を知りたいと思うならば、それら全てを試すべきであろう。しかも、正確な比較を行なうには、Superfetchは、メモリの使用状況を曜日や時間帯に従って記録し、それによって事前読み込みを制御するというのであるから、少なくとも1週間以上にわたって、一定時間同一の操作を16通り全てで行ない、種々のプログラムの起動時間やメモリの状況を記録する必要がある。
これは、しかし、残念ながら私には無理なので、各自実効性のありそうな組合せを試してみて下さい、というほかない。
ただ、参考までに6GBの場合と12GBの場合との、簡単な操作をした後のメモリの占有状況を載せておく。

RamMap:メモリ=6GB(2GBx3)

RamMap:メモリ=12GB(2GBx6)
Superfetchの様子を見ると言っても、この場合は、まだSuperfetchが機能し始めたばかりであるから、主にメモリ・マネージャによる通常のキャッシングが行なわれた状態であると言うのが正しいのかもしれない。
6GBのメモリでは、4.1GB弱であるStandbyが、12GBのメモリでは約9.9GBにまで達している。6GBにおけるStandbyは、VideoStudioが作業フォルダ内に書き込んだファイルがキャッシュされているが、12GBでは、下図のRamMapのFile Summaryタブを見ると、読み取ったファイルとそれを書き込んだファイルの両方がキャッシュされている。

RamMap, File Summary:12GB
これは「Superfetchと通常のWindowsのキャッシングが、利用可能な全ての物理メモリを使用して、ディスクのデータをキャッシュする」('Watching Superfetch' - "Inside the Windows Vista kernel: Part 2")からにほかならない。「メモリが他のいずれにも必要とされていない時には、頻繁に使用されるデータは、ディスクに追い出すよりも万が一に備えてRAMに保持させておく方がよい」("Introduction to the new Sysinternals tool: RAMMap")というWindowsのSuperfetch及びメモリ・マネージメントの基本理念が忠実に実行されていると言える。
そうだとすると、メモリを増量すればするだけよりSuperfetchの効用を享受できるはず、ということになろう。
果たしてどうなるのか、今後使用し続けてみてのお楽しみである。
なお、このRamMapというソフトは、前回名を挙げたMark Russinovichらが創設したSysinternalsのツールの一つである。そこには有用有益なフリーのユーティリティ・ソフトが他にもあり、既に利用されている方も多いでしょうが、まだの方はそのサイトを覗いてみてはいかがでしょうか。
二、
ところで、RamMapの表示にはPaged Pool、Nonpaged Poolという項目があり、タスクマネージャー内のパフォーマンス・タブにもカーネルメモリの「ページ」、「非ページ」として表示されているが、これらはそれぞれ、ディスクにページアウトすることが可能なカーネルメモリとページアウトが不可能なカーネルメモリを指すとされている。この「ページ」と表されているページアウト可能な領域には重要性の低いコードが格納されており、一定期間アクセスがなければページアウトされ、その後そのコードにアクセスが生じるとディスクから読み込まなければならず、パフォーマンスが低下すると言う。そこで、全てのカーネルメモリをページアウトしないように設定していたことがあった(「窓の手2010」による)。
しかし、これは6GB程度のメモリですべき設定ではやはりなかった。
大きなデータを長時間にわたって処理していた時、突然マウスに反応しない箇所が部分的に発生し、ガジェットの一部が消えるという現象が起こった。再起動により正常に復したが、この設定は元に戻すことにした。カーネルメモリのページアウトを制限したことが原因であるとは断定できなかったが、メモリに不足が生じ、本来ならばディスクにページアウトされるべきカーネルメモリが、この設定によりディスクに書き込まれることなくメモリから追い出されたのが原因ではないかと考えたからである。
いずれにせよ、この設定を解除してからは、この現象は起こっていない。
いかにメモリを増量したからといって、それを超える容量のデータを扱う可能性がある場合には、カーネルメモリのページアウトを抑制するような設定はしない方がよいかもしれません。
三、
前回取り上げたSuperfetch等の設定を変更するレジストリ操作はさほど面倒なものではないが、より簡便に、安全にそれを行える「TweakPrefetch」というソフトがある。これを作成したのは、イタリアの青年だが、これがなかなかの男前である(そのサイトの"Contact me"をクリックすると拝める)。
男前のその彼は、TweakPrefetchを紹介するサイトで、VistaやWindows 7においては「Prefetchはその機能をうまく果たしており、それについて特に反対意見はない。それにひきかえ、Superfetchは、異常なHDDの動き(メモリの入出力動作が原因である)を引き起こす可能性があり、ゲーム中に不規則なフレームレート・ドロップ(おそらくキャッシングプロセスが原因である)を引き起こす可能性がある」と記し、「上級者やゲーマーはSuperfetchを無効にしたいと思うかもしれないし(XPのようなprefetch機能を手に入れ、HDDのスラッシングを減少させ、この機能にゲームを邪魔させないために)、あるいはSuperfetchを少なくとも「Boot Only」に設定したいと思うかもしれない」と述べて、種々の設定をテストするのに役立つとしてこのソフトを勧めている。
ともかく、Superfetchはヘビーユーザにとっては諸刃の剣となる恐れがあることは間違いないのである。
イタリア青年のこのような意見も参考にして、自分のPC環境やその使用状況を考えてSuperfetch及びPrefetcherの最適な設定を各自探ってみて下さい。特に32bitのOSの場合、メモリを増やすことができないので、設定を変えてみる価値はあるかもしれません。
前回の「SuperfetchとPrefetchについて~(1)」で述べたように、メモリを12GBにしてSuperfetchの具合を見ることにする。
本来ならば、SuperfetchとPrefetcherのレジストリの設定値は、それぞれ4つあるから、両者の組合せは16通りであり、それらの相違を知りたいと思うならば、それら全てを試すべきであろう。しかも、正確な比較を行なうには、Superfetchは、メモリの使用状況を曜日や時間帯に従って記録し、それによって事前読み込みを制御するというのであるから、少なくとも1週間以上にわたって、一定時間同一の操作を16通り全てで行ない、種々のプログラムの起動時間やメモリの状況を記録する必要がある。
これは、しかし、残念ながら私には無理なので、各自実効性のありそうな組合せを試してみて下さい、というほかない。
ただ、参考までに6GBの場合と12GBの場合との、簡単な操作をした後のメモリの占有状況を載せておく。
● Prefetcher及びSuperfetchは、レジストリ値「3」の「全て有効」に設定する。
● Prefetchフォルダ内の全データを削除し、再起動。
● Photoshop CS5を起動し、読み込んだ状態で約262MBとなる画像ファイルを読み込み、Photoshopを閉じる。
● 続いて、VideoStudio Pro X3を起動し、ディスク内の約5.95GBの映像ファイルを取り込み、 これを終了する。
● 一旦再起動し、再び同じ操作を行なう。
● その後、「RamMap」(Windows Sysinternals)を実行してメモリの状態を記録する。
● これを6GBと12GBとで行なった。
● Prefetchフォルダ内の全データを削除し、再起動。
● Photoshop CS5を起動し、読み込んだ状態で約262MBとなる画像ファイルを読み込み、Photoshopを閉じる。
● 続いて、VideoStudio Pro X3を起動し、ディスク内の約5.95GBの映像ファイルを取り込み、 これを終了する。
● 一旦再起動し、再び同じ操作を行なう。
● その後、「RamMap」(Windows Sysinternals)を実行してメモリの状態を記録する。
● これを6GBと12GBとで行なった。

RamMap:メモリ=6GB(2GBx3)

RamMap:メモリ=12GB(2GBx6)
Superfetchの様子を見ると言っても、この場合は、まだSuperfetchが機能し始めたばかりであるから、主にメモリ・マネージャによる通常のキャッシングが行なわれた状態であると言うのが正しいのかもしれない。
6GBのメモリでは、4.1GB弱であるStandbyが、12GBのメモリでは約9.9GBにまで達している。6GBにおけるStandbyは、VideoStudioが作業フォルダ内に書き込んだファイルがキャッシュされているが、12GBでは、下図のRamMapのFile Summaryタブを見ると、読み取ったファイルとそれを書き込んだファイルの両方がキャッシュされている。

RamMap, File Summary:12GB
これは「Superfetchと通常のWindowsのキャッシングが、利用可能な全ての物理メモリを使用して、ディスクのデータをキャッシュする」('Watching Superfetch' - "Inside the Windows Vista kernel: Part 2")からにほかならない。「メモリが他のいずれにも必要とされていない時には、頻繁に使用されるデータは、ディスクに追い出すよりも万が一に備えてRAMに保持させておく方がよい」("Introduction to the new Sysinternals tool: RAMMap")というWindowsのSuperfetch及びメモリ・マネージメントの基本理念が忠実に実行されていると言える。
そうだとすると、メモリを増量すればするだけよりSuperfetchの効用を享受できるはず、ということになろう。
果たしてどうなるのか、今後使用し続けてみてのお楽しみである。
なお、このRamMapというソフトは、前回名を挙げたMark Russinovichらが創設したSysinternalsのツールの一つである。そこには有用有益なフリーのユーティリティ・ソフトが他にもあり、既に利用されている方も多いでしょうが、まだの方はそのサイトを覗いてみてはいかがでしょうか。
二、
ところで、RamMapの表示にはPaged Pool、Nonpaged Poolという項目があり、タスクマネージャー内のパフォーマンス・タブにもカーネルメモリの「ページ」、「非ページ」として表示されているが、これらはそれぞれ、ディスクにページアウトすることが可能なカーネルメモリとページアウトが不可能なカーネルメモリを指すとされている。この「ページ」と表されているページアウト可能な領域には重要性の低いコードが格納されており、一定期間アクセスがなければページアウトされ、その後そのコードにアクセスが生じるとディスクから読み込まなければならず、パフォーマンスが低下すると言う。そこで、全てのカーネルメモリをページアウトしないように設定していたことがあった(「窓の手2010」による)。
しかし、これは6GB程度のメモリですべき設定ではやはりなかった。
大きなデータを長時間にわたって処理していた時、突然マウスに反応しない箇所が部分的に発生し、ガジェットの一部が消えるという現象が起こった。再起動により正常に復したが、この設定は元に戻すことにした。カーネルメモリのページアウトを制限したことが原因であるとは断定できなかったが、メモリに不足が生じ、本来ならばディスクにページアウトされるべきカーネルメモリが、この設定によりディスクに書き込まれることなくメモリから追い出されたのが原因ではないかと考えたからである。
いずれにせよ、この設定を解除してからは、この現象は起こっていない。
いかにメモリを増量したからといって、それを超える容量のデータを扱う可能性がある場合には、カーネルメモリのページアウトを抑制するような設定はしない方がよいかもしれません。
三、
前回取り上げたSuperfetch等の設定を変更するレジストリ操作はさほど面倒なものではないが、より簡便に、安全にそれを行える「TweakPrefetch」というソフトがある。これを作成したのは、イタリアの青年だが、これがなかなかの男前である(そのサイトの"Contact me"をクリックすると拝める)。
男前のその彼は、TweakPrefetchを紹介するサイトで、VistaやWindows 7においては「Prefetchはその機能をうまく果たしており、それについて特に反対意見はない。それにひきかえ、Superfetchは、異常なHDDの動き(メモリの入出力動作が原因である)を引き起こす可能性があり、ゲーム中に不規則なフレームレート・ドロップ(おそらくキャッシングプロセスが原因である)を引き起こす可能性がある」と記し、「上級者やゲーマーはSuperfetchを無効にしたいと思うかもしれないし(XPのようなprefetch機能を手に入れ、HDDのスラッシングを減少させ、この機能にゲームを邪魔させないために)、あるいはSuperfetchを少なくとも「Boot Only」に設定したいと思うかもしれない」と述べて、種々の設定をテストするのに役立つとしてこのソフトを勧めている。
ともかく、Superfetchはヘビーユーザにとっては諸刃の剣となる恐れがあることは間違いないのである。
イタリア青年のこのような意見も参考にして、自分のPC環境やその使用状況を考えてSuperfetch及びPrefetcherの最適な設定を各自探ってみて下さい。特に32bitのOSの場合、メモリを増やすことができないので、設定を変えてみる価値はあるかもしれません。