ftrace 详解

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

http://www.ibm.com/developerworks/cn/linux/l-cn-ftrace1/

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

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

http://www.cnblogs.com/pengdonglin137/p/4752303.html

http://www.cnblogs.com/openix/p/4163995.html

http://www.cnblogs.com/openix/category/641946.html

http://www.cnblogs.com/jefree/p/4439022.html

http://www.cnblogs.com/pengdonglin137/articles/4752082.html

http://www.cnblogs.com/jefree/p/4439017.html

基本使用

1. 编译内核

ref:http://www.omappedia.org/wiki/Installing_and_Using_Ftrace
===================================================
Kernel configuration & Re-build

Kernel Hacking -> Tracers -> FUNCTION_TRACER
Kernel Hacking -> Tracers -> FUNCTION_GRAPH_TRACER (if possible)
Kernel Hacking -> Tracers -> STACK_TRACER  //  Trace max stack
Kernel Hacking -> Tracers -> DYNAMIC_FTRACE // enable/disable ftrace tracepoints dynamically

2. mount debugfs

mount -t debugfs nodev /sys/kernel/debug

3. 选择ftrace

echo function > /sys/kernel/debug/tracing/current_tracer

cat /sys/kernel/debug/tracing/available_tracers 可以显示可用的tracer

blk mmiotrace function_graph wakeup_rt wakeup function nop

现在有这些种类的trace。

ftrace主要用来观察函数调用情况。

4. 选择需要trace的函数

echo func_name > set_ftrace_filter

echo ‘:mod:e1000e‘ > set_ftrace_filter

追踪e1000e模块中的函数

5. 启动/关闭 trace

echo 1 > tracing_on

echo 0 > tracing_on

6. 输出

在文件 /sys/kernel/debug/tracing/trace中, 这个是静态的。

/sys/kernel/debug/tracing/trace_pipe 是动态的,数据读过后就不会再显示。且会block。

7. 输出格式

输出的格式可以在trace_options文件中,做些小调整。

cat trace_options 可以显示所有能做调整的选项。

echo noprint-parent > trace_options

就不会显示谁调用了该函数

echo sym-offset > trace_options

除了显示函数的名字,还会显示函数的offset

实例操作

1. function 的例子

从代码中看到有 dev_activate() 和 dev_deactivate() 分别在链路开启和断开时候被调用。

不过不确定是不是这样,之前的话需要在代码中加上printk,编译,换新的内核才能看到效果。

现在用ftrace来试试

echo function > current_tracer

echo dev_activate > set_ftrace_filter

echo dev_deactivate >> set_ftrace_filter

echo 1 > tracing_on

然后插拔网线,可以看到这两个函数确实被调用到。

2. function_graph 的例子

echo function_graph > current_tracer

echo dev_activate > set_graph_function

echo dev_deactivate >> set_graph_function

echo 3 > max_graph_depth

echo 1 > tracing_on

好了,这样可以看到一些函数调用过程。

时间: 2024-08-08 22:07:19

ftrace 详解的相关文章

红帽Linux故障定位技术详解与实例(2)

红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问,故障处理人员可通过console, ssh等方式登录到操作系统上,在shell上执行各种操作命令或测试程序的方式对故障环境进行观察,分析,测试,以定位出故障发生的原因. AD:2014WOT全球软件技术峰会北京站 课程视频发布 3.内核故障情形及处理 (1)内核panic panic是内

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

转载:DenseNet算法详解

原文连接:http://blog.csdn.net/u014380165/article/details/75142664 参考连接:http://blog.csdn.net/u012938704/article/details/53468483 本文这里仅当学习笔记使用,具体细节建议前往原文细度. 论文:Densely Connected Convolutional Networks 论文链接:https://arxiv.org/pdf/1608.06993.pdf 代码的github链接:h

MariaDB(MySQL)创建、删除、选择及数据类型使用详解

一.MariaDB简介(MySQL简介略过) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品.在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB. MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL A

HttpServletResponse和HttpServletRequest详解

HttpServletResponse,HttpServletRequest详解 1.相关的接口 HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletRequest接口可以获取由客户端传送的名称,也可以获取产生请求并且接收请求的服务器端主机名及IP地址,还可以获取客户端正在使用的通信协议等信息.下表是接口HttpServletRequest的常用方法. 说明:HttpServ

POSIX 线程详解(经典必看)

总共三部分: 第一部分:POSIX 线程详解                                   Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  2000 年 7 月 01 日 第二部分:通用线程:POSIX 线程详解,第 2部分       Daniel Robbins ([email protected]), 总裁/CEO, Gentoo Technologies, Inc.  20

.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)

阅读目录: 1.环路执行对象模型.碎片化执行模型(假递归式调用) 2.N层对象执行模型(纵横向对比链式扩展方法) 3.LINQ查询表达式和链式查询方法其实都是空壳子 4.详细的对象结构图(对象的执行原理) 5.IQueryable<T>与IQueryProvider一对一的关系能否改成一对多的关系 6.完整的自定义查询 1]. 环路执行对象模型.碎片化执行模型(假递归式调用) 这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频

netstat状态详解

一.生产服务器netstat tcp连接状态................................................................................ 2 1.1生产服务器某个业务LVS负载均衡上连接状态数量............................................... 2 1.2生产服务器某个业务web上连接状态数量...............................................

详解go语言的array和slice 【二】

上一篇  详解go语言的array和slice [一]已经讲解过,array和slice的一些基本用法,使用array和slice时需要注意的地方,特别是slice需要注意的地方比较多.上一篇的最后讲解到创建新的slice时使用第三个索引来限制slice的容量,在操作新slice时,如果新slice的容量大于长度时,添加新元素依然后使源的相应元素改变.这一篇里我会讲解到如何避免这些问题,以及迭代.和做为方法参数方面的知识点. slice的长度和容量设置为同一个值 如果在创建新的slice时我们把