性能分析要写什么内容(CPU性能分析法)
原文地址:
https://www.brendangregg.com/offcpuanalysis.html
性能问题可分为以下两种类型之一:
在 CPU 上:线程花时间在 CPU 上运行的地方。
CPU 外:在 I/O、锁、计时器、分页/交换等上阻塞时等待的时间。
CPU 外分析是一种性能方法,用于测量和研究 CPU 外时间以及堆栈跟踪等上下文。它与 CPU 分析不同,后者仅在线程在 CPU 上执行时检查线程。此处,目标是被阻止和脱离 CPU 的线程状态,如右侧图中的蓝色所示。
CPU 外分析与 CPU 分析相辅相成,因此可以理解 100% 的线程时间。此方法也不同于检测通常阻塞的应用程序功能的跟踪技术,因为此方法针对内核调度程序的阻塞概念,这是一种方便的捕获概念。
线程可能出于多种原因离开 CPU,包括 I/O 和锁,但也有一些与当前线程的执行无关的原因,包括由于对 CPU 资源的高需求而导致的非自愿上下文切换和中断。无论出于何种原因,如果在工作负载请求(同步代码路径)期间发生这种情况,则会引入延迟。
在本页中,我将介绍 CPU 外时间作为指标,并所以 CPU 外分析的技术。 作为 CPU 外分析的示例实现,我将把它应用到 Linux,然后在后面的章节中所以其他操作系统。
目录
1. 先决条件
2.引言3.开销4.Linux5.CPU 外时间6.CPU 外分析7.请求上下文8.警告9. 火焰图10.唤醒11.其他操作系统12.起源13.小结14.更新
先决条件
CPU 外分析要求堆栈跟踪可供跟踪器使用,您可能需要首先修复此问题。许多应用程序都是使用 -fomit-frame-pointer gcc 选项编译的,从而打破了基于帧指针的堆栈遍历。VM 运行时(如动态的 Java 编译方法)和跟踪器在没有其他帮助的情况下可能无法找到其符号信息,从而导致堆栈跟踪仅为十六进制。还有其他陷阱。请参阅我之前关于修复堆栈跟踪和JIT 符号的性能的文章。
介绍
为了解释 CPU 外分析的作用,我将首先所以 CPU 采样和跟踪进行比较。然后,我将所以两种 CPU 外分析方法:跟踪和采样。虽然十多年来我一直在推广 CPU 外分析,但它仍然不是一种广泛使用的方法,部分原因是生产 Linux 环境中缺乏工具来衡量它。现在,随着eBPF和更新的Linux内核(4.8+)的出现,这种情况正在发生变化。
1. 中央处理器采样
许多传统的分析工具使用跨所有CPU的活动定时采样,以特定的时间间隔或速率(例如,99赫兹)收集当前指令地址(程序计数器)或整个堆栈回溯跟踪的快照。这将给出正在运行的函数或堆栈跟踪的计数,从而可以合理估计 CPU 周期的花费位置。在 Linux 上,采样模式下的性能工具(例如,-F 99)执行定时 CPU 采样。
考虑应用程序函数 A() 调用函数 B(),它进行阻塞系统调用:
CPUSampling———————————————–>||||||||||||
AAAABBBBAAAA
A(———..———
相关文章:
相关推荐: