Intel 11(Tigerlake)/12/13/14代SRIOV vGPU虚拟核显直通应用

2024-02-07 12,767 37

前言

春节假期老高正在享受天伦之乐,新视频等开春复工之后再录制发出

需要的小伙伴可以先看旧视频,操作流程基本一致

1、i915-sriov作者已经半年左右停更了。
2、曾经在23年4月做过n100机器的视频,其中使用的就是sriov核显演示。
(此文章更新了之前部分操作因为pve和内核的升级失效的问题)
3、有群友小伙伴建议我重新总结一下sriov虚拟核显的流程

总有小伙伴问两种核显直通的方式怎么选?直接放优缺点对比上来,各位小伙伴自行选择。

物理核显直通 vs SRIOV vGPU的优缺点对比:

优点缺点
物理核显直通1、性能强
2、支持物理显示输出
(VGA/DP/HDMI/Type-C)
3、兼容性好,不妨碍PVE升级。
独占(不支持直通给多个虚拟机)
直通后,PVE宿主不能同时用核显。
SRIOV虚拟核显直通可分为多个VF虚拟显卡,
给不同的虚拟机使用。
1、性能拆分(分成多个VF显卡具体如何分配性能不详)
如N100等不建议超过3个VF显卡,具有性能高核显的处理器可以分为最高7个);
2、不支持物理显示输出,虽可使用Todesk等软件远程桌面,但CPU占用率较高。在作为服务器的小主机上,让原本紧张的资源更加捉襟见肘。
3、对内核header依赖(6.1-6.5),PVE升级受限。
4、兼容性稳定性一般,部分流媒体软件硬解/转码功能受限。

以下适用于PVE8,以N100为例

在操作之前,首先检查BIOS中开启一下功能:

  • Intel VMX虚拟化技术
  • VT-d
  • SR-IOV
  • Above 4GB MMIO BIOS assignment
  • IOMMU

一、PVE安装:
安装完成。
启动PVE,进入WebUI

二、进入PVE后基础设置:
1、PVE8 换源(如已做过请忽略):
(1)国内清华源速度较快(南方可选择中科大较快)
将自带的源文件sources.list备份

cp /etc/apt/sources.list /etc/apt/sources.list_bak

编辑sources.list

nano /etc/apt/sources.list
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware

(2)编辑企业源,增加pve无订阅源

nano /etc/apt/sources.list.d/pve-enterprise.list
将其中原有的proxmox句首加# 注释掉,变为:#deb https://enterprise.proxmox.com/debian/pve bookworm pve-enterprise
添加以下清华源:
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian/pve bookworm pve-no-subscription

ctrl+x y 回车保存退出

添加pve无订阅源

nano /etc/apt/sources.list.d/pve-no-subscription.list
#粘贴以下pve无订阅源
deb https://mirrors.tuna.tsinghua.edu.cn/proxmox/debian bookworm pve-no-subscription

ctrl+x y 回车保存退出

(3)修复源401错误(如无401报错可忽略此条)

nano /etc/apt/sources.list.d/ceph.list

将其中原有的proxmox句首加# 注释掉,变为:#deb http://download.proxmox.com/debian/ceph-quincy bookworm no-subscription

#添加中科大ceph源:
deb https://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bookworm no-subscription
#更新
apt update && apt dist-upgrade -y

2、顺便把LXC更换为清华源:

#备份APLInfo.pm
cp /usr/share/perl5/PVE/APLInfo.pm /usr/share/perl5/PVE/APLInfo.pm_back
#更换为清华源:
sed -i 's|http://download.proxmox.com|https://mirrors.tuna.tsinghua.edu.cn/proxmox|g' /usr/share/perl5/PVE/APLInfo.pm
#重启服务后生效
systemctl restart pvedaemon.service
#重启
reboot

三、升级内核、headers和firmware

在以上操作升级完成并重启之后,查看目前内核版本

uname -a

i915-sriov目前支持6.1~6.5内核,根据以上uname-a反馈信息,注意调整以下header安装与其相同的版本。

比如反馈的内核版本为:Linux pve 6.5.11-4-pve

安装header与以上反馈的当前内核版本相同,命令行如下:

apt update && apt install pve-headers-$(uname -r)
#注意如遇报错,可尝试直接执行apt install pve-headers-6.5(与uname-a返回的内核大版本号一致)
#重启
reboot

四、编译i915-sriov驱动

安装git工具及dkms

apt install -y git build-* dkms

