当前位置: 首页 > news >正文

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_open
          ls-2516    [000]    123.456799:  do_sys_open <-sys_open
          ls-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_open
          ls-2516    [000]    123.456799:  do_sys_open <-sys_open
          ls-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

通过这些工具和方法,您可以更高效地分析内核函数调用,理解系统行为,并进行性能优化和调试。

相关文章:

  • 【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现
  • PPT设置为本框的默认格式以及固定文本框
  • CorelDRAW2024官方最新中文破解版Crack安装包网盘下载安装方法
  • golang使用WaitGroup等待多个协程执行完成
  • 玄机靶场 第二章日志分析-mysql应急响应
  • 【运维】如何更换Ubuntu默认的Python版本,update-alternatives如何使用
  • 【设计模式深度剖析】【3】【行为型】【职责链模式】| 以购物中心客户服务流程为例加深理解
  • leetcode hot100 之 最长公共子序列
  • 工作总结1
  • 苹果WWDC 2024 带来的 AI 风暴:从生产力工具到个人助理,AI 将如何融入我们的生活?
  • Kotlin 委托
  • 面试Flask需要知道的知识点1
  • 【目标检测】基于深度学习的车牌识别管理系统(含UI界面)【python源码+Pyqt5界面 MX_002期】
  • 【Nginx系列】基于请求头的分发
  • Linux fallocate工具用于预分配或释放文件空间的块
  • 【qt】项目移植
  • pdf添加书签的软件,分享3个实用的软件!
  • LLVM Cpu0 新后端6
  • 【HarmonyOS】HUAWEI DevEco Studio 下载地址汇总
  • SQL学习小记(六)将数据库中表为NULL的地方补上需要的值
  • 综合治理食品添加剂滥用问题,国务院食安办等六部门联合出手
  • 五一假期,长三角铁路张家港、台州等多个车站客发量创新高
  • 4月份全球制造业PMI继续下降,经济下行压力有所加大
  • 俄军击落多架企图攻击莫斯科的无人机
  • 云南禄丰尾矿坍塌事故搜救正在进行,被掩埋的四辆工程车已找到
  • 贵州黔西市游船倾覆事故发生后,多家保险公司紧急响应