2013年12月1日日曜日

WindowsVista: タスクマネージャ 物理メモリ表示の謎を解く

 Windows ME に続く失敗作と言われる Windows Vista だが,そのタスクマネージャも出来が悪い.特にメモリの使用状況表示が極めて理解しづらい.そのため Windows7/8では,このタスクマネージャの表示が変更となった経緯がある.
 

 例えば,上の Windows Vista のタスクマネージャを見ていただきたい.上の画像ではメモリの使用状況は次のようになっている.
  • 物理メモリ使用量:2.06GB
  • 物理メモリ合計:3.069GB
  • キャッシュ済み:1.512GB
  • 空きメモリ:42MB
  まず物理メモリ使用量が2GBであるから,残りは1GBが空きのように思えるが,空きメモリは42MBしかない.では「キャッシュ済み」をスワップアウトにより,物理メモリ不足時に利用できるメモリと考え,空きメモリの一部として扱っているとすると,3GBー1.5GBー42MB=1.5GBとなり,残り1GBとはならず,やはり計算が合わない.この状態で一体,どれだけの物理メモリが利用可能なのか?

ちなみに空きメモリが極端に少ないのは,Windows Vista ではよく見られる現象の一つ.高速化機能の一つである SuperFetch と呼ばれるプリフェチ技術が,空きメモリのぎりぎりまでを使用して,ファイルを予めキャッシュするためだ.

 話を元に戻そう.どうすれば,これらの表示の辻褄が合うのだろうか?そして真の利用可能メモリ量はどのぐらいなのだろう?

 その答えのヒントは,Windows7/8 の改良されたリソースマネージャにあった.Windows7のリソースマネージャのメモリ表示には,Windows Vista ユーザーには聞き慣れない「スタンバイ(stand-by)」と「変更済み(modified)」という2つのメモリエリア分類がある.これが今回のWindows Vista タスクマネージャメモリ表示の謎を解く鍵である.

 実は Windows Vista 以降のキャッシュエリアは2種類に分けられる.1つ目は「スタンバイ」エリア.このエリアは,その時点でキャッシュデータを保持しているものの,キャッシュ破棄もしくはスワップアウトによって,他の目的にすぐに利用することができるキャッシュエリアだ.

 2つ目は「変更済み」エリア.このエリアは,キャッシュデータに対して書き込みがなされているものの,まだディスクにフラッシュしていないため,キャシュ破棄やスワップアウトができない状態(dirty)となっている.言い換えれば,他の目的に転用不可能なキャッシュエリアである.タスクマネージャの「キャッシュ済み」に表示されている値は,この2つのエリアの合計値となっている.

 さらに Windows7 のタスクマネージャには,Windows Vista のタスクマネージャにはなかったある一つの表示項目が追加された.それは 「利用可能(available)」メモリ量だ.これは,すぐに空きメモリに変化することのできるキャッシュ(スタンバイ)エリアと,空きメモリエリアの合計値である.つまり事実上その時点で,他の作業のために使用可能なメモリのことだ.Windows Vista ユーザーが求めていたのは,まさにこの値であった.そしてその値は,「物理メモリ合計ー物理メモリ使用量」にぴったりと一致していた.

 これらの事実さえ知っていれば,謎解きは簡単だ.この例から逆算すると,以下のようになる(太字が逆算値)
  • 物理メモリ使用量:2.06GB
  • 物理メモリ合計:3.069GB
  • キャッシュ済み:1.512GB
    スタンバイ:1GB(キャッシュ済みー変更済み)
    ■変更済み:0.5GB(キャッシュ済みー使用可能)
  • 空きメモリ:42MB
  •  利用可能:1GB(物理メモリ合計ー物理メモリ使用量)
これですべての謎が解けた.下記の公式にまとめておく.
  • 物理メモリ使用量=物理メモリ合計ー利用可能
  • 利用可能=空きメモリ+スタンバイ
  • キャッシュ済み=スタンバイ+変更済み
