NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix CE の AHV で CVM / UVM の違いを見てみる。(cgroups)

Nutanix CE の AHV にて、CVM とユーザー VM(UVM)のリソース割り当ての工夫を見てみます。

 CVM むけのリソース優先設定は、ESXi 版の Nutanix ほどわかりやすくありませんが、AHV でも設定されているようです。

今回は、CVM の CPU リソース割り当ての様子を見てみます。

Nutanix CE 環境

Nutanix CE ce-2020.09.16 の 1ノードクラスタです。

CVM と、2つの UVM(vm01、vm02)が起動してあります。

f:id:gowatana:20210228220611p:plain

AHV / CVM の virsh list で、合計 3つの VM が起動していることがわかります。

[root@NTNX-d1d72885-A ~]# virsh list
 Id    Name                           State
----------------------------------------------------
 1     NTNX-d1d72885-A-CVM            running
 2     defcaca8-d6be-4d02-afc0-b4888902f645 running
 3     d9ae9c9e-4c2a-4402-ae87-36b67012313b running

UUID で表示されているのは UVM です。

[root@NTNX-d1d72885-A ~]# virsh dumpxml 2 | grep -E '<title>|<uuid>'
<uuid>defcaca8-d6be-4d02-afc0-b4888902f645</uuid>
<title>vm01</title>
[root@NTNX-d1d72885-A ~]# virsh dumpxml 3 | grep -E '<title>|<uuid>'
<uuid>d9ae9c9e-4c2a-4402-ae87-36b67012313b</uuid>
<title>vm02</title>

 

CVM と UVM の cgroups の違い

CVM はストレージ コントローラなどの重要な役割をもつ VM なので、Linux の cgroups を利用して、UVM より CPU リソースの割り当て(cpu.shares)が大きく設定されています。この設定で、CPU リソース競合が発生した際に CVM への CPU 割り当てが優先されるはず(私は実際に動作確認まではしていません)です。

 

cgroups では、仮想ファイルシステムを利用して制御されます。

まず CPU の cgroup ツリー最上位となる、/sys/fs/cgroup/cpu の cpu.shares は 1024 になっています。これは CentOS 7 でのデフォルト値のままです。

[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/cpu.shares
1024

そして、CVM のみが配置される /sys/fs/cgroup/cpu/machine が作成されており、2倍の 2048 が設定されています。

[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/machine/cpu.shares
2048

machine 配下には、CVM のみが配置されています。

[root@NTNX-d1d72885-A ~]# ls -l /sys/fs/cgroup/cpu/machine/ | grep ^d
drwxr-xr-x. 5 root root 0 Feb 28  2021 qemu-1-NTNX-d1d72885-A-CVM.libvirt-qemu

一方、UVM が配置される /sys/fs/cgroup/cpu/uvms.acropolis の cpu.shares は、1024 です。そしてこのツリー配下には複数の UVM が配置されます。

[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/uvms.acropolis/cpu.shares
1024

uvms.acropolis 配下には、この環境では 2つの UVM(vm01、vm02)が配置されています。

[root@NTNX-d1d72885-A ~]# ls -l /sys/fs/cgroup/cpu/uvms.acropolis/ | grep ^d
drwxr-xr-x. 3 root root 0 Feb 28 12:42 d9ae9c9e-4c2a-4402-ae87-36b67012313b.acropolis
drwxr-xr-x. 3 root root 0 Feb 28 12:20 defcaca8-d6be-4d02-afc0-b4888902f645.acropolis

そして、VM ごとの cpu.shares は 1024 になっており、CPU リソース制御は machine と uvms.acropolis の階層だけのようです。

[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/machine/qemu-1-NTNX-d1d72885-A-CVM.libvirt-qemu/cpu.shares
1024
[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/uvms.acropolis/defcaca8-d6be-4d02-afc0-b4888902f645.acropolis/cpu.shares
1024
[root@NTNX-d1d72885-A ~]# cat /sys/fs/cgroup/cpu/uvms.acropolis/d9ae9c9e-4c2a-4402-ae87-36b67012313b.acropolis/cpu.shares
1024

ちなみに、この設定は、libvirt の hooks スクリプトで VM 起動時に設定されているようです。このスクリプトには、CPU リソース以外の設定も含まれています。

[root@NTNX-d1d72885-A ~]# ls /etc/libvirt/hooks/
daemon  qemu
[root@NTNX-d1d72885-A ~]# grep -n "cpu_shares_.*=" /etc/libvirt/hooks/qemu
31:cpu_shares_cvm  = 2048
32:cpu_shares_uvms = 1024

Linux の機能を活用して、うまいぐあいに CVM のリソース割り当てを優先しているようです。

以上。

©2020 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。