首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向virtualbox添加更多内核会使应用程序从16个内核开始变得更慢

向virtualbox添加更多内核会使应用程序从16个内核开始变得更慢
EN

Stack Overflow用户
提问于 2015-04-09 15:55:53
回答 1查看 1.8K关注 0票数 6

目前,我正在一个有64个核心的服务器上测试一个应用程序。此服务器安装了virtualbox,最多可使用32个核心,但不能使用更多内核(这个限制由virtualbox提供)。由于我使用mininet来测试我的应用程序,所以我需要根权限来执行它。我在服务器上没有根权限,但在VM中。所以我的设计是:

  • 主机有64个内核并安装了ubuntu。
  • 带有ubuntu的virtualbox VM有1-32个核心
  • 我的应用程序运行在16个小型主机上,每个主机都在运行一个使用多播和单播相互通信的程序,但目前还没有太多的请求。开始后,每个主机大约有5次请求。延迟3秒开始,以避免开始时出现瓶颈。
  • 我的应用程序使用多个线程,但主机上的每个应用程序实例都独立于其他应用程序实例。
  • 我的应用程序使用python的APScheduler,并且完全用python编写。

我认为用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个核开始呈指数增长?

EN

回答 1

Stack Overflow用户

发布于 2015-10-02 19:59:28

一旦程序开始在处理器套接字边界上运行,这是常见的行为。通常,当应用程序开始在驻留在不同物理处理器上的核心上执行时,您将开始看到不可预测的计时行为。

假设您的64核心机器有四个处理器套接字,每个处理器有16个核,并且假设您的调度程序是一个正常的调度程序,试图将应用程序的线程分组在同一个套接字上,那么应用程序应该会看到1到16个内核之间的并行加速,但是当它使用超过16个内核时,它将开始运行糟糕,因为其中一些内核必须驻留在单独的套接字上。

对于普通机器和虚拟化机器来说都是这样,但是如果虚拟机的调度程序不知道这些套接字边界,那么虚拟机很可能会添加另一层不可预测性。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29543339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档