VirtualBox:分配比物理CPU核心数量更多的虚拟CPU核心是一个坏主意吗?


40

我想知道,由于我具有支持超线程的 CPU,因此分配比物理CPU内核数量更多的虚拟CPU内核不是一个好主意,因为以下警告提示:

VirtualBox警告

文字记录:

与主机系统上的物理CPU数量相比,分配给虚拟机的虚拟CPU数量更多。这可能会降低虚拟机的性能。请考虑减少虚拟CPU的数量。

有人可以对此主题进行推理吗?

编辑1:

有问题的CPU是Intel Core i7-4700HQ,Ark IntelCPU Benchmark

编辑2:

假设没有过时的硬件,例如HDD(而不是SSD)和/或Low RAM(此处vm.swappiness为16GB,最低为该VM 4GB),依此类推。


2
该警告是相当准确的警告,除非实时性能不重要或虚拟机上的负载很小(软件),否则不应忽略该警告。请参阅那么什么是逻辑cpu核心(与物理cpu核心相反)?
agc

正如警告所言。实际上,虚拟机中的CPU较少时,事情可能会更快。
Rui F Ribeiro

您永远不应进入红线。在4个实际的启用HT的内核CPU上使用4个“内核”是可以的。对于RAM,即使绿色部分超出了RAM的50%,RAM也应该这样做。
cylgalad '16

在Virtualbox中,“核心”是所有线程,因此,如果您的CPU具有4个核心和超线程,则就像8个“核心”,因此,如果您单独运行一个虚拟机,则实际上可以在4个虚拟核心中设置多达4个虚拟核心。那就是我一直在做的事,效果很好。
cylgalad '17

我要证明什么?红线对我来说是超过4个“核心”,我从不超越,也从未同时运行2个VM。如果您更愿意通过将所有CPU都分配给VM来使PC崩溃的风险,并且在VM之外不执行任何操作,则可以。
cylgalad '17

Answers:


30

硬件/操作系统/软件

主机:Linux Mint 18 Cinnamon 64位(已完全更新);内核版本4.4.0-47-通用

访客:Windows 8.1 Pro 64位(已完全更新)

处理器Intel Core i7-4700HQ(6MB高速缓存,4个物理核心或8个使用超线程的处理器),CPU基准测试

VirtualBox:版本5.1.10 r112026(Qt5.5.1)

来宾添加:已安装且最新

基准测试工具1WinRAR版本5.40最终64位

基准测试工具2VeraCrypt版本1.19最终64位


制备

在这两种情况下,我在启动后都等到CPU,RAM,磁盘驱动器稳定在零点附近。


方法

  1. 将原始虚拟机克隆为两个相同的虚拟机。
  2. 我已经第二遍了,因为禁用重新启动的防病毒指出了该答案的底部,并且在两种情况下都将WinRAR从Beta版更新到了Final版。
  3. 我已经完成了前面指出的相同准备工作。
  4. 虚拟机在前台运行,没有运行任何其他占用CPU时间的应用程序,出于测试目的,我已禁用了我可以做的一切。
  5. 为了包括系统内部或外部的潜在缓存,因此,我两次运行了相同的测试。好处几乎没有。

结果

WinRAR

  1. 4核=> 7.5分钟(时间越短越好)

    具有4个核心的WinRAR

    启用了4个内核的WinRAR,在7.5分钟内处理了1.5GiB 。

  2. 8核=> 4.5分钟(时间越短越好)

    具有8个核心的WinRAR

    启用了8个内核的WinRAR ,可在4.5分钟内处理1.5GiB 。


VeraCrypt

  1. 4核心=>速度2.6 GiB / s(速度越高越好)

    启用了4个核心的VeraCrypt

    VeraCrypt具有4个内核,硬件加速AES(AES-NI)速度为2.6 GiB / s。

  2. 8核=>速度3.9 GiB / s(速度越高越好)

    启用了8个核心的VeraCrypt

    VeraCrypt具有8个内核,硬件加速AES(AES-NI)速度为3.9 GiB / s。


结论

我可以根据需要运行尽可能多的测试。但是我认为,如果这两个是相当复杂的压缩测试,而第二个是一组相当复杂的加密测试,那将是重点。

两种基准都显示出明显的差异。我没有理由相信,由于我遵循了相当严格的准备和方法,因此它们的结果是不准确的,而且这些测试已经在RAM中进行,以排除I / O瓶颈。以我的观点,问题中提到的警告可能适用于某些情况,但肯定不是全部。与您分享了这些非常出色的结果之后,我相信您同意我的看法,在具有最新VirtualBox版本的具有超线程功能的现代CPU上,不应警告这个警告。可以肯定的一件事:在您决定永久应用此设置之前,请不要以我为单词而在您自己的条件下对其进行测试。


