/deltablue

Benchmark

Primary LanguageJava

Update October 2014

After 2 years of hard work from the Dart team, Dart is now comfortably ahead of the JVM and V8.

Here are the raw results. (Thanks for running this Rob).

java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.2-19ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) 
V8 version 3.30.11 [console: dumb]
d8> 
Dart VM version: 1.7.2 (Tue Oct 14 12:12:42 2014) on "linux_x64"
DeltaBlue   Java        10x 2.6 ms
java DeltaBlue 10 secs 0.09, mem 26088, cpu 173%
DeltaBlue   Java        100x    0.75 ms
java DeltaBlue 100 secs 0.15, mem 41044, cpu 246%
DeltaBlue   Java        1000x   0.34 ms
java DeltaBlue 1000 secs 0.52, mem 79088, cpu 257%
DeltaBlue   Java        10000x  0.258 ms
java DeltaBlue 10000 secs 2.64, mem 210396, cpu 158%
DeltaBlue   Java        100000x 0.2529 ms
java DeltaBlue 100000 secs 25.36, mem 219164, cpu 108%
DeltaBlue   C   gcc 10x 0.9ms
Command exited with non-zero status 26
./deltablue 10 gcc secs 0.00, mem 652, cpu 100%
DeltaBlue   C   gcc 100x    0.51ms
Command exited with non-zero status 28
./deltablue 100 gcc secs 0.05, mem 652, cpu 100%
DeltaBlue   C   gcc 1000x   0.494ms
Command exited with non-zero status 30
./deltablue 1000 gcc secs 0.49, mem 652, cpu 100%
DeltaBlue   C   gcc 10000x  0.4947ms
Command exited with non-zero status 32
./deltablue 10000 gcc secs 4.94, mem 652, cpu 99%
DeltaBlue   C   gcc 100000x 0.49071ms
Command exited with non-zero status 34
./deltablue 100000 gcc secs 49.08, mem 656, cpu 99%
DeltaBlue   C   gcc -O3 10x 0.2ms
Command exited with non-zero status 30
./deltablue-o3 10 gcc -O3 secs 0.00, mem 656, cpu 100%
DeltaBlue   C   gcc -O3 100x    0.26ms
Command exited with non-zero status 32
./deltablue-o3 100 gcc -O3 secs 0.02, mem 656, cpu 100%
DeltaBlue   C   gcc -O3 1000x   0.231ms
Command exited with non-zero status 34
./deltablue-o3 1000 gcc -O3 secs 0.23, mem 660, cpu 100%
DeltaBlue   C   gcc -O3 10000x  0.2283ms
Command exited with non-zero status 36
./deltablue-o3 10000 gcc -O3 secs 2.28, mem 660, cpu 99%
DeltaBlue   C   gcc -O3 100000x 0.22498ms
Command exited with non-zero status 38
./deltablue-o3 100000 gcc -O3 secs 22.50, mem 660, cpu 99%
DeltaBlue   d8      10x 4ms
./d8 deltablue.js -- 10 secs 0.05, mem 15416, cpu 156%
DeltaBlue   d8      100x    0.71ms
./d8 deltablue.js -- 100 secs 0.08, mem 15580, cpu 160%
DeltaBlue   d8      1000x   0.251ms
./d8 deltablue.js -- 1000 secs 0.26, mem 19884, cpu 120%
DeltaBlue   d8      10000x  0.2002ms
./d8 deltablue.js -- 10000 secs 2.01, mem 29160, cpu 103%
DeltaBlue   d8      100000x 0.19085ms
./d8 deltablue.js -- 100000 secs 19.09, mem 46432, cpu 100%
DeltaBlue   Dart        10x 4.8ms
dart DeltaBlue.dart 10 secs 0.11, mem 14896, cpu 93%
DeltaBlue   Dart        100x    0.7ms
dart DeltaBlue.dart 100 secs 0.13, mem 16264, cpu 100%
DeltaBlue   Dart        1000x   0.202ms
dart DeltaBlue.dart 1000 secs 0.26, mem 16268, cpu 101%
DeltaBlue   Dart        10000x  0.1434ms
dart DeltaBlue.dart 10000 secs 1.49, mem 16228, cpu 100%
DeltaBlue   Dart        100000x 0.13698ms
dart DeltaBlue.dart 100000 secs 13.76, mem 18216, cpu 101%


