linux trace机制分析 - 2.ftrace使用

本文详细介绍了Linux内核中的Ftrace工具,用于调试内核、分析系统延迟和性能问题。通过开启ftrace、配置tracefs,展示了如何进行中断关闭(irqsoff)、抢占关闭(preemptoff)和调度延迟(SchedulingLatencyTracer)的检测。通过示例代码和测试结果,解释了这些检测在实际操作中的应用和意义。

简介

Ftrace是一个内部跟踪程序,可以用于调试内核、跟踪内核运行状态,有助于排查内核导致的延迟和性能问题。 Ftrace通常被认为是一个linux内置的分析工具,实际上ftrace不仅仅是一个工具,更准确的说是一个综合了多种手段的trace框架,可以用来分析系统延迟、中断的禁用与执行、任务的调度与抢占等等。
不过最常用的还是事件追踪,基于内核event point,可以通过tracefs查看内核的运行情况。

基本使用

  1. 在内核编译配置中开启ftracer
Kernel hacking  --->
    [*] Tracers  --->
        [*]   Kernel Function Tracer
  1. 判断系统是否开启trace
>>> cat /proc/filesystems | grep tracefs
nodev   tracefs      //出现tracefs说明内核已开启tracers
  1. 挂载tracefs
>>> mkdir /debug/trace -p
>>> mount -t tracefs nodev /debug/trace
  1. 配置tracefs
>>> cat /debug/trace/available_tracers    //查看当前可用的tracer
function_graph function nop  

>>> cat /debug/trace/current_tracer   //查看当前tracer
nop

>>> echo  function > /debug/trace/current_tracer   //将ftrace设置为当前tracer
function

>>> echo 1 > tracing_on //开启tracer
  1. 打印当前内核调用栈
>>> cat trace_pipe
CPU:0 [LOST 117305 EVENTS]
          <idle>-0       [000] d..1  1741.362401: __local_bh_enable <-_local_bh_enable
          <idle>-0       [000] d.h1  1741.362402: handle_percpu_devid_irq <-generic_handle_irq_desc
          ...
         
CPU:1 [LOST 282170 EVENTS]
             cat-1742    [001] ....  1816.454528: _raw_spin_lock_irqsave <-uart_write_room
             ...
             
...

中断关闭检测(irqsoff)

当中断被屏蔽后,除了NMI和SMI以外,CPU不会响应其它的外部事件,从而造成系统卡顿、调度异常。

测试环境构建

内核提供的关闭/打开中断接口如下:

/* hardirq enable/disable api */
local_irq_disable()
local_irq_enable()
local_irq_save()
local_irq_restore
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值