ftrace 詳解


http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/

http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/

 
 
 
http://www.cnblogs.com/pengdonglin137/p/4752303.html
 
http://www.cnblogs.com/openix/p/4163995.html
http://www.cnblogs.com/openix/category/641946.html
 
http://www.cnblogs.com/jefree/p/4439022.html
 

http://www.cnblogs.com/pengdonglin137/articles/4752082.html 

 
 

基本使用

1. 編譯內核

ref:http://www.omappedia.org/wiki/Installing_and_Using_Ftrace
===================================================
Kernel configuration & Re-build

Kernel Hacking -> Tracers -> FUNCTION_TRACER
Kernel Hacking -> Tracers -> FUNCTION_GRAPH_TRACER (if possible)
Kernel Hacking -> Tracers -> STACK_TRACER  //  Trace max stack
Kernel Hacking -> Tracers -> DYNAMIC_FTRACE // enable/disable ftrace tracepoints dynamically

 

2. mount debugfs

mount -t debugfs nodev /sys/kernel/debug

 

3. 選擇ftrace

echo function > /sys/kernel/debug/tracing/current_tracer

 

cat /sys/kernel/debug/tracing/available_tracers 可以顯示可用的tracer

blk mmiotrace function_graph wakeup_rt wakeup function nop

現在有這些種類的trace。

 

ftrace主要用來觀察函數調用情況。

 

4. 選擇需要trace的函數

echo func_name > set_ftrace_filter

 

echo ':mod:e1000e' > set_ftrace_filter

追蹤e1000e模塊中的函數

 

5. 啟動/關閉 trace

echo 1 > tracing_on

echo 0 > tracing_on

 

6. 輸出

在文件 /sys/kernel/debug/tracing/trace中, 這個是靜態的。

/sys/kernel/debug/tracing/trace_pipe 是動態的,數據讀過后就不會再顯示。且會block。

 

7. 輸出格式

輸出的格式可以在trace_options文件中,做些小調整。

cat trace_options 可以顯示所有能做調整的選項。

 

echo noprint-parent > trace_options 

就不會顯示誰調用了該函數

 

echo sym-offset > trace_options

除了顯示函數的名字,還會顯示函數的offset

 

實例操作

1. function 的例子

從代碼中看到有 dev_activate() 和 dev_deactivate() 分別在鏈路開啟和斷開時候被調用。

不過不確定是不是這樣,之前的話需要在代碼中加上printk,編譯,換新的內核才能看到效果。

現在用ftrace來試試

 

echo function > current_tracer

echo dev_activate > set_ftrace_filter

echo dev_deactivate >> set_ftrace_filter

echo 1 > tracing_on

 

然后插拔網線,可以看到這兩個函數確實被調用到。

 

2. function_graph 的例子

 

echo function_graph > current_tracer

echo dev_activate > set_graph_function

echo dev_deactivate >> set_graph_function

echo 3 > max_graph_depth

echo 1 > tracing_on

 

好了,這樣可以看到一些函數調用過程。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM