目录

linux ftrace 简介

ftrace背景

ftrace 是 Function Trace的意思, 最开始主要用于记录内核函数的运行轨迹 随着功能的逐渐增加,演变成一个用于trace的framework.

static tracepoints

static tracepoints within the kernel (event tracing)

  scheduling
  interrupts
  file systems
  ...

dynamic kernel funciton tracing

  trace all functions within the kernel
  pick and choose what function to trace (less functions, less overhead)
  call graph
  stack usage
  

## Latency Tracer

how long interrupts are disabled 
how long preemption is disabled
how long interrupts and/or preemption is disable

Wakeup latency

how long it takes a process to run after it is woken

ftrace的帮助文档在 Documentation/trace ftrace的代码在 kernel/trace ftrace的作者在LinuxCon有一篇关于ftrace的slides

ftrace的配置和使用

ftrace通过debugfs文件系统向用户空间提供访问接口,因此要确保挂载上debugfs /sys/kernel/debug/tracing目录下提供了各种跟踪器(tracer)和event事件

通用配置

trace

The static contents of the buffer, 保存trace到的信息
`echo > trace` 可以清空buffer

trace_pipe

和trace类似,可查看trace到的内容
但是输出trace的同时,会将输出的信息从buffer中删除

available_tracers

列出支持的tracer (跟踪器)

—-

TRACER description
- -
function 跟踪内核函数执行情况
functiongraph | 可以显示函数调用关系图 | | wakeup | 跟踪进程唤醒信息 | | wakeuprt
wakeupdl | | | nop | 不跟踪任何信息,将nop写入currenttracer
可以清空之前收集到的tracer信息
mmiotrace
blk

—-

current_tracer

设置和显示当前正在使用的tracer, 默认为nop, 表示不做任何跟踪操作

trace_clock

当前trace的timestamp的时钟,默认使用local时钟
trace_clock description
- -
local Per cpu clock but may not be synced across CPUs
可能无法在不同cpu间同步
global Synced across CPUs but slows tracing down.
支持在不同cpu间同步
counter Not a clock, but just an increment
跨CPU计数器,对于分析不同cpu间的event顺序比较有效
uptime Jiffy counter from time of boot
perf Same clock that perf events use
x86-tsc TSC cycle counter

tracing_on

控制tracer打开或停止
> echo 0 > tracing_on : quick way to disable tracing
> echo 1 > tracing_on : quick way to re-enable tracing