使用__gnu_mcount_nc 確定函數退出時間
在嘗試在嵌入式平台上執行效能分析時,注意到GCC 的- pg 標誌在每個函數的入口處插入thunk 到__gnu_mcount_nc 。雖然沒有現成的 __gnu_mcount_nc 實現,但記錄堆疊幀和當前週期計數的自訂實作已被證明在收集呼叫者/被呼叫者圖表和識別頻繁呼叫的函數方面很有用。
但是,捕獲有關在僅基於入口點,功能機構仍然是一個挑戰。現有的方法,例如維護影子呼叫堆疊和操作返回地址,會帶來限制和開銷。
為了解決能夠捕獲函數退出時間的替代__gnu_mcount_nc 實現的問題,讓我們深入研究__gnu_mcount_nc 實作所使用的實際方法gprof.
gprof.
gprof如何測量功能Time
與最初的假設相反,gprof 不使用 __gnu_mcount_nc 來計時函數進入或退出。相反,它依賴於透過計算每個例程中的 PC 樣本來收集的自時間。然後使用這些樣本以及函數到函數的呼叫計數來估計應歸因於呼叫者的自時間部分。
呼叫計數與堆疊採樣
另一種方法是堆疊採樣,其中涉及定期捕獲堆疊樣本。雖然比 PC 採樣更昂貴,但它提供了更準確的測量,因為它不區分短調用和長調用,也不受 I/O 或未檢測的庫例程的影響。
識別昂貴的操作
發現效能瓶頸的關鍵在於分析原始堆疊樣本並將其與原始程式碼相關聯。與專注於呼叫圖或熱點不同,檢查各個堆疊樣本可以揭示某些操作消耗大量時間的具體原因,並提出可能的最佳化建議。
超越花哨的可視化 雖然火焰圖和樹圖等可視化在視覺上很有吸引力,但它們通常無法突出顯示由於從不同位置多次呼叫程式碼而產生的效能問題。按功能而不是僅根據時間對資料進行聚合和排序,可以提供更全面的程式碼執行視圖。 結論雖然 __gnu_mcount_nc 可以提供有關函數入口點的有價值的信息,但應考慮使用堆疊採樣等替代方法來捕獲函數退出時間。透過專注於分析實際的堆疊樣本並避免引人注目的可視化的干擾,開發人員可以有效地識別效能瓶頸並實施最佳化。
以上是除了使用'__gnu_mcount_nc”之外,我們如何在效能分析中準確測量函數退出時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!