CieyGet
CieyGet

技术改变世界

  • 首页
  • 分类
  • 文章归档
  • 荷兰猪

  • 搜索
手机 折腾 破解 救砖 维修 硬改 B860AV1.1 Android zerotier docker 网络 windows linux ubuntu 中兴 Padavan 宝塔 华为 电视盒子 VIM PVE 光猫 友华 PT926G

[PVE 7.2-4] 硬件直通

发表于 2022-07-08 | 分类于 PVE虚拟机 | 0 | 阅读次数 146

PVE 7.2-4 硬件直通

基本要求

确认自己的主板CPU是否支持Vt-d功能,intel要b75以上芯片组才支持。也就是说intel4代酷睿处理器以上理论都可以支持,AMD暂时不明。

GVT-g 一般在6代以上的CPU上支持,可以自行尝试

VT-D是io虚拟化。不是VT-X,具体请参考下面文章

https://zhuanlan.zhihu.com/p/50640466

请注意 ,开启vt-d才能io虚拟化,AMD平台是iommu,某些OEM主板上叫SRIOV。

本文以 Intel 平台作为环境基础

检查VT-d是否开启

#执行
dmesg | grep -e DMAR -e IOMMU
#若无输出,请在BIOS内开启VT-d

NVIDIA独显直通

启用硬件直通

打开grub配置文件

nano /etc/default/grub

找到这一行

GRUB_CMDLINE_LINUX_DEFAULT="quiet“

Intel用户修改为:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on pcie_acs_override=downstream video=vesafb:off video=efifb:off"

以下有几个注意的点以及参数解读

#这里为了保证独显不被占用关闭PVE对此两种显卡的启用
#启用intel_IOMMU

intel_iommu=on

#有些主板的PCIE 1、2 槽同时插上时会共享带宽,如果不拆分iommu,当两个设备同时直通,其中一个就会显示占用

iommu=pt

#如果是更新到pve7.2.4后虚拟机没法开机建议在CMDLINE中加上以下参数

pcie_acs_override=downstream,multifunction nofb textonly nomodeset

#pcie_acs_override=downstream,multifunction 用于将 iommu groups 拆分,方便直通一些板载的设备。
#这个参数需要你的处理器支持 ACS (Access Control Services) 功能,并在 BIOS 中开启。

#nofb 是用于禁用帧缓冲设备,避免内核在屏幕上输出信息。
#textonly 是用于设置控制台为文本模式,不使用图形界面。
#nomodeset 是用于禁止加载显卡驱动程序,避免与直通的显卡冲突。

video=simplefb:off 

#是一个用于禁用 simplefb 帧缓冲驱动程序的内核参数。
#这个参数可以在使用 GPU 透传时避免内核在屏幕上输出信息。如
#果你需要显卡直通,建议在 cmdline 再加上 video=vesafb:off 和 video=efifb:off


#禁止启动vesa驱动

video=vesafb:off

#禁止启动efi启动的显卡

video=efifb:off

#i915.enable_gvt 是一个用于启用 Intel 的 GVT-g 驱动程序的内核参数。
GVT-g 是一种硬件虚拟化技术,可以让多个虚拟机共享一个 Intel 核显,并分配不同的虚拟 GPU。
如果你想使用 GVT-g 功能,并且核显可以支持就需要添加这个参数。
如果你只想使用显卡直通又或者核显不支持,就不要添加这个参数。

i915.enable_gvt=1

更新grub

update-grub

加载需要的模块

编辑 nano /etc/modules 添加以下内容

vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
#kvmgt 模块为核显i915 方式直通

找到设备的hostpci

root@pve:~# lspci | grep NVIDIA
01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GM206 High Definition Audio Controller (rev a1)

01:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1) 显卡本身视频输出

01:00.1 Audio device: NVIDIA Corporation GM206 High Definition Audio Controller (rev a1) 显卡自带的声卡

这里要注意一下,如果是直通独显,需要将显卡的声卡以及显卡同时直通至一个虚拟机

查看设备的ID

#后面xx:xx.x的为hostpci的ID,因为要同时直通显卡本身的显卡和声卡,这里直接选择01:00设备输出ID
lspci -n -s 01:00 
root@pve:~# lspci -n -s 01:00
01:00.0 0300: 10de:1401 (rev a1)
01:00.1 0403: 10de:0fba (rev a1)

可以看到上面已经输出了ID,将ID添加进vfio

echo "options vfio-pci ids=10de:1401,10de:0fba disable_vga=1" > /etc/modprobe.d/vfio.conf
#以下是给核显加入vfio有需求的话可以使用上面的方法添加
#echo "options vfio-pci ids=10de:1401,10de:0fba" > /etc/modprobe.d/vfio.conf

注意,上面这条命令,ids=后面跟直通组的所有设备。中间以英文逗号隔开。自己的设备自己替换。

给设备加入信任列表

echo "options vfio_iommu_type1 allow_unsafe_interrupts=1" > /etc/modprobe.d/iommu_unsafe_interrupts.conf

禁止PVE加载驱动

为了保证硬件在直通前不会被宿主机占用,需要给显卡以及其他使用的模块提前禁用。保证显卡在PVE开机后不会被宿主机使用

查看设备需要什么驱动

lspci -vvv -s 01:00
1:00.0 VGA compatible controller: NVIDIA Corporation GM206 [GeForce GTX 960] (rev a1) (prog-if 00 [VGA controller])
		...
       	 Kernel driver in use: vfio-pci
         Kernel modules: nvidiafb, nouveau
         
01:00.1 Audio device: NVIDIA Corporation GM206 High Definition Audio Controller (rev a1)
		...
		Kernel driver in use: vfio-pci
         Kernel modules: snd_hda_intel

可以看到设备 1:00.0 使用了 nvidiafb, nouveau 设备 01:00.1 使用了 snd_hda_intel

编辑 nano /etc/modprobe.d/pve-blacklist.conf 将需要禁用的模块加入

#直通AMD显卡,禁用以下模块
blacklist radeon
blacklist amdgpu
#直通NVIDIA显卡,禁用以下模块
blacklist nvidiafb
blacklist nouveau
blacklist nvidia
#直通INTEL核显,禁用以下模块,注意!如果使用Gvt-G,请不要禁用以下模块模块
blacklist snd_hda_intel
blacklist snd_hda_codec_hdmi
blacklist i915

更新配置

root@pve:~#  update-initramfs -u
update-initramfs: Generating /boot/initrd.img-5.15.35-1-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
#重启使配置生效
root@pve:~#  reboot

查看模块是否被正常加载

root@pve:~# lsmod | grep vfio
vfio_pci               57344  1
vfio_virqfd            16384  1 vfio_pci
irqbypass              16384  11 vfio_pci,kvm
vfio_iommu_type1       36864  1
vfio                   36864  5 vfio_iommu_type1,vfio_pci

使用 dmesg 查看是否有错误

dmesg | grep "No more image"

如果输出 No more image in the PCI ROM 那可能需要按上述操作把核显驱动也禁了

显卡直通 代码 43 解决

尽量使用最新版的NVIDIA驱动程序

echo "options kvm ignore_msrs=1 report_ignored_msrs=0" > /etc/modprobe.d/kvm.conf

参考教程原帖

  • 佛西博客 - PVE开启硬件直通功能 (buduanwang.vip)
  • 佛西博客 - Proxmox VE pve7.0安装破解内核,解决iommu分组问题 (buduanwang.vip)
  • PVE开启硬件显卡直通功能 - 知乎 (zhihu.com)
  • PVE直通核显 - 郑羊羊咩的窝 (zyyme.com)
  • PVE直通核显给虚拟机-教程区-Proxmox中文社区 - Proxmox Virtual Environment - Proxmox Mail Gateway
  • https://www.huakings.cn/post/180.html
  • 【司波图】PVE下针对macOS的显卡直通设置(虚拟机装黑果果03_完结)_哔哩哔哩_bilibili
  • Proxmox VE 直通显卡方案及解决N卡Code43 | 晓羽笔记 (xylog.cn)
  • PCI(e) 直通 - Proxmox VE

GVT-G 共享 核显

编辑 grub引导配置

打开grub配置文件

vim /etc/default/grub

找到这一行

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

就像这样

GRUB_CMDLINE_LINUX_DEFAULT="quiet i915.enable_gvt=1"
# PVE
群晖 6.2.3 修改root密码
Docker 安装
  • 文章目录
  • 站点概览
CieyGet

CieyGet

36 日志
13 分类
23 标签
RSS
Creative Commons
© 2023 CieyGet
0%