简介
内存的热插拔分为两个步骤:物理内存热插拔和逻辑内存热插拔。
物理内存热插拔: 对物理的内存条插拔的支持。
逻辑内存热插拔: 物理内存作为内核内存管理系统可以使用的资源,被动态地加入或踢出地支持。
内存的热插拔地过程: 物理内存热插入 -> 逻辑内存热添加 -> 逻辑内存热删除 -> 物理内存热拔出
物理内存热插拔的支持,主要依赖于ACPI地功能。
逻辑内存热插拔的支持,需要内核支持,kernel的启动参数添加 movable_node
QEMU/KVM 内存热插拔
QEMU/KVM 中对内存热插拔的支持主要是通过对 dimm 设备的热插拔的支持来实现的,对虚拟机的内核来说,就相当于物理地插入和拔出内存条一样。dimm 设备地热插拔通过 device_add 来完成。
device_add 或 -device 是指定前端设备的,也就是虚拟机能看到的设备,它的实体是要靠一个对应的后端设备来实现的,通过 object_add 来添加。这个后端设备叫 memory-backend-ram/memory-backend-file
启动虚拟机时,-m 参数后需要添加 "slots=n,maxmem=n",slots 相当于物理内存插槽,maxmem 表示最多可以增加多少内存。
实际操作
启动虚拟机
[root@localhost ~]# /usr/libexec/qemu-kvm centos70-64.qcow2 -enable-kvm -smp 2 -m 4G,slots=4,maxmem=16G -device virtio-net-pci,netdev=vnet0 -netdev