簡體   English   中英

基於Android跟蹤和基於采樣的方法分析之間的差異及其對報告的CPU時間的影響

[英]Difference between Android trace-based and sampling-based method profiling and its impact on reported cpu times

Android Traceview中基於跟蹤的分析和基於采樣的分析方法有什么區別? 我以為基於跟蹤更准確,但是,它似乎會扭曲實際的cpu時間,尤其是在有其他帶有函數調用的情況下。

例如,我要評估一個具有兩個實現的函數A,例如A-1和A-2。

  1. A-1還有一個函數調用,例如A-1-1。
  2. A-2還有更多的函數調用,例如A-1-1,但是,A-1-1內部還有一個函數調用,例如A-1-1-1。

現在,我認為基於跟蹤的分析將報告更高的A-2值,因為它需要跟蹤一個額外的函數A-1-1-1,並且此額外的cpu使用情況將在A-2的cpu時間中報告。 我對嗎 ?

因此,問題就變成了,基於跟蹤的方法在報告父函數的實際cpu時間時,是否考慮到跟蹤子方法所花費的cpu開銷時間?

另一方面,基於采樣的方法的問題在於它可能無法捕獲非常輕量級的函數。 如果我的函數需要0.2毫秒的cpu時間並且采樣間隔是1毫秒怎么辦? 我對其進行了一些實驗,它無法捕獲輕量級的函數調用。 關於它們之間的差異有什么想法或參考文檔嗎?

最后一個問題是相對比較哪個更准確?

據我所知, 兩種采樣方法都沒有考慮開銷。

跟蹤將正確計算每個函數調用。

采樣將以一定的頻率拍攝堆棧的快照,從而為您提供程序實際花費時間的整體圖。

如果我的函數需要0.2毫秒的cpu時間並且采樣間隔是1毫秒怎么辦?

  • 如果該函數運行很快並且很少調用,那么可能無法捕獲它。 但是您對很少調用的快速功能不感興趣。

  • 如果該函數經常被調用(例如,每個間隔調用50次)並且未被采樣器捕獲,則意味着該函數永遠不會在采樣點處運行。 這意味着它足夠快。

進行采樣並通過重構程序的較大部分(采樣器向您顯示的部分)進行優化。 在JVM上進行微優化不會使您步入正軌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM