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

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

 
 
 
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

 
 

基本使用

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

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

ftrace 详解的更多相关文章

  1. [转帖]强大的strace命令用法详解

    强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...

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

    红帽Linux故障定位技术详解与实例(2) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号:T | T 在线故障定位就是在故障发生时, 故障所处的操作系统环境仍 ...

  3. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  4. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  5. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  6. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  7. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  8. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  9. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

随机推荐

  1. 【树形dp】bzoj1304: [CQOI2009]叶子的染色

    又是一道优美的dp Description 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到每个叶子的 ...

  2. Python爬虫环境常用库安装

    1:urllib urllib.request这两个库是python自带的库,不需要重新安装,在python中输入如下代码: import urllibimport urllib.requestres ...

  3. Java开发工具下载

    一.Tomcat下载: http://tomcat.apache.org/ 二.Maven下载: http://maven.apache.org/download.cgi 三.eclipse下载: h ...

  4. Python-求解两个字符串的最长公共子序列

    一.问题描述 给定两个字符串,求解这两个字符串的最长公共子序列(Longest Common Sequence).比如字符串1:BDCABA:字符串2:ABCBDAB.则这两个字符串的最长公共子序列长 ...

  5. IRQ中断处理流程

    基于Linux2.6.30.4分析IRQ中断的处理流程. 1.中断入口 /* arch/arm/kenel/entry-armv.S*/ b vector_irq + stubs_offset 2.v ...

  6. 在 shell中, 我們可用 $0, $1, $2, $3 ... 這樣的变量分別提取命令行中变量

    代码: script_name parameter1 parameter2 parameter3 ...我們很容易就能猜出 $0 就是代表 shell script 名称(路径)本身,而 $1 就是其 ...

  7. 合肥工业大学数据结构上机实验代码与实验报告(全)github地址

    我已经将这个学期的所有数据结构上机实验的代码与报告上传到github上了,一直都有这个想法,但没抽出时间来学习git.经过上周简单的练习后,我已经基本学会运营自己的代码仓库了.所有代码都是C++写的类 ...

  8. loj2141 「SHOI2017」期末考试

    我们枚举每一个时间点,使得所有科目的时间都小于等于这个时间点,计算安排老师的代价和学生们的不满意度更新答案. 但是枚举太慢了,可以发现,时间点越早,学生们不满意度越小,安排老师的代价越高.即安排老师的 ...

  9. oracle表空间,分区表,以及索引的总结

    表空间: Oracle的UNDOTBS01.DBF文件太大的解决办法 1..禁止undo tablespace自动增长 alter   database   datafile   'full_path ...

  10. Codeforces Round #352 (Div. 1) B. Robin Hood

    B. Robin Hood 讲道理:这种题我是绝对不去(敢)碰的.比赛时被这个题坑了一把,对于我这种不A不罢休的人来说就算看题解也要得到一个Accepted. 这题网上有很多题解,我自己是很难做出来的 ...