Debugging the kernel using Ftrace - part 1 [LWN.net]
Debugging the kernel using Ftrace - part 2 [LWN.net]?
背景:
咱也新手学习一下,都是网上搜的,然后adb里操作一遍,博文偏向工具的操作与使用。
第一篇的一些翻译与概括:
Ftrace依赖debugfs, 文件接口位置/sys/kernel/debug/
使用Ftrace前在kernel的config文件里打开以下宏开关:
CONFIG_FUNCTION_TRACER
CONFIG_FUNCTION_GRAPH_TRACER
CONFIG_STACK_TRACER
CONFIG_DYNAMIC_FTRACE
Ftrace最powerful的功能就是函数追踪。
配置了CONFIG_DYNAMIC_FTRACE 后,cat /sys/kernel/debug/tracing/current_tracer是NOP, 以保证系统以100%性能运行。
cat available_tracers 可以查看能够使用的tracer功能。使用功能就是用echo把功能写入current_tracer文件节点,如echo function_graph > /sys/kernel/debug/tracing/current_tracer.
然后说了以下trace_printk(),比较了printk和trace_printk().
1.printk是debug之王,但是在中断上下文,进程调度,网络中可能使系统性能降低或者出现锁。
2.printk是输出到控制台,trace_printk不会输出到控制台,而是输出到trace文件中(ring buffer),通过cat可以读取。
3.trace_printk只需0.1微妙,printk写到控制台可能需要几毫秒,trace_printk几乎不影响性能。
后面讲述了在adb中通过文件节点,打开trace和关闭trace,从文件系统里面的看就是:
trace_on;
执行或加载内核模块;
trace_off;
cat trace查看模块运行的函数调用。
--------------
第二篇主要是说在内核里面用函数搞,抓取函数调用堆栈,查看内核崩溃原因。
|