返回顶部
首页 > 资讯 > 操作系统 >Linux内核ftrace怎么使用
  • 886
分享到

Linux内核ftrace怎么使用

2023-06-15 19:06:36 886人浏览 安东尼
摘要

这篇文章主要讲解了“linux内核ftrace怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核ftrace怎么使用”吧!什么是 ftrace我们可以将ftrace理解为F

这篇文章主要讲解了“linux内核ftrace怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核ftrace怎么使用”吧!

什么是 ftrace

我们可以将ftrace理解为Function  tracer的简称,可以看出其基本功能是实现函数调用的跟踪。其实ftrace不仅仅用于进行函数调用的跟踪,其它很多内核信息都可以通过该工具进行跟踪。

除了上面函数调用跟踪外,ftrace  还能帮我们分析内核特定的事件,比如调度,中断等;它还能帮我们去追踪延迟,比如中断被屏蔽,抢占被禁止的时间,以及唤醒一个进程之后多久开始执行的时间等等。

因此可以理解,ftrace其实为我们提供了一个透视内核的工具,这就像医院的CT机或者核磁共振一样,通过该工具我们可以了解内核内部的更多细节。下面我们罗列出该工具的主要功能,大家可以作为参考:

(1) Function tracer 和 Function graph tracer:跟踪函数调用。

(2) Schedule switch tracer:跟踪进程调度情况。

(3) Preemptoff tracer:和前一个 tracer 类似,preemptoff tracer  跟踪并记录禁止内核抢占的函数,并清晰地显示出禁止抢占时间最长的内核函数。

(4) Preemptirqsoff tracer:同上,跟踪和记录禁止中断或者禁止抢占的内核函数,以及禁止时间最长的函数。

(5) Branch tracer:跟踪内核程序中的 likely/unlikely 分支预测命中率情况。 Branch tracer  能够记录这些分支语句有多少次预测成功。从而为优化程序提供线索。

(6) Hardware branch tracer:利用处理器的分支跟踪能力,实现硬件级别的指令跳转记录。在 x86 上,主要利用了 BTS 这个特性。

(7) Sysprof tracer:缺省情况下,sysprof tracer 每隔 1 msec 对内核进行一次采样,记录函数调用和堆栈信息。

(8) Kernel memory tracer:内存 tracer 主要用来跟踪 slab allocator 的分配情况。包括  kfree,kmem_cache_alloc 等 api 的调用情况,用户程序可以根据 tracer  收集到的信息分析内部碎片情况,找出内存分配最频繁的代码片断,等等。

(9) Initcall tracer:记录系统在 boot 阶段所调用的 init call 。

(10) Mmiotrace tracer:记录 memory map IO 的相关信息。

(11) Power tracer:记录系统电源管理相关的信息。

(12) Workqueue statistical tracer:这是一个 statistic tracer,统计系统中所有的 workqueue  的工作情况,比如有多少个 work 被插入 workqueue,多少个已经被执行等。开发人员可以以此来决定具体的 workqueue 实现,比如是使用  single threaded workqueue 还是 per cpu workqueue.

(13) Event tracer:跟踪系统事件,比如 timer,系统调用,中断等。

(14) Wakeup tracer:跟踪进程的调度延迟,即高优先级进程从进入 ready 状态到获得 CPU 的延迟时间。该 tracer  只针对实时进程。

(15) Irqsoff tracer:当中断被禁止时,系统无法相应外部事件,比如键盘和鼠标,时钟也无法产生 tick 中断。这意味着系统响应延迟,irqsoff  这个 tracer 能够跟踪并记录内核中哪些函数禁止了中断,对于其中中断禁止时间最长的,irqsoff 将在 log  文件的第一行标示出来,从而使开发人员可以迅速定位造成响应延迟的罪魁祸首。

ftrace的基本用法

ftrace的基本用法其实是比较简单的。以ubuntu18.04为例,我们只需要在current_tracer文件中输入function字符串即可。具体操作步骤如下:

cd /sys/kernel/debug/tracing echo function > current_tracer

当执行上述命令后,我们用vim命令打开该目录下面一个名为trace的文件,此时就可以函数调用情况。

Linux内核ftrace怎么使用

如果查看该文件,可能会发现有几万个函数调用,估计看着就头大。其实它的功能要强大的多,比如我们通过function_graph实现调用栈的层级关系,此时可以更加方便的理清函数调用关系。同时,我们还可实现函数名称的过滤,比如只抓取某些,或者不抓取某些函数等等。

Linux内核ftrace怎么使用

有些版本的操作系统可能不能直接使用该功能,这就需要进行一些配置。关于这些配置,本文暂不介绍,后续专门进行相关介绍。

ftrace的实现原理概述

ftrace最早用于跟踪函数调用,后来随着需求的增加,ftrace演变为一个框架。也就是我们前面介绍的对内核各种探测的功能。

整个ftrace的架构如图所示,其整体分为两层,核心部分是内核框架和一些捕获信息的插件,其中函数调用就是其中一个插件;另外一部分则是用户态的一些辅助工具集。

可以看出,在内核中核心的是ftrace框架,具体功能组件是各种插件,也就是tracers。如果需要跟踪具体的内容,则该tracer需要注册到框架当中。tracer捕获的信息会输出到一个环形缓冲区中。整个框架中需要用到另外一个内核模块,也就是debugfs模块。该模块实现了用户态与内核的交互。

