「Reservation」の設定方法

サービス開発者から見たWindows Server 2008 R2 Service Pack-Vol.3

GMO最新ネット業界レポート ソリューション編。『サービス開発者から見たWindows Server 2008 R2 Service Pack 1』とし、前回まではサービス提供者にとって非常に有用な機能であるDynamic Memoryについて概要とその効果を説明してきた。今回はWMIを使用しての「Reservation」の設定方法について、GMOインターネット株式会社 事業本部 樋口 勝一が執筆。

「Reservation」の設定方法

では、今回のキーとなる「Reservation」の設定方法についてご説明したいと思います。Hyper-Vマネージャでは設定できないのでWMIを使ってプログラムマチックに設定すると前述しました。(前回の記事はこちら)

いきなりですが、以下がそのコードです(VBScript)

:  Option Explicit 
 2:   
 3:  Dim objWMIService, objManagementService
 4:  Dim strVMName, intVirtualQuantity, intReservation, intLimit, intWeight, intTargetMemoryBuffer
 5:   
 6:  Set objWMIService = GetObject("winmgmts:\\.\root\virtualization")
 7:  Set objManagementService = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemManagementService").ItemIndex(0)
 8:   
 9:  strVMName = "TestVM"
10:  intVirtualQuantity = 16384 
11:  intReservation = 1024
12:  intLimit = 16384
13:  intWeight = 5000
14:  intTargetMemoryBuffer = 20
15:   
16:  Dim objComputerSystem
17:  Set objComputerSystem = objWMIService.ExecQuery("SELECT * FROM Msvm_ComputerSystem WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
18:  Dim objVirtualSystemSettingData
19:  Set objVirtualSystemSettingData = objWMIService.ExecQuery("SELECT * FROM Msvm_VirtualSystemSettingData WHERE ElementName = '" & strVMName & "'").ItemIndex(0)
20:  Dim objMemorySettingData 
21:  Set objMemorySettingData = objWMIService.ExecQuery("ASSOCIATORS OF {" & objVirtualSystemSettingData.Path_.Path & "} WHERE ResultClass = Msvm_MemorySettingData").ItemIndex(0)
22:  objMemorySettingData.DynamicMemoryEnabled = True
23:  objMemorySettingData.VirtualQuantity = intVirtualQuantity 
24:  objMemorySettingData.Reservation = intReservation 
25:  objMemorySettingData.Limit = intLimit
26:  objMemorySettingData.TargetMemoryBuffer = intTargetMemoryBuffer 
27:  objMemorySettingData.Weight = intWeight
28:   
29:  Dim strMemorySettingData
30:  strMemorySettingData = Array(1)
31:  strMemorySettingData(0) = objMemorySettingData.GetText_(1)
32:   
33:  Dim objInParam, objOutParams
34:  Set objInParam = objManagementService.Methods_("ModifyVirtualSystemResources").InParameters.SpawnInstance_()
35:  objInParam.ResourceSettingData = strMemorySettingData
36:  objInParam.ComputerSystem = objComputerSystem.Path_.Path
37:  Set objOutParams = objManagementService.ExecMethod_("ModifyVirtualSystemResources", objInParam)

WMIを使用して「Reservation」の設定を行うにはこの程度の内容となります。大まかな流れとしては、WMIのインターフェースに接続して、Dynamic Memoryを有効にして、各値を設定するといった感じです。

では、細かく見てゆきましょう。

6行目 WMIのインスタンスを作成してvirtualizationプロバイダーに接続します。VBSからWMIを使用する場合はほぼ決まりきった構文となります。

 Set objWMIService = GetObject("winmgmts:\\.\root\virtualization")

「.」はローカルのサーバーに接続する場合の記述となります。リモートのサーバーに接続する場合はサーバー名かIPアドレスを指定します。

「virtualization」はHyper-Vにアクセスするための名前空間名です。

VirtualQuantityスタートアップRAM
Reservation最低RAM
Limit最大RAM
TargetMemoryBufferメモリバッファー(5 ~2000%)
Weightメモリの優先度(0 ~10000)
http://msdn.microsoft.com/en-us/library/cc136856(v=vs.85).aspx

TargetMemoryBuffer(メモリバッファー)は仮想マシンの急激なメモリ使用などに備えるために、予め確保しておくメモリの割合です。2000%まで設定可能となっており、例えば1GBのスタートアップRAMで設定し、メモリバッファー2000%に設定すると最大RAMの値に関わらず20GBまでメモリが割り当てられることになります。既定値は20%となっているので、アプリケーションサーバーなど急なメモリの需要が考えられる仮想マシンには、仮想マシンが起動中であっても適宜調整することができます。

Weight(メモリの優先度)は例えばHyper-Vが割り当てることが出来るメモリが1GBとするとき、同じ1GBを使用する仮想マシンがあった場合、優先度の高い方にメモリが割り当てられることになります。

17行目 Dynamic Memoryを設定する仮想マシンに接続します。

19行目 該当仮想マシンの設定情報に接続します。

21行目 設定情報内のメモリ関連の設定情報に接続します。

WMIでのアプローチはまずは仮想マシンに接続し、その設定情報を取得、設定情報内のメモリ関連情報を取得というように段階を踏んでゆく必要があります。

22行目 Dynamic Memoryを有効にします。

objMemorySettingData.DynamicMemoryEnabled = True 

Dynamic Memoryを使用することを明示しないと、これ以下の各設定を行っても静的メモリ使用となってしまうので必ず「DynamicMemoryEnabled = True」とする必要があります。

23行目~27行目 Dynamic Memoryの各値を設定しています。

29行目~31行目 各値を設定したメモリ関連の設定情報を仮想マシンの設定情報に書き込んでいます。

strMemorySettingData(0) = objMemorySettingData.GetText_(1)

各値を設定した後、設定情報として配列に格納します。

33行目~37行目 ModifyVirtualSystemResources メソッドを使用して各メモリ設定値を仮想マシンに反映させます。

以上のスクリプトで設定した場合このような画面となります。

以上で「Reservation」を含むDynamic Memoryの設定が完了しました。

WMIを使用することでDynamic Memoryだけでなく、仮想マシンの作成から各種設定、起動、停止などあらゆることが可能となります。大規模ホスティングにおいてはこういった一つ一つの設定をプログラマチックに処理することが必須となります。また、今回サンプルとして掲載したVBScript以外にも、VB.NET C# PowerShell など様々な言語でWMIを利用することがきます。

今回紹介したDynamic Memoryの設定以外にも、多くのサンプルを下記で紹介しています。 MVP WIN1の欄をご覧ください。

http://technet.microsoft.com/ja-jp/scriptcenter/gg486878.aspx

次回はサーバーで設定されたDynamic Memoryの設定で、仮想マシンでどのようなことが起こっているのかを確認してみたいと思います。

*本文中に記載されている会社名および商品名・サービス名は、各社の商標 または登録商標です。

著書の紹介欄

Hyper-Vで本格的なサーバー仮想環境を構築。仮想環境を設定・操作できる!

できるPRO Windows Server 2016 Hyper-V

◇Hyper-Vのさまざまな機能がわかる ◇インストールからの操作手順を解説 ◇チェックポイントやレプリカも活用できる Windows Server 2016 Hyper-Vは、仮想化ソフトウェア基盤を提供する機能であり、クラウドの実現に不可欠のものです。 本書では、仮想化の基礎知識から、Hyper-Vでの仮想マシンや仮想スイッチの設定・操作、プライベートクラウドの構築、Azureとの連携などを解説します。

初めてのWindows Azure Pack本が発売

Windows Azure Pack プライベートクラウド構築ガイド

本書は、Windows Azure PackとHyper-Vを利用し、企業内IaaS(仮想マシン提供サービス)を構成するための、IT管理者に向けた手引書です。試用したサーバーは、最小限度の物理サーバーと仮想マシンで構成しています。Windows Azure Packに必要なコンポーネントのダウンロード、実際にプライベートクラウド構築する過程を、手順を追って解説しています。これからプライベートクラウドの構築を検討するうえで、作業負担の軽減に役立つ一冊です。

ブログの著者欄

樋口 勝一

GMOインターネット株式会社

1999年6月GMOインターネットに入社。Windows Serverをプラットフォームとしたサービス開発から運用・保守まで幅広く担当。講演登壇や出版、ネット記事連載などでマイクロソフト社と強い信頼関係を構築。2007年より「マイクロソフトMVPアワード」を受賞し、インターネットソリューションのスペシャリストとして活躍。

採用情報

関連記事