2012-12-05 57 views
3

就像在Linux上的Intel處理器一樣,我們有大量的硬件性能計數器來訪問。像以前一樣,使用名爲perfmon2的用戶空間軟件,我可以得到緩存缺失率,由於某種原因(例如L1緩存未命中)而導致的CPU停滯週期等。Android(在ARM上)是否具有硬件性能計數器?

我的問題是,我們有嗎那些在Android的東西?由於它基於ARM,所以我認爲我們沒有像x86那樣強大的性能監視器計數器支持,對吧?

回答

4

ARM11和Cortex-A/R確實有硬件性能計數器。您可以在此頁的官方ARM網站上查看:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka4237.html

由於Android也運行在Linux之上,您可以通過用戶空間軟件通過「Perf Events」子系統訪問性能計數器。但是,您需要編寫包含「perf_event.h」的本機C代碼並使用Android NDK構建它。在開始編寫代碼之前,我建議你看一下這個項目:platform/external/linux-tools-perf(https://android.googlesource.com/platform/external/linux-tools-perf/),這可能正是你正在尋找的東西。我不知道任何可以直接從Java代碼執行此操作的替代方法。

4

除了Benny的答案,我會加入以下內容:

  1. 的Linux的工具 - PERF項目與AOSP集成(我使用的是4.2)。它在$ AOSP/external/linux-tools-perf下。 ./linux-tools-perf/Documentation包含許多關於如何運行所有信息。 perf工具作爲AOSP的一部分內置於$ PRODUCT_OUT/system/bin/perf中,但未包裝;您需要明確地將其推送到目標。

  2. 檢查Android(linux)內核以確認它支持PM:PERF_EVENTS。 Google如何獲取.config,但最簡單的是運行「extract-ikconfig zImage」。

  3. 需要在目標上擁有root訪問權限,然後運行諸如「./perf stat - testprog1」來查看結果。該命令有很多參數來記錄/檢索不同的PM計數器。

  4. 還記得大多數ARM實現有多個核心和很多流水線。 Cortex-A9無序執行。所以這些數字可能有點怪異 - 有時候幾乎毫無意義。

  5. 我偶爾會使用ARM PMCCNTR寄存器(ARM PM循環計數器)來測試代碼性能。 PMUSERENR.EN和PMINTENCLR.C必須設置爲PL1 +級別,然後PMCCNTR可以在PL0級別進行管理。請參閱ARM ARM瞭解所有這些含義以及示例用法的perf子系統!

提示:所有的外殼瓦爾在$ AOSP /編譯/ envsetup.sh

+0

我同意成立。最好的方法是從sysfs爲核心供電(如果測量unicore性能/單線程)並在空閒系統設置下測試2-3次,然後運行測試。這應該給人一個更好和現實的圖景。 – shingaridavesh

相關問題