返回博客

2026.09.29

多花 0.08 瓦,帧数从 34 到 61:掌机省电到底该拧哪个旋钮?

同一台骁龙 8 Gen 2 掌机,同一个游戏场景,拔电实测 10 组配置。切到性能档是全场最差的一档:功耗最高,帧数反而掉了。真正起作用的是先判断瓶颈在哪,再拿每帧能耗来比。中途还有两个传感器骗了我,其中一个让我差点报出一个根本不存在的 101 帧。

硬件实测掌机功耗方法论

同一台掌机,同一个游戏,同一个场景。

5.85 瓦,34 帧。改了三个设置以后,5.93 瓦,61 帧。

多花 0.08 瓦,帧数差不多翻倍。而大多数人第一个会去点的那个旋钮,把电源档切到「性能」,是我测的 10 组配置里最差的一组:9.98 瓦,44 帧。比原状多花七成电,帧数反而比中间档还低。

更丢人的是,调到一半我差点给出一个「平衡档 101 帧」的结论。那个数字是假的,读错了传感器。第 1 章先讲这个,因为它决定你后面该信哪些数字。

想直接拿方法的看第 7 章的清单;想知道同一台机器为什么对三个游戏得开三副药方,看第 4 章。

1. 我差点报出去的 101 帧

机器是一台骁龙 8 Gen 2(Adreno 740)的安卓掌机,刷的是一个社区维护的 Linux 游戏系统,跑 x86 的 Windows 游戏要过两层转译:DXVK 把 DirectX 翻成 Vulkan,FEX 把 x86 指令翻成 ARM。游戏是《潜水员戴夫》,一个像素风 2D 游戏,按理说不该吃力。

目标很简单:跑满 60 帧(能 120 更好)的前提下,电越省越好。

第一轮是插着电测的。我从合成器(gamescope,掌机上负责把游戏画面贴到屏幕上的那一层)的统计管道里读帧数,从电池驱动的 power_now 读功耗。读出来长这样:

  • Eco 档:68 帧,7.9 瓦
  • Balanced 档:101 帧,10.3 瓦

看着挺好。然后两个数都塌了。

帧数是合成帧。 合成器报的是它自己往屏幕上刷了多少次,游戏没交新画面它也照刷。后来换成 MangoHud 读游戏自己提交的帧,同一时刻合成器报 68,游戏实际只有 33。差一倍多。

功耗那个数也不对。 插电的时候 power_now 报 43.8 瓦。我拿同一时刻的电流和电压自己乘了一下:4.36 A × 4.16 V = 18.1 瓦。驱动给的数大了 2.4 倍,而且插着电时电池电流里混着充电电流,根本分不出游戏吃了多少。

所以这一轮的数据全部作废。重测的规矩就两条:

功耗 = |电池电流 × 电池电压|,必须拔电、状态显示 Discharging
帧数 = 游戏自己提交的帧(MangoHud 日志),不读合成器

插电还有第三个坑:边充边玩,GPU 温度顶到 84°C,贴着 85°C 的被动降频线,频率从 680 MHz 被压到 401–475 MHz。插电测出来的是「一台正在发烧的机器」,跟你拔电玩的时候是两台机器。

这也是我看别人掌机功耗截图时的第一个问题:你读的是游戏帧还是合成帧?功耗是算出来的还是驱动报的?插没插电? 三个答不上来,那张图我就不看了。

2. 该比的是每一帧花多少电

拔电以后,每档跑 50–60 秒,场景固定在船上悬停,下屏关掉,亮度不动。「最差 5% 帧」是这段时间里最慢那 5% 时刻的帧数,中位数看着够、玩起来却一顿一顿的,看的就是它。10 组结果:

配置 瓦 帧(中位) 最差 5% 帧 每帧 mJ
Eco + 1080p(原状) 5.85 33.6 29.1 174
Balanced + 1080p 8.54 51.2 35.6 167
Performance + 1080p 9.98 44.1 35.6 226
Eco + 720p 5.53 56.8 33.3 97
Balanced + 720p 6.63 58.8 49.5 113
Performance + 720p 8.39 59.3 53.3 141
Eco + 720p + GPU 锁 550 MHz 5.93 61.3 50.3 97
Eco + 720p + GPU 锁 475 MHz 5.81 60.0 50.4 97
Eco + 720p + 锁 475 + 限帧 60 5.98 47.7 31.3 125
Eco + 720p + 锁 401 + 限帧 60 5.55 49.8 32.2 111

最后一列是我觉得最该看的:

每帧能耗(mJ)= 整机瓦数 ÷ 帧数 × 1000

就是个除法,但它把「省电」和「流畅」放进了同一个单位。只看瓦数,原状 5.85 瓦好像已经很省了;除一下,它每帧要 174 mJ,最终那档只要 97 mJ。同样一块电池,能画出来的帧多了将近八成。

续航也是一个除法:

续航(小时)≈ 电池能量(Wh)÷ 整机瓦数

这台机器的电池驱动报的满电容量是 5938 mAh。我没读到标称电压,按锂电常见的 3.7–3.9 V 算是 22–23 Wh,除以 5.93 瓦,大约 3.7–3.9 小时。这个数是算出来的,我没真的放完一整块电。

3. 性能档为什么最差

Performance + 1080p 那一行:9.98 瓦,44 帧,比 Balanced 的 51 帧还少。

原因在性能档的实现上。它把 GPU 的最低频率也钉死在最高档 680 MHz,GPU 没有喘气的机会,一路烧到温控线,然后被系统往下压。那一档跑完,GPU 温度 85.2°C,中位频率只剩 550 MHz。你付了最高档的电费,拿到的是中档的频率,外加更多热量。

