ftrace官方文档在kernel/Documentation/trace/ftrace.txt文件中。

使用ftrace接口之前,如果系统没有自动挂载debugfs文件系统,则要先手动挂载。

# mount -t debugfs nodev /sys/kernel/debug

ftracer的目录为/sys/kernel/debug/tracing,下面介绍这个目录下的常用文件:

tracing_on,启用/禁用向追踪缓冲区写入功能。1为启用,0为禁用。

available_tracers,当前内核中可用的插件追踪器。

current_tracer,指定当前要使用的插件追踪器。

tracing_cpumask,以十六进制的位掩码指定要作为追踪对象的处理器,例如,指定0xb时仅在处理器0、1、3上进行追踪。

set_ftrace_pid,指定作为追踪对象的进程的PID号。

trace,以文本格式输出内核中追踪缓冲区的内容。

trace_pipe,与trace相同,但是运行时像管道一样,可以在每次事件发生时读出追踪信息,但是读出的内容不能再次读出。

buffer_size_kb,以KB为单位指定各个CPU追踪缓冲区的大小。系统追踪缓冲区的总大小就是这个值乘以CPU的数量。设置buffer_size_kb时,必须设置current_tracer为nop追踪器。

set_ftrace_filter,指定要追踪的函数名称,函数名称仅可以包含一个通配符。

set_ftrace_notrace,指定不要追踪的函数名称。

ftrace可以使用的插件追踪器主要有:

function,函数调用追踪器,可以看出哪个函数何时调用。

function_graph,函数调用图表追踪器,可以看出哪个函数被哪个函数调用,何时返回。

mmiotrace,MMIO( Memory MappedI/O)追踪器,用于Nouveau驱动程序等逆向工程。

blk,block I/O追踪器。

wakeup,进程调度延迟追踪器。

wakeup_rt,与wakeup相同,但以实时进程为对象。

irqsoff,当中断被禁止时,系统无法响应外部事件,造成系统响应延迟,irqsoff跟踪并记录内核中哪些函数禁止了中断,对于其中禁止中断时间最长的,irqsoff将在log文件的第一行标示出来,从而可以迅速定位造成系统响应延迟的原因。

preemptoff,追踪并记录禁止内核抢占的函数,并清晰显示出禁止内核抢占时间最长的函数。

preemptirqsoff,追踪并记录禁止内核抢占和中断时间最长的函数。

sched_switch,进行上下文切换的追踪,可以得知从哪个进程切换到了哪个进程。

nop,不执行任何操作。不使用插件追踪器时指定。

ftrace使用举例:追踪进程调度函数schedule是由哪个函数调用的。

1、  查看available_tracers的内容,确定当前内核是否支持记录函数调用的函数追踪器:

root@thinker:/sys/kernel/debug/tracing# cat  available_tracers

blk function_graph mmiotrace wakeup_rtwakeup function nop

可以看到,available_tracers中包含function,即函数追踪器。

2、  一旦将函数追踪器启动,ftrace会记录所有函数的运行情况,但是我们只想查看schedule函数的调用情况,因此先设置函数过滤器,仅记录schedule:

root@thinker:/sys/kernel/debug/tracing#echo schedule > set_ftrace_filter

3、  将函数追踪器function写入current_tracer文件:

root@thinker:/sys/kernel/debug/tracing#echo function > current_tracer

4、  追踪结果可以从trace文件读出:

root@thinker:/sys/kernel/debug/tracing#head trace

# tracer: function

#

#           TASK-PID    CPU#   TIMESTAMP  FUNCTION

#              | |       |          |         |

bash-29903 [003] 262746.977929: schedule <-sysret_careful

kworker/3:1-239   [003]262746.977937: schedule <-worker_thread

<idle>-0     [000]262746.977940: schedule <-cpu_idle

bash-29903 [003] 262746.977943: schedule <-schedule_timeout

sshd-2562  [000] 262746.977994:schedule <-schedule_hrtimeout_range_clock

<idle>-0     [003]262746.979523: schedule <-cpu_idle

可以看出,bash, kworker,idle,sshd这几个进程的相应函数调用了schedule函数。

可以使用多个函数名称或通配符向过滤器指定模式、模块。例如:

root@thinker:/sys/kernel/debug/tracing#echo ‘irq*’ > set_ftrace_filter

