読者です 読者をやめる 読者になる 読者になる

CubicLouve

Spring_MTの技術ブログです。https://github.com/SpringMT (http://spring-mt.tumblr.com/ からの移転)

HTMを試す

ruby rubykaigi rubykaigi2014

rubykaigi一日目の発表でHTMを使ったパフォーマンス向上の試みが発表されていたので試してみました。

RubyKaigi 2014 | Eliminating Giant VM Lock in Ruby through Hardware Transactional Memory

マシンスペック

iMac使っています。

% system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: iMac
      Model Identifier: iMac14,2
      Processor Name: Intel Core i5
      Processor Speed: 3.2 GHz
      Number of Processors: 1
      Total Number of Cores: 4
      L2 Cache (per Core): 256 KB
      L3 Cache: 6 MB
      Memory: 8 GB
      Boot ROM Version: IM142.0118.B00

% sysctl machdep.cpu.brand_string
machdep.cpu.brand_string: Intel(R) Core(TM) i5-4570 CPU @ 3.20GHz

ARK | Intel® Core™ i5-4570 Processor (6M Cache, up to 3.60 GHz)

f:id:Spring_MT:20140922143401p:plain

TSX入っています!

rubyコンパイル

下記の内容をそのまま行っています。

Rei Odaira - RubyのGVLにHTMを用いるパッチ

% wget http://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.gz  
% tar zxf ruby-1.9.3-p547.tar.gz 
% wget http://researcher.watson.ibm.com/researcher/files/jp-ODAIRA/ruby_htm_gvl-1.9.3-p547_v3.patch
% cd ruby-1.9.3-p547
% patch -p1 < ../ruby_htm_gvl-1.9.3-p547_v3.patch 
% ./configure --enable-htm-gvl --prefix=$HOME/.rbenv/versions/1.9.3-p547-html-gbl --with-openssl-dir=`brew --prefix openssl` --with-readline-dir=`brew --prefix readline`
% make
% make install

ベンチマーク

ベンチマークとったスクリプトはこちらです。

htm bench script

CPU利用率は、赤がsystem、緑がuserです。

HTMあり

 % ruby thread_sample.rb
3.141185
      user     system      total        real
 14.750000   7.620000  22.370000 ( 12.990631)
  • CPU利用率

f:id:Spring_MT:20140922141959p:plain

HTMなし

 % ruby --disable-htm thread_sample.rb
3.14226
      user     system      total        real
  1.610000   0.010000   1.620000 (  1.619220)
  • CPU利用率

f:id:Spring_MT:20140922142428p:plain

まとめ

うーーん、HTMをonにしたら、CPUを使い切ってる感じはするけど、パフォーマンス下がったなあ。。。。

サンプルスクリプトがよくないのか、自分の環境がよくないのか。。。。

自分が試した感じではこうでした。

追記

こんなこともやってみました。

Ruby vs Rubinius vs GobiesVM - CubicLouve