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

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打印的信息。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ftrace和ptrace是两个不同的工具,它们在功能和用途上有所区别。 引用中提到的ftraceLinux 内核的一个内建跟踪工具,用于跟踪和分析内核函数调用、上下文切换、延迟和性能问题等。它可以通过配置内核和 debugfs 来使用,并包含多个跟踪器,可以方便地跟踪不同类型的信息。 而引用中提到的ptrace是一个系统调用,用于在用户空间中跟踪和控制进程的执行。通过ptrace,用户可以监视和修改目标进程的内存、寄存器和执行状态,实现调试和跟踪进程的功能。 因此,ftrace主要用于内核级别的跟踪和性能分析,而ptrace主要用于用户空间进程的调试和跟踪。它们各自具有不同的功能和应用场景,但都能提供有助于问题排查和性能优化的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Linux内核调试方法总结之strace ,ltrace, ptrace, ftrace, sysrq](https://blog.csdn.net/zmjames2000/article/details/88410484)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Linux内核学习(十):内核追踪必备技能--ftrace](https://blog.csdn.net/weixin_45264425/article/details/125955998)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值