【问题标题】:Ruby is slow on virtual machine depending on the virtualization engineRuby 在虚拟机上运行缓慢,具体取决于虚拟化引擎
【发布时间】:2012-11-09 12:32:42
【问题描述】:

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

因此我们编写了一个小型 ruby​​ 基准测试(斐波那契)并执行了几次(平均值如下):

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 的机器之前:6 秒

使用 OpenVZ 加工后:11,5

两台机器上都安装了 Debian Squeeze 并安装了 rvm(-> 已编译)ruby-1.9.3-p194。这些机器负载不高,内存还可以。

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


  • 使用 XEN 的机器:6 秒
  • 使用 OpenVZ 的机器:11.5 秒
  • 使用 VMware ESXi 的机器:11 秒
  • 使用 KVM 的机器:2.5 秒

那么我们可以在虚拟化中进行哪些更改以使我们的 ruby​​ 更快?或者您有其他想法可能是什么问题?

【问题讨论】:

  • 有趣的问题,但在我看来,很难比较不同虚拟化技术的基准!
  • @Sam:不幸的是,我们不知道问题可能是什么......
  • 我会在所有系统上运行非 Ruby CPU 基准测试,以确保问题与 Ruby 相关。所有机器都运行 64 位吗?

标签: ruby performance vmware virtualization kvm


【解决方案1】:

问题是 rvm。现在解决了!

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

【讨论】:

    【解决方案2】:

    也许@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/

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 我刚刚在 Ubuntu 下使用 KSH 测试了相同的递归斐波那契计算。在 0.01 秒内运行。我发现“慢”红宝石必须与 rvm 和/或 rvm 编译 ruby​​ 本身有关。我刚刚使用“rvm remove ruby​​-1.9.3-p194”删除了 ruby​​,然后是“rvm implode”。然后重新登录并从 Ubuntu Precise Repository 安装“apt-get install ruby​​1.9.3”,它基本上是一个 ruby​​-1.9.3-p0。这在 4,8 秒内运行。所以几乎和我们这里的macbook一样的性能。有谁知道 rvm 如何编译 ruby​​。我很确定我们会在那里找到圣杯!
      • 即使通过安装 Squeeze,将 apt 源更改为 wheezy,执行 apt-get update 和 apt-get install ruby​​(现在从 wheezy 安装 1.9.3),时间也应该是 4.8 秒是。所以,rvm 以某种方式编译它“错误”,我们必须看看这个。
      • Martin - 请参阅下面的答案,这可能有助于解释您的发现。
      • 卡斯帕——你是对的。我们检查了这一点,瞧——基准测试快了近 3 倍!谢谢! RVM 1.17.x 解决了这个问题,我的同事告诉我 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2020-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多