ftrace跟踪内核_如何利用ftrace精确跟踪特定进程调度信息

网上已经有很多阐述ftrace原理和使用方法的文章,本文不会面面俱到的介绍所有涉及的原理和方法,只会聚焦在阐述ftrace的event tracing机制,以及如何利用该机制(包括其他一些方法配合)去跟踪某个进程的调度信息。本文的分析基于处理器为ARM64的多核手机平台,linux版本为msm-4.19,为了行文方便,我们还是先回顾下ftrace的基本概念。一、ftrace基本原理图1...
摘要由CSDN通过智能技术生成

a705256de951dd73a5dea5a64de2ebd3.png

网上已经有很多阐述ftrace原理和使用方法的文章,本文不会面面俱到的介绍所有涉及的原理和方法,只会聚焦在阐述ftrace的event tracing机制,以及如何利用该机制(包括其他一些方法配合)去跟踪某个进程的调度信息。本文的分析基于处理器为ARM64的多核手机平台,linux 版本为 msm-4.19 ,为 了行文方便,我们还是先回顾 下 ftrace的基本概念。

一、 ftrace基本原理

ad79f5442d3bfff39a46c74cf3e1cdeb.png 图1-1 ftrace框架 一句话总结:各类tracer往ftrace主框架注册,不同的trace则在不同的probe点把信息通过probe函数给送到ring buffer中,再由暴露在用户态debufs实现相关控制。 对不同tracer来说

1)需要实现probe点(需要跟踪的代码侦测点),有的probe点需要静态代码实现,有的probe点借助编译器在运行时动态替换,event tracing属于前者;

2)还要实现具体的probe函数,把需要记录的信息送到ring buffer中;

3)增加debugfs 相关的文件,实现信息的解析和控制。

而ring buffer 和debugfs的通用部分的管理由框架负责。

二、ftrace event tracing原理介绍

9792b13ce442f806a57d571b4799fe4f.png 图2-1 ftrace event tracing原理   其它一些 trace 工具也具有相似的工作流程,需要一个 probe 点,一个 probe 函数,一种保存 log 信息的机制,还有用于户进行交互的接口(分别对应图中 A、B、C、D 点)。它们发现可以利用 function trace 的后两部分,也就是环形缓存的管理和用户交互接口部分的代码,只需要实现自己的 probe 点和 probe 函数就可以了。于是在 function trace 进入内核 mainline 后,kprobe 也借用了该机制。

1.  tracepoint 的实现原理

tracepoint 是早就存在于内核当中的一种 trace 工具,具体原理不再详细展开,示例代码大家可参照内核源码 sample/tracepoints/相关内容。需要使用小于3.9版本的内核来看。原因是linux不期望开发人员直接使用 tracepoint,而应该使用更高层的 event tracing,但是有两个宏(DECLARE_TRACE和DEFINE_TRACE)会被trace event使用,需要看下。

(1) DECLARE_TRACE

该宏在被定义。 f4e1081e828b00a4238cdc17aa1d7e9e.png 96ef6633cd2f66b8548795122bc64c0a.png 19ba5e015ed6c82b657b025d61b1764e.png trace_##name最终调用__DO_TRACE宏将信息送到ring buffer中。 reg/unregister_trace_subsys_event 负责注册或注销 probe 函数,probe
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值