您是否在更改核心的同一VM上运行它,还是在两个不同(但相同)的VM上运行它?如果是同一台VM,您是否随后又按其他顺序重试以排除客户机OS缓存算法的可能影响?
通配符

尝试运行实际的CPU刻录测试以获取乐趣。
cylgalad '17

像prime95一样,至少需要一个小时。并尝试同时在主机上浏览Web。如我所说,如果您不对主机执行任何操作或一次不运行一个以上VM,那是可以的。如果那很糟糕,则该限制将在Virtualbox中强制执行,而不是发出警告。
cylgalad '17

您可以尝试另一件事,但可能会更困难。从Scratch VM安装gentoo或Linux,并检查密集编译时情况如何。或尝试在VM中构建Chromium。
cylgalad '17

@Vlastimil完全同意。就我而言,我使用VM进行C ++编译(这是cpu绑定的任务),而我拥有16核cpu的唯一原因是能够更快地进行编译。该警告完全是胡说八道,没有适当的解释,并且导致这个错误的结论,例如“在VM中使用更少的CPU,事情实际上可能会更快”
Pavel P

16

作为OS设计师,我完全同意测量结果。关于该主题的其他地方产生的胡说八道令人难以置信。

可以将逻辑核心的数量视为硬件可以执行的并行线程/进程的数量。这可以通过复制(例如)CPU内核的寄存器和指令指针来实现。现在,CPU核心本身决定使用哪个线程(指令指针)。它将决定使用其他线程,因为当前线程的指令在缓存中不可用,并且需要从例如内存或L3缓存中获取。此机制将使指令/秒或CPU性能提高10%-30%。

如果您仅使用一个线程运行一个应用程序,则将无法获得这种好处,但是,如果您在旧的HT Pentium上运行了两个高负载的应用程序,那么您将可以获得该好处。当然,对于具有多个线程的应用程序也是如此。我的Linux系统具有200个线程,因此始终存在一些取决于实际负载的好处。所有这些说明均适用于没有虚拟化的情况。

Virtualbox仅限制了每个虚拟机(VM)可以并行运行的线程数,但是主机进程调度程序将更改逻辑处理器,从而更改VM进程在其上动态运行的物理处理器。如果您在VM上运行高负载应用程序,则其他逻辑核心将为您带来10%-30%的相同收益。负载可以是单个多线程应用程序,也可以是一组不同的应用程序。

在具有VT-x或AMD-V的现代系统上,最大化逻辑核心的数量不会造成性能损失,因为同时运行更多虚拟机也不会造成明显的性能损失。您的限制是CPU芯片的性能,因此您无法同时在3个VM上渲染视频而不降低每个VM的速度,因为它们必须共享相同的物理CPU。

如果您在具有所有逻辑核心的VM上渲染视频,则主机系统可能会变得无响应,但如果您确实在主机上运行该渲染应用程序,则可能会遇到几乎相同的问题。至少在VM中,您可以选择,您可以通过将最大CPU负载限制为80%-90%或通过减少内核数量来解决此问题。


0

我最好的两分钱是永远不要使用所有内核/线程,只让一两个主机。

因此,在您的情况下,请给guest虚拟机一个六核,而不要一个八核(因为主机上只有8个线程)。

如果主机上的可用线程数(不要与内核混淆)是:

  • 如果<2,最好不要使用虚拟机
  • 如果为2,请在单核模式下使用虚拟机,否则请冒险并使用双核来宾
  • 如果> 2,则最好使用公式

对于两个以上的线程,我倾向于使用以下公式:

  • N =主机的线程数
  • M =我要运行的并发虚拟机数量(假设余额相等,每个来宾的来宾核心数量相同)
  • 如果主机只有4个或更少的线程,则公式=(N-1)/ M
  • 如果主机具有4个以上的线程,则公式=(N-2)/ M

我的经验告诉我,不超过此公式限制会更加顺畅,风险也较小。

警告:在运行来宾系统时,不允许更改来宾系统核心数,但是可以将CPU使用率从100%降低到75%或50%,来宾系统可能会失败。

因此,有时我倾向于在8个线程的主机上为两个虚拟机提供6个6个核心(公式的数量就好像只有一个虚拟机而不是两个虚拟机),但是将它们限制为CPU速度的50%(因此两个虚拟机可以使用1个/ 2的时间),但只有当我知道来宾将运行具有大于并行比率的应用程序时,例如图像比较/联合等。


1
您自己制定了这些公式吗?还是可以添加引用?
LinuxSecurityFreak '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.