qemu设备热插拔
需要支持的条件
- 总线电器特性
- 主板
BIOS - 操作系统
- 设备驱动
物理机可实现热插拔的部件
SATA硬盘 (IDE不支持热插拔)- CPU
- 内存
USB- 网卡
- 风扇
qemu支持的热插拔
PCI设备- CPU
- 内存
PCI 设备的热插拔需要几个方面的支持
-
bios默认的SeaBIOS就支持 -
PCI总线,目前PCI跟PCIE都支持。 -
虚拟机
数流行的Linux和Windows操作系统都支持设备的热插拔。可以在客户机的Linux系统的内核配置文件中看到一些相关的配置
# RHEL7 相关配置 CONFIG_HOTPLUG_PCI_PCIE=y CONFIG_HOTPLUG_PCI=y CONFIG_HOTPLUG_PCI_ACPI=y CONFIG_HOTPLUG_PCI_ACPI_IBM=y CONFIG_HOTPLUG_PCI_SHPC=y -
客户机中的驱动程序
一些网卡驱动(如Intel的
e1000e、igb、ixgbe、igbvf、ixgbevf等)、SATA或SAS磁盘驱动、USB2.0、USB3.0驱动都支持设备的热插拔
相关命令
直通设备热插拔
device_add vfio_pci,host=02:00.0,id=mydevice
device_del mydevice
USB设备的热插拔
QEMU默认没有向客户机提供USB总线,需要在启动客户机的qemu命令行中添加-usb参数(或-device piix4-usb-uhci参数),来提供客户机中的USB总线。
usb_add host:003.003
或者
usb_add host:03f0:8607
device_add vfio-pci,host=00:14.0,id-myusb
CPU 热插拔
内核配置
CONFIG_HOTPLUG_CPU=y
CONFIG_BOOTPARAM_HOTPLUG_CPU0=y
CONFIG_ACPI_HOTPLUG_CPU=y
配置
-smp n,maxvcpus=N
初始为n个cpu,可以动态添加到N个
cpu-add x
内存热插拔
内核参数

添加
object_add memory-backend-ram,id=mem1,size=1G
device_add pc-dimm,id=dimm1,memdev=mem1
删除
device_del mem1
object_del mm1
磁盘热插拔
drive_add file=/a/b/c.qcow2,format=qcow2,id=drive001,if=none
device_add virtio-blk-pci,drive=drive001,id=disk1
device_del disk1
网络接口热插拔
netdev_add user,id=net1
device_add virtio-net-pci,netdev=net1,id=nic1,max=xxx
device_del nic1

浙公网安备 33010602011771号