抓取event trace实例
1.设置event
echo 1 > /sys/kernel/debug/tracing/events/enable
2.使能ftrace
echo 1 > /sys/kernel/debug/tracing/tracing_on
3.关闭ftrace
echo 0 > /sys/kernel/debug/tracing/tracing_on
4.获取trace log
cat /sys/kernel/debug/tracing/trace > /sdcard/trace.txt
5.我们可以通过adb pull命令拉取trace.txt到PC上使用chrome浏览器来查看
浏览器打开chrome://tracing,点击打开trace.txt
查找Kernel启动阶段的延时原因
1.确保内核配置了如下选项
CONFIG_FTRACE: "Tracers"
CONFIG_FUNCTION_TRACER: "Kernel Function Tracer"
CONFIG_FUNCTION_GRAPH_TRACER: "Kernel Function Graph Tracer"
2.配置function graph trace到commandline
tracing_thresh=200 ftrace=function_graph
这将在kernel启动阶段自动使能function graph tracer,并且会跟踪所有延迟超过200us的function
3.用户关闭trace
当启动完成后需要用户自行执行关闭操作,trace才会关闭:
echo 0 > /sys/kernel/debug/tracing/tracing_on
4.获取trace log
cat /sys/kernel/debug/tracing/trace > /sdcard/trace.txt
查找最大的kernel stack
1.确保内核配置了如下选项
CONFIG_FTRACE: "Tracers"
CONFIG_FUNCTION_TRACER: "Kernel Function Tracer"
CONFIG_STACK_TRACER: "Trace max stack"
2.配置stack trace到commandline
stacktrace
这将在kernel启动阶段自动使能stack trace,并且除非用户执行:
echo 0 > /proc/sys/kernel/stack_tracer_enabled
否则,stack trace会一直运行下去。
3.获取trace log
cat /debug/tracing/stack_trace > /sdcard/trace.txt
启动阶段使能event trace
同上,配置commandline:
trace_event=sched:*,timer:*,irq:* trace_buf_size=40M
有上面的实例可以知道,ftrace除了能够在运行阶段动态配置使能和关闭,也可以利用命令行来进行配置操作,这主要是针对boot阶段的trace操作。
trace某个进程
echo nop > /sys/kernel/debug/tracing/current_tracer
echo function > /sys/kernel/debug/tracing/current_tracer
echo 520 > /sys/kernel/debug/tracing/set_ftrace_pid
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo 0 > /sys/kernel/debug/tracing/tracing_on
trace函数调用sys_read/sys_write/sys_open/sys_close
echo nop > /sys/kernel/debug/tracing/current_tracer
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo sys_read > /sys/kernel/debug/tracing/set_graph_function
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo 0 > /sys/kernel/debug/tracing/tracing_on
trace函数调用__do_fault
echo nop > /sys/kernel/debug/tracing/current_tracer
echo function_graph > /sys/kernel/debug/tracing/current_tracer
echo __do_fault > /sys/kernel/debug/tracing/set_graph_function
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo 0 > /sys/kernel/debug/tracing/tracing_on
备注
ftrace功能的开关:
This can be disable (and enabled) with:
sysctl kernel.ftrace_enabled=0
sysctl kernel.ftrace_enabled=1
or
echo 0 > /proc/sys/kernel/ftrace_enabled
echo 1 > /proc/sys/kernel/ftrace_enabled