Linux上具有超线程的CPU负载度量


12

如何获得启用多核超线程的CPU的真实用法?

例如,假设一个2核CPU,表示4个虚拟核。

由于top已完全使用虚拟核心中的一个核心,因此单线程工作负载现在将在中显示为100%。CPU和top工作正常,就像会有4个真正的内核一样。

但是,只有两个线程,事情变得很尴尬:如果一切正常,它们将平衡到两个真实内核,因此我们获得了200%的使用率:两倍于100%和两个空闲虚拟内核,并且正在使用所有可用的CPU能力。对我来说似乎还可以。

但是,如果两个线程在单个真实核心上运行,它们将显示为使用100%的两倍,这意味着200%的虚拟核心使用率。但实际上,那将是一个内核在两个线程上共享其功率,然后这两个线程仅使用总CPU功率的一半。

因此,所显示的使用率数字top不能用于衡量CPU总工作量。

我还想知道超线程如何平衡真实内核上的两个虚拟。如果两个线程占用的周期数量不同,虚拟内核是否会“自适应”,以使两个内核都显示100%的负载,即使实际负载有所不同?


1
您了解操作员系统是否不了解超线程虚拟核心与物理核心之间的区别,对吗?
Ramhound13年

看起来如此,但这不是必须的吗?真实核心与虚拟核心的映射是简单的一对二映射。问题是如何衡量虚拟内核上的负载,该负载实际上是通过与实际内核上的另一个内核一起调度来实际更改其可用性能的。但是我认为所有数据都是可用的,问题是从哪些工具中可以获得正确的结果?
dronus

1
我只是喜欢一个负载度量,其中100%表示每个真实内核的每个周期都被使用。
dronus

1
简单地说:如何在给定的时间判断我的CPU是否有能力做进一步的工作,而又不减慢当前正在进行的工作?
dronus

1
@Ramhound,因此,如果我有一个具有8个逻辑核心的物理4核心处理器,并且平均负载为4.00,我的利用率是100%还是50%?
Buttle Butkus 2015年

Answers:


5

甲骨文公司的马丁·特格特梅尔(Martin Tegtmeier)去年写了一篇有趣的博客文章:https ://blogs.oracle.com/solaris/cpu-utilization-of-multi-threaded-architectures-explained-v2

简短的答案;超线程确实使top不能报告总体cpu-utilisation / cpu-idle百分比的功能。

在最坏的情况下,一个运行2个线程,每个内核100%利用率的2核4个虚拟内核CPU几乎会使CPU饱和。(取决于执行端口的使用情况;只有在cpu上使用完全不同的计算资源的线程仍可以运行,而不会影响当前线程的性能。)但是,在这种情况下,top仍将报告50%的空闲。



4

核心利用率与系统负载有很大不同。核心利用率仅显示核心在计算或等待指令的数量。它可以是100%,对应于CPU正在计算内容的任何给定时间。

但是负载是另一回事,通常通过测量负载来确定是否有任何进程必须等待任何资源。如果进程不等待任何资源,您将看到一个性能很好的系统。但是有时您会看到系统运行缓慢但CPU使用率较低。通常,这意味着某些进程正在等待资源而不释放CPU。对于这种情况,您不会看到很高的CPU利用率,但是系统可能会超出其容量。

在Linux系统中,平均负载是计算得出的值,用于衡量系统的整体性能。平均负载的值应该与并行计算资源进行比较,核心要具体。因此,如果具有4个物理核心的系统的平均负载为4或更大,我们可以肯定地说某些进程将等待资源。

CPU利用率是100%还是10%并不重要。平均负载可能高达200或300,在这种情况下,系统几乎没有响应。

在正常运行状态下,服务器的平均负载在长期内不应超过内核数。我认为短暂的峰值并不重要。您将在w输出中看到的3个数字是load av。持续1/5/15分钟。


0

我认为上述答案都不令人满意。

我认为我在以下链接上引用的文章很容易回答这个问题:http : //perfdynamics.blogspot.ch/2014/01/monitoring-cpu-utilization-under-hyper.html

引用:

HT的思想是在当前正在运行的应用程序停止运行时允许不同的应用程序线程运行;由于分支预测错误,流水线中的气泡等,要使之成为可能,必须有另一个端口或AS寄存器。启用HT后,该寄存器对OS可见。但是,操作系统(以及从食物链到您正在使用的任何性能工具的整个过程)现在认为可用处理器容量增加了一倍,即每个AS端口的CPU利用率为100%。

但是在后台,仍然只有一个执行单元:您在启用HT之前开始的单个物理核心。区别在于,它在2个AS端口之间以某种方式共享。单核如何在两个端口之间切换是非常复杂的,但从轮询队列的角度最容易理解。我在我的GCaP类中对此进行了详细介绍。

我进行的最佳情况下的测试表明,根据操作系统的不同,每个HT端口的繁忙平均不能超过75%,也不能占预期的200%总容量的150%。我之前提到的“缺失”的50%容量是一种幻想。英特尔声称,对于一般应用程序,期望值在120%到130%之间。

实际上,我非常确定操作系统可以在每个虚拟内核上达到100%,这是毫无疑问的。我刚刚做了一个:

mvn clean install -DskipTests -T 5

我可以向您保证,我的8个虚拟内核和4个物理内核都达到了100%的CPU利用率。而且我的机器上肯定没有8核。

长话短说,如果总CPU负载超过100%(最多),并且很可能准确地使用100%的物理核心,则可以假定以下情况。如果您将物理CORE 1分为操作系统CPU 1和CPU 2,那将是一种状态。在CPU 1上,您的总使用率为50%,在CPU 2上,您的总使用率为50%,在现实生活中,您很可能是在该CPU上施加了100%的总使用压力。您已将其最大化。

但是,当然,操作系统在其系统监视工具中不知道会给您带来幻想。从操作系统及其如何管理资源的角度来看,它只会相信这两个虚拟内核中的每个仍然空闲50%,因此,如果要运行的任务更多,它将尝试将它们均匀地分布在这两个内核上。因此,当您的CPU使用率超过100%时,在一段时间的CPU使用率中,总是有排队的工作要在该时间段内运行,而这些工作从未更改过,无法在CPU上进行时间分段。最终它会得到它,但是即使计划将它们运行,总会有一些线程实际上甚至没有运行。

谢谢

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.