linux跟踪利器之Ftrace

 

 

1.  简介

ftrace是内建于Linux内核的跟踪工具,从2.6.27开始加入主流内核。ftrace的作用是帮助开发人员了解 Linux 内核的运行时行为,以便进行故障调试或性能分析。使用ftrace可以对内核函数调用、上下文切换进行跟踪,还可以查看中断被关闭的时长,跟踪内核态中的延迟以及性能问题等。使用ftrace对内核进行跟踪调试,可以找到内核中出现的问题的根源,通过ftrace来观察内核中发生的活动,则可以了解内核的工作机制。

2. 原理

ftrace本质上是一种静态代码插装技术,借助于GCC提供的profile特性,在所有的内核函数的开始部分插入一段代码,通过插入的代码来实现跟踪功能。GCC-pg选项将在每个函数入口处加入对 mcount 的调用代码,ftrace使用自己定义的mcount函数来代替默认的mcount,实现了对于函数调用的跟踪。在每个内核函数入口加入跟踪代码,必然会影响内核的性能,为了减小对内核性能的影响,ftrace支持动态跟踪功能。在没有启用其跟踪功能时,它将mcount换成nop指令,只有在开启跟踪功能时,才将mcount换成用户注册的跟踪函数,因此在不进行跟踪的时候,对内核性能的影响微乎其微。

3. 使用

ftrace通过debugfs向用户态提供访问接口,使用时需先挂载debugfs,挂载debugfs之后,在挂载目录下(默认是/sys/kernel/debug)会有一个tracing的文件夹,这个文件夹就是ftrace导出的借口。该文件夹下一些主要的文件的用途如下:

README文件提供了一个简短的使用说明,展示了 ftrace 的操作命令序列。可以通过 cat 命令查看该文件以了解概要的操作流程

current_tracer用于设置或显示当前使用的跟踪器,其缺省值为nop,即不做任何跟踪操作。

available_tracers记录了当前编译进内核的跟踪器的列表,current_tracer必须在该文件列出的跟踪器名字列表中。

trace文件提供了查看获取到的跟踪信息的接口。可以通过 cat 等命令查看该文件以查看跟踪到的内核活动记录,也可以将其内容保存为记录文件以备后续查看

tracing_enabled用于控制current_tracer中的跟踪器是否跟踪内核函数的调用情况。写入0会关闭跟踪活动,写入1则激活跟踪功能。

set_graph_function设置要清晰显示调用关系的函数,显示的信息结构类似于 C 语言代码,这样在分析内核运作流程时会更加直观一些。在使用 function_graph 跟踪器时使用;缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注的函数

buffer_size_kb用于设置单个 CPU 所使用的跟踪缓存的大小

available_filter_functions记录了当前可以跟踪的内核函数。对于不在该文件中列出的函数,无法跟踪其活动。

set_ftrace_filter 用于指定要跟踪的函数,支持简单形式的含有通配符的表达式,这样可以用一个表达式一次指定多个目标函数;注意,要写入文件的函数名必须可以在文件 available_filter_functions 中看到

set_ftrace_notrace set_ftrace_filter相反,用于指定不跟踪的函数

Ftrace使用起来很简单,大致可以分成三步完成,首先是选择函数跟踪器、设置将要跟踪的函数、启用其跟踪功能,然后执行你想要跟踪的代码,执行完成之后,停止跟踪器,将结果导出。下面通过一些实例来看看ftrace的使用

function跟踪器

# cd /sys/kernel/debug/tracing

# echo 1 > /proc/sys/kernel/ftrace_enabled

# echo 0 > tracing_enabled

# echo function > current_tracer

# echo 1 > tracing_on

# echo 1 > tracing_enabled

让内核执行一段时间

# echo 0 > tracing_enabled

# cat trace

sched_switch 跟踪器

# cd /sys/kernel/debug/tracing

# echo 1 > /proc/sys/kernel/ftrace_enabled

# echo 0 > tracing_enabled

# echo sched_switch > current_tracer

# echo 1 > tracing_on

# echo 1 > tracing_enabled

让内核执行一段时间

# echo 0 > tracing_enabled

# cat trace

其他的跟踪器的使用也类似上面的流程。上面的过程很容易写成脚步,此外还可以通过trace-cmd来操作。

4.  参考

http://lwn.net/Articles/322666/

http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace/index.html

http://linux.cn/home/space-2-do-blog-id-326.html

http://linux.cn/home/space-2-do-blog-id-329.html

http://linux.cn/home/space-2-do-blog-id-331.html

http://blog.csdn.net/Leisure512/archive/2011/03/03/6221339.aspx

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Realtime_Specific_Tuning-Latency_Tracing_Using_trace_cmd.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值