`
maricoliu
  • 浏览: 54234 次
  • 性别: 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应用程序代码保护与反保护》本科毕业论文一万字.doc

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

    Android *应用程序的性能评估

    在本说明中,我们讨论了如何为Android *操作系统获取类​​似的性能数据。

    iperf3工具-windows+android设备可执行文件

    TCP测试通常用于测量可用带宽,而UDP测试用于测量延迟和数据包丢失率,适用于实时应用程序如语音通话和视频流的性能评估。 灵活的参数配置:iPerf3允许用户通过命令行参数来配置测试的各个方面,如测试持续时间、...

    安卓智能手机GNSS单点测速性能评估.pdf

    安卓智能手机GNSS单点测速性能评估.pdf

    基于Android+OpenCV+CNN+Keras的智能手语数字实时翻译-深度学习算法应用(含java、ipynb工程源码)

    为方便展示生成图片的效果及对参数进行微调,本项目未使用keras直接训练生成器,而是先生成一个增强过后的数据集,再应用于模型训练;项目使用的卷积神经网络由四个卷积块及后接的全连接层组成,每个卷积块包含一个...

    android-realm-performance:Android中Realm数据库的性能测试

    领域数据库性能评估 创建此应用程序的目的是针对Realm数据库相对于Android中其他常见数据库(即普通SQLite数据库和内容提供商支持SQLite数据库)的性能进行测试。 该应用程序主要用Groovy编写,因为为什么不呢? ...

    鹰眼手机评测 v1.3.1

    2、手机软件应用性能跑分、评测; 3、手机硬件性能跑分、评测; 4、手机综合性能PK; 5、手机软件应用性能PK; 6、手机硬件性能PK; 鹰眼手机评测率先提供了针对Android手机应用进行科学评估测试的功能,它既可以对...

    Android项目项目_battery(电池)监控程序.rar

    Battery监控程序是一个专为Android设备设计的应用程序,用于实时监控和管理设备的电池状态。通过该程序,用户可以轻松查看电池的健康状况、电量百分比、电压、温度等关键参数。此外,它还提供了详细的电池使用报告,...

    基于 Android 的人脸防伪算法研究

    并利用神经网络来自动学习人脸防伪特征的方式,在两个公开数据库中进行测试评估,实验结果表明,该方法可以更有效地判别人脸图像是来自真实的人脸或是虚假的人脸,在反人脸欺骗方面具有较好的性能。同时将其移植到...

    在Android平台上结合多核和多线程技术提升系统性能

    采用多核技术提升CPU马力,是一种通过硬件提供更高系统性能的日益... 基于以上考虑,我们近采用EEMBC的BrowsingBench基准测试程序来评估MIPS多核(MC)和多线程(MT)技术能带来的性能提升。我们的目标是在Android软件

    飞思卡尔i.MX处理器扩大Android支持

    该套件加快并简化了基于 Android 平台和飞思卡尔 i.MX51 处理器的应用开发,而该应用具有极大的市场吸引力。  Android 平台支持创新的终用户体验。基于强大的ARM Cortex-A8 内核的i.MX51 处理器,协同 Android 操作...

    智能家居架构包括服务器端web网页android 手机客户端各种测试脚本基本上基础架构都已经实现

    这些脚本可以模拟真实的使用场景,进行自动化测试和性能评估。 智能家居的控制部分是整个系统的核心和灵魂,它包括各种传感器、执行器和智能算法。通过这些控制部分,用户可以实现对灯光、温度、安防等各个方面的...

    基础电子中的在Android平台上结合多核和多线程技术提升系统性能

    采用多核技术提升CPU马力,是一种通过硬件提供更高系统性能的日益... 基于以上考虑,我们最近采用EEMBC的BrowsingBench基准测试程序来评估MIPS多核(MC)和多线程(MT)技术能带来的性能提升。我们的目标是在Android软

    反模拟器调试测试工具

    进行移动应用软件安全评估时需要的一款测试工具。Genymotion 是一款优秀专业高性能的安卓 Android 模拟器!它支持 Windows、Mac、Linux,由于其模拟运行速度很快画面流畅、且支持 OpenGL 3D 加速、多开、全屏等特性...

    嵌入式系统/ARM技术中的飞思卡尔i.MX处理器扩大Android支持

    该套件加快并简化了基于 Android 平台和飞思卡尔 i.MX51 处理器的应用开发,而该应用具有极大的市场吸引力。  Android 平台支持创新的最终用户体验。基于强大的ARM Cortex-A8 内核的i.MX51 处理器,协同 Android ...

    pulse-java:基于 Android 的欧拉视频放大实现生命体征监测

    因此,欧拉视频放大方法的色彩放大性能得到了优化,以便在 Android 设备上以合理的速度执行。 所实现的Android 应用程序包括诸如检测人的心脏脉搏、处理伪影运动以及放大血流的实时显示等功能。 然后,

    ImageListTask:Image_List_Task

    趋势GitHub存储库 ... 要做的事情:该项目的主要想法是构建一个具有2个屏幕的原生Android应用, 热门的GitHub GitHub存储库列表 从列表中点击存储库后,应用程序应打开一个包含更多信息的简单“详细视图”。

    Android中NFC模块PN532开发板应用/原理图/PCB等全部资料-电路方案

    @ 内部带一个MCU51,支持命令方式,可以直接跟PC串埠连接成为一个RFID读卡器,简单方便,成本低,性能好。 @ 读卡器通过串口和电脑连接,上位机可以使用libnfc,libnfc是一个开源的软件,功能特别强大,实现了很多...

    TFProfiler:在设备上分析您的Tensorflow Lite模型

    该应用程序显示应用程序内部构建的模型列表,可用于评估其在设备上的性能。 另外,您可以上传* .tflite模型并查看其在智能手机上的工作方式。 下载 最新的apk版本可以在发布上找到。 或通过Google Play下载应用程序...

Global site tag (gtag.js) - Google Analytics