小米系统性能的优化

简介:


张扬:小米科技系统工程师,专注操作系统机制研究以及软件架构和接口设计,曾经在索尼和创新工厂从事系统底层及中间件的研发,加入小米后主要负责安全和系统优化方面的研发及技术框架搭建。

小米的MIUI系统是针对Android深度定制的操作系统,在Android开放的设计之下,各个应用有了充分的发挥空间,但是与此同时,系统资源(如 内存,电量等)也在应用的无节制使用之下显示出疲态。此次讨论的主题就是站在操作系统设计者的角度如何在应用权限和系统资源之间做平衡的。以下来分享精彩内容。

移动系统现状

图1

如图1,智能手机已经普及,每个人平均每月要经常使用6.8个APPS,近一半的移动互联网用户目前将手机作为他们的首选或唯一的上网设备。

移动系统和应用之间到底是一个什么关系呢?不论操作系统还是应用,最终都是要服务于用户的,用户需求就是一个大的战场,各个APP是直接和用户去交互,服务于用户的。那么手机就是一个大战场,应用程序就好比军队, 操作系统就是后勤。

APPS都是各自为战,完全不考虑其它,但手机资源是有限的。要想让手机的操作系统跑的很顺利,这就需要对电量,流量,内存进行优化。

自启动涉及到方方面面的,是一个比较宏观的概念,移动应用自启动,前1000热门应用,70%以上需要自启动。

图2电流仪测手机耗电图

如图2,用随机装的50个应用进行测试,观察自启动管理前后的耗电图。应用自启动时,我们会设置一些比较常用的(比如微信),还有另一些默认是不会自启动的,用户可以自己手动把自启动打开,如果不设置自启动,有时会出现消息下达不及时而导致消耗,那么自启动是不是完美方案呢?单从系统环境去做这个事情还是比较苦难的,因为有各式各样的应用,它们的行为也千姿百态的,需要运行的数据量很大,系统不会有太多策略去判断的。更好的方式是靠大家配合,各个应用应该把系统资源的消耗和占用作为自己的应用是否好的一个指标。

 

电量优化

 

 

  图3 andriod原生态

图4 MIUI V5

安卓为什么会费电,主要原因是CPU没有断,所以我们关注的是当手机不用时怎么样控制cpu的唤醒,图3中安卓原生态时的几个应用,它们不知道彼此的存在,它们只会根据自己的逻辑判断什么时候唤醒CPU,导致耗电一直很高,CPU很难进入休眠状态。图4的MIUI V5对齐唤醒机制,在各个应用设置自己唤醒的时候,V5进行统一判断,在某个阈值之内把一些应用调到一起唤醒,经过测试如图5,耗电量降低了很多。

 图5待机耗电测试

 

 

图6 iOS 7 在2013年9月WWDC发布同样的功能

理想方案:在后面的改善过程,我们可能会加一个独立的小芯片,主cpu还是一样的,小芯片的作用是监控数据的唤醒。此外,我们会把所有的闹钟操作统一由系统接管,你只需要告诉系统你什么时候要醒,系统可能会给用户发一些状态答案。

流量优化

 流量消耗原因:后台应用默默跑流量。

解决方案:开源节流。开源:有更多可以使用的流量;节流:控制应用的联网行为。

内存优化

基于后台APP的内存优化;调整ActivityManagerService的参数,利用IActivityManager提供的接口对进程进行控制;ZRAM。

释放OPENGL的资源;将dalvik占用内存的bitmap交换到EMMC;将dalvik占用的空闲的物理内存释放出来;设置合适的MAX_TASK, MAX_HIDDEN_APPS;将不经常使用的进程占用尽量少的内存,占用尽量多的缓存。

                                                                                                                                    



                                                                                                                              PPT下载地址:http://club.alibabatech.org/resource_detail.htm?topicId=162

 

 

相关文章
|
资源调度 监控 JavaScript
3倍+提升,高德地图极致性能优化之路
伴随着高德地图APP近几年的高速发展,也面临到这些问题,从2019年开始,我们开启了一系列性能优化专项,对高德地图APP进行了深入性能分析和极致优化,取得比较显著的效果。在这个过程中总结了一系列优化思路和技术方案,希望对同样面临超级应用性能问题的你有所帮助。
|
8月前
|
缓存 前端开发 JavaScript
如何优化前端性能提升用户体验
在Web应用中,前端性能是影响用户体验和转化率的关键因素之一。本文将介绍一些优化前端性能的方法,包括减少HTTP请求、使用缓存、压缩代码等。
|
缓存 算法 大数据
倚天710规模化应用 - 性能优化 - 软件预取分析与优化实践
软件预取技术是编程者结合数据结构和算法知识,将访问内存的指令提前插入到程序,以此获得内存访取的最佳性能。然而,为了获取性能收益,预取数据与load加载数据,比依据指令时延调用减小cachemiss的收益更大。
|
8月前
|
缓存 Android开发 开发者
安卓系统优化:提升手机性能的秘诀
【5月更文挑战第31天】本文将探讨如何通过一系列简单的步骤和技巧,对安卓系统进行优化,以提升手机的性能。我们将从清理无用文件、管理后台应用、调整系统设置等方面入手,帮助你的安卓设备运行更加流畅。
|
8月前
|
存储 缓存 算法
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
159 0
jvm性能调优实战 - 34十万QPS的社交APP 如何优化GC性能提升3倍?
|
运维 监控 Java
记一次线上OOM和性能优化,值得借鉴!
记一次线上OOM和性能优化,值得借鉴!
246 0
|
SQL 运维 监控
记一次线上 OOM 和性能优化(上)
大家好,我是鸭血粉丝(大家会亲切的喊我 「阿粉」),是一位喜欢吃鸭血粉丝的程序员,回想起之前线上出现 OOM 的场景,毕竟当时是第一次遇到这么 紧脏 的大事,要好好记录下来。
记一次线上 OOM 和性能优化(上)
|
SQL 监控 NoSQL
记一次线上 OOM 和性能优化(下)
大家好,我是鸭血粉丝(大家会亲切的喊我 「阿粉」),是一位喜欢吃鸭血粉丝的程序员,回想起之前线上出现 OOM 的场景,毕竟当时是第一次遇到这么 紧脏 的大事,要好好记录下来。
记一次线上 OOM 和性能优化(下)
|
存储 缓存 负载均衡
C++高并发场景下读多写少的优化方案
C++高并发场景下读多写少的优化方案 述 一谈到高并发的优化方案,往往能想到模块水平拆分、数据库读写分离、分库分表,加缓存、加mq等,这些都是从系统架构上解决。单模块作为系统的组成单元,其性能好坏也能很大的影响整体性能,本文从单模块下读多写少的场景出发,探讨其解决方案,以其更好的实现高并发。 不同的业务场景,读和写的频率各有侧重,有两种常见的业务场景: 读多写少:典型场景如广告检索端、白名单更新维护、loadbalancer 读少写多:典型场景如qps统计 本文针对读多写少(也称一写多读)场景下遇到的问题进行分析,并探讨一种合适的解决方案。
707 0
C++高并发场景下读多写少的优化方案
|
存储 测试技术
为什么优化性能,相亲源码怎样进行性能优化
完成性能优化后进行性能测试,与相亲源码之前的性能指标进行对比,分析现在的系统性能是否符合需求,如果不符合的话,再次进行优化。

热门文章

最新文章