另一個Android效能剖析工具——simpleperf
另一個Android效能剖析工具——simpleperf
原文連結:
談到Android上的效能剖析,很多人會想到TraceView,SysTrace。TraceView擅長Method Tracing,與IDE整合,使用方便,不過有時候它的誤差讓人無法忍受;SysTrace的牛逼之處在於它可以給出整個系統的一些關鍵模組的效能資訊,因此用途廣泛;雖然它也支援分析自定義模組,但是使用起來稍顯複雜。
事實上,在AOSP中有另外一個效能剖析工具不為人知,這個安靜的小可愛就是今天要介紹的主角—— 。我們先來看看它的介紹:
Simpleperf is a native profiling tool for Android. Its command-line interface supports broadly the same options as the linux-tools perf, but also supports various Android-specific improvements.
native profiling?是不是很心動?
至於simpleperf的原理,簡單來說,現代CPU一般都帶有一個叫做效能監視單元(PMU)的元件,這個硬體能夠記錄諸如cpu週期數、執行的指令數、快取失效次數等等關鍵資訊;Linux核心對這個硬體做了一層封裝,透過 `perf_event_open` 系統呼叫把介面暴露給使用者空間;這就是simpleperf工具的由來。
簡介和原理都表明這個工具貌似很牛逼,接下來我們就試一試。
首先把AOSP上的原始碼下載下來,。
simpleperf是一個命令列工具,與systrace不同的是,它的工具集包涵client端和host端;client端執行在Android系統上,負責收集效能資料;host端則執行在你的開發機上,負責對資料進行分析和視覺化。(這些可執行檔案在下載後的bin資料夾的android和win/mac/linux下)整個工具鏈使用起來相對複雜,所幸simpleperf的創造者提供了一個炒雞傻瓜的使用指令碼,使用起來毫不費力,非常方便!這個指令碼就是 `app_profile.py`。
我們把 simpleperf 下載下來之後,首先修改 `app_profile.config` 檔案中的配置,主要是以下幾個欄位:
# 待分析的app的包名,需要是debuggable的 app_package_name = "" # 分析的命令,體驗的話使用預設即可;更詳細的用途看文件。 record_options = "-e cpu-cycles:u -f 4000 -g --dump-symbols --duration 10" # 待分析app的主介面,app_profile.py會透過am start 幫助開啟app main_activity = ''
然後在你的裝置上安裝待分析的App,要注意的是這個App必須是debuggable的,在AndroidManifest中把debuggable設定為true即可。接下來,就可以直接透過:
python app_profile.py
進行分析了,這個指令碼幫你完成了simpleperf下載,許可權設定,開啟app,匯出資料等等一系列過程;開始分析之後,就可以對App進行操作;在設定好的時間之後就會停止分析,跟SysTrace一樣。分析完畢之後,指令碼會自動把分析資料從裝置上pull下來並存放在當前目錄下,叫 perf.data。
接下來就是分析資料了;原始的資料是一個文字檔案,長這樣:
0.00% 0.00% ORDERED_THREAD_ 17046 18210 /system/lib/libart.so art::Mutex::ExclusiveLock(art::Thread*) | -- art::Mutex::ExclusiveLock(art::Thread*) 0.00% 0.00% AsyncTaskExecut 17046 18216 /system/lib/libart.so art::Monitor::Lock(art::Thread*) | -- art::Monitor::Lock(art::Thread*) | |--52.01%-- art::Mutex::ExclusiveLock(art::Thread*) | --0.54%-- art::Mutex::ExclusiveUnlock(art::Thread*)
巢狀如果過深,基本就看不懂了;所幸我們有另外一個分析指令碼!直接執行:
python report.py -g
會啟動一個GUI顯示分析得到的資料,這個GUI使用python的tk寫的,實話說,長得比較醜。。
簡單觀察分析圖,可以知道,的確支援native profiling;gui和TraceView差不多,比較直觀,但是指標沒有TraceView多。另外,這個工具由於硬體直接支援,對效能的影響非常小;光是這一點就好頂讚了。
你以為這就完了?No!這玩意兒還支援 火焰圖! 如果你不知道火焰圖為何物,建議看看這篇文章。
然後,要繪製火焰圖,我們需要藉助 這個工具;clone下來之後,裡面的指令碼就可以直接使用了。(perl指令碼,windows系統需要安裝Perl語言的支援)
接下來我們執行命令:
$python report_sample.py >out.perf $stackcollapse-perf.pl out.perf >out.folded $./flamegraph.pl out.folded > graph.svg
我們用Chrome瀏覽器開啟這個 `graph.svg` 即可得到火焰圖:
透過火焰圖,我們能非常直觀地看到效能的瓶頸,對於分析效能問題很有幫助;相信這個圖已經說明一切了。
當然 simpleperf 遠非這麼簡單,我只是帶大家嚐嚐鮮;對它感興趣的,可以執行 `simpleperf -h` 結合文件去探索它的奧妙;祝大家玩得開心~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/200/viewspace-2808436/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Simpleperf分析之Android系統篇Android
- android效能分析工具systraceAndroid
- Android 效能分析工具之TraceViewAndroidView
- perf/Simpleperf 生成火焰圖
- 3.6 總結(服務效能剖析總結)《伺服器效能剖析》伺服器
- 阿里巴巴 Android 效能測試工具 mobileperf 開源 (天貓精靈 Android 效能測試 - 線下篇)阿里Android
- Android 擼一個快取工具類Android快取
- YYModel 原始碼剖析:關注效能原始碼
- 深度剖析分散式事務效能分散式
- Android小知識-剖析OkHttp中的五個攔截器(中篇)AndroidHTTP
- Android小知識-剖析OkHttp中的五個攔截器(上篇)AndroidHTTP
- Android小知識-剖析OkHttp中的五個攔截器(下篇)AndroidHTTP
- [Android] Toast問題深度剖析(二)AndroidAST
- [Android] Toast問題深度剖析(一)AndroidAST
- 剖析 Android 架構元件之 ViewModelAndroid架構元件View
- 效能測試工具 jmeter 原始碼剖析:jmeter 分散式壓測啟動過程JMeter原始碼分散式
- Android加快編譯速度的另一種方法Android編譯
- Golang 大殺器之效能剖析 PProfGolang
- [Android] 狀態機 StateMachine 原始碼剖析AndroidMac原始碼
- 10分鐘剖析Android原始碼——序Android原始碼
- Android 資源載入機制剖析Android
- Android RollBack機制實現原理剖析Android
- MongoDB關聯另一個集合MongoDB
- Linux效能運維–三個Python小工具Linux運維Python
- Android效能優化Android優化
- 【基本功】深入剖析Swift效能優化Swift優化
- 剖析HBase負載均衡和效能指標負載指標
- JProfiler for Mac:深度剖析Java應用程式效能MacJava
- Android系統原始碼剖析-事件分發Android原始碼事件
- 全面剖析Android訊息機制原始碼Android原始碼
- Android啟動過程剖析-深入淺出Android
- Android的log日誌知識點剖析Android
- 【Azure Developer】一個複製Redis Key到另一個Redis服務的工具(redis_copy_net8)DeveloperRedis
- 樹的另一個構建方式
- 另一個Swoole偵錯程式 - Yasd
- 5 分鐘擼一個前端效能監控工具前端
- 5分鐘打造一個前端效能監控工具前端
- 幾個常見的MySQL效能測試工具RQMySql