转载:http://tech.mozilla.com.tw/posts/1803/application-%E6%95%88%E8%83%BD%E5%88%86%E6%9E%90-%E4%BD%BF%E7%94%A8-perf

在手機上面,Application 的實作往往會影響到效能好壞以及是否夠省電,其中 Application 的 CPU 使用量會是一個非常關鍵的因素。

以下就拿使用 Firefox OS 的手機來做舉例說明,首先透過下面的 top 指令,可以看到整體 System 以及 Application 的 CPU 使用量,有助於了解 System 或者是 Application 的負載。

peter@pchang:~$ adb shell top -s cpu -m  -d
User %, System %, IOW %, IRQ %
User + Nice + Sys + Idle + IOW + IRQ + SIRQ = PID PR CPU% S #THR VSS RSS PCY UID Name
% R 180304K 60156K fg root /system/b2g/b2g
% R 85824K 34104K fg app_483 /system/b2g/plugin-container
% R 1056K 408K fg root top

為了要進一步分析 Application 的效能瓶頸,可以使用 Linux 上分析的工具, perf (Download from Tegra Android Toolkit)。
   
Perf 是根據 Linux Kernel 已經定義的 perf_event 來紀錄程式運作的過程,所以只要是 Linux based
system 都可以支援,包含 Android/Firefox OS phone。目前 perf_event 在 Linux Kernel
上預設為啓動,所以使用 perf 只要準備好 Application debug symbols 就可以來進行分析。有興趣的朋友可以參考perf kernel support,來進一步確定你的手機是否有啟動 perf_event。

Perf 上也有類似 top 指令,可以看到整體 System 的負載,譬如下面的結果,就可以看到 WebGLContext::Conver 佔用了最多 CPU 資源。

peter@pchang:~$ adb shell perf top

-------------------------------------------------------------------------------
PerfTop: irqs/sec kernel:24.9% exact: 0.0% [1000Hz cycles], (all, CPUs)
------------------------------------------------------------------------------- samples pcnt function DSO
_______ _____ _____________________________ ______________________ 697.00 50.6% mozilla::WebGLContext::Conver /system/b2g/libxul.so
424.00 30.8% yamato_tile_texture libGLESv2_adreno200.so
124.00 9.0% yamato_untile_texture libGLESv2_adreno200.so
26.00 1.9% rb_surface_read libGLESv2_adreno200.so
11.00 0.8% mozilla::gl::SwapRAndBCompone /system/b2g/libxul.so
5.00 0.4% yamato_texfmt_to_pixfmt_for_m libGLESv2_adreno200.so

也可以透過 perf record/perf report ,來針對特定的 Application 做負載的分析。不過在分析之前,需要準備除錯用的 gecko modules 和對應的 debug symbols。以 Firefox OS 為範例,先做下面的修改,然後重新編譯和取代 gecko modules 到手機上,這樣是為了把 debug symbols 放到編譯好的 gecko modules,之後才能得到詳盡的分析結果。

peter@pchang:~/B2G/gonk-misc$ git diff ./default-gecko-config
diff --git a/default-gecko-config b/default-gecko-config
index c14919a..9a18176
--- a/default-gecko-config
+++ b/default-gecko-config
@@ -, +, @@ ac_add_options --enable-debug-symbols
if [ "${B2G_DEBUG:-0}" != "" ]; then
ac_add_options --enable-debug
fi
+ac_add_options --enable-profiling if [ "${B2G_NOOPT:-0}" != "" ]; then

透過下面的指令把 debug symbols 存放在 tmp folder 下面。

