openstack pike版本 gpu透传 设备无法使用
问题
Openstack pike版本下,GPU(NVIDIA 1060)透传至linux虚拟机,发现设备并成功安装驱动,但是nvidia-smi无法执行,报出设备无法使用的错误。
解决
通过网上调查,因为NVIDIA GPU会阻止VM中的驱动加载到GPU上,所以需要在qemu中设置隐藏VM的状态。让GPU无法检测到VM在控制GPU。因此,需要在虚拟机的xml文件中打开kvm hidden选项。
下方有两种方法进行解决:
- 在dashborad中为镜像添加元数据img_hide_hypervisor_id=true,如下图,然后基于此镜像创建虚拟机即可解决。
另外,在命令行可以使用下述命令进行添加元数据。$ . admin-openrc $ openstack image list #上述命令可以查看镜像ID,在下面命令中替换镜像ID即可 $ openstack image set ImageID --property img_hide_hypervisor_id=true
- 在源码中进行修改,源码位置/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py。在_set_features函数内部,文件的4486行中,添加
保存退出,并重新将driver.py文件重新编译,替换原有的config.pyc文件。guest.features.append(vconfig.LibvirtConfigGuestFeatureKvmHidden())
完成后重启虚拟机或者整个计算节点的服务,即可发现问题已经解决。python -m py_compile driver.py