Ruby在虚拟机上运行缓慢,具体取决于虚拟引擎

时间:2012-11-21 09:35:26

标签: ruby performance vmware virtualization kvm

我们切换到一个新的开发服务器并且经历过我们的测试套件需要两倍的时间。我们测试了数据库,文件系统等,但这些东西非常快,甚至比以前更快。

所以我们写了一个小红宝石基准测试(Fibonacci)并执行了几次(平均值低于以下):

time_start = Time.now
f = lambda { |x| x < 2 ? x : f.call(x-1) + f.call(x-2) }
f.call(35)
time = Time.now - time_start

puts "#{time.round(4)}s needed"

XEN之前的机器:6s

OpenVZ之后的机器:11,5

在两台计算机上安装了rvm Debian Squeeze ( - &gt;已编译) ruby​​-1.9.3-p194 。这些机器没有高负荷,内存也可以。

或多或少唯一的区别是虚拟化引擎。在生产中,我们使用VMware ESXi。基准测试需要 11s 。 我们使用KVM测试了另一台服务器,基准测试需要 2,5s


  • XEN机器:6s
  • 使用OpenVZ的机器:11,5s
  • 使用VMware ESXi的计算机:11s
  • 使用KVM的机器:2,5s

那么我们可以在虚拟化中改变什么来使我们的ruby更快?或者您还有其他想法可以解决问题是什么?

3 个答案:

答案 0 :(得分:1)

我刚刚在我们的ESXi 5系统上使用Debian Squeeze和一个使用Ubuntu Precise(服务器)进行了测试。在Squeeze上Ruby-1.9.3-p194必须在Ubuntu上编译而不是。但两个系统的结果是相同的:11.x秒。所以我认为我们也可以忽略内核版本并专注于虚拟化层。

答案 1 :(得分:1)

问题是rvm。现在这已经解决了!

https://github.com/wayneeseguin/rvm/issues/1326

答案 2 :(得分:0)

也许@martinseener正在做点什么。你可能想看看这个:
http://alisnic.net/blog/making-your-ruby-fly/

这个:
https://gist.github.com/1688857?utm_source=rubyweekly&utm_medium=email

基本上rvm正在编译没有优化标志的ruby。也许这就是问题?然而,我发布的链接更深入到补丁的更多加速​​,但基本修复是在用rvm编译ruby时启用优化标记。

在此进一步讨论:
http://www.reddit.com/r/ruby/comments/13mc3s/making_your_ruby_fly/