Quantcast
Channel: VMware Communities : Blog List - All Communities
Viewing all articles
Browse latest Browse all 3805

CPUアフィニティ設定をPowerCLIで確認する。(ESXi 5.x)

$
0
0

以前にVMのCPUアフィニティをPowerCLIで設定する方法をためしてみました。

 

今回は、その設定を確認する方法についてです。

 

CPUアフィニティは、
VMのvCPUを、特定の物理CPUに紐づけする機能です。

物理CPUといっても、ハイパースレッデイングを利用していると
論理CPUとして2倍数がみえますが、今回はひとまず気にしません。
(物理CPUとvCPUだけで説明します。)

 

標準のPowerCLI コマンドレットでの確認


とりあえずPowerCLIでCPUアフィニティを確認するだけであれば下記のようなコマンドラインでOKです。
しかし、CPUアフィニティが特定の物理CPUにかたよっていないか
といったことを確認するためには、ちょっとわかりにくいです。

PowerCLI> Get-VM vm?? | sort | Get-VMResourceConfiguration | select VM,CpuAffinity

VM              CpuAffinity
--              -----------
vm01             Cpu0, Cpu1
vm02             Cpu2, Cpu3
vm03                   Cpu4
vm04                   Cpu5
vm05                   Cpu6
vm06                   Cpu7
vm11 Cpu0, Cpu1, Cpu2, Cpu3
vm12 Cpu0, Cpu1, Cpu2, Cpu3
vm13 Cpu4, Cpu5, Cpu6, Cpu7
vm14 Cpu4, Cpu5, Cpu6, Cpu7

 

CPUアフィニティ設定をスクリプトで確認


そこで、
ちょっとCPUアフィニティが見やすいスクリプトを作成してみました。

 

スクリプト例: get_cpu_affinity.ps1

Connect-VIServer -Server <vCenterかESXiのアドレス>


$vms = $args[0]

 

# CPUアフィニティ ON/OFF の表示設定
$on  = "[on]"
$off = "[__]"

 

Get-VM $vms | sort -Property VMHost,Name | % {
    # CPUアフィニティ情報格納テーブルを作成
    $cpuset = "" | select hvname,vmname,cnt,

    cpu00,cpu01,cpu02,cpu03,cpu04,cpu05,cpu06,cpu07


    # ESXi名とVM名を取得
    $cpuset.hvname = $_.VMHost
    $cpuset.vmname = $_.Name
    $cpuset.cnt = $_.NumCpu
  
    # CPUアフィニティ情報を取得
    $vm = $_ | Get-View
    $vcpus = $vm.Config.CpuAffinity.AffinitySet
  
    $cpuset.cpu00 =  if ($vcpus -notcontains 0) {$off} else {$on}
    $cpuset.cpu01 =  if ($vcpus -notcontains 1) {$off} else {$on}
    $cpuset.cpu02 =  if ($vcpus -notcontains 2) {$off} else {$on}
    $cpuset.cpu03 =  if ($vcpus -notcontains 3) {$off} else {$on}
    $cpuset.cpu04 =  if ($vcpus -notcontains 4) {$off} else {$on}
    $cpuset.cpu05 =  if ($vcpus -notcontains 5) {$off} else {$on}
    $cpuset.cpu06 =  if ($vcpus -notcontains 6) {$off} else {$on}
    $cpuset.cpu07 =  if ($vcpus -notcontains 7) {$off} else {$on}
  
    # 結果を表示
    $cpuset
} | ft * -AutoSize


上記のスクリプトの実行例です。
引数には、VM名を指定します。
たとえば「vm01」、「vm*」、「vm??」、「vm01,vm02」といった指定ができます。

PowerCLI> .\get_cpu_affinity.ps1 vm*

hvname     vmname cnt cpu00 cpu01 cpu02 cpu03 cpu04 cpu05 cpu06 cpu07
------     ------ --- ----- ----- ----- ----- ----- ----- ----- -----
sc-esxi501 vm01     2 [on]  [on]  [__]  [__]  [__]  [__]  [__]  [__]
sc-esxi501 vm02     2 [__]  [__]  [on]  [on]  [__]  [__]  [__]  [__]
sc-esxi501 vm03     1 [__]  [__]  [__]  [__]  [on]  [__]  [__]  [__]
sc-esxi501 vm04     1 [__]  [__]  [__]  [__]  [__]  [on]  [__]  [__]
sc-esxi501 vm05     1 [__]  [__]  [__]  [__]  [__]  [__]  [__]  [__]
sc-esxi501 vm06     1 [__]  [__]  [__]  [__]  [__]  [__]  [__]  [__]
sc-esxi502 vm11     2 [on]  [on]  [on]  [on]  [__]  [__]  [__]  [__]
sc-esxi502 vm12     2 [on]  [on]  [on]  [on]  [__]  [__]  [__]  [__]
sc-esxi502 vm13     4 [__]  [__]  [__]  [__]  [on]  [on]  [on]  [on]
sc-esxi502 vm14     4 [__]  [__]  [__]  [__]  [on]  [on]  [on]  [on]

hvname列はESXi名、vmname列はVM名を表示しています。
cnt列 にはVMのvCPU数を表示しています。

 

CPUアフィニティ設定がないVM(=すべての物理CPUを使用するVM。例ではvm05とvm06)は、
すべての物理CPUが空欄になります。

 

おまけ

 

ちなみに、vm11とvm12のvCPU数は2つですが、
4つの(vCPU数より多い物理CPUにアフィニティを設定してあります。

 

CPUアフィニティを設定する理由はだいたい下記2つだと思います。

  1. VM同士を、物理的に隔離したい
  2. ソフトウェアライセンス費用を削減したい


1つ目の「VM同士の物理的な隔離」が目的(提供するサービスを分離するためなど)の場合、
VMの性能面を考慮すると 上記の vm11や vm12 のように
vCPU数より多数の物理CPUにCPUアフィニティ設定したほうがよいのです。
これは、VMのvCPUとは別に、ESXiハイパーバイザがVM管理に物理CPUを使用するためです。

 

2つ目の「VMに導入する製品ライセンス数(物理CPU数をカウントするような)節約」
のためにCPUアフィニティを設定する場合は、vCPUと同数の物理CPUに
アフィニティを設定することが多いはずです。


以上、PowerCLIでCPUアフィニティ設定を確認する方法でした。


Viewing all articles
Browse latest Browse all 3805

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>