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