`
maricoliu
  • 浏览: 55167 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Android 应用性能评估

阅读更多

Android* 应用性能评估

  2011年10月09日 08:00
 

 

 

作者:Tuan H. Bui

概述

要优化应用以提供最佳用户体验,了解该应用对于某个特定平台的性能需求十分重要。在 Linux* 操作系统上,我们可使用 vmstat 来监控应用的多个性能要素,如内存占用空间、CPU 和 IO 需求等。Windows* 任务管理器为 Windows* 操作系统提供了类似的功能。本文中,我们将探讨如何为 Android* 操作系统获取相似的性能数据。

讨论

Android* 本质上是一种 Linux* 操作系统,因此可提供类似的性能数据。由于手机/平板电脑的使用模式仅允许前台一次运行一个应用,因此获得这些数据有些困难。

要监控运行在 Android* 上的应用的性能,第一项任务是在应用运行相关工作负载的同时,运行性能监控实用程序。例如,我们希望监控视频播放应用的性能,以了解该应用没有按照既定帧速率运行的原因。由于在上述情况下,我们要监控的应用 – 视频播放器运行在前台,因此我们需要寻找其它方法来监控视频播放器运行时的性能。为了达到这个目的,我们采取的办法是:编写一个持续在后台运行的 Android* 服务,以将性能数据记录到一个随后可查看的文件中。更简单的方法是使用 Android* 调试桥 (adb) 实用程序。通过 USB 电缆或 TCPIP 端口,Android* ADB 可为 Android* 操作系统提供一个调试 shell。通过 TCPIP 端口启用 adb 调试的步骤如下:

  1. 在 Android* 控制面板中启用 USB 调试。
  2. 通过 USB 电缆将设备与主机相连。如果您使用的是 Windows* 主机,则可能需要从设备制造商处获取 USB 设备驱动程序。如果使用的是 Linux* 主机,则通常无需特殊的设备驱动程序。
  3. 通过发出‘adb devices’命令,确保主机能发现设备。该命令应当返回一串连接到主机的设备。
  4. 通过发出‘adb tcpip 5555’命令启用 TCPIP 调试。该命令指示 adb 重启并侦听端口 5555,以获取 adb 连接消息。
  5. 通过发出‘adb <device_ip_address>’命令断开 USB 电缆连接和重新连接到设备。
通过 adb 连接到主机后,用户将能够访问 Unix shell。后者可在相关应用运行在设备主屏幕时,运行多种后台监控命令,如‘top’和‘vmstat’等。注意,同时运行其它命令和应用可能会降低要监控的应用的性能。例如,‘top’命令是一种 CPU 密集型命令,应当谨慎使用。以最小的开销监控性能的最佳方法为仅收集那些操作系统定期产生的数据,并将这些数据存放在一个文件中,以便在应用停止运行后进行处理。同 Linux 一样,Android 在 /proc 文件系统中提供了大量性能统计数据。要监控的性能数据存放在 /proc/stat 中。要定期(如每隔 5 秒)监控系统性能,您只需使用一个与以下脚本相似的 shell 脚本

while :
do
	echo Date: `date +”%Y-%m-%d %H:%M:%S”`
	cat /proc/stat >> /data/local/tmp/myvmstat.out
	sleep 5
done


以下是 Android* 媒体播放器在 Motorola Xoom*1 平板电脑上播放 720p H264 视频时,以 5 秒的时间间隔捕获的两个 /proc/stat 样本。为便于阅读,我们将数据导入到一个电子表格中。



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

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



时间单位在 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 秒。



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



图 1 - An3DBenchXL 的 CPU 利用率

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

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



图 2 – 视频播放性能

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


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

CPU0 PState Residency
216000 4356448
312000 400626
456000 559897
608000 398231
760000 92081
816000 0
912000 0
1000000 1485891


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

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

总结

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


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

 

分享到:
评论

相关推荐

    基于贝叶斯网络的Android应用风险评估的研究.pdf

    5. **性能评估与验证**:通过交叉验证和其他评估指标(如准确率、召回率、F1分数)来验证模型的性能,并与现有的风险评估方法进行比较。 6. **案例分析与应用**:论文可能还会提供一些实际案例,展示如何使用该方法...

    Android平台应用隐私泄露检测与评估技术.pdf

    这些指标可以-help 评估 Android 平台应用隐私泄露检测技术的效果和性能。 Android 平台应用隐私泄露检测技术的研究现状和进展 当前,Android 平台应用隐私泄露检测技术的研究主要集中在静态分析和动态分析两个...

    android app性能优化

    本篇文章将深入探讨Android应用性能优化的关键点,从理解性能优化的基本原则,到具体的实践技巧,帮助开发者构建更加高效的应用。 #### 高效编码的两大准则 1. **避免不必要的工作**:编写代码时应确保每一行代码...

    Android-Android性能监控检测工具FPSCPUPSSPrivateDirty

    总结来说,FPSCPUPSSPrivateDirty是评估Android应用性能的关键指标。通过如`NoobCoach-master`这样的工具,开发者可以有效地监控和优化应用,提高其性能和用户满意度。在实际开发过程中,结合代码分析和性能测试,...

    《Android性能测试》 PDF

    《Android性能测试》这本书深入探讨了Android应用性能优化的关键技术和实践方法。在移动开发领域,尤其是在竞争激烈的Android市场,提供高性能、低资源消耗的应用是开发者必须面对的重要挑战。本篇文章将依据书中的...

    Android性能测试工具

    2. "3DMark":专注于图形性能测试,对GPU进行严苛的渲染测试,适用于游戏开发者和移动设备的图形性能评估。 3. "Vellamo":由高通公司推出,测试网络浏览、金属性能(CPU与GPU)、多核性能等方面。 4. "AnTuTu ...

    论文研究-Android应用加固检测技术与评估标准研究 .pdf

    本文主要研究了Android应用的逆向技术以及动态对抗,并结合了Android应用加固的不同保护层面及其效果,总结出了Android应用加固检测技术和评估指标。通过分析当前主流的加固指标权重并进行权重分配,本文提出了一种...

    2013CVT在线测评 android应用

    【标题】"2013CVT在线测评 android应用"所指的,是2013年进行的一次针对Android应用程序的CVT(可能是Capacity Validation Test或Continuous Validation Test的缩写)在线评估活动。这样的测评通常是为了测试Android...

    基于Emmagee的移动应用性能测试实验设计.pdf

    Emmagee是一款专用于Android应用性能测试的开源工具,它可以帮助开发者和测试人员收集应用运行时的各种性能数据,如CPU使用率、内存分配、帧率等。通过Emmagee,可以深入分析应用在不同场景下的性能表现,找出可能...

    android网络性能测试方法及工具

    在Android平台上进行网络性能测试是优化...通过持续监控和分析,可以确保Android应用在不同网络条件下的稳定性和效率。因此,熟悉并熟练运用Netperf这样的工具,对于Android开发人员来说,是一项非常有价值的技术技能。

    开源的 Android APM (应用性能监测) 工具.zip

    Scouter是一款强大的开源APM工具,专为Java和Android应用程序设计。它提供了全面的性能监控功能,包括CPU使用率、内存占用、网络活动、数据库操作等关键指标的实时监控。通过这些数据,开发者可以迅速定位性能瓶颈,...

    Android性能优化典范 - 第6季 - 胡凯1

    【Android性能优化典范 - 第6季 - 胡凯】主要涵盖了Android应用性能优化的关键方面,特别是关于程序启动时间和安装包大小的优化。以下是详细的知识点解析: 1. **程序启动时间优化**: - **启动时间的重要性**:...

    《Android应用程序代码保护与反保护》本科毕业论文一万字.doc

    《Android应用程序代码保护与反保护》本科毕业论文【一万字】.doc ...第五章 Android应用程序代码保护评估与性能分析 5.1 保护效果评估 5.2 系统性能分析 第六章 结论与展望 6.1 研究结论 6.2 进一步的研究方向

    C#开发Android应用实战

    7. 分析和总结:从技术、商业和开发过程的角度评估Xamarin开发Android应用的成效。 这本书为读者提供了一个系统的学习路径,涵盖了从基础知识到高级应用开发的全方位内容,是希望使用C#开发Android应用的开发者的...

    android 游戏性能测试 源码

    这个“android 游戏性能测试 源码”压缩包很可能是提供了一套用于评估和优化Android游戏性能的工具或代码库。通过分析源码,我们可以深入了解如何对游戏进行性能调优,提升游戏的运行效率。 首先,让我们来看看“D_...

Global site tag (gtag.js) - Google Analytics