日曜日 6 08, 2008

JRuby1.1 performance : single thread/multi threads vs. cRuby1.86 / 1.9

JRubyのパフォーマンス:cRuby1.86 / 1.9 とのシングル/マルチスレッドでの比較

[Summary] Koichiro and Naoto,  who are JRuby "Japanese leaders", wrote out an article with results of   benchmarking test of single/multi thread performance for JRuby1.1 vs. cRuby 1.8.6 / 1.9 !  To summarize, CMT technology with Sun SPARC Enterprise T5220 contributes throughput of multi thread processiong for JRuby. Great Job, thanks Koichiro and Naoto!!

(Translate to English)

うっかりして見落としていました。"Japanese JRuby Guy" こと大場光一郎&高井直人コンビの非常に興味深い記事が”まるごとRuby! Vol.1"(インプレスジャパン刊)に掲載されました。目次によれば、

■特集2 輝く2つのRuby
――最先端Ruby 1.9と高性能JRuby 1.1
 Part 1 JRuby 1.1の性能測定も実施!
JavaとRubyの融合世界! JRuby入門 
[大場光一郎/高井直人]
 Part 2 速さも機能も段違い
ここがスゴい! 新世代Ruby 1.9
[後藤謙太郎]

となっています。”JRubyの性能”として章の中で、非常に興味深いベンチマークテストと考察を行っています。主なところを書き出すと以下の通り。

JRuby 1.1では、少なくともRuby 1.8.6と同等かそれよりも速いくらいの実行性能を得られます。項目によっては、Rubyのバージョン 1.9.0よりも速いものもでてきています。

いやぁ〜、ここまで言うとは。ちょうど、近々来日するCharles Nutter と本日、チャットをしていたのですが、この話をしたら、非常に喜んでいて、向こうで鼻息荒くしている様子も感じとれました(本当か?)。 ますます、ヒートアップするか? Charlie vs. Ko1 の”スピード競争”!!(「若気の至り」という話もありますが。。(某氏曰く))

Ruby と JRubyのベンチマーキング

多体問題を解くプログラムを実行した際の性能を Ruby処理系ごとに比較してみましょう。それぞれの処理系には得意な処理と不得意な処理があり、このベンチマークテストが全体の傾向を決定するわけではありませんが、JRubyが十分速い場合があるということがわかります。図5を見てください。このケースでは、JRuby RC3の実行性能は、Ruby1.8.6 よりもずっと優れています。さらに、Ruby 1.9.0 よりも性能が良いという結果になっています。

図5がお見せできなくて残念ですが(掲載誌を購入してください(笑))、たしかにこのケースでは1.9.0 といい勝負をしているようです。さて、次にいよいよ、マルチコアでの勝負!!

マルチコア環境での性能

JRuby が他の Ruby処理系よりも圧倒的に優れているのが、マルチコアプロセッサ環境の性能です。JRuby では、Javaのスレッド機構をうまく利用しているので、処理系全体をロックすることなしにネイティブスレッドでの並列実行が可能になっています。

.....(中略).....

テスト用サーバ機器として「Sun SPARC Enterprise T5220」を用意しました。このサーバは 8 コアのUltraSPARC T2プロセッサを搭載し、同時に64スレッドを実行できます。

なんと、T2のマシンでやるとは!!スバラシイ!!


......(中略).....

興味深いのは、シングルスレッドのときにはRuby 1.9 のほうがJRuby よりも速く処理が終了しているのに対して、スレッド数が増えるにつれて JRubyのほうがより短時間で処理が完了している点です。

JRubyであればスレッド数を増やしていくことでマルチコアのCPU を搭載したマシンの性能をあますことなく活用できます。今後、ますますマルチコアプロセッサを搭載したマシンが利用されていくことを考えると、JRuby が活躍する場面は増えてくるのかもしれません。

掲載されているグラフを見ると、コア数(この場合は8)までは、非常に良く、性能が伸びています。その後、CMT特有のマルチスレッディングに関しては、JRuby の今後のエンハンスによって性能が伸びていくことになるのでしょう。今回、テストに使われたソースは次の通りです。

require 'benchmark'

def fib n
  n < 2 ? n : fib(n - 1) + fib(n - 2)
end

Benchmark.bm do |x|
  for i in 1..64 do
    x.report("%2d threads" % i) do
      ts = []
      i.times do
        ts << Thread.fork do
          (64 / i).times do
            fib 10
          end
        end
      end
      ts.each{|t| t.join }
    end
  end
end

Thread.fork にて、スレッドを新規に作成させています。

もう少し細かく、また、他の事項についても紹介したいところですが、そこは掲載誌をご覧ください。ともあれ、大場さん、高井さん、お疲れさまでした!!




About

Takashi Shitamichi(下道高志)

Chief Technologist
GSE Japan, Sun Microsystems

Spokes Person/Secretary@SIG-Japan,Liberty Alliance
Chair of Edu-committee, ISACA Tokyo
CISA,CISM
中小企業診断士

Search

Archives
« 7月 2014
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
  
       
今日