松垮垮 松垮垮
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

松垮垮

c++后端开发工程师
首页
  • GPU并行编程
  • 图形学
  • 归并算法
  • 计算机视觉
  • css
  • html
  • JavaScript
  • vue
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式
  • 分布式
  • 操作系统
  • 数据库
  • 服务器
  • 网络
  • C++
  • c语言
  • go
  • JSON
  • Makefile
  • matlab
  • OpenGL
  • python
  • shell
  • 正则表达式
  • 汇编
  • GPU并行编程
  • mysql
  • nginx
  • redis
  • 网络
  • 计算机视觉
  • 进程管理
  • linux调试
  • 【Python】:re.error bad escape i at position 4
  • 搭建ai知识助手
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 压缩命令
  • cmdline
  • Docker
  • ftrace跟踪技术
    • 开启和设置跟踪
    • 特定函数跟踪
    • 动态函数跟踪
    • Function Triggers 详细配置
    • events跟踪
    • 动态函数和事件 跟踪
    • ftrace 前端工具: trace cmd
      • command:
  • gcov代码覆盖率测试
  • GDB
  • git
  • kgdb
  • linux操作
  • markdown
  • systemtap
  • valgrind
  • 设计模式

  • 工具和开发
songkuakua
2025-02-15
目录

ftrace跟踪技术

# ftrace跟踪技术

Owner: -QVQ- Untitled

ftrace 前端工具: trace cmd

以下所有代码和文件均在/sys/kernel/debug/tracing/路径下进行

多实例跟踪:在不同路径下可以进行不同的跟踪

工具安装:

apt install trace-cmd

# 开启和设置跟踪

//跟踪内核态函数调用
cd /sys/kernel/debug/tracing/           // 进入 ftrace 工作目录
echo 0 > tracing_on                     // 关闭 trace(每次设置之前都先关一下)
echo function > current_tracer          // 设置 trace 类型
echo > trace                            // 清空历史 trace 信息
echo 1 > tracing_on                     // 打开 trace
echo 0 > tracing_on                     // 关闭 trace
head n 50 trace                         // 显示 trace 的前 50 行信息
1
2
3
4
5
6
7
8

设置trace类型,取决对current_trace这个文件的写入

current_tracer可写入的类型包括(cat available_tracers可查看支持哪些类型)

  • function:跟踪内核态函数调用,只在函数入口探测,打印函数调用
  • function_graph:跟踪内核态函数耗时与调用,在函数入口和出口探测,打印函数调用图
  • wakeup、wakeup_rt、waktup_dl :调试从系统被唤醒到被调度到的延时
  • mmiotrace:跟踪内核中的 memory mapped I/O (外设映射为内存)的访问,比如 GPU ,磁盘等
  • blk、blocktrace :block 层的一些延时
  • nop:关闭所有 trace ,但是 event 仍有显示

# 特定函数跟踪

对set_ftrace_filter这个文件的写入

//只跟踪vfs write 函数

1.进入 ftrace 工作目录:
cd /sys/kernel/debug/tracing
2.查看系统支持的 tracer 类型:
cat available_tracers
hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop
3.关闭 tracer
echo 0 > tracing_on
4.设置 tracer 类型为 function
echo function > current_tracer
5.set_ftrace_filter 表示要跟踪的函数
只跟踪vfs write 函数 不设置会跟踪所有内核函数
echo vfs_write > set_ftrace_filter
6.使能 tracer
echo 1 > tracing_on
7.关闭 tracer
echo 0 > tracing_on
8.提取 trace 结果:
cat trace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

Untitled

# 动态函数跟踪

主要包含对以下几个文件的修改:

  • set_ftrace_filter:只跟踪这些函数
  • set_ftrace_notrace:不追踪这些函数(优先级高于set_ftrace_filter)
  • set_graph_function:设置要清晰显示调用关系的函数(在使用 function_graph 跟踪器时使用)
  • set_ftrace_pid:指定跟踪的进程ID

可通过查看available_filter_functions这个文件查看支持对哪些函数可作上面的操作

用 cat available_filter_functions |wc -l 可看到支持约50000个函数 Untitled

# Function Triggers 详细配置

Format: <function>:<trigger>[:count](count可选,默认一直跟踪)

trigger:

traceon , traceoff enable_event:<system>:<event> disable_event:<system>:<event> stacktrace snapshot dump cpudump

例:

开启跟踪: echo'vfs_write:stacktrace:10' > set_ftrace_filter

当跟踪到函数vfs_write时执行stacktrace,跟踪10次

关闭跟踪: # echo‘!vfs_write:stacktrace:10’ > set_ftrace_filter(如果上面写了【count】关闭跟踪也要有)

trigger的输入支持使用通配符

Untitled

# events跟踪

trace event 就是利用 ftrace 框架,实现低性能损耗,对执行流无影响的一种信息输出机制。相比 printk trace event •不开启没有性能损耗 •开启后不影响代码流程 •不需要重新编译内核即可获取 debug 信息

系统支持的所有trace event 都位于 /sys/kernel/debug/tracing/events

1.关闭 tracer ,清空 trace
 echo 0 > tracing_on
 echo > trace
2.设置 tracer 类型为 function
 echo nop > current_tracer
3.跟踪任务切换事件 /sys/kernel/debug/tracing/events/sched/sched_switch
 echo 1 > /sys/kernel/debug/tracing/events/sched/sched_switch/enable
4.使能 tracer
 echo 1 > tracing_on
 。。。
 echo 0 > tracing_on
5.提取 trace 结果
 cat trace
1
2
3
4
5
6
7
8
9
10
11
12
13

trace结果: Untitled

# 动态函数和事件 跟踪

#函数和事迹跟踪结合,跟踪中断调度过程
1.关闭 tracer ,清空 trace
 echo 0 > tracing_on
 echo > trace
2.设置跟踪器类型
 echo function_graph > current_tracer
3.设置 函数过滤类型:
 echo '_common_interrupt' > set_ftrace_filter
4.设置中断跟踪
echo 1 > events/irq/irq_handler_entry/enable
5.使能 tracer
 echo 1 > tracing_on
 。。。
 echo 0 > tracing_on
6.提取 trace 结果
 cat trace
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# ftrace 前端工具: trace cmd

安装:apt install trace-cmd

trace-cmd command [options] ……

# command:

start -p function:启用函数追踪器

start -p function_graph:启用函数事件追踪器

start -p function_graph --max-graph-depth 5调整追踪以增加深度

record -l ext4_* -p function_graph追踪特定函数

show :查看输出trace

stop:停止追踪

clear:清除缓存

list -t:列出可用的追踪器

list -f了解可被追踪的函数

上次更新: 2025/02/21, 14:57:10
Docker
gcov代码覆盖率测试

← Docker gcov代码覆盖率测试→

最近更新
01
搭建ai知识助手
02-23
02
边缘检测
02-15
03
css
02-15
更多文章>
Theme by Vdoing | Copyright © 2025-2025 松垮垮 | MIT License | 蜀ICP备2025120453号 | 川公网安备51011202000997号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 纯净模式