两项用户指标:
可预测、可察觉的性能;
耗时操作所需的时间长短;
容量和抖动:
容量, 是设备在一段时间内拥有的某种资源的总量。这种资源可以是 CPU 资源、GPU 资源、I/O 资源、网络资源、存储设备带宽或其他类似指标。
抖动, 会妨碍系统快速运行,抖动是一种随机的系统行为,会阻止可察觉任务的运行。
内存消耗, 虽然消耗本身不是性能问题,但是它可能会通过 lowmemorykiller 开销、服务重启和页面缓存颠簸引起抖动。
与负载能力相关的卡顿:
调节器反应缓慢(CPU), CPU 频率调节器必须能对突发性的工作负载做出快速响应。;
温控调频, 当设备必须减少整体热输出时,则会发生温控调频,通常通过减少 CPU、GPU 和 DRAM 时钟周期数来执行。;
与抖动相关的卡顿:
应用线程调度程序延迟: 调度程序延迟是最明显的抖动征兆,具体表现为:尽管本应运行的进程处于就绪状态,但在相当长的一段时间内并未运行。
中断流量
长 softirq
驱动程序停用抢占或 IRQ 的时间过长
错误使用工作队列
框架锁争用: 框架锁争用可能造成卡顿或其他性能问题。框架锁争用通常是由 ActivityManagerService 锁引起的,但也可能出现在其他锁中。如果您正在修改在 system_server 内部运行的代码,切记要避免长时间持有锁(尤其是 ActivityManagerService 锁).
Binder 锁争用
进程内的 fd 争用
不必要的 CPU 空闲转换: 线程A 在CPU1 上运行;线程A 唤醒线程B;线程B 开始在CPU2 上运行;线程A 立即进入睡眠状态,待线程B 完成其当前工作后,由线程B 将线程A 唤醒;如果 CPU 2 空闲,它必须回到活动状态,然后线程 B 才可以运行。根据 SOC 和空闲的深度,线程 B 可能需要等待几十微秒才能开始运行。
日志记录: 日志记录并非不会占用 CPU 周期或内存,因此,请勿滥用日志缓冲区。日志记录会消耗应用(直接)和日志守护程序的周期。在设备出库之前,请删除全部调试日志。
I/O 问题
激进式小任务打包: 一些调度程序支持将小任务打包到单个 CPU 内核上,从而让更多 CPU 在更长时间内保持空闲,以此降低功耗。
页面缓存颠簸: 某个文件被读取的字节数超过了磁盘上该文件的总大小,毫无疑问,您遇到了页面缓存颠簸问题。
安卓官方链接
于 2020-12-29 10:54:27 首次发布