[置顶] 泰晓 RISC-V 实验箱,配套 30+ 讲嵌入式 Linux 系统开发公开课
那些年,我们一起经历过的 Android 系统性能优化
By DecJude of TinyLab.org 2019-08-24
Android 系统性能优化,最近几年,Google 之外,绝对是中国的手机厂商参与得最深最广。大家不光深挖系统、场景,还要和 Top 应用合作优化,和各种流氓应用 “斗智斗勇”。同时 Google 也在不断吸收一些 Common 的优化经验,应用到每年的大版本更新中去。
接下来简单梳理一下近几年来各大手机厂商拿出来宣传的性能优化技术。
华为 - 18 个月不卡顿
长时间使用卡顿,成为 Android 手机的通病,各个手机厂商应该都有专项来投入这个问题,华为在行业首次把这个问题公开展示到了台前,并成了一段时间的热点。
技术背景
从华为的公开资料看,应该是通过分析大量压力和老化测试后出现的卡顿问题,有共性的原因归类为下面几个:
文件碎片化严重
长时间使用,文件反复读写就带来了大量的文件碎片,读写文件时速度变慢,导致卡顿。
开放的安卓缺乏对资源优先级的判断
Android 系统是开放的,没有明确的应用优先级。
系统资源有限无多余资源可用
系统资源有限,资源需求方很多,容易出现同一时刻资源紧张的情况。
技术方案
减少文件碎片化
应用 F2FS:
“引入了全新的 F2FS 文件系统,相较于安卓原生的EXT4文件系统,能从源头上减少文件碎片化的产生”。
文件系统碎片整理:
“引入了实时自动整理文件碎片功能,大大提升了文件垃圾回收效率”,猜想应该是把整理放在空闲/待机时。
应用优先级智能判断
- 基于用户习惯和应用流行程度共同设定优先级。
应用分类,打开时提供不同的资源保障。
分为:计算优先型、内存优先型、存储优先型。比如相机比较耗内存,打开时就需要立即清理出足够内存。
智能调度
CPU 调度优化
猜想是做了应用级别的 CPU 资源控制,频率核心数,schedule 层面当时不一定有涉及。
内存资源调度
低优先级应用退到后台,进行内存压缩。
存储 IO 资源调度
“开辟了类似公交专用道的动态专属资源通道,以满足优先级高的应用获得稳定足够的 IO 资源”。猜想基于 IO 调度器调整进程 IO 优先级,或者通过 blkio cgroup 控制其他应用的 IO 访问。
Android 基础组件优化
数据库 read 优化,引入 Vulkan。
优化评价
号称 18 个月不卡顿, 是基于一套性能衰退的评估模型, 注意图1的右下角的一行小字 “基于华为测试模型”,在这基础上加大压力,模拟用户使用 18 个月之后的情况。 从华为公开的资料看,18 个月不卡顿发布的时候,这个评估模型是基于文件系统的老化之后的性能测试。
“我们使用了一种配合大数据的科学方式来模拟文件系统在 18 个月之后老化的情况。我们让手机在短时间之内,完成一般手机在 18 个月中运行读写、删除、反覆读写的流程,就好像看视频的时候按 ”快进” 一样。”
基于特定的评估模型,解决特定的问题。效果肯定是有,但是卡顿肯定也还是有,不然就不会有后面的种种吓一跳技术了。
华为 - GPU Turbo
技术背景
华为手机的游戏性能一直饱受诟病,970 之前麒麟处理器的能效做的不好,这里不光有芯片设计层面的问题,也有软件/驱动层面的问题,这时候手机就要去做取舍,在功耗优先的策略下,性能就必然很受限制。
一些媒体公开的评测也能看到,那时候华为的手机往往玩游戏几分钟十几分钟就发热限频了。
技术方案
出来以后,业界哗然,各种讨论也非常多.
在综合一些后来的评测结果看,个人认为,主要是两点,解决 bug,优化功耗(这可能是 CPU Turbo1.0 的核心了)。
优化评价
从 GPU Benchmark 数据看,GPU Turbo 引入之后并没有带来 Benchmark 数据上的性能提升。
使用麒麟 970 芯片的 P20-PRO 在没有 GPU Turbo 的情况下,如果关闭 “省电精灵”, 实测性能表现和同样搭配 970 的、有 GPU Turbo 的荣耀 V10 基本一致。
所以结论是 GPU Turbo 1.0 实际上没有提升 GPU 的物理性能,而是优化了功耗,使得发热降低,从而可以避免之前不得已而为之的 “省电精灵” 过度限制系统性能。对于移动设备来说,没有牺牲性能的前提下,降低了功耗,其实就相当于是提升了性能。
当然现在 GPU-Turbo 已经进化到了 3.0,估计都是细节的优化比较多,具体提升可能比较有限,毕竟华为都不大力宣传了。
华为 EROFS 方舟编译器
尚未有第三方使用的报告,有待验证。
但从文件系统、从编译器入手,确实不是主打性价比的组装厂能做到的。
VIVO Multi-Turbo
技术背景
VIVO 在系统优化包装方面推出的比较晚,18 年开始推出 Dual-Turbo,19 年晋级到 Multi-Turbo, 以后可能会叫 Multi-Turbo 2.0?
技术方案
“Turbo 来 boost 去” 的事情,各个手机厂商应该比较早就都开始做了,不管是高通平台的 perflock 还是 MTK 平台的 perfservice ,原生都具备简单场景 boost 的能力,三星除外。
Turbo 会带来性能提升的原因有二:
- 其一:处理器平台的默认策略往往是性能-功耗均衡的产物,特别是 16nm 制程之前的处理器,功耗发热都比较厉害,系统的性能-功耗策略就必须做的比较保守,这时候往往针对一些典型的场景比如应用启动、滑动列表做 boost,效果就比较明显。
- 其二:系统并不知道每个应用的特点,他们的资源需求是什么样的,Android 系统的 CPU、GPU、网络、内存 这些子系统都是各自为政,往往某一部分就会成为一些场景的性能短板,这时候做应用资源/行为分析,针对性做资源保障,就可以进一步提升性能表现。
Dual-Turbo
Dual-Turbo 分为系统加速引擎 System-Turbo 和游戏引擎 Game-Turbo。
System-Turbo
应该是系统层面的 common 加速:
- 比如应用启动、触控、抢红包、微信、头条等典型场景和应用的加速。
- 调度和内存层面的资源保障策略。
Game-Turbo
应该是在系统策略基础上,做更精细的场景优化,比如游戏加载、帧率稳定性、游戏行为识别(和游戏厂商合作,比如团战了,告诉系统一下),以及更激进的游戏资源保障策略,绑定到大核、清理后台内存等等。
Multi-Turbo
- ART++编译增强 Turbo
- Net Turbo
- Center Turbo
- AI Turbo
- Cooling Turbo
ART 部分可能是调整了一些参数以及默认行为。
网络部分,物理性能肯定没得提升,倒是可以抢占同一个路由器的资源、另外策略上进行应用级别的网络资源控制。
AI 自动化的识别应用或者是行为?
Cooling Turbo 凑数的,可能是有人专门来 tuning 软件温控了,另外只有 4 个的话,数字可能不够吉利~
优化评价
从公开的内容看,涉及的面比较多,这里 Turbo 一下,那里也 Turbo 一下,看起来不够系统,甚至取名字都很为难,才叫 Multi-Turbo 。
数了一下,少了内存优化的部分,估计明年会有。 最近的 IQOO Pro 已经使能了 F2FS。
作为华为之外的厂商,确实很少在单点上做出非常大的突破,但是他们积累的一些方方面面的优化,都是通过大量的市场反馈而来,同样也是非常有价值。
OPPO Hyper-Boost
技术背景
同 VIVO。
技术方案
从命名看,OPPO 比 VIVO 要更有逻辑一点,内容应该差不多。
VIVO 是以技术点分类,A 技术 Turbo、B 技术 Turbo、C 技术 Turbo。
OPPO 以模块分类,系统、游戏、应用:
OPPO 系统引擎
整合梳理 CPU、GPU、DDR、存储、modem、wifi、display 做相应的优化。
OPPO 游戏引擎
保障 Top 游戏性能,做资源调度优化、网络优化等,以及和部分游戏厂家合作优化。
比如当年王者荣耀的多线程版本率先发布, 早期的版本都是一个巨大 UnityMain ,当时基本上没有处理器能吃得消,做到持续高性能输出,手机端是不可能解决的问题。
OPPO 应用引擎
和 Top 应用进行典型场景合作,基本上都是应用通知手机系统要进行到什么场景,手机做针对性的资源准备。
优化评价
同 VIVO, 值得一提的是应用引擎,和微信、淘宝、QQ 这些 Top 应用做合作优化, 和当年王者荣耀多线程版本一样, 会占一点时间优势。这也是国内的手机厂商做的更出色的地方,卖给消费者的不只是硬件和系统,还有使用体验,哪怕不是自己的应用和业务,只要是影响用户使用的地方,就主动去发起合作和优化。
小米 - Mi-Turbo
技术背景
“Game Turbo游戏加速,游戏工具箱2.0,手游爱好者的福音。”
“Mi Turbo 防系统卡顿,通过系统底层优化,模拟使用18个月后依然流畅如新。”
技术方案
Game Turbo
技术上和 OV 应该差不多,但是没有提和厂家的合作优化,由于小米在发热控制这块一直比较开放,所以一般比较少限频。游戏工具箱、或者是游戏模式 Top 几家厂商都有了。
Mi Turbo
有点后发制人的意思,Turbo + 18个月不卡顿,方案和手段应该都是大同小异。
优化评价
由于把小米放在最后,而内容和方案上小米又没有什么特别的地方,所以可写的内容很少。
在系统优化这块呢,小米算是起了个大早,赶了个晚集。
Others
MEIZU
- One Mind 智慧引擎
- 内存清道夫
- 应用冻结
一加
RAM Boost
内存压缩 + 常驻内存
联想
永不卡顿
比较有意思的是永不卡顿居然还有3.0版本,无敌很寂寞,不过现在已经不宣传了。
努比亚
国企不需要!
应该是做了一些事情的,只不过不会包装。
三星
Turbo 是什么? 三星还是大厂气质,和苹果一样,不整这些,不过易用性、还有针对性的优化方面,三星确实已经落后国产 Top 厂商了,先全球再中国的思路导致的结果吧。但不管是 Sdcardfs 还是 F2FS 三星都贡献巨大。
总结
总之呢,主要见到的就是下面这些点,选一些组合打包起来,就变成 Multi 或是 Hyper 了:
解决性能短板,bugfix
往往一些短板称为了一款机器的性能瓶颈,比如号称 “火龙” 的骁龙810处理器,巨大的发热量导致手机不得不降频使用,实际性能甚至不如一下中端机器。典型的短板比如处理器功耗发热、电池容量、散热设计、内存大小等等。
或者是类似系统存在明显的性能bug,比如 GPU Driver/framework 的问题,影响性能发挥。
场景/行为 boost策略,兼顾 low power
做场景和行为的识别已经非常容易,甚至原生都有,但手机电池毕竟有限,如何避免一些火力全开的暴力想法,做精细化的资源控制,才是考验水平的地方,游戏都跑 60 帧,只耗 2/3 的电,不就赢了吗?
更聪明的调度
如果 CPU/GPU/DDR/IO 等各个模块的调度都能做到足够聪明,就好比优秀的自动挡变速箱能做到手动老司机的水平,但手机场景往往非常复杂,一个应用有时候是处理器密集型的、有时候又是 IO 密集型的,所以聪明的调度和场景策略还需要结合起来用,相辅相成。 至于叫不叫 AI 就没所谓了。
应用级别的优化
系统端精细化地去 Profile 具体的应用/游戏,分析其行为特点,保障其使用的资源需求。另外一个方面,只有应用自己知道自己接下来要做什么,需要什么资源,应用在一些时候可以呼叫系统给自己相应的资源支持。这就需要合作优化了。
文件系统 + 存储
比如现在 F2FS + UFS3.0 变成行业热点。
大内存 + 应用常驻
应用内存常驻,就可以实现应用秒开,避免加载的时间,大内存是应用常驻的基础,内存压缩可以进一步增加可用内存空间。
虚拟机、编译器优化
google 和芯片厂做的比较多,OEM 比较少深度涉及。
更好的信号、更优质的屏幕(刷新率 90 Hz 甚至 120 Hz)等硬件。
展望
展望一下,这里想把手机厂商分为三类:
- 一类是苹果,自己研发芯片和核心元件,有自己的OS和生态;
- 二类是三星、华为,自己研发芯片和核心元件(当然华为和三星还是有所区别),共享 Android OS 和生态,当然三星在本土化这一块做的是不如华为和其他 Top 厂商的;
- 三类是其他 Android 手机厂商,芯片和核心元件来自于不同供应商,共享 Android OS和生态;
从技术层面看,苹果始终会是在性能的第一阵营,可以顺利推行从硬件到 OS 到 APP 级别的任何性能保障方案;
三星、华为属于第二阵营,可以实现芯片-OS层面的整合优化;
其他 Top Android 手机厂商差距不会太大,他们有多个不同的 SoC 供应商,方案有差异,非常芯片底层的地方,往往不会去涉及,更多是做纯软件层面的策略性的优化,有价值但是不容易形成壁垒,注意这个不容易形成壁垒指的是在 Top 厂商中间,一些小的厂商往往还是心有余而力不足。不过还是很期待看到有更多的突破出现。
猜你喜欢:
- 我要投稿:发表原创技术文章,收获福利、挚友与行业影响力
- 知识星球:独家 Linux 实战经验与技巧,订阅「Linux知识星球」
- 视频频道:泰晓学院,B 站,发布各类 Linux 视频课
- 开源小店:欢迎光临泰晓科技自营店,购物支持泰晓原创
- 技术交流:Linux 用户技术交流微信群,联系微信号:tinylab
支付宝打赏 ¥9.68元 | 微信打赏 ¥9.68元 | |
请作者喝杯咖啡吧 |