merb with ebb

git headのmerbは 今話題の ebbに対応している。ということで hello と出力するだけのベンチマークを取ってみた。

事前準備

$ yum install git 
$ yum install glib2-devel
$ git clone git://github.com/wycats/merb-core.git
$ git clone git://github.com/wycats/merb-more.git
$ cd merb-core ; rake install ; cd ..
$ cd merb-more ; rake install ; cd ..
$ gem install ebb

で ebbは処理の多くが cで書かれていて、RSTRING_PTR や RSTRING_LENなど ruby 1.8.6以上で新しく加えられたマクロが使われているので、1.8.6未満の場合は /usr/lib/ruby/gems/1.8/gems/ebb-0.0.4/src/ebb_ruby.c に

#ifndef RSTRING_PTR
#  define RSTRING_PTR(s) (RSTRING(s)->ptr)
#endif
#ifndef RSTRING_LEN
#  define RSTRING_LEN(s) (RSTRING(s)->len)
#endif

を加える必要がある。加えたら ebb_ext.soを makeし直すこと

でebb版のmerb起動は merb -a ebb とかで起動する。以下ベンチマーク

merb with evented_mongrel 
Concurrency Level:      20
Time taken for tests:   1.247608 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      139000 bytes
HTML transferred:       5000 bytes
Requests per second:    801.53 [#/sec] (mean)
Time per request:       24.952 [ms] (mean)
Time per request:       1.248 [ms] (mean, across all concurrent requests)
Transfer rate:          108.21 [Kbytes/sec] received
merb with ebb
Concurrency Level:      20
Time taken for tests:   0.836514 seconds
Complete requests:      1000
Failed requests:        0
Write errors:           0
Total transferred:      103428 bytes
HTML transferred:       5070 bytes
Requests per second:    1195.44 [#/sec] (mean)
Time per request:       16.730 [ms] (mean)
Time per request:       0.837 [ms] (mean, across all concurrent requests)
Transfer rate:          120.74 [Kbytes/sec] received

evented_mongrelに比べて 30%くらい速くなっている。

ちなみに nginxをフロントエンドにして、ebb merbを 4プロセス並べてベンチマークをとってみたが、1プロセス直接とたいしてパフォーマンスは変わらなかった。シングルコアのマシンだからかもしれない。