官网指导教程,估计也看不懂。
https://pve.proxmox.com/wiki/Pci_passthrough
一.开启PVE核显直通
1.启动内核IOMMU支持
打开PVE节点的shell,输入命令:
nano /etc/default/grub
将GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off"
简单解释下:
Intel_iommu=on #启用IOMMU功能。AMD CPU要换成amd。
iommu=pt #pt只会影响内核驱动,能让内核驱动设备性能更高。
pcie_acs_override=downstream,multifunction #IOMMU拆分分组,比如4口pcie网卡每个口为一组,不加整体为一组。
efifb:off #禁用efi启动的显示设备。不直通核显可以不加。
vesafb:off #禁用vesa启动的显示设备。不直通核显可以不加。
修改完成之后更新grub
update-grub
加载内核模块
nano /etc/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
更新内核参数并重启
update-initramfs -k all -u
reboot
输入一下命令,验证IOMMU是否开启成功
dmesg | grep iommu
出现如下例子。则代表成功
[ 1.341100] pci 0000:00:00.0: Adding to iommu group 0
[ 1.341116] pci 0000:00:01.0: Adding to iommu group 1
[ 1.341126] pci 0000:00:02.0: Adding to iommu group 2
[ 1.341137] pci 0000:00:14.0: Adding to iommu group 3
[ 1.341146] pci 0000:00:17.0: Adding to iommu group 4
此时输入命令
find /sys/kernel/iommu_groups/ -type l
出现很多直通组,就代表成功了。如果没有任何东西,就是没有开启
2.添加驱动到PVE黑名单
打开PVE节点的shell,输入命令:
nano /etc/modprobe.d/blacklist.conf
添加黑名单驱动
Intel GPUs
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
AMD GPUs
blacklist amdgpu
blacklist radeon
NVIDIA GPUs
blacklist nouveau
blacklist nvidia*
3.查找核显和声卡id
打开PVE节点的shell,输入命令:
lspci
00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3 Processor Integrated Graphics Controller (rev 06)
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
我的核显和声卡的PCIE ID 为00:02.0 00:03.0 取前两位数就是00:02 00:03
4.查询对应硬件ID
lspci -n -s 00:02 #查询显卡 00:02 以上获取的ID
lspci -n -s 00:03 #查询声卡 00:03 以上获取的ID
从以上可以查询到显卡硬件ID为8086:040a 声卡硬件ID为8086:0c0c
5.填上以上ID,添加直通组。多个设备,ids后面每个设备之间用,隔开
nano /etc/modprobe.d/vfio.conf
添加上
options vfio-pci ids=8086:040a,8086:0c0c
6.添加options防止VM死机
nano /etc/modprobe.d/kvm.conf
添加上
options kvm ignore_msrs=1
注: vfio.conf 和 kvm.conf 默认没有此两文件
7、以上文件修改并保存后,更新内核并重启PVE
update-initramfs -k all -u
reboot
8.重启完成后,输入命令检查模块是否加载成功
lsmod | grep vfio
看到以上输出画面说明加载成功
二.为PVE虚拟机安装编译gcc工具、Git工具,make工具
1.更新源
apt-get update
2.安装gcc编译工具
apt-get install gcc
查询gcc版本
gcc --version
3.安装Git工具
apt-get install git
4.安装make工具
apt-get install make
三. 编译官方提供的核显rom修复工具
git clone https://github.com/awilliam/rom-parser
cd rom-parser
make
四.导出核显ROM
cd /sys/bus/pci/devices
ls
通过lspci查看设备我们可以看出0000:00:02.0为核显,输入下面命令进行到处vbios.rom
cd 0000:00:02.0
echo 1 > rom
cat rom > /tmp/vbios.rom
echo 0 > rom
在winscp进入PVE的tmp目录就可以看到导出的核显vbios.rom
五.查询导出核显的硬件设备ID
cd rom-parser #进入rom-parser
./rom-parser /tmp/vbios.rom #查询vbios.rom设备ID
这里会发现我们导出的核显rom 硬件设备ID为8086:0406, 这个是存在问题的,通过lspci -n -s 00:02查询到的核显设备ID应该为8086:040a,这个才是正确的,所以我们要借助rom-parser编译出来的修复文件进行修复
六.修复核显ROM的设备通道ID
cd rom-parser
./rom-fixer /tmp/vbios.rom
七.配置虚拟机核显输出
nano /etc/pve/qemu-server/104.conf
在顶部加入这行代码,代表直通核显直出核显
args: -device vfio-pci,host=00:02.0,addr=0x02,x-igd-gms=1,romfile=/root/104.bin
注意 /root/104.bin 为vbios.rom文件路径