移动性能测试 你的游戏发热吗?-游戏发热问题分析与自动化监控系统

yhnu for 珠海西山居QA · 2021年10月08日 · 最后由 yhnu 回复于 2022年11月14日 · 18116 次阅读
本帖已被设为精华帖!

2021.10.08_游戏发热问题分析与自动化跟踪

前言

前段时间收到某游戏发热严重, 这是一个非常模糊的表达, 或者说这里面包含的变量信息太多了, 如何一层层抽丝剥茧排除一些关键性的变量就变得尤为重要.
本篇文章就详细的记录下整个分析过程与解决方案, 并采用自问自答的方式, 进行讲解, 方便大家遇到类似问题有自己的一套方法论.

文章本身并不涉及详细技术细节,只提供源码,具体技术原理可以私下沟通.

内容概要

  1. 什么是发热以及发热的原因
  2. 建立相对统一的测试环境
  3. 数据采集并建立初步认知
3.1 温度只能用于宏观趋势, 并不能精准量化(量化标准的建立)
3.2 自研游戏和竞品游戏到底有多少差距?(建立参考系)
3.3 什么原因引发了上面差异?(分析原因)
3.4 围绕着GPU我们能做什么分析?(进一步分析原因)
3.5 耗电占比分析(找出凶手)
  1. 直面发热本身
4.1 温度对于我们就没有参考价值了么?
4.2 Android温度采样系统
4.3 结合自动化建立温度监控系统

什么是发热以及发热的原因

  1. 手机发热的程度,与环境温度、使用场景、散热条件等多方因素有关。
  2. 受限于机身尺寸,手机不能像电脑等设备一样通过风扇散热,手机运行时,CPU、内存等产生的热量一般通过机身向外传导。
  3. 在一些高功耗的场景下,如玩手机游戏、连续摄像、升级手机系统等,机身发热是正常现象,当停止高功耗应用后,手机机身温度能快速恢复正常。
  4. 及时清理后台应用,如果您的手机有高耗电应用在后台运行,会持续占用 CPU 资源,容易导致发热和耗电快。
  5. 电池老化也会引发发热问题

建立相对统一的测试环境

为了建立统一的测试环境, 我们必须排除除游戏以外的其他关键性因素, 这里罗列出以下相关因素,保持标准一致. 后面所有的性能测试和数据分析都基于这个测试环境:

20211008171118

数据采集并建立初步认知

温度只能用于宏观趋势, 并不能精准量化

通过我们长时间的数据对比测试, 温度的上升和下降都是一个缓慢的过程, 并且明显有滞后性. 但是瞬时功耗的反馈更加灵敏, 因此我们最开始采用了功耗作为发热的量化.

下面是我简单画的一个草图, 描述对应的映射关系, 实际的生产环境相关数据都有毛刺.

20211008171131

自研游戏和竞品游戏到底有多少差距?

有了相对统一的测试环境, 我们就需要开始进行数据采集, 量化我们的竞品之间的差距. 这里我们采用了从用户时长和功耗这两个角度进行数据对比:

20211008171142

通过上面的数据进行简单对比,我们可以得出第一个结论: 我们从各个方面都弱于竞品.

什么原因引发了上面差异?

通过上面的数据,我们仅仅只是建立了感官认知, 并不能能够帮助我们去解决问题. 我们需要数据进一步分析游戏到底什么原因引发了功耗比竞品高.

针对游戏而言, 发热的核心原因有两个:

  1. CPU 占用过高, 测量方法 CPU 使用率
  2. GPU 占用过高, 测量方法 GPU 使用率 (这个是后面才开发出来了,因此下面没有对应的数据)

20211008171155

围绕这上面两个核心, 我们进行了对应的数据采集工作, 发现 CPU 的使用率和竞品差距不大, 但是功耗和温度比竞品高. 因为我们得出了第二个结论: 自研游戏的发热是由 GPU 引起的

围绕着 GPU 我们能做什么分析?

GPU 的综合指标是 GPU 的使用率, 更详细的重要指标有 GPU 带宽, 顶点数, 顶点计算和 OverDraw, Shader 的复杂度等.

高通的 Snapdragon 为我们提供了详细的 GPU 性能指标, 同时给我们一个非常的重要的信息,GPU 温度. 这个后面再做详细阐述.

20211008171202

针对游戏而言各个地方都可能引起发热问题, 这里我们采用 A/BTesting 方法针对不同的游戏案例进行数据分析, 此处包含游戏效果和不同的游戏系统, 图里面已经列出了所有的相关分析测试.

20211008171212

耗电占比分析

有了上面的理论基础, 我们就能够针对性的进行耗电占比分析, 然后就能针对性的分析不同效果, 并进行优化处理. 下图就简单列出了不同模块对应不同的耗电占比

简单对比就给我们指出了明确的优化方向, 我们进一步分析得出 MSAA 4x 耗电非常高,, 于是我们就把工作重心放在后处理上面了. 当然其他模块也各自有各自的问题

做游戏优化简单来说就是做游戏平衡, 每个地方优化一点点, 效果就非常显著了.

20211008171225

直面发热本身

温度对于我们就没有参考价值了么?

在我们我们使用 Snapdragon 进行了 GPU 温度数据采集,与 CPU 温度差值相比, 发现温度差距很大 15 度左右. 这也就进一步说明我们应该把工作重心放在 GPU 端.

  1. 竞品主城温度 51.6c

20211008171235

  1. 自研游戏主城温度 71.5c

20211008171241

前面已经提到过, 功耗的反映更灵敏, 温度具有滞后性, 但是当我们详细了解 Android 电源管理系统后, 我们把温度也纳入对应的监控指标.

电源管理系统参考文章:

https://stackoverflow.com/questions/31446740/how-to-use-the-new-android-batterymanager-api

https://github.com/MicroKibaco/BatteryCanary

Android 温度采样系统

手机厂商一般会在手机的关键性位置添加温度传感器,其中包括电池温度传感器, CPU 温度传感器, GPU 温度传感器, Linux 通过文件系统机制能够让我们方便读取对应的温度信息,

手机的所有温度采集都在/sys/class/thermal/thermal_zone 目录下, 其中我们采集了 thermal_battery,bms,pm8150_tz,aoss0-usr,cpuss-0-usr,cpuss-1-usr,gpuss-0-usr,gpuss-1-usr

结合自动化建立温度监控系统

性能优化是一个长期的过程, 因此我们结合每日自动化建立了对应的监控系统, 并开发了数据分析系统,方便进行横向比较和纵向比较.

下面是我们积累点滴优化, 并进行每日跟踪的曲线图, 非常方便我们你进行数据验证和数据回测.

相同案例每日数据纵向比对

20211008171256

GPU 温度选择日期比对

20211008171303

参考工具链接

https://github.com/king3soft/UAutoIDE

https://github.com/yhnu/note/tree/master/gpu_temp

总结

发热本身千变万化, 我们需要能够控制变化, 一层层抽丝剥茧才能分析问题. 至于如何解决问题那便是仁者见仁,智者见智的事情了.

后面打算写什么

在分析发热的问题过程中, 我们详细了解和掌握了高通的 GPU 采集原理, 并开发出了采集器与自动化工具结合. 这样就建立了完善的 CPU 分析器, GPU 分析器, 内存分析器

共收到 11 条回复 时间 点赞

要不要来 mtsc 深圳站分享下?

49875183 将本帖设为了精华贴 10月09日 12:03
yhnu #3 · 2021年10月10日 Author
恒温 回复

感觉更多对传统软件性能比较多,不知道有多少人对游戏性能相关感兴趣😂 ,游戏相关人多的话可以分享分享。

我想问一下 楼主 用的什么工具测试的功耗?

仅楼主可见
yhnu #8 · 2021年11月23日 Author
Mingway_Hu 回复

可以, 但是我不知道怎么操作

yhnu 回复

大佬要是分享了,我们这种游测的菜鸟才有可能长进啊😃

仅楼主可见

https://github.com/king3soft/UAutoIDE 这个地址 里面的文档地址 还带点颜色????

怎么跟您私聊呢

yhnu #5 · 2021年11月02日 Author
萍尤 回复

功耗就是电压 * 电流, 针对 android 完全可以自己编写的.

yhnu 开放一个游戏性能测试工具, 欢迎使用 中提及了此贴 11月10日 15:15
yhnu #13 · 2022年11月14日 Author
王攀 回复

github issue 即可

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册