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

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

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

现在,只要很多工人实际上并行执行构建了
与非常时相比,每个版本的性能都会显着下降
相同的构建将在一个工作程序中运行(并且没有其他任何运行
平行).

这是一个例子:

这个“构建矩阵”由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内存

每个VM:

> 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内存

有关如何对此进行排序或可能只是更好地识别根问题的任何提示
将受到高度赞赏.

谢谢!

最佳答案
您没有提到这些服务器上底层磁盘的内容,但这些类型的性能问题几乎总是与IO相关.当您运行多个构建而不是一个构建时,IO统计数据看起来是什么样的?

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

转载注明原文:并行运行多个VM时,VirtualBox性能下降 - 代码日志