我认为上述答案都不令人满意。
我认为我在以下链接上引用的文章很容易回答这个问题: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上进行时间分段。最终它会得到它,但是即使计划将它们运行,总会有一些线程实际上甚至没有运行。
谢谢