CPU 利用率背后的真相,只有 1% 人知道


译者:王强陈善培原创核心月份的公共账号:指南:本文翻译自Brendan Gregg去年的博客文章“CPU利用率是错误的”,从标题上可以想到这篇文章会引起争议。一旦文章出现,我们就说“每个人都使用它,在任何地方使用它,并在每个性能监视工具中使用它”的顶级命令中的“%CPU”指示符是错误的。它不用于测量CPU繁忙程度。正确的指标,作者谴责每个人(也许你和我)的行为都是误导,这种情况年复一年仍在恶化。对于这样一顶大帽子,让我们按一下摇晃的心,听听作者如何深刻解释他的观点。

1. 引言

您认为90%的CPU利用率可能意味着:

6. 其他可能让 CPU 利用率引起误解的因素

除了抓取引起的停顿外,很容易误解CPU利用率,还有其他因素:

温度导致处理器失速; Turboboost会干扰时钟频率;核心加快了时钟;自旋锁: CPU一直在使用,IPC很高,但应用程序逻辑没有任何进展。

7. 更新:CPU 利用率真的错了吗?

这篇文章引起了很多评论:

留言栏;

作者的回答是:这里的讨论不是iowait(即磁盘IO),如果你确认它是内存密集型的,有一些方法可以解决它(见上文)。

那么CPU利用率指标是否真的正确或者只是误导?正如作者之前所说,他认为很多人都认为高CPU利用率是CPU的瓶颈,这种行为是错误的;

实际上,单独查看CPU利用率并不清楚瓶颈在哪里,而且瓶颈往往是外部的。这个指标在技术上是否正确?如果CPU停顿周期不能在别处使用,那么他们是否“忙着等待”(听起来有点矛盾)?在某些情况下,这是事实。您可以说在操作系统级别上CPU利用率在技术上是正确的,但这会产生误导。

另一方面,在超线程的情况下,那些停滞的周期可以被其他线程使用。在这种情况下,“%CPU”可以计算使用的可用周期。这是错的。本文的作者希望专注于解释这个问题并提出解决方案,但CPU利用率指标本身确实存在一些问题。

当你可能会说利用率作为一个指标是错误的时候,Andrian Cockcroft之前的讨论已经指出了()。

8. 结论

CPU利用率已经开始成为一个容易误导的指标:它包括由内存访问引起的等待周期,这可能会影响一些新的应用程序。也许“%CPU”应该重命名为“%CYC”(循环的缩写)。

要清楚地理解“%CPU”的含义,您需要使用其他指标来协助,包括每个周期的指令数(IPC)。 IPC< 1.0意味着更多的内存密集型,IPC> 1.0意味着更多的计算密集型。作者之前的文章涵盖了IPC描述以及用于测量IPC的性能监控计数器(PMC)的介绍。

如果所有性能监控产品都显示“%CPU”,它们还应显示PMC指标以解释其真实含义,并且不会误导用户。例如,您可以将“%CPU”和“IPC”放在一起,或者将指令执行周期和停止的周期放在一起。通过这些指标,开发人员和运营商可以了解如何更好地调整应用程序和系统。