Benchmarks: Ruby 1.8 and Ruby 1.9

using:

Ruby 1.8 (MRI)
ruby 1.8.6 (2007-09-24) [i686-darwin8.10.1]
Ruby 1.9 (YARV)
ruby 1.9.0 (2007-11-09) [i686-darwin8.10.1]
JRuby
ruby 1.8.5 (2007-11-10 rev 4842) [i386-jruby1.1b1]
Rubinius
rubinius 0.8.0 (ruby 1.8.6 compatible) (c1b9f74f8) (11/10/2007) [i686-apple-darwin8.10.1]
System
Mac OS X, MacBook, Core Duo 1.83GHz, 2GB RAM

Please note that these are mostly synthetic benchmarks!

Benchmark MRI YARV JRuby Rubinius 1st 2nd 3rd (in seconds)
app_answer 0.61 0.14 1.00 0.22 YARV Rubinius MRI
mri 0.61 seconds (100%)
yarv 4.4x (-77%)
jruby 0.6x (+64%)
rubinius 2.7x (-63%)
app_erb 2.18 2.10 7.30 error YARV MRI JRuby
mri 2.18 seconds (100%)
yarv 1.0x (-4%)
jruby 0.3x (+235%, cut)
rubinius: error
app_factorial error 1.09 4.55 1.51 YARV Rubinius JRuby
mri 1.09 seconds (100%)
yarv 1.0x (+0%)
jruby 0.2x (+318%, cut)
rubinius 0.7x (+39%)
app_fib 7.93 1.96 7.60 3.72 YARV Rubinius JRuby
mri 7.93 seconds (100%)
yarv 4.0x (-75%)
jruby 1.0x (-4%)
rubinius 2.1x (-53%)
app_mandelbrot 2.76 1.23 3.50 21.35 YARV MRI JRuby
mri 2.76 seconds (100%)
yarv 2.2x (-55%)
jruby 0.8x (+27%)
rubinius 0.1x (+674%, cut)
app_pentomino 114.43 59.07 181.93 t/o YARV MRI JRuby
mri 114.43 seconds (100%)
yarv 1.9x (-48%)
jruby 0.6x (+59%)
rubinius: timeout
app_raise 2.85 3.42 2.65 3.24 JRuby MRI Rubinius
mri 2.85 seconds (100%)
yarv 0.8x (+20%)
jruby 1.1x (-7%)
rubinius 0.9x (+14%)
app_strconcat 1.90 1.42 1.80 1.80 YARV JRuby Rubinius
mri 1.90 seconds (100%)
yarv 1.3x (-25%)
jruby 1.1x (-5%)
rubinius 1.1x (-5%)
app_tak 9.57 2.64 8.55 4.80 YARV Rubinius JRuby
mri 9.57 seconds (100%)
yarv 3.6x (-72%)
jruby 1.1x (-11%)
rubinius 2.0x (-50%)
app_tarai 7.69 2.14 6.80 8.40 YARV JRuby MRI
mri 7.69 seconds (100%)
yarv 3.6x (-72%)
jruby 1.1x (-12%)
rubinius 0.9x (+9%)
app_uri 4.70 2.58 5.10 error YARV MRI JRuby
mri 4.70 seconds (100%)
yarv 1.8x (-45%)
jruby 0.9x (+9%)
rubinius: error
io_file_create 3.17 3.56 29.82 error MRI YARV JRuby
mri 3.17 seconds (100%)
yarv 0.9x (+12%)
jruby 0.1x (+841%, cut)
rubinius: error
io_file_read 1.22 1.58 2.30 error MRI YARV JRuby
mri 1.22 seconds (100%)
yarv 0.8x (+29%)
jruby 0.5x (+88%)
rubinius: error
io_file_write 0.68 0.52 1.25 error YARV MRI JRuby
mri 0.68 seconds (100%)
yarv 1.3x (-24%)
jruby 0.5x (+83%)
rubinius: error
interpreter_launch 0.02 0.03 1.78 0.09 MRI YARV Rubinius
mri 0.02 seconds (100%)
yarv 0.5x (+94%)
jruby 0.0x (+10376%, cut)
rubinius 0.2x (+406%, cut)
loop_generator 26.53 1.79 t/o error YARV MRI None
mri 26.53 seconds (100%)
yarv 14.8x (-93%)
jruby: timeout
rubinius: error
loop_times 6.06 4.44 11.96 18.64 YARV MRI JRuby
mri 6.06 seconds (100%)
yarv 1.4x (-27%)
jruby 0.5x (+97%)
rubinius 0.3x (+207%, cut)
loop_whileloop 10.33 1.87 13.51 3.61 YARV Rubinius MRI
mri 10.33 seconds (100%)
yarv 5.5x (-82%)
jruby 0.8x (+31%)
rubinius 2.9x (-65%)
loop_whileloop2 2.09 0.37 2.75 0.75 YARV Rubinius MRI
mri 2.09 seconds (100%)
yarv 5.7x (-82%)
jruby 0.8x (+32%)
rubinius 2.8x (-64%)
so_ackermann error 2.02 39.58 3.70 YARV Rubinius JRuby
mri 2.02 seconds (100%)
yarv 1.0x (+0%)
jruby 0.1x (+1859%, cut)
rubinius 0.5x (+83%)
so_array 7.37 4.41 24.97 101.48 YARV MRI JRuby
mri 7.37 seconds (100%)
yarv 1.7x (-40%)
jruby 0.3x (+239%, cut)
rubinius 0.1x (+1277%, cut)
so_binary_trees 3.32 1.81 5.35 error YARV MRI JRuby
mri 3.32 seconds (100%)
yarv 1.8x (-46%)
jruby 0.6x (+61%)
rubinius: error
so_concatenate 2.17 1.68 5.61 18.09 YARV MRI JRuby
mri 2.17 seconds (100%)
yarv 1.3x (-22%)
jruby 0.4x (+159%, cut)
rubinius 0.1x (+735%, cut)
so_count_words 3.96 4.24 2.45 error JRuby MRI YARV
mri 3.96 seconds (100%)
yarv 0.9x (+7%)
jruby 1.6x (-38%)
rubinius: error
so_exception 4.88 4.58 7.65 145.62 YARV MRI JRuby
mri 4.88 seconds (100%)
yarv 1.1x (-6%)
jruby 0.6x (+57%)
rubinius 0.0x (+2884%, cut)
so_fannkuch 82.43 60.60 62.79 error YARV JRuby MRI
mri 82.43 seconds (100%)
yarv 1.4x (-26%)
jruby 1.3x (-24%)
rubinius: error
so_fasta 11.06 8.03 22.92 t/o YARV MRI JRuby
mri 11.06 seconds (100%)
yarv 1.4x (-27%)
jruby 0.5x (+107%)
rubinius: timeout
so_k_nucleotide 6.49 6.07 9.61 error YARV MRI JRuby
mri 6.49 seconds (100%)
yarv 1.1x (-6%)
jruby 0.7x (+48%)
rubinius: error
so_lists 1.30 1.01 3.55 error YARV MRI JRuby
mri 1.30 seconds (100%)
yarv 1.3x (-22%)
jruby 0.4x (+173%, cut)
rubinius: error
so_mandelbrot 32.75 19.02 29.21 t/o YARV JRuby MRI
mri 32.75 seconds (100%)
yarv 1.7x (-42%)
jruby 1.1x (-11%)
rubinius: timeout
so_matrix 2.54 1.14 3.29 12.31 YARV MRI JRuby
mri 2.54 seconds (100%)
yarv 2.2x (-55%)
jruby 0.8x (+30%)
rubinius 0.2x (+385%, cut)
so_meteor_contest 38.06 24.97 42.27 error YARV MRI JRuby
mri 38.06 seconds (100%)
yarv 1.5x (-34%)
jruby 0.9x (+11%)
rubinius: error
so_nbody 23.77 12.65 24.76 122.08 YARV MRI JRuby
mri 23.77 seconds (100%)
yarv 1.9x (-47%)
jruby 1.0x (+4%)
rubinius 0.2x (+413%, cut)
so_nested_loop 6.14 3.92 12.46 9.95 YARV MRI Rubinius
mri 6.14 seconds (100%)
yarv 1.6x (-36%)
jruby 0.5x (+103%)
rubinius 0.6x (+62%)
so_nsieve 22.55 8.74 26.73 error YARV MRI JRuby
mri 22.55 seconds (100%)
yarv 2.6x (-61%)
jruby 0.8x (+19%)
rubinius: error
so_nsieve_bits 52.98 10.77 67.98 89.70 YARV MRI JRuby
mri 52.98 seconds (100%)
yarv 4.9x (-80%)
jruby 0.8x (+28%)
rubinius 0.6x (+69%)
so_object 8.06 2.62 6.35 7.30 YARV JRuby Rubinius
mri 8.06 seconds (100%)
yarv 3.1x (-67%)
jruby 1.3x (-21%)
rubinius 1.1x (-9%)
so_partial_sums 26.52 13.35 29.71 160.15 YARV MRI JRuby
mri 26.52 seconds (100%)
yarv 2.0x (-50%)
jruby 0.9x (+12%)
rubinius 0.2x (+504%, cut)
so_pidigits 6.36 7.00 11.16 8.42 MRI YARV Rubinius
mri 6.36 seconds (100%)
yarv 0.9x (+10%)
jruby 0.6x (+75%)
rubinius 0.8x (+32%)
so_random 2.21 0.75 2.85 105.38 YARV MRI JRuby
mri 2.21 seconds (100%)
yarv 3.0x (-66%)
jruby 0.8x (+29%)
rubinius 0.0x (+4658%, cut)
so_reverse_complement 4.36 4.33 error error YARV MRI None
mri 4.36 seconds (100%)
yarv 1.0x (-1%)
jruby: error
rubinius: error
so_sieve 0.70 0.21 1.00 3.39 YARV MRI JRuby
mri 0.70 seconds (100%)
yarv 3.4x (-71%)
jruby 0.7x (+43%)
rubinius 0.2x (+382%, cut)
so_spectralnorm 28.46 14.42 36.27 293.51 YARV MRI JRuby
mri 28.46 seconds (100%)
yarv 2.0x (-49%)
jruby 0.8x (+27%)
rubinius 0.1x (+931%, cut)
vm1_block 14.37 4.91 23.86 21.86 YARV MRI Rubinius
mri 14.37 seconds (100%)
yarv 2.9x (-66%)
jruby 0.6x (+66%)
rubinius 0.7x (+52%)
vm1_const 7.02 0.96 3.15 20.11 YARV JRuby MRI
mri 7.02 seconds (100%)
yarv 7.3x (-86%)
jruby 2.2x (-55%)
rubinius 0.3x (+186%, cut)
vm1_ensure 7.42 0.04 6.25 0.93 YARV Rubinius JRuby
mri 7.42 seconds (100%)
yarv 181.0x (-99%)
jruby 1.2x (-16%)
rubinius 8.0x (-87%)
vm1_ivar 6.73 4.19 2.40 5.23 JRuby YARV Rubinius
mri 6.73 seconds (100%)
yarv 1.6x (-38%)
jruby 2.8x (-64%)
rubinius 1.3x (-22%)
vm1_ivar_set 7.43 4.42 7.30 4.85 YARV Rubinius JRuby
mri 7.43 seconds (100%)
yarv 1.7x (-41%)
jruby 1.0x (-2%)
rubinius 1.5x (-35%)
vm1_length 9.73 3.23 6.65 12.75 YARV JRuby MRI
mri 9.73 seconds (100%)
yarv 3.0x (-67%)
jruby 1.5x (-32%)
rubinius 0.8x (+31%)
vm1_rescue 2.87 0.24 10.55 1.11 YARV Rubinius MRI
mri 2.87 seconds (100%)
yarv 11.9x (-92%)
jruby 0.3x (+268%, cut)
rubinius 2.6x (-61%)
vm1_simplereturn 10.84 3.12 6.35 6.08 YARV Rubinius JRuby
mri 10.84 seconds (100%)
yarv 3.5x (-71%)
jruby 1.7x (-41%)
rubinius 1.8x (-44%)
vm1_swap 15.68 0.75 5.41 2.14 YARV Rubinius JRuby
mri 15.68 seconds (100%)
yarv 20.9x (-95%)
jruby 2.9x (-66%)
rubinius 7.3x (-86%)
vm2_array 4.26 3.14 2.00 6.77 JRuby YARV MRI
mri 4.26 seconds (100%)
yarv 1.4x (-26%)
jruby 2.1x (-53%)
rubinius 0.6x (+59%)
vm2_case 2.88 0.42 4.11 3.24 YARV MRI Rubinius
mri 2.88 seconds (100%)
yarv 6.8x (-85%)
jruby 0.7x (+42%)
rubinius 0.9x (+12%)
vm2_eval 14.15 60.23 111.10 t/o MRI YARV JRuby
mri 14.15 seconds (100%)
yarv 0.2x (+326%, cut)
jruby 0.1x (+685%, cut)
rubinius: timeout
vm2_method 10.79 5.18 12.66 10.04 YARV Rubinius MRI
mri 10.79 seconds (100%)
yarv 2.1x (-52%)
jruby 0.9x (+17%)
rubinius 1.1x (-7%)
vm2_mutex 3.37 3.75 7.45 error MRI YARV JRuby
mri 3.37 seconds (100%)
yarv 0.9x (+11%)
jruby 0.5x (+121%)
rubinius: error
vm2_poly_method 14.48 6.23 31.96 13.09 YARV Rubinius MRI
mri 14.48 seconds (100%)
yarv 2.3x (-57%)
jruby 0.5x (+121%)
rubinius 1.1x (-10%)
vm2_poly_method_ov 2.53 0.51 2.20 2.82 YARV JRuby MRI
mri 2.53 seconds (100%)
yarv 4.9x (-80%)
jruby 1.1x (-13%)
rubinius 0.9x (+12%)
vm2_proc 5.42 1.96 5.66 7.04 YARV MRI JRuby
mri 5.42 seconds (100%)
yarv 2.8x (-64%)
jruby 1.0x (+4%)
rubinius 0.8x (+30%)
vm2_regexp 2.71 3.52 7.36 28.52 MRI YARV JRuby
mri 2.71 seconds (100%)
yarv 0.8x (+30%)
jruby 0.4x (+171%, cut)
rubinius 0.1x (+952%, cut)
vm2_send 2.56 0.76 3.06 2.23 YARV Rubinius MRI
mri 2.56 seconds (100%)
yarv 3.4x (-70%)
jruby 0.8x (+19%)
rubinius 1.1x (-13%)
vm2_super 3.04 1.26 3.15 2.38 YARV Rubinius MRI
mri 3.04 seconds (100%)
yarv 2.4x (-59%)
jruby 1.0x (+4%)
rubinius 1.3x (-22%)
vm2_unif1 1.88 0.68 2.30 1.57 YARV Rubinius MRI
mri 1.88 seconds (100%)
yarv 2.8x (-64%)
jruby 0.8x (+23%)
rubinius 1.2x (-16%)
vm2_zsuper 3.57 1.31 5.26 2.55 YARV Rubinius MRI
mri 3.57 seconds (100%)
yarv 2.7x (-63%)
jruby 0.7x (+47%)
rubinius 1.4x (-28%)
vm3_thread_create_join 0.03 0.12 0.40 error MRI YARV JRuby
mri 0.03 seconds (100%)
yarv 0.2x (+325%, cut)
jruby 0.1x (+1329%, cut)
rubinius: error
vm3_thread_mutex 80.99 32.18 25.87 error JRuby YARV MRI
mri 80.99 seconds (100%)
yarv 2.5x (-60%)
jruby 3.1x (-68%)
rubinius: error
lib_coderay 0.82 0.74 t/o error YARV MRI None
mri 0.82 seconds (100%)
yarv 1.1x (-9%)
jruby: timeout
rubinius: error
lib_json_pure 0.36 0.28 t/o error YARV MRI None
mri 0.36 seconds (100%)
yarv 1.3x (-23%)
jruby: timeout
rubinius: error
interpreter_require 0.06 0.11 2.88 error MRI YARV JRuby
mri 0.06 seconds (100%)
yarv 0.6x (+75%)
jruby 0.0x (+4616%, cut)
rubinius: error

