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)

vm01 にだけCPUアフィニティ(CPU 0~3)をかけた状態です。
vm02 は、まだすべての CPU(0~7)を使用しています。

vm01 と vm02 それぞれにアフィニティをかけた状態です。
VM が、別の CPU を使用している様子が見えます。

ちなみに、CPU アフィニティをかけると
その分ハイパーバイザの自由な CPU スケジューリング(vCPU への CPU 割り当て)を邪魔してしまうらしいです。
管理面や性能面(ゲストのライセンス制限以外の面)では、
CPU アフィニティをかけない方がよいケースが多そうです。
CPU アフィニティ設定確認については、こちらも参考にしてください。
以上、PowerCLI で VM に CPU アフィニティをかけてみる話でした。
Comments