首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

通过 ftrace 来分析 Linux 内核

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

89730

linux性能工具--ftrace框架

当未选中CONFIG_DYNAMIC_FTRACE时,其采用如下的方案 每个函数调用都会根据不同的体系结构的实现调用_mcount函数 如果ftrace使能了某些跟踪器,ftrace_trace_function...指针不再指向ftrace_stub,而是指向具体的跟踪函数 否则就执行到体系结构相关的ftrace_stub从函数返回,而该接口为空函数 也就是说开启ftrace调用函数时,都会先调用_mcount,...我们来看看start_critical_timing的实现,其主要为: 其主要的设计思想如下 2.2 trace event linux trace中,最基础的时function tracer和tracer...trace event 可以使用,其他机制也可以使用,只是 kernel 的绝大部分 tracepoint 都是 trace event 在使用。...具体的kprobe原理可以参考:Linux kprobe(内核探针 x86)

88610

手把手教你使用 ftrace

ftrace:是一个 Linux 内核函数跟踪器,function tracer,旨在帮助开发人员和系统设计者可以找到内核内部发生的事情,从 Linux-2.6 内核就支持了。...atrace 是用于控制用户空间跟踪和设置 ftrace 的设备端可执行文件,也是 Linux 内核中的主要跟踪机制。...perfetto 从您的设备上收集性能跟踪数据时会使用多种来源,例如:使用 ftrace 收集内核信息、使用 atrace 收集服务和应用中的用户空间注释、使用 heapprofd 收集服务和应用的本地内存使用情况信息...因此,首先需要学习 ftrace,它是其他 trace 的基础。 2、宏定义 在使用 ftrace 之前,需要确保内核配置编译了其配置选项。...详细的 ftrace 原理和使用方法,请参考《奔跑吧 Linux 内核 入门篇》11.3节,或者《奔跑吧 Linux 内核基于 Linux4.x 内核源代码问题分析》6.2节。

1.5K40

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

一、什么是ftrace ftrace(FunctionTracer)是Linux内核的一个跟踪框架,它从2008年10月9日发布的内核版本2.6.27开始并入Linux内核主线[1]。...… 图1:ftrace是一个功能强大的内核函数追踪框架[3] 使用ftrace需要目标Linux操作系统在编译时启用CONFIG_FUNCTION_TRACER内核配置选项(该选项默认启用)。...#define LIB_FTRACE_HOOK #include #include #include #include #include "FTraceHook.h" MODULE_LICENSE("GPL");//使用ftrace的模块必须是...这不仅实现起来比较麻烦,而且同样面临多个模块间调用时可能不完善的问题(因为难以修改其它模块对原始函数的调用); (实现细节)关于FTRACE_OPS_FL_RECURSION标志的使用可能有误 ftrace

2.2K40

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

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

1.7K20

Ftrace function graph简介

linux在打开ftrace的相关编译宏之后,在编译的时候加入gcc的-pg编译选项。在函数中加入_mcount函数。...通过写current_tracer节点来切换tracer的话,调到了内核的tracing_set_trace_write函数,如果是使用function_graph的话,最终调用了函数ftrace_enable_ftrace_graph_caller...最终通过ftrace_modify_code来修改ftrace_graph_call原来所在位置的代码(步骤2中产生的跳转指令,这样可以直接跳转到ftrace_graph_caller这个函数)...(ftrace_caller) 由于我们在使能function graph的时候在ftrace_enable_ftrace_graph_caller里面把ftrace_graph_call地址所在的nop...在linux内核的热补丁中也用到类似的技术。 当然有些函数用notrace进行修饰,如u64 notrace trace_clock(void)。具体原因留给读者思考。

52420

Ftrace开始内核探索之旅

其实Linux内核很早就内置了一个强大的tracing工具:Ftrace,它几乎可以跟踪内核的所有函数,不仅可以用于调试和分析,还可以用于观察学习Linux内核的内部运行。...虽然Ftrace在2008年就加入了内核,但很多应用开发工程师仍然不知道它的存在。本文就给你介绍一下Ftrace的基本使用。...Ftrace初体验 先用一个例子体验一下Ftrace使用简单,且功能强大。...这么强大的功能,我们不必安装额外的用户空间工具,只要使用 echo 和 cat 命令访问特定的文件就能实现。Ftrace 对用户的使用接口正是tracefs文件系统。...tracefs 文件系统 用户通过tracefs文件系统使用Ftrace,这很符合一切皆文件的Linux哲学。tracefs文件系统一般挂载在/sys/kernel/tracing目录。

36610
领券