Iris Xe在PVE7中配置HuC开启低电压模式的硬件编码器

前面两文已经讲述了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平台特征默认启用?最早的内核
9APL、SKL、KBLHUC认证4.11
9CFLHUC认证4.15
11ICL、JSL、EHLHUC认证5.4
12TGL、RKL、ADL-SHUC认证5.6
12ADL-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

2 thoughts on “Iris Xe在PVE7中配置HuC开启低电压模式的硬件编码器

  1. 回复
    lee - 2022年8月2日

    开这个是为了省电吗?谢谢分享

    1. 回复
      风の语 - 2022年8月4日

      是为了转码更效率

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Scroll to top