🧭unRAID 11~13 代CPU开启 SR-IOV 实现虚拟机核显直通
00 分钟
2023-3-30
2024-6-10
type
status
date
slug
summary
tags
category
icon
password
💡
2024-06-10 常见问题补充:我在 6.常见问题 中额外补充了最新的一些注意事项,如果读者无法正常实现核显的 SR-IOV 功能,可以参考我新补充的信息。

1. 背景

Intel 从11代 CPU 开始不再支持 GVT-g,也就是说以前直通核显的方法不再适用于 11 代开始的 CPU 。但 Intel 却没有同步跟进 Linux 下的驱动来让用户去实现核显直通,这个问题被诟病了很久。虽然说在这篇文章之前就已经有网友能够通过一些手段来实现这个目的,但是对于一般的用户而言这种方式门槛很高(包括编译 Linux 内核、安装相关的 Linux 驱动等较为高级的一些操作),并且也不是在 unRAID 上去实现的。
但是就在2023年3月20日左右,一位国内的大佬 @zhtengw 开发了一款插件来实现了这一目的,插件的本质作用在它会下载已经被编译好的支持 SR-IOV 驱动的 Unraid 内核文件并自动配置相关的核显 SR-IOV 参数,本篇文章就教大家如何使用这一插件来完成虚拟核显的直通。

2. 核显虚拟化技术介绍

不同代的 CPU 使用的核显虚拟化技术可能不一样,你可以通过以下链接查看自己的 CPU 使用何种核显虚拟化技术:
需要注意的是,如果你用的 CPU 是 11 代且代号为 Rocket Lake,如果出现在下列列表中,那么此系列的 CPU 不具备 SR-IOV 技术,使用的依然是传统的 GVT-G 虚拟化技术,这意味着你无法使用本篇文章介绍的方法进行核显虚拟化。
不具备 SR-IOV 技术的 11 代 CPU(点击展开)

2.1 什么是 SR-IOV

notion image
在 Intel 的官网介绍中(链接),SR-IOV 技术仅搭载在 11 代及以上 CPU ,并且此项技术将取代原先的 GVT-G (英特尔® Graphics Virtualization Technology –g)核显虚拟化技术。
那么什么是 SR-IOV,为什么 Intel 要用这项技术取代原先核显直通的技术?

2.2 SR-IOV 技术说明

SR-IOV 是 Single Root I/O Virtualization 的缩写。SR-IOV 能够让一个 PCIE 设备向操作系统提供多个虚拟设备(也就是将一个 PCIE 物理设备虚拟化成多个设备来使用,就好像分身)。
SR-IOV 实际上是 PCI Express 提供的功能。
在这种方式中以物理方式存在的设备称为 Physical Function (PF),通过 SR-IOV 虚拟添加的设备称为 Virtual Function (VF)。
我们最常在网卡设备上见到此项技术,比如说 Intel 的很多万兆网卡支持 SR-IOV 功能。(点击展开)

2.3 为什么要用 SR-IOV 技术替代 GVT-G

一方面是因为前者的效率和性能更高,并且相比 GVT-G 而言,SR-IOV 是行业通用的标准,Intel 采用此标准可以让各家厂商降低兼容门槛,对大家来说都是一件好事。

3. 准备工作:开启主板 BIOS 的 SR-IOV 功能

SR-IOV 功能要正常使用,首先要保证主板的 BIOS 中开启了 SR-IOV 的功能,如下图所示:
💡
不同的主板 BIOS 设置有所不同,即使是同一个主板不同的 BIOS 版本可能也会有区别,所以大家如果找不到关于 SR-IOV 的设置,那么可以去查看自己主板的官网说明或者官方提供的主板使用手册。另外,没有 SR-IOV 的相关设置不代表主板没有这项功能,有可能主板已经默认开启了,但没有给到用户开启和关闭的选项而已。
需要说明的是,有些主板需要开启 Re-Size BAR支持 这个功能之后才会显示 SR-IOV 功能开关,比如本图片中的 BIOS 。
需要说明的是,有些主板需要开启 Re-Size BAR支持 这个功能之后才会显示 SR-IOV 功能开关,比如本图片中的 BIOS 。
除了 BIOS 中的 SR-IOV 功能,一般来说还需要保证 Intel 的 VT-DVT-XHVMIntel虚拟化技术Intel Virtualization Technology 等) 和 IOMMU 功能开启,否则 unRAID 无法正常使用虚拟化技术,具体可参考下图:
notion image
notion image
notion image

