ubuntu20.04显卡直通kvm虚拟机

整个部署过程花了四五天终于部署好了,操作过程记录下,其实只差一步一直没找到相关资料,所以搞了这么多天,再做一遍估计也就2-3小时就能弄好

建议安装kvm宿主机使用ubuntu20.04,省去了配置vifo的麻烦,20.04已经将这个加载到内核,无需做额外配置

我的虚拟机都是安装centos7

1.首先是设置bios

以下两个就需要启用,其中第一个Above 4G decoding这个是我的最终问题,最后找到了启用了直通就成功了,后面就是虚拟化VT开启

Above 4G decoding - Enable
Intel Virtualization Technology for Directed I/O (VT-d) - Enable

2.宿主机配置操作

确认内核是否支持iommu

cat /proc/cmdline | grep iommu

iommu有两大功能:
控制设备DMA地址映射到机器物理地址(DMAR)
中断重映射(IntreMap)

若没有输出结果,添加intel_iommu=on到grub的启动参数

sudo vi /etc/default/grub
GRUB_CMDLINE_LINUX="intel_iommu=on" #添加intel_iommu=on

然后使配置生效,然后重启宿主机

update-grub

重启宿主机以后查看iommu配置生否生效

dmesg | grep IOMMU
[    0.125551] DMAR: IOMMU enabled

查看pci设备信息

lspci -nn | grep NVIDIA
03:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:1f03] (rev a1)
03:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:10f9] (rev a1)

查看驱动

lspci -vv -s 03:00.0 | grep driver
        Kernel driver in use: nouveau
lspci -vv -s 03:00.1 | grep driver 
        Kernel driver in use: snd_hda_intel

用默认显卡驱动
禁用nouveau、snd_hda_intel
将其添加到/etc/modprobe.d/blacklist.conf文件最后

vi /etc/modprobe.d/blacklist.conf
blacklist nouveau
blacklist snd_hda_intel

保存退出后重启宿主机,此时独立显卡将从宿主机解绑,屏幕将设置不了分辨率,很大
接着我们使用GPU直通到虚拟机
我们通过之前使用lspci命令查到的GPU 的BDF是03:00.0,03:00.1是音频设备,也需要一并直通到虚拟机,下面1)和2)步需要获取03_00_0和03_00_1的总线、槽位和功能信息
1).然后我们通过这个可以获取到GPU的完整标识符

virsh nodedev-list --cap pci| grep 03_00_0
#返回
pci_0000_03_00_0

2).然后可以通过这个标识符获取图形处理器的域、总线、槽位和功能信息

virsh nodedev-dumpxml pci_0000_03_00_0| egrep 'domain|bus|slot|function'
    <domain>0</domain>
    <bus>3</bus>
    <slot>0</slot>
    <function>0</function>
      <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
      <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>

3).接着我们通过上述的信息修改kvm虚拟机信息,其中第二个地址元素,在操作系统中为GPU设置固定PCI设备BDF

virsh edit vm-name

添加如下信息上面查到的0、3、0、0填写到下面对应的domain,bus,slot,function里面,然后后面一行的address上面也说了是固定PCI设备的BDF可以自己定义,下面一共两组hostdev,第一组是GPU显卡,第二组GPU音频,两个都需要直通到虚拟机,如果只直通显卡可能出现未知问题

    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/>
      </source>
      <alias name='hostdev0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='on'/>
    </hostdev>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <driver name='vfio'/>
      <source>
        <address domain='0x0000' bus='0x03' slot='0x00' function='0x1'/>
      </source>
      <alias name='hostdev1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x1'/>
    </hostdev>

接着我们启动虚拟机,进入虚拟机
首先安装下依赖

yum install gcc make kernel-devel kernel-headers -y

然后安装GPU驱动,如果在虚拟机中也是提示GPU卡被占用,如下错误提示

ERROR: The Nouveau kernel driver is currently in use by your system. This  driver is incompatible with the NVIDIA driver, and must be disabled before proceeding.
Please consult the NVIDIA driver README and your Linux distribution's documentation
 for details on how to correctly  disable the Nouveau kernel driver.

需要禁用下虚拟机里面的nouveau

vi /etc/modprobe.d/blacklist.conf #这个文件没有就新建
#添加如下内容
blacklist nouveau
options nouveau modeset=0

如果安装驱动的时候提示内核相关的找不到,提示如下图,安装时添加内核指向的参数

微信截图_20220526155025.png

./NVIDIA-Linux-x86_64-510.73.05.run --kernel-source-path=/usr/src/kernels/3.10.0-957.12.1.el7.x86_64

微信截图_20220527170109.png

问题记录

之前没有开启4G decoding报这个错误

dmesg | grep NVRM
[drm] [nvidia-drm] [GPU ID 0x00000003] Loading driver
[drm] Initialized nvidia-drm 0.0.0 20160202 for 0000:00:03.0 on minor 1
NVRM: GPU 0000:00:03.0: RmInitAdapter failed! (0x24:0x72:1417)
NVRM: GPU 0000:00:03.0: rm_init_adapter failed, device minor number 0
NVRM: GPU 0000:00:03.0: RmInitAdapter failed! (0x24:0x72:1417)
NVRM: GPU 0000:00:03.0: rm_init_adapter failed, device minor number 0

最后附上我的虚拟机xml文件

k8s-node2.xml

参考:

https://docs.nvidia.com/grid/5.0/grid-vgpu-user-guide/index.html#using-gpu-pass-through-red-hat-el-kvm

https://blog.51cto.com/zaa47/2596875?ivk_sa=1024320u

https://blog.csdn.net/dwj1979/article/details/123876437


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/844.html