中端机性能优化
如何对Android系统进行性能分析?
如何优化低端机(内存小于6G)性能是一个挑战?一般思路是从两个方面入手:资源和负载。
资源主要包括内存,传统内存包括java heap内存,native heap内存,图形gpu内存,dma-buff内存,文件映射内存。还有一些广义内存类型,包括文件句柄,线程数量,Android一些注册到系统进程对象。资源分析相对简单,需要分析的具体对象明确,对应的工具也完备。根据持续内存分析经验,可以按照软件栈进行分析,系统预留内存,内核占用内存,进程占用内存。其中大头是预留内存和进程中图片和显示内存。预留内存依赖高通或者mtk讨论及其自己做一些减少没有必要的内存。
负载涉及到cpu,ddr带宽,gpu/npu。这些计算单元负载分析如何做?按照目前我自己认知基本还是top-down方法?
第一步明确问题:
1,怎么弄清楚谁占用了cpu?对于手机来说,需要按照场景去看谁占用了cpu。场景包括用户经常使用的场景,如待机场景,微信视频场景,抖音刷视频场景,应用启动场景等?
2,如果弄清楚谁占用了cpu,就需要分析具体是什么代码引起的,便于优化?
第二步,如何分析问题?
第一个问题分析需要有合适的工具,如top,btop(Android不支持),dumpsys cpuinfo。目前perfetto抓调度trace也可以看到一段时间内那个进程占用了cpu,适合详细分析。
第二个问题,目前Android的perfetto工具和simpleperf工具基本也可以使用,如果分析java执行情况,则需要art虚拟机的method trace。
第三步,优化相关代码
第四步,检验优化后的效果,可以通过宏观和微观benchmark来看。