Volano

The Volano Report


For background information on VolanoMark and its download locations, please see our Benchmarks page. Since the server side of the VolanoMark benchmark is our VolanoChat server, these test results help our customers choose the best Java virtual machine for their environment. VolanoMark is a pure Java server benchmark characterized by long-lasting network connections and high thread counts. The VolanoMark benchmark creates client connections in groups of 20 and measures the time required by the clients to take turns broadcasting a set of messages to the group. At the end of the test, it reports a score as the average number of messages transferred by the server per second. All tests ran identical copies of VolanoMark 2.1.2 on identical hardware.

Bug Id 4075058, "java.io: Add support for non-blocking I/O," explains why you need lots of threads to handle dedicated connections to a pure Java server. JSR 51, "New I/O APIs for the Java Platform," explains how Sun plans to change that.

Performance

The performance test was executed with the following commands on a local loopback connection, using the heap size options shown below where possible. The operating system was rebooted before each set of tests for a particular Java virtual machine. The client benchmark ran four times, with the final score as the average of the last three results. The server side was not restarted before each run of the client benchmark.

Server
java -Xms8m -Xmx64m COM.volano.Main
Client
java -Xms8m -Xmx64m COM.volano.Mark -count 100

Figure 1. VolanoMark 2.1.2 performance test showing the throughput in messages per second with 200 concurrent local loopback connections. Bigger numbers are faster. Click here for details.

Network Scalability

The network scalability test was executed with the following commands over a 100-Mbps Ethernet cross-over cable connection, using the heap and stack size options shown below where possible. The operating systems on both sides were rebooted before each set of tests for a particular Java virtual machine. The VolanoMark server was not restarted between client test runs.

Server
java -Xms8m -Xmx256m -Xss32k COM.volano.Main
Client
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 50
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 100
...
java -Xms64m -Xmx256m -Xss64k COM.volano.Mark -host xxx.yyy.zzz -rooms 300

Figure 2. VolanoMark 2.1.2 network scalability test showing the maximum number of concurrent network connections achieved during the test. Bigger numbers indicate greater network scalability. The order of the Java virtual machines is preserved from Figure 1. Click here for details. There's also a line plot of the data.

Environment

Hardware

Server

The server machine under test is a Dell OptiPlex GXpro with a 200-MHz Intel Pentium Pro processor, 256 kilobytes L2 cache, 320 megabytes ECC EDO RAM, a 3Com EtherLink XL 10/100 PCI TX NIC (3C905B-TX), and Phoenix ROM BIOS PLUS Version 1.10 A10.

Client

The client side driving the network tests is a Dell OptiPlex GX1 with a 500-MHz Intel Pentium III processor, 512 kilobytes L2 cache, 384 megabytes ECC SDRAM, a 3Com EtherLink XL 10/100 PCI TX NIC (3C905B-TX), and Dell OptiPlex GX1 500L+ BIOS Revision A08. The client test driver was executed under the Sun J2SE 1.3.0_02 HotSpot Server VM using Solaris 8 (6/00).

Software

Test Scripts

Loopback performance tests

The following Unix shell scripts and Windows batch files were used for the loopback performance tests with 200 concurrent connections. For a sleep function, the Windows batch files used sleep.java.

server.sh
UNIX server side
client.sh
UNIX client side
server.bat
Windows server side
client.bat
Windows client side
Network Scalability Tests

The following Unix shell scripts and Windows batch files were used for the network scalability tests with 1,000 through 6,000 concurrent connections.

netserver.sh
UNIX server side
netserver.bat
Windows server side
netclient.sh
Client side on Solaris 8 (6/00)

Operating Systems

FreeBSD 4.2-RELEASE
FreeBSD ppro 4.2-RELEASE FreeBSD 4.2-RELEASE #0: Mon Nov 20 13:02:55 GMT 2000
  jkh@bento.FreeBSD.org:/usr/src/sys/compile/GENERIC  i386

Contents of /etc/sysctl.conf:

# Increase file descriptor limits from their defaults of 1064.
kern.maxfiles=16384             # System-wide limit
kern.maxfilesperproc=8192       # Per-process limit
Microsoft Windows 2000 Professional
Microsoft Windows 2000 Service Pack 1 [Version 5.00.2195]

Optimized performance for background services (rather than applications) under Start, Settings, Control Panel, System, Advanced, Performance Options, Application response. This change specifies that all programs receive equal amounts of processor resources.

Red Hat Linux 7.0

Applied all updates using Red Hat's up2date program.

