間違いだらけの Windows チューニング その3(LargeSystemCache)
今回は、DisablePagingExecutive と LargeSystemCacheのレジストリについて考察してみました。
方法は、レジストリの変更を4通り試して、物理メモリ、ページメモリ、コミットチャージ、ページメモリ、非ページメモリの量を測定して比較するわけです。
5秒おきにログをとり、WMP10で70MのAVIを再生しつつ、10秒おきにうちのBlogを一つずつ増やしていくと言う実験をしました。
まず、非ページプールと言うのは物理メモリに割り当てられるメモリ。
ページプールと言うのは仮想メモリに割り当てられるメモリ。
LargeSystemCacheについてはMicrosoftのKBを見ると簡単に解説があります。
Windows XP でシステム キャッシュ モードを有効にする場合の注意事項
1にするとシステムキャッシュを多く確保するとあります、感覚的には早くなりそうですが、これではよく分かりません。
TechNet にさらに詳しい解説があります。
Microsoft Services for Network File System パフォーマンス チューニング ガイドライン
ファイル システム キャッシュのサイズを増やすとサーバーパフォーマンスは改善しますが、アプリケーションやサービスが利用可能な物理メモリ量が減少します。同様に、システムデータの書き込み頻度を抑えるとディスク サブシステムの負荷が下がりますが、本来アプリケーションが使用するはずのメモリを変更されたページが占有する とあります。
どうも、LargeSystemCache=1にすると物理メモリをアプリケーションが使ってくれないようなことが書いてありますね。
では実際どうなのでしょうか?
まず1つ目のグラフ。
グラフを見ての通り両方ゼロだと積極的に物理メモリが使用され、どちらかが1だと中間、両方1だと、できるだけキャッシュに保存しているようです。
ただ、LargeSystemCacheを1にするとシステムリソース不足への耐性が上がるようです(10個ほど多く窓を開けました)
安定さが向上した代わりに、アプリケーション(IEやWMP)が使用できる物理メモリが減っているようです。
2つめはページファイルのサイズです。
ページファイルって実はかなり無理しないと増えないんですが、
システムが不安定になるところまで殆ど、有為差が見られませんね
次がページプール、大きな差異はないようですが、どちらの設定も0のとき若干優先的にページプールを使用していますが、本当に微量です。
今度は非ページプール、殆ど有為差はありません。
DisablePagingExecutive=1 にするとカーネルは非ページプールしか使わないと言う解説なのですが、殆ど効果が出ていません(^^;
LargeSystemCacheは確かに、1にすると、アプリケーションが使用する物理メモリの量が抑えられて(仮想メモリにスワップしやすくなって)いました。
1にすると、アプリケーションのパフォーマンスは微妙に下がりそうですね。
このスワップの閾値については、英語の解説がありました。
LargeSystemCache: Core Services
1にすると、システムワーキングセットのキャッシュを物理メモリの-4Mまで拡張し、利用可能な変更されたページが250に低下するまで、物理メモリ上に残るようにする。
0の場合はファイルシステムキャッシュを8M確保し、1000に低下するまで、物理メモリに残るそうです。
ワーキングセットについてはこちらに詳細がかかれています。
ワーキング セットのサイズ、非ページ プール、VirtualLock()
恐らく推測ですが、これらのパラメータが利用できるようになった頃はメインメモリ32Mや64Mのシステムが普通で、512M超えるようなコンピューターはサーバー位しかなかったために、ワーキングセットを大きく確保されてしまうと、物理メモリが圧迫して、アプリケーションのパフォーマンスが落ちてしまうということで、1にするとアプリケーションのパフォーマンスが落ちてしまっていたわけですが、最近のPCでは1Gとかがあたりまえで、ワーキングセットを大きく確保されても、対して、アプリケーションのパフォーマンスが落ちることはないと言う認識でよさそうです。
さて、多くのサイトでかかれている、『アプリケーション起動用メモリとして確保されている4MB』というのが、謎だったので、ちょっと調べてみました。
MSFN - Large System Cache - Page 1
ここに tweak で 4MBのシステムキャッシュを開放して、 8MB以上に拡張するみたいなことが書いてあります。
この文書の出所は、
Memory Tweaks
デフォルトの4Mを拡張して8MB以上使えるようにと言うことが書いてあります。
で、この文書を書いた人が、参照しているのが、先ほど挙げた、LargeSystemCache: Core Services
壮大な伝言ゲーム?
いあ、多分1ページが4Kなので1000ページだと4Mになる計算ですね。
私の解釈はこうです。
0設定
・デフォルトで8MBシステムワーキングセットのキャッシュが確保される。
・アプリケーションは約4Mまで変更したページが物理メモリに残るのを許可される。
・XP/2000Proのデフォルト設定。
1設定
・デフォルトで物理メモリ-4MB迄拡張できるシステムワーキングセットのキャッシュが確保される。
・アプリケーションは約1Mまで変更したページが物理メモリに残るのを許可される。
・サーバーOSのデフォルト設定。
つまり、アプリケーション起動で4Mのキャッシュが確保されていたのが開放されるどころか1Mになってしまいスワップされやすくなるというのが正しいんじゃないかと思います。
辻褄もあいますしね。
というわけで、1にするか0にするかはPCの用途で考えた方がよさそうです。
ちなみに、XP でLargeSystemCache を1にした場合PTEが足りなくなって、遅延書き込みエラーが起こることがあるそうな。(KB330174) Win2000やXPは元々 0 設定なので、他の設定もそれに見合ったものに変えないと不具合が出る可能性があるってことですかね。
関連リンク:
安直に「LargeSystemCacheを1に」と言う人が多すぎる - のろのろのろ雑記
[KB330147]Windows XPで文書の保存や移動をした時に、『遅延書き込みの失敗』というエラーメッセージが出る。
ここの記事はきちんと裏付けがされていて参考になります。
昔は鵜呑みで設定したりしていたんですが 「はやくなった」と思い込んでいて確信してた思い出があります。
確証バイアスのようなものだと思いますけど、安易にレジストリ弄り過ぎてたと思いちょっと反省しています。
どの分野でも 専門的になるほどネットの情報はアテにならないものが多いようですね。
蛇足:人間の特性8箇条を最近みて カチンと来るとともに素直に受け入れることにしました。