是否存在 VirtualBox 可以裸露的最大数量 CPU?

Is there a maximum number of CPU's that a VirtualBox could bare?

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

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

我运行它的配置如下:

整个过程在我的笔记本电脑(2 CPUs/4GB 内存)~ 11 秒

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

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

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

首先我认为我管理来自 Java 的线程的方式存在问题,但经过多次测试后我发现 CPU 的数量之间存在关系虚拟机有和它的性能,最大值是10,之后机器整体性能变慢(CPU饥饿?)

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

我在虚拟机文档中找不到关于 CPU 数量的任何硬性限制。

在一个VirtualBox实例中是否有设置需要设置成enable/take超过10个CPU的优势?

自从我发布这个问题以来已经过去了一段时间,只是为了存档我 将分享我的发现,希望它们能帮助其他人节省时间。

事实证明,性能问题是由于 VirtualBox 的工作方式造成的。尤其是OS和hypervisor的关系。

最后的虚拟机(来宾 OS)是主机的 单进程 并且 当您修改 CPU 在虚拟机设置中他们将做的是更改进程必须 模拟 其他 CPU 的线程数。(至少在 VirtualBox 中)

话虽如此,当我为 VM 分配 10+ CPUs 时,我得到了:

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

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

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

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

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

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

长话短说,a process can only be assigned to a single NUMA node,Virtualbox 运行一个用户进程和多个线程...这意味着我们只能使用 24 个内核(考虑到这是一个 12-核心 cpu 与超线程)。