Windows Server Technical Previewの「Hyper-V」には、さまざまな新機能と強化点がすでに実装されており、実機で評価できます。今回は、Hyper-Vの「メモリ割り当て」の新機能に注目し、現行バージョンとの違いを明らかにします。
今回は、以下のドキュメントで紹介されている次期Windows Serverの「Hyper-V」に搭載予定の新機能「ネットワークアダプターとメモリのホットアド/リムーブ」(Hot add and remove for network adapters and memory)、特に「メモリのホットアド/リムーブ」について、Windows Server Technical Preview Hyper-Vに基づいて説明します。
仮想マシンに対する「メモリのホットアド/リムーブ」と聞くと、Hyper-Vの「動的メモリ」(Dynamic Memory)を思い浮かべる人が多いと思います。最初に指摘しておくと、次期Hyper-Vの新機能「メモリのホットアド/リムーブ」は、動的メモリに関するものではありません。
Hyper-Vの動的メモリ機能は、仮想マシンに対して構成されたメモリの範囲内で、仮想マシンのゲストOSのメモリ需要の変化に応じて自動的にメモリを追加したり、不要になったメモリを回収したりする機能です。
動的メモリ機能は、Windows Server 2008 R2 Service Pack(SP)1のHyper-Vで、初めて導入されました(画面1)。最初の実装では、動的メモリを「スタートアップRAM」「最大RAM」「メモリバッファー(仮想マシン側で確保したい空きメモリの割合)」「メモリの重み(割り当ての優先度)」の4項目で構成しました。このうち、「スタートアップRAM」「最大RAM」の二つは仮想マシンを停止した状態で設定する必要がありました。
Windows Server 2012 Hyper-Vでは、動的メモリの構成を「スタートアップRAM」「最小RAM」「最大RAM」「メモリバッファー」「メモリの重み」の5項目で構成するように変更されました。これにより、Windowsの起動時に必要なメモリを確保しつつ、起動後は「スタートアップRAM」より小さい「最小RAM」と「最大RAM」の範囲内でメモリ割り当てが増減されるようになりました。なお、動的メモリを有効にしない場合、「スタートアップRAM」に指定した値が静的メモリで割り当てたメモリ容量になります。
新しい動的メモリの構成では、「最小RAM」を「スタートアップRAM」より小さな値に設定できるようになりました。そのため、仮想マシンの再起動時にHyper-Vホスト側の利用可能なメモリ容量の不足により、「スタートアップRAM」を確保できない状況が想定されるようになります。
この問題を解消するため、Windows Server 2012 Hyper-Vには「スマートページング」という機能が導入されました。スマートページングは、Hyper-Vホスト側のディスクリソースを一時的なメモリとして使用して、仮想マシンへのメモリ割り当てを行う機能です。仮想マシンのパフォーマンスは一時的に低下しますが、確実な再起動操作が保証されます。
また、Windows Server 2012 Hyper-Vからは、オンラインの仮想マシンに対して、動的メモリの「最小RAM」および「最大RAM」の範囲を変更できるようになりました。オンライン中の範囲変更は、「最小RAM」の縮小と「最大RAM」の拡大が可能です(画面2)。つまり、動的メモリの範囲を広げる構成変更はオンラインのままできますが、範囲を狭める場合は仮想マシンを停止する必要があります。
参考として、Windows Server 2012 R2 Hyper-VおよびWindows Server 2012 Hyper-Vの動的メモリに関する公式ドキュメントを紹介しておきます。
動的メモリ機能はメモリが余っている仮想マシンから、メモリを必要としている仮想マシンへ、自動的にメモリを再割り当てできるため、限られた物理メモリ容量でより多くの仮想マシンを実行するのに役立ちます。しかし、あらゆるケースで動的メモリがうまく機能するわけではありません。
動的メモリ機能が有効なケースとしては、「仮想デスクトップインフラストラクチャ」(Virtual Desktop Infrastructure:VDI)の仮想デスクトップを提供する仮想マシンに対するメモリ割り当てがあります。
VDIの仮想デスクトップでユーザーが実行するアプリケーションは、多くのメモリを必要とする場合がありますが、それは一時的なもので、必要がなくなれば他の用途にメモリを引き渡すことができます。メモリに対するこの種のニーズに対して、動的メモリはうまく機能します。
VDI環境で動的メモリを利用すると、Hyper-Vホストの限られたメモリリソースを効率的に仮想デスクトップ用仮想マシンに割り当てることができ、静的メモリで構成するよりも多くの仮想デスクトップを1台のHyper-Vホスト上で同時実行できます。
動的メモリ機能が初めて実装されたWindows Server 2008 R2 SP1では、Hyper-Vに対してVDIに関係する新機能の追加が行われました。具体的には、RemoteFX仮想GPUのサポート、Windows 7を実行する仮想デスクトップ数の最大構成の拡大(1プロセッサー当たり最大12の仮想プロセッサーをサポート)です。動的メモリ機能もまた、VDIのための新機能といってもよいでしょう。
一方、主にサーバーアプリケーションが該当しますが、開始時のメモリ量に基づいて動作するアプリケーション、メモリを継続的に使用するように設計されたアプリケーション、あるいは空きメモリをできるだけデータのキャッシュ用に利用してパフォーマンスを最適化しようとするアプリケーションは、動的メモリとともにうまく機能しない場合があります。
例えば、Microsoft SQL Serverの場合、SQL Server 2008および2008 R2は、(物理メモリの)ホットアドメモリに対応したEnterpriseおよびDatacenterエディションが、動的メモリで追加されたメモリを認識できます。SQL Server 2012以降はStandardエディションもホットアドメモリに対応しました。
ホットアドメモリに対応していないSQL Serverを実行する仮想マシンで動的メモリを使用すると、SQL Serverはサービス開始時に仮想マシンに割り当てられているメモリを認識し、そのメモリ内で動作しようとします。この他にも動的なメモリの追加と削除に関して、さまざまな考慮点があります。詳しく知りたい場合は、以下のドキュメントにリンクされている「Running SQL Server with Hyper-V Dynamic Memory - Best Practices and Considerations Word」を参照してください。
https://msdn.microsoft.com/en-us/library/hh372970.aspx
"Memory is a critical resource to Microsoft SQL Server workloads, especially in a virtualized environment where resources are shared and contention for shared resources can lead to negative impact on the workload.~(中略)~There are unique considerations that apply to virtual machines that run SQL Server workloads in such environments."
SQL Serverは適切に使用すれば動的メモリ機能を生かせますが、Exchange Serverは動的メモリ機能の使用自体がサポートされません。その理由は、以下のドキュメントで説明されています。
https://technet.microsoft.com/ja-jp/library/jj619301(v=exchg.150).aspx
“Exchangeは、メモリへのデータのキャッシュを含むパフォーマンス最適化機能を持つ多くのサーバーアプリケーションと同様に、自身が実行されている物理マシンや仮想マシンに割り当てられているメモリを十分に制御できない場合、システムパフォーマンスが低下したり、許容できないクライアントの動作が発生したりしやすくなります。したがって、動的メモリ機能はExchangeには使用できません。”
SQL Serverのようにテストおよびドキュメント化されていない限り、サーバー用途の仮想マシンは、物理環境と同じように適切なパフォーマンスを得るのに必要なリソースのサイジングを行ったうえで、固定量のメモリを静的に割り当てるのが安全です。
Windows Server Technical Preview Hyper-Vに実装された動的メモリ機能は、Windows Server 2012 R2 Hyper-Vの動的メモリ機能と比べて、これといった違いはありません。新たに追加されたのは、動的メモリではなく、「静的メモリのホットアド/リムーブ」機能です。動的メモリを有効にしていない仮想マシンに対して、仮想マシンを実行中のままメモリを追加したり、削除したりできる機能です。
動的メモリの利用が適切でない用途の仮想マシンであっても、緊急のメモリリソース不足にこの機能で対応できるでしょう。あるいは、Hyper-Vホストや他の重要な仮想マシンでメモリリソース不足が発生したときに、別の優先度が低い仮想マシンからメモリを手動で回収し、明示的に再割り当てするということができます。
以下の画面3は、Windows 10 Technical Previewをインストールした、実行中の第1世代仮想マシンです。仮想マシンで動的メモリは有効化していません。なお、今回説明する機能に関しては、64ビット版Windows 10 Technical Previewの「クライアントHyper-V」でも利用できるものなので、より新しいビルドで日本語版も使えるWindows 10 Technical Preview ビルド9926のクライアントHyper-Vの画面になっています。
ご覧の通り、「スタートアップRAM」のテキストボックスが変更可能になっています。この画面は、「スタートアップRAM」を起動時の1536MB(1.5GB)から、1024MB(1GB)、2048MB(2GB)、3072MB(3GB)と変更し、今まさに4096MB(4GB)に変更しようとしているところです。この期間にゲストOSのメモリ使用量はほとんど変わっていないのですが、最大メモリを示すグラフの縦軸が変化するため、メモリ使用量のグラフが上下しています。
仮想マシンの割り当てメモリを削除(縮小)する場合、ゲストOSで今現在必要としているメモリ量を下回る値を設定しようとすると、エラーが発生します(画面4)。ただし、可能な範囲でメモリの削減が実行されます。
この新しいメモリのホットアド/リムーブ機能は、第1世代仮想マシンと第2世代仮想マシンの両方でサポートされますが、ゲストOSは制限されるようです。対応ゲストOSはまだ公表されていませんが、筆者が確認した限り、Windows Server Technical PreviewおよびWindows 10 Technical Previewではメモリのホットアド/リムーブが可能です(画面5)。以前のバージョンのWindowsゲスト、およびLinuxゲストでは利用できませんでした。
また、旧バージョンのHyper-Vから移行した構成バージョン「5.0」の仮想マシンではサポートされません(画面6)。仮想マシンの構成バージョンについては、本連載第4回で詳しく説明しています。
Windows Server Technical Preview Hyper-Vには、「ネットワークアダプターのホットアド/リムーブ」機能も追加されています(画面7)。これは、実行中の仮想マシンに対してネットワークアダプターを追加できるという機能で、第2世代仮想マシンでのみサポートされます。
なお、ゲストOSは限定されないようで、以前のバージョンのWindowsゲスト、およびLinuxゲストに対しても問題なくネットワークアダプターを追加/削除することができました。この機能は、構成バージョン5.0の仮想マシンでも利用できるようです。
64ビット版Windows Server 2008に初めてHyper-Vが搭載されたとき、実行中の仮想マシンの構成変更はほとんどできませんでしたが、Hyper-Vのバージョンアップとともに、できることが追加されてきました。
以下の表1に、Hyper-Vのバージョンごとに、実行中の仮想マシンに対して行える操作をまとめてみました。仮想マシンの構成変更やホストの保守のために、仮想マシンをオフラインにする必要性はだいぶ少なくなりました。
山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Hyper-V(Oct 2008 - Sep 2015)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。マイクロソフト製品、テクノロジを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手がける。個人ブログは『山市良のえぬなんとかわーるど』。
Copyright © ITmedia, Inc. All Rights Reserved.
Server & Storage 險倅コ九Λ繝ウ繧ュ繝ウ繧ー