浅析Linux追踪技术之ftrace:Event Tracing

2024-02-13 19:36

本文主要是介绍浅析Linux追踪技术之ftrace:Event Tracing,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 概述
    • 使用Event Tracing
      • 使用`set_event`接口
      • 使用`enable`接口
    • Event配置
      • Event format
      • Event Filtering
        • 过滤规则
        • 设置过滤器
      • Event Trigger
        • Trigger语法
    • Trace marker
    • 相关参考

概述

Event Tracing(事件追踪)利用在内核代码中加入的各种Tracepoint(追踪点)实现对系统的追踪。Tracepoint可以在不创建自定义内核模块的情况下使用,以使用Event Tracing基础结构注册探测函数。

使用Event Tracing

Event Tracing基于tracefs文件系统进行配置,与Event Tracing相关的控制文件如下:

  • /sys/kernel/tracing/available_events:查看系统可追踪的事件;
  • /sys/kernel/tracing/set_event:配置对特定事件的追踪;
  • /sys/kernel/tracing/set_event_notrace_pid:设置不追踪PID指定进程的事件;
  • /sys/kernel/tracing/set_event_pid:设置仅追踪PID指定进程的事件;
  • /sys/kernel/tracing/events:存放了系统所有可追踪的事件,在对应的事件目录下,存在enable文件,可用于使能对这个事件的追踪。

使用set_event接口

  • 启用对一个事件的追踪:echo sched_wakeup >> /sys/kernel/tracing/set_event
  • 禁用对一个事件的追踪:echo '!sched_wakeup' >> /sys/kernel/tracing/set_event
  • 禁用对所有事件的追踪:echo > /sys/kernel/tracing/set_event
  • 启用对所有事件的追踪:echo *:* > /sys/kernel/tracing/set_event

系统中的可追踪事件都会归属到某一个特定的subsystem,例如irq、block、scsi、net等,查看/sys/kernel/tracing/availabel_events文件可以看到每一个事件的完整名称格式应该是::,其中subsystem部分是可选的。
在这里插入图片描述

set_event接口支持启用对某一个subsystem中所有事件的追踪:

echo 'irq:*' > /sys/kernel/tracing/set_event

使用enable接口

/sys/kernel/tracing/events目录按照subsystem分类存放了系统中所有可追踪的事件,如下:

在这里插入图片描述

对于每一个可追踪事件,系统都提供了名为enable的控制文件,用于配置特定事件的开关。操作方式如下:

  • 启用对事件的追踪:echo 1 > /sys/kernel/tracing/events/block/block_plug/enable
  • 禁用对事件的追踪:echo 0 > /sys/kernel/tracing/events/block/block_plug/enable

如果需要启用对某一个subsystem下所有事件的追踪,操作对应subsystem目录下的enable文件就可以了。

Event配置

/sys/kernel/tracing/events目录存放了所有系统追踪事件的信息,每个事件都会在tracefs文件系统提供一些配置接口。
在这里插入图片描述

  • enable:启用/禁用对事件的追踪;
  • filter:配置事件过滤;
  • format:描述了事件的格式;
  • id:事件ID;
  • trigger:配置Event Trigger。

Event format

每个跟踪事件都关联了一个format文件,文件中包含了跟踪事件记录中每个字段的描述,这些信息可用于解析二进制跟踪流,也可以用于Event Filter中的查询字段。
在这里插入图片描述
完整的format信息通常包括以下几个部分:

  • 事件名称;
  • 事件ID;
  • 公共字段:以common_开头,记录了跟踪事件通用的信息;
  • 特定于事件的字段;
  • 打印事件的格式字符串。

Event Filtering

Event Filtering(事件过滤)可以使用过滤规则对关联的跟踪事件进行过滤。当跟踪事件记录到跟踪缓冲区时,内核会根据与该事件关联的过滤器对字段进行检查,字段值与过滤器匹配的事件会打印到跟踪输出中;不匹配的事件则会被丢弃。默认情况下,Event Filtering没有配置,跟踪事件发生后都会打印出来。

过滤规则

过滤规则的格式如下:

field-name relational-operator value

其中:

  • field-name:支持过滤的字段,可以通过查询format文件获取;
  • relational-operator:对于数字类型字段,支持的操作符包括==, !=, <, <=, >, >=, &;而对于字符串类型字段,支持==, !=, ~,其中~支持通配符(*,?)和字符类([)。
设置过滤器

跟踪事件提供了filter文件节点,用于配置过滤规则。简单的示例如下:
在这里插入图片描述

Event Trigger

跟踪事件可以配置Event Trigger(事件触发器)功能,使得在跟踪事件发生可以触发特定的操作。通过向给定事件trigger文件写入触发器规则可以添加触发器到特定事件中或从中删除触发器。

Trigger语法

Event Trigger使用trigger文件节点进行配置。添加trigger的格式如下:

echo 'command[:count] [if filter]' > trigger

删除trigger的格式如下:

echo '!command[:count] [if filter]' > trigger

Trace marker

Trace marker是一种可以跟踪应用程序的手段,它本质上是tracefs文件系统提供的一个文件节点/sys/kernel/tracing/trace_marker,应用程序可以向trace_marker文件中写入字符串,ftrace会同步记录写入执行该动作时的时间戳。通过与ftrace的其它手段配合,trace_marker可以观察应用程序在不同跟踪标记之间运行的内核事件。

相关参考

  • Event Tracing

这篇关于浅析Linux追踪技术之ftrace:Event Tracing的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用