文章目录
简介
Ftrace是一个内部跟踪程序,可以用于调试内核、跟踪内核运行状态,有助于排查内核导致的延迟和性能问题。 Ftrace通常被认为是一个linux内置的分析工具,实际上ftrace不仅仅是一个工具,更准确的说是一个综合了多种手段的trace框架,可以用来分析系统延迟、中断的禁用与执行、任务的调度与抢占等等。
不过最常用的还是事件追踪,基于内核event point,可以通过tracefs查看内核的运行情况。
基本使用
- 在内核编译配置中开启ftracer
Kernel hacking --->
[*] Tracers --->
[*] Kernel Function Tracer
- 判断系统是否开启trace
>>> cat /proc/filesystems | grep tracefs
nodev tracefs //出现tracefs说明内核已开启tracers
- 挂载tracefs
>>> mkdir /debug/trace -p
>>> mount -t tracefs nodev /debug/trace
- 配置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
- 打印当前内核调用栈
>>> 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

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

2704

被折叠的 条评论
为什么被折叠?



