九:如何在线添加/移除虚拟机的vCPU
KVM支持vCPU热插拔么?Linux KVM虚拟机能够感知到新添加的vCPU么?答案当然是"YES"。
类似KVM 内存管理,你可以使用virsh命令给正在运行的VM添加或删除vCPU。不过,这个工作是需要预先配置KVM虚拟机的最大vCPU参数才能使用。所以当部署一个新的虚拟机,你应该首先考虑这个参数。给KVM虚拟机设置最大vCPU数量并不会对资源有所小号,因为虚拟机只会使用分配的vCPU。
理解VM的vCPU配置
列出KVM主机配置的VM
[root@UA-HA ~]# virsh list --all
Id Name State
----------------------------------------------------
- UAKVM2 shut off
[root@UA-HA ~]#检查当前VM配置
[root@UA-HA ~]# virsh dumpxml UAKVM2 | grep vcpu
<vcpu placement='static' current='1'>2</vcpu>以上显示这个VM当前使用1个vCPU,并且可以通过virsh vsetcpus命令增加vCPU。但死你不能在VM运行时增加超过2个vCPU。
现在我们启动VM
[root@UA-HA ~]# virsh start UAKVM2
Domain UAKVM2 started
[root@UA-HA ~]#登陆到KVM虚拟机并检查分配的vCPU数量:
向运行的KVM虚拟机增加vCPU
切换到KVM主机并使用
virsh命令增加vCPU,从1增加到2
返回到KVM guest虚拟机,检查新添加的vCPU。此时VM从
UP code(uniprocessor)切换到SMP code (symmetric multiprocessor)
如果想配置永久生效,保存VM配置
现在我们已经成功给KVM虚拟机添加了vCPU并使配置永久生效。
从运行的KVM虚拟机去除vCPU
没有直接从KVM guest虚拟机直接移除vCPU的方法。但是可以通过禁止CPU核心方式将CPU核心的性能返还给KVM主机。
登陆到KVM host主机
假设当前KVM guest虚拟机UAKVM2有2个活动的vCPU
注意不要使用以下命令来移除vCPU,你会收到错误消息
error: internal error: cannot change vcpu count of this domain
使用以下命令来缩减UAKVM2的vCPU数量(vCPU从2缩减到1)
保存VM配置
登陆到KVM guest虚拟机
UAKVM2验证
注意:
在KVM物理主机中过,你依然会看到两个vCPU呗分配给虚拟机UAKVM2,只有重启VM才会生效。
关闭
UAKVM2KVM虚拟机并验证
此时可以看到vCPU被修改成1个。
如果尝试添加比预分配更多的vCPU会看到如下错误信息error: invalid argument: requested vcpus is greater than max allowable vcpus for the domain
请重新参考前述的"理解VM vCPU配置"段落。使用virsh命令不能超过vCPU最大配置数量。这个最大vCPU数量不能在虚拟机运行时修改。
如何修改每个虚拟机的最大vCPU数量?(只能使用offline模式)
作为root用户登陆到KVM host主机
优雅地停止虚拟机
编辑VM配置类似如下,这里将最大vCPU数量从2修改成4:
修改成
vCPU XML 格式:
这里N时当前激活的CPU数量,而M是CPU的最大数量
启动KVM虚拟机
UAKVM2
验证UAKVM2虚拟机的vCPU信息
如上所述,此时UAKVM2只分配了1个vCPU。由于我们配置了vCPU最大数量是4,所以我们可以动态将虚拟机的vCPU增加到4个。
增加vCPU数量到4
登陆到KVM虚拟机
UAKVM2中并列出vCPU
以上我们已经在离线情况下成功增加了最大vCPU数量,并在VM运行时增加了分配到vCPU。
系列教程编译
本系列教程根据 UnixArena Linux KVM 系列教程编译,共分以下文章:
Last updated
Was this helpful?