openstack-兼容海光hygon服务器

背景:

海光处理器采用了与AMD EPYC 类似的体系结构,为了便于 QEMU 虚拟化处理器提供更好的兼容模式,需要对 QEMU-KVM进行CPU Vendor ID进行替换,进而支持 QEMU 虚拟机虚拟化 ;

QEMU在使用KVM虚拟化的时候只支持使用主机的CPU Vendor ID,目前海光处理器还不在此KVM虚拟化版本支持列表中,如果不配置就直接使用 QEMU/KVM,那么虚拟出来的虚拟机也为海光的 CPU VendorID,这将会导致某些OS虚拟机无法正常启动(例如Windows);

Libvirt调用QEMU创建虚拟机进程,在配置Libvirt XML文件的时候需要指定CPU Model和VendorID,把这些参数传递给QEMU,虚拟机才能正常启动。

Openstack NOVA组件调用Libvirt接口控制虚拟机的生命周期,创建虚拟机的时候生成XML文件,原版的Openstack不会传递CPU的VendorID,需要做一些修改,传递相关的CPU参数才能生成正确的XML文件。

解决

1
2
3
4
5
6
7
主要修改如下文件
nova/objects/image_meta.py
nova/objects/virt_cpu_topology.py
nova/virt/hardware.py
nova/virt/libvirt/config.py
nova/virt/libvirt/driver.py
具体可以参考 https://hlyani.github.io/notes/openstack/openstack_hygon_patch.html