簡體   English   中英

在Linux中通過perf為未列出的功能添加動態跟蹤點

[英]Adding dynamic tracepoint through perf in Linux for function that is not listed

我正在嘗試使用perf從mm / memory.c跟蹤函數zap_pte_range 但是性能未在perf probe -F列出。 有沒有辦法動態跟蹤此功能? 即顯式添加跟蹤點並重新編譯內核?

perf probe -a zap_pte_range

給出:

找不到[Build.ID:33b15ec444475ee7806331034772f61666fa6719]的[kernel.kallsyms],繼續,沒有符號

無法在內核中找到符號zap_pte_range

錯誤:添加事件失敗。

沒有這樣的跟蹤點。 因此,顯然您無法輕松地跟蹤它。 似乎該函數已由編譯器內聯(請注意,出於某些優化原因,也可以省略該函數)。 這就是為什么/proc/kallsyms沒有其符號的原因。

您可以選擇最合適的功能進行跟蹤。 例如,在帶有4.9內核的Debian中,我可以跟蹤unmap_page_range() ,最終它會“調用”您需要的功能。 也許在邏輯上可以滿足您的目標。

另一種方法是一點點黑客。 您可以執行objdump -dS memory.o | vim - objdump -dS memory.o | vim - (您應該有二進制文件)並調查所需的代碼在哪里。 鑒於鏈zap_pud_range() -> zap_pmd_range() -> zap_pte_range()可能是內聯的,您將不得不研究上述的unmap_page_range() 也許您最終會為kprobes獲得一些代碼地址。

如果要通過jprobes (關於args)或kretprobes (關於返回值)顯式跟蹤zap_pte_range() ,則可以嘗試為所需函數指定noinline -attribute,重新編譯Linux內核並根據需要進行跟蹤。

猜猜我沒有適合您的有用方法。

更多信息: 相關文章Jprobes示例Ftrace:跟蹤您的內核功能! 關於ftrace和systemtap的帖子man nm

暫無
暫無

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

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