Nvidia显卡直通

发布时间 2023-04-12 08:54:55作者: 乌贼王

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

 

加载vfio

echo -n "10de 0fb9" > /sys/bus/pci/drivers/vfio-pci/new_id

验证显卡设备是否加载vfio-pci驱动,加载成功

lspci -vv -s 3b:00.0 | grep driver
#结果: 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




dracut --force reboot # 重启电脑

再次输入

lsmod | grep nouveau

显示结果为空,屏蔽成功,若没有,网上再搜索相关的资料,直到输出结果为空。

3.