前面两文已经讲述了LXC容器中核显的启用及NFS网络磁盘的挂载。但是即便已经成功安装了Intel闭源核显驱动,核显的所有性能也未必已经全部发挥了出来。从Jellyfin硬解设置中我们可以看出要启用低电压模式的硬件编码器需要Linux内核开启HuC固件。
虽然我们提的时候只是在说HuC,但是对于英特尔显卡而言它有三个图形扩展功能,分别是:
图形微控制器 (GuC)
图形微 (µ) 控制器 (GuC) 旨在卸载通常在主机驱动程序上运行的一些功能。此功能包括:
- HEVC/H.265 micro (µ) 控制器 (HuC) 的认证
通过 iHD Intel 媒体驱动程序启用 HuC 编解码器加速扩展(如下所述)。
- 低级图形上下文调度
GuC 上下文调度操作将包括确定接下来要运行哪个上下文,将上下文提交给下一个可用引擎的命令流送器,以及根据需要抢占和重新提交现有上下文。通过 GuC 选择要提交的上下文和要提交的实际引擎实例,它还负责检测挂起和启动引擎重置。
- 电源管理
在执行调度时,GuC 负责跟踪繁忙度并做出频率和功率门控决策。
用法
GuC 最初是在 Gen9 设备中引入的,随着时间的推移将引入上述功能。引入并正式支持的第一个功能是提供 HuC 身份验证。最近,引入了提交/调度和电源管理。这种支持是特定于平台的,即使可能,也不建议启用不受支持的功能,这些功能被视为不安全的内核选项,会污染内核。
各平台官方支持的 GuC 如下表所示。请注意,在 ADL-P 之前,默认情况下不启用,必须通过内核参数启用。
Gen | 平台 | 特征 | 默认启用? | 最早的内核 |
9 | APL、SKL、KBL | HUC认证 | 不 | 4.11 |
9 | CFL | HUC认证 | 不 | 4.15 |
11 | ICL、JSL、EHL | HUC认证 | 不 | 5.4 |
12 | TGL、RKL、ADL-S | HUC认证 | 不 | 5.6 |
12 | ADL-P+ | HUC认证和GuC提交和电源管理 | 是 | 5.14 |
通过设置内核模块参数启用GuC提交和电源管理:i915.enable_guc=1
仅通过设置内核模块参数启用 HuC 身份验证:i915.enable_guc=2
将两个功能结合在一起:i915.enable_guc=3
请注意,在内核 4.16 之前,需要通过设置启用 HuC 身份验证:i915.enable_guc_loading=1
有关详细信息,请参阅https://www.kernel.org/doc/html/latest/gpu/i915.html#guc上的内核文档。
HEVC/H.265 微控制器 (HuC)
HEVC/H.265 micro (µ) 控制器 (HuC) 将一些媒体功能从 CPU 卸载到 GPU,并由 iHD Intel 媒体驱动程序使用。这些包括但不限于比特率控制和标头解析。例如在比特率控制的情况下,驱动程序在每一帧编码通道的开始调用HuC,编码比特率由HuC完成的计算来调整。HuC 硬件和编码硬码都驻留在 GPU 中。使用 HuC 将节省不必要的 CPU-GPU 同步。请注意,需要 GuC 才能启用 HuC 的加载,如上所述。
请参阅https://github.com/intel/media-driver 了解有关功能的最新详细信息以及可用的平台和内核版本。
显示微控制器 (DMC)
DMC 提供额外的图形低功耗空闲状态。它提供了独立于操作系统/内核在这些低功耗状态下保存和恢复显示寄存器的能力。
那么,办法就很清晰了,我们只需要启用内核参数i915.enable_guc=3
,那么HuC及DMC也会被联动启用。以下就是详细的启用步骤:
1、安装Intel核显驱动及vainfo;
apt update && apt install intel-media-va-driver-non-free vainfo
2、下载最新的三件套固件至/usr/lib/firmware/i915
;
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
备注:我的软路由CPU是i7-1165G7,属于TigerLake平台,因此下载tgl开头的固件。这里需要特别提醒,我一开始只下载了最新的bin固件,但是安装以后重启验证却显示GuC固件缺失开启失败。因此,我猜测不一定最新的GuC就一定会匹配最新的HuC和DMC。稳妥起见的话,可以将所有tgl固件全部下载,让系统自己选择最适合的固件来启用。
3、将内核参数写入显卡驱动配置文件;
echo "options i915 enable_guc=3" > /etc/modprobe.d/i915.conf
备注:pve上安装核显驱动之后可能会没有此路径及配置文件,手动创建即可。
4、更新内核;
root@pve:~# update-initramfs -u update-initramfs: Generating /boot/initrd.img-5.15.35-2-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.
5、重启pve,验证HuC加载情况。
root@pve:~# dmesg | grep i915 [ 4.350483] i915 0000:00:02.0: [drm] VT-d active for gfx access [ 4.350489] fb0: switching to i915 from simple [ 4.350622] i915 0000:00:02.0: vgaarb: deactivate vga console [ 4.352171] i915 0000:00:02.0: vgaarb: changed VGA decodes: olddecodes=io+mem,decodes=io+mem:owns=io+mem [ 4.357627] i915 0000:00:02.0: [drm] Finished loading DMC firmware i915/tgl_dmc_ver2_12.bin (v2.12) [ 5.022357] i915 0000:00:02.0: [drm] failed to retrieve link info, disabling eDP [ 5.151714] i915 0000:00:02.0: [drm] GuC firmware i915/tgl_guc_62.0.0.bin version 62.0 submission:enabled [ 5.151716] i915 0000:00:02.0: [drm] GuC SLPC: enabled [ 5.151717] i915 0000:00:02.0: [drm] HuC firmware i915/tgl_huc_7.9.3.bin version 7.9 authenticated:yes [ 5.152233] i915 0000:00:02.0: [drm] GuC RC: enabled [ 5.158722] [drm] Initialized i915 1.6.0 20201103 for 0000:00:02.0 on minor 0 [ 5.160232] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915]) [ 6.521572] fbcon: i915drmfb (fb0) is primary device [ 6.604884] i915 0000:00:02.0: [drm] fb0: i915drmfb frame buffer device
开这个是为了省电吗?谢谢分享
是为了转码更效率