4. 安装 Intel i915 SR-IOV

应用市场搜索 intel i915 sr iov 插件,如果你搜出来两个一样名字的插件(如下图),那请按照下面的说明选择安装。
这两个插件的作用是一样的,区别只是说原作者 zhtengw 的插件并没有对 ≥ 6.12.4 版本的 Unraid 编译相应的内核文件,所以就有其他的开发者接手了这一工作,因此你只需要根据下面的提示选择对应的插件安装即可。
  • 如果你的 Unraid 版本 ≥ 6.12.4 版本,那么选择 giganode 作者的插件进行下载,如下图所示:
    • notion image
      notion image
  • 如果你的 Unraid 版本 < 6.12.4 那么请选择 zhtengw 作者的插件:
    • notion image

4.2 绑定虚拟核显设备到 VFIO-PCI

重启之后,正常情况下就会在系统设备中看到虚拟化出来的设备,例如:
notion image
此时需要将相应的设备绑定,然后再重启一次 unRAID
💡
2024-03-20 补充:其实这里是不需要将虚拟核显进行 vfio-pci 绑定的,如果你在绑定之后遇到了虚拟机无法自动启动的情况,那么请取消绑定,具体细节请看下文的 “6.5 虚拟机无法自动启动,且提示 vfio-pci-errors ” 。
notion image
绑定 VFIO-PCI 的方法:勾选设备前面的方框,然后点击“在引导时对 VFIO 选择了绑定”,最后重启 unRAID 即可。
请注意,不要将核显设备绑定到 VFIO-PCI,比如:
如果你已经绑定了,请取消绑定:取消勾选,然后点击“在引导时对 VFIO 选择了绑定”,最后重启 unRAID 生效
如果你已经绑定了,请取消绑定:取消勾选,然后点击“在引导时对 VFIO 选择了绑定”,最后重启 unRAID 生效

4.4 创建虚拟机并直通虚拟设备

创建虚拟机时在显卡设备中选择虚拟的核显然后启动虚拟机:
💡
注意看下图,所选择核显设备的 PCI BUS 是 00:02.1 ,这里末尾的数字 .1 代表的是虚拟化出来的第一个虚拟核显设备,如果你虚拟出来多个,那么你会看到注诸如 00:02.200:02.3 等对应的设备,你选哪一个都是可以的,只要虚拟机彼此之间不冲突就行。但是请注意的是,不要选择 00:02.0,因为这个设备是实体核显设备,如果你选择了,那么就意味着你将物理核显给直通了,这会导致报错。
notion image
进入虚拟机之后,比如说 Windows 虚拟机,需要在系统中安装好核显驱动(Intel核显驱动下载地址),安装好之后即可正常使用核显:
notion image

5. 其他参考资料(持续更新)

这里有另一篇同样关于本主题的恩山教程:

6. 常见问题(持续更新)

Q:为什么我的 CPU 无法开启 SR-IOV 功能?

首先,需要明确的是,核显的 SR-IOV 功能只在 11、12、13 和 14 代 Intel CPU 受到支持。如果你的 CPU 是 11 代且代号为 Rocket Lake,那么你需要在这里确认一下你的 CPU 在不在这个列表里 —— 如果在,那说明你的 11 代 CPU 没有 SR-IOV 功能:
notion image
其次,请确认你的主板开启所有相关的虚拟化功能。例如 SR-IOVVT-dVT-xIOMMU 等,具体请看 3. 准备工作:开启主板 BIOS 的 SR-IOV 功能 的内容。
最后,确认 Unraid 系统内核文件没有问题。如果你已经确认你的 CPU 支持 SR-IOV,并且主板所有相关的虚拟化功能都已经打开,但是 Unraid 系统内依然提示你的 CPU 不具备 SR-IOV 功能,那么很有可能你的 Unraid 系统内核文件有问题,建议重新安装一遍 Unraid 系统。
这里说个案例,有位朋友找到博主,告诉我他的 i3-12100 在系统中提示不具备 SR-IOV 功能(但实际上是具备的),安装的 SR-IOV 插件提示 Not Supported ,并且主板所有虚拟化功能都已打开:
插件提示核显设备不具备 SR-IOV 功能
插件提示核显设备不具备 SR-IOV 功能
并且在系统设备中,核显 PCI 设备参数也没有提示具有 Single Root I/O Virtualization(SR-IOV) 功能:
notion image
正常情况下,如果核显具备 SR-IOV 功能,那么会在设备参数中看到相应的 Capabilities 信息,如下图所示:
notion image
最后我建议这位朋友重新安装 Unraid 系统,重装之后就正常了。
排查过程记录
在这次案例中,我尝试了以下方法但依然无法解决问题:
  • 重装 SR-IOV 插件;
  • 删除 modprobe.d 的 blacklist 文件;
  • 使用安全模式启动 Unraid ;
  • 检查 BIOS 设置。
