Skip navigation
2013

ESXi で稼働する VM に対して、ゲスト OS にインストールするライセンス制限の都合などで
CPU アフィニティ(VM の使用する CPU を固定する)をかけることがあります。

 

ためしに、PowerCLI で CPU アフィニティを設定してみました。

 

設定方法

 

今回、ESXi には8CPU(Cpu0~Cpu7)があり、
それを2つの VM(vm01, vm02)に4vCPUずつ割り当ててみます。

★vm01に、CPU0~3 をわりあて。
PowerCLI> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinityList 0,1,2,3

 

★vm01に、CPU4~7 をわりあて。
PowerCLI> Get-VM vm02 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinityList 4,5,6,7

 

★CPUアフィニティ設定を確認します。それぞれのVMにCPUが割り当てられています。
PowerCLI> (get-vm * | get-View)| select Name,{$_.Config.CpuAffinity.AffinitySet}

Name                $_.Config.CpuAffinity.AffinitySet
----                ---------------------------------
vm01                {0, 1, 2, 3}
vm02                {4, 5, 6, 7}

 

CPU アフィニティは、

下記のようなオプションで割り当てることもできます。

※「-CpuAffinityList」ではなく、「-CpuAffinity」になります。

PowerCLI> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinity Cpu0,Cpu1,Cpu2,Cpu3
PowerCLI> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinity Cpu4,Cpu5,Cpu6,Cpu7

 

ちなみに、CPUアフィニティを解除するためには、
「Set-VMResourceConfiguration -CpuAffinity NoAffinity」とします。

PowerCLI> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinity NoAffinity

 

注意点

 

CPU アフィニティは VM 単位での設定です。
そのため、1つのVM に設定しても、ESXi 上のそれ以外の VM はデフォルトですべての CPU を使用します。

 

試しに、ESXi にログインして、esxtop で確認してみました。

esxtop 起動 → 「大文字 V (VMだけ表示)」→「f と i を押す(表示フィールド選択)」

とすると、CPU アフィニティの割り当て状況(AFFINITY_BIT_MASK) の列が確認できるようになります。

 

CPU アフィニティをかけていない状態ではすべての CPU が使用されます。(0~7)
affinity1.png

vm01 にだけCPUアフィニティ(CPU 0~3)をかけた状態です。

vm02 は、まだすべての CPU(0~7)を使用しています。

affinity2.png

vm01 と vm02 それぞれにアフィニティをかけた状態です。

VM が、別の CPU を使用している様子が見えます。

affinity3.png

 

ちなみに、CPU アフィニティをかけると

その分ハイパーバイザの自由な CPU スケジューリング(vCPU への CPU 割り当て)を邪魔してしまうらしいです。

管理面や性能面(ゲストのライセンス制限以外の面)では、

CPU アフィニティをかけない方がよいケースが多そうです。

 

CPU アフィニティ設定確認については、こちらも参考にしてください。

 

以上、PowerCLI で VM に CPU アフィニティをかけてみる話でした。

VMの細かな設定をPowerCLIで変更してみます。

今回は vSphere 5.1 とPowerCLI 5.1 で実行していますが、

以前のリリースでも同様の設定が可能です。

 

たとえば、VMのリソース設定で
「すべてのゲストメモリを予約(すべてロック)」 というものがあります。

(以下、全メモリ予約)

この設定を有効化すると、VMが必要としたときに
必ず設定値までのメモリを割り当てられることが保証されます。

ただし、このような詳細な設定は PowerCLIのSet-VM では設定できません。


Set-VMではできない設定は、下記のように変更できることがあります。

PowerCLI C:\> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
PowerCLI C:\> $spec.MemoryReservationLockedToMax = $true
PowerCLI C:\> $vm = Get-VM vm01 | Get-View
PowerCLI C:\> $vm.ReconfigVM($spec)
★vm01 は仮想マシン名です。

 

コマンドの説明

 

1. 設定前の状態確認

 

