如何解释虚拟服务器上的系统负载?

我知道linux'top'报告的系统负载是等待CPU时间的平均进程数量,因此在解释负载时应考虑CPU核心数量。 因此,4核心系统上的4负载rougly等于单个核心系统上的负载1。

我的问题是:对于CPU内核不直接映射到处理器的虚拟服务器,情况也是这样吗?

在虚拟化环境中,从主机的angular度来看,guest虚拟机的虚拟CPU只是执行的进程(或线程)。 不需要在单独的cpus上运行,或者与主机cpus的确切数量一起运行。

虽然如果模拟客户虚拟CPU的任务与主机CPU一对一地运行,那么只有一个执行线程绑定到一个主机CPU,那么它有一个很大的优势:它使得guest虚拟机来优化其任务,就好像它在非虚拟化环境中一样。


负荷的问题实际上是与此不同的事情。 加载意味着可以在任务计划中获得时间片的可运行进程的平均数量。 简单来说,这意味着:“如果一个简单的单线程任务试图分配如此之多的cpu,就可以获得1 / cpu负载”。 因此,如果负载是5,那么“平均”进程可以获得CPU时间的20%。 它在单个CPU上,用于单线程进程。

这些cpus是否虚拟并不重要。 在大多数虚拟化场景中,主机不知道客户进程的任何信息,他只能看到客户的cpus作为线程。 但是它不会改变系统负载的定义,不pipe它是虚拟系统还是主机。


从实际的angular度来看,这个问题的重要性是有限的,因为专业制度官员面临的实际问题,大都只是一些与cpu有关的问题。 在大多数情况下,问题来自可configuration性,自动化和系统资源的冗余可用性。

尽pipe也有非常有趣的例外(主要在学术或研究/开发领域),但是从这些问题的angular度来看,虚拟化目标解决(或使我们的生活更幸福)。