在 Windows 的虚拟机中运行 Linux 的性能影响?

und*_*cat 6 windows linux virtualization

我想知道在 Windows 的虚拟机中运行 Linux 会对性能产生什么影响。我需要 Linux 的工作是使用 GCC 进行繁重且几乎不间断的代码编译。双启动看起来不是一个非常有吸引力的解决方案,所以我现在指望低 VM 开销(10-20% 对我来说没问题,但 50% 或更多是不可接受的)。有没有人试图衡量性能差异,有没有比较表?您建议使用哪种开销最低的虚拟机?

我的主机操作系统是 Win7,我有一个带有 VT-x 的现代 Core i7。

谢谢!

Dav*_*ett 5

警告:以下内容基于我的主观观察,而不是适当的客观测试。

某些负载模式的磁盘 I/O 将处于 10-20% 范围的顶端,可能会高一点,但不会接近您所说的 50%。您可以通过多种方式缓解 I/O 命中,包括:

  • 为 VM 提供足够的 RAM 供操作系统用作缓存(这意味着主机当然有足够的 RAM,否则它会饿死并开始交换自身和 VM)
  • 告诉 VM 管理器不要让任何分配给 VM 的 RAM 交换,如果它可能有帮助的话
  • 通过将 /tmp 和类似文件系统挂载为 tmpfs 文件系统,确保 VM 在 RAM 中托管临时存储。
  • 在虚拟机中正确选择磁盘文件系统和相关调整。如果所有代码和编译器输出也保存在其他地方,即在源代码控制和备份中,那么取消日志以减少编写活动。此外,如果您的文件系统是 ext2/3/4,如果您的构建过程很好(大多数,如果不是全部,都是),请使用 noatime 选项,如果无法使用 noatime(大多数发行版现在默认为 relatime,我认为)。
  • 同样,如果您的代码和输出被安全地复制到别处,请告诉您的 VM 管理器可以缓冲写入 VM 的虚拟磁盘。
  • 如果您对上述风险较高的选项(可能的延迟写入缓存,无 FS 日志)感到不安全,您可以调整构建过程以使用 RAM 进行临时存储,方法是尽可能使用 tmpfs 挂载 /tmp。
  • 如果可以,将 VM 的虚拟磁盘放在单独的驱动器上,这样如果它确实需要执行大量 I/O 操作,它就不会与主机操作系统和其他 VM 竞争太多。
  • 确保 VM 使用固定大小的虚拟磁盘。可增长磁盘会增加 IO 性能,有时会显着增加。

I/O 命中将在某种程度上使 CPU 命中相形见绌,尽管这里也有一些性能下降。但是,与 I/O 不同的是,您对此无能为力。使用现代 CPU 和可以利用 CPU 显式虚拟化支持的虚拟化产品,完全受 CPU 限制的操作的差异应该不超过几个百分点。尽量避免虚拟 SMP - 由于物理 CPU 时间的调度方式,这实际上可能比为 VM 提供单个 vCPU 慢。

使用模式你状态(恒编译循环)将这些性能命中会受到影响,但我相信你会失去大量的时间更少相比,这样你会与双启动的不便。如果您的 Windows 使用的 CPU 和 I/O 密集程度要低得多,即只使用办公应用程序而不是繁重的数据库工作或游戏等,您可能需要考虑将 Linux 作为主机运行,并将 Windows 运行在 VM 中。