* means that results of loop_whileloop/loop_whileloop2 are subtracted.
The time for launch is subtracted from all other benchmarks.

group # yarv jruby rubinius
Mini apps (app)11 2.3x 0.8x 1.3x
Interpreter (interpreter)2 0.5x 0.0x 0.2x
I/O (io)3 1.0x 0.4x
Libraries (lib)2 1.2x
Loops (loop)4 6.8x 0.7x 2.0x
Shootout (so)24 1.9x 0.8x 0.3x
Core (vm)24 11.3x 1.2x 1.7x

Sourcecode

require 'cgi'

puts <<-HEAD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" version="-//W3C//DTD XHTML 1.1//EN" xml:lang="de">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>Ruby 1.8 vs. 1.9 Benchmarks</title>
  <style type="text/css" media="screen">
    html { font-family: 'Trebuchet MS', Verdana, Arial, sans-serif; }
    td {
      vertical-align: middle;
      white-space: nowrap;
      padding: 2px 0.3em;
      text-align: left;
      border: 1px solid black; border-width: 2px 0;
      height: 50px;
    }
    table {
      border-collapse: collapse;
      margin: 0;
    }
    thead td { border-top-width: 0; }
    .time { font-size: 0.9em; }
    .center { text-align: center; }
    .right { text-align: right; }
    .newgroup { border-left: 2px solid black; }
    .note { color: red; font-weight: bold; }
    .error { color: darkred }
    .timeout { color: purple; }
    .success { color: green; }
    dd { font-style: italic; }
    
    .bar {
      margin: 0px; padding: 0px;
      white-space: nowrap;
      font-size: 0.7em;
      height: 12px; margin-top: 1px; padding: 0px 0.2em;
      border: 1px solid gray;
      text-indent: 0.3em;
      text-align: right;
    }
    .mri { background-color: #faa; }
    .yarv { background-color: #fbe; }
    .jruby { background-color: #fb8; }
    .rubinius { background-color: #dba; }
    .bar.error { border: none; text-indent: 0px; color: black; }
    .xfaster { border-color: green; }
    .xslower { border-color: #400; }
  </style>
</head>
<body>

<h1>Benchmarks: Ruby 1.8 and Ruby 1.9</h1>

<p>using:</p>

<dl>
  <dt>Ruby 1.8 (MRI)</dt>
  <dd>ruby 1.8.6 (2007-09-24) [i686-darwin8.10.1]</dd>
  <dt>Ruby 1.9 (YARV)</dt>
  <dd>ruby 1.9.0 (2007-11-09) [i686-darwin8.10.1]</dd>
  <dt>JRuby</dt>
  <dd>ruby 1.8.5 (2007-11-10 rev 4842) [i386-jruby1.1b1]</dd>
  <dt>Rubinius</dt>
  <dd>rubinius 0.8.0 (ruby 1.8.6 compatible) (c1b9f74f8) (11/10/2007) [i686-apple-darwin8.10.1]</dd>
  <dt>System</dt>
  <dd>Mac OS X, MacBook, Core Duo 1.83GHz, 2GB RAM</dd>
</dl>

<p class="note">
  Please note that these are mostly synthetic benchmarks!
</p>

<table>
  <thead>
    <tr>
      <td class="benchmark">Benchmark</td>
      <td class="time right" style="width: 4em">MRI</td>
      <td class="time right" style="width: 4em">YARV</td>
      <td class="time right" style="width: 4em">JRuby</td>
      <td class="time right" style="width: 4em">Rubinius</td>
      <td class="time right">1st</td>
      <td class="time right">2nd</td>
      <td class="time right">3rd</td>
      <td class="time">(in seconds)</td>
    </tr>
  </thead>
  <tbody>
HEAD

WIDTH_FACTOR = 250
MAX_WIDTH = 600
EXPLAIN = {
  'app' => 'Mini apps',
  'so' => 'Shootout',
  'lib' => 'Libraries',
  'vm' => 'Core',
  'loop' => 'Loops',
  'io' => 'I/O',
  'other' => 'Other',
  'interpreter' => 'Interpreter',
}

speedups_for = Hash.new do |h, k|
  h[k] = { 'yarv' => [], 'jruby' => [], 'rubinius' => [] }
end
looptime = Hash.new([0, 0])

def benchmark_result result
  case result
  when '-ERROR-'
    :error
  when '-TIMEOUT-'
    :timeout
  else
    result.to_f
  end
end

DATA.read.scan(/^\s*(\w+)\*?\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+) *(.+)?/) do |name, ruby18, ruby19, jruby, rubinius, comment|
  
  next if name == 'Benchmark'  # skip header
  
  if false #broken
    puts "<tr class=\"broken\">"
    puts "<td class=\"benchmark\">%s</td>" % [name] + "<td></td>" * 2 + "<td>[#{$4}]</td>"
    puts "</tr>"
    next
  end
  
  results = [ruby18, ruby19, jruby, rubinius]
  results.map! do |result|
    benchmark_result result
  end
  
  # build HTML table
  puts "<tr>"
  puts '<td class="benchmark time">%s</td>' % name
  newgroup = 'newgroup'
  for interpreter, result in %w(MRI YARV JRuby Rubinius).zip results
    print '<td class="time right %s %s">' % [interpreter.downcase, newgroup]
    case result
    when Float
      print '<span class="success">%0.2f</span>' % result
    when :error
      print '<span class="error">error</span>'
    when :timeout
      print '<span class="timeout">t/o</span>'
    end
    puts '</td>'
    newgroup = false
  end
  
  newgroup = 'newgroup'
  for place in results.map { |r| r.is_a?(Numeric) ? r : 1.0/0.0 }.sort[0,3]
    winner = %w(MRI YARV JRuby Rubinius None)[results.index(place) || 4]
    puts '<td class="center time %s %s">%s</td>' % [winner.downcase, newgroup, winner || '-']
    newgroup = false
  end
  
  puts '<td class="newgroup">'
  reference = results.first
  unless reference.is_a? Float
    reference = results[1]
    mri_broken = true
  end
  
  if reference.is_a? Float
    puts '<div class="bar mri" style="width: %dpx">mri %0.2f seconds (100%%)</div>' % [
      WIDTH_FACTOR,
      reference
    ]
    results[1..-1].each_with_index do |result, index|
      if result.is_a? Float
        relative_time = result / reference
        interpreter = %w(yarv jruby rubinius)[index]
        puts '<div class="bar %s %s" style="width: %dpx">%s %0.1fx (%+0.0f%%%s)</div>' % [
          interpreter,
          (result <= reference ? 'faster' : 'slower'),
          [MAX_WIDTH, WIDTH_FACTOR * relative_time].min,
          interpreter,
          (reference / result),
          100 * (relative_time - 1),
          (', cut' if WIDTH_FACTOR * relative_time > MAX_WIDTH),
        ]
        speedup = reference / result
        if name[/^(app|loop|so|vm|lib|io|interpreter)/]
          speedups_for[$1][interpreter] << speedup
        else
          speedups_for['other'][interpreter] << speedup
        end
      else
        puts '<div class="bar error" style="width: %dpx">%s: %s</div>' % [
          0,
          %w(yarv jruby rubinius)[index],
          result.to_s,
        ]
      end
    end
  end
  puts '</td>'
  puts "</tr>"
  
end
puts "</tbody></table>"

puts "<p><small>* means that results of loop_whileloop/loop_whileloop2 are subtracted.</small><br />"
puts "<small>The time for launch is subtracted from all other benchmarks.</small></p>"

if true
  puts <<-HTML
  <table>
    <thead>
      <tr>
        <td class="benchmark">group</td>
        <td class="right">#</td>
        <td class="right">yarv</td>
        <td class="right">jruby</td>
        <td class="right">rubinius</td>
      </tr>
    </thead>
    <tbody>
  HTML
  speedups_for.sort.each do |tag, speedups_by_interpreter|
    puts '<tr>'
    size = speedups_by_interpreter['yarv'].size
    puts "<td>#{EXPLAIN[tag]} (#{tag})</td><td class=\"right\">%d</td>" % [size]
    speedups_by_interpreter.
      sort_by { |interpreter, speedups| %(yarv jruby rubinius).index interpreter }.
      map do |interpreter, speedups|
        print '<td class="right">'
        unless speedups.empty?
          average_speedup = speedups.inject { |sum,x| sum + x } / speedups.size
          print '%0.1fx' % average_speedup
        end
        puts '</td>'
      end
    puts '</tr>'
  end
  puts "</tbody></table>"
end

puts <<-BODY
<h3>Sourcecode</h3>
<pre>#{DATA.rewind; CGI.escapeHTML(DATA.read)}</pre>
</body>
</html>
BODY
__END__
             Benchmark        MRI 1.8.6      YARV 1.9.0       JRuby 1.1  Rubinius 0.8.0
            app_answer            0.610           0.140           1.001           0.223
               app_erb            2.180           2.101           7.305         -ERROR-
         app_factorial          -ERROR-           1.090           4.553           1.514
               app_fib            7.929           1.959           7.603           3.718
        app_mandelbrot            2.757           1.229           3.505          21.347
         app_pentomino          114.433          59.071         181.930       -TIMEOUT-
             app_raise            2.846           3.425           2.651           3.242
         app_strconcat            1.897           1.419           1.801           1.805
               app_tak            9.569           2.641           8.553           4.799
             app_tarai            7.692           2.140           6.802           8.399
               app_uri            4.697           2.581           5.104         -ERROR-
        io_file_create            3.169           3.561          29.819         -ERROR-
          io_file_read            1.221           1.577           2.300         -ERROR-
         io_file_write            0.683           0.521           1.253         -ERROR-
    interpreter_launch            0.017           0.033           1.781           0.086
        loop_generator           26.527           1.790       -TIMEOUT-         -ERROR-
            loop_times            6.062           4.436          11.956          18.640
        loop_whileloop           10.334           1.869          13.505           3.608
       loop_whileloop2            2.086           0.367           2.751           0.746
          so_ackermann          -ERROR-           2.021          39.582           3.699
              so_array            7.368           4.414          24.971         101.479
       so_binary_trees            3.318           1.807           5.354         -ERROR-
        so_concatenate            2.167           1.680           5.605          18.086
        so_count_words            3.955           4.238           2.451         -ERROR-
          so_exception            4.880           4.578           7.652         145.619
           so_fannkuch           82.430          60.596          62.791         -ERROR-
              so_fasta           11.056           8.028          22.916       -TIMEOUT-
       so_k_nucleotide            6.492           6.074           9.610         -ERROR-
              so_lists            1.300           1.008           3.553         -ERROR-
         so_mandelbrot           32.747          19.023          29.210       -TIMEOUT-
             so_matrix            2.539           1.140           3.293          12.312
     so_meteor_contest           38.065          24.966          42.271         -ERROR-
              so_nbody           23.775          12.648          24.761         122.077
        so_nested_loop            6.137           3.917          12.458           9.949
             so_nsieve           22.552           8.744          26.730         -ERROR-
        so_nsieve_bits           52.979          10.770          67.980          89.700
             so_object            8.056           2.623           6.353           7.304
       so_partial_sums           26.516          13.350          29.715         160.146
           so_pidigits            6.363           7.000          11.157           8.417
             so_random            2.215           0.749           2.851         105.381
 so_reverse_complement            4.360           4.327         -ERROR-         -ERROR-
              so_sieve            0.702           0.207           1.004           3.386
       so_spectralnorm           28.459          14.420          36.268         293.515
             vm1_block*          14.372           4.910          23.861          21.857
             vm1_const*           7.021           0.962           3.152          20.115
            vm1_ensure*           7.422           0.041           6.254           0.932
              vm1_ivar*           6.726           4.188           2.402           5.227
          vm1_ivar_set*           7.434           4.420           7.304           4.849
            vm1_length*           9.735           3.227           6.652          12.748
            vm1_rescue*           2.865           0.241          10.555           1.108
      vm1_simplereturn*          10.837           3.116           6.354           6.085
              vm1_swap*          15.678           0.751           5.407           2.136
             vm2_array*           4.263           3.138           2.001           6.773
              vm2_case*           2.882           0.421           4.105           3.242
              vm2_eval*          14.153          60.226         111.099       -TIMEOUT-
            vm2_method*          10.791           5.180          12.657          10.036
             vm2_mutex*           3.370           3.751           7.454         -ERROR-
       vm2_poly_method*          14.479           6.234          31.964          13.089
    vm2_poly_method_ov*           2.527           0.511           2.203           2.823
              vm2_proc*           5.422           1.963           5.655           7.038
            vm2_regexp*           2.712           3.516           7.356          28.525
              vm2_send*           2.560           0.761           3.055           2.230
             vm2_super*           3.045           1.257           3.153           2.383
             vm2_unif1*           1.875           0.681           2.303           1.574
            vm2_zsuper*           3.566           1.312           5.256           2.552
vm3_thread_create_join            0.028           0.119           0.400         -ERROR-
      vm3_thread_mutex           80.988          32.180          25.872         -ERROR-
           lib_coderay            0.817           0.745       -TIMEOUT-         -ERROR-
         lib_json_pure            0.362           0.279       -TIMEOUT-         -ERROR-
   interpreter_require            0.061           0.107           2.877         -ERROR-