Ubuntu+KVM显卡穿透

Ubuntu+KVM显卡穿透
操作系统:ubuntu18.04
主板 :华擎SYS-7048GR-TR
Cpu :E5-2630 v4
显卡 NVIDIA-2070s、1060

一、准备检查工作

  1. 首先物理硬件是否支持显卡穿透,将主板上的VT-D打开
    进入系统查看
cat /proc/cmdline | grep iommu
  1. 有输出则正常
    若没有输出修改/etc/default/grub文件,将intel_iommu=on加入启动项中
    在这里插入图片描述

  2. 更新grub文件:grub2-mkconfig -o /boot/grub2/grub.cfg
    确认VT-D正常开启
    dmesg | grep -e DMAR -e IOMMU
    Ubuntu+KVM显卡穿透_第1张图片
    有enabled正确,若无,请检查上述步骤

  3. 确认测试是否支持虚拟化,目前现在市场上大多数硬件都支持虚拟化
    egrep -o ‘(vmx|svm)’ /proc/cpuinfo
    有输出则正常。

二、禁用虚拟机使用显卡驱动

  1. 因为我需要英伟达的cuda加速计算,所以显卡均使用N显卡,若用A卡把NVIDIA换成AMD即可。
    注:因为将物理显卡分配给虚拟机,所以宿主机不能使用物理显卡,需要更换成集显
    lspci -nn | grep NVIDIA
    在这里插入图片描述
    红框圈住的为2070s显卡,下面则为1060,横线部分为设备的ID和地址
    接下来现在要卸载掉主机上的显卡
  2. 先查看对应显卡的驱动
    lspci -vv -s 03:00.0 | grep driver
    在这里插入图片描述
    将驱动程序禁用掉
    在这里插入图片描述
    修改文件
    vim /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist snd_hda_intel
blacklist xhci_hcd
blacklist nvidia-gpu
  1. 重启机器
    reboot

三、将物理设备解除绑定

modprobe pci_stub

echo " 10de 1e84" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:03:00.0 > /sys/bus/pci/devices/0000:03:00.0/driver/unbind
echo 0000:03:00.0 > /sys/bus/pci/drivers/pci-stub/bind
echo " 10de 10f8" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:03:00.1 > /sys/bus/pci/devices/0000:03:00.1/driver/unbind
echo 0000:03:00.1 > /sys/bus/pci/drivers/pci-stub/bind
echo " 10de 1ad8" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:03:00.2 > /sys/bus/pci/devices/0000:03:00.2/driver/unbind
echo 0000:03:00.2 > /sys/bus/pci/drivers/pci-stub/bind
echo " 10de 1ad9" > /sys/bus/pci/drivers/pci-stub/new_id
echo 0000:03:00.3 > /sys/bus/pci/devices/0000:03:00.3/driver/unbind
echo 0000:03:00.3 > /sys/bus/pci/drivers/pci-stub/bind

查看设备所在组

find /sys/kernel/iommu_groups/ -type l |grep 03

在这里插入图片描述

四、启动kvm

宿主机安装ovmf

apt-get install ovmf

这项是为了启动kvm是用ovmf的UEFI启动方式启动,挂载显卡
注:启动kvm事固件一定要选择UEFI
Ubuntu+KVM显卡穿透_第2张图片

启动完成后正常安装系统

将需要的显卡设备全部添加到虚拟机中
Ubuntu+KVM显卡穿透_第3张图片

五、解决安装显卡驱动不识别问题

博主只测试过kvm用win10、cento7启动
Win10安装驱动后报43错误
Centos7安装驱动后报无法找到显卡
解决方案
编辑虚拟机的xml文件,加入红框内的参数

    <hyperv>
      <vendor_id state='on' value='0123456789ab'/>
    </hyperv>
    <kvm>
      <hidden state='on'/>
</kvm>

Ubuntu+KVM显卡穿透_第4张图片

Value可以随便填写12位,此步骤是为了跳过显卡校验

启动虚拟机后可以正常使用显卡
Ubuntu+KVM显卡穿透_第5张图片

折腾了大半个,最后做一总结:

Cenos7宿主机照此方法没试验成功,仅ubuntu成功,ubuntu16.xx的版本应该也没问题
显卡驱动版本跟显卡型号的高低不影响显卡跳过校验(仅消费级显卡,特斯拉有NVIDIA专门的软件进行穿透)A卡目前全级别支持显卡穿透,但是没有cuda加持,性能有所损耗。

目前猜测为libvirt跟qemu版本的问题
Centos7宿主libvirt使用的是4.5的版本,ubuntu使用的是4.0的版本
Centos7宿主的qemu使用的是1.5.3的版本,ubuntu使用的是2.11.1的版本

Centos7目前报错步骤卡在修改kvm的配置文件,修改配置文件后提示没有模块,有机会后续会再进行centos7的测试

还有一种猜测就是:ubuntu对虚拟化比较友好,内核版本比centos高,本文有什么不对的地方欢迎指正。

参考文档:https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF#QEMU_3.0_audio_changes


更新分隔符2020年1月14日
最后测试结果,centos7成功穿透
原因是因为qemu的版本过低,centos7需要重装gcc,因为默认版本的gcc太低,还需重装更高版本的qemu

你可能感兴趣的:(linux)