在被动散热线附近,「把频率拉满」约等于「让温控替你决定频率」,而温控的决定一般比你自己选的差。

4. 先判断瓶颈,再选旋钮

戴夫这个游戏,最大的旋钮是分辨率。1080p 到 720p,像素数少了 2.25 倍,Eco 档帧数从 33.6 涨到 56.8,功耗还降了 0.3 瓦。

但这招不是万能的。同一天我在同一台机器上还调了两个游戏,结论正好相反,所以记下了一个判别方法:同一个场景,三个电源档各跑一遍,看两样东西。

第一样是 GPU 占用率。第二样是这个比值:

频率弹性 = 帧数涨幅 ÷ 频率涨幅

弹性接近 1,说明帧数跟着这个部件的频率走,它就是瓶颈;弹性很低,说明你在加一个没在拖后腿的部件。

三个游戏的读数:

  • 《潜水员戴夫》:1080p 下 GPU 占用 93%,GPU 瓶颈。降分辨率有效。
  • 《GTA V》旧版:1080p 低画质,Eco 26 帧、Balanced 28、Performance 32.6,GPU 占用始终在 51–55%。从 Balanced 到 Performance,CPU 大核频率 2092 → 2956 MHz,涨 41%;帧数 28 → 32.6,涨 16%。弹性 0.40。GPU 闲着一半,CPU 八个核都在 80% 左右,瓶颈在 CPU 这一侧,大概率是 x86 转 ARM 的转译开销,后台 Steam 和游戏启动器的内嵌浏览器还一起吃掉约 2.7 个核。这时候降分辨率没用,加 CPU 频率也只换回四成,而且大核温度到了 93°C。实际玩的时候地图流式加载跟不上,贴图都出不来,最后放弃了。
  • 《看门狗 2》:1080p 高画质 15–17 帧,GPU 占用 99%。GPU 瓶颈,跟 GTA 正好相反。降到 720p 低画质,29–33 帧,翻了一倍。

同一台机器,三个游戏,两种瓶颈。拿上一个游戏的结论去调下一个,结果只能靠运气。

顺便一提,GTA V 的增强版在这颗 GPU 上根本起不来,那不是调优能解决的:游戏的计算着色器写死要求 32 宽的线程组(WaveSize 32),Adreno 740 硬件只支持 64 和 128,管线创建失败,接着空指针崩溃。连崩 7 次,日志里同一行报错出现了 11 次。遇到这种,别在画质设置里找答案。

还有第三种情况:720p 下切到 Performance 档,戴夫也只有 59.3 帧,GPU 占用 51%。GPU 和 CPU 都没跑满,帧数平在 60 附近,那就是游戏自己的上限。120 帧的目标到这里可以放弃了,游戏设置里也没有帧率选项。

5. 锁频锁的其实是地板

表里有一个我一开始没想明白的地方。Eco + 720p 不锁频,GPU 中位频率就是 475 MHz,帧数 56.8,最差 5% 只有 33.3。手动锁在 475 MHz,频率一样,帧数变成 60.0,最差 5% 变成 50.4,功耗只多 0.28 瓦。

差别在于调频策略会往下降。自动模式下 GPU 看负载低就降频,下一帧来了再升,升上去之前那几帧就掉了。手动锁频把最低频率也固定住了,最高频率根本没变。卡顿来自频率的地板,天花板一直够用。

锁 550 和锁 475 在这个场景里每帧能耗都是 97 mJ,几乎分不出来。我最后留了 550,因为更吃性能的水下场景还没测,高一档算是余量。

另一个反直觉的是限帧。用合成器把帧率限在 60,本意是省掉多余的帧,结果帧数掉到 47.7,最差 5% 掉到 31.3,每帧能耗从 97 涨到 125。我猜是限帧的节拍和游戏自己的节拍错开了,没去深挖。结论是这台机器上别用合成器限帧。

6. 这些数字哪里不可信

  • 每一档只跑了一次,每次 50–60 秒。瓦数的标准差在 0.23–0.65 瓦之间,所以 5.81 和 5.93 这种差距我不会当真。
  • 只测了一个场景:船上悬停。水下、战斗这些更重的场景没测。
  • 三个游戏的场景各不相同,GTA 是海滩步行,看门狗 2 是开车,帧数不能横着比,只能各自跟自己比。
  • 续航是除法算出来的,电压是假设的,没有真的放完一块电。
  • GTA 那个「转译瓶颈」是从 GPU 半闲、CPU 全忙、频率弹性 0.40 推出来的,我没做过关闭转译优化选项的对照(试过一个激进的 FEX 档,没来得及在 GTA 上测完就卸了;在看门狗 2 上它让加载变慢、帧数没涨)。
  • 屏幕亮度一直固定,没拿它当变量。它大概是剩下最大的省电空间。

7. 下次调掌机,按这个顺序

  1. 拔电。插着电测出来的功耗和温度都不算数。
  2. 功耗自己拿电池电流乘电压,别信驱动报的 power_now。
  3. 帧数读游戏自己提交的帧,别读合成器的统计。
  4. 固定一个场景,三个电源档各跑一遍,记 GPU 占用和频率。
  5. GPU 跑满,降分辨率;GPU 半闲而帧数跟不上 CPU 频率,降分辨率没用,接受 30 帧或者串流;两边都不满而帧数平在 60,那是游戏上限,停手。
  6. 所有配置按「瓦 ÷ 帧」排序,挑每帧能耗最低、最差 5% 帧达标的那一档。
  7. 帧数中位数够、偶尔掉帧,先试手动锁频把地板抬起来,再考虑加档。
  8. 别用合成器限帧,除非你测过它在这个游戏上没让事情变糟。
  9. 锁频通常是全局生效的,换游戏前记得改回自动。