ftrace
如果要使用 ftrace,请将其加入 /etc/fstab
从而在开机时自动挂载 tracefs。
ftrace - Function Tracer — The Linux Kernel documentation
Linux 原生机制 去跟踪系统事件以及检索/分析故障信息,内核中的第一款跟踪工具。
Ftrace (function tracer) basically lets you watch and record the execution flow of kernel functions.
不像 strace
和 perf
,ftrace 并不是真正的 程序 – 你不能只运行 ftrace my_cool_function
。
trace-cmd
是 ftrace 的一个前端。
trace_printk()
output looks like a comment in the function graph tracer. To see the output:
tail -f /sys/kernel/tracing/trace
WARN_ON(1)
可以在 dmesg 里查看内核函数调用栈。
Official documentation referenced: ftrace - Function Tracer — The Linux Kernel documentation
trace_printk()
虽然 printk()
使用起来简单,但是其开销较大,有时甚至会影响到我们对内核进行调试。
比如在调试 scheduler 或者 network 这种非常忙碌的子系统时,printk() 会极大地拖慢系统性能,甚至造成死锁;而在调试一些竞态问题时,使用 printk() 甚至会让问题 “消失”,或者难以复现。
而 Ftrace 提供的 trace_printk() 则可以用于这些调试场景,跟 printk () 一样,它也可以用于任何上下文中;不同的是,它不会把 log 输出到 console,而是输出到一个独立的 buffer。使用 trace_printk() 输出的 log 会与其它 tracer 输出的 log 结合。
使用Ftrace调试Linux内核 | colorfulshark
tail -f /sys/kernel/debug/tracing/trace
如何将用户空间的 log 和内核空间结合?
trace_marker.
Tracer
Tracer:
A list of all the tracers: ftrace - Function Tracer — The Linux Kernel documentation
switch tracer:
echo nop > /sys/kernel/tracing/current_tracer # no tracer, the default
echo function_graph > /sys/kernel/tracing/current_tracer
Tracefs
Ftrace uses the tracefs
file system to hold the control files as well as the files to display output.
It is mounted at /sys/kernel/tracing
. (For combability reason, /sys/kernel/debug/tracing
can also be used)
To see the meaning of each file, see ftrace - Function Tracer — The Linux Kernel documentation