问题 原始的nova配置(cpu_mode=”host-passthrough”)导致无法热迁移,改成(cpu_mode=”custom”, cpu_model=”kvm64”)之后解决了热迁移问题但是嵌套虚拟化又不好便了,接着又改成(cpu_mode=’host-model’)但热迁移仍然失败。有两全其美的方法吗?
解决办法
working solution was to create a custom CPU definition in /usr/share/libvirt/cpu_map.xml called SandyBridge-vmx, which contained the full feature flags for that CPU, not just the subset that differs from Westmere/etc., and includes the needed 'vmx' feature for nested kvm
2, And in /etc/nova/nova.conf, we use:
$ sudo grep ^cpu_m /etc/nova/nova.conf
cpu_mode = custom
cpu_model = SandyBridge-vmx
理论 【Libvirt支持的三种CPU模式与热迁移】Libvirt主要支持三种 CPU mode:
- 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 模式下支持用户添加额外的指令集。
- 三种mode的性能排序是:host-passthrough > host-model > custom
- 三种mode的热迁移通用性是: custom > host-model > host-passthrough
- 需要充分考虑既有宿主机类型,以后采购扩容时,也需要考虑相同问题
- 除非不存在热迁移的场景,否则不应用选择host-passthrough
- host-model下不同型号的 CPU 最好能以aggregate hosts划分,在迁移时可以使用aggregate filter来匹配相同型号的物理机
openstack aggregate create Broadwell
openstack aggregate create Haswell
openstack aggregate set --property cpu=broadwell Broadwell
openstack aggregate set --property cpu=haswell Haswell
opentack aggregate add hostHaswell
openstack flavor set --property aggregate_instance_extra_specs:cpu=broadwell
openstack flavor set --property aggregate_instance_extra_specs:cpu=haswell
- 如果CPU型号过多,且不便用aggregate hosts划分,建议使用custom mode
原文链接:https://zhhuabj.github.io/2018/03/09/Libvirt支持的三种CPU模式与热迁移-by-Joshua/
推荐阅读
- G019-OP-INS-RHEL-01 PackStack 安装 RedHat OpenStack
- OpenStack Train(业务组件Neutron装安装)
- OpenStack Train(业务组件cinder装安装)
- OpenStack Train(业务组件装 glances安装)
- OpenStack Train(基础环境安装)
- OpenStack Train(系统环境实施准备)
- openstack桥接-内外网设置
- openstack实例的创建
- openstack-部署一个新的计算节点