Linux 如何迅速分析定位CPU性能瓶颈

CPU的性能指标那么多,CPU性能分析工具也是一抓一大把,换成实际的工作场景,我又该观察什么指标、选择哪个性能工具呢?

不要担心,今天我就以多年的性能优化经验,给你总结出一个"又快又准"的瓶颈定位套路,告诉你在不同场景下,指标工具怎么选,性能瓶颈怎么找。

 

CPU性能指标


描述 CPU的性能指标都有哪些 ?

首先,最容易想到的应该是CPU 使用率这也是实际环境中最常见的一个性能指标。CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同,又被分为用户CPU、系统 CPU、等待 I/O CPU、软中断和硬中断等。

● 用户CPU 使用率,包括用户态 CPU使用率(user)和低优先级用户态 CPU使用率

(nice),表示CPU在用户态运行的时间百分比。用户CPU使用率高,通常说明有应用程序比较繁忙。

●系统CPU使用率,表示CPU在内核态运行的时间百分比(不包括中断)。系统CPU 使用率高,说明内核比较繁忙

●等待I/的CPU使用率,通常也称为 iowait,表示等待I/O的时间百分比。iowait高,通常说明系统与硬件设备的I/O 交互时间比较长。

●软中断和硬中断的CPU使用率,分别表示内核调用软中断处理程序、硬中断处理程序的时间百分比。它们的使用率高,通常说明系统发生了大量的中断。

● 除了上面这些,还有在虚拟化环境中会用到的窃取CPU使用率(steal)和客户CPU使用率(guest),分别表示被其他虚拟机占用的CPU时间百分比,和运行客户虚拟机的CPU时间百分比。

第二个比较容易想到的,应该是平均负载(Load Average),也就是系统的平均活跃进程数。它反应了系统的整体负载情况,主要包括三个数值,分别指过去1分钟、过去5分钟和过去15 分钟的平均负载。

理想情况下,平均负载等于逻辑 CPU个数,这表示每个CPU都恰好被充分利用。如果平均负载大于逻辑 CPU 个数,就表示负载比较重了。

第三个,也是在专栏学习前你估计不太会注意到的,进程上下文切换,包括

● 无法获取资源而导致的自愿上下文切换

●被系统强制调度导致的非自愿上下文切换。

上下文切换,本身是保证 Linux 正常运行的一项核心功能。但过多的上下文切换,会将原本运行进程的CPU时间,消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,缩短进程真正运行的时间,成为性能瓶颈。

除了上面几种,还有一个指标,CPU缓存的命中率。由于CPU发展的速度远快于内存的发展,CPU的处理速度就比内存的访问速度快得多。这样,CPU在访问内存的时候,免不了要等待内存的响应。为了协调这两者巨大的性能差距,CPU缓存(通常是多级缓存)就出现了。

Linux 如何迅速分析定位CPU性能瓶颈

就像上面这张图显示的,CPU 缓存的速度介于CPU和内存之间,缓存的是热点的内存数据。根据不断增长的热点数据,这些缓存按照大小不同分为L1、L2、L3等三级缓存,其中L1和L2 常用在单核中,L3则用在多核中。

从L1到L3,三级缓存的大小依次增大,相应的,性能依次降低(当然比内存还是好得多)。而它们的命中率,衡量的是CPU缓存的复用情况,命中率越高,则表示性能越好。

这些指标都很有用,总结成了一张图,帮你分类和记忆。你可以保存打印下来,随时查看复习,也可以当成CPU性能分析的"指标筛选"清单。

Linux 如何迅速分析定位CPU性能瓶颈