读书人

Android 应用性能评价

发布时间: 2013-10-08 14:58:57 作者: rapoo

Android 应用性能评估

Android* 应用性能评估

/proc/stat 中包含大量数据。其中最相关的信息是报告 CPU 活动总数的第一行。之后以‘cpuN’开头的每行报告该特定 CPU 的活动。我们发现这里的示例设备具有两个处理器。每个字段的含义解释如下:

1* 文中涉及的其它名称及商标属于各自所有者资产。

Android 应用性能评价

时间单位在 USER_HZ 中定义,通常为百分之一秒。系统重启后,这些统计数据的数值将逐个进行累加。要获取每个间隔时段的性能数据,您只需计算该时段开始时捕获的数据与该时段结束时捕获的数据的差异即可。

User(用户):以‘user(用户)’模式执行进程所耗费的时间
Nice(优先):以‘niced(优先)’模式执行进程所耗费的时间。Niced(优先)进程指的是以默认优先级之外的优先级运行的进程。
System(系统):以‘kernel(内核)’或‘supervisory(监管)’模式执行进程所耗费的时间。
Idle(闲置):执行闲置进程的时间。此时不存在运行的进程。
Iowait:等待 IO(输入输出)完成的时间
Irq:处理中断的时间
Softirq:处理 softIRQ 的时间
Steal Time、Guest Time、Guest Nice Time:在虚拟客户操作系统中耗费的时间。在 Android* 中,这些值通常为零
/proc/stats 中报告的其余数据描述如下:

Intr:系统出现的中断的次数。标志‘intr’之后的第一列表示系统在重启后出现的中断的总次数。后续各列的值表示出现的中断次数,使用从 interrupt 0 开始的列编号进行表示。
Ctxt:系统重启后发生的环境切换次数。
Btime:系统启动时间,使用自格林威治标准时间 1970 年 1 月 1 日之后发生的偏移量表示(单位:秒)。
进程:系统在启动后创建的进程数
Procs running(运行的进程):运行的进程数
Procs blocked(被阻止的进程):被阻止以等待 IO 完成的进程。
Softirq:已处理的 softirq 的总数。SoftIRQ 是对时间要求不严格的软件中断。

以上两个数据样本之间的差异如下表所示。Sum(总数)列显示的是不同任务所耗费的总时间。CPU Util 列显示的是非闲置任务的总数。每个 CPU 下的一行以占总时间百分比的形式显示了相同的数据。注意各种任务所耗费的总时间加起来应为 5 秒。由于本系统包含两个处理器,因此每个样本的总 CPU 时间为 2x5 = 10 秒。

Android 应用性能评价

对于运行时间相当长的工作负载(如视频播放),我们可制作一张时间表,用以显示该工作负载随时间推移的 CPU 利用率。通过研究以上时间表,我们可以发现该工作负载耗费处理器资源的不同阶段。图 1 显示了一个图像型工作负载的时间表。我们注意到该工作负载的最大 CPU 利用率仅为 50%。这表明该工作负载仅能够利用一个 CPU。如果有必要加快该工作负载的速度,可能值得想办法利用另一个 CPU。

Android 应用性能评价

图 1 - An3DBenchXL 的 CPU 利用率

CPU 利用率并不能代表性能的全部。现代处理器通常能够在几种不同的频率(称作 Pstate)下运行。对于移动设备,操作系统可以改变处理器的运行频率,以最大限度地降低功耗和延长电池的使用时间。

图 2 显示了同一台笔记本电脑在播放两段相同的视频剪辑(编码分别为 720p H264 和 360p H264)时的 CPU 利用率和平均处理器运行频率。数据显示,相较于 CPU利用率可能显示出的差异,播放 720p H264 视频实际耗费的 CPU 资源更多。解码 720p H264 视频不仅需要大约 4 倍的 CPU 利用率,而且处理器的运行频率也比在解码另一个视频时要高 2.4 倍。

Android 应用性能评价

图 2 视频播放性能

Android* 在 /sys/devices/system/cpu/cpuX/cpufreq/stats/time_in_state 文件中报告其处理器运行频率或 pstate。以下脚本进行了修改,现包含各种处理器 pstate 数据。
while :doecho Date: `date +”%Y-%m-%d %H:%M:%S”`cat /proc/stat >> /data/local/tmp/myvmstat.outecho CPU0 Pstate Residencycat /sys/devices/cpu/cpu0/cpufreq/stats/time_in_stateecho CPU1 Pstate Residencycat /sys/devices/cpu/cpu1/cpufreq/stats/time_in_statesleep 5done


从 Motorola Xoom 的处理器 pstate 信息中返回的数据如下所示:

CPU0 PState Residency216000 4356448312000 400626456000 559897608000 398231760000 92081816000 0912000 01000000 1485891


每个数据对代表一种 pstate 频率(单位为 KHz)及系统启动后该状态下所耗费的时间 (单位为百分之一秒)。每个处理器提供的 pstate 数各不相同。本例中,用于驱动 Motorola Xoom 的 NVIDIA Tegra2 处理器提供了 8 种可能的 pstate,频率从 216 MHz 到 1 GHz。

运用同计算 CPU 利用率相同的技巧,我们可计算出在取样间隔一定的情况下,处理器在每种 pstate 下所耗费的时间百分比。通过计算 pstate 频率的加权总和及该状态下所耗费时间的百分比,我们还可以得出相同间隔的平均频率。获得的数据如图 1 所示。

总结通过使用 adb 和 Android* 从 Linux* 继承而来的现有性能基础设施,我们可深入了解 Android* 应用的性能特征。在此基础上,我们可对应用进行提升用户体验和降低功耗等优化操作。


* 文中涉及的其他名称及商标属于各自所有者资产

?

读书人网 >Android

热点推荐