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

【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】

文章目录

    • ftrace 介绍
    • trace-cmd 介绍
    • trace-cmd 常用跟踪事件
    • ftrace 与 trace-cmd 关系
    • ftrace 编译依赖

ftrace 介绍

ftrace 是 Linux 内核中的一个跟踪工具,主要用于帮助开发者分析和调试内核的行为。ftrace 的名字来源于 “function tracer”,它最初是用于跟踪内核函数调用的,但现在已经发展成一个功能强大的通用跟踪框架,可以跟踪函数调用、调度事件、中断、定时器、内存映射等各种内核事件。

下面是一些使用 ftrace 的基本示例:

查看当前可用的跟踪器:

$ cat /sys/kernel/debug/tracing/available_tracers

启用 function_graph 跟踪器(用于跟踪函数调用图):

$ echo function_graph > /sys/kernel/debug/tracing/current_tracer

查看跟踪结果:

$ cat /sys/kernel/debug/tracing/trace

关闭当前跟踪器:

$ echo nop > /sys/kernel/debug/tracing/current_tracer

注意:使用 ftrace 需要相应的权限,通常需要 root 权限。

trace-cmd 介绍

trace-cmd 是一个由 Steven Rostedt 维护的用于控制和使用 Ftrace 的工具,它是 Linux 中包含的一个低开销的内核跟踪系统。

使用 trace-cmd,你可以启动和停止内核跟踪,保存和读取跟踪结果,以及列出可用的跟踪选项。

以下是一些基本的 trace-cmd 使用示例:

开始跟踪:

$ trace-cmd start -e sched_switch

这条命令开始跟踪调度器切换事件(sched_switch)。

停止跟踪并保存结果:

$ trace-cmd stop 
$ trace-cmd extract -o my_trace.dat

首先停止跟踪,然后将跟踪结果保存到文件 my_trace.dat 中。

读取跟踪结果:

$ trace-cmd report my_trace.dat

这条命令将读取并打印出跟踪文件 my_trace.dat 中的内容。

以上就是一些基本的 trace-cmd 使用方法。trace-cmd 还有很多其他的功能和选项,你可以通过阅读 trace-cmd 的 man 手册或者 trace-cmd --help 来学习更多。

trace-cmd 常用跟踪事件

下面列出了一些常用的跟踪事件:

sched_switch:这个事件记录了进程切换的信息,包括旧进程的 PID、新进程的 PID、以及他们的优先级等;

block_rq_issue/block_rq_complete:这些事件记录了块设备请求的发出和完成;

irq_handler_entry/irq_handler_exit:这些事件记录了中断处理程序的入口和退出;

softirq_entry/softirq_exit/softirq_raise:这些事件记录了软中断的情况;


以下是如何使用 trace-cmd 跟踪这些事件的示例:

跟踪调度器切换事件

$ trace-cmd record -e sched:sched_switch

该命令将开始记录 sched_switch 事件。你可以在此后执行你需要跟踪的操作。然后,使用 trace-cmd report 命令查看记录的事件。

跟踪块设备请求

$ trace-cmd record -e block:block_rq_issue -e block:block_rq_complete

这个命令将记录块设备请求的发出和完成事件。同样,你可以使用 trace-cmd report 命令查看记录的事件。

跟踪中断处理

$ trace-cmd record -e irq:irq_handler_entry -e irq:irq_handler_exit

这个命令将记录中断处理程序的入口和退出事件。使用 trace-cmd report 命令来查看记录的事件。

跟踪软中断

$ trace-cmd record -e softirq:softirq_entry -e softirq:softirq_exit -e softirq:softirq_raise

这个命令将记录软中断的入口、退出和触发事件。查看记录的事件可以使用 trace-cmd report 命令。

ftrace 与 trace-cmd 关系

ftrace 和 trace-cmd 都是 Linux 内核提供的跟踪工具,但是使用方式和便利程度有所不同。

ftrace 是内核中的一个特性,它提供了一个文件系统接口(位于 /sys/kernel/debug/tracing/),可以通过读写这些文件来控制跟踪和查看跟踪结果。虽然 ftrace 功能强大,但是直接使用还是有些复杂,需要对内核的跟踪机制有一定了解。

