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

相关文章

基于Python打造一个全能文本处理工具

《基于Python打造一个全能文本处理工具》:本文主要介绍一个基于Python+Tkinter开发的全功能本地化文本处理工具,它不仅具备基础的格式转换功能,更集成了中文特色处理等实用功能,有需要的... 目录1. 概述:当文本处理遇上python图形界面2. 功能全景图:六大核心模块解析3.运行效果4. 相

springboot项目中常用的工具类和api详解

《springboot项目中常用的工具类和api详解》在SpringBoot项目中,开发者通常会依赖一些工具类和API来简化开发、提高效率,以下是一些常用的工具类及其典型应用场景,涵盖Spring原生... 目录1. Spring Framework 自带工具类(1) StringUtils(2) Coll

Linux ls命令操作详解

《Linuxls命令操作详解》通过ls命令,我们可以查看指定目录下的文件和子目录,并结合不同的选项获取详细的文件信息,如权限、大小、修改时间等,:本文主要介绍Linuxls命令详解,需要的朋友可... 目录1. 命令简介2. 命令的基本语法和用法2.1 语法格式2.2 使用示例2.2.1 列出当前目录下的文

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Linux中的计划任务(crontab)使用方式

《Linux中的计划任务(crontab)使用方式》:本文主要介绍Linux中的计划任务(crontab)使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、前言1、linux的起源与发展2、什么是计划任务(crontab)二、crontab基础1、cro

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1