首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过 ftrace 来分析 Linux 内核

通过使用一个名为 ftrace 的机制来阐明追踪内核函数的一些情况。它使得任何 Linux 用户可以轻松地追踪内核,并且了解更多关于 Linux 内核内部如何工作。...我使用 Fedora 来演示下面的例子,但是它们应该在其他最新的 Linux 发行版上同样可以运行。 启用 ftrace ftrace 现在已经是内核中的一部分了,你不再需要事先安装它了。...也就是说,如果你在使用最近的 Linux 系统,那么 ftrace 是已经启用了的。为了验证 ftrace 是否可用,运行 mount 命令并查找 tracefs。...如果你直接运行 ftrace,不会运行任何特定的 ftrace 命令。相反的,基本操作是通过标准 Linux 命令来写入或读取一些文件。...$ sudo echo $PID > set_ftrace_pid

89830
您找到你想要的搜索结果了吗?
是的
没有找到

linux性能工具--ftrace使用

1 ftrace基础用法 ftrace 通过 debugfs 向用户态提供访问接口。...function 跟踪器可以跟踪内核函数的调用情况,可用于调试或者分析 bug ,还可用于了解和观察 Linux 内核的执行过程。...RT进程的最大延迟非常有意义,反应了调度器的性能 二,trace event 用法 2.1 trace event 简介 trace event 就是利用 ftrace 框架,实现低性能损耗,对执行流无影响的一种信息输出机制...github.com/rostedt/trace-cmd.git](https://github.com/rostedt/trace-cmd.git) export CROSS_COMPILE=aarch64-linux-gnu...,除了使用上一节的trace-cmd report命令,还可以使用kernelshark图形化的形式来查看,可以在板子上使用trace-cmd record 记录事件,把得到的trace.data放到linux

1.1K20

Linux内核跟踪:ftrace hook入门手册(上)

一、什么是ftrace ftrace(FunctionTracer)是Linux内核的一个跟踪框架,它从2008年10月9日发布的内核版本2.6.27开始并入Linux内核主线[1]。...… 图1:ftrace是一个功能强大的内核函数追踪框架[3] 使用ftrace需要目标Linux操作系统在编译时启用CONFIG_FUNCTION_TRACER内核配置选项(该选项默认启用)。...这个空白区可以在需要的时候被替换为对ftrace相关函数的调用,从而实现对特定内核函数的调用追踪,而不会过度影响其它内核函数的运行性能。 关于ftrace的详细内部机制,受限于篇幅,本文不详细介绍。...由于不同版本的Linux内核机制差异较大,笔者在多个不同版本的CentOS和Ubuntu环境中进行了测试。如果您在实践过程中遇到了其它环境适配的问题,不妨在评论区留言补充。...#define LIB_FTRACE_HOOK #include #include #include <linux/kprobes.h

2.3K40

Linux内核跟踪:ftrace hook入门手册(下)

一、前情提要 在前一篇文章《Linux内核跟踪:ftrace hook入门手册(上)》中,我们对部分ftrace hook经典方案中的实现细节进行了优化。本文会深入说明这些优化的原理和目的。...二、内核版本的差异 目前的ftrace hook实现中,总是需要使用大量条件编译以解决Linux内核的版本差异问题。...其中较为关键的一个差异点,就是Linux内核从4.17版本开始修改了系统调用过程中的函数签名,这对ftrace hook的实现造成了较大的困扰。...[nr]: 图2:Linux内核4.17版本do_syscall_64函数实现 而如前一篇文章所述,ftrace hook是通过编译时处理,在各个内核函数实现代码的开头插桩call指令,所以ftrace...除此之外,由于优化方案中可以直接使用ftrace框架自带的防递归机制,经典方案中花费大量代码实现但仍然有所不足的防递归机制也就可以省略了。

1.7K20

分析 Linux 内核通过 ftrace 来操作的命令

ftrace 现在已经是内核中的一部分了,你不再需要事先安装它了。也就是说,如果你在使用最近的 Linux 系统,那么 ftrace 是已经启用了的。...为了验证 ftrace 是否可用,运行 mount 命令并查找 tracefs。如果你看到类似下面的输出,表示 ftrace 已经启用,你可以轻松地尝试本文中下面的例子。...# mount | grep tracefsnone on /sys/kernel/tracing type tracefs (rw,relatime,seclabel) 要想使用 ftrace,你首先需要进入上面...如果你直接运行 ftrace,不会运行任何特定的 ftrace 命令。相反的,基本操作是通过标准 Linux 命令来写入或读取一些文件。...#### all functions enabled ####$$ echo ext4_* > set_ftrace_filter$$ cat set_ftrace_filterext4_has_free_clustersext4

72310

Ftrace工具的使用

Ftrace简介 FtraceLinux进行代码级实践分析最有效的工具之一,比如我们进行一个系统调用,出来的时间过长,我们想知道时间花哪里去了,利用Ftrace就可以追踪到一级级的时间分布。...Ftrace 的整体构架如下: ? Ftrace 有两大组成部分,一是 framework,另外就是一系列的 tracer 。...下面我们用Ftrace来跟踪test_proc_show()这个函数。 我们把启动ftrace的所有命令写到一个脚本function.sh里面: #!...Ftrace结果怎么读? Ftrace结果怎么读?答案非常简单:如果是叶子函数,就直接在这个函数的前面显示它占用的时间,如果是非叶子,要等到 }的时候,再显示时间,如下图: ?...vim对Ftrace进行折叠 上面那个Ftrace文件太大了,大到看不清。

3.2K20

手把手教你使用 ftrace

ftrace:是一个 Linux 内核函数跟踪器,function tracer,旨在帮助开发人员和系统设计者可以找到内核内部发生的事情,从 Linux-2.6 内核就支持了。...atrace 是用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。...因此,首先需要学习 ftrace,它是其他 trace 的基础。 2、宏定义 在使用 ftrace 之前,需要确保内核配置编译了其配置选项。...通过 cat 命令查看 ftrace 记录下来的跟踪信息。 tracing_on:用于开始或暂停跟踪。 trace_options:设置 ftrace 的一些相关选项。...详细的 ftrace 原理和使用方法,请参考《奔跑吧 Linux 内核 入门篇》11.3节,或者《奔跑吧 Linux 内核基于 Linux4.x 内核源代码问题分析》6.2节。

1.5K40

linux机制

Linux 2.4版本开始,操作系统底层提供了scatter/gather这种DMA的方式来从内核空间缓冲区中将数据直接读取到协议引擎中,而无需将内核空间缓冲区中的数据再拷贝一份到内核空间socket...参考: 浅谈 Linux下的零拷贝机制 TCP TCP的TIME_WAIT有两个作用: 防止前一个TCP连接的残留数据(在序列号恰好正确的情况下)进入后续的TCP连接中 防止TCP挥手过程发出去的最后一个...Linux实现了大量QDisc来满足各个QDisc对应的的报文队列和行为。该接口允许QDisc可以在没有IP栈和NIC驱动修改的前提下实现队列管理。...TCP rtt和rto TCP拥塞避免算法,目前主流Linux的默认拥塞避免算法为cubic,可以使用ss -i命令查看。...可以看到reno算法在发生拥塞避免时不会将cwnd变为1,这样提高了传输效率,快速重传和快速恢复机制也有利于更快探测到拥塞。 ?

2.6K40

【调试】ftrace(一)基本使用方法

简介 FtraceLinux Kernel的官方tracing系统,支持Function trace、静态tracepoint、动态Tracepoint的跟踪,还提供各种Tracer,用于统计最大irq...相比kernle的log_buf和dynamic_debug机制Ftrace的buffer大小可以灵活配置,可以生成快照,也有一定的优势。...但是在Linux version 5.4.0-135 ubuntu18.04中是生效的。不知道是不是内核版本差异的原因?...小结 总结下ftrace 跟踪器的三步法为:1,设置tracer类型;2,设置tracer参数;3,使能tracer trace event 用法 ftrace中的跟踪机制主要有两种,分别是函数和跟踪点...前者属于简单操作,后者可以理解为Linux内核的占位符函数。 tracepoint可以输出开发者想要的参数、局部变量等信息。

2K40

二十分钟Linux Ftrace原理抛砖引玉 | 文末互动送书

也就是说Linux内核启动的过程中对每一个函数进行了一次 hot hook。所以说,静态的vmlinux中函数开头的5字节指令被动态替换成了运行时的nop! 那么,何必多此一举呢?...这就要引入ftrace了。仔细看dump文件里的下面这些信息: ?...其实这些辅助函数连同__fentry__就是用来支撑ftrace机制的,使得你一旦开启ftrace,便可以动态地对内核函数进行跟踪调试,非常方便,当然,如果你不开启ftrace,那么额外的支撑指令就像nop...内核采用的机制和我前段时间hot hook时使用的机制是一致的,即先原子替换第一个字节为 0xcc, 即一个断点指令,然后再统一替换后面的。...在这里做个有奖调查,大家可以通过留言聊一聊你在工作中是怎么使用ftrace, "Linux阅码场"公众号会选择二个人,送出二本签名版的《Linux设备驱动开发详解:基于新的Linux 4.0内核》。

1.3K20

Ftrace开始内核探索之旅

操作系统内核对应用开发工程师来说就像一个黑盒,似乎很难窥探到其内部的运行机制。...其实Linux内核很早就内置了一个强大的tracing工具:Ftrace,它几乎可以跟踪内核的所有函数,不仅可以用于调试和分析,还可以用于观察学习Linux内核的内部运行。...Ftrace 对用户的使用接口正是tracefs文件系统。 tracefs 文件系统 用户通过tracefs文件系统使用Ftrace,这很符合一切皆文件的Linux哲学。...从上图可以看出,Ftrace 提供的 function hooks 机制在内核函数入口处埋点,根据配置调用特定的 tracer, tracer将数据写入ring buffer。...在Linux的早期,内核维护者就一直想在内核中加入静态 tracepoints,尝试过各种策略。

36810

Linux缓存机制bufferscached

缓存机制Linux引入了buffers和 cached机制,buffers与cached都是内存操作,用来保存系统曾经打开过的文件以及文件元数据,这样当操作系统需要读取某些文件时,首先在buffers...与cached内存区查找,如果找到,直接读出给应用程序,如果没有找到需要数据,才从磁盘读取,这就是操作系统的缓存机制,通过缓存,大大提高了操作系统的性能。...为了方便查找文件,linux引入目录项(dentry)描述目录与文件的关系树,Linux为每一个目录建立一个目录项,也为每个文件建立一个目录项。...根据Linux虚拟内存管理机制,这种行为是正常的。要理解为什么缓存会变得如此之高,以及为什么这不是一个问题,就必须了解I/O在Linux上是如何工作的。...从Linux缓存机制来说,buffers和cached都是系统可用内存,通常情况下看到bufferes和cached占用内存多,这是一个正常现象,它不是一个问题,所以在看到物理内存快要耗尽时,不要惊慌,

4.6K10
领券