trace-cmd 则是一个命令行工具,它对 ftrace 的接口进行了封装,提供了一种更简单易用的方式来使用 ftrace。使用 trace-cmd,你可以更方便地启动和停止跟踪、保存和读取跟踪结果,以及查看可用的跟踪选项。

总的来说,trace-cmd 提供了一种更用户友好的方式来使用 ftrace。如果你想要使用 ftrace,但又不想直接处理底层的文件系统接口,那么 trace-cmd 是一个很好的选择。

ftrace 编译依赖

启用和使用 ftrace 功能,需要在编译 Linux 内核时,开启对应的选项。

具体来说,你需要在内核配置(.config 文件)中开启以下选项:

  • CONFIG_FTRACE:这是 ftrace 的基本选项,必须开启;
  • CONFIG_FUNCTION_TRACER:这个选项用于启用函数跟踪器,也就是原始的 ftrace 功能。如果你想要跟踪内核函数的执行,需要开启这个选项;
  • CONFIG_FUNCTION_GRAPH_TRACER:这个选项用于启用函数图跟踪器,这个跟踪器可以在函数级别跟踪内核的执行流程,包括函数的调用和返回;
  • CONFIG_DYNAMIC_FTRACE:这个选项用于启用动态函数跟踪,这个功能可以在运行时动态地开启或关闭特定函数的跟踪;
    其他 CONFIG_*_EVENTS 选项:这些选项用于启用特定类型的事件跟踪,比如调度事件、中断事件、内存映射事件等。

在配置好这些选项后,你需要重新编译和安装内核。安装新内核后重启系统,ftrace 功能应该就可以使用了。

相关文章:

【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】

文章目录 ftrace 介绍trace-cmd 介绍trace-cmd 常用跟踪事件ftrace 与 trace-cmd 关系ftrace 编译依赖 ftrace 介绍 ftrace 是 Linux 内核中的一个跟踪工具,主要用于帮助开发者分析和调试内核的行为。ftrace 的名字来源于 “function tracer”,它最初是…...

MyBatis的一级缓存和二级缓存是怎么样的?

目录 1. 一级缓存 2. 一级缓存失效的几种情况 3. 二级缓存 4.二级缓存失效的情况 5. 二级缓存的相关配置 6. 缓存的查询顺序 MyBatis 的缓存共分为一级缓存和二级缓存。 1. 一级缓存 一级缓存是 SqlSession 级别的,通过同一个 SqlSession 查询到的数据会被缓…...

下载的文件被Windows 11 安全中心自动删除

今天从CSDN上下载了自己曾经上传的文件,但是浏览器下载完之后文件被Windows安全中心自动删除,说是带病毒。实际是没有病毒的,再说了即便有病毒也不应该直接删除啊,至少给用户一个保留或删除的选项。 研究了一番,可以暂…...

【Java List与数组】List<T>数组和数组List<T>的区别(124)

List数组:存储List的数组,即:数组中的元素是:List; 数组List:存储数组的List,即:List中的数据是类型的数组; 测试案例: import java.util.ArrayList; impor…...

Nuxt 菜鸟入门学习笔记四:静态资源

文章目录 public 目录assets 目录全局样式导入 Nuxt 官网地址: https://nuxt.com/ Nuxt 使用以下两个目录来处理 CSS、fonts 和图片等静态资源: public 目录 public 目录用作静态资产的公共服务器,可通过应用程序定义的 URL 公开获取。 换…...

C语言 - 结构体、结构体数组、结构体指针和结构体嵌套

