TechReport

技術者情報

ソリューション

2011年6月8日(水)公開

第51回

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

「Reservation」の設定方法

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

記事INDEX

「Reservation」の設定方法

では、今回のキーとなる「Reservation」の設定方法についてご説明したいと思います。


Hyper-Vマネージャでは設定できないのでWMIを使ってプログラムマチックに設定すると前述しました。(前回の記事はこちら)

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

 1:  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の設定で、仮想マシンでどのようなことが起こっているのかを確認してみたいと思います。





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

樋口 勝一

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

1999年6月GMOインターネットに入社。Windowsを用いたホスティング事業の立ち上げの際、サービス開発からその後の保守・運用まで1人で担当。2010年には「お名前.comWindowsデスクトップ」をリリースし、マイクロソフト社と強い信頼関係を構築。2007年から連続で「マイクロソフトMVPアワード」を受賞し、Windowsのスペシャリストとして活躍。

執筆者一覧

 執筆協力した本が出版されました

 当レポートを担当しているGMOインターネット株式会社 事業本部 樋口 勝一が執筆協力をした書籍が出版されました。

Dynamic Memory
  最新!Android徹底活用読本

出版社:宝島社
価格:880円(税込) ※価格は店舗によって異なります。

次々に発売されるAndroidケータイを「コミュニケーションしたい」「情報をブラウジングしたい」「ビジネス手帳の代わりにしたい」「音楽や動画を120%楽しみたい」など、やりたいこと別に章立てした活用書。

Dynamic Memory
  GALAXY Sユーザーのためのアプリ245

出版社:三才ブックス
価格:1,260円(税込) ※価格は店舗によって異なります。

25万本以上あるといわれるAndroidアプリの中から、目的別・状況別に本当に使えるアプリだけを厳選。

Dynamic Memory
  ソニー・エリクソン公式 Xperia arc ガイドブック

出版社:日経BP社
価格:1,260円(税込) ※価格は店舗によって異なります。

こだわりのデザインと薄さを追求しながら、Androidスマートフォンのフラッグシップモデルとして世界に先駆けて日本で発売されるXperia arcの公式ガイドブックです。