I also ran the petstore benchmark a couple of times today with
different setup options. The petstore app as it is in SVN does some
heavy logging, so I decided not only to test JRuby 1.0.1 but also
the latest fixes-1_0 branch (with slow IO being fixed).
The setup procedure was like Alexey described in one of his previous
postings. I tested the ar-jdbc version only.
My results:
1.0.x
controller : 5.729000 0.000000 5.729000 ( 5.729000)
view : 21.572000 0.000000 21.572000 ( 21.572000)
full action: 42.043000 0.000000 42.043000 ( 42.043000)
1.0.x -J-Djruby.jit.enabled=false
controller : 5.337000 0.000000 5.337000 ( 5.337000)
view : 19.633000 0.000000 19.633000 ( 19.633000)
full action: 38.506000 0.000000 38.506000 ( 38.506000)
TRUNK
controller : 5.427000 0.000000 5.427000 ( 5.428000)
view : 18.653000 0.000000 18.653000 ( 18.653000)
full action: 50.560000 0.000000 50.560000 ( 50.560000)
TRUNK -J-Djruby.jit.enabled=false
controller : 6.671000 0.000000 6.671000 ( 6.671000)
view : 18.512000 0.000000 18.512000 ( 18.512000)
full action: 49.191000 0.000000 49.191000 ( 49.192000)
1.0.1
controller : 8.909000 0.000000 8.909000 ( 8.909000)
view : 25.409000 0.000000 25.409000 ( 25.409000)
full action: 52.643000 0.000000 52.643000 ( 52.643000)
1.0.1 -J-Djruby.jit.enabled=false
controller : 8.618000 0.000000 8.618000 ( 8.618000)
view : 23.495000 0.000000 23.495000 ( 23.495000)
full action: 50.521000 0.000000 50.521000 ( 50.521000)
and some benchmarks using server Hotspot:
TRUNK -J-server
controller : 5.428000 0.000000 5.428000 ( 5.428000)
view : 17.659000 0.000000 17.659000 ( 17.659000)
full action: 43.340000 0.000000 43.340000 ( 43.340000)
TRUNK -J-server -J-Djruby.jit.enabled=false
controller : 5.636000 0.000000 5.636000 ( 5.636000)
view : 13.643000 0.000000 13.643000 ( 13.643000)
full action: 36.770000 0.000000 36.770000 ( 36.770000)
1.0.x -J-server
controller : 5.415000 0.000000 5.415000 ( 5.415000)
view : 18.243000 0.000000 18.243000 ( 18.243000)
full action: 38.209000 0.000000 38.209000 ( 38.209000)
1.0.x -J-server -J-Djruby.jit.enabled=false
controller : 4.578000 0.000000 4.578000 ( 4.578000)
view : 15.037000 0.000000 15.037000 ( 15.037000)
full action: 32.002000 0.000000 32.002000 ( 32.002000)
MRI:
controller : 2.010000 0.100000 2.110000 ( 2.248452)
view : 9.420000 0.730000 10.150000 ( 10.183790)
full action: 17.250000 1.120000 18.370000 ( 19.341900)
=> my (partially weird?) results:
1. 1.0.x is faster than trunk
2. 1.0.1 is slower than trunk (probably due to slow file IO)
3. most tests run faster without JIT (only controller part seems
to be faster with JIT)!!
4. fastest JRuby setup (1.0.x / nojit / -server): about 50% of MRI
performance
Any idea? Trunk faster than 1.0.x and JIT causing a slowdown??
Is there a special issue with my hardware (maybe Hotspot / CPU related)?
My setup (Ubuntu this time):
Hardware: IBM Thinkpad R40, an older one (Intel(R) Pentium(R) M processor
1300MHz, 1024MB cache, 1199.90 bogomips)
OS: Ubuntu 7.04
Kernel: 2.6.20-16-generic #2 SMP Sun Sep 23 19:50:39 UTC 2007 i686 GNU/Linux
Ruby: ruby 1.8.5 (2006-08-25) [i486-linux]
JRuby: trunk rev 4384, fixes-1_0 rev 4385
Database: MySQL 5.0.38
Application: Petstore rev 177
Alexey Verkhovsky-2 wrote:
>
> Some new numbers.
>
> SUMMARY
>
> In Petstore script/benchmark_action:
> * trunk runs two times faster than 1.0.1
> * there seems to be a significant bottleneck somewhere in executing
> the Rails framework
> * when framework processing is excluded, JRuby is about 1.5 times
> slower than MRI
> * Unlike earlier test runs, AR-JDBC in the current trunk has a
> noticeable advantage over pure-Ruby MySQL driver
>
> DETAILS
>
> Ola and yours truly are on the next iteration of JRuby performance
> tuning for Rails. I wrote a couple of scripts to drill down into
> various parts of Rails, to decide where to focus.
>
> The scripts, essentially, measure the average roundtrip time of
> app.get('url'), controller.send(action) and controller.render(), by
> 1000 iterations of each block, 10 runs.
>
> JRuby JIT compiler is warmed up by 10000 iterations of each test prior
> to measurements. The numbers reported below are from the 10th run.
> Variation between last 5 runs in all of these tests is under 5%, so
> it's doesn't really matter that it's not an average.
>
> Note that there is no web server, and no session handling involved in
> these tests.
> Also, note that the relative amount of database / model work involved
> in CategoriesController#show is rather small.
>
> Here are the numbers:
>
> Runtime MRI Jruby Jruby 1.0.1
> DB driver native pure Ruby AR-JDBC pure Ruby AR-JDBC
>
> Controller 1.1 2.0 1.7 2.5 7.19
> View 4.5 4.4 6.7 6.6 17.08
> Framework 2.7 3.5 9.3 9.5 11.8
> Full action 8.3 9.9 17.7 18.6 36.03
>
> JRuby 1.0.1 / AR-JDBC:
> controller : 1.867000 0.000000 1.867000 ( 1.867000)
>
>
> TEST SETUP AND PROCEDURE
>
> Hardware: Dell D620
> OS: Ubuntu 7.04
> Kernel: 2.6.20-16-generic #2 SMP Fri Aug 31 00:55:27 UTC 2007 i686
> GNU/Linux, default from the distro.
> Ruby: ruby 1.8.5 (2007-03-13 patchlevel 35) [i686-linux]
> JRuby: trunk rev 4384
> Database: MySQL 5.0.38 (binary from the distro)
> Application: Petstore from
> http://tw-commons.rubyforge.org/svn/petstore/trunk/ (rev 177).
> Measuring:
> Ruby: echo 'load "script/benchmark_action"' | ruby script/console
> production
> JRuby: echo 'load "script/benchmark_action"' | jruby
> -J-Djruby.objectspace.enabled=false script/console production
> # replace production with ar_jdbc for running with AR:JDBC driver
>
> --
> Alexey Verkhovsky
> CruiseControl.rb [http://cruisecontrolrb.thoughtworks.com]
> RubyWorks [http://rubyworks.thoughtworks.com]
>
> ---------------------------------------------------------------------
> To unsubscribe from this list please visit:
>
> http://xircles.codehaus.org/manage_email
>
>
>
--
View this message in context:
http://www.nabble.com/JRuby-vs-MRI---Petstore-shootout-tf4289470.html#a12884516
Sent from the JRuby - Dev mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe from this list please visit:
http://xircles.codehaus.org/manage_email