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プロセス直接とたいしてパフォーマンスは変わらなかった。シングルコアのマシンだからかもしれない。