【问题标题】:Why is REE faster than 1.9.3 at executing RSpec?为什么 REE 在执行 RSpec 时比 1.9.3 快?
【发布时间】:2012-01-22 20:25:05
【问题描述】:

我一直认为 1.9.x 应该比 REE 更快,但是消耗更多的内存。但正如最近向我指出的那样,REE 实际上比执行 RSpec 规范要快,而且差距很大。

$ rvm use ree
$ rvm gemset create sandbox
$ rvm gemset use sandbox
$ gem install rspec

$ time rspec foo_spec.rb 
No examples found.

Finished in 0.07346 seconds
0 examples, 0 failures

real    0m0.104s
user    0m0.059s
sys 0m0.015s

在对 1.9.3 做了同样的事情之后,我得到了

$ time rspec foo_spec.rb 
No examples found.

Finished in 0.13922 seconds
0 examples, 0 failures

real    0m0.208s
user    0m0.122s
sys 0m0.022s

对于一个空的 gemset,这是两倍,只包含 rspec 并在一个空的规范文件上执行。我发现包含多个宝石的宝石组差异更大。

为什么会发生这种情况,1.9.3 不应该是目前可用的最快版本吗?

我正在运行通过 RVM 在 OS X Lion 上安装的最新版本。

【问题讨论】:

  • 您只是测量启动时间,而不是有用任务的实际速度。选择与您的代码匹配的更复杂的东西以获得有用的基准测试结果。
  • 另外,请注意文件系统缓存。要获得更准确的结果,请运行每个测试,例如连续运行 20 次,并取最后 15 次运行的中位数。
  • @phs 是的,我知道文件系统缓存,但问题是第一次运行测试时,因为我只会在更改时再次运行它们文件
  • @HolgerJust 我在更复杂的情况下也尝试过同样的事情,结果总是证明 REE 运行规范的速度更快。我发布的示例只是说明性的。我什至尝试完全重新安装 1.9.3 以重新开始。

标签: ruby rspec ruby-enterprise-edition ruby-1.9.3


【解决方案1】:

这取决于您的替补对象。如果你做这么简单的事情,那么在我看来它甚至都不算数。所以,这是我的Backup gem 的一个例子,它做了很多文件“需要”并运行了一堆现实世界的规范。

Ruby 企业版

time bundle exec rspec spec

real    0m5.579s
user    0m3.427s
sys 0m0.465s

502 examples, 0 failures

Ruby 1.9.3p0

bundle exec rspec spec

real    0m3.863s
user    0m3.552s
sys 0m0.299s

502 examples, 0 failures

1.9.3p0 的启动时间通常更快,因为某个补丁更改了文件 require 函数的算法,我相信这本身减少了平均大小相似的应用程序的平均加载时间Ruby on Rails 应用程序减少了大约 30%。但是,如果最初加载的文件几乎没有,并且该进程没有运行很长时间,那么它可能会更慢。

【讨论】:

    【解决方案2】:

    我猜你会看到 GC 性能调优的结果,这仍然对 REE 有利(基于我们在 REE 和 1.9.3 下对大型 Rails 应用进行的实际基准测试)。

    要从您的基准测试中消除 GC 开销,以便您真正将苹果与苹果进行比较,请在此过程中尽早禁用它。你可以这样做:

    GC.disable

    当然,只有当你有足够的内存来运行所有测试而不调用 GC 时,你才会得到有用的结果;如果您的机器开始交换,那么结果将无用。

    【讨论】:

    • 你肯定需要打开你的 GC - 在你运行你的规范之前尝试运行这个:export RUBY_HEAP_MIN_SLOTS=600000 && export RUBY_GC_MALLOC_LIMIT=59000000 && export RUBY_FREE_MIN=200000
    猜你喜欢
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 2018-06-10
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    相关资源
    最近更新 更多