动态追踪技术(三):Trace Your Functions
Ftrace 是一个设计用来帮助开发者和设计者监视内核的追踪器,可用于调试或分析延迟以及性能问题。 ftrace 令人印象最深刻的是作为一个function tracer,内核函数调用、耗时等情况一览无余。另外,ftrace最常见的用途是事件追踪,通过内核是成百上千的静态事件点,看到系统内核的哪些部分在运行。实际上,ftrace更是一个追踪框架,它具备丰富工具集:延迟跟踪检查、何时发生中断、任务的启用、禁用及抢占等。在 ftrace 的基线版本之上,还有很多第三方提供的开源工具,用于简化操作或者提供数据可视化等扩展应用。

一、Introduction

  • Developer(s): Steven Rostedt(RedHat) and others
  • Initial release: October 9, 2008;
  • Operating system: Linux (merged into the Linux kernel mainline in kernel version 2.6.27)
  • Type: Kernel extension
  • License: GNU GPL
  • Website: www.kernel.org

二、ABC

在使用ftrace之前,需要确认调试目录是否已经挂载,默认目录:/sys/kernel/debug/ 。
debugfs是Linux内核中一种特殊的文件系统,非常易用、基于RAM,专门设计用于调试。(since version 2.6.10-rc3,https://en.wikipedia.org/wiki/Debugfs)。
挂载之后会自动创建如下文件:

三、BASIC

1. Function tracer

以Function tracer为例,结果存储在 trace ,该文件类似一张报表,该表将显示 4 列信息。首先是进程信息,包括进程名和PID ;第二列是CPU;第三列是时间戳;第四列是函数信息,缺省情况下,这里将显示内核函数名以及它的上一层调用函数。

2. Function graph tracer

Function graph tracer 和 function tracer 类似,但输出为函数调用图,更加容易阅读:
Could not load image
Linux ftrace tracers

四、体系结构

Ftrace 有两大组成部分,framework 和一系列的 tracer 。每个 tracer 完成不同的功能,它们统一由framework管理。 ftrace 的 trace 信息保存在 ring buffer 中,由 framework 负责管理。Framework 利用 debugfs 建立 tracing 目录,并提供了一系列的控制文件。
Could not load image
Linux ftrace架构示意图
ftrace is a dynamic tracing system 当你开始 “ftracing” 一个内核函数的时候,该函数的代码实际上就已经发生变化了。内核将在程序集中插入一些额外的指令,使得函数调用时可以随时通知追踪程序。
WARNNING:使用ftrace追踪内核将有可能对系统性能产生影响,追踪的函数越多,开销越大。 使用者必须提前做好准备工作,生产环境必须谨慎使用。

五、Useful Tools

1. trace-cmd

trace-cmd是一个非常有用的Ftrace命令行工具。
在很有情况下不能使用函数追踪,需要依赖 事件追踪 的支持,例如:
输出如下:
切换路径:PID 24817 -> 15144 -> kernel -> 24817 -> 1561 -> 15114。

2. perf-tools

perf-tools 是性能调试大神Brendan Gregg开发的一个工具包,提供了很多强大的功能,例如: iosnoop: 磁盘I/O分析详细包括延迟 iolatency: 磁盘I/O分析概要(柱状图) execsnoop: 追踪进程exec() opensnoop: 追踪open()系统调用,包含文件名 killsnoop: 追踪kill()信号(进程和信号详细)

六、可视化工具:KernelShark

KernelShark是trace-cmd的前端工具,提供了对trace.dat的可视化分析(Graph View 、List View、Simple and Advance filtering)。
Linux ftrace KernelShark
Could not load image
Linux ftrace KernelShark Filters

参考文献

Copy link
On this page
一、Introduction
二、ABC
三、BASIC
1. Function tracer
2. Function graph tracer
四、体系结构
五、Useful Tools
1. trace-cmd
六、可视化工具:KernelShark
参考文献