文章目录
- 30 KVM管理系统资源-CPU热插
- 30.1 概述
- 30.2 约束限制
- 30.3 操作步骤
- 30.3.1 配置虚拟机XML
- 30.3.2 热插并上线CPU
30 KVM管理系统资源-CPU热插
30.1 概述
在线增加(热插)虚拟机CPU是指在虚拟机处于运行状态下,为虚拟机热插CPU而不影响虚拟机正常运行的方案。当虚拟机内部业务压力不断增大,会出现所有CPU均处于较高负载的情形。为了不影响虚拟机内的正常业务运行,可以使用CPU热插功能(在不关闭虚拟机情况下增加虚拟机的CPU数目),提升虚拟机的计算能力。
30.2 约束限制
- 如果处理器为AArch64架构,创建虚拟机时指定的虚拟机芯片组类型(machine)需为virt-4.1或virt更高版本。如果处理器为x86_64架构,创建虚拟机时指定的虚拟机芯片组类型(machine)需为pc-i440fx-1.5或pc更高版本。
- 在配置Guest NUMA的场景中,必须把属于同一个socket的vcpu配置在同一vNode中,否则热插CPU后可能导致虚拟机softlockup,进而可能导致虚拟机panic。
- 虚拟机在迁移、休眠唤醒、快照过程中均不支持CPU热插。
- 虚拟机CPU热插是否自动上线取决于虚拟机操作系统自身逻辑,虚拟化层不保证热插CPU自动上线。
- CPU热插同时受限于Hypervisor和GuestOS支持的最大CPU数目。
- 虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况,但再次重启会生效。
- 热插虚拟机CPU的时候,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,建议每次新增的CPU数目为Cores的整数倍。
- 若需要热插CPU在线生效且在虚拟机重启后仍有效,virsh setvcpus接口中需要同时传入–config和–live选项, 将热插CPU动作持久化。
30.3 操作步骤
30.3.1 配置虚拟机XML
-
使用CPU热插功能,需要在创建虚拟机时配置虚拟机当前的CPU数目、虚拟机所支持的最大CPU数目,以及虚拟机芯片组类型(对于AArch64架构,需为virt-4.1及以上版本。对于x86_64架构,需为pc-i440fx-1.5及以上版本)。这里以AArch64架构虚拟机为例,配置模板如下:
<domain type='kvm'> ... <vcpu placement='static' current='m'>n</vcpu> <os> <type arch='aarch64' machine='virt-4.1'>hvm</type> </os> ... <domain>
说明:
- placement的值必须是static。
- m为虚拟机当前CPU数目,即虚拟机启动后默认的CPU数目。n为虚拟机支持热插到的最大CPU数目,该值不能超过Hypervisor支持的虚拟机最大CPU规格及GuestOS支持的最大CPU规格。n大于或等于m。
例如,配一个虚拟机当前CPU数目为4,最大支持的热插CPU上限为64的XML配置为:
<domain type='kvm'> …… <vcpu placement='static' current='4'>64</vcpu> <os> <type arch='aarch64' machine='virt-4.1'>hvm</type> </os> ……
30.3.2 热插并上线CPU
-
如果热插CPU后需要自动上线热插的CPU,可以使用root权限在虚拟机内部创建udev rules文件/etc/udev/rules.d/99-hotplug-cpu.rules,并在其中定义udev规则,内容参考如下:
# automatically online hot-plugged cpu ACTION=="add", SUBSYSTEM=="cpu", ATTR{online}="1"
说明: 如果没有使用udev rules自动上线热插CPU,可以在热插CPU后,使用root权限,参考如下命令手动上线:
for i in `grep -l 0 /sys/devices/system/cpu/cpu*/online` do echo 1 > $i done
-
利用virsh工具进行虚拟机CPU热插操作。例如给虚拟机openEulerVM热插CPU到6,且在线生效的参考命令如下:
# virsh setvcpus openEulerVM 6 --live
说明: virsh setvcpus 进行虚拟机CPU热插操作的格式如下:
# virsh setvcpus <domain> <count> [--config] [--live]
- domain: 参数,必填。指定虚拟机名称。
- count: 参数,必填。指定目标CPU数目,即热插后虚拟机CPU数目。
- –config: 选项,选填。虚拟机下次启动时仍有效。
- –live: 选项,选填。在线生效。
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!