ESXi で稼働するVMに対して、ゲストOSにインストールするライセンス制限の都合などで
CPUアフィニティ(VMの使用CPUを固定する)をかけることがあります。
ためしに、PowerCLI(5.1)でCPUアフィニティを設定してみました。
設定方法
今回、ESXiには8CPU(Cpu0~Cpu7)があり、
それを2つのVM(vm01,vm02)に4vCPUずつ割り当ててみます。
★vm01に、CPU0~3 をわりあて。
PowerCLI C:\> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinityList 0,1,2,3
★vm01に、CPU4~7 をわりあて。
PowerCLI C:\> Get-VM vm02 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinityList 4,5,6,7
★CPUアフィニティ設定を確認します。それぞれのVMにCPUが割り当てられています。
PowerCLI C:\> (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 C:\> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinity Cpu0,Cpu1,Cpu2,Cpu3
PowerCLI C:\> Get-VM vm01 | Get-VMResourceConfiguration | Set-VMResourceConfiguration -CpuAffinity Cpu4,Cpu5,Cpu6,Cpu7
ちなみに、CPUアフィニティを解除するためには、
「Set-VMResourceConfiguration -CpuAffinity NoAffinity」とします。
PowerCLI C:\> 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)
vm01にだけCPUアフィニティ(CPU 0~3)をかけた状態です。
vm02は、まだすべてのCPU(0~7)を使用しています。
vm01とvm02それぞれにアフィニティをかけた状態です。
VMが、別のCPUを使用している様子が見えます。
ちなみに、CPUアフィニティをかけると
その分ハイパーバイザの自由なCPUスケジューリング(vCPUへのCPU割り当て)を邪魔してしまうらしいです。
管理面や性能面(ゲストのライセンス制限以外の面)では、
CPUアフィニティをかけない方がよいケースが多そうです。
以上、PowerCLIでVMにCPUアフィニティをかけてみました。