1. 注释libvirt的CPU检测代码
-
所有计算节点
vim /usr/lib/python3/dist-packages/nova/virt/libvirt/driver.py
'''
9342 #try:
9343 # if not instance.vcpu_model or not instance.vcpu_model.model
9344 # source_cpu_info = src_compute_info['cpu_info']
9345 # self._compare_cpu(None, source_cpu_info, instance)
9346 # else:
9347 # self._compare_cpu(instance.vcpu_model, None, instance)
9348 #except exception.InvalidCPUInfo as e:
9349 # raise exception.MigrationPreCheckError(reason=e)
'''
2. 更改CPU配置
- openstack 默认情况下virt_type使用的是"kvm"。该模式一下,CPU model支持如下是那种配置
- host-passthrough:libvirt 令 KVM 把宿主机的 CPU 指令集全部透传给虚拟机。因此虚拟机能够最大限度的使用宿主机 CPU 指令集,故性能是最好的。但是在热迁移时,它要求目的节点的 CPU 和源节点的一致。
- host-model: libvirt 根据当前宿主机 CPU 指令集从配置文件 /usr/share/libvirt/cpu_map.xml 选择一种最相配的 CPU 型号。在这种 mode 下,虚拟机的指令集往往比宿主机少,性能相对 host-passthrough 要差一点,但是热迁移时,它允许目的节点 CPU 和源节点的存在一定的差异。
- custom:这种模式下虚拟机 CPU 指令集数最少,故性能相对最差,但是它在热迁移时跨不同型号 CPU 的能力最强。此外,custom 模式下支持用户添加额外的指令集。该模式下,需要同时配置cpu_model选项。该选项的值,参考/usr/share/libvirt/cpu_map.xml。
2.1 方案1
- host-passthrough模式
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=host-passthrough
2.2 方案2
- host-model模式
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=host-model
2.3 方案3
- custom模式。由于我们使用的是Gold 6230CPU,采用的是Skylake-SP核心,所以我们测试的时候cpu_model选择Skylake-Server。
vim /etc/nova/nova-compute.conf
[libvirt]
virt_type=kvm
cpu_mode=custom
cpu_model=Haswell
-
这里主要采用方案2,如果不成功则用方案3
3. 注意点
-
1. 跨CPU可能会导致迁移过去发生错乱,导致实例启动不了,使用硬重启即可处理
-
2.采用冷迁移则不会出现以上问题