2011/07/25

VMware Viewの場合、vSphereのメモリのオーバーコミット(Memory Overcommit)をどのように考えるべきか

※審議中※
結論:ある程度は期待して良いだろうけど「過ぎたるは及ばざるがごとし」
起動する仮想マシンに割り当てる仮想メモリの総量は、Windows 7の場合は、物理メモリ x 1.2〜1.3倍くらいにとどめておいたほうが良いんぢゃないの、というのが筆者の持説。

関連する書物
http://www.vmware.com/files/pdf/techpaper/vsp_41_perf_memory_mgmt.pdf
http://d.hatena.ne.jp/takaochan/20101010/1286693164


以下、Windows 7の場合、いくつかある四方山話。下記のASLRのハナシとラージページ(Large Page)のハナシがある。


■ASLRのハナシの結論:従来よりも10〜20%くらい保守的に考えておけばok。保守的に考えたくなければ、「セキュリティを気にする度合いの高さ」と「オーバーコミットへの期待値の高さ」とのトレードオフってことで。つまり、後者を優先したいのならば、ASLRをdisableにすればいい。


「アドレス空間配置のランダム化」http://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E7%A9%BA%E9%96%93%E9%85%8D%E7%BD%AE%E3%81%AE%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E5%8C%96

仕組み上、ASLRが効いた状態ならば、程度はさておき、メモリのオーバーコミットが効きにくくなるのは自明だ。しかし、筆者自前の環境を監視している限りでは、Windows7でASLRが効いた状態でも、メモリのオーバーコミットがそれなりに効いているように見える。まぁWindows XPと比べたときに、少々保守的に考えるようにしておけばokなのかもしれない。http://projectvrc.nl/の文献から、おおよそ10〜20%低めに考えれば良いのでは、と考察。


■ラージページのハナシの結論:ある程度は保守的に考えたほうがよさそうではあるが、さほど神経質に考慮しなくてもよさそう。とはいえ、運用してみて、実測値で見ていくしかなさそうだ。その理由を、大まかに2つに分けるならば、以下の2つが考えられた。

①全部のアプリケーションでラージページが使われるわけではない・・・ようだ。とすると、OS自身のメモリ使用はさておき、ラージページを使っているアプリケーションをどんだけ使うのか、に依存する・・・と考えてみた。って考えてみると、実はたいしたことなかったりして。明らかに単位が大きい方が優れている場合って、データベースとかJVMとか、限られている気がするから。
なぜなら、ラージページの単位となっている2MBって、今日現在のデスクトップOSに割り当てるRAM容量の標準値であろう2GBとか4GBからしてみれば、粒度が大きすぎるでしょ。こんなに粒度が大きいのでは、メモリ管理の単位として一般的に使われるには不自由だ。

http://d.hatena.ne.jp/NyaRuRu/20080423/p1
http://msdn.microsoft.com/en-us/library/aa366720.aspx
http://d.hatena.ne.jp/think_carefully/20090201/1233484061

②ラージページだからといって、ページ共有がまったく効かなくなるわけではないらしい。効くタイミングが変わるだけ、のようだ。

http://www.vmware.com/files/pdf/techpaper/vsp_41_perf_memory_mgmt.pdf
のP8から抜粋。
---
However, ESX still generates hashes for the 4KB pages within each large page. Since ESX will not swap out large pages, during host swapping, the large page will be broken into small pages so that these pre-generated hashes can be used to share the small pages before they are swapped out. In short, we may not observe any page sharing for hardware-assisted memory virtualization systems until host memory is overcommitted. 
---
オーバーコミットが発生する段階になって、2MB->4KBへの細分化(?)を行い、その時点で、ページ共有をするっぽい。とはいえ、事前に4KB単位のhashを作り終えているとなると、意外と、有事の際の処理は多くないのかな???。うぉぉ、ここまでくると、運用ナシで、運用前の実験だけでページ共有の効果の程を判断するのは難しいデスな。



とりあえず、いじれるパラメータは、このあたり。
TPS (Transparent Page Sharing) があまり効かない(?)ときに、読んでおきたいURLs