结构体的意义 问题:学籍管理需要每个学生的下列数据:学号、姓名、性别、年龄、分数,请用 C 语言程序存储并处理一组学生的学籍。 单个学生学籍的数据结构: 学号(num): int 型姓名(…...

python安装playwright问题记录

python安装playwright这个时候,有得时候会https timeout 有的时候会 not found。 我最后使用的方法三,挺好用的。 PyPI The Python Package Index 可以尝试使用的方法 1. 更换pip源:使用国内的pip源可以提高下载速度并减少超时问题。例如&#xff0c…...

关于gRPC微服务利弊之谈

gRPC微服务架构包括以下几个主要组件: 服务定义:定义服务的接口和消息格式,使用Protocol Buffers或其他的消息格式进行描述。服务实现:实现定义的服务接口和消息处理逻辑。服务器端实现:在服务器端,需要实…...

【Terraform学习】使用 Terraform创建Lambda函数启动EC2(Terraform-AWS最佳实战学习)

本站以分享各种运维经验和运维所需要的技能为主 《python》:python零基础入门学习 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8》暂未更新 《docker学习》暂未更新 《ceph学习》ceph日常问题解…...

Mac软件删除方法?如何删除不会有残留

Mac电脑如果有太多无用的应用程序,很有可能会拖垮Mac系统的运行速度。因此,卸载电脑中无用的软件是优化Mac系统运行速度的最佳方式之一。Mac卸载应用程序的方式是和Windows有很大的区别,特别对于Mac新用户来说,如何无残留的卸载删…...

编程之道:【性能优化】提高软件效率的实际建议和避免常见陷阱

在今天的数字化世界中,软件性能是应用程序成功的关键之一。无论是网页加载速度、移动应用的响应时间还是后端服务器的处理速度,性能都直接影响着用户满意度。在追求高性能时,开发人员需要采取一系列实际建议,同时避免常见的陷阱。…...

VGG的结构:视觉几何组(Visual Geometry Group)

目录 1. VGG 的结构 2. VGG 的网络细节 3. VGG 的代码实现 1. VGG 的结构 牛津大学的视觉几何组(Visual Geometry Group)设计了 VGGNet(也称为 VGG),一种经典的卷积神经网络 (CNN) 架构。在 2014 年 ILSVRC 分类任务中,VGG 取…...

VBA:按照Excel工作表中的名称列自动汇总多个工作薄中对应sheet中所需要的数据

需求如下: B列为产品名为合并单元格,C列为供应商名,G、H列为金额数据;数据源放在同一个文件夹内,B列产品名来源于工作薄名称中间的字符串,C列供应商名来源于工作薄中的sheet名;G、H列金额数据来…...

Mybatis1.9 批量删除

1.9 批量删除 1.9.1 编写接口方法1.9.2 编写SQL语句1.9.3 编写测试方法 如上图所示,用户可以选择多条数据,然后点击上面的 删除 按钮,就会删除数据库中对应的多行数据。 1.9.1 编写接口方法 在 BrandMapper 接口中定义删除多行数据的方法。…...

CUDA小白 - NPP(2) -图像处理-算数和逻辑操作(2)

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化,具体的可以参考别的博主的介绍,都比较详细。还有一些cuda中的专有名词的含义,可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…...

python+redis实现布隆过滤器(含redis5.0版本以上和5.0以下版本的两份代码)

布隆过滤器是一种空间效率极高的概率数据结构,用于测试一个元素是否是集合的成员。如果布隆过滤器返回 False,则元素绝对不在集合中。如果返回 True,则元素可能在集合中,但也可能是一个误报。布隆过滤器利用了多个不同的哈希函数对…...

SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)

SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29) 文章目录 SpringBoot Thymeleaf iText7 生成 PDF(2023/08/29)1. 前言2. 技术思路3. 实现过程4. 测试 1. 前言 近期在项目种遇到了实时生成复杂 PDF 的需求,经过一番…...

【核磁共振成像】并行采集MRI

目录 一、并行成像二、SENSE重建三、SMASH重建四、灵敏度校准五、AUTO-SMASH和VD-AUTO-SMASH六、GRAPPA重建七、SPACE RIP重建算法八、PILS重建算法九、PRUNO重建算法十、UNFOLD算法 一、并行成像 并行MR成像(pMRI):相位阵列接受线圈不但各有自己专用的接受通道,而且…...

深度图相关评测网站

文章目录 1 单目/Stereo相关测评网站介绍12 单目/Stereo相关测评网站介绍23 单目/Stereo相关测评网站介绍3 1 单目/Stereo相关测评网站介绍1 https://vision.middlebury.edu/stereo/eval3/ 2 单目/Stereo相关测评网站介绍2 http://www.cvlibs.net/datasets/kitti/eval_stereo…...

本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama

