VirtualBox能够支持的CPU数量有上限吗?

6
我正在使用VirtualBox 5.1在一台有48个CPU和250GB RAM的主机上运行,我要导入的虚拟机(客户机)最初有2个CPU和4GB RAM。
在这台机器中,我正在运行一个使用Java启动动态线程执行某些任务的进程。
我使用以下配置运行它:
在我的笔记本电脑上的整个过程(2个CPU / 4GB RAM)~ 11秒
在服务器上的虚拟机中相同的程序(15个CPU和32GB RAM)~ 45秒
在服务器上的虚拟机中相同的程序(20个CPU和32GB RAM)~ 100+秒
在服务器上的虚拟机中相同的程序(10个CPU和32GB RAM)~ 5+秒
起初,我认为我从Java管理线程的方式存在问题,但经过多次测试后,我发现虚拟机拥有的CPU数量与其性能之间存在关系,最大值为10,在此之后,机器的整体性能会变慢(CPU饥饿?)。
虚拟机运行Oracle Enterprise Linux 6.7,主机运行Oracle Enterprise Linux 6.9。
在Virtual Machine文档中,我没有找到任何关于CPU数量的硬限制。 是否需要设置某些设置才能在VirtualBox实例中启用/利用超过10个CPU?

3
不能仅仅说一个“有48个CPU的主机”,因为它有多个物理CPU包(插槽),所以它是非一致性内存访问系统。根据你在Java中运行的任务,可能会出现一些限制可扩展性的影响:在低内存强度的纯计算任务中,可扩展性会很好,而在活跃地使用内存时,如果程序没有考虑到NUMA效应,则可扩展性将不是线性的。因此,问题可能不在于您的VM解决方案,而在于您的Java动态程序,它在任何VM或实际的NUMA下都具有有限的可扩展性。 - osgx
另外,您在计时时是否有任何VM主机(或其他VM)的用户?请描述您的Java任务,而不是VM。 - osgx
系统上只有我一个用户,没有其他用户或进程在运行。 - Frederick Álvarez
它在主机上的表现如何? - TinyTheBrontosaurus
2个回答

8
自我发帖以来,一些时间已经过去了。为了档案记录,我想分享我的发现,希望能帮助其他人节省时间。
原来性能问题是由VirtualBox的工作方式造成的,尤其是操作系统和虚拟机监控器之间的关系。
最终,虚拟机(客户操作系统)对于主机来说是一个单独的进程,当您在虚拟机设置中修改CPU数量时,它们将改变该进程需要模拟其他CPU的线程数。(至少在VirtualBox中是这样)
话虽如此,当我将10个以上的CPU分配给VM时,我得到了以下结果:
1. 一个具有10多个线程的单个进程 2. 运行数百个进程的模拟操作系统 3. 我的Java代码又创建了一堆线程
所有这些加在一起导致设置使主机虚拟机进程饱和,我认为这是由于主机操作系统处理进程上下文切换的方式所导致的。
在我的服务器上,虚拟机硬限制为7个虚拟CPU,如果添加了更多,Java软件的性能将会变慢。
在VM外运行Java软件并没有显示出任何性能问题,它可以使用60+个隔离线程正常工作。

我有类似的经验:https://forums.virtualbox.org/viewtopic.php?f=7&t=86041 在重负载下,具有8个vCPU的虚拟机表现不佳,理论上可以运行超过8个线程,将vCPU增加到20后,虚拟机的表现甚至更差。主机大多数时间都在运行此具有12个物理核心和启用HT的VM。使用8个vCPU并在VM中达到100%的负载时,主机的负载为2,现在使用20个vCPU,负载更高,但主要是上下文切换。每秒高达600,000次。也会尝试使用较少的vCPU。 - Thorsten Schöning
有些日子,我和VirtualBox开发总监互换了几封电子邮件,在其他事情之中,他告诉我,VirtualBox CPU数量有一个硬性限制,即30个。他不建议我超过这个限制而且VirtualBox与HT不兼容,并且CPU数量必须基于真实的核心而不是虚拟核心。此外,VirtualBox并没有针对服务器负载进行优化(管理层没有为此分配时间片),它主要用于桌面虚拟化。无论如何,如果你有机会,请看一下OVM,它更适合服务器方面的东西 :) - Frederick Álvarez

0

我们的配置几乎和你们一样(在2个NUMA节点上运行的48核虚拟机)。

我最初将虚拟机中的核心数量设置为Virtualbox支持的最大值(例如32),但很快意识到当VM处于负载状态时,两个NUMA节点中的一个总是处于空闲状态,而另一个则保持中等负载。

长话短说,一个进程只能分配给单个NUMA节点,Virtualbox使用多个线程运行一个用户进程... 这意味着我们仅限于使用24个核心(实际上考虑到这是一个具有超线程技术的12核CPU,使用的核心甚至更少)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接