2008-11-17
MacPorts でインストールした Ruby は遅いらしい
MacPorts でインストールした Ruby は遅いらしい。
というわけで、MacOS X 10.5 Leopard で確かめてみた。
$ /usr/bin/ruby -v # MacOS X 付属 ruby 1.8.6 (2008-03-03 patchlevel 114) [universal-darwin9.0] $ /usr/local/bin/ruby -v # 自前でコンパイル&インストール ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9.4.0] $ /opt/local/bin/ruby -v # MacPorts でインストール ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9]
まずは fibonacci で確かめてみる。
def fib(n) n <= 1 ? 1 : fib(n-1) + fib(n-2) end if __FILE__ == $0 require 'benchmark' n = $N ? $N.to_i : 30 Benchmark.benchmark do |x| x.report("fib(#{n})") do fib(n) end end end
実行結果。
$ /usr/bin/ruby -s fib.rb -N=33 fib(33) 4.560000 0.010000 4.570000 ( 4.611006) $ /usr/local/bin/ruby -s fib.rb -N=33 fib(33) 4.490000 0.010000 4.500000 ( 4.557644) $ /opt/local/bin/ruby -s fib.rb -N=33 fib(33) 22.220000 8.220000 30.440000 ( 30.747271)
結果は、自前コンパイル >= Mac付属 >> MacPorts という結果に。むう、MacPorts Ruby は確かに 5 倍近く遅い。
次に、もっと現実寄りのテストを求めて、Erubis 付属のベンチマークを試してみる。
erubis$ /usr/bin/ruby -rubygems bench.rb -n 10000 Erubis::Eruby
*** ntimes=10000, testmode=execute
user system total real
Erubis::Eruby 7.490000 0.210000 7.700000 ( 7.805032)
erubis$ /usr/local/bin/ruby -rubygems bench.rb -n 10000 Erubis::Eruby
*** ntimes=10000, testmode=execute
user system total real
Erubis::Eruby 7.330000 0.230000 7.560000 ( 7.709817)
erubis$ /opt/local/bin/ruby -rubygems bench.rb -n 10000 Erubis::Eruby
*** ntimes=10000, testmode=execute
user system total real
Erubis::Eruby 10.220000 1.450000 11.670000 ( 11.880084)
ベンチマーク結果は、自前コンパイル >= Mac付属 >> MacPorts という結果に。
MacPorts Ruby は確かに遅い。ただ、fibonacci ほどの差はついてないから、あんまり問題にならなかったんだろう。
次に Erubis の、eRuby ファイルの parse 部分だけをテストしてみる。これは主に正規表現のマッチング速度が重要になるはず。
erubis$ /usr/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
user system total real
Erubis::Eruby 2.700000 0.200000 2.900000 ( 2.939682)
erubis$ /usr/local/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
user system total real
Erubis::Eruby 2.810000 0.200000 3.010000 ( 3.056374)
erubis$ /opt/local/bin/ruby -rubygems bench.rb -n 10000 -m convert Erubis::Eruby
*** ntimes=10000, testmode=convert
user system total real
Erubis::Eruby 5.020000 1.130000 6.150000 ( 6.827484)
こんどは Mac付属 >= 自前コンパイル >> MacPorts という結果に。むう、MacPorts が遅いのはかわらないが、自前コンパイルが Mac 付属に負けてしまった。何度かやってみたけど、誤差の範囲ではなかった。
というわけで、結論:
コメントを書く
トラックバック - http://d.hatena.ne.jp/kwatch/20081117/1226936123
リンク元
- 51 http://www.rubyist.net/~kazu/samidare/
- 49 http://reader.livedoor.com/reader/
- 21 http://d.hatena.ne.jp/
- 15 http://b.hatena.ne.jp/entrylist?sort=hot
- 13 http://www.google.com/reader/view/
- 12 http://www.google.co.jp/reader/view/
- 11 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&hs=bG8&q=BerliOS+git&btnG=検索&lr=
- 11 http://www.google.co.jp/search?q=merb&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
- 9 http://b.hatena.ne.jp/entrylist?sort=hot&of=50&threshold=5
- 8 http://d.hatena.ne.jp/rubynews/20081118/1227027364