WIN1@Codename

Codename

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PowerShellを使ってサイズの大きいフォルダを検出する

普段使用しているコンピューターには様々なアプリケーションがインストールされ、アップデートなどによって大量の一時ファイルなどが残ってしまう場合があります。いつの間にかハードディスクの空き容量がなくなってしまい、不要なファイルやフォルダを削除する必要が出てきます。
コンピューターの中でどのフォルダが容量を多く占有しているのかを探索するのに便利なスクリプトを紹介します。

GMO TechReport
https://www.gmo.jp/report/single/?art_id=210

de:code 2016 イベントレポート

2016年5月24日~25日、「de:code 2016」がザ・プリンス・パークタワー東京にて2日間にわたり開催されました。キーノートセッションは10時より開始予定。30分前に到着するも、すでにメイン会場は満席。生ナデラが登場するとのことでその効果は絶大のようです。
今回は、このde:code 2016のイベントレポートをお届けします。

GMO TechReport
https://www.gmo.jp/report/single/?art_id=209

ついに実現したNested Hyper-V を体感してみる

Hyper-Vユーザーが待ち望んでいた機能がついに実現!Nested Hyper-Vとは一体どんなものなのか、何ができるのかを解説

2015年11月にリリースされたWindows Server 2016 Technical Preview 4(TP4)では、以前から予告されていたNested Hyper-Vを実際に利用できるようになりました。まだプレビュー版ということもあり、いくつか制限があるものの、多くのHyper-Vユーザーが待ち望んでいた機能がついに実現しました。Nested Hyper-Vとは一体どんなものなのか、何ができるのかを実際にNested Hyper-Vの構築方法を紹介しつつ、解説していきます。

 

GMO TechReport
https://www.gmo.jp/report/single/?art_id=202

サービス開発者から見たWindows Server 2008 R2 Service Pack 1 その3

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

サービス開発者から見たWindows Server 2008 R2 Service Pack 1 その2

Dynamic Memoryの効果

・設定概要

では実際にDynamic Memory がどのようにその効果を発揮するのかその様子をデモ動画で見てみたいとおもます。 と、その前に、Dynamic Memoryの設定方法を紹介したいと思います。「そんなのHyper-Vマネージャーから簡単にできますよ」とおっしゃる方がいらっしゃると思いますが、そこはGMO最新ネット業界レポートですので、通常の設定方法とは違ったアプローチで設定を行いたいと思います。

今回はDynamic Memoryの効果を見やすくするためのデモということで、極端な設定値としています。 まず24GBのメモリを搭載したHyper-Vのホスト上で仮想マシンを作成し、「スタートアップRAM」と「最大RAM」を16GBとしました。 通常Hyper-Vマネージャーではここまでの設定しかできませんが、WMI経由でプログラムマチックにアプローチした場合、「Reservation」という項目を設定することができます。これはいわゆる最低メモリと考えていただければよいです。 Hyper-Vマネージャーから「スタートアップRAM」と「最大RAM」を設定した場合、自動的に「Reservation」の値は「スタートアップRAM」と同じ値に設定されるようになっています。なので、実は今回のようにHyper-Vマネージャーから「スタートアップRAM」と「最大RAM」を16GBとした場合、起動直後から、シャットダウンするまで仮想マシンのために確保されるメモリは実はずっと16GBのままなのです。 これではせっかくのDynamic Memoryの効果がありません。

サービス提供を行う場合は、ユーザーの方には常にサービスで約束された機能、パフォーマンスを提供しなければなりません。お名前Windowsデスクトップでは現在仮想マシンごとに1GBのメモリを提供しています。起動時~終了までこの1GBのメモリはいつでも使えるよう、また、不足ないことがユーザーにいつでも確認できるようにする必要があります。

「スタートアップRAM」を512MB、「最大RAM」を1GBとした場合、パフォーマンス的には、「スタートアップRAM」と「最大RAM」をともに1GBとした場合と差はありません。 あくまでもDynamic Memoryの効果はユーザー側ではなく、ホスト側で明示的に確認されるものであり、ユーザーにとっては常に1GBのメモリが使用、確認できることが必須となります。「スタートアップRAM」を512MB、「最大RAM」を1GBとした場合、仮想マシンのタスクマネージャーで見てみると初期起動時には物理メモリの合計が511MBとなっています。

「スタートアップRAM」を512MB、
「最大RAM」を1GBに設定

 

物理メモリの合計は511MB

Dynamic Memoryではユーザーの使用度合いに応じて「最大RAM」までメモリを動的に追加していくのでパフォーマンスとしては問題なのですが、仮想マシンのタスクマネージャーで見た場合これではユーザーとしては「1GBあるはずのメモリがきちんと提供されていないのではないか?」といったことになってしまいます。

これらを踏まえると、Dynamic Memory使用時であっても仮想マシンの「スタートアップRAM」は1GB、かつ「最大RAM」も1GBという設定値がサービス提供する上では必須となります。 ですが先ほどの理由によりこの設定ではDynamic Memoryの効果がありません。 これを解決するのが「Reservation」の設定となります。 「Reservation」を設定することで、仮想マシンの起動後、メモリの使用がなければHyper-Vのホストは「Reservation」の設定値まで仮想マシンから未使用のメモリを回収することになります。 実際に「Reservation」を設定した場合のHyper-Vマネージャの設定画面です。

「スタートアップメモリと最小メモリの容量が等しくありません。~」との
注意メッセージが表示される

動的項目の下に「スタートアップメモリと最小メモリの容量が等しくありません。~」との注意メッセージが表示されていますが、意図的にスタートアップメモリと最小メモリを異なる値としているので問題ありません。 この設定時の仮想マシンのタスクマネージャーでは初期起動時から物理メモリの合計はきちんと1023MBとなっています。これでDynamic Memory使用時であっても、ユーザーには以前と変わらない状態でのサービス提供が可能となります。


「スタートアップRAM」16GB
「最大RAM」16GB
「Reservation」1GB

・実際の効果

今回のデモではその効果を分かりやすくするため以下の設定値としています。

 「スタートアップRAM」16GB
 「最大RAM」16GB
 「Reservation」1GB
となります。

この設定で期待する動きとしては、起動時16GBのメモリで仮想マシンが実行し、未使用分のメモリが「Reservation」の設定値1GBまで(15GB)Hyper-Vのホストに回収される、というものです。この効果をデモで実行したのが以下の動画となります。 この動画はHyper-Vホストのタスクマネージャを録画したものです。24GBのメモリが搭載されています。 仮想マシンの起動時に一気に16GBメモリが消費されています。 その後「Reservation」に設定された1GBまで未使用分のメモリが仮想マシンから回収され、ホストマシンにメモリが戻ってきているのが分かります。

Dynamic Memory

これがまさにDynamic Memoryの効果です。
(動画でご覧いただけます。)

以上のように、サービスを提供する上でDynamic Memoryはサービス提供者にとって非常に有用な機能となりますが、ユーザーに対し既存サービスの質を落とすことなく実装するには通常の設定以外でも少々コツがいることがお分かりいただけたと思います。 次回は具体的にWMIを使用しての「Reservation」の設定方法をご紹介したいと思います。

前のページ 次のページ

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。