第11回 メモリ管理機能が強化されたHyper-VのDynamic Memory:Windows Server 2008 R2の真価(1/2 ページ)
Windows Server 2008 R2 SP1のHyper-Vではメモリ管理機能が強化され、メモリを効率よく利用できるようになっている。
「Windows Server 2008 R2の真価」は、Windows Server 2008の後継OSである、Windows Server 2008 R2の注目機能について解説するコーナーです。
今回は、Windows Server 2008 R2 Service Pack 1(SP1)のHyper-Vにおける重要な拡張機能の1つ、「Dynamic Memory」について解説する。Windows Server 2008 R2 SP1の概要や入手先、インストール方法などについては、以下の記事を参照していただきたい。
Dynamic Memoryとは
Windows Server 2008 R2向けのSP1では、Hyper-Vに関して2つの大きな機能拡張が行われている。1つは今回解説する「Dynamic Memory」であり、もう1つは仮想環境で3Dグラフィックス機能をサポートする「RemoteFX」である。RemoteFXについては次回解説する。
Dynamic Memoryとは、Hyper-V上の仮想マシンの実行状況に合わせて、仮想マシンへの物理メモリの割り当てを最適化する機能である。仮想マシンの需要に応じて割り当てるメモリを動的に変更することにより、システムに搭載しなければならないメモリ・サイズを抑えることができる。同じ物理メモリ・サイズなら、より多くの仮想マシンを実行できるようになるだろう。
従来のHyper-Vでは、各仮想マシンに割り当てる物理メモリ(実メモリ)のサイズは固定的であり、利用したい仮想マシン(ゲストOSやそのアプリケーション)の需要に応じて、あらかじめ決めておく必要があった。そのため、例えば時間帯によって各仮想マシンの要求するメモリ・サイズが異なっていたとしても、それぞれのピーク需要に合わせて固定的にメモリを確保しておく必要があった(例:4台の仮想マシンに対して、すべて2Gbytesずつ割り当てておくなど。これだと8Gbytes以上の実メモリが必要になる)。これに対してDynamic Memory環境下では、例えば初期値512Mbytes、最大値2Gbytesといった割り当てにしておけばよい。仮想マシンが4台あっても、512Mbytes×4=2Gbytesのメモリさえあれば4台の仮想マシンを実行できる。ピーク時間帯が重なっていなければ、物理システム全体で4Gbytesのメモリしかなくても、ニーズに応じて、例えば仮想マシン2台は初期値の512Mbytes、1台は1Gbytes、残りの1台が最大値の2Gbytesを利用するといったことが自動的に実現する。
Dynamic Memoryによる動的なメモリ管理
Dynamic Memory機能が有効な場合、仮想マシンに割り当てられるメモリは時間とともに動的に増減する。現実のコンピュータ・システムでいえば、物理メモリ・サイズが増えたり、減ったりすることに相当する。一般的なクライアント向けPCやワークステーションなどではこのようなことは不可能だが、機能や信頼性を強化したミドル〜ハイエンドのサーバ・システムでは、電源オンでOSやアプリケーションを実行したまま、物理メモリを追加したり、(故障時に)交換したりできる機能を持つものがある。Dynamic Memoryは、このようなハードウェア機能を仮想マシンで利用することに相当すると考えればよいだろう。
Dynamic Memory環境におけるメモリ割り当ての状況を次に示す。最初に512Mbytesのメモリを割り当てて仮想マシンを起動すると仮定している。
Dynamic Memoryによるメモリのオンデマンド割り当て
メモリの使用量が増えて未使用領域が減少すると、ページアウトするのではなく、ハイパーバイザにメモリを要求して、それを利用する。これにより、低速なページングを使うことなく、高速なオンメモリ処理が可能になる。未使用領域が増えると、その分をハイパーバイザに返却し、ほかの仮想マシンで利用できるようにする。これにより、ゲストOSから見えるメモリの上限(4.の例では800Mbytes)は変わらないまま、実際には400Mbytesしかメモリを使用していない、といった状況になることがある。仮想マシンに割り当てるメモリの初期値や最低値、最大値、どのくらい未使用領域を残しておくかなどのパラメータは仮想マシンごとに設定できる。
仮想マシンの実行が進み、使用中のメモリ・サイズがある程度まで増えて空き(未使用)メモリ領域が少なくなったとする。すると仮想マシンに組み込まれているメモリ使用量のモニタはその状況を検知し、200Mbytesのメモリを追加割り当てする。これにより、仮想マシンは新しいメモリを獲得して、すべてオンメモリのまま処理を続行できる。従来ならば、メモリが不足すればゲストOSの持つページング機能を使って不要なデータをページ・ファイルに書き出すといった操作が必要になるところだ。このように、メモリ需要に応じて仮想マシンに割り当てられるメモリは自動的にどんどん増えていく。
このように、実行中にメモリ・サイズを増やすことを「ホットアッド(Hot-Add)」という。スワップアウトする代わりに、仮想マシンのハイパーバイザにメモリを要求していると考えればよいだろう。ただし各仮想マシンからのメモリ要求が重なって、本当にシステム全体の空きメモリがなくなった場合は、メモリの追加割り当ては行われない。この場合は、各ゲストOSは、従来どおりゲストOSがスワップアウトするなどの処理を行って、空きメモリを確保することになる。
ところで仮想マシンのメモリ割り当てサイズは増えるばかりではない。アプリケーションの実行が終了してメモリ領域が(ブロックで)不要になれば、その領域をシステムに返却することもある。これを「バルーニング(ballooning)」という。ゲスト仮想マシンのメモリ空間中に、泡のように広がっている未使用の空きメモリ領域を見つけ、それをハイパーバイザへ返すことからこのように呼ばれている(内部的には、仮想マシンに組み込まれた“バルーン・ドライバ”が仮想マシンの未使用メモリ空間からメモリ領域をいくらかまとめて確保し、その部分のメモリをハイパーバイザへ渡すことによってメモリの返却を実現している)。
Windows Server 2008 R2 SP1のHyper-Vでは、このホットアッドとバルーニングを使って、各仮想マシンに必要最低限のメモリを効率よく割り当てている。
このような動的なメモリ管理の仕組みを実現するためには、ゲストOS側の協力が欠かせない。ハードウェアによるメモリのホットアッド機能などに対応するため、いくつかのServer OSでは、メモリ・サイズ変更の通知を受けて、OSの管理するメモリ・サイズを増減させることができる。だが、通常のOS(特にクライアント向けWindows OS)ではそのような機能を持っていない。
そこでWindows Server 2008 R2 SP1のHyper-Vでは、ゲストOSに動的なメモリ管理を実現するためのドライバなどを導入することによって、メモリのホットアッドやバルーニングを実現している。具体的には、Windows Server 2008 R2 SP1のHyper-Vに付属の統合機能をインストールすると、この機能が利用可能になる。統合機能を利用しない場合や古いバージョンの統合機能を利用する場合は従来と同じく、実行中にメモリ・サイズを変更できず、最初に仮想マシンの設定画面で設定したままになる。
以下にDynamic Memoryを利用するためのゲストOSの要件を示しておく。これらのOSで、さらにSP1に付属の統合機能をインストールした場合にのみ、Dynamic Memoryが利用可能になる。
Dynamic Memory機能が利用できるゲストOS | |
---|---|
Windows Server 2008 R2 Standard、Web(x64) SP1 | |
Windows Server 2008 R2 Enterprise、Datacenter(x64)※1 | |
Windows Server 2008 Standard、Web(x86/x64)SP2※2 | |
Windows Server 2008 Enterprise、Datacenter(x86/x64)SP2 | |
Windows Server 2003 R2 Standard、Web、Enterprise、Datacenter(x86/x64)SP2 | |
Windows Server 2003 Standard、Web、Enterprise、Datacenter(x86/x64)SP2 | |
Windows 7 Enterprise、Ultimate(x86/x64)※1 | |
Windows Vista Enterprise、Ultimate(x86/x64)SP1以降 | |
Dynamic Memoryを利用できるゲストOS Hyper-VのゲストOSとしてインストールした場合にDynamic Memoryを利用できるWindows OSの種類(※3)。これらのゲストOSをインストール後、さらにWindows Server 2008 R2 SP1の統合コンポーネントにアップグレードしておくこと(Windows Vista/Windows Server 2008以降のWindows OSにはあらかじめ統合コンポーネントが含まれているが、バージョンが古いのでSP1のものに更新しておくこと)。 ※1 Windows Server 2008 R2/Windows 7 SP1をインストールするか(これが推奨)、SP1に含まれる統合コンポーネントに更新しておく。 ※2 サポート技術情報「動的メモリ、仮想マシンのシステムでが実行されている Windows Server 2008 SP2 または Windows Web Server 2008 SP2 を有効にすると、バーチャル マシンのメモリ増加しません。[機械翻訳]」の修正プログラムも適用しておくこと。 ※3 サポートされるゲストOSに関する最新情報は「Hyper-V Dynamic Memory Configuration Guide[英語](TechNet)」参照。 |
これら以外のWindows OSを利用する場合は、従来のように、固定的なメモリ・サイズ割り当てしか利用できない(設定画面でDynamic Memoryのパラメータをセットしても、ずっと初期のサイズのままになる)。
オーバーコミットとの違いは?
Hyper-V以外の仮想化ソフトウェア(例:VMware vSphereやVMware Workstationなど)では、Dynamic Memoryと似たような機能として、メモリの「オーバーコミット」がサポートされているものがある(連載 仮想PCで学ぶ「VMware Playerを使う」参照)。これは物理メモリ・サイズを超えるメモリを仮想マシンに割り当てる機能であるが、Dynamic Memoryとはメモリの割り当て方法が少し異なる。その差を簡単にまとめると次のようになる。
項目 | Dynamic Memory | オーバーコミット |
---|---|---|
方式の概要 | 物理メモリ上でのみ割り当てる | 仮想ディスク方式で割り当てる |
仮想マシンごとに割り当て可能な最大メモリ・サイズ | ホストPCの最大メモリ・サイズ | 空きディスク・サイズ |
複数の仮想マシン全体で割り当て可能な最大メモリ・サイズ | ホストPCの最大メモリ・サイズ | 空きディスク・サイズ |
割り当てられたメモリの属性 | 必ず物理メモリ上に存在する | 物理メモリもしくはディスク上に存在する |
実行可能な仮想マシンの最大数/最大サイズ | 物理メモリ・サイズに制限される | ディスクの空き領域サイズに制限される |
メモリ・アクセス・パフォーマンス | 物理メモリの速度でアクセス可能 | 物理メモリ上に存在していれば、物理メモリの速度でアクセス可能。ページアウトされていると、ディスクのアクセス速度の制約を受ける |
Dynamic Memoryとオーバーコミット方式 |
2種類の違いを簡単にいうと、Dynamic Memoryはすべての仮想マシンを物理メモリ上に割り当てる方式、オーバーコミットは仮想記憶システムのように、物理メモリ上に入りきらない仮想マシンはディスク上へスワップアウトして管理する方式である。
そのためDynamic Memoryでは、物理メモリ・サイズを超えるような大きな、もしくは多数の仮想マシンを実行することはできないが(これは従来のVirtual ServerやHyper-Vと同様)、仮想マシンの実行環境は常にメモリ上に存在していることが保証されているので、スワップアウトに伴うパフォーマンスの低下は起こらない。
これに対してオーバーコミット方式では、物理メモリ・サイズを超えるような大きな仮想マシンや、多数の仮想マシンを同時に実行できるというメリットがある(オンメモリだけで実行させることも可能)。ただしディスクへのスワップアウトが発生するような状況では、パフォーマンスが低下することは避けられない(すべてオンメモリになるように設定すれば、Dynamic Memory方式と同じ)。
もっとも、すべてがメモリ上に格納できるような仮想マシンばかりの場合は、実はどちらでも違いはそれほどない。それを超えるような大きなメモリ・サイズの仮想マシンになった場合、Dynamic Memory方式ではゲストOSがスワップアウトを始めるのに対し、オーバーコミット方式では、ハイパーバイザ(もしくはゲストOS)がスワップアウトを始めることになる。
Copyright© Digital Advantage Corp. All Rights Reserved.