openEuler 20.03LTS SP3 部署Nvidia vGPU

环境信息

服务器型号:Dell R740

操作系统版本:openEuler 20.03LTS SP3

架构:x86_64

GPU型号: Nvidia A10

openEuler 20.03LTS SP3 KVM HOST部署Nvidia vGPU

  1. 重新编译内核,将vGPU的patch合入内核,详细操作步骤请参考《openEuler内核合入patch的编译安装流程》。
  1. 修改BIOS配置,使能VT和SR-IOV

  1. 安装编译依赖的软件包:

dnf install -y gcc-c++ tar make

  1. 修改系统启动项,使能VT-d的iommu功能和SR-IOV。

vi /boot/efi/EFI/openeuler/grub.cfg

  1. 重启机器,查看SR-IOV的使能情况,回显中应出现上一步设置的信息。

reboot

cat /proc/cmdline

  1. 禁用开源驱动nouveau

rmmod nouveau

echo “blacklist nouveau” >> /etc/modprobe.d/blacklist.conf

nouveau 驱动和Nvidia的vGPU驱动冲突,所以要禁用nouveau。

查看驱动,如果没有回显表示驱动已经成功禁用。

lsmod | grep nouveau

  1. 从Nvidia官网下载驱动,然后安装驱动

bash NVIDIA-Linux-x86_64-510.47.03-vgpu-kvm.run

安装过程中,请使用DKMS进行自动编译(出现选项时,选择YES)

  1. 重启机器, 重启完成后查看内核加载的驱动模块

reboot

lsmod | grep vfio

  1. 执行nvidia-smi,如果出现以下界面,表示驱动成功安装

  1. 执行以下命令启用SRIOV, 如果看到命令回显出现注册信息,表示使能SR-IOV成功。

/usr/lib/nvidia/sriov-manage -e ALL

每次重启后vGPU的SRIOV都会关闭,所以重启后需要重新执行命令使能SRIOV。

  1. 使能SRIOV成功后,在/sys/class/mdev_bus/目录下会列出所有可以用于创建vGPU的VF设备的BDF。

ls /sys/class/mdev_bus/

  1. 进入对应的vGPU设备下,执行以下命令可以查看每个VF目录所能创建的vGPU类型和数量。

cd /sys/class/mdev_bus/0000:3b:00.4/mdev_supported_types

for i in * ; do echo “ “ $(cat $i/name) available: $(cat $i/avai*); done

  1. 执行以下命令查看当前VF支持的mdev设备名称和vGPU设备可用数量

for i in * ; do echo $i, $(cat $i/name) $(cat $i/ava*) ; done

  1. 创建vGPU MDEV设备

uuidgen > nvidia-588/create

ls nvidia-588/devices

创建完成后查看已分配vGPU的VF可用的剩余vGPUU 实例数,全部为 0。意味着当前VF已经不能再创建新的 vGPU 设备,如果要再创建新的 vGPU,需要选择其他VF。

重启物理机后,分配的vGPU会被删除,所以重启后需要重新生成uuid分配给虚拟机。

openEuler 20.03LTS SP3 VM部署Nvidia vGPU Guest

  1. 创建虚拟机,详细创建方式请参考《openEuler x86_64虚拟机创建流程》。
  1. 执行virsh list –all命令查看当前机器里已创建的虚拟机。

  1. 修改虚拟机的配置文件,将之前vGPU生成的uuid写入虚拟机的配置文件在devices节点下,添加以下信息:

virsh edit testVM01

  1. 启动虚拟机

virsh start testVM01

  1. 将vGPU的客户端驱动scp到虚拟机上

  1. 进入虚拟机

virsh console testVM01

  1. 查看/lib/modules/4.19.90目录下是否存在build、source 目录,如果这两个目录不存在,下载内核源码,进行编译使源码目录下存在编译好的文件,然后创建软链接指向源码目录。

dnf install -y kernel-source rpm-build openssl-devel bc rsync gcc gcc-c++ flex bison m4 elfutils-libelf-devel

cd /usr/src/linux-4.19.90-2202.1.0.0136.oe1.x86_64/

make openeuler_defconfig

make binrpm-pkg -j{cpu_num}

ln -s /usr/src/linux-4.19.90-2202.1.0.0136.oe1.x86_64/ /lib/modules/4.19.90/build

ln -s /usr/src/linux-4.19.90-2202.1.0.0136.oe1.x86_64/ /lib/modules/4.19.90/source

  1. 安装Nvidia Guest vGPU驱动

bash /opt/ NVIDIA-Linux-x86_64-510.47.03-grid.run

  1. 使用nvidia-smi查看相关信息,驱动安装成功

  1. 查看虚拟机挂载的显卡

dnf install pciutils

lspci | grep -i vga

  1. 使用nvidia-smi查看服务端的vGPU使用情况

Agenda

  1. 物理机安装Nvidia vGPU驱动失败

如果出现以下报错,表示安装驱动时缺少编译安装依赖的软件包。

请安装以下软件包:

dnf install -y gcc-c++ tar make

  1. 虚拟机安装驱动失败

如果在虚拟机安装驱动出现以下报错,需要手动安装kernel-source源码包,并在/lib/modules目录下设置软链接,因为驱动安装过程中会去读取内核build、source目录下的信息。

  1. 使能SRIOV出现“Kernel doesn’t support SRIOV based vGPU”的错误

如果执行SRIOV使能时出现以下错误,说明patch没有成功打入kernel,kernel不支持vGPU SRIOV。

请编译内核,将以下patch合入内核,详细流程请参考《openEuler 内核合入patch的编译安装流程》。

patch链接:

https://patchwork.kernel.org/project/kvm/patch/20190213040301.23021-8-baolu.lu@linux.intel.com/

  1. nvidia-smi执行失败

如果使用nvidia-smi查看vGPU相关信息时,出现了以下的报错,表示驱动安装失败,请卸载当前安装的驱动并重新进行安装。

1 个赞

你好,请问下操作文档也适用Nvidia GM107卡吗?