Post

历史经验Skill化系列(一) -- 火焰图

火焰图 Skill 化,从数据采集到生成到解读,配套 CLI 工具链

历史经验Skill化系列(一) -- 火焰图

前言

最近开启新的系列,将历史博客中的经验和能力 AI 化,转换为更便捷的 Skill。如火焰图、eBPF、gperf-tool、wireshark 抓包、google sanitize 等等。

火焰图(Flame Graph)由 Brendan Gregg 发明,是性能分析领域最直观的可视化工具。

本系列是历史经验 Skill 化的第一篇,火焰图知识体系见之前博客:《并发与异步编程——性能分析工具:gperftools和火焰图》

火焰图类型

火焰图有多种类型,适用于不同的性能分析场景:

类型横轴采样事件适用场景
On-CPUCPU 时间cpu-clock / cyclesCPU 热点
Off-CPU阻塞时间sched:sched_stat_sleep锁竞争 / I/O 等待
Memory内存操作频率branches / cache-misses内存热点分析
Wake唤醒延迟sched:sched_wakeup延迟分析 / 调度问题
Hot/ColdCPU + 阻塞组合混合负载全景
Differential差值对比两个 profile版本 / 配置变更对比

Off-CPU、Memory、Wake 火焰图与 eBPF

Off-CPU 火焰图展示的是进程不在 CPU 上运行的时间——包括等待锁、等待 I/O、sleep 等阻塞场景。这对于分析”CPU 不高但响应慢”的问题特别有用。数据来源依赖 perf 采集 sched:sched_stat_sleepsched:sched_switch 等内核事件。

Wake 火焰图追踪任务被唤醒的路径,分析延迟来源——哪些操作唤醒了当前任务,唤醒链路有多长。依赖 perf 采集 sched:sched_wakeup 事件。

Memory 火焰图聚焦内存访问热点,采样 branchescache-misseskmem:* 等事件,帮助定位内存分配异常或缓存未命中问题。

这些高级火焰图(Off-CPU、Wake、Memory)本质上依赖 eBPF(extended Berkeley Packet Filter) 提供的内核级别的动态追踪能力。eBPF 允许在内核中安全地运行自定义程序,采集各类内核事件,是现代性能分析的核心基础设施。

相关 eBPF 博客

本博客有完整的 eBPF 学习系列,可搭配火焰图一起使用:


(后文待续)

This post is licensed under CC BY 4.0 by the author.