まず、最初に vm01(今回の設定対象VM) は
全メモリ予約 が無効な状態です。

PowerCLI C:\> (Get-VM vm01 | Get-View).Config.MemoryReservationLockedToMax
False  ★デフォルトは無効(False)。

 

2. VMの設定変更時に指定する「設定情報のオブジェクト」を作成します。

PowerCLI C:\> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec


3. 全メモリ予約 を有効にする設定を含めます。

 

「設定情報のオブジェクト」に対して、全メモリ予約 を有効にする設定を追加します。
この時点ではまだ vm01 には反映されません。

PowerCLI C:\> $spec.MemoryReservationLockedToMax = $true
PowerCLI C:\> $spec.MemoryReservationLockedToMax
True  ★設定情報オブジェクトでは有効化。vm01に未反映。

 

4. 設定情報オブジェクトをもとに、VMを再構成します。

 

ここで「3」で作成した 設定情報オブジェクト($spec) を指定して、

VMを再構成(ReconfigVM)します。

PowerCLI C:\> (Get-VM vm01 | Get-View).ReconfigVM($spec)

 

5. VMの設定確認

 

VMのメモリ全予約設定が有効(True)になりました。

PowerCLI C:\> (Get-VM vm01 | Get-View).Config.MemoryReservationLockedToMax
True  ★vm01に全メモリ予約の有効化設定が反映された。

 

vSphere Clientでも設定が有効になったことが確認できます。

MemoryReservationLockedToMax.png

 

【参考情報】

VirtualMachineConfigSpecで設定できる項目は下記です。

PowerCLI C:\> $spec = New-Object VMware.Vim.VirtualMachineConfigSpec
PowerCLI C:\> $spec   ★オブジェクトの内容を表示する。


ChangeVersion                :
Name                         :
Version                      :
Uuid                         :
InstanceUuid                 :
NpivNodeWorldWideName        :
NpivPortWorldWideName        :
NpivWorldWideNameType        :
NpivDesiredNodeWwns          :
NpivDesiredPortWwns          :
NpivTemporaryDisabled        :
NpivOnNonRdmDisks            :
NpivWorldWideNameOp          :
LocationId                   :
GuestId                      :
AlternateGuestName           :
Annotation                   :
Files                        :
Tools                        :
Flags                        :
ConsolePreferences           :
PowerOpInfo                  :
NumCPUs                      :
NumCoresPerSocket            :
MemoryMB                     :
MemoryHotAddEnabled          :
CpuHotAddEnabled             :
CpuHotRemoveEnabled          :
VirtualICH7MPresent          :
VirtualSMCPresent            :
DeviceChange                 :
CpuAllocation                :
MemoryAllocation             :
LatencySensitivity           :
CpuAffinity                  :
MemoryAffinity               :
NetworkShaper                :
CpuFeatureMask               :
ExtraConfig                  :
SwapPlacement                :
BootOptions                  :
VAppConfig                   :
FtInfo                       :
VAppConfigRemoved            :
VAssertsEnabled              :
ChangeTrackingEnabled        :
Firmware                     :
MaxMksConnections            :
GuestAutoLockEnabled         :
ManagedBy                    :
MemoryReservationLockedToMax :
NestedHVEnabled              :
VPMCEnabled                  :
ScheduledHardwareUpgradeInfo :
DynamicType                  :
DynamicProperty              :

 

以上、PowerCLIでVMの詳細な設定を変更してみる話でした。

gowatana Expert

PowerCLI 5.1で x-vMotion

Posted by gowatana Feb 9, 2013

vSphere 5.1から、「共有ストレージなしのvMotion」 ができるようになりました。
※通称、クロスホストストレージvMotionやx-vMotionと呼ばれているものです。

 

今回は、PowerCLI で「共有ストレージなしのvMotion」 をしてみます。

 

 

共有ストレージなしvMotion


もともと、vMotionしたいVMは
共有ディスクにVMDKファイルをおいておく必要がありました。
xvmotion1.png

 

