利用ftrace调试内核

来源:互联网 发布:淘宝客服旺旺号是多少 编辑:程序博客网 时间:2024/05/20 11:23

ftrace主要是用来帮助开发人员了解Linux内核的运行轨迹,以便进行故障调试或性能分析。它是在2.6.27内核中开始出现的,自此以后,不断有新的tracer加入,到2.6.30为止最少已经有10种tracer。具体的tracer可以参阅/Documentation/trace/ftrace.txt。

本文主要说明ftrace的使用方法:
要使用ftrace必须在内核中首先添加对其的支持,也就是要重新编译一个新的内核。
Kernel hacking
     Tracers
        Kernal Function Tracer
            Kernal Function Graph Tracer
            。。。。。。。
依次将这些选项编译进内核中。这样,在新编译的内核上,你就可以尽情的享用ftrace带给你的便利。这里要说明一下,ftrace是以debugfs为出口,读出内核信息的。而在debugfs配置到内核时,将会创建一个/sys/kernel/debug目录,我们所要查看的内核信息都要从该目录下获得。
首先,要挂载debugfs。在运行时使用如下命令进行挂载
sudo mount -t debugfs nodev /sys/kernel/debug/
也可以把它添加在/etc/fstab文件中。

接下来,为了便于访问,通过建立软链接,将/sys/kernel/debug目录链接/debug目录下,(2.6.30中已经有/debug目录,早一点内核可能没有),如果没有,可以手工创建。
wuting@wuting-desktop:~$ sudo ln -s /sys/kernel/debug/tracing/ /debug/
wuting@wuting-desktop:~$ ls /debug/
Tracing
用ls命令可以看到在tracing目录下有如下文件
wuting@wuting-desktop:~$ ls /debug/tracing
available_events            events          saved_cmdlines      stack_max_size  trace_stat
available_filter_functions  failures        set_event           stack_trace     tracing_cpumask
available_tracers           options         set_ftrace_filter   trace           tracing_enabled
buffer_size_kb              per_cpu         set_ftrace_notrace  trace_marker    tracing_max_latency
current_tracer              printk_formats  set_ftrace_pid      trace_options   tracing_on
dyn_ftrace_total_info       README          set_graph_function  trace_pipe      tracing_thresh
除目录(绿色)外,这里的文件都可以通过echo命令进行写入操作,用cat命令进行读操作。这样,我们就可以利用echo和cat对ftrace进行配置。

最后,举例说明ftrace的具体用法。
 echo function_graph > /debug/tracing/current_tracer //配置使用Function graph tracer来跟踪函数调用。
 echo 10000 > /debug/tracing/buffer_size_kb//配置ring buffer的大小为10000KB
 echo 1 > /debug/tracing/tracing_enabled //使能trace
/*执行需要跟踪的程序,如ls,*/
ls -l
 echo 0 > /debug/tracing/tracing_enabled //禁止trace
cat /debug/tracing/trace > trace.txt //读取跟踪信息,为了便于查看将其重定向到文件

打开trace.txt,可以看到,内核函数之间的调用关系,以图形化的形式显示在我们眼前。其中,第一列表示在那个CPU上执行的,第二列是函数执行所用的时间,加号(+)表示有延迟,第三列是函数之间的调用关系。

# tracer: function_graph
#
# CPU  DURATION                  FUNCTION CALLS
# |     |   |                     |   |   |   |
 0) + 55.570 us   |          }
 0)   0.675 us    |          strncpy();
 0) + 58.825 us   |        }
 0) + 61.605 us   |      }
 0)   0.465 us    |      strcmp();
 0)               |      kallsyms_lookup() {
 0)               |        is_ksym_addr() {
 0)   0.455 us    |          in_gate_area_no_task();
 0)   1.375 us    |        }
 0)               |        module_address_lookup() {
 0) + 55.645 us   |          get_ksymbol();
 0)   0.685 us    |          strncpy();
 0) + 58.525 us   |        }
 0) + 61.315 us   |      }
 0)   0.465 us    |      strcmp();
...................
总结一下,ftrace的使用过程就是:
●选择一种tracer
●使能tracer
●执行需要trace的应用程序
●关闭ftrace
●查看trace文件



阅读(419) | 评论(0) | 转发(0) |
0

上一篇:Some interesting C problems

下一篇:vim multifile edit

相关热门文章
  • Android之input系统流程
  • 根文件系统制作的lib库必须添...
  • AIO介绍
  • Linux软件RAID技术
  • Linux软件RAID技术
  • linux 常见服务端口
  • 什么是shell
  • linux socket的bug??
  • linux的线程是否受到了保护?...
  • 一个适用于windows和linux的抓...
  • shell将变量当命令执行问题【...
  • 深入理解Linux网络技术内幕-设...
  • 高性能网络I/O框架-netmap源码...
  • 深入理解Linux网络技术内幕-...
  • Linux下bin文件的安装
给主人留下些什么吧!~~
原创粉丝点击