并行运行多个 VM 时 VirtualBox 性能下降

Sve*_*chs 3 performance virtualbox

在 Travis CI ( http://travis-ci.org ),我们使用 VirtualBox VM(通过 Vagrant)来运行 Ruby 社区的测试。

在我们的工作服务器上,我们有多达(最多)N 个并行进程在 N 个 VM 中并行运行 N 个测试套件,即一个工作进程一次在一个 VM 中运行一个测试套件,但其中 N 个同时运行。

现在,一旦许多 worker 实际并行执行构建,与在单个 worker 中运行完全相同的构建(并且没有其他并行运行)相比,每个构建的性能将显着降低。

下面是一个例子:

这个“构建矩阵”由 20 个单独的构建组成:

http://staging.travis-ci.org/#!/svenfuchs/rails/builds/1906

在运行时,有 10 个工作人员在运行,因此此构建开始时在 10 个工作人员(和 VM)中并行执行 10 个单独的构建。这个构建就是其中之一,完成了大约 2 个小时:

[请参阅上页列表中的最后一个链接,我只能发布2个网址]

当没有其他构建并行执行时,完全相同的构建只需要大约 20 分钟。这是一个例子:

http://staging.travis-ci.org/#!/svenfuchs/rails/builds/1927

显然,这种性能下降是我们需要解决的问题,但我们不确定从哪里看。

测试套件基本上执行 Ruby 进程,这些进程可能会退出并产生其他几个 Ruby 进程,每个进程都在代码库上执行单元测试。其中一些攻击了 MySQL、Sqlite3 和 Postgres 等数据库,但我们也注意到完全不命中任何数据库的测试也出现了同样的降级。

托管这些进程和 VM 的工作服务器如下所示:

  • Linux 2.6.32-31-server #61-Ubuntu SMP Fri Apr 8 19:44:42 UTC 2011 x86_64 GNU/Linux
  • 12x (Hexacore) Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
  • 12 GB 内存

每个虚拟机:

  • Linux lucid32 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 21:21:01 UTC 2011 i686 GNU/Linux
  • 1x Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
  • 1 GB 内存

任何有关如何解决这个问题或更好地识别根本问题的提示都将受到高度赞赏。

谢谢!

EEA*_*EAA 8

您没有提到这些服务器上的底层磁盘是什么样的,但这些类型的性能问题几乎总是与 IO 相关。当您运行多个构建与仅运行一个构建时,IO 统计数据是什么样的?

此外,通过使用 Xen 或 VMware ESXi 之类的东西而不是 VirtualBox,您可以从硬件中获得更好的性能。