Nvidia显卡直通
centos最小化安装。安装好之后,检查系统是否支持iommu
cat /proc/cmdline | grep iommu
如果没有任何输出,调整启动项,有的话略过以下操作,跳到横线以后
cd /etc/default #进入启动选项主目录 cp grub grub.bak #复制 vi grub
然后在grub中更改GRUB_CMDLINE_LINUX行,新加入以下内容
GRUB_CMDLINE_LINUX="intel_iommu=on pci-stub.ids=10de:xxx pci-stub.ids=10de:xxx" #忽略需要直通的显卡总线的ID,并且启动intel的内存管理单元
重新检查启动配置选项
grub2-mkconfig -o /boot/grub/grub.cfg
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # uefi启动用这个,不然无法启动iommu
重启电脑。
检查
以上第一个阶段结束。
检查
cat /proc/cmdline | grep iommu #内核是否支持iommu
输出结果:inter_iommu=on
dmesg |grep -e DMAR -e IOMMU # 验证VT-D是否启用
加载显卡vfio驱动
modprobe vfio modprobe vfio-pci
记录一下显卡的地址,我是N卡。
lspci -nn | grep NVIDIA
3b:00.0 VGA compatible controller [0300]: NVIDIA Corporation Device [10de:2204] (rev a1) 3b:00.1 Audio device [0403]: NVIDIA Corporation Device [10de:1aef] (rev a1)
在服务器端卸载显卡设备
find /sys/kernel/iommu_groups/ -type l #查出来之后将同一组的设备全部分离出去
virsh nodedev-detach pci_0000_3b_00_0 #通过上面的命令查出主线id virsh nodedev-detach pci_0000_3b_00_1
卸载显卡驱动
lspci -vv -s 3b:00.0 | grep driver
#根据找到的驱动依次卸载
echo -n "0000:3b:00.1" > /sys/bus/pci/drivers/snd_hda_intel/unbind # 还有声卡,他们是一组,我这里就偷懒了,方法一样,只不过总线id不同
加载vfio
echo -n "10de 0fb9" > /sys/bus/pci/drivers/vfio-pci/new_id # 还有声卡,他们是一组,我这里就偷懒了,方法一样,只不过总线id不同
验证显卡设备是否加载vfio-pci驱动,加载成功
lspci -vv -s 3b:00.0 | grep driver # 还有声卡,他们是一组,我这里就偷懒了,方法一样,只不过总线id不同
#结果: Kernel driver in use: vfio-pci
下面开始虚拟机的操作
#在宿主机上编辑虚机的xml配置文件
virsh edit xxxx
#在设备标签中添加如下内容:
<hostdev mode='subsystem' type='pci' managed='yes'> <source>
# bus slot function 分别为:0000:3b:0.0 中的后三部分 <address domain='0x0000' bus='0x3b' slot='0x00' function='0x0'/> </source> </hostdev>
启动虚拟主机
下面就是虚机安装驱动环节
1.安装依赖环境:
yum install kernel-devel gcc -y
2.屏蔽系统自带的nouveau
lsmod | grep nouveau #检查系统自带的驱动模块
vi /lib/modprobe.d/dist-blacklist.conf #修改dist-blacklist.conf文件: # 将nvidiafb注释掉,注意#和后面内容中间有空格 # blacklist nvidiafb # 然后添加以下语句: blacklist nouveau options nouveau modeset=0
# 重建initramfs image步骤
mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).img.bak
dracut /boot/initramfs-$(uname -r).img $(uname -r)
reboot # 重启电脑
再次输入
lsmod | grep nouveau
显示结果为空,屏蔽成功,若没有,网上再搜索相关的资料,直到输出结果为空。
3.安装驱动
贴上官方驱动地址:https://www.nvidia.cn/Download/index.aspx?lang=cn
下载好对应的显卡驱动,我通过win11上传到服务器端,找到对应的文件添加权限
chmod +x NVIDIA-Linux-x86_64-525.105.17.run
安装
./NVIDIA-Linux-x86_64-525.105.17.run
激动人心的时候出现了
./NVIDIA-Linux-x86_64-525.105.17.run Verifying archive integrity... OK Uncompressing NVIDIA Accelerated Graphics Driver for Linux-x86_64 525.105.17...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
最后贴一张图
nvidia-smi