ちなみに Windows7 においても,「スタンバイ」「変更済み」はタスクマネージャに表示されないが,リソースモニタには表示される.またWindows Vistaではグラフが表示されているのは「物理メモリ使用量」だが,Windows XP では「ページファイル使用量」,すなわちコミットチャージ(略称「コミット」,物理メモリと仮想メモリの合計)を示しているので,勘違いしないように注意したい.

 Windows8では,大幅にタスクマネージャの表示は変更され,全く新しいものとなった.ハンドル・スレッド・プロセス数・起動時間のような,メモリ表示に直接関係ないものは表示されなくなり,すっきりした形となった.特に誤解を招く表現だった「空きメモリ」が表示されなくなったことは大きいと思う.

 Windows Vista においては通常ならば,Super Fetch により,「空きメモリ」は常に0近くを示すようになっていた.これを見た一般ユーザがメモリ不足を心配し,メモリを増設したケースも案外多かったのではないだろうか?しかしそのような行動をとった Windows Vista の32bit のユーザーは,メモリを最大の3GBまで増設したのにもかかわらず,空きメモリ表示が相変わらず 0 近くであることに唖然としたことだろう.

 変動がほとんど無く,常に値が0近辺となる「空きメモリ」は表示し,常に変動し,実質の「空きメモリ量」とも言える「利用可能」は数値として表示しなかったWindows Vista のタスクマネージャ(注:逆算すればわかる).その1世代前のOS Windows XP のタスクマネージャ,さらにはその1世代前の Windows2000のタスクマネージャには,「利用可能」表示があったのに…
注と補足:
Windows XPの「利用可能」メモリ量表示の解説として「プログラムやOSカーネル、システム・キャッシュなどに利用されていない、空き物理メモリのサイズ」というものがある.もしこれが正しいとすると,この値は,Windows Vista タスクマネジャーの「空きメモリ」に当たることになる.しかしWindows XP は,SuperFetchは搭載していなかったため,大量のキャッシングを行っていない.そのため「空きメモリ」量は,「利用可能」量にほぼ等しいと考えられる.Windows Vista タスクマネジャーにおいて「空きメモリ」表示が導入されたのは,「空きメモリ」と「利用可能」が,SuperFetch導入により,一致しなくなったからであろうが,ではなぜWindows Vistaでは「利用可能」を表示する代わりに,「空きメモリ」を表示したのか?
穿った見方をすれば,メーカーサイド(いわゆるWintel)が確信犯的に,ユーザをメモリ不足の不安へ誘導するための工作ではなかったのかと疑いたくもなる.そんなことはないと思いたいが,Windows Vista が初登場した時,要求するハードウェアスペックが非常に高いという印象が強く残ったのを記憶している.今思えば,「Windows Vista 搭載PC=高性能で高価なPC」というイメージが,様々な媒体を通じて,自分の中に刷り込まれていたような気もする.

 今はMSを去ったバルマーが当時採用した Windows Vista PC 販売戦略とはいかなるものだったのだろう?MSにおける彼の最大の後悔は,そのものズバリの Windows Vista であったと彼自身の口から語られている.Windows Vista に何やらスキャンダラスなにおいを感じるのは気のせいだろうか?

 さてリリースされたばかりの最新OS Windows8/8.1 のタスクマネージャの簡素さは,技術者にしてみれば,物足りなく感じるかもしれない.技術者ならば,メモリーリークなどをチェックするために,アップタイムやスレッド数などはモニタしておきたいところだろうが,たしかにこれらは一般ユーザーには不要な紛らわしい情報であったと今は思う.この改善によって少なくとも今後,一般ユーザーがタスクマネージャの不可解な表示や,謎めいたジャーゴンに悩まされることはなくなりそうだ.このことは素直に歓迎したい.

0 件のコメント:

コメントを投稿