加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

Linux ftrace 之 function、function_graph 使用笔记(一)

2023/08/25
4448
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

‍哈喽,大家好,我是小G。

前言

ftrace 功能很强大,不仅能跟踪代码流程,也能用来分析性能问题。对于 Linux 和 Android 平台的学习和开发人员来说 ,能够熟练使用 ftrace 的话,是非常强大的生产力,非常尤其要深入和快速学习linux内核相关流程,也非常有用。

我也是在努力学习中,目前能进行一些简单的性能问题分析,常用的主要还在使用 ftrace 熟悉和学习 linux 内核函数和相关流程,更好的理解工作中涉及到的内核层面知识。所以用的 最多的是ftrace 的 function、function_graph  这两个跟踪器。

在学习使用  function、function_graph 之前,需要先了解一些,ftrace 相关的一些数据和节点文件知识。

正文

最新的linux 内核,ftrace 所有相关数据和文件节点都位于 /sys/kernel/tracing 目录下。

ftrace部分数据和文件节点说明:

文件..................... 用途.........................
README README文件提供了一个简短的使用说明,展示了ftrace的操作命令序列。可以通过cat命令查看该文件以了解概要的操作流程。
current_tracer current_tracer用于设置或显示当前使用的跟踪器;使用echo将跟踪器名字写入该文件可以切换到不同的跟踪器。系统启动后,其缺省值为nop,即不做任何跟踪操作。在执行完一段跟踪任务后,可以通过向该文件写入nop来重置跟踪器。
available_tracers available_tracers记录了当前编译进内核的跟踪器的列表,可以通过cat查看其内容。写current_tracer文件时用到的跟踪器名字必须在该文件列出的跟踪器名字列表中。
trace trace文件提供了查看获取到的跟踪信息的接口。可以通过cat等命令查看该文件以查看跟踪到的内核活动记录,也可以将其内容保存为记录文件以备后续查看。
...... ...
set_graph_function set_graph_function设置要清晰显示调用关系的函数,显示的信息结构类似于C语言代码,这样在分析内核运作流程时会更加直观一些。在使用function_graph跟踪器时使用;缺省为对所有函数都生成调用关系序列,可以通过写该文件来指定需要特别关注的函数。
buffer_size_kb buffer_size_kb用于设置单个CPU所使用的跟踪缓存的大小。跟踪器会将跟踪到的信息写入缓存,每个CPU的跟踪缓存是一样大的。跟踪缓存实现为环形缓冲区的形式,如果跟踪到的信息太多,则旧的信息会被新的跟踪信息覆盖掉。

说明:

要更改该文件的值需要先将“current_tracer”设置为“nop”才可以。

tracing_on tracing_on用于控制跟踪的暂停。有时候在观察到某些事件时想暂时关闭跟踪,可以将0写入该文件以停止跟踪,这样跟踪缓冲区中比较新的部分是与所关注的事件相关的;写入1可以继续跟踪。
available_filter_functions available_filter_functions记录了当前可以跟踪的内核函数。对于不在该文件中列出的函数,无法跟踪其活动。
set_ftrace_filter、

set_ftrace_notrace

set_ftrace_filter和 set_ftrace_notrace在编译内核时配置了动态ftrace(选中 CONFIG_DYNAMIC_FTRACE 选项)后使用。前者用于显示指定要跟踪的函数,后者则作用相反,用于指定不跟踪的函数。如果一个函数名同时出现在这两个文件中,则这个函数的执行状况不会被跟踪。这些文件还支持简单形式的含有通配符的表达式,这样可以用一个表达式一次指定多个目标函数。缺省为可以跟踪所有内核函数,文件set_ftrace_notrace的值则为空。

说明:

要写入这两个文件的函数名必须可以在文件available_filter_functions中看到。

ftrace部分跟踪器说明:

ftrace包含多个跟踪器,用于跟踪不同类型的信息,例如进程调度、中断关闭等。可以通过 available_tracers 获取内核当前支持的跟踪器列表。常见的跟踪器有:

跟踪器.............. 说明.......................
nop nop跟踪器不会跟踪任何内核活动,将nop写入current_tracer文件可以删除之前所使用的跟踪器,并清空之前收集到的跟踪信息,即刷新trace文件。
function function跟踪器可以跟踪内核函数的执行情况,可以通过文件set_ftrace_filter显示指定要跟踪的函数。
function_graph function_graph跟踪器可以显示类似C源码的函数调用关系图,这样查看起来比较直观一些,可以通过文件 set_graph_function显示指定要生成调用流程图的函数。
sched_switch sched_switch跟踪器可以对内核中的进程调度活动进行跟踪。
irqsoff、

preemptoff

irqsoff跟踪器和 preemptoff跟踪器分别跟踪关闭中断的代码和禁止进程抢占的代码,并记录关闭的最大时长,preemptirqsoff跟踪器则可以看做它们的组合。

ftrace还支持其它一些跟踪器,了解更多可查看详细内核文档和源码。“Documentation/trace”目录下的文档以及“kernel/trace”下的源文件。

下一篇,将会看下具体如何使用 function 和 function_graph 。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
SFP-1GBT-05 1 Bel Fuse Transceiver, 1250Mbps(Tx), 1250Mbps(Rx), RJ-45 Connector, Surface Mount, ROHS COMPLIANT PACKAGE
$435.38 查看
TLP5214(D4-TP,E 1 Toshiba America Electronic Components OPTOISO 5KV GATE DRIVER 16SO
$7.1 查看
DS24B33Q+T&R 1 Maxim Integrated Products EEPROM, 4KX1, Serial, CMOS, PDSO6, 3 X 3 MM, ROHS COMPLIANT, TDFN-6
$3.11 查看

相关推荐

电子产业图谱

记录和分享C/C++、Linux、ARM、Android、IoT相关知识。技术相伴于生活和成长,愿你我永为少年,心中有火,眼中有光,始保热情。