目前,我正在一个有64个核心的服务器上测试一个应用程序。此服务器安装了virtualbox,最多可使用32个核心,但不能使用更多内核(这个限制由virtualbox提供)。由于我使用mininet来测试我的应用程序,所以我需要根权限来执行它。我在服务器上没有根权限,但在VM中。所以我的设计是:
我认为用32个内核运行会是最好的。但当我这么做的时候,一切都开始挂起。我在APScheduler中得到超时,系统负载非常高。
所以我在1到32之间的每一个核心上都试过了。下面是一些示例:
1芯

4芯

8芯

12芯

16芯

20芯

23芯

27芯

32芯

X轴在半秒内,y acis是top -b -n 1报告的CPU负载(百分比)。我运行了这个应用程序,每个核心计数大约10分钟。蓝线是我的应用程序的平均CPU负载。红线是我的应用程序,绿线是整个系统的负载。
正如你所看到的,负载会降低到大约16个核心。当使用超过16个核心时,它会变慢,而从大约23个核心开始,它会变得非常慢。即使这样慢,记录CPU负载的进程甚至不再被调用。这就是为什么最后的图表更短的原因。
有谁知道会有什么问题吗?这是已知的virtualbox缺陷吗?这是个小型的问题吗?还是linux问题?我怎么知道哪一部分是造成极端负荷的原因?
如果你需要更多的信息,请写评论,我会编辑这个问题。
客人系统的负荷从未超过50%,所以我认为这不是问题。
VMWare会更快吗?
编辑--我回顾了这些图表,发现当从1到2到3到. 16核时,描述我的应用程序平均CPU负载(在所有迷你主机上的所有实例上的平均值)的蓝线甚至越来越高。但是从1到16内核,我的应用程序的cpu负载增长非常缓慢。虽然这会增加整个系统负载(我认为这是有意义的,因为ubuntu可以在不同的内核上完成它的任务,只要没有共享的资源,就会更快)。
那么,为什么平均增长呢?为什么从16个核开始呈指数增长?
发布于 2015-10-02 19:59:28
一旦程序开始在处理器套接字边界上运行,这是常见的行为。通常,当应用程序开始在驻留在不同物理处理器上的核心上执行时,您将开始看到不可预测的计时行为。
假设您的64核心机器有四个处理器套接字,每个处理器有16个核,并且假设您的调度程序是一个正常的调度程序,试图将应用程序的线程分组在同一个套接字上,那么应用程序应该会看到1到16个内核之间的并行加速,但是当它使用超过16个内核时,它将开始运行糟糕,因为其中一些内核必须驻留在单独的套接字上。
对于普通机器和虚拟化机器来说都是这样,但是如果虚拟机的调度程序不知道这些套接字边界,那么虚拟机很可能会添加另一层不可预测性。
https://stackoverflow.com/questions/29543339
复制相似问题