SAND STORM

朝ぼらけ

2012年3月9日

[Windows] task managerにおけるmemory表示とその実体

Filed under: 未分類 — Tags: — sajin @ 03:23

Windwosのtask managerが表示する”キャッシュ済み””空きメモリ”などは一体何を指しているのだろうか。また”Commit(コミット)/pagefile(ページファイル)”はWindowsの規定するpaging fileをそのまま表示しているのだろうか。

物理メモリ(Physical memory)の内訳を説明すると以下のようになる。

Total(合計)=搭載している物理memoryの内、OSが確保している使用可能分。物理memory全体に比べ、OS稼働以前のhardware予約分が減っているし、32bitであれば3.2GBの制限がつくし、RAMdiskなどに割いていれば減る。

Cached(キャッシュ済み)=その中身は“standby list”と“modified list”に別れ、即座に破棄可能な前者のみがAvailable memoryに含まれる。modifiedは長時間使われないとdiskに吐き出される(page fileとは別)のでmemory上には存在するとは限らない。

Available(利用可能)=applicationが使用可能な物理memory上の領域。これにはFreeのすべてと、Cachedの多くを占めるstandby listが含まれる。

Free(空きメモリ)=まったく何のdataも含んでいないmemory領域。Availableに含まれる。

In Use(右下の”物理メモリ”右横の%)このIn Useにはmodified listが含まれるため、正確なmemoryの使用量を反映する訳ではない。

resource monitorではmodifiedとstandbyを明確に分離して表示している。

・物理memory上の使用されている領域

正確な物理memory上のOS確保空間における使用中の領域は次の式で得られる。

Total – (Cached + Free) = Total – (standby+modified+Free)=Physical memory in use

7862-(1746+238)=5878

5878MBがkernelや起動しているprogramなどに使用されており、残りの物理memory上領域にmodified pageを足した1927MBがcacheを消せば使用可能な領域として残っている。

 Total =Physical memory in use+(standby+modified+Free)

・Windowsが規定する”使用中memory”

HDDなどに吐き出される可能性があるmodified listを合算したWindowsが規定する”使用中memory”は次の式になる。

Total-Available=Total-(standby+Free) = Physical memory in use+modified  = Windows defined In Use

7862-1927=7862-(1689+238)=5878+57=5935

5935/7862=0.7548…=75%が右下の”物理メモリ”の右に現れているという訳だ。ただし、数字にも表れているようにmodifiedは通常かなり小さいので本当のmemory上の使用比率と大して変わらない。

Measuring memory usage in Windows 7 @ brandonLive

Investigate memory usage with Windows 7 resource Monitor @ TechRepublic

つまり、Available memoryは物理memory上の(cacheを消せば)使用可能な量を表しており、Free以上の読み込みが発生するとcacheは消えていく。右下の%から逆算される残り領域はmodifiedを含んでいるので正確ではないが、modifiedは通常少量なので目安としてはそんなに変わらない。

◇commit/pagefileが示すもの

Windows XPでcommit charge,Windows Vistaでpagefile(ページファイル),Windows 7でcommitとして表示されている数値は、Windowsがmemoryからdataを退避するpaging fileを直接表している訳ではない。

このcommitは仮想memoryの総量で物理memoryとpage fileの両方から構成される。つまり、Windowsが確保している物理memory(task managerのtotal)と本物のpaging fileを合算したものがcommitで前者が今使用している分(commit charge)/後者が最大値(commit limit)になる。

例えばapplicationが400MBのmemory領域の確保を要求したとしても、常に400MBすべてが使われる訳ではない。最大で400MBを使用するかもしれないから予約しただけで、実際に扱っているdata=memory上で使われる領域は必ず小さくなる。このような要求してきた最大確保分をそのままphysical memoryに割り当てると物理memory領域はすぐに枯渇してしまう。そこでWindowsは物理memoryとdisk上のpaging file双方で構成されるcommit limitの内、paging fileの方に実際には使っていない分を割り当てる。こうすれば物理memory空間は空くしpaging fileの方も仮想的に割り当てるだけなので実際の書き込みは生じない。これはpaging fileがないと、すべての確保分が物理memoryを占拠し貴重な空間が浪費されてしまうことを意味する。pagefileはあるだけで、実際のdisk書き込みなどのperformance低下を伴わず効果を発揮してくれるのだ。

Win+Pause > システムの詳細設定 > 詳細設定tab > パフォーマンス > 詳細設定 tab > 仮想メモリ枠 > 変更で表示されるpaging fileの変更画面で自動に設定していると物理memoryと同量のpaging fileが確保されるがこれは上の仕組みを前提としている。OSが物理memory上に確保している領域の倍のapplicationなどからの確保要求があっても実際に使われるdata量が物理memory上の領域に止まるならdisk書き込みによるperformanceの低下は生じないのである。

よって上のtask managerの画像では7862*2=15724=15GBが後者のlimitに表示され、前者にcommit chargeとして確保分が表示されている。


関連記事

1 Comment »

  1. 残る問題は左のbarで、5.79GB=579xMBという数値がどう組み合わせても出てこない。

    Total=7862
    Cached=1746
    standby=1689
    modified=57
    Available=1927
    Free=238
    Kernel page=252
    Kernel non page =127

    Comment by sajin — 2012年3月9日 @ 19:19

RSS feed for comments on this post. TrackBack URL

Leave a comment


sand-storm.net