The Linux Perf Master
  • Introduction
  • Chapter 1: 性能诊断入门
  • Linux 性能诊断:单机负载评估
  • Linux 性能诊断:快速检查单(Netflix版)
  • 全栈架构技术视野:以 Stack Overflow 为例
  • Chapter 2: 应用监控与可视化
  • 应用程序的日志管理
  • 基于 Ganglia 实现计算集群性能态势感知
  • 新一代 Ntopng 网络流量监控
  • Graphite 体系结构详解
  • 部署和配置管理工具简介
  • 2018 Docker 用户报告 - Sysdig Edition
  • 开源地理信息系统简史
  • Chapter 3: 操作系统原理与内核追踪
  • How Linux Works:内核空间和启动顺序
  • How Linux Works:内存管理
  • 动态追踪技术(一):DTrace
  • 动态追踪技术(二):基于 strace+gdb 发现 Nginx 模块性能问题
  • 动态追踪技术(三):Trace Your Functions
  • 动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪
  • DTrace 软件许可证演变简史
  • Chapter 4: 大数据与分布式架构
  • 基于 LVS 的 AAA 负载均衡架构实践
  • 计算机远程通信协议:从 CORBA 到 gRPC
  • 分布式架构案例:Uber Hadoop 文件系统最佳实践
  • 分布式架构案例:基于 Kafka 的事件溯源型微服务
  • 分布式追踪系统体系概要
  • 大数据监控框架:开源分布式跟踪系统 OpenCensus
  • 大数据监控框架:Uber JVM Profiler
  • 大数据监控框架:LinkedIn Kafka Monitor
  • Chapter 5: Cyber-Security|网络与信息安全篇
  • 黑客入侵导致的性能问题
  • 基于数据分析的网络态势感知
  • 网络数据包的捕获、过滤与分析
  • WEB 应用安全、攻击、防护和检测
  • 警惕 Wi-Fi 漏洞 KRACK
  • Cyber-Security & IPv6
  • Linux 容器安全的十重境界
  • 美国网络安全立法策略
  • 香港警务处网络安全与科技罪案调查科
  • Chapter 6: 工程管理篇
  • Oracle 数据库迁移与割接实践
  • PostgreSQL 数据库的时代到来了吗
  • 珠海航展交通管控实践经验借鉴
  • 基于看板(Kanban)的管理实践
  • DevOps 漫谈:从作坊到工厂的寓言故事
  • 工程师的自我修养:全英文技术学习实践
  • Chapter 7: 社区文化篇
  • 谁是王者:macOS vs Linux Kernels ?
  • Linus Torvalds:The mind behind Linux
  • Linus Torvalds:人生在世,Just for Fun
  • IT 工程师养生指南
  • 附录
  • 附录:常用命令
  • 附录:扩展命令
  • 附录:推荐书单
  • 附录:创作历史
  • 附录:版权声明
Powered by GitBook
On this page
  • 一、Introduction
  • 二、ABC
  • 三、BASIC
  • 1. Function tracer
  • 2. Function graph tracer
  • 四、体系结构
  • 五、Useful Tools
  • 1. trace-cmd
  • 六、可视化工具:KernelShark
  • 参考文献

动态追踪技术(三):Trace Your Functions

Previous动态追踪技术(二):基于 strace+gdb 发现 Nginx 模块性能问题Next动态追踪技术(四):基于 Linux bcc/BPF 实现 Go 程序动态追踪

Last updated 7 years ago

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:

二、ABC

在使用ftrace之前,需要确认调试目录是否已经挂载,默认目录:/sys/kernel/debug/ 。

debugfs是Linux内核中一种特殊的文件系统,非常易用、基于RAM,专门设计用于调试。(since version 2.6.10-rc3,

挂载之后会自动创建如下文件:

三、BASIC

1. Function tracer

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

2. Function graph tracer

Function graph tracer 和 function tracer 类似,但输出为函数调用图,更加容易阅读:

四、体系结构

Ftrace 有两大组成部分,framework 和一系列的 tracer 。每个 tracer 完成不同的功能,它们统一由framework管理。 ftrace 的 trace 信息保存在 ring buffer 中,由 framework 负责管理。Framework 利用 debugfs 建立 tracing 目录,并提供了一系列的控制文件。

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 tracers
Linux ftrace架构示意图

代码下载:

Linux ftrace KernelShark
Linux ftrace KernelShark Filters

https://github.com/brendangregg/perf-tools
>>>more about DTrace>>>>
Julia Evans:ftrace: trace your kernel functions!
IBM developerWorks 刘明:ftrace简介,2009
Debugging the kernel using Ftrace - part 1 | Dec 2009, Steven Rostedt
Debugging the kernel using Ftrace - part 2 | Dec 2009, Steven Rostedt
Secrets of the Linux function tracer | Jan 2010, Steven Rostedt
trace-cmd: A front-end for Ftrace | Oct 2010, Steven Rostedt
Using KernelShark to analyze the real-time scheduler | 2011, Steven Rostedt
Ftrace: The hidden light switch | 2014,Brendan Gregg
the kernel documentation:ftrace.txt
trace-cmd 图形化工具:KernelShark
Youtube:ELC2011 Ftrace GUI | KernelShark
www.kernel.org
https://en.wikipedia.org/wiki/Debugfs)。