vSphere 5.1からは、
共有ディスクにVMDKファイルを置いておかなくても
(ESXiのローカルディスクでも)vMotionができるようになりました。
ただし、5.1の新機能なので 基本的にはWeb Clientから実行する必要があります。

xvmotion2.png

 

そのため、従来のvSphere Clientでは、起動中のVMに対して

共有ストレージなしvMotion(ホストとデーデータストアの両方の移行)を実行することはできません。

※ただし、ホストとデータストアを別々に(2回に分けて)移行(vMotion)することは可能です。

xvmoton4.png


じつは、5.1からの新機能にはWebClientだけでなく、PowerCLI 5.1 から実行できるものもあります。

この場合、PowerCLIからは従来通りvCenterに接続してコマンド実行します(WebClientサーバではなく)。


共有ストレージなしvMotion(以下x-vMotion)もPowerCLI 5.1 から実行できます。
xvmotion3.png

 


PowerCLIで x-vMotion 手順

 

1. PowerCLIでvCenter5.1に接続します。

 

PowerCLIは、vSphereのバージョンに合わせて

バージョン5.1のものをインストールしています。

PowerCLI C:\> Get-PowerCLIVersion

PowerCLI Version
----------------
VMware vSphere PowerCLI 5.1 Release 1 build 793510

---------------
Snapin Versions
---------------
VMWare AutoDeploy PowerCLI Component 5.1 build 768137
VMWare ImageBuilder PowerCLI Component 5.1 build 768137
VMware License PowerCLI Component 5.1 build 669840
VMware vSphere PowerCLI Component 5.1 build 793489

 

今回は「192.168.5.52」というIPアドレスのvCenterに接続しています。

PowerCLI C:\> Connect-VIServer -Server 192.168.5.52
★vCenterにログインできるのユーザとパスワードを入力します。

 

2. 環境を確認します。

 

ESXi は下記の2台です。

  • 1号機→ 192.168.5.61
  • 2号機→ 192.168.5.62

ESXi 5.1 が2台あり、どちらもバージョンは 5.1.0 です。

ローカルデータストア(ds_esxi01とds_esxi02)だけを持っています。

PowerCLI C:\> Get-VMHost | select Name,Version,{$_ | Get-Datastore} | ft -AutoSize

Name         Version $_ | Get-Datastore
----         ------- ------------------
192.168.5.61 5.1.0   ds_esxi01
192.168.5.62 5.1.0   ds_esxi02


「vm01」というVMが、ESXi1号機で起動中(PoweredOn)です。

PowerCLI C:\> Get-VM | select Name,PowerState,VMHost | ft -AutoSize

Name PowerState VMHost
---- ---------- ------
vm01  PoweredOn 192.168.5.61

 

3. x-vMotionを実行します。

 

vm01 を、x-vMotion してみます。

 

PowerCLI の、Move-VM で、移動先(-Destination)を別のESXiにすることでvMotionすることができます。

  • -VM →移動するVM名を指定します。
  • -Destination →宛先のESXiを指定します。
  • -Datastore →宛先のデータストア(ESXi 2号機のローカルデータストア)を指定します。
PowerCLI C:\> Move-VM -VM vm01 -Destination 192.168.5.62 -Datastore ds_esxi02

 

下記のような感じで実行されます。

xvmoton5.png

 

x-vMotion が終了すると、vm01はESXi 2号機に移動しています。

PowerCLI C:\> Get-VM | select Name,PowerState,VMHost | ft -AutoSize

Name PowerState VMHost
---- ---------- ------
vm01  PoweredOn 192.168.5.62

 

とくに x-vMotion専用のPowerCLI コマンドがあるわけではなく、

従来のvMotion同様、Move-VMでx-vMotionができてしまいます。

以前VMwareのBrogで見かけた「共有ストレージなしvMotionは新機能ではなくただの機能拡張だ」

的なコメントが納得できる気がしました。

 

以上、PowerCLI でx-vMotionする話でした。