Red Hat Linux release 7.0 (Guinness)
Linux ppro.sf.volano.net 2.2.17-14 #1 Mon Feb 5 16:02:20 EST 2001 i686 unknown
Glibc 2.2-12

Added to /etc/sysctl.conf:

# Increase system-wide file descriptor limit.
fs.file-max = 10240
fs.inode-max = 40960

Added to /etc/pam.d/login:

session    required     /lib/security/pam_limits.so

Added to /etc/security/limits.conf:

*       soft    nofile  1024
*       hard    nofile  10240
Sun Solaris 8 (6/00)

Added latest recommended patch cluster dated March 30, 2001.

Solaris 8 6/00 s28x_u1wos_08 INTEL
SunOS ppro 5.8 Generic_108529-06 i86pc i386 i86pc

Added to /etc/system:

set rlim_fd_max = 8192
set rlim_fd_cur = 1024

Java Virtual Machines

IBM 1.3.0 Windows
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cn130-20010207 (JIT enabled: jitc))
IBM 1.3.0 Linux
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0)
Classic VM (build 1.3.0, J2RE 1.3.0 IBM build cx130-20010207 (JIT enabled: jitc))
Microsoft 1.1.4 Windows
Microsoft (R) Command-line Loader for Java  Version 5.00.3802
Copyright (C) Microsoft Corp 1996-2000. All rights reserved.
Appeal JRockit 2.0.5 Windows
JRockit build 2.0.5-excelsior68, Thin Threads,
  Generational Stop & Copy Garbage Collector, started.

java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
JRockit(tm) Virtual Machine (build 2.0.5-excelsior68, Thin Threads)
Appeal JRockit 2.0.4 Linux
java version "1.3"
JRockit(tm) Virtual Machine (build 2.0.4-dax17, Thin Threads)
Java Home: /usr/java/jdk1.3.0_02/jre
Using bootclasspath
  /usr/java/jdk1.3.0_02/jre/lib/rt.jar:
  /usr/java/jdk1.3.0_02/jre/lib/i18n.jar:
  /usr/java/jdk1.3.0_02/jre/classes
Sun 1.3.0 Windows (HotSpot Server VM)
java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Java HotSpot(TM) Server VM (build 2.0fcs-E, mixed mode)
Sun 1.3.0 Linux (HotSpot Server VM)
java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Java HotSpot(TM) Server VM (build 1.3.0_02, mixed mode)
Sun 1.2.2 Solaris (Exact VM)
java version "1.2.2"
Solaris VM (build Solaris_JDK_1.2.2_07, native threads, sunwjit)
Blackdown 1.3.0 Linux (green threads, OpenJIT)
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS)
Classic VM (build Blackdown-1.3.0-FCS, green threads, OpenJIT)
Sun 1.3.0 Solaris (HotSpot Server VM)
java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Java HotSpot(TM) Server VM (build 1.3.0_02, mixed mode)
Blackdown 1.3.0 FreeBSD (green threads, OpenJIT)
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS)
Classic VM (build Blackdown-1.3.0-FCS, green threads, OpenJIT)

Ran using the Linux emulation package:

Linux ppro 2.2.12 FreeBSD 4.2-RELEASE #0:
  Mon Nov 20 13:02:55 GMT 2000 jkh@ben i386 unknown
Glibc 2.1.2

Modified /usr/local/j2sdk1.3.0/bin/.java_wrapper as follows:

> diff .java_wrapper.old .java_wrapper
36,37c36,37
<     link=`expr "$ls" : '.*-> \(.*\)$'`
<     if expr "${link}" : '/' > /dev/null; then
---
>     link=`/usr/compat/linux/usr/bin/expr "$ls" : '.*-> \(.*\)$'`
>     if /usr/compat/linux/usr/bin/expr "${link}" : '/' > /dev/null; then
Blackdown 1.3.0 Linux (green threads, nojit)
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build Blackdown-1.3.0-FCS)
Classic VM (build Blackdown-1.3.0-FCS, green threads, nojit)
Sun 1.3.0 Linux (green threads, nojit)
java version "1.3.0_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0_02)
Classic VM (build 1.3.0_02, green threads, nojit)

Valid HTML 4.01! Valid CSS! Copyright © 2001 Volano LLC. All rights reserved. Volano, VolanoChat, and VolanoMark are trademarks of Volano LLC. All other trademarks are the property of their respective owners. Contact John Neffenger with questions or comments. Charts created with Ploticus Data Display Software.