前言

手上有台搭载 13700h 的绝影 14 ,注意到这机子的 System Agent 功耗挺离谱的,即使是空载也能够轻松达到 4w 左右,这显然是偏高了。当年的 9750h 可是能把 uncore 轻松压在 1w 出头,像 8265u 这种低压处理器更是能把 uncore 压在 1w 以内。不知道英特尔这几年是开了个什么倒车,12 代以后 uncore 功耗似乎就进入了起飞的状态,即使是低压 u 也无法回到当年的水平了,希望换装 SOC-Tile 的 Meteor Lake 能够对此有实打实的改进吧。

当年的 8265u :

所以,也是时候研究一下有没有能够压制 System Agent 功耗的方法了。

调校思路

System Agent 所包含的东西,本身还是比较明确的,主要是一些原本属于北桥的 CPU 外围,比如:内存控制器、DMI、显示引擎、媒体引擎、CPU 直连的 PCIe 、(雷电控制器?存疑)等。即使微星的 bios 本身可玩性很高,但是 h45 并不允许你降压,因此调校只能从“寻找未开启的省电特性”出发,或者给某些模块降降频之类的。

SAGV

看了一圈,很遗憾,有效的调校似乎只能对内存控制器下手,好在效果还是比较显著的。

先来看看目前是个什么情况:

可以看到,目前平均的空载 SA 功耗在 3.7w 左右,且空载时内存和内存控制器一直处于满血状态。

本身我对内存满血并没有什么怀疑,因为以前这东西也一直都是满血的。

直到我看到 bios 中内存控制器配置里有个选项叫 System Agent Geyserville ,wok 原来现在内存控制器也支持根据负载动态调频了。

借用英特尔文档里的话:

SAGV (System Agent Geyserville) is a way by which they SoC can dynamically scale
the work point (V/F), by applying DVFS (Dynamic Voltage Frequency Scaling) based
on memory bandwidth utilization and/or the latency requirement of the various
workloads for better energy efficiency at System-Agent. Pcode heuristics are in charge
of providing request for Qclock work points by periodically evaluating the utilization of
the memory and IA stalls.

SAGV(System Agent Geyserville)是 SoC 根据内存带宽利用率和/或各种工作负载的延迟要求,通过应用 DVFS(动态电压频率扩展)动态扩展工作点(V/F)的一种方法,以提高系统代理的能效。Pcode 启发式算法负责通过定期评估内存的利用率和 IA 滞后情况,为 Qclock 工作点提供请求。

解释一下:SAGV 功能可以为内存频率配置四个频点,分别被称为低/中/高/最大频率点,系统会根据对内存带宽/延时的需求,动态的在这四个频率点之间选择频率;对于每个频点,你还可以通过 gear 模式来指定内存控制器和内存时钟速度之间的分频比。

比如,对于 DDR5-4800 的内存,其时钟速度为 2400 MHz (因为 DDR 在一个时钟周期内可以传输两次数据),在 gear2 模式下,内存控制器的工作频率为 2400 / 2 = 1200 MHz ,而在 gear4 模式下,其工作频率为 2400 / 4 = 600 MHz降低内存控制器的工作频率能够肉眼可见的降低 SA 功耗,但同时也会带来延时的提升。

So ,给内存降频能够顺带降低内存控制器的频率,使用更高的分频比则能够进一步降低内存控制器的频率,从而降低 SA 功耗。

不看理论看疗效,先来试试给内存降频能够达到一个什么样的效果。

13 代 h45 平台的默认 SAGV 配置是这样的:

  • 低:2000 gear2,对应内存控制器 500 MHz 。
  • 中:3600 gear2,对应内存控制器 900 MHz 。
  • 高:4800 gear2,对应内存控制器 1200 MHz 。
  • 最大:5200 gear2,对应内存控制器 1300 MHz 。

我们不妨就用这几个频点试试看。

在 bios 中,通过将 SAGV 设置为 Fixed to xxx Point 即可将内存频率固定在某个频点,其中 1st 对应“低”,4th 对应“最大”。

以下是测试结果:

2000 gear2:

此时平均 SA 功耗为 2.56w。

3600 gear2:

此时平均 SA 功耗为 2.93w。

4800 gear2:

此时平均 SA 功耗为 3.45w。

5200 gear2(就上面的图):

此时平均 SA 功耗为 3.75w。

可以看到疗效还是很显著的,这种操作最多能使 SA 功耗降低 1w 有余。

所以,快速降低 SA 功耗的方法:打开 bios 中的 SAGV 选项即可,别的啥也不需要动。

在这种“自动模式”下,由于动态调频机制的存在,SA 功耗并不会降到维持 2000 gear2 时的那么低,但也能够有一个比较明显的下降:

平均 3.03w ,比关闭 SAGV 降低了约 0.72w。

进一步的 SAGV

总的来说,我对默认情况下的 SAGV 并不是很满意,因为它比之前最低的 2000 gear2 模式高了约半瓦。

所以我们还可以进一步的手动调一下 SAGV 的参数,一是尽量压低内存控制器的频率,二是让它的升频不那么的激进。
经过测试,内存控制器最低支持运行在 1600 gear2 和 3600 gear4 的模式下,任何低于它们的频点都无法开机,需要手动重置 bios 。

于是我就以它们为基准,选择了不太激进的频点策略:

  • 1600 gear2 ,对应内存控制器 400 MHz。
  • 3600 gear4 ,对应内存控制器 450 MHz。
  • 4800 gear4 ,对应内存控制器 600 MHz。
  • 5200 gear2 满血,对应内存控制器 1300 MHz 。

顺便将下面的升频负载阈值设为了允许的最大值 50 ,升频时间也设为了允许的最大值 50 。

此时,平均空载 SA 功耗可以来到 2.87w ,虽然相比锁死最低频仍有差距,但也算是达到了一个可以接受的水平。

需要注意的是,gear4 模式下的延时是相当高的,可以轻松飙上 120ns ,都快赶上 GDDR 的显存了,因此没必要在满血状态下因小失大的用 gear 4 。

And ,即使这么设置,内存的升频策略还是很激进的,基本上滑动一下屏幕就会满血,也许和核显也参与了负载计算有关?

经过 AIDA64 的 benchmark ,这套操作对满血性能几乎没有影响,不过对于 low 帧有没有影响我可不能保证。

后记

很神奇的是今年的 hx55 功耗控制反而相当的好,甚至好于我手上的这台 h45 平台。
是因为 hx55 外置 PCH 和雷电控制器导致其集成的东西更少?
还是单纯是微星调校的差?

顺便给你们看看 R23 能过 2w 分的 14 寸 13700H 😋