Linux内核 -- ftrace 调试工具培训

2024-06-13 01:36

本文主要是介绍Linux内核 -- ftrace 调试工具培训,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ftrace 技术培训文档

技术背景

ftrace 是 Linux 内核中的一个跟踪框架,用于调试和分析内核中的性能问题。它允许开发者跟踪内核函数的调用和执行情况,从而帮助定位性能瓶颈和异常行为。

编译和部署 ftrace

开启 ftrace 内核选项

  1. 配置内核选项

    在编译内核时,需要确保以下选项被启用。运行 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
    
  2. 编译并安装内核

    完成配置后,编译并安装新的内核。

    make -j$(nproc)
    make modules_install
    make install
    reboot
    

使用 ftrace

  1. 挂载 debugfs

    ftrace 的信息存储在 debugfs 文件系统中。首先需要挂载 debugfs

    mount -t debugfs none /sys/kernel/debug
    
  2. 启用跟踪

    可以通过以下步骤来启用和查看跟踪信息:

    • 启用功能跟踪

      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

每行的信息如下:

  1. TASK-PID:任务名和进程 ID。
  2. CPU#:CPU 核心编号。
  3. TIMESTAMP:时间戳,通常是自系统启动以来的秒数。
  4. 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_opendo_sys_open 调用
  • 第二行

    • 任务名:ls
    • 进程 ID:2516
    • CPU 核心编号:0
    • 时间戳:123.456799
    • 函数调用:do_sys_opensys_open 调用
  • 第三行

    • 任务名:ls
    • 进程 ID:2516
    • CPU 核心编号:0
    • 时间戳:123.456812
    • 函数调用:sys_open__x64_sys_open 调用

其他有用的文件

ftracedebugfs 目录中,有一些其他有用的文件,可以帮助您更好地分析和控制跟踪:

  • 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 调试工具培训的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055916

相关文章

Oracle数据库定时备份脚本方式(Linux)

《Oracle数据库定时备份脚本方式(Linux)》文章介绍Oracle数据库自动备份方案,包含主机备份传输与备机解压导入流程,强调需提前全量删除原库数据避免报错,并需配置无密传输、定时任务及验证脚本... 目录说明主机脚本备机上自动导库脚本整个自动备份oracle数据库的过程(建议全程用root用户)总结

Linux如何查看文件权限的命令

《Linux如何查看文件权限的命令》Linux中使用ls-R命令递归查看指定目录及子目录下所有文件和文件夹的权限信息,以列表形式展示权限位、所有者、组等详细内容... 目录linux China编程查看文件权限命令输出结果示例这里是查看tomcat文件夹总结Linux 查看文件权限命令ls -l 文件或文件夹

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

linux下shell脚本启动jar包实现过程

《linux下shell脚本启动jar包实现过程》确保APP_NAME和LOG_FILE位于目录内,首次启动前需手动创建log文件夹,否则报错,此为个人经验,供参考,欢迎支持脚本之家... 目录linux下shell脚本启动jar包样例1样例2总结linux下shell脚本启动jar包样例1#!/bin

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Linux之platform平台设备驱动详解

《Linux之platform平台设备驱动详解》Linux设备驱动模型中,Platform总线作为虚拟总线统一管理无物理总线依赖的嵌入式设备,通过platform_driver和platform_de... 目录platform驱动注册platform设备注册设备树Platform驱动和设备的关系总结在 l

linux批量替换文件内容的实现方式

《linux批量替换文件内容的实现方式》本文总结了Linux中批量替换文件内容的几种方法,包括使用sed替换文件夹内所有文件、单个文件内容及逐行字符串,强调使用反引号和绝对路径,并分享个人经验供参考... 目录一、linux批量替换文件内容 二、替换文件内所有匹配的字符串 三、替换每一行中全部str1为st