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>