[英]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.