Linux内核ftrace怎么使用

内核态的代码在kernel/trace目录下面,该下面是ftrace框架和各个tracer的代码。如下图所示,可以看出tracer还是比较多的。

Linux内核ftrace怎么使用

整个ftrace的代码量也并不是特别多,大概有4万多行的样子。所以,目前ftrace确实是一个非常强大的内核状态监测工具。

感谢各位的阅读,以上就是“Linux内核ftrace怎么使用”的内容了,经过本文的学习后,相信大家对Linux内核ftrace怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Linux内核ftrace怎么使用

本文链接: https://lsjlt.com/news/281352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Linux内核ftrace怎么使用
    这篇文章主要讲解了“Linux内核ftrace怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核ftrace怎么使用”吧!什么是 ftrace我们可以将ftrace理解为F...
    99+
    2023-06-15
  • linux内核sleep函数怎么使用
    在Linux内核中,没有类似于用户空间中的`sleep()`函数。但是,内核提供了一些用于延迟执行的函数和机制,可以实现类似`sle...
    99+
    2023-09-29
    linux
  • 在Linux内核使用Kasan
    Kasan (Kernel Address Sanitizer) 是一种内核级的内存错误检测工具,在Linux内核中可以使用它来检测...
    99+
    2023-09-22
    Linux
  • Linux内核中watchdog怎么用
    这篇文章主要介绍了Linux内核中watchdog怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在Linux内核中有三个watchdog(看门狗),它们都需要被悉心的喂...
    99+
    2023-06-28
  • linux内核sleep函数怎么用
    在Linux内核中,有两个主要的睡眠函数:`msleep()`和`usleep()`。1. `msleep()`函数:用于让内核的当...
    99+
    2023-10-12
    linux
  • linux内核EXPORT_SYMBOL函数怎么用
    在Linux内核中,EXPORT_SYMBOL函数用于将一个符号(函数、变量、静态函数)导出为模块可以使用的全局符号。导出的符号可以...
    99+
    2023-10-18
    linux
  • 怎么编译Linux内核
    这篇文章主要为大家展示了“怎么编译Linux内核”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“怎么编译Linux内核”这篇文章吧。下载内核我们要做的***件事是下载内核源码。在 Kernel.o...
    99+
    2023-06-16
  • linux内核是怎么写
    这篇文章主要介绍“linux内核是怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux内核是怎么写”文章能帮助大家解决问题。linux内核是用C语言和汇编语言编写的。linux内核大部分是...
    99+
    2023-06-29
  • Linux内核怎么优化
    本篇内容主要讲解“Linux内核怎么优化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Linux内核怎么优化”吧!分析:大多数MySQL都部署在linux系统上,所以操作系统的一些参数也会影响到...
    99+
    2023-06-28
  • Linux内核怎么升级
    这篇文章主要介绍“Linux内核怎么升级”,在日常操作中,相信很多人在Linux内核怎么升级问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux内核怎么升级”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-28
  • linux内核怎么移植
    本篇内容主要讲解“linux内核怎么移植”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux内核怎么移植”吧! 在linux中,...
    99+
    2023-02-23
    linux
  • linux怎么在2.6内核中编译内核模块
    这篇文章主要介绍linux怎么在2.6内核中编译内核模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!编译内核模块的方法与编译一般应用程序的方法略有不同. 我们会发现在内核源码树的层层目录中, 都存在有Makefil...
    99+
    2023-06-16
  • Linux内核是怎么样的
    这篇文章将为大家详细讲解有关Linux内核是怎么样的,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux 内核,这个经常听见,却不不知道它具体是干嘛的东西,是不是觉得非常神秘Linux 内核看不见摸不...
    99+
    2023-06-16
  • Linux内核Bug怎么解决
    本篇内容介绍了“Linux内核Bug怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一个bug,  有人升级内核到V5.10...
    99+
    2023-06-15
  • Linux内核版本怎么看
    这篇文章主要介绍“Linux内核版本怎么看”,在日常操作中,相信很多人在Linux内核版本怎么看问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux内核版本怎么看”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • Linux怎么卸载旧内核
    这篇“Linux怎么卸载旧内核”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Linux怎么卸载旧内核”文章吧。  首先可查看...
    99+
    2023-06-28
  • ubuntu怎么替换linux内核
    本篇内容介绍了“ubuntu怎么替换linux内核”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!打开终端命令行通过以下命令进行替换。查看系统...
    99+
    2023-07-04
  • linux怎么调用系统内核函数
    在Linux中,可以通过系统调用来调用系统内核函数。系统调用是用户程序和内核之间的接口,用于请求内核执行特定操作。 在C语言中,可以...
    99+
    2023-10-24
    linux
  • Ubuntu怎么删除无用的Linux内核
    这篇文章主要介绍“Ubuntu怎么删除无用的Linux内核”,在日常操作中,相信很多人在Ubuntu怎么删除无用的Linux内核问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2023-05-25
    ubuntu linux
  • 怎么解决Linux内核内存泄漏
    这篇文章主要讲解了“怎么解决Linux内核内存泄漏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Linux内核内存泄漏”吧!什么是内存泄漏:程序向系统申请内存,使用完不需要之后,不释...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作