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