本地部署 CodeLlama 并在 VSCode 中使用 CodeLlama 1. CodeLlama 是什么2. CodeLlama Github 地址3. 下载 CodeLlama 模型4. 部署 CodeLlama5. 在 VSCode 中使用 CodeLlama6. 使用WSGI启动服务7. 创建 start.sh 启动脚本 1. CodeLlama 是什么 Code Llama 是一个基于 Llama 2 的…...

什么是JVM——餐厅类比

目录 一、核心前提 二、JVM 整体定位(餐厅类比总纲) 三、JVM 核心模块拆解(餐厅类比 1:1 对应) 模块 1:类加载器子系统 → 餐厅 “收单 归档员” 核心动作: 关键补充(对应你的内存疑问&a…...

Realistic Vision V5.1 虚拟摄影棚:网络编程基础之构建简易图像生成API服务器

Realistic Vision V5.1 虚拟摄影棚:网络编程基础之构建简易图像生成API服务器 你是不是也遇到过这样的情况:本地跑通了Realistic Vision V5.1模型,生成效果很棒,但想分享给同事或者集成到自己的应用里,就得让对方也装…...

R语言孟德尔随机化环境搭建:手把手教你搞定gwasvcf、gwasglue等包的安装报错(附本地安装包)

R语言孟德尔随机化环境搭建:从报错到成功的全流程指南 第一次在R中安装孟德尔随机化相关工具包时,那种挫败感我至今记忆犹新。明明按照教程一步步操作,却不断遭遇各种报错——网络超时、依赖缺失、API限制...这些看似简单的问题足以让一个生物…...

PyCharm实战:从零到一完成YOLOv11自定义数据集训练

1. 环境准备与数据集配置 第一次用PyCharm跑YOLOv11训练时,我对着满屏的代码和配置文件差点放弃。后来发现只要环境装对了,后面都是顺水推舟。这里分享几个新手容易踩的坑:CUDA版本和PyTorch不匹配会导致显卡根本用不上,conda环境…...

OpenClaw 配置 scnet API 完整指南 - 被低估的国产大模型 API

OpenClaw 配置 scn# OpenClaw 配置 scnet API 完整指南 写在前面 如果你正在使用 OpenClaw,相信你已经对 AI Agent 有了深入的了解。但在模型选择上,很多人只知道 OpenAI、OpenRouter,却忽视了一个非常优秀的国产选择 —— scnet。 本文将…...

保姆级教程:在ROS2 Humble和Gazebo 11中配置FAST_LIO_ROS2进行三维SLAM仿真

从零搭建ROS2与Gazebo环境:FAST_LIO_ROS2三维SLAM实战指南 刚接触机器人仿真的开发者常被环境配置的复杂性劝退——依赖冲突、参数配置错误、话题不匹配等问题层出不穷。本文将手把手带您完成ROS2 Humble、Gazebo 11与FAST_LIO_ROS2的完整集成,实现一个可…...

AI 创作者指南:06.AI 视频创作:脚本、镜头语言与自动化

第 6 篇|AI 视频创作:脚本、镜头语言与自动化 视觉DNA刚建好,你是不是已经开始用AI画封面、插图玩得停不下来了?😊 来,第二部分最后一篇——第6篇|AI 视频创作:脚本、镜头语言与自动化。 以前拍视频得找团队、剪半天,现在AI帮你从脚本到成片一键流水线。节奏和叙事才…...

MobaXterm远程连接:管理Baichuan-M2-32B-GPTQ-Int4服务器

MobaXterm远程连接:管理Baichuan-M2-32B-GPTQ-Int4服务器 1. 为什么选择MobaXterm来管理大模型服务器 部署Baichuan-M2-32B-GPTQ-Int4这样的医疗增强推理模型,通常需要在Linux服务器上运行vLLM或SGLang等推理引擎。这类服务对系统资源要求高&#xff0…...

基于SpringBoot + Vue的新农村信息平台建设(角色:企业村民村委会管理员)

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...

深入解析OpenWrt无线初始化:mac80211.sh脚本核心功能与实战应用

1. 初识mac80211.sh:OpenWrt无线初始化的核心引擎 当你第一次刷入OpenWrt固件时,有没有好奇过路由器是如何自动创建无线网络的?这一切的秘密都藏在/lib/wifi/mac80211.sh这个脚本中。作为OpenWrt无线子系统的"大脑",这个…...