VirtualBox可以有最大数量的cpu吗?

时间:2017-06-20 01:07:46

标签: multithreading virtualbox cpu virtualization starvation

我正在使用运行在具有48个CPU和250GB RAM的主机中的VirtualBox 5.1 我正在导入的虚拟机(guest虚拟机)最初有2个CPU和4GB RAM。

在这台机器内部,我正在运行一个带有Java的进程,它启动动态数量的线程来执行某些任务。

我使用以下配置运行它:

我的笔记本电脑的整个过程(2CPU / 4GB RAM)~11秒

服务器中虚拟机中的相同程序 (15个CPU和32GB RAM)~45秒

服务器中虚拟机中的相同程序 (20个CPU和32GB RAM)~100 +秒

服务器中虚拟机中的相同程序 (10个CPU和32GB RAM)~5秒秒

我首先想到我是如何从Java管理线程的,但经过多次测试后我发现虚拟机的cpus数量与其性能之间存在关联,最大值为10之后,机器的整体性能会降低(cpu饥饿?)

虚拟机运行Oracle Enterprise Linux 6.7,主机运行Oracle Enterprise Linux 6.9

我在VM文档中找不到有关CPU数量的任何硬限制

是否需要设置一个设置以启用/利用VirtualBox实例中的10个以上的CPU?

2 个答案:

答案 0 :(得分:5)

自从我发布这个问题以来,时间已经发生了,仅仅是为了存档我 将分享我的发现,希望他们可以帮助节省时间给别人。

事实证明,性能问题是由于VirtualBox的工作方式 特别是OS和管理程序之间的关系。

最后的虚拟机(客户操作系统)是主机的单个进程当您修改VM设置中的CPU数量时,他们将要做的是更改进程必须模拟其他CPU的线程数。(至少在VirtualBox中)

话虽如此,当我为VM分配了10多个CPU时,我最终得到了:

  • 一个包含10个以上线程的进程
  • 运行数百个进程的模拟操作系统
  • 我创建了另一堆线程的Java代码

所有这些共同导致设置饱和主机VM进程,我认为这是由于主机操作系统处理进程上下文切换的方式

在我的服务器上,硬限制是7个虚拟CPU,如果我添加的数量超过了它会降低Java软件的性能

在VM之外运行Java软件并没有显示出任何性能问题,它开箱即用,包含60多个隔离线程

答案 1 :(得分:0)

我们的设置几乎与您相同(Virtualbox在2个NUMA节点上的48核计算机上运行)。

我最初将内核数设置为Virtualbox支持的最大核数(例如32),但很快意识到,当VM处于负载状态时,两个NUMA节点之一始终处于空闲状态,而另一个处于中等负载状态。< / p>

长话短说,a process can only be assigned to a single NUMA node,Virtualbox使用多个线程运行一个用户进程...这意味着我们仅限于使用24核(考虑到这是12核cpu,在实践中甚至更少)带有超线程)。