Wednesday Aug 24, 2011

Latest JSR 292 performance work

It's been a long time since my last post (over a year) and in the meantime we have released JDK 7 with JSR 292 support.  Right now I'm working on JSR 292 performance and which should be included in the next JDK 7 update (7u) release.

I just sent out an email to the mlvm-dev mailing list with some JRuby performance numbers for:

7079673: JSR 292: C1 should inline bytecoded method handle adapters

I paste them here again for convenience.

intelsdv07:~/mlvm/jruby$ jruby -J-showversion --client bench/bench_fib_complex.rb 5 35
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

normal fib
11.765000   0.000000  11.765000 ( 11.748000)
11.765000   0.000000  11.765000 ( 11.765000)
11.746000   0.000000  11.746000 ( 11.746000)
11.745000   0.000000  11.745000 ( 11.745000)
11.702000   0.000000  11.702000 ( 11.702000)
fib with constants
14.879000   0.000000  14.879000 ( 14.879000)
14.912000   0.000000  14.912000 ( 14.912000)
15.255000   0.000000  15.255000 ( 15.255000)
15.168000   0.000000  15.168000 ( 15.169000)
15.320000   0.000000  15.320000 ( 15.320000)
fib with additional calls
25.799000   0.000000  25.799000 ( 25.798000)
25.705000   0.000000  25.705000 ( 25.705000)
26.044000   0.000000  26.044000 ( 26.044000)
26.028000   0.000000  26.028000 ( 26.028000)
26.351000   0.000000  26.351000 ( 26.351000)
fib with constants and additional calls
25.053000   0.000000  25.053000 ( 25.053000)
24.406000   0.000000  24.406000 ( 24.406000)
24.550000   0.000000  24.550000 ( 24.550000)
24.478000   0.000000  24.478000 ( 24.478000)
24.381000   0.000000  24.381000 ( 24.381000)

intelsdv07:~/mlvm/jruby$ jruby -J-showversion --client -Xcompile.invokedynamic=false bench/bench_fib_complex.rb 5 35
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

normal fib
 1.778000   0.000000   1.778000 (  1.724000)
 1.740000   0.000000   1.740000 (  1.740000)
 1.734000   0.000000   1.734000 (  1.734000)
 1.735000   0.000000   1.735000 (  1.736000)
 1.745000   0.000000   1.745000 (  1.745000)
fib with constants
 3.420000   0.000000   3.420000 (  3.420000)
 3.379000   0.000000   3.379000 (  3.379000)
 3.387000   0.000000   3.387000 (  3.387000)
 3.398000   0.000000   3.398000 (  3.398000)
 3.389000   0.000000   3.389000 (  3.389000)
fib with additional calls
 2.953000   0.000000   2.953000 (  2.953000)
 2.973000   0.000000   2.973000 (  2.973000)
 2.974000   0.000000   2.974000 (  2.974000)
 2.977000   0.000000   2.977000 (  2.977000)
 2.979000   0.000000   2.979000 (  2.979000)
fib with constants and additional calls
 4.290000   0.000000   4.290000 (  4.290000)
 4.222000   0.000000   4.222000 (  4.222000)
 4.221000   0.000000   4.221000 (  4.222000)
 4.223000   0.000000   4.223000 (  4.223000)
 4.222000   0.000000   4.222000 (  4.221000)

intelsdv07:~/mlvm/jruby$ jruby -J-showversion --client bench/bench_fib_complex.rb 5 35
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b01)
Java HotSpot(TM) Client VM (build 22.0-b01-internal, mixed mode)

normal fib
 1.072000   0.000000   1.072000 (  1.056000)
 1.059000   0.000000   1.059000 (  1.059000)
 1.042000   0.000000   1.042000 (  1.042000)
 1.043000   0.000000   1.043000 (  1.044000)
 1.048000   0.000000   1.048000 (  1.049000)
fib with constants
 3.178000   0.000000   3.178000 (  3.179000)
 3.036000   0.000000   3.036000 (  3.036000)
 3.056000   0.000000   3.056000 (  3.056000)
 3.052000   0.000000   3.052000 (  3.052000)
 3.052000   0.000000   3.052000 (  3.052000)
