本文主要是介绍Linux内核 -- ftrace 调试工具培训,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ftrace 技术培训文档
技术背景
ftrace
是 Linux 内核中的一个跟踪框架,用于调试和分析内核中的性能问题。它允许开发者跟踪内核函数的调用和执行情况,从而帮助定位性能瓶颈和异常行为。
编译和部署 ftrace
开启 ftrace 内核选项
-
配置内核选项:
在编译内核时,需要确保以下选项被启用。运行
make menuconfig
,并在菜单中找到ftrace
相关选项进行配置:Kernel hacking --->Tracers --->[*] Tracing support[*] Kernel Function Tracer[*] Kernel Function Graph Tracer[*] Interrupts-off Latency Tracer[*] Preemption-off Latency Tracer[*] Scheduling Latency Tracer[*] Trace syscalls[*] Enable ftrace-based function graph anomaly detection
-
编译并安装内核:
完成配置后,编译并安装新的内核。
make -j$(nproc) make modules_install make install reboot
使用 ftrace
-
挂载 debugfs:
ftrace
的信息存储在debugfs
文件系统中。首先需要挂载debugfs
:mount -t debugfs none /sys/kernel/debug
-
启用跟踪:
可以通过以下步骤来启用和查看跟踪信息:
-
启用功能跟踪:
echo function > /sys/kernel/debug/tracing/current_tracer
-
启动跟踪:
echo 1 > /sys/kernel/debug/tracing/tracing_on
-
查看跟踪输出:
cat /sys/kernel/debug/tracing/trace
-
停止跟踪:
echo 0 > /sys/kernel/debug/tracing/tracing_on
-
清除跟踪缓冲区:
echo > /sys/kernel/debug/tracing/trace
-
示例脚本
下面是一个简单的脚本示例,用于启用 ftrace
并捕获一些内核函数调用的跟踪信息:
#!/bin/bash# 挂载 debugfs
mount -t debugfs none /sys/kernel/debug# 选择 function tracer
echo function > /sys/kernel/debug/tracing/current_tracer# 启用跟踪
echo 1 > /sys/kernel/debug/tracing/tracing_on# 运行一些命令以生成跟踪信息
ls / > /dev/null# 停止跟踪
echo 0 > /sys/kernel/debug/tracing/tracing_on# 显示跟踪信息
cat /sys/kernel/debug/tracing/trace# 清除跟踪缓冲区
echo > /sys/kernel/debug/tracing/trace
分析 ftrace 输出
当您执行 cat /sys/kernel/debug/tracing/trace
时,输出的格式通常如下:
# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |ls-2516 [000] 123.456789: vfs_open <-do_sys_openls-2516 [000] 123.456799: do_sys_open <-sys_openls-2516 [000] 123.456812: sys_open <-__x64_sys_open
每行的信息如下:
- TASK-PID:任务名和进程 ID。
- CPU#:CPU 核心编号。
- TIMESTAMP:时间戳,通常是自系统启动以来的秒数。
- FUNCTION:调用的函数名,箭头
<-
后面的函数表示被调用者。
示例输出解释
以下是一个示例输出及其解释:
# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |ls-2516 [000] 123.456789: vfs_open <-do_sys_openls-2516 [000] 123.456799: do_sys_open <-sys_openls-2516 [000] 123.456812: sys_open <-__x64_sys_open
-
第一行:
- 任务名:
ls
- 进程 ID:
2516
- CPU 核心编号:
0
- 时间戳:
123.456789
- 函数调用:
vfs_open
被do_sys_open
调用
- 任务名:
-
第二行:
- 任务名:
ls
- 进程 ID:
2516
- CPU 核心编号:
0
- 时间戳:
123.456799
- 函数调用:
do_sys_open
被sys_open
调用
- 任务名:
-
第三行:
- 任务名:
ls
- 进程 ID:
2516
- CPU 核心编号:
0
- 时间戳:
123.456812
- 函数调用:
sys_open
被__x64_sys_open
调用
- 任务名:
其他有用的文件
在 ftrace
的 debugfs
目录中,有一些其他有用的文件,可以帮助您更好地分析和控制跟踪:
- set_ftrace_filter:指定要跟踪的函数。
- set_ftrace_notrace:指定不需要跟踪的函数。
- trace_pipe:类似于
trace
文件,但可以实时输出跟踪信息,适用于流式处理。
进一步的分析工具
可以使用其他工具来更方便地分析 ftrace
的输出。例如:
- trace-cmd:一个强大的命令行工具,可以捕获和分析
ftrace
数据。 - kernelshark:一个图形化工具,可以更直观地分析
ftrace
输出。
示例脚本:使用 trace-cmd
#!/bin/bash# 开始记录跟踪数据
trace-cmd record -e sched_switch# 运行一些命令
ls /# 停止记录并显示跟踪数据
trace-cmd report
通过这些工具和方法,您可以更高效地分析内核函数调用,理解系统行为,并进行性能优化和调试。
这篇关于Linux内核 -- ftrace 调试工具培训的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!