pve虚拟机pcie直通教程
文章时效一定要看!!!
不同版本配置天差地别,请勿用于6.x以外的版本
本文写作基于
新建博文时镜像版本:
- pve6.2-4
最后一次更新时版本:
- pve6.2-15
新建博文关键软件包版本:
- pve-qemu-kvm: 5.1.0-2
最后一次更新时关键软件包版本:
- pve-qemu-kvm: 5.1.0-6
1. 开启iommu
- 先进入bios打开VT-d虚拟化选项。
- 修改启动参数
编辑/etc/default/grub
nano /etc/default/grub
找到:GRUB_CMDLINE_LINUX_DEFAULT="quiet"
替换为GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on video=efifb:off,vesafb:off"
如果是amd平台替换为GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on video=efifb:off,vesafb:off"
解释:
- iommu开启直通分组
- efifb:off 禁用efi启动的显示设备
- vesafb:off 禁用legacy启动的显示设备
替换后执行以下命令更新grub:
update-grub
2. 加载模块
编辑/etc/modules
nano /etc/modules
添加以下几个模块,直接复制即可。
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
3. 阻止驱动加载(显卡直通时才需要操作)
因为pve启动时会尝试加载显卡驱动,为了避免pve占用显卡,需要阻止pve的显卡驱动加载。
3.1 添加驱动黑名单
编辑/etc/modprobe.d/pve-blacklist.conf
nano /etc/modprobe.d/pve-blacklist.conf
添加以下内容
# block AMD driver
blacklist radeon
blacklist amdgpu
# block NVIDIA driver
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
# block INTEL driver
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915
3.2 添加显卡到直通设备中
查看所有pci设备。
lspci
找到显卡后记下硬件id,形式是xxxx:xxxx
,比如G5400的核心显卡的硬件id是8086:3e90
。
编辑/etc/modprobe.d/vfio.conf
nano /etc/modprobe.d/vfio.conf
添加以下内容注意!!!!把8086:3e90换成你的显卡的硬件id
options vfio-pci ids=8086:3e90
4. 重启
一定要确认机器正常重启,重启后屏幕会卡在第二行好像是initramfs(写博客的时候机器不在手边,不记得具体显示什么了,下次折腾的时候再补充。反正屏幕卡住说明阻止了驱动加载)
5. 配置虚拟机
- 机器设置为q35
- 点击添加设备,PCI设备,找到显卡对应的设备。
- 打开
全部功能
PCI Express
- 启动机器,安装驱动
6. 一些大坑
6.1 intel
intel的坑比较多
- intel有多种直通方案,分别是gpu虚拟化以及传统直通。当前版本(PVE6.2-4镜像)(pve-qemu-kvm 5.1.0-2)存在有关intel显卡的bug,社区在2020年上半年已经有优化intel直通的提案,不久后在pve-qemu-kvm 5.1.0-5版本中添加了这一特性。目前(2020-10-06)此版本仍然没有进入测试版分支,所以只有两个方案:自己编译或再等一万年。
(2020-11-04)更新博文时,5.1.0-4版本已经发布,-5还会远吗,继续等等(2020-11-24)5.1.0-5他终于更了,可以直接添加legacy-igd=1 - intel的显卡vbios因板而异,不同主板的vbios对efi和legacy的支持水平参差不齐,我使用的主板恰好支持差,直通后HDMI与VGA口均不输出信号,但是驱动可以正常加载,解决方案是使用rom-parser和rom-fixer工具(github仓库地址)编辑提取出来的vbios(挖坑:这里会开一篇教程文章),并且将修改好的vbios文件复制到
/usr/share/kvm
,并且在显卡pcihost后添加romfile=”xxx.rom”手动加载vbios。说点题外话,提取的vbios可以测试兼容性。
如果有./rom-parser /tmp/xxx
PCIR: type 3
说明支持efi启动,建议更换bios为OVMF。 - 驱动问题,直通windows,设备管理器显卡感叹号,提示代码43。算是直通成功一半了,但是这种情况处理起来比较复杂。有些情况下代码43显卡仍然可以正常工作,这种情况通常不用理会。如果工作不正常可以考虑下载安装老版本的驱动程序(我用windows自动安装的一切正常
6.2 nvidia
有卡还没测,可以先等一万年,会更的。
2020-11-4上周尝试直通GTX 1080Ti一次成功…N卡直通没啥坑,放心通就好了
官方文档提到需要添加以下内容
echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf
NVIDIA Kepler K80 GPUs需要在虚拟机配置文件中添加
args: -machine pc,max-ram-below-4g=1G
此外还必须进行以下操作,否则驱动出错:
WebUI中:对应虚拟机->硬件->显卡对应的PCI设备(双击)->勾选x-vga(主GPU)
或者修改虚拟机配置文件,在hostpci:
后添加x-vga=1
驱动安装
NVIDIA GeForce GTX1080Ti Ubuntu20.04 LTS驱动安装
nvidia-docker
2020-11-24 待更新(挖坑:这里会开一篇文章)
6.3 amd
有卡还没测,可以再等一万年,在试了。
效果图:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!