拖库

git clone https://github.com/strongtz/i915-sriov-dkms.git
cd i915-sriov-dkms
nano dkms.conf

#第一行改为PACKAGE_NAME="i915-sriov-dkms"
#第二行改为PACKAGE_VERSION="6.1"
此处强迫症可以改为6.5,因向下兼容使用默认的6.1也可

ctrl+x y 回车保存退出

添加安装sriov模块

在i915-sriov-dkms目录下,运行

dkms add .
dkms install -m i915-sriov-dkms -v 6.1

经过漫长等待完成后,检查安装是否成功,运行

modinfo i915|grep vf 

反馈如下表示成功:

parm:           max_vfs:Limit number of virtual functions to allocate. (0 = no VFs [default]; N = allow up to N VFs) (uint)

如无反馈安装不成功请删除此模块,重新安装,直至有以上成功反馈信息。

dkms remove -m i915-sriov-dkms -v 6.1

dkms install -m i915-sriov-dkms -v 6.1

五、设置直通和i915guc

nano /etc/default/grub

在quiet后添加intel_iommu=on i915.enable_guc=3 i915.max_vfs=7
改成GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on i915.enable_guc=3 i915.max_vfs=7"
ctrl+x y 回车保存退出

更新grub和initramfs

update-grub
update-initramfs -u

六、安装sysfsutils,对新手友好方便对VF核显数量设置(不建议使用开机自启脚本rc.local,增加不必要的风险)

apt install -y sysfsutils

添加以下VFs参数,N100建议最高3,可自定义数量,建议按需设置,设置1个时性能最强。

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 3" > /etc/sysfs.conf 
重启
reboot

lspci检查直通的虚拟显卡,显示如下:
00:02.0 VGA compatible controller: Intel Corporation Device 46d1(物理核显)
00:02.1 VGA compatible controller: Intel Corporation Device 46d1(虚拟核显1)
00:02.2 VGA compatible controller: Intel Corporation Device 46d1(虚拟核显2)
00:02.3 VGA compatible controller: Intel Corporation Device 46d1(虚拟核显3)

注:物理核显02.0不能直通出去(可以映射给LXC),否则物理核显本体被独占,所有虚拟核显消失。

虚拟核显越多,性能越低。只需要1个时,虚拟1个核显即可。

七、将虚拟核显添加到虚拟机中,如Win10/11
硬件内注意事项:
内存:4GiB (或者更多)
CPU类别:host (硬解建议给全部核心,比如N100 4cores)
BIOS:OVMF(UEFI)
显示:默认标准 核显直通后可改为无(none) *注意选择无(none)时在虚拟机控制台界面会报错【VM 100 qmp command 'set_password' failed - Could not set password】这是正常的。如此长时间报错导致虚拟Win死机时,可以改为标准VGA(std)(见pve官方论坛)
机型:pc-q35
直通SRIOV核显:勾选主GPU、ROM-Bar,不要勾选所有功能

PCI设备虚拟核显:安装Win时建议不添加,Win装完关机添加虚拟核显时不要勾选主GPU,安装驱动并重启后不报错工作正常后,可以更改为主GPU,并且可以添加虚拟vGPU显示虚拟桌面(如VirtIO-GPU)。

注意添加PVE虚拟vGPU,可能导致流媒体软件时受到2个显卡影响,从而导致调用显卡渲染器失败。只需要删掉虚拟vGPU显卡即可。

八、配置虚拟机conf文件

因为Intel的驱动将pciid固定到02.0 ,我们使用02.1/2/3等sriov核显时,不能被正常驱动,即便是直通的sriov核显中勾选了PCI-Express显示正常驱动,但是也会因为pciid的原因导致一些软件工作不正常,比如流媒体Jellyfin Emby等无法硬解和转码。

我们需要在虚拟机conf中把直通的核显指定地址

nano /etc/pve/qemu-server/虚拟机序号.conf
添加:
args: -set device.hostpci0.addr=02.0 -set device.hostpci0.x-igd-gms=0x2

ctrl+x y 回车保存退出

Windows虚拟机

为了提高Win虚拟机的性能,建议安装VirtIO的全部驱动,iso下载地址:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso


英特尔® Arc™ 和锐炬® Xe 显卡 (intel.cn)
https://www.intel.cn/content/www/cn/zh/download/785597/intel-arc-iris-xe-graphics-windows.html

参考引用:
https://github.com/strongtz/i915-sriov-dkms

