Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48226
  • 博文数量: 21
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-11 20:51
文章分类

全部博文(21)

文章存档

2013年(1)

2010年(12)

2009年(8)

我的朋友

分类: LINUX

2010-04-05 16:46:27


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文件



阅读(890) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~