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

Fre*_*rez 6 cpu virtualization multithreading virtualbox starvation

我正在使用运行在具有48个CPU和250GB RAM的主机上的VirtualBox 5.1,我正在导入的虚拟机(来宾)最初有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?

Fre*_*rez 6

自从我发布这个问题以来,时间已经过去了,仅就存档而言,我将分享我的发现,希望它们可以为其他人节省时间。

事实证明,性能问题归因于VirtualBox的工作方式。尤其是操作系统和管理程序之间的关系。

最后,虚拟机(来宾OS)是主机的单个进程当您在虚拟机设置中修改CPU的数量时,它们将执行的操作是更改该进程必须模仿其他线程的线程数。CPU的。(至少在VirtualBox中)

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

  • 具有10个以上线程的单个进程
  • 运行数百个进程的模拟操作系统
  • 我的Java代码正在创建另一堆线程

所有这些共同导致设置使主机虚拟机进程饱和,我认为这是由于主机OS处理进程上下文切换的方式所致

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

在VM外部运行Java软件没有显示任何性能问题,它具有60多个独立线程,开箱即用。