Update - DartVM now beats JVM v1.8 see Nickolay's blog for details.
http://bonovox.be/blog/?p=128

Original (Buggy) benchmark.
http://labs.oracle.com/people/mario/java_benchmarking/index.html

Updated faster java benchmark.
https://community.cablelabs.com/svn/OCAPRI/tags/RI-I1_1_1-REL-A/ri/ODLSrc/OCAP-1.0/jvm/Sun/src/share/javavm/test/COM/sun/labs/kanban/DeltaBlue/DeltaBlue.java

C Benchmark (And the original slow Java version, plus a few others)
http://www.cl.cam.ac.uk/~mr10/Bench.html

Dart benchmark
https://github.com/dart-lang/benchmark_harness


Results, allowing enough iterations for the VM's to warm up.
gcc -O3   1x
JVM       1.2x
DartVM    1.3x
V8        1.6x
gcc       2.5x


Comments on other aspects of the benchmark:

The DartVM uses more memory than V8, and less than the JVM. Dart and V8 start
up faster than the JVM (Not much of a surprise there). However interestingly,
V8 appears to startup measurably faster than the DartVM. When testing a single
iteration, V8 consistently takes ~10ms to start the benchmark, and ~20ms to
execute it, versus Dart, which takes ~30ms to start, and also ~20 to execute.

Using a script snapshot had no measurable impact on start up time. This
probably reflects the small size of the benchmark, which doesn't use much, if
any (excluding List) of the standard library code.

At a wild guess, I'd say the start up time difference is due to Dart having a
larger standard library, thus a larger initial snapshot, which takes a little
longer to copy into memory. For usage in browsers, this 20ms headstart is
likely irrelevant as the VM can be already be started before the first code is
received.

It would be nice to see some start up benchmarks using larger applications, so
that improved start up time vs V8, can be evaluated. Perhaps using a large Dart
application, built with dart2js, running on V8, and comparing against the start
up time on the Dart VM is the way to go?



java version "1.6.0_26"
gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
V8 version 3.17.15.1
Dart VM version: 0.4.2.8_r20259 (Tue Mar 19 23:33:54 2013)

DeltaBlue	Java		10x	9.3 ms
DeltaBlue	Java		100x	2.96 ms
DeltaBlue	Java		1000x	0.898 ms
DeltaBlue	Java		10000x	0.5229 ms
DeltaBlue	Java		100000x	0.48908 ms

DeltaBlue	C	gcc	10x	0ms
DeltaBlue	C	gcc	100x	1ms
DeltaBlue	C	gcc	1000x	0.98ms
DeltaBlue	C	gcc	10000x	0.993ms
DeltaBlue	C	gcc	100000x	0.9927ms

DeltaBlue	C	gcc -O3	10x	0ms
DeltaBlue	C	gcc -O3	100x	0.4ms
DeltaBlue	C	gcc -O3	1000x	0.39ms
DeltaBlue	C	gcc -O3	10000x	0.416ms
DeltaBlue	C	gcc -O3	100000x	0.3936ms

DeltaBlue	d8		10x	4.1ms
DeltaBlue	d8		100x	1.16ms
DeltaBlue	d8		1000x	0.729ms
DeltaBlue	d8		10000x	0.6636ms
DeltaBlue	d8		100000x	0.65464ms

DeltaBlue	Dart		10x	5.9ms
DeltaBlue	Dart		100x	1.24ms
DeltaBlue	Dart		1000x	0.636ms
DeltaBlue	Dart		10000x	0.536ms
DeltaBlue	Dart		100000x	0.55263ms