fib with additional calls
 1.698000   0.000000   1.698000 (  1.698000)
 1.677000   0.000000   1.677000 (  1.677000)
 1.677000   0.000000   1.677000 (  1.677000)
 1.678000   0.000000   1.678000 (  1.678000)
 1.680000   0.000000   1.680000 (  1.680000)
fib with constants and additional calls
 3.483000   0.000000   3.483000 (  3.483000)
 3.501000   0.000000   3.501000 (  3.501000)
 3.496000   0.000000   3.496000 (  3.496000)
 3.498000   0.000000   3.498000 (  3.498000)
 3.530000   0.000000   3.530000 (  3.530000)

And here are some numbers for the Red Black Tree benchmark:

intelsdv07:~/mlvm/redblack$ jruby -J-showversion --client bm1.rb
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

18.136
17.942
17.969
17.783
17.916

intelsdv07:~/mlvm/redblack$ jruby -J-showversion --client -Xcompile.invokedynamic=false bm1.rb
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) Client VM (build 21.0-b17, mixed mode)

2.791
2.563
2.587
2.568
2.628

intelsdv07:~/mlvm/redblack$ jruby -J-showversion --client bm1.rb
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b01)
Java HotSpot(TM) Client VM (build 22.0-b01-internal, mixed mode)

3.998
2.278
2.25
2.204
2.193

Thursday Feb 25, 2010

First invokedynamic call on SPARC

Today I successfully executed an invokedynamic call on SPARC for the first time.  Excellent!

$ bin/jruby.gamma -J-XX:+UseSerialGC -J-Djruby.compile.invokedynamic=true -J-Xint -J-XX:+UnlockExperimentalVMOptions -J-XX:+EnableMethodHandles -J-XX:+EnableInvokeDynamic bench/bench_fib_recursive.rb 
OpenJDK Server VM (17.0-b08-internal-jvmg) for solaris-sparc JRE (1.7.0), built on Feb 25 2010 04:35:47 by "ct232829" with Workshop 5.9
VM option '+UseSerialGC'
VM option '+UnlockExperimentalVMOptions'
VM option '+EnableMethodHandles'
VM option '+EnableInvokeDynamic'
 52.813000   0.000000  52.813000 ( 52.296000)
 52.824000   0.000000  52.824000 ( 52.823000)
 51.808000   0.000000  51.808000 ( 51.808000)
 49.740000   0.000000  49.740000 ( 49.740000)
 49.450000   0.000000  49.450000 ( 49.450000)

MethodHandle calls already work since a couple of days and I can run the JDK MethodHandlesTest without any errors:

$ gamma -Xinternalversion
OpenJDK Server VM (17.0-b08-internal-jvmg) for solaris-sparc JRE (1.7.0), built on Feb 25 2010 04:35:47 by "ct232829" with Workshop 5.9
$ gamma -Xint -XX:+UnlockExperimentalVMOptions -XX:+EnableMethodHandles -classpath /java/devtools/share/junit/latest/junit.jar:. org.junit.runner.JUnitCore MethodHandlesTestVM option '+UnlockExperimentalVMOptions'
VM option '+EnableMethodHandles'
JUnit version 4.4
OpenJDK Server VM warning: JSR 292 invokedynamic is disabled in this JVM.  Use -XX:+UnlockExperimentalVMOptions -XX:+EnableInvokeDynamic to enable.
.IIIIII.findStatic
:::::::::::.findVirtual
:::::::::::::::.findSpecial
::.bind
::::::::::::::::::::::.unreflect
::::::::::::::::::::::::I.unreflectGetter
.unreflectSetter
.arrayElementGetter
.arrayElementSetter
.convertArguments
::::::.permuteArguments
.spreadArguments
.collectArguments
.insertArguments
.filterArguments
.foldArguments
.dropArguments
.exactInvoker, genericInvoker, varargsInvoker, dynamicInvoker
.guardWithTest
.catchException
.throwException
.testCastFailure

Time: 7.984

OK (23 tests)

JSR 292 SPARC support is on its way...

About

Random posts from a HotSpot engineer.

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today