前言

手上有台搭载 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 帧有没有影响我可不能保证。

玄学再降 SA 功耗

补充于 2024-3-24 。

除了 SAGV 外,还有一些降低 SA 功耗的玄学方法,它们一定正确但是效果不明。
我进行的调整包括:

  • 所有 ASPM 相关选项均设置为 L1 (包括 DMI、CPU 直连的 PCIe、南桥拉出的 PCIe)。
  • 关闭无用的 PCIe port (排除法吧,一个一个关了试试有没有功能问题,我这台绝影 14 上,port 3 和 port 7 可以关闭)。
  • 开启 Native ASPM 。

在进行上述调整后,配合屏幕刷新率 60Hz 外加内存锁 3600 g4 ,可以将 SA 功耗压到 2w 以内 ↓

虽然距离华硕的魔鬼调校还有差距(有没有内部人员来讲讲华硕到底是怎么把 SA 功耗压到 1w 以下的...),不过带出门的可用性算是高了不少。
很难绷住的是内存锁 3600 g4 时的延迟居然和酷睿 Ultra 差不多,英特尔你干得好啊🤣

后记

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

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

暴论:也许我们的出发点就错了

补充于 2024-1-5 。

这段时间看笔记本评测的时候注意到,幻 13 和幻 14 两款机子规格近似,电池容量近似,但续航差异却不小。
根据笔吧评测室的数据,幻 13 的 PCmark10 续航测试成绩为 11 小时 42 分,幻 14 却只有 7 小时 19 分,试想,它们之间的差异是哪里来的?

要知道,它们搭载的可是相同的处理器,拥有来自相同厂家的调校,难道说那一英寸的屏幕尺寸差距能带来 50% 的整机功耗差异?这不对吧?

在我看来,两者之间的一个明显差异是:幻 13 采用了板载的 LPDDR5 内存,而幻 14 则采用了板载 + 插槽的 DDR5 内存。
所以,内存到底会产生多少功耗?不妨在我的这台双槽 DDR5 机子上做个实验。

首先,是默认情况,内存频率锁 5200g2 ,空载静置,电池放电数据显示整机功耗在 14w 左右。
接下来,将内存频率锁到 1600g2 ,空载静置,电池放电数据显示整机功耗在 9.5w 左右。

注意到这个过程中,由于内存控制器频率变化,SA 功耗降低导致 package 功耗降低了 1.5w 左右,但别忘了,整机功耗的降低量是 4.5w 。
也就是说,package 功耗降低了 1.5w 的同时,别的部件功耗却下降了 3w 。
你猜这别的部件是什么?当然是内存啊。

看起来,这内存功耗远比我想得高。这里只是拿内存功耗做个引子,我想说的是,也许我们有些太关注 package 功耗了,空载情况下的功耗大头也许根本就没有被显示出来

在默认情况下,我这台机子,即使减掉整个 package 功耗,仍然会剩下 8w 左右的空载功耗,它们全是由除处理器外的其它部分消耗的,这已经非常夸张了,要知道隔壁 macbook air 的整机空载也才 4w 左右。

我们整天追着处理器能耗比,追着那 SA 功耗不放,但是到头来,处理器空载功耗却只占整机空载功耗的一小部分,就算拿掉处理器,剩下的功耗也是一坨屎,真是幽默极了。

说来有趣,新的酷睿 Ultra ,看起来处理器能效提升不大,空载功耗也还是一坨

那为什么首发的机子看起来续航还不错呢?
有没有一种可能,那漂亮的续航并不完全来自处理器本身,而是来自厂家在别的部件上拼命节省功耗(比如 LPDDR5 内存、其它更优秀的电路设计等),以及在英特尔压力下的更用心调校,可惜,获得“高能效”称赞的只会是那光鲜亮丽的酷睿 Ultra 。

↑ 也许,在双内存 + 双盘位 + 传统设计下,配上不太认真的调校,酷睿 Ultra 就会原形毕露