KVM仮想マシンのCPU数 / メモリサイズ変更

KVMで仮想マシンを作成した後にCPUのコア数やメモリ容量を変えたいことはよくあることで、今までvirsh editでxmlファイルを編集してましたが、コマンドベースで変更できないかと改めて調べてみたらやっぱりありました。

環境

CentOS6.8

仮想マシンの確認

仮想マシンの一覧表示

[root@testkvm ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 -     test-server                    shut off

仮想マシンの情報確認(CPUとメモリの値を確認します)

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

メモリサイズ変更


仮想マシンのメモリサイズ上限を上げる

virsh setmaxmemでメモリの上限を上げられます。仮想マシン停止中に行います。

[root@testkvm ~]# virsh setmaxmem test-server 4G

Max memoryは増えているけど、Used memoryはそのまま。

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     4194304 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

仮想マシンに割り当てるメモリ数を変更する

virsh setmemで仮想マシンに割り当てられているメモリ容量(Used memory)を変えられます。起動中の仮想マシンに実行することで動的にメモリ容量を変更できますが、仮想マシンを停止すると変更前のメモリ容量に戻ります。
また停止中の仮想マシンに実行すると以下のようにエラーになります。

[root@testkvm ~]# virsh setmem test-server 4G
error: Requested operation is not valid: domain is not running

停止中の仮想マシンに実行するときは--config(次回以降の起動から有効)をつけると変更できます。

[root@testkvm ~]# virsh setmem test-server 4G --config

Used memoryが変更されていることが確認できます。

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     4194304 KiB
Used memory:    4194304 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

仮想マシンの稼働中に--configをつけて実行すると次回以降の起動から有効なので再起動するまで有効になりません。
Stateのところを見ていただくとわかるかと思いますが、一度停止したタイミングで反映されています。

[root@testkvm ~]# virsh setmem test-server 4G --config

仮想マシン起動中にsetmem(--configあり)を実行した時のメモリ数

[root@testkvm ~]# virsh dominfo test-server
Id:             37
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          running
CPU(s):         1
CPU time:       42.0s
Max memory:     4194304 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0
Security label: system_u:system_r:svirt_t:s0:c280,c751 (enforcing)

仮想マシン起動中にsetmem(--configあり)を実行して、仮想マシン停止した時ののメモリ数

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     4194304 KiB
Used memory:    4194304 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

CPU数変更

virsh setvcpusコマンドで仮想マシンに割り当てるCPU数を変更できます。ただし最大CPU数を超えることはできません。
--configを指定すると次回起動時から有効になります。--maximumの指定で最大CPU数を変更できますが、動作中の仮想マシンには適用されません。

仮想マシンのCPU数上限を上げる

以下で最大CPU数を2に変更してみます。

[root@testkvm ~]# virsh setvcpus test-server 2 --config --maximum

virsh dominfoで最大CPU数の確認はできないみたいなので、virsh editまたはvirsh dumpxmlで確認します。(他にいい確認方法があるかも)

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         1
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

最大CPU数が2、現在割り当てられているCPU数が1が確認できます。

[root@testkvm ~]# virsh dumpxml test-server | grep vcpu
 <vcpu placement='static' current='1'>2</vcpu>

仮想マシンに割り当てるCPU数を変更

停止中の仮想マシンに現在割り当てられているCPU数を1から2へ変更してみます。(仮想マシンが停止している場合は--configが必要です)

[root@testkvm ~]# virsh setvcpus test-server 2 --config

今回は変更がvirsh dominfoでも確認できます。

[root@testkvm ~]# virsh dominfo test-server
Id:             -
Name:           test-server
UUID:           4ff78346-d626-4812-3d89-92a7b9e6cccd
OS Type:        hvm
State:          shut off
CPU(s):         2
Max memory:     1048576 KiB
Used memory:    1048576 KiB
Persistent:     yes
Autostart:      disable
Managed save:   no
Security model: selinux
Security DOI:   0

xmlの情報でも最大CPU数の2で固定されたのが確認できます。

[root@testkvm ~]# virsh dumpxml test-server | grep vcpu
 <vcpu placement='static'>2</vcpu>

 

参考