前言
手上有台搭载 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 😋
蠻好奇你是怎麼重置bios的? 我本身是幻X,不小心搞到無法開機,回去給售後刷
而且更奇特的點是預設的最低point 是2400g4, 當時算錯設定為您提供的1600g2 反而沒辦法開機,實在是想不通
而且更可惜的是,外網幾乎沒有關於12代SA功耗過高的討論,相關的bios調教更是少的可憐...(雖然內網提到sagv的好像也只有這篇文章和筆吧的bios優化(雖然是不同方向))
另外補充一個,pcie的電源管理也是一個優化方向,遊戲遊戲筆電會把L1關掉,不知道為什麼
微星的机器长按电源键 30 秒就可以重置 bios 。
看起来不同机型支持的最低频点还有区别🥲?