四核主机具有超线程,在 VirtualBox 中配置多少个处理器?

四核主机具有超线程,在 VirtualBox 中配置多少个处理器?

我有一个四核 i7 处理器,具有超线程功能(8 个逻辑核心),当我将虚拟机配置为使用 8 个处理器时,VirtualBox 向我发出警告,说我只有四个核心(这是真的),这可能会导致性能问题。但超线程是一项硬件功能,因此操作系统可以看到 8 个核心,并向所有 8 个核心发送指令。如果将其设置为 4 会导致虚拟机使用 2 个核心(4 个线程)而不是 4 个同时线程(在所有 4 个核心上),该怎么办?我收到的警告是否考虑到我的机器具有超线程功能?

答案1

根据克里斯蒂安韦德伯格我想说你应该使用你拥有的所有逻辑核心。
此外,我使用相同的 CPU(i7,4 CPU 带 HT)进行了自己的基准测试,证实了多线程应用程序的性能提升。如果客户机 PC(Win. 8.1 x64)使用所有 8 个核心,则主机 PC(Ubuntu x64)也会使用所有 8 个核心。

在此处输入图片描述

我还比较了单线程应用程序的性能。在这两种情况下,我测量的值相同,因此使用超过物理(但不超过逻辑)数量的 CPU 不会造成任何损失。
在这里您可以看到,客户机 PC 上的 1 个 CPU 满载将导致主机 PC 上的 1 个 CPU 负载。

在此处输入图片描述

答案2

我发现,尽管在 VirtualBox 中(我的经验是使用 5.1.0 版本)可以(而且可能更快)根据逻辑处理器为虚拟机分配 vCPU,但在高负载运行时,客户操作系统内部可能会出现问题。在我的案例中,8 核 Ubuntu 16.04 主机(报告 16 个逻辑处理器)上的 Windows 2012 R2 VM 有 12 个 vCPU,在高 CPU 负载期间会出现 BSOD,并显示 DPC_WATCHDOG_VIOLATION 错误消息。使用osronline.com显示 e1g6032e.sys(Windows 原生的 Intel 100/1000 网络驱动程序)是导致违规的原因。

这让我相信,当根据逻辑处理器容量分配 vCPU 并长时间以高负载运行虚拟机时,客户操作系统内部的计时会受到负面影响。在我的例子中,Windows VM 内部几分钟的 100% CPU 负载会导致 BSOD。将 vCPU 数量减少到 8(对应于主机的物理核心数量)后,Windows VM 在类似的高负载情况下不再出现 BSOD。在线文档VirtualBox 说应该这样做,但没有提供任何理由。

在我的环境中,还有另外两个 Ubuntu VM 在运行,每个都有 8 个 vCPU。然而,当 Windows VM 出现 BSOD 问题时,它们的负载很小。

答案3

我收到的警告是否考虑到我的机器具有超线程?

是的。如果您将虚拟机中的核心数量设置为大于实际拥有的数量,Virtual Box 中的任务调度过程将过度使用 CPU 资源,从而导致严重的性能问题。

至于在核心之间分配负载,这是主机操作系统的工作,并且应该以正确的方式运行。

答案4

这是您机器的原始 VM 吗?如果您克隆 VM 并将其移动到另一台机器和/或更改设置,有时您会收到奇怪的错误。
我建议下载并安装最新版本的 Virtual Box 和最新扩展。

我已经提交了所有八个核心,并且在我的 i7 运行装有 Ubuntu 13.10 的 VM 时没有收到该错误。

相关内容