(1)function 主要用于跟踪内核函数的调用栈(其被调用过程) (2)function_graph 主要用于跟踪内核函数内部调用流程及耗时 这两个对内核性能分析的作用不大,主要用来梳理内核模块的逻辑 回到顶部 二 使用 (1)function 使用 /sys/kernel/debug/tracing# echo nop > current_tracer ---清空跟踪器/sys/kernel/debug/tr...
ftrace_graph_call:// ftrace_graph_caller();nop// If enabled, this will be replaced// "b ftrace_graph_caller"#endifmcount_exitENDPROC(ftrace_caller) 由于我们在使能function graph的时候在ftrace_enable_ftrace_graph_caller里面把ftrace_graph_call地址所在的nop指令改成了b ftrace_graph_caller(注意这...
3. 最终通过ftrace_modify_code来修改ftrace_graph_call原来所在位置的代码(步骤2中产生的跳转指令,这样可以直接跳转到ftrace_graph_caller这个函数) 所以我们可以看到,在使能ftrace function graph的时候,通过动态修改一条指令来跳转到我们想执行的函数上。在关闭的时候,通过将这条跳转指令恢复为nop指令。 三、function ...
# tracer:function_graph # #CPUDURATIONFUNCTIONCALLS#|||2)|drm_open(){2)|drm_minor_acquire(){2)8.625us|_raw_spin_lock_irqsave();2)4.709us|_raw_spin_unlock_irqrestore();2)|drm_dev_enter(){2)5.750us|__srcu_read_lock();2)+17.167us|}/* drm_dev_enter */2)5.791us|__srcu_read_...
所以用的 最多的是ftrace 的 function、function_graph 这两个跟踪器。 在学习使用 function、function_graph 之前,需要先了解一些,ftrace 相关的一些数据和节点文件知识。 正文 最新的linux 内核,ftrace 所有相关数据和文件节点都位于 /sys/kernel/tracing 目录下。 ftrace部分数据和文件节点说明: 文件...用途... ...
tracer(function、function_graph、irq_off)原理和代码分析 trace event 1. ring Buffer Ringbuffer是trace32框架的一个基础,所有的trace原始数据都是通过Ring Buffer记录的,其主要有以下几个作用: 存储在内存中,速度非常快,对系统的性能影响降到最低的水平 ...
hwlat blk mmiotrace function_graph wakeup_dl wakeup_rt wakeup function nop 在所有输出的追踪器中,我会聚焦于下面三个特殊的:启用追踪的function和function_graph,以及停止追踪的nop。 确认当前的追踪器 通常情况默认的追踪器设定为nop。即在特殊文件中current_tracer中的 “无操作”,这意味着追踪目前是关闭的:...
一、ftrace function graph是什么 除了上面提到的trace events之外,tracer提供了很多其余的功能(如下的config宏开关),本文主要介绍function graph的实现。 CONFIG_FUNCTION_TRACER=y CONFIG_FUNCTION_GRAPH_TRACER=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_NOP_TRACER=y ...
Ftrace function_graph 文章开始例子已经展示过,function_graph可以打印出函数的调用图,揭示代码的流程。function_graph不仅跟踪函数的输入,而且跟踪函数的返回,这使得 tracer 能够知道被调用的函数的深度。function_graph可以让人更容易跟踪内核的执行流程。 我们再看一个例子: ...
function_graph,函数调用图表追踪器,可以看出哪个函数被哪个函数调用,何时返回。 mmiotrace,MMIO( Memory MappedI/O)追踪器,用于Nouveau驱动程序等逆向工程。 blk,block I/O追踪器。 wakeup,进程调度延迟追踪器。 wakeup_rt,与wakeup相同,但以实时进程为对象。