最后通过查看系统内核日志,看到一行 i915: loading out-of-tree module taints kernel 的信息,如下:
猜测有可能是因为这位朋友替换过 Unraid 系统内核文件,或者其他的某些原因导致系统内核文件产生变动,导致原 Unraid 内核文件中关于 i915 的驱动与原内核文件不一致,所以我建议这位朋友重新安装一下 Unraid 系统,最后也确实因此解决了问题。
重装 Unraid 并保留系统配置的教程看这里:常见问题-3:如何安装/重装/更换unRAID系统(附安装包下载地址)

Q:能否实现虚拟化 GPU 的视频输出?

A:不能。
notion image

Q:已经按照流程完整的配置好了,但就是 Windows 虚拟机系统中提示核显驱动 43 错误。

如下图所示:
由于设备有问题,Windows 已将其停止。(代码 43)
由于设备有问题,Windows 已将其停止。(代码 43)

办法一:重新安装驱动

请尝试重新安装核显驱动(Intel核显驱动下载地址),并且安装的时候选择清洁安装

办法二:更改虚拟机配置

如果重新安装了核显驱动之后依然出现 43 驱动问题,那么建议更改虚拟机配置,如下所示:
  • 将机型改为 i440fx
  • BIOS 更改为 OVMF (需要说明的是,更改 BIOS 类型需要重新安装系统,否则更改了 BIOS 之后直接启动系统是无法启动的,当然也有办法不重新安装系统的情况下实现 BIOS 的更换,不过博主没研究,大家自行了解一下)。
notion image

办法三:使用 Windows 11 系统

如果你按照上述的办法依然无法解决问题,那么建议使用官方原版 Windows 11 系统(官方 Windows 11 镜像下载地址)进行尝试,尽量不要使用第三方的 Win 系统(例如别人精简后的系统),否则无法保证想要的结果
博主根据自身经验和先前一些其他人的经历,发现在使用 Windows 10 系统的情况下(例如 LTSC 2019),会出现核显驱动 43 问题,但是更换成 Windows 11 之后就没有这种情况。
如果你无法从官方正常下载 Windows 11 镜像,你也可以在博主的工具站中下载 Windows 官方镜像,点击这里

Q:虚拟机是否支持多个虚拟和弦设备直通?

对于 Linux 虚拟机没有限制,但是如果是 Windows 虚拟机直通多个 VF 设备就会出现 43 驱动错误。

Q:直通后的 Win 虚拟机分辨率低且无法调整该如何解决

💡
注意:如果你按照下面链接里的教程无法正常实现更改分辨率的效果,那么建议使用 Windows 11 进行尝试,具体原因参考上面的“Q:已经按照流程完整的配置好了,但就是 Windows 虚拟机系统中提示核显驱动 43 错误。”问题。
请参考下面的 B 站教程:

Q:虚拟机无法自动启动,且提示 vfio-pci-errors

问题的原因在于 SR-IOV 插件还没有将虚拟核显配置出来的时候,系统 vfio-pci 就先一步绑定了虚拟核显设备,但此时对应的设备又没有,所以就会提示报错,进而使用了虚拟核显设备的虚拟机就无法自启动。
notion image
如果遇到这个问题,那么你可以取消虚拟 GPU 的 vfio-pci 绑定(取消绑定实际上不不影响直通的):
notion image
取消之后重启 Unraid ,这时候虚拟机应该就可以自动启动了,而且报错也不会再有。

评论