ftrace用法

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的内容,确定当前内核是否支持记录函数调用的函数追踪器:

[email protected]:/sys/kernel/debug/tracing# cat  available_tracers

blk function_graph mmiotrace wakeup_rtwakeup function nop

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

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

[email protected]:/sys/kernel/debug/tracing#echo schedule > set_ftrace_filter

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

[email protected]:/sys/kernel/debug/tracing#echo function > current_tracer

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

[email protected]:/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函数。

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

[email protected]:/sys/kernel/debug/tracing#echo ‘irq*’ > set_ftrace_filter

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

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

[email protected]:/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打印的信息。

时间: 2024-09-30 17:16:42

ftrace用法的相关文章

ftrace.txt

ftrace - 函数跟踪器                ======================== Copyright 2008 Red Hat Inc.   Author:   Steven Rostedt <[email protected]>  License:   The GNU Free Documentation License, Version 1.2               (dual licensed under the GPL v2)Reviewers:  

ftrace的使用【转】

转自:http://blog.csdn.net/cybertan/article/details/8258394 This article explains how to set up ftrace and be able to understand how to trace functions. It should be useful for current kernel developers and device driver developers who want to debug ker

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

内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通过示例模块程序向读者展示如何在代码中使用这些工具函数. 使用 trace_printk 打印跟踪信息 ftrace 提供了一个用于向 ftrace 跟踪缓冲区输出跟踪信息的工具函数,叫做 trace_printk(),它的使用方式与 printk() 类似.可以通过 trace 文件读取该函数的输出

ftrace 提供的工具函数

内核头文件 include/linux/kernel.h 中描述了 ftrace 提供的工具函数的原型,这些函数包括 trace_printk.tracing_on/tracing_off 等.本文通过示例模块程序向读者展示如何在代码中使用这些工具函数. 使用 trace_printk 打印跟踪信息 ftrace 提供了一个用于向 ftrace 跟踪缓冲区输出跟踪信息的工具函数,叫做 trace_printk(),它的使用方式与 printk() 类似.可以通过 trace 文件读取该函数的输出

ftrace的使用

This article explains how to set up ftrace and be able to understand how to trace functions. It should be useful for current kernel developers and device driver developers who want to debug kernel issues, and also for students who are keen to pursue

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

文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, strace是一个可用于诊断.调试和教学的Linux用户空间跟踪器.我们用它来监控用户空间进程和内核的交互,比如系统调用.信号传递.进程状态变更等. strace底层使用内核的ptrace特性来实现其功能. 在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能.strace作为一种动态跟踪工具,能够帮助运维高效地定位进

js中获取时间new date()的用法

js中获取时间new date()的用法 获取时间:   var myDate = new Date();//获取系统当前时间 获取特定格式的时间: 1 myDate.getYear(); //获取当前年份(2位) 2 myDate.getFullYear(); //获取完整的年份(4位,1970-????) 3 myDate.getMonth(); //获取当前月份(0-11,0代表1月) 4 myDate.getDate(); //获取当前日(1-31) 5 myDate.getDay();

20.5 Shell脚本中的逻辑判断;20.6 文件目录属性判断;20.7 if特殊用法;20.8 20.9 cace判断(上下)

扩展: select用法 http://www.apelearn.com/bbs/thread-7950-1-1.html 20.5 Shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 1. 创建if1.sh测试脚本: [[email protected] ~]# vi if1.sh a=5,如果a大于3,满足这个条件,显示ok 添加内容: #!/bin/bash a=5 if [ $a -gt 3 ] then echo ok fi 2. 执行if1.sh脚本: [[e

20.1 Shell脚本介绍;20.2 Shell脚本结构和执行;20.3 date命令用法;20.4 Shell脚本中的变量

20.1 Shell脚本介绍 1. shell是一种脚本语言 aming_linux blog.lishiming.net 2. 可以使用逻辑判断.循环等语法 3. 可以自定义函数 4. shell是系统命令的集合 5. shell脚本可以实现自动化运维,能大大增加我们的运维效率 20.2 Shell脚本结构和执行 1. 开头(首行)需要加: #!/bin/bash 2. 以#开头的行作为解释说明: 3. 脚本的名字以.sh结尾,用于区分这是一个shell脚本 4. 执行.sh脚本方法有两种: