ftrace使用介绍

ftrace使用介绍

1.介绍

Ftrace是一个专门针对linux kernel内核空间的debug工具,用于帮助开发者在用户空间对内核低延时,内核性能等方面的分析。

尽管ftrace最开始设计时主要是为了追踪函数的调用栈,但随着功能的增强,已经演变成一个跟踪框架,支持多种跟踪器,如function、function_graph、wakeup、irq等。另外一个很常用的功能就是事件跟踪,在用户空间通过debugfs文件系统启用内核代码中的数百个静态trace point,利用这些trace point,可以查看内核态发生的一些事件信息。

2.ftrace的配置和使用

2.1 ftrace的功能配置

要使用ftrace,首先需要将其及其相关的依赖编译进内核,通过在内核根目录下执行make menuconfig ARCH=xxx,可以直观的看到如下图所示的菜单项:
ftrace使用介绍_第1张图片
ftrace使用介绍_第2张图片
ftrace使用介绍_第3张图片
ftrace通过debugfs向用户空间提供访问接口,所以还需将debugfs编译进内核,因此还需在内核的配置中支持debugfs,如下图所示:
ftrace使用介绍_第4张图片
ftrace使用介绍_第5张图片
ftrace使用介绍_第6张图片

2.1 ftrace的功能配置

ftrace通过debugfs向用户空间提供访问接口,内核配置debugfs后,会创建/sys/kernel/debug目录,debugfs文件系统就是挂载到该目录,要挂载该目录,可以采用以下两种方式:

方式一:将如下内容添加到rootfs中的/etc/fstab文件

debugfs /sys/kernel/debug debugfs defaults 0 0

方式二:运行时挂载

mount -t debugfs nodev /sys/kernel/debugfs

如果内核支持ftrace相关的配置项后,会在debugfs下创建一个tracing目录(/sys/kernel/debug/tracing)。该目录包含了ftrace的控制和输出文件,该目录内容如下图所示:
ftrace使用介绍_第7张图片

利用debugfs文件系统透露出来的接口文件,我们可以使用echo和cat命令对这些文件进行操作,从而得到我们期望的分析数据和log,用于我们进行分析,下面对一些常用的接口文件进行简单的介绍。

3.ftrace debugfs接口介绍

在/sys/kernel/debug/tracing目录下,我们会看到ftrace通过debugfs文件系统提供的一些ftrace的控制和输出文件,下面对这些文件进行简单的介绍:

README:该文件提供了一个简短的使用说明,展示了ftrace的操作命令序列,可以通过cat命令查看该文件以了解ftrace的简单操作流程

通用配置:

available_events:列出系统中所有可用的Trace events,分两个层级,用冒号隔开。
current_tracer:用于设置或者显示当前使用的跟踪器列表。系统启动缺省值为nop,使用echo将跟踪器名字写入即可打开。可以通过写入nop重置跟踪器
buffer_size_kb:单个cpu跟踪缓存大小
buffer_total_size_kb:显示所有的跟踪缓存大小,不同之处在于buffer_size_kb是单个CPU的,buffer_total_size_kb是所有CPU的和
free_buffer:此文件用于在一个进程被关闭后,同时释放RingBuffer内存,并将调整大小到最小值
trace:查看获取到的跟踪信息的接口,echo > trace可以清空当前RingBuffer。
trace_pipe:实时输出和trace一样的内容,但是此文件输出Trace同时将RingBuffer中的内容删除,这样就避免了RingBuffer的溢出。可以通过cat trace_pipe > trace.txt 保存文件
trace_options:控制Trace打印内容或者操作跟踪器,可以通过trace_options添加很多附加信息
options:trace选项的一系列文件,和trace_options配合使用。
tracing_on:用于控制跟踪打开或停止,0停止跟踪,1继续跟踪。

Function配置:

available_filter_functions:列出当前可以跟踪的内核函数,不在该文件中列出的函数,无法跟踪其活动
enabled_functions:显示有回调附着的函数名称。
function_profile_enabled:打开此选项,在trace_stat中就会显示function的统计信息。
set_ftrace_filter:用于指定跟踪的函数
set_ftrace_notrace:用于指定不跟踪的函数
set_ftrace_pid:用于指定要跟踪特定进程的函数

Function_graph配置:

max_graph_depth:函数嵌套最大深度,默认不限制
set_graph_function:显示函数调用关系,使用function_graph跟踪器默认显示函数调用关系
set_graph_notrace:不跟踪特定的函数嵌套调用

Stack trace设置:

stack_max_size:当使用stack跟踪器时,记录产生过的最大stack size
stack_trace:显示stack的back trace
stack_trace_filter:设置stack tracer不检查的函数名称

event trace配置:

available_events:列出系统中所有可用的Trace events,分两个层级,用冒号隔开。
events/:系统Trace events目录,在每个events下面都有enable、filter和fotmat。enable是开关;format是events的格式,然后根据格式设置 filter
set_event:将Trace events名称直接写入set_event就可以打开。
set_event_pid:指定追踪特定进程的events。

OK,以上就是对ftrace的配置进行的一些简单的介绍,后续会继续介绍ftrace如何来追踪函数和event事件,以及如何利用ftrace进行内核的debug.

你可能感兴趣的:(linux)