Android 系统性能优化

这篇不讲细节,讲方法,讲思路。
看到好多人在做系统优化时完全摸不着头脑,毫无章法的乱打乱撞,实在忍不住想说几句,又不好直说,还是写下来做个笔记吧。
什么是 Android 系统?
这看起来是个很简单的问题,但是,你真的清楚 Android 系统到底是怎样运行的吗?搞清楚 Android 系统的本质,是进行系统开发的前提。
系统(更确切的应该叫OS)本质上是通过软件来合理分配和使用硬件资源。从这个角度上看,Android 系统中包含两个主要的部分 Linux 和 ART,其他部分都可以看成在其之上运行的软件。ART 提供了应用运行环境,在系统中可以看做一个相对独立的部分,通常可以做为专项优化。在谈及系统优化时,主要指的是基于 Linux 对 Android 进行优化。
性能优化的本质
前面提到,系统是对硬件资源的分配和使用。这意味着硬件从根本上已经限制住了系统性能上限,而性能优化的目标就是最大限度的使用硬件资源。沿着这个思路,我们可以给出性能优化的几个方向:
  • 硬件能力增强:这个说法有些牵强,因为现在的嵌入式设备都是高集成度的,不可能更换硬件。这里的增强主要是指对CPU、GPU、Memory等重要的硬件单元进行超频。硬件标定的频率都是保守频率,只要处理好散热,通常都可以稳定工作在更高的频率上。超频带来的主要问题是稳定性,在通过完整的压力测试前,不建议修改频率。
  • 硬件资源分配优化:硬件资源是固定的,所以我们优化的方向就是如何有效的利用硬件资源。Linux 和 Android 都是向着通用平台的方向发展,但是当开发具体的产品时,都是有侧重的方向。将硬件资源向重点功能倾斜,就是优化的方向。这里涉及到的技术有:Cgroup、优先级调整、CPU频率范围调整、CPU核绑定等。
  • 调度策略优化:Linux 是一个通用系统,它的调度策略必然是平衡的,我们可以根据具体产品形态来调整调度策略。这里涉及的技术有:CPU调度策略、I/O调度策略、内存回收策略、Thermal策略、文件系统调优等。
  • 软件运行效率优化:我们必须承认一个事实,软件开发过程中对性能的考虑比较少。大部分的软件都有可优化的空间。当然我们不会对所有软件都进行优化,我们需要找到关键的软件。除了在代码上优化,还可以使用GPU、NPU等硬件加速单元来优化软件。
  • 应用层的系统资源优化:有时,系统上的硬件资源优化无法满足我们的需求。因为在系统运行时,应用层是最清楚哪些进程是重要的。应用层可以通过保留重要进程、释放不重要的进程来协调系统资源的使用。这里的核心就是平衡,保证用户最关心的进程获得足够资源。
性能优化方法
其实系统性能优化没有标准的方法步骤,大致方向就是上述的五个。可以所有方向都做优化,也可以只沿着一个方向做优化,只要最终的性能指标符合要求就完成优化工作。这里的关键点就是:
  • 如何判定优化符合性能指标。
  • 如何找到优化点。
确定上述两个关键点就是工具,这也是性能优化的核心。为什么好多人在做性能优化时天马行空,就是因为他们根本不知道核心是什么。我们需要工具(无论是系统自带、还是自己开发、还是第三方)来测量系统性能,确定优化的目标。我们也需要工具来寻找优化点,仅靠猜测是不靠谱的。Android 本身带有很好的性能调试工具,Linux 上也有大量的开源工具,只要想用就是很容易的事。如何根据工具的数据来确定优化的方式,这就是考验工程师能力的时候。但是如果你不使用工具,就算解决了性能问题,我也会鄙视你。
【Android 系统性能优化】最后,需要强调的是硬件资源是确定的,系统性能优化需要做的就是平衡资源的使用。性能优化没有固定的方法,也没有捷径可走。使用工具找到性能消耗多的地方,一点点的优化、一ms一cycle的抠就是性能优化需要做的事情。

    推荐阅读