cp -pr out/target/product/device_name/system/ /tmp/b2g_perf/system/
cp -pr out/target/product/device_name/symbols/system/ /tmp/b2g_perf/system/
cp -pr objdir-gecko/dist/bin/b2g /tmp/b2g_perf/system/b2g/
cp -pr objdir-gecko/dist/lib/*.so /tmp/b2g_perf/system/b2g/

接下來可以開始分析 Application 運作上的瓶頸。
   
Perf record 會針對 Application 記錄 20 秒的運作訊息,接著把記錄的資料從手機上下載出來。
   
最後使用 perf report 就可以看到使用 CPU 資源最多的函式名稱,接下來開發者就可以開始進行評估是否有改善的計劃讓 Application 運行的更快更省電。

peter@pchang:~$ adb shell perf record -p pid -o /data/local/perf.data sleep
peter@pchang:~$ adb pull /data/local/perf.data /tmp/b2g_perf/ peter@pchang:~$ perf report --symfs=/tmp/b2g_perf/system/ --sort dso,symbol 71.38% libxul.so [.] mozilla::WebGLContext::Conver
15.28% [ath6kl_sdio] [k] 0x106fd7c
7.40% libGLESv2_adreno200.so [.] yamato_tile_texture
1.81% libc.so [.] memcpy
...

Perf 還有更多的功能,有興趣的讀者可以參考下面的連結。

https://perf.wiki.kernel.org/index.php/Tutorial

Application 效能分析有妙招 — 使用 perf 走天下(转载)的更多相关文章

  1. 《构建之法》教学笔记——Python中的效能分析与几个问题

    <构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...

  2. 【Android 应用开发】 Application 使用分析

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40737419 代码下载 : Android 应用 Application 经典用法; ...

  3. python实现四则运算和效能分析

    代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...

  4. python词频统计及其效能分析

    1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...

  5. C#词频统计 效能分析

    在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...

  6. 第五次作业——python效能分析与几个问题(个人作业)

    第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读 ...

  7. 《软件工程和Python》PYTHON效能分析和Django

    资料汇总网站:http://www.yzhiliao.com/my/course/55 一..作业下面两个题目任选一题: (1)运用jieba库分词(或者你喜欢的其他库),并把代码发到git上去(不发 ...

  8. 效能分析——词频统计的java实现方法的第一次改进

    java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...

  9. Application 使用分析

    一. Application 分析 1. Application 简介 (1) Application 概念 Application 概念 : Application 属于组件范畴; -- 本质 : ...

随机推荐

  1. BZOJ1700: [Usaco2007 Jan]Problem Solving 解题

    每月m<=1000块钱,有n<=300道题,要按顺序做,每月做题要花钱,花钱要第一个月预付下个月立即再付一次,给出预付和再付求最少几个月做完题,第一个月不做. 神奇的DP..竟没想出来.. ...

  2. lightoj 1293 - Document Analyzer [ 两指针 + 字符串 ]

    传送门 1293 - Document Analyzer   PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: ...

  3. msp430项目编程21

    msp430中项目---直流电机控制系统 1.定时器工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习

  4. WKWebView的了解

    1. http://blog.csdn.net/chenyong05314/article/details/53735215 2. http://www.jianshu.com/p/6ba250744 ...

  5. UINavigationController 小记

    1.以栈的形式管理视图控制器,push 和 pop 方法来弹入和弹出控制器,最多只能显示一个视图控制器. 2.使用pop方法可以移除栈顶控制器,当一个控制器被pop后,控制器内存会被释放了. 3.一层 ...

  6. 最少拦截系统-----hdu1257(dp+最长上升子序列)

    Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高 ...

  7. P1918 保龄球 洛谷

    https://www.luogu.org/problem/show?pid=1918 题目描述 DL 算缘分算得很烦闷,所以常常到体育馆去打保龄球解闷.因为他保龄球已经打了几十年了,所以技术上不成问 ...

  8. openstack DVR的AIO 问题

    问题描述 : 创建public 网络,创建路由器,并且把路由器的gateway 设置指向网络后有下面几种错误 路由器对应的linux network namespace 建立起来了,但是里面并没有对应 ...

  9. Java: 创建自带依赖库的Jar包

    pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

  10. SQL 撤销索引、撤销表以及撤销数据库

    SQL 撤销索引.撤销表以及撤销数据库 通过使用 DROP 语句,可以轻松地删除索引.表和数据库. DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引. 用于 MS Access ...