Brendan D. Gregg(DTrace 书的作者)有一个有趣的分析变体:“Off-CPU”分析(和Off-CPU Flame Graph;幻灯片 2013,p112-137)查看线程或应用程序被阻塞的位置(是未由 CPU 执行,但正在等待 I/O、页面错误处理程序或因 CPU 资源不足而取消调度):
这一次揭示了哪些代码路径在 CPU 关闭时被阻塞和等待,以及确切的等待时间。这与传统的分析不同,后者通常以给定的时间间隔对线程的活动进行采样,并且(通常)仅在线程在 CPU 上执行工作时才检查它们。
他还可以将 Off-CPU 配置文件数据和 On-CPU 配置文件结合在一起:http ://www.brendangregg.com/FlameGraphs/hotcoldflamegraphs.html
Gregg 给出的示例是使用 制作的dtrace
,这在 Linux 操作系统中通常不可用。但也有一些类似的工具(ktap、systemtap、perf),而且perf
我认为它们拥有最广泛的安装基础。通常perf
生成 On-CPU 配置文件(哪些功能在 CPU 上执行得更频繁)。
- 如何将 Gregg 的 Off-CPU 示例转换为
perf
Linux 中的分析工具?
PS:在来自 LISA13, p124的幻灯片中有指向 Off-CPU 火焰图的 systemtap 变体的链接:“张益春创建了这些,并一直在 Linux 上使用它们与 SystemTap 来收集配置文件数据。请参阅: • http://agentzh .org/misc/slides/off-cpu-flame-graphs.pdf “ ”(2013 年 8 月 23 日的 CloudFlare 啤酒会议)