Monday, March 27, 2017

JRuby Compiler Performance

JRuby Compiler Performance


I was pretty excited when I heard that JRubys compiler was complete. I figured I could run some benchmarks against the C-Based Ruby Implementation to see how it was performing. Ive only run this suite once, but I hope to provide enough info so that you could replicate the results yourself. Please let me know if you think I missed something.


The Setup

The benchmarks were run on a Dell D820 laptop. It has an Intel Core Duo running at 2.17GHz and has 1GB of RAM. Im running Ubuntu 7.04 for an OS. The only wrinkle in my setup is that my root partition is encrypted using LUKS/dmcrypt. This will probably slow down the IO benchmarks, but Im assuming it would penalize both Ruby implementations equally.


For the C-Based Ruby Implementation, Im using the Ubuntu packaged Ruby version 1.8.5. For JRuby, I checked out the latest from Codehauss SVN (Rev 4474) and built the code using Suns Java version 1.6.0.


For the benchmarks, I pulled the suite from the Ruby Lang SVN (Rev 13608). 


I ran the benchmarks using the run.rb script. The C-Based Ruby Implementation was run with no command line options. I modified the script to run JRuby withe the following options:

  • -C to compile the ruby code before running it
  • -O to disable ObjectSpace
  • -J-Djruby.thread.pooling=true to enable thread pooling
  • -J-server to put the JVM in server mode

These options are explained in the Performance Tuning and Compiler pages of the JRuby Wiki.


The Results

The following shows the time it took the Ruby Implementation to perform the benchmark in seconds:



Here is the difference between the two implementations (CRuby - JRuby) again, in seconds:



As you can see, JRuby is performing really well on a lot of these benchmarks. It gets killed on eval, but I suppose that is to be expected. My guess is that JRuby is taking advantage of Java primitives to outperform CRuby at number crunching. Charles Nutters comments at another blog entry on JRuby benchmarking seem to indicate that this would be the case. Cant wait until JRuby is 1.1


Available link for download