【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】

文章目录

    • [ftrace 介绍](#ftrace 介绍)
    • [trace-cmd 介绍](#trace-cmd 介绍)
    • [trace-cmd 常用跟踪事件](#trace-cmd 常用跟踪事件)
    • [ftrace 与 trace-cmd 关系](#ftrace 与 trace-cmd 关系)
    • [ftrace 编译依赖](#ftrace 编译依赖)

ftrace 介绍

ftrace 是 Linux 内核中的一个跟踪工具,主要用于帮助开发者分析和调试内核的行为。ftrace 的名字来源于 "function tracer",它最初是用于跟踪内核函数调用的,但现在已经发展成一个功能强大的通用跟踪框架,可以跟踪函数调用、调度事件、中断、定时器、内存映射等各种内核事件。

下面是一些使用 ftrace 的基本示例:

查看当前可用的跟踪器:

powershell 复制代码
$ cat /sys/kernel/debug/tracing/available_tracers

启用 function_graph 跟踪器(用于跟踪函数调用图):

powershell 复制代码
$ echo function_graph > /sys/kernel/debug/tracing/current_tracer

查看跟踪结果:

powershell 复制代码
$ cat /sys/kernel/debug/tracing/trace

关闭当前跟踪器:

powershell 复制代码
$ echo nop > /sys/kernel/debug/tracing/current_tracer

注意:使用 ftrace 需要相应的权限,通常需要 root 权限。

trace-cmd 介绍

trace-cmd 是一个由 Steven Rostedt 维护的用于控制和使用 Ftrace 的工具,它是 Linux 中包含的一个低开销的内核跟踪系统。

使用 trace-cmd,你可以启动和停止内核跟踪,保存和读取跟踪结果,以及列出可用的跟踪选项。

以下是一些基本的 trace-cmd 使用示例:

开始跟踪:

powershell 复制代码
$ trace-cmd start -e sched_switch

这条命令开始跟踪调度器切换事件(sched_switch)。

停止跟踪并保存结果:

powershell 复制代码
$ trace-cmd stop 
$ trace-cmd extract -o my_trace.dat

首先停止跟踪,然后将跟踪结果保存到文件 my_trace.dat 中。

读取跟踪结果:

python 复制代码
$ trace-cmd report my_trace.dat

这条命令将读取并打印出跟踪文件 my_trace.dat 中的内容。

以上就是一些基本的 trace-cmd 使用方法。trace-cmd 还有很多其他的功能和选项,你可以通过阅读 trace-cmd 的 man 手册或者 trace-cmd --help 来学习更多。

trace-cmd 常用跟踪事件

下面列出了一些常用的跟踪事件:

sched_switch:这个事件记录了进程切换的信息,包括旧进程的 PID、新进程的 PID、以及他们的优先级等;

block_rq_issue/block_rq_complete:这些事件记录了块设备请求的发出和完成;

irq_handler_entry/irq_handler_exit:这些事件记录了中断处理程序的入口和退出;

softirq_entry/softirq_exit/softirq_raise:这些事件记录了软中断的情况;

以下是如何使用 trace-cmd 跟踪这些事件的示例:

跟踪调度器切换事件

powershell 复制代码
$ trace-cmd record -e sched:sched_switch

该命令将开始记录 sched_switch 事件。你可以在此后执行你需要跟踪的操作。然后,使用 trace-cmd report 命令查看记录的事件。

跟踪块设备请求

powershell 复制代码
$ trace-cmd record -e block:block_rq_issue -e block:block_rq_complete

这个命令将记录块设备请求的发出和完成事件。同样,你可以使用 trace-cmd report 命令查看记录的事件。

跟踪中断处理

powershell 复制代码
$ trace-cmd record -e irq:irq_handler_entry -e irq:irq_handler_exit

这个命令将记录中断处理程序的入口和退出事件。使用 trace-cmd report 命令来查看记录的事件。

跟踪软中断

powershell 复制代码
$ trace-cmd record -e softirq:softirq_entry -e softirq:softirq_exit -e softirq:softirq_raise

这个命令将记录软中断的入口、退出和触发事件。查看记录的事件可以使用 trace-cmd report 命令。

ftrace 与 trace-cmd 关系

ftrace 和 trace-cmd 都是 Linux 内核提供的跟踪工具,但是使用方式和便利程度有所不同。

ftrace 是内核中的一个特性,它提供了一个文件系统接口(位于 /sys/kernel/debug/tracing/),可以通过读写这些文件来控制跟踪和查看跟踪结果。虽然 ftrace 功能强大,但是直接使用还是有些复杂,需要对内核的跟踪机制有一定了解。

trace-cmd 则是一个命令行工具,它对 ftrace 的接口进行了封装,提供了一种更简单易用的方式来使用 ftrace。使用 trace-cmd,你可以更方便地启动和停止跟踪、保存和读取跟踪结果,以及查看可用的跟踪选项。

总的来说,trace-cmd 提供了一种更用户友好的方式来使用 ftrace。如果你想要使用 ftrace,但又不想直接处理底层的文件系统接口,那么 trace-cmd 是一个很好的选择。

ftrace 编译依赖

启用和使用 ftrace 功能,需要在编译 Linux 内核时,开启对应的选项。

具体来说,你需要在内核配置(.config 文件)中开启以下选项:

  • CONFIG_FTRACE:这是 ftrace 的基本选项,必须开启;
  • CONFIG_FUNCTION_TRACER:这个选项用于启用函数跟踪器,也就是原始的 ftrace 功能。如果你想要跟踪内核函数的执行,需要开启这个选项;
  • CONFIG_FUNCTION_GRAPH_TRACER:这个选项用于启用函数图跟踪器,这个跟踪器可以在函数级别跟踪内核的执行流程,包括函数的调用和返回;
  • CONFIG_DYNAMIC_FTRACE:这个选项用于启用动态函数跟踪,这个功能可以在运行时动态地开启或关闭特定函数的跟踪;
    其他 CONFIG_*_EVENTS 选项:这些选项用于启用特定类型的事件跟踪,比如调度事件、中断事件、内存映射事件等。

在配置好这些选项后,你需要重新编译和安装内核。安装新内核后重启系统,ftrace 功能应该就可以使用了。

相关推荐
内核程序员kevin19 天前
使用trace-cmd跟踪Linux内核函数:一次愉快的内核探险
linux·运维·linux内核·ftrace
Aiden_SHU3 个月前
ftrace - 几种tracer的打印例子
linux·ftrace·latency
Fireplusplus9 个月前
Linux动态追踪——ftrace
linux·服务器·ftrace·动态跟踪
董哥聊技术1 年前
【一文秒懂】Ftrace系统调试工具使用终极指南
ftrace·linux开发·linux调试