如有转载或部分引用请保留老高频道及视频连接,注明出处,谢谢合作!


感谢您的关注订阅🙏,三连投币转发 充电是对我最大的支持和鼓励!🙏我会继续努力做出更多的高质量视频!加爱折腾的群和讨论组:https://diyforfun.565856.xyz/ 爱折腾的老高欢迎您加入和有着共同折腾爱好的朋友们一起:折腾的开心!开心的折腾!

转载原创文章请注明,转载自: 爱折腾的老高博客 https://diyforfun.cn

相关文章

骑上飞牛要上天?极摩客G9 N150全闪NAS/迷你电脑深度全面测试
丐版全万兆交换机能用吗?【万兆局域网折腾记-5】4光口+4电口全万兆交换机实机体验
飞牛FD5硬盘柜怎么样?新晋NAS厂商飞牛的第一次试水周边产品深度拆解试用
精致办公影音小钢炮~MAXHUB领效MI21 i5-12450H迷你电脑深度测试
给Macmini M4配件搞下整洁,Mac做生产力又不想变刺猬!阿卡西斯雷电4扩展坞21合1 DS-9007拓展坞试用体验
和Macmini M4能掰掰手腕?AMD AI9 HX370又添新旗舰,极摩客EVO-X1深度测试,含Oculink的HX370梦幻组合

评论(37)

    1. @codingiran Linux下应该很简单。估计不挂vbios可能都行。和win的大同小异,具体你可以自己试试。hdmi音频有可能不出声。貌似11代intel的U设置了HD Audio Configuration之后原本虚拟Win下HDMi音频没有的问题可以修复。但是改了设置后Linux可能没hdmi音频了。

  1. 老高好~我跟着您之前的教程把显卡直通给了win,但最近发现win和linux下同时需要显卡(就一个12代核显)
    请问这种情况下是只能使用sriov了吗?

      1. @爱折腾的老高 老高好~想请教一下,我有一个1135g7的nuc,想Windows和nas通过sroiv瓜分xe核显,但是还想装个rx6600独显,把黑苹果通给它,这三个系统可以这种方式同时直通吗?

    1. @wander 他们有折腾虚拟显示的。或多或少有点问题。如果你客户端性能够强网速够快,可以用微软远程桌面,照样可以调用核显。看网页啥的都可以硬解。如果只有1个显卡的需求,还是推荐用物理核显直通的方式。这样稳定性、性能更强。

  2. 老高好,我按照上面的步骤对我的 Intel 11(Tigerlake) 进行核显直通,但是一直无法在启动时成功使用核显,表现为在设备管理器里驱动异常和任务管理器里看不到GPU,这是上面原因呢?多次尝试都没有成功实现核显直通

    1. @liuyd 这篇是sriov虚拟核显直通。首先确认你的cpu是11代tigerlake及以上的 intel有核显的cpu。然后在bios里开启文章开头的那些功能参数。然后才是下面一步一步去做。

  3. 老高好,AMD的核显是不是就over了? 能不能出一期PVE下使用无线网卡做管理口的教程,看了视频买了个GMK M6,不想再买USB网卡了

    1. @Jacksonchow 不建议用无线网卡做管理口,因为无线网络的不稳定性决定的,像障碍物、同频段信号干扰、乃至温度、湿度等都会对无线信号造成影响。而管理口作为虚拟机系统的管理之用,属于重中之重,整个虚拟机虚拟交换都依赖管理口和绑定其上的虚拟交换虚拟网桥来实现的。建议使用有线网卡作为管理口接交换机,使用起来比较方便。无线网卡可以直通给其他虚拟机如Win来使用的。

  4. 7月19日,作者近期正在更新此项目,我按照作者文档测试了下,最新pve内核直通windows报错,lxc调用主核显和分出来的核显使用不了qsv,vaapi正常但转码非常慢,问题应该还挺大的。

    1. @忧郁的二狗子 好消息。是作者又要更新了。坏消息是问题还是一堆。还是用物理核显直通吧。又稳性能又强,显示输出也舒服。sriov除非是加入到Linux内核更新里去。否则以后每次升级Linux可能sriov又不兼容了。

      1. @爱折腾的老高 感谢老高的回复,今天又折腾了一天,目前直通vm虚拟机正常工作了,分别·测试了debian和windows,但是主核显lxc下工作仍然存在一些问题。sriov确实稳定性一般,我也是个人需要多张sriov出来的显卡工作,看来以后只能尽可能避免升级系统了。

  5. 不管直接直通还是SRION,windows安装完驱动后设备提示,有问题代码43,以前我用n6000时就有这个问题,那时候解决办法是使用windows更新里面的驱动,n100在windows更新里面没有驱动,不知道怎么搞了

    1. @hao args没设置好。再就是vbios确认没问题。这样才不会错误代码43.正常设置好之后驱动就可以自行官网下载安装新版就可以了。sriov不建议搞了,问题太多

  6. 大佬有尝试在kvm+virt-manager平台下做11代Tiger laker平台的sriov直通么,我在ubuntu 22.04下按照git上https://github.com/strongtz/i915-sriov-dkms的标准步骤做,最后win11虚拟机里能看到显卡,但是报驱动43错误,主机内核6.5,这种该如何解决?(直通是直接在virt-manager中添加pci设备做的)

  7. 老哥,用 zfs raid1 安装的pve,引导方式改变为systemd-boot,能不能出一下相关的教程呀,不是很懂

  8. 机器铭凡 ms01
    按照流程 一顿操作 还是 只有一个 lspci | grep “VGA”
    00:02.0 VGA compatible controller: Intel Corporation Alder Lake-P Integrated Graphics Controller (rev 0c)

    update-initramfs -u
    update-initramfs: Generating /boot/initrd.img-6.8.12-4-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.
    不知道和这个是否有关
    另外 bios 是否需要设置什么?

    1. @iceqi 没关系,你没开启SRIOV,看文章开头都写了:物理核显直通 vs SRIOV vGPU的优缺点对比:SRIOV vGPU的玩法缺点的第三条。依赖内核,PVE不能随便升级。发文章那会还是PVE8,内核6.2左右吧。现在都PVE8.3内核6.8.12-4。要么等SRIOV i915驱动作者更新,要么自己编译内核。

  9. 内核使用的是6.8.8
    所有都装好了,但是就是不出虚拟核显
    root@pve:~# dmesg | grep i915
    [ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-6.8.8-2-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7
    [ 0.070259] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.8.8-2-pve root=/dev/mapper/pve-root ro quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7
    [ 7.574508] i915: module verification failed: signature and/or required key missing – tainting kernel
    [ 8.146033] i915 0000:00:02.0: [drm] VT-d active for gfx access
    [ 8.190580] i915 0000:00:02.0: vgaarb: deactivate vga console
    [ 8.190688] i915 0000:00:02.0: [drm] Using Transparent Hugepages
    [ 8.192128] i915 0000:00:02.0: vgaarb: VGA decodes changed: olddecodes=io+mem,decodes=io+mem:owns=io+mem
    [ 8.193580] mei_hdcp 0000:00:16.0-b638ab7e-94e2-4ea2-a552-d1c54b627f04: bound 0000:00:02.0 (ops i915_hdcp_ops [i915])
    [ 8.210093] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/icl_dmc_ver1_09.bin (v1.9)
    [ 8.219661] i915 0000:00:02.0: [drm] GT0: GuC firmware i915/ehl_guc_70.1.1.bin version 70.1.1
    [ 8.219679] i915 0000:00:02.0: [drm] GT0: HuC firmware i915/ehl_huc_9.0.0.bin version 9.0.0
    [ 8.232675] i915 0000:00:02.0: [drm] GT0: HuC: authenticated for all workloads!
    [ 8.233019] i915 0000:00:02.0: [drm] GT0: GUC: submission enabled
    [ 8.233021] i915 0000:00:02.0: [drm] GT0: GUC: SLPC disabled
    [ 8.330955] [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 1
    [ 10.280726] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
    [ 10.282438] fbcon: i915drmfb (fb0) is primary device
    [ 10.347031] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device

    1. @babyvox 目前暂不推荐玩SRIOV核显了。遇到的情况可能不少。intel那边从14代开始又不支持SRIOV了。也就是说目前只有11代的TigerLake,12代AlderLake和13代马甲支持SRIOV。后面估计都没了。

  10. 现在作者已经显示支持6.1-6.11了,Linux i915 driver (dkms module) with SR-IOV support for linux 6.1 ~ linux 6.11

    1. @babyvox PVE现在已经到了8.3.1,内核已经到了Linux 6.8.12-4-pve了。一天SRIOV不加入Linux内核更新,这个进度一直追不上。也就是说不能随便升级PVE和内核。更新了可能就会有问题。所以我教程没有再更新,等后面内核里加入SRIOV之后再说吧。

发布评论