performance - Win10下VirtualBox性能不佳

标签 performance windows-10 virtualbox

我们有一个构建系统,直到几周前,每个目标设备的完整构建大约需要 1.5 小时。

在某些时候,该时间已增加到约 3.5 小时,因为我们为大约九个不同的目标构建,因此我们的构建时间从 14 小时增加到约 32 小时。

我们认为我们终于确定了问题所在。在我的 Win10 机器(客户机是 Ubuntu 16.04)上运行的 VM 被复制到 Win7 机器。虚拟机在其设置、运行的磁盘类型等方面完全没有变化。该机器的配置也非常相似(相同的 CPU、磁盘等)。

As an aside, I was originally running VirtualBox 5.x while the Win7 box had 6.0.12 but I don't think that's the issue since an upgrade to 6.0.14 on my box made no change. Even moving the VM disk across to an SSD on my box gave little relief, meaning it's almost certainly CPU bound.

运行 VM 的 Win7 机器在大约 1.5 小时内完成每个构建。

然后,我们对该框所做的唯一更改是就地升级到 Win10,您瞧,现在每个构建需要 3.5 小时。

一些研究表明,有一些人在使用 VirtualBox/Win10 作为主机和 guest 时遇到问题,但给出的建议(增加视频内存、重新平衡主机和 guest 之间的 CPU/内存、启用/禁用视频加速)等)似乎没有解决任何问题。

我们正在考虑一些想法,例如:

  • 在裸机上运行 Ubuntu,但这显然使得移动虚拟机变得更加困难;
  • Linux 主机上运行这些 Ubuntu guest ,因此,假设问题是 Win10,我们将获得性能改进,同时仍允许虚拟机移动性;
  • 坚持使用 Win10,但使用 VMWare Player 而不是 VirtualBox(目前正在测试这是否可行);
  • 将构建盒恢复到 Win7,但我认为 IT 部门不会对该提议感到满意(也就是说,获得批准并不是雪花般的希望:-))。

有人对如何继续前进有任何其他想法吗?

最佳答案

我们一直在进行一些调查,结果发现罪魁祸首是 Windows 10 中引入的 Spectre2/Meltdown 缓解措施。

我们从一些网站发现,影响各不相同,但对构建服务器场和开发人员盒子的伤害最大(例如,请参阅 here):

enter image description here

当使用 Gibson Research 关闭缓解措施时 InSpectre工具(当然,为了安全起见,在对机器进行气隙设置之后),每个目标的构建时间再次减少到一个半小时。

现在我们只需要弄清楚如何继续推进。我们很可能必须在已经准备好源代码的气隙机器上进行构建。

<小时/>

一些进一步的细节。我们所有的开发机器都是 CPUID 306c3 Haswell,这是受到缓解措施影响特别严重的机器。我们将在更现代的处理器 CPUID 810f10(AMD Ryzen 5)上对其进行测试,看看影响是否较小。

如果是这样,我们可能会选择购买其中几个。无论哪种情况,此答案都将根据结果进行更新。

<小时/>

希望这将是最终更新。尽管我们最初通过禁用 Windows 主机中的 Spectre/Meltdown 缓解措施成功地恢复了速度,但考虑到被黑客攻击的可能性,这并不是一个真正可行的解决方案。

进一步的调查似乎表明,虽然 VirtualBox 在这种环境中受到影响,但 VMware 却没有。因此我们开始寻找一些东西来解释这种差异。

最终,我们遇到了this thread其中描述了一个类似的问题,并且在尝试其中提出的解决方案之一时,我们发现我们可以在不影响主机操作系统的情况下恢复速度。

解决方案是在虚拟机关闭(而不是挂起)时运行以下命令:

vboxmanage modifyvm VM_NAME --spec-ctrl on

其中 VM_NAME 应替换为您的实际 VM 名称(通过 vboxmanage list vms 获取)。然后,重新启动虚拟机后,它应该再次以正常速度运行。

不幸的是,这意味着我为整个开发团队购买新 Threadripper PC 的商业案例现在已经崩溃了。该死的互联网:-)

关于performance - Win10下VirtualBox性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58687159/

相关文章:

android - 为什么单击后退按钮时,许多Android应用程序中的闪光灯屏幕没有关闭?

java - 为什么 Java String.indexOf() 优于用户定义类中实现的相同逻辑?

c# - C# 计时器的密集停止/启动

Python 使用正确的设备名称在 Windows 10 中显示 OpenCV 视频

virtual-machine - QEMU 和 VirtualBox 有什么区别?

c++ - 将代码块优化为循环

python-3.x - 尝试在 Windows 10 高 DPI 显示器上解决模糊的 tkinter 文本 + 缩放,但担心我的方法不是 Pythonic 或不安全

Windows 10 相当于 LaunchAdvancedAssociationUI

android - 从 Android 模拟器访问本地 VirtualBox 上的 Node.js

windows - Docker 导致虚拟机失败 - 黑屏