2012-11-21 54 views
5

我们切换到新的开发服务器,并体验到我们的测试套件需要两倍的时间。我们测试了数据库,文件系统等,但这些东西速度相当快,甚至比以前更快。与OpenVZ的6S后根据虚拟化引擎,Ruby在虚拟机上运行缓慢

机:11,5

所以我们写了一个小红宝石基准测试(斐波那契),并执行了几次(平均低于):

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

在两台机器上是Debian的挤压安装RVM( - >编译)红宝石1.9.3-P194。这些机器没有高负载,内存也可以。

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


  • 机与XEN:6S
  • 机与OpenVZ的:11,5s
  • 机与VMware ESXi的:11S
  • 机与KVM:2,5s

那么我们可以通过虚拟化改变我们的红宝石速度?或者你有另一个想法是什么问题?

+0

野趣的问题,但在我看来,这是很难在不同的虚拟化技术来比较的基准! – Robin

+0

@Sam:不幸的是,我们没有其他想法可以解决什么问题...... – MMore

+0

我会在所有系统上运行非Ruby的CPU基准测试,以确保问题与Ruby相关。所有机器都运行64位吗? – claasz

回答

1

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

+0

我刚刚在Ubuntu下用KSH测试了相同的递归斐波那契计算。以0.01s运行。我发现“缓慢”的ruby必须通过rvm和/或由rvm编译ruby本身来做些事情。我刚刚删除了“rvm remove ruby​​-1.9.3-p194”后跟一个“rvm implode”的红宝石。然后重新登录并从Ubuntu Precise Repository安装“apt-get install ruby​​1.9.3”,这基本上是一个ruby-1.9.3-p0。这跑了4,8秒。因此与我们的macbook在这里几乎相同。所以没有人知道rvm如何编译ruby。我很确定我们会在那里找到圣杯! – martinseener

+0

即使通过安装Squeeze,将apt源更改为wheezy,执行apt-get更新和apt-get install ruby​​(现在从wheezy安装1.9.3)时间应该是4.8秒。所以,不知怎么rvm编译它是“错误的”,我们必须看看这个。 – martinseener

+0

马丁 - 见下面的答案,这可能有助于解释你找到了什么。 – Casper

0

也许@martinseener是一些东西。你可能想看看这个:
http://alisnic.net/blog/making-your-ruby-fly/

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

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

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