VMware ESXにおけるメモリ管理(7) - Dynamic Memory on Hyper-V 設定編 +α

VMware ESXにおけるメモリ管理』シリーズ
(1) - 序:他のリソースとの違いはなに?
(2) - 仮想化インフラにおけるメモリ管理って?
(3) - メモリに関する仮想化支援機能(Intel EPT/VPID, AMD RVI/Tagged TLB)
(4) - メモリを割り当てるのは簡単だが、回収するのは難しい
(5) - 透過的ページ共有
(6) - Dynamic Memory on Hyper-V 実装編
…の続きです。

VMware ESXにおける…といいつつ、今回も主にMicrosoft Hyper-VにおけるDynamic Memoryの話でございます(^_^;)。
Hyper-V 2.0SP1?がサポートするメモリ管理機能"Dynamic Memory"を使用するには、対象仮想マシンのメモリ設定において、[メモリ管理]の設定を"動的"とするだけです。パラメータ項目は次の通り。

  • スタートアップRAM
  • 最大RAM
  • バッファ割合
  • メモリ優先度

スタートアップRAMは対象となる仮想マシンの起動時割り当てメモリ量です。「仮想マシンが必要とする最低限の容量」を割り当てる、とされていますが、なかなか難しい(^_^;)。最大RAMは割り当てを行う最大メモリ量です。余裕を持って値を定めたいところではありますが、Hyper-Vではメモリのオーバーコミット運用は基本的に想定していないので、割り当て過ぎもNG。スタートアップと最大のRAM量については、運用の状況などをみながら推奨とかをしてもらえるような仕組みができるとよいのですが(Microsoftのことなので、SystemCenter系の製品で機能として実装してきそうな気もしますが)。
バッファ割合はメモリ使用量に対する割り当てメモリサイズのバッファ量を%で指定します。5%単位で、5%から95%までの範囲で指定が可能。メモリ使用量が1GBで20%のバッファ割合が設定されていた場合は、1.2GBのメモリが対象仮想マシンに割り当てられることになります。急激にメモリ使用量が変動するようなアプリケーションを実行する場合などは、バッファ割合を大きめに設定しておいた方がよいかもしれません。ただし、バッファ割合があまりにも多いと、あまりメモリ管理が「動的」にならない状態となってしまうことになりますが…。
そして最後のパラメータがメモリ優先度です。9段階で調整ができるこの値は、仮想マシン毎のメモリ割り当てにおける優先度合いを設定します。たとえば、Dynamic Memoryを使用する複数の仮想マシンが稼働している中で、新しくメモリ優先度が高い仮想マシンが起動されようとした場合には、他の仮想マシンからメモリを回収してでもスタートアップRAMとして要求されたメモリを確保しようとしますが、逆に優先度の低い仮想マシンの場合は起動されない(起動しない)ということも発生しうるということになります。また、動作している複数の仮想マシンが同時にメモリの割り当てを要求した場合、優先度が高く設定されている仮想マシンに対して優先的に割り当てが行われます。そのため、優先度が低い仮想マシンではメモリ要求に対して割り当ては行われないということになります(追加割り当て処理事態はエラーとなりますが、確保しているメモリの範囲で仮想マシンとしては動作を継続します)。
ここまでHyper-Vについて書いていましたが、実はXenServer 5.6において実装されたメモリ管理機能もHyper-VのDynamic Memoryと非常によく似ています。Hyper-VとXenServerは親パーティション(Xenの場合はDomain 0)を必要とするという意味で非常に仕組みはよく似ており、こうした実装面においても似通った方式が採用されるということは必然的ともいえるのかもしれません。
XenServer 5.6のメモリ管理機能は"Dynamic Memory Control (DMC)"といいます(^_^;) (名前もそっくりですね)。割り当てるメモリの最小値(=スタートアップRAMと同じ意味)と最大値(=最大RAMと同じ意味)を割り当てることにより、メモリを相互に融通し合います。XenToolsにより「ゲストOS側が認識するかたちで」メモリの割り当てと回収が行われる点もまったく同じ。ただし、XenServerの場合はバッファ量の調整や優先度の設定はGUIでの設定項目には含まれていません(ある程度の細かい調整はxeコマンドにより対応しています)。そのため、実メモリ容量を超える割り当てが行われたオーバーコミット状態となった場合、動的なメモリ割り当てを構成している仮想マシンに対しては均等な割り当てが行われます。また、XenServerにおけるメモリ管理機能はAdvanced Edition以上でのみ使用することができるという制限があります。

XenServerのDMCHyper-Vよりも優れている点は対応しているゲストOSの種類でしょうか。Windows Server 2003以降およびWindows XP以降、RHEL4.5以降、SLES10,11など、比較的幅広いゲストOSがXenToolsを導入することによりDMCによる動的メモリ管理に対応することができます。
さて、横道にそれるのはこれくらいにして、ESX Serverの話に戻りましょう。そういえば、まだESX Serverにおけるバルーンドライバについて書いていないのに、Hyper-VのDynamic MemoryやXenServerのDMCについての説明の中で、メモリの回収について書いてしまっていましたね。