可以记录函数名以irq开头的所有函数调用。

另外,在参数前面加上:mod:,可以仅追踪指定模块中包含的函数(注意,模块必须已经加载)。例如:

root@thinker:/sys/kernel/debug/tracing# echo 'write*:mod:ext3' > set_ftrace_filter

仅追踪ext3模块中包含的以write开头的函数。

要清空trace的内容执行如下命令:

# echo 0 > tracing_on

# echo 0 > trace

# cat  trace

trace_printk打印调试信息后,将current_tracer设置为nop,将tracing_on设置为1,调用相应模块执行,即可通过trace文件看到trace_printk打印的信息。

ftrace用法的更多相关文章

  1. ftrace的使用【转】

    转自:http://blog.csdn.net/cybertan/article/details/8258394 This article explains how to set up ftrace ...

  2. 主机管理+堡垒机系统开发:strace命令用法详解(六)

    一.简单介绍 strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进 ...

  3. 使用 ftrace 调试 Linux 内核【转】

    转自:http://blog.csdn.net/adaptiver/article/details/7930646 使用 ftrace 调试 Linux 内核,第 1 部分 http://blog.c ...

  4. ftrace 提供的工具函数

    内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...

  5. 使用 ftrace 调试 Linux 内核,第 3 部分

    内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通 ...

  6. ftrace的使用

    This article explains how to set up ftrace and be able to understand how to trace functions. It shou ...

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

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

  8. 强大的strace命令用法详解

    文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和 ...

  9. EditText 基本用法

    title: EditText 基本用法 tags: EditText,编辑框,输入框 --- EditText介绍: EditText 在开发中也是经常用到的控件,也是一个比较必要的组件,可以说它是 ...

随机推荐

  1. Hermite 矩阵的特征值不等式

    将要学习 关于 Hermite 矩阵的特征值不等式. Weyl 定理 以及推论.   Weyl 定理 Hermann Weyl 的如下定理是大量不等式的基础,这些不等式要么涉及两个 Hermite 矩 ...

  2. java程序-类的高级特性

    创建Employee类,在类中定义三个属性:编号,姓名,年龄,然后在构造方法里初始化这三个属性,最后在实现接口中的定义的CompareTo方法,将对象按编号升序排列. 代码如下:(程序可能有些错误,方 ...

  3. Vue的安装并在WebStorm中运行

    一.Vue的安装需要两个支持分别为:nodejs.npm Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O ...

  4. 洛谷 P2668 斗地主

    毒瘤题目,搞了三天-- 也没什么好讲的,就是纯搜索,先搜顺子,再搜其他的,最后单张牌和对子的时候,就不要搜索了,直接枚举,不然会T飞掉多么痛的领悟-- 主要还是靠码力 #include<iost ...

  5. C#值类型和引用类型与Equals方法

    1. C#的值类型和引用类型 C#的对象里面有两种类型,一个是引用类型,一个是值类型,值类型和引用类型的具体分类可以看下面的分类.   在C#中,不管是引用类型还是值类型,他们都隐式继承Object类 ...

  6. bootstrap历练实例: 垂直胶囊式的导航菜单

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  7. javase(13)_网络编程

    一.概述 1.网络编程的核心是IP.端口(表示应用程序).协议三大元素 2.网络编程的本质是进程间通信 3.网络编程的2个主要问题:1是定位主机,2是数据传输 二.网络通信的概念 1.网络通信协议 计 ...

  8. PHP操作MySQL事务实例

    PHP与MYSQL事务处理 一般来说,事务都应该具备ACID特征.所谓ACID是Atomic(原子性),Consistent(一致性),Isolated(隔离性),Durable(持续性)四个词的首字 ...

  9. 绑定用户id,用户权限认证

    上面这个就是为了把user_id与文章关联起来 文章需要跟用户关联,所以要去文章模型中加以关联 这样就可以直接在模板中进行关联处理 权限认证 首先要创建policy php artisan make: ...

  10. 《linux设备驱动开发详解》笔记——6字符设备驱动

    6.1 字符设备驱动结构 先看看字符设备驱动的架构: 6.1.1 cdev cdev结构体是字符设备的核心数据结构,用于描述一个字符设备,cdev定义如下: #include <linux/cd ...