[ruby-list:45598] Re: Mac OS X でコンパイルした Ruby は遅い?

From: kimura wataru <kimuraw@...>
Date: 2008-10-28 13:21:02 UTC
List: ruby-list #45598
木村(わ)といいます。

MacOS X 10.5.5, ruby-1.8.7-p72で同様の状況になることを確認しました。
InstrumentsのSamplerをかけたところ、--enable-pthreadのrubyでは
実行時間の7割近くをrb_call()->getcontext()で費やしていました。

試しに--enable-pthreadを指定して./configureした後、config.hの
  #define HAVE_GETCONTEXT 1 
  #define HAVE_SETCONTEXT 1 
をコメントアウトしてrubyをコンパイルしたところ、--enable-pthreadなしの
rubyとほぼ同様の結果をfib.rbのベンチマークについて得ることができました。

Rubyがgetcontextを使うようコンパイルされるのは、おおざっぱに言って
(1)--enable-pthreadがconfigureで指定され
(2)ucontextのgetcontext()/setcontext()が利用できるとき(Macなら10.5以降)
です。
MacOS X 10.5ではgetcontext()を使った実装よりも、setjump()を使った
実装のほうが、Rubyでは(少なくとも今回のベンチマークの)パフォーマンスに
おいて優れているということなんだと思います。


1.9ではgetcontext()/setcontext()を利用していないので、
--enable-pthreadの有無は影響しないということではないでしょうか。

On Sun, 26 Oct 2008 21:08:32 +0900, HIGAKI Masaru (ひがき まさる) wrote:
> ひがきです。
> 
> mixi の Ruby コミュニティで知ったのですが、
> MacPorts でインストールした ruby は、
> Mac OS X 標準の ruby よりも実行速度が遅いそうです。
> 
> 私は MacPorts を使わずに 1.8.7 をソースからコンパイルして使っていますが、
> 確かに Mac OS X 標準の ruby 1.8.6 と比べると 5 倍近く遅いのです。
> 
> どうやら configure 時に --enable-pthread が付いていると遅いようです。
> # 1.9 では --enable-pthread の影響はありません。
> 
> コンパイル時に何かヘマをやらかしているのでしょうか?
> 

-- 
kimura wataru

In This Thread