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

Linux Ftrace介绍

文章目录

  • 一、简介
  • 二、内核函数调用跟踪
    • 参考链接:

一、简介

Ftrace 是 Linux 官方提供的跟踪工具,在 Linux 2.6.27 版本中引入。Ftrace 可在不引入任何前端工具的情况下使用,让其可以适合在任何系统环境中使用。
Ftrace 可用来快速排查以下相关问题:

  • 特定内核函数调用的频次 (function)
  • 内核函数在被调用的过程中流程(调用栈) (function + stack)
  • 内核函数调用的子函数流程(子调用栈)(function graph)
  • 由于抢占导致的高延时路径等

Ftrace 跟踪工具由性能分析器(profiler)和跟踪器(tracer)两部分组成:

  • 性能分析器,用来提供统计和直方图数据(需要 CONFIG_ FUNCTION_PROFILER=y)
    • 函数性能分析
    • 直方图
  • 跟踪器,提供跟踪事件的详情:
    • 函数跟踪(function)
    • 跟踪点(tracepoint)
    • kprobe
    • uprobe
    • 函数调用关系(function_graph)
    • hwlat 等

除了操作原始的文件接口外,也有一些基于 Ftrace 的前端工具,比如 perf-tools 和 trace-cmd (界面 KernelShark)等。整体跟踪及前端工具架构图如下:
在这里插入图片描述
Ftrace 的使用的接口为 tracefs 文件系统,需要保证该文件系统进行加载:

$ sysctl -q kernel.ftrace_enabled=1
$ mount -t tracefs tracefs /sys/kernel/tracing$ mount -t debugfs,tracefs
tracefs on /sys/kernel/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,nosuid,nodev,noexec,relatime)
tracefs on /sys/kernel/debug/tracing type tracefs (rw,nosuid,nodev,noexec,relatime)$ ls -F /sys/kernel/debug/tracing  # 完整目录如下图

在这里插入图片描述
tracing 目录下核心文件介绍如下表格,当前可仅关注黑体加粗的项,其他项可在需要的时候再进行回顾:

文件描述
available_tracers可用跟踪器,hwlat blk function_graph wakeup_dl wakeup_rt wakeup function nop,nop 表示不使用跟踪器
current_tracer当前使用的跟踪器
function_profile_enabled启用函数性能分析器
available_filter_functions可跟踪的完整函数列表
set_ftrace_filter选择跟踪函数的列表,支持批量设置,例如 tcp、tcptcp
set_ftrace_notrace设置不跟踪的函数列表
set_event_pid设置跟踪的 PID,表示仅跟踪 PID 程序的函数或者其他跟踪
tracing_on是否启用跟踪,1 启用跟踪 0 关闭跟踪
trace_options设置跟踪的选项
trace_stat(目录)函数性能分析的输出目录
kprobe_events启用 kprobe 的配置
uprobe_events启用 uprobe 的配置
events ( 目录 )事件(Event)跟踪器的控制文件: tracepoint、kprobe、uprobe
trace跟踪的输出 (Ring Buffer)
trace_pipe跟踪的输出;提供持续不断的数据流,适用于程序进行读取

perf_tools 包含了一个复位所有 ftrace 选型的工具脚本,在跟踪不符合预期的情况下,建议先使用 reset-ftrace 进行复位,然后再进行测试。

二、内核函数调用跟踪

基于 Ftrace 的内核函数调用跟踪整体架构如下所示:
在这里插入图片描述
这里我们尝试对于内核中的系统调用函数 __arm64_sys_openat 进行跟踪(前面两个下划线),需要注意的是 __arm64_sys_openat 是在 arm64 结构体系下 sys_openat 系统调用的包装,如果在 x86_64 架构下则为 __x64_sys_openat() ,由于我们本地的电脑是 M1 芯片,所以演示的样例以 arm64 为主。

在不同的体系结构下,可以在 /proc/kallsym 文件中搜索确认。

后续的目录,如无特殊说明,都默认位于 /sys/kernel/debug/tracing/ 根目录。

