IT関連の著述を行う際に不可欠となる「実験環境」。かつては必要な台数分だけのPCを手元に用意せざるを得なかったが、仮想化環境、とりわけWindows Server 2008とHyper-Vの登場によってこの問題が一気に解決され、手持ちの実験機を激減させることに成功した。その話については1年ちょっと前に「【レビュー】【2008 R2 体験記】PCであふれかえる仕事場をHyper-Vで整理 」で取り上げている。

ところが、実験環境をHyper-Vの仮想化環境に集約すると、また新たな問題が生じてきた。あるものが足りなくなったのだ。そして、それを解決するために有用と思われる機能がWindows Server 2008 R2 SP1で登場したということで、さっそく試してみることにした。

執筆者紹介

井上孝司(INOUE Koji)


マイクロソフトの開発部門に7年間在籍した後、フリーライターに転身。Windows Serverをはじめとしたマイクロソフト技術に詳しく、著書も多数残している。また、軍事分野にも精通しており、最近では「軍事研究家」としての執筆も行っている。

近著に「戦うコンピュータ2011」(光人社)がある。本誌では現在、「にわか管理者のためのWindowsサーバ入門」、「『MSDN』の歩き方」、「ビジネス視点で防衛産業ウォッチング」を好評連載中。

RAM搭載量の不足が致命的

筆者が使用している実験機は、CPUがCore2 Duo E6600、RAM搭載量は4GBとなっている。当節としてはいささか見劣りするスペックの自作PCだが、実験機に対する資金投下は後回しになりやすいので、そういうことになってしまった。

そこでHyper-Vみたいな仮想化環境を使おうとすると問題になるのがRAM搭載量ということになる。しかも、4GBをまるごと使えるわけではなくて、ペアレントOSであるWindows Server 2008 R2 SP1で使用する分を差し引かなければならないから、仮想マシンに割り当てられる分はもっと少ない。そのため、同時に複数の仮想マシンを動作させようとすると、仮想マシンに割り当てたメモリの量によっては、以下のようなメッセージが出て叱られてしまう。

動作させる仮想マシンに割り当てたRAMの合計が物理RAMの合計を超過して叱られる

もっとも実際には、OSが消費するRAMの量が常に同じとは限らない。動作するプログラムが少ない、あるいは扱うデータの量が少ない場合にはRAM消費量は少なく、同時に多数のプログラムを動作させたり大容量のデータを扱ったりすれば逆になる。つまり、そうした状況に合わせて仮想マシンへのRAM割当量を動的に変動させることができれば、固定的に割り当てるのと比較するとロスがない。それを実現したのが、Windows Server 2008 R2 SP1で新たに導入された新機能「Dynamic Memory」というわけだ。

Dynamic Memory機能の実際

まず、Dynamic Memory機能がないHyper-V 1.0や Hyper-V 2.0の仮想マシン設定画面について、おさらいしておこう。以下のように、RAMの割り当てを指定する項目は1つだけだ。当然ながら、割り当てるRAMの量は固定的となり、同時に動作する複数の仮想マシンに割り当てるRAMの合計が物理RAMの量を上回ることはできない。

Dynamic MemoryがないHyper-V 1.0 (Hyper-V 2.0)では、RAM割当量を指定する項目は1つしかない

これに対してSP1 が適用された Hyper-V 2.0(以降 Hyper-V 2.0 SP1)では、RAM割当量の上限とは別に、スタートアップRAMを指定できる。つまり、起動時に割り当てるRAMを必要最低限に抑制しておいて、その後は動作状況に応じて、RAMの消費が増えれば上限までの範囲内で増やすし、RAMの消費が減れば剥奪して他の負荷が高い仮想マシンに回すわけだ。常に最大負荷で動き続けているわけではないから、負荷状況に応じて動的にRAMの割り当てをコントロールしてくれればロスが減る。

そこで、Windows Server 2008 R2にSP1を適用するのと併せて、Dynamic Memoryの設定を試してみた次第だ。

ただしその際に、注意しなければならない点が1つある。Windows Server 2008 R2 SP1導入前から運用している仮想マシンについては、統合サービスの更新を行う必要がある。これを行わないと、仮想マシンの側がDynamic Memoryに対応した状態にならないので、動的なメモリ割り当てを行えない。

SP1導入前から運用している仮想マシンは、統合サービスの更新を行う必要がある。手順は新規導入時と同じだ