20.03LTS SP3 部署Nvidia vGPU
环境信息服务器型号:Dell R740 操作系统版本:20.03LTSP3 架构:x86_64 GPU型号: Nvidia A10 20.03LTS SP3 KVM HOST部署Nvidia vGPU1. 重新编译内核,将vGPU的patch合入内核,详细操作步骤请参考《openEuler内核合入patch的编译安装流程》。 2. 修改BIOS配置,使能VT和SR-IOV 3. 安装编译依赖的软件包: dnf install -y gcc-c++ tar make 4. 修改系统启动项,使能VT-d的iommu功能和SR-IOV。 vi /boot/efi/EFI/openeuler/grub.cfg 5. 重启机器,查看SR-IOV的使能情况,回显中应出现上一步设置的信息。 reboot cat /proc/cmdline 6. 禁用开源驱动nouveau rmmod nouveau echo “blacklist nouveau” >> /etc/modprobe.d/blacklist.conf nouveau驱动和Nvidia的vGPU驱动冲突,所以要禁用nouveau。 查看驱动,如果没有回显表示驱动已经成功禁用。 lsmod | grep nouveau 7. 从Nvidia官网下载驱动,然后安装驱动 bash NVIDIA-Linux-x86_64-510.47.03-vgpu-kvm.run 安装过程中,请使用DKMS进行自动编译(出现选项时,选择YES) 8. 重启机器, 重启完成后查看内核加载的驱动模块 reboot lsmod | grep vfio 9. 执行nvidia-smi,如果出现以下界面,表示驱动成功安装 10. 执行以下命令启用SRIOV, 如果看到命令回显出现注册信息,表示使能SR-IOV成功。 /usr/lib/nvidia/sriov-manage -e ALL 每次重启后vGPU的SRIOV都会关闭,所以重启后需要重新执行命令使能SRIOV。
11. 使能SRIOV成功后,在/sys/class/mdev_bus/目录下会列出所有可以用于创建vGPU的VF设备的BDF。 ls /sys/class/mdev_bus/ 12. 进入对应的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 13. 执行以下命令查看当前VF支持的mdev设备名称和vGPU设备可用数量 for i in * ; do echo $i, $(cat $i/name) $(cat $i/ava*) ; done 14. 创建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 Guest1. 创建虚拟机,详细创建方式请参考《openEuler x86_64虚拟机创建流程》。 2. 执行virsh list –all命令查看当前机器里已创建的虚拟机。 3. 修改虚拟机的配置文件,将之前vGPU生成的uuid写入虚拟机的配置文件在devices节点下,添加以下信息: virsh edit testVM01 4. 启动虚拟机 virsh start testVM01
5. 将vGPU的客户端驱动scp到虚拟机上 6. 进入虚拟机 virsh console testVM01 7. 查看/lib/modules/4.19.90目录下是否存在build、source 目录,如果这两个目录不存在,下载内核源码,进行编译使源码目录下存在编译好的文件,然后创建软链接指向源码目录。 dnf install -y kernel-source rpm-build openssl-devel bc rsycn 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 8. 安装Nvidia Guest vGPU驱动 bash /opt/ NVIDIA-Linux-x86_64-510.47.03-grid.run 9. 使用nvidia-smi查看相关信息,驱动安装成功 10. 查看虚拟机挂载的显卡 dnf install pciutils lspci | grep -i vga 11. 使用nvidia-smi查看服务端的vGPU使用情况 Agenda1. 物理机安装Nvidia vGPU驱动失败 如果出现以下报错,表示安装驱动时缺少编译安装依赖的软件包。 请安装以下软件包: dnf install -y gcc-c++ tar make 2. 虚拟机安装驱动失败 如果在虚拟机安装驱动出现以下报错,需要手动安装kernel-source源码包,并在/lib/modules目录下设置软链接,因为驱动安装过程中会去读取内核build、source目录下的信息。 3. 使能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/
4. nvidia-smi执行失败 如果使用nvidia-smi查看vGPU相关信息时,出现了以下的报错,表示驱动安装失败,请卸载当前安装的驱动并重新进行安装。 | |