# 使用 function 跟踪器,并将其设置到 current_tracer
$ sudo echo function > current_tracer# 将跟踪函数 __arm64_sys_openat 设置到 set_ftrace_filter 文件中
$ sudo echo __arm64_sys_openat > set_ftrace_filter# 开启全局的跟踪使能
$ sudo echo 1 > tracing_on# 运行 ls 命令触发 sys_openat 系统调用,新的内核版本中直接调用 sys_openat
$ ls -hl # 关闭
$ sudo echo 0 > tracing_on
$ sudo echo nop > current_tracer# 需要主要这里的 echo 后面有一个空格,即 “echo+ 空格>" 
$ sudo echo  > set_ftrace_filter # 通过 cat trace 文件进行查看
$ sudo cat trace
# tracer: function
#
# entries-in-buffer/entries-written: 224/224   #P:4
#
#                                _-----=> irqs-off
#                               / _----=> need-resched
#                              | / _---=> hardirq/softirq
#                              || / _--=> preempt-depth
#                              ||| /     delay
#           TASK-PID     CPU#  ||||   TIMESTAMP  FUNCTION
#              | |         |   ||||      |         |sudo-15099   [002] .... 29469.444400: __arm64_sys_openat <-invoke_syscallsudo-15099   [002] .... 29469.444594: __arm64_sys_openat <-invoke_syscall

我们可以看到上述的结果表明了函数调用的任务名称、PID、CPU、标记位、时间戳及函数名字。

在 perf_tools 工具集中的前端封装工具为 functrace ,需要注意的是该工具默认不会设置 tracing_on 为 1, 需要在启动前进行设置,即 ”echo 1 > tracing_on“。

perf_tools 工具集中 kprobe 也可以实现类似的效果,底层基于 kprobe 机制实现,ftrace 机制中的 kprobe 在后续章节会详细介绍。

参考链接:

  1. 问题排查利器:Linux 原生跟踪工具 Ftrace 必知必会
  2. perf-tools使用方法

相关文章:

Linux Ftrace介绍

文章目录 一、简介二、内核函数调用跟踪参考链接&#xff1a; 一、简介 Ftrace 是 Linux 官方提供的跟踪工具&#xff0c;在 Linux 2.6.27 版本中引入。Ftrace 可在不引入任何前端工具的情况下使用&#xff0c;让其可以适合在任何系统环境中使用。 Ftrace 可用来快速排查以下相…...

Go语言进阶------>init()函数

Init()包初始化 执行优先级 Init()函数的执行优先级比main()函数的执行优先级要高,也就是说程序会优先执行Init()函数之后再执行main()函数. 代码如下 package mainimport "fmt"func init() {fmt.Println("执行了Init()函数") }func main() {fmt.Println…...

云计算:常用微服务框架

目录 一、理论 1.Java微服务框架 2.Go微服务框架 3.Python微服务框架 4.Node.js微服务框架 5..Net微服务框架 一、理论 1.Java微服务框架 Spring Cloud&#xff1a;最早最成熟&#xff0c;Java开源微服务框架方案 SpringBoot&#xff1a;全新框架&#xff0c;设计目的是…...

jmeter添加断言(详细图解)

先创建一个线程组&#xff0c;再创建一个http请求。 为了方便观察&#xff0c;我们添加两个监听器&#xff0c;察看结果树和断言结果。 添加断言&#xff1a;响应断言&#xff0c;响应断言也是比较常用的一个断言 设置响应断言&#xff1a;正常情况下响应代码是200。选择响应代…...

few shot object detection via feature reweight笔记

摘要部分 few shot很多用的都是faster R-CNN为基础&#xff0c;本文用的是one-stage 结构。 用了一个meta feature learner和reweighting模块。 和其他的few shot一样&#xff0c;先学习base数据集&#xff0c;再推广到novel数据集。 feature learner会从base数据集中提取meta…...

工会排队模式:电商新营销模式吸引消费者,提升销售!

随着电商行业的繁荣发展&#xff0c;私域流量已经成为了电商平台争夺消费者和促进销售的重要手段。工会排队模式正是在这种背景下应运而生的一种创新性的电商营销模式。这种模式通过奖金池的资金来为消费者和商家提供返现和排队奖励&#xff0c;构建了一个实现消费者和商家共赢…...

定档通知2024中国(北京)国际红外技术及设备展览会

时间&#xff1a;2024年7月14-16日 地点&#xff1a;北京国家会议中心 ◆展会背景background&#xff1a; 各有关红外企业厂商&#xff1a;2024年7月14&#xff5e;16日&#xff0c;2024中国国际红外技术及设…...

自助建站系统,一建建站系统api版,自动建站

安装推荐php7.2或7.2以下都行 可使用虚拟主机或者服务器进行搭建。 分站进入网站后台 域名/admin 初始账号123456qq.com密码123456 找到后台的网站设置 将主站域名及你在主站的通信secretId和通信secretKey填进去。 即可正常使用 通信secretId和通信secretKey在主站的【账号…...

算法框架-LLM-1-Prompt设计(一)

原文&#xff1a;算法框架-LLM-1-Prompt设计&#xff08;一&#xff09; - 知乎 目录 收起 1 prompt-engineering-for-developers 1.1 Prompt Engineering 1.1.1 提示原则 1. openai的环境 2. 两个基本原则 3. 示例 eg.1 eg.2 结构化输出 eg.3 模型检验 eg.4 提供示…...

一个rar压缩包如何分成三个?

一个rar压缩包体积太大了&#xff0c;想要将压缩包分为三个&#xff0c;该如何做到&#xff1f;其实很简单&#xff0c;方法就在我们经常使用的WinRAR当中。 我们先将压缩包内的文件解压出来&#xff0c;然后查看一下&#xff0c;然后打开WinRAR软件&#xff0c;找到文件&…...

批量获取拼多多商品详情数据,拼多多商品详情API接口

批量获取拼多多商品详情数据可以采用以下方式&#xff1a; 使用拼多多开放平台API接口。 拼多多开放平台提供了API接口&#xff0c;可以通过API接口获取拼多多平台上的商品信息&#xff0c;使用API接口需要进行权限申请和认证&#xff0c;操作较为复杂。 使用第三方工具。 市面…...

Redis Cluster Gossip Protocol: 目录

术语说明 server&#xff1a;当前的节点 cluster&#xff1a;每个节点的内存中都有一个集群信息结构&#xff0c;里面包含了集群中各个节点的状态信息&#xff08;包括server自己&#xff09; myself&#xff1a;当前节点在cluster中的实体 node&#xff1a;cluster节点字典中…...

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Span

作为Text组件的子组件&#xff0c;用于显示行内文本的组件。无子组件 一、接口 Span(value: string | Resource) 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 参数&#xff1a; 参数名 参数类型 必填 参数描述 value string | Resource 是 文本内…...

这些负载均衡都解决哪些问题?服务、网关、NGINX

这篇文章解答一下群友的一系列提问&#xff1a; 在微服务项目中&#xff0c;有服务的负载均衡、网关的负载均衡、Nginx的负载均衡&#xff0c;这几个负载均衡分别用来解决什么问题呢&#xff1f; 在微服务项目中&#xff0c;服务的负载均衡、网关的负载均衡和Nginx的负载均衡都…...

Lambda表达式在C++中的定义

目录 背景介绍&#xff1a; Lambda表达式的定义&#xff1a; Lambda结构介绍&#xff1a; 1. Lambda capture 2. Lambda parameter list 3. Lambda mutable 4. Lambda return type 5. Lambda 主体 Lambda 表达式小结&#xff1a; Lambda 引用参考&#xff1a; 背景介…...

sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第二周测验

课程1_第2周_测验题 目录&#xff1a;目录 第一题 1.神经元计算什么&#xff1f; A. 【  】神经元计算激活函数后&#xff0c;再计算线性函数&#xff08;zWxb&#xff09; B. 【  】神经元计算一个线性函数&#xff08;zWxb&#xff09;&#xff0c;然后接一个激活函数…...

前端代码格式化规范总结

在日常开发过程中&#xff0c;经常会碰到代码格式化不一致的问题&#xff0c;还要就是 js 代码语法错误等没有及时发行改正&#xff0c;下面就介绍一下如何使用eslint、prettier、husky、lint-staged、commitizen来规范代码格式和提高代码质量的方法。 目录 准备工作代码检测代…...

Windows10打开应用总是会弹出提示窗口的解决方法

用户们在Windows10电脑中打开应用程序&#xff0c;遇到了总是会弹出提示窗口的烦人问题。这样的情况会干扰到用户的正常操作&#xff0c;给用户带来不好的操作体验&#xff0c;接下来小编给大家详细介绍关闭这个提示窗口的方法&#xff0c;让大家可以在Windows10电脑中舒心操作…...

易点易动固定资产管理系统: 帮助您应对2023年年终固定资产大盘点

作为一名企业的行政人员&#xff0c;我们都了解年终固定资产盘点对于企业来说至关重要。然而&#xff0c;面对众多资产、复杂的流程和繁琐的记录工作&#xff0c;往往会令人感到头疼不已。为了帮助您应对2023年的年终固定资产大盘点&#xff0c;我们推荐易点易动固定资产管理系…...

OpenGLES:绘制一个混色旋转的3D立方体

效果展示 混色旋转的3D立方体 一.概述 之前关于OpenGLES实战开发的博文&#xff0c;不论是实现相机滤镜还是绘制图形&#xff0c;都是在2D纬度 这篇博文开始&#xff0c;将会使用OpenGLES进入3D世界 本篇博文会实现一个颜色渐变、旋转的3D立方体 动态3D图形的绘制&#xf…...

Maven(4)-利用intellij idea创建maven 多模块项目

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具&#xff1a;intellij idea。 一、项目结构 multi-module-project是主工程&#xff0c;里面包含两个模块&#xff08;Module&#xff09;&#xff1a; web-app是应用层&#xff0c;用于界面展示&#xff…...

8年测试老鸟,性能测试-数据库连接池问题定位/分析,一篇打通...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、环境准备 1&a…...

【Sentinel】Sentinel原码分析

本文内容来自【黑马】Sentinel从使用到源码解读笔记&#xff0c;做了部分修改和补充 目录 Sentinel 基本概念 基本流程 Node Entry 定义资源的两种方式 使用try-catch定义资源 使用注解标记资源 基于注解标记资源的实现原理 Context 什么是Context Context的初始化 …...

计算机竞赛 题目:基于深度学习的人脸表情识别 - 卷积神经网络 竞赛项目 代码

文章目录 0 简介1 项目说明2 数据集介绍&#xff1a;3 思路分析及代码实现3.1 数据可视化3.2 数据分离3.3 数据可视化3.4 在pytorch下创建数据集3.4.1 创建data-label对照表3.4.2 重写Dataset类3.4.3 数据集的使用 4 网络模型搭建4.1 训练模型4.2 模型的保存与加载 5 相关源码6…...

基于aarch64分析kernel源码 五:idle进程(0号进程)

一、参考 linux — 0号进程&#xff0c;1号进程&#xff0c;2号进程 - 流水灯 - 博客园 (cnblogs.com) Linux0号进程&#xff0c;1号进程&#xff0c;2号进程_0号进程和1号进程-CSDN博客 二、idle进程的创建流程 start_kernel --> arch_call_rest_init --> rest_init…...

【Linux】 vi / vim 使用

天天用vim 或者vi 。看着大佬用的很6 。我们却用的很少。今天咱们一起系统学习一下。 vi / vim 发展史 vi 是一款由加州大学伯克利分校&#xff0c;Bill Joy研究开发的文本编辑器。 vim Vim是一个类似于Vi的高度可定制的文本编辑器&#xff0c;在Vi的基础上改进和增加了很多…...

Leetcode hot 100之双指针(快慢指针、滑动窗口)

目录 数组 有序的平方仍有序 删除/覆盖元素 移动零&#xff1a;交换slow和fast 滑动窗口&#xff1a;最短的连续子串&#xff08;r可行解->l--最短解&#xff09; 最小长度的子数组 求和&#xff1a;sort、l i 1, r len - 1 三数之和abctarget 四数之和abcdtarg…...

Bridge Champ助力我国桥牌阔步亚运, Web3游戏为传统项目注入创新活力

本届杭州亚运会,中国桥牌队表现杰出,共斩获1金1银1铜佳绩,其中女子团体夺得冠军,混合团体获得亚军。这充分展现了我国桥牌的实力,也彰显了桥牌作为亚运会体育竞技项目的影响力。与此同时,Web3游戏Bridge Champ为传统桥牌项目带来创新模式,将有望推动桥牌运动在亚运舞台上焕发新…...

云原生微服务 第六章 Spring Cloud中使用OpenFeign

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 文章目录 系列文章目录前言1、OpenFeign的实现…...

uniapp-vue3 抖音小程序开发(上线项目开源)

最近公司临时接一个项目来接手别人的流量&#xff0c;项目比较小&#xff0c;时间比较赶。 需求&#xff1a;一个答题小程序&#xff0c;通过答题来实现性格测算和分析。 之前开发过支付宝小程序和微信小程序&#xff0c;这次是首次开发抖音小程序&#xff0c;老板要求只能下…...