首页 理论教育 物理显卡透传实践:私有云架构设计

物理显卡透传实践:私有云架构设计

时间:2023-10-28 理论教育 版权反馈
【摘要】:对此,我们可直接将物理PCI/PCI-E显卡透传至虚拟机进行使用。AMD和NVIDIA的桌面级、专业级显卡一般都可进行透传,笔者将以桌面级显卡AMD HD 7850为例,介绍如何在QEMU中透传物理显卡设备以及需要注意的步骤。然后我们使用9.1.2节中的vfio-bind.sh脚本,进行显卡驱动的解绑与绑定操作。在虚拟机上添加PCI-E总线根接口,将显卡透传至虚拟机,设备参数形式如下。由于服务器主板PCI/PCI-E接口数量的限制,使用透传物理显卡的虚拟机数量往往非常有限。

物理显卡透传实践:私有云架构设计

现在AMD和NVIDIA是显卡的两大厂商,其显卡按照用途一般分为桌面级、专业级、计算卡等。其中AMD的显卡技术主要来自它在2006年收购的显卡厂商ATI,所以读者需要注意在某些技术资料中出现的ATI显卡即对应现在的AMD显卡。

一般QEMU虚拟机内的图形处理是由vCPU完成,vCPU的特征一般继承于主机的pCPU,但没有单独的GPU设备进行加速。对此,我们可直接将物理PCI/PCI-E显卡透传至虚拟机进行使用。基本过程可以参考9.1节vfio-pci透传相关内容,但需要注意的是在开始之前,我们需要将要透传的显卡的驱动模块加入黑名单以禁止其自动加载。

AMD和NVIDIA的桌面级、专业级显卡一般都可进行透传,笔者将以桌面级显卡AMD HD 7850为例,介绍如何在QEMU中透传物理显卡设备以及需要注意的步骤。

首先查看显卡的总线地址,包含一个GPU设备和一个HDMI音频设备

修改grub文件,除了开启intel-iommu外,也会屏蔽显卡加载系统自带驱动nouveau.ko,形式如下。

修改modprobe参数,基本与9.1节PCI设备透传类似,但这里需要指定kvm-intel.ko的参数emulate_invalid_guest_state=0以防止处于未限制模式(unrestricted mode)的vCPU不能进入实模式。

如果在libvirt环境下,需要修改qemu.conf使QEMU具有root权限(注意同时修改相关套接字权限),或者将显卡设备节点所有者更改为libvirt,笔者在此以修改QEMU权限为例。

(www.xing528.com)

然后我们使用9.1.2节中的vfio-bind.sh脚本,进行显卡驱动的解绑与绑定操作。

在虚拟机上添加PCI-E总线根接口,将显卡透传至虚拟机,设备参数形式如下。

虚拟机启动后,由于启动过程的前段时间内系统并未加载显卡驱动,所以我们可以在QEMU的远程或本地显示窗口中直接看到,当显卡驱动被加载后我们即可在与物理显卡VGA/HDMI/DVI接口相连的显示器上看到后半部分启动过程并进入桌面。

需要注意的是,透传显卡的过程中,具体细节会由于QEMU版本、显卡型号、主机内核版本而有所差异。比如某些显卡会在虚拟机关机时造成蓝屏、主机死机的状况,所以我们在具体操作时需要做一些钩子脚本在虚拟机关机时卸载显卡,尽量减少此类现象发生。

另外,如果被透传的显卡启动时未连接显示器,则虚拟机系统分辨率会被设置的较低,一般可以使用“dummy monitor”,即将显卡的VGA或DVI接口使用电阻进行短接,如图9-2所示,其中被短接的接口为1-6、2-7、3-8。这样虚拟机内就会发现一个通用显示器,并且其分辨率可以任意设置。这样做的好处是避免某些远程协议(RDP、VNC等)由于无法找到本地显示器分辨率而使用最低分辨率,从而对远程访问的体验造成影响。

由于服务器主板PCI/PCI-E接口数量的限制,使用透传物理显卡的虚拟机数量往往非常有限。针对这种状况目前有两种解决方法,一是使用PCI-E扩展卡扩展出更多接口,但它会严重增加服务器的能耗与发热量,另一种即是使用vGPU技术。

图9-2 VGA Dumm y M onitor

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