鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

虚拟机vCPU热插拔

在虚拟机环境中,vCPU遵循ACPI(Advanced Configuration and Power Interface)规范,通过模拟ACPI GED来实现其功能。当在libvirt下发起vCPU热插拔请求时,QEMU(Quick EMUlator)会操作这个模拟的ACPI GED设备,向虚拟机发送中断信号。虚拟机内的ACPI固件接收到这一中断后,会作出响应,并调用相应的CPU热插拔事件处理函数,从而实现vCPU热插。

这一机制不仅支持vCPU线程的在线增加,也支持vCPU线程的在线减少。

应用场景

应用于业务负载动态波动,需要CPU动态调整资源以节省成本的场景中。

约束限制

从openEuler 24.03版本开始,AArch64架构新增了CPU热拔功能,但实现上采用了新的主线社区方案,和之前版本的CPU热插协议不兼容。Guest版本和Host版本需匹配,即openEuler 24.03及之后版本的Guest需搭配openEuler 24.03及将来版本的Host,openEuler 24.03之前版本的Guest需搭配openEuler 24.03之前版本的Host,才能正常使用CPU热插(拔)功能。

  • 如果处理器为AArch64架构,创建虚拟机时指定的虚拟机芯片组类型(machine)需为virt-4.2或virt更高版本。
  • 对于AArch64架构虚拟机,初始启动时就存在的CPU不支持热插拔。
  • 在配置Guest NUMA的场景中,必须把属于同一个socket的vCPU配置在同一vNode中,否则热插拔CPU后可能导致虚拟机softlockup,进而可能导致虚拟机panic。
  • 虚拟机在迁移、休眠唤醒、快照过程中均不支持CPU热插拔。
  • 虚拟机CPU热插是否自动上线取决于虚拟机操作系统自身逻辑,虚拟化层不保证热插CPU自动上线。
  • CPU热插同时受限于Hypervisor和Guest OS支持的最大CPU数目。
  • 虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况,但再次重启会生效。
  • 虚拟机启动、关闭、重启过程中可能出现热拔CPU超时失败的情况,需等虚拟机回到正常运行状态重试。
  • 热插拔虚拟机CPU时,如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍,可能会导致虚拟机内部看到的CPU拓扑是混乱的,建议每次新增或减少的CPU数目为Cores的整数倍。
  • 若需要热插拔CPU在线生效且在虚拟机重启后仍有效,virsh setvcpus接口中需要同时传入“--config”“--live”选项,将热插拔CPU动作持久化。