---
title: 虚拟机vCPU热插拔
description: "在虚拟机环境中，vCPU遵循ACPI（Advanced Configuration and Power Interface）规范，通过模拟ACPI GED来实现其功能。当在libvirt下发起vCPU热插拔请求时，QEMU（Quick EMUlator）会操作这个模拟的ACPI GED设备，向虚拟机发送中断信号。虚拟机内的ACPI固件接收到这一中断后，会作出响应，并调用相应的CPU热插拔事件处理函数，从而实现vCPU热插拔。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/twp/kunpengcpfs_19_0097.html
sourcePath: /source/zh/kunpengcpfs/twp/kunpengcpfs_19_0097.html
indexId: 76e2bc1d69fa4cb0c97af7f10d6a3d88adb07effa7a0ea11bdcf9117bd5653a651
---
# 虚拟机vCPU热插拔

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

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

图1 虚拟机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后可能导致虚拟机soft lockup，进而可能导致虚拟机panic。
- 虚拟机在迁移、休眠唤醒、快照过程中均不支持CPU热插拔。
- 虚拟机CPU热插是否自动上线取决于虚拟机操作系统自身逻辑，虚拟化层不保证热插CPU自动上线。
- CPU热插同时受限于Hypervisor和Guest OS支持的最大CPU数目。
- 虚拟机启动、关闭、重启过程中可能出现热插CPU失效的情况，但再次重启会生效。
- 虚拟机启动、关闭、重启过程中可能出现热拔CPU超时失败的情况，需等虚拟机回到正常运行状态重试。
- 热插拔虚拟机CPU时，如果新增CPU数目不是虚拟机CPU拓扑配置项中Cores的整数倍，可能会导致虚拟机内部看到的CPU拓扑是混乱的，建议每次新增或减少的CPU数目为Cores的整数倍。
- 若需要热插拔CPU在线生效且在虚拟机重启后仍有效，virsh setvcpus接口中需要同时传入“--config”和“--live”选项，将热插拔CPU动作持久化。
