SPEC logo

SPECjbb2000 User's Guide


1 Introduction

1.1 Background

1.2 General Concepts

2 Installation and Setup of SPECjbb2000

2.1 Installation of SPECjbb2000

2.1.1 Installing the benchmark

2.1.2 Trial run of SPECjbb2000

2.2 Setup

2.2.1 Properties File Setup

2.2.1.1 Properties Format

2.2.1.2 Control Properties

3 Running SPECjbb2000

3.2 Running the benchmark

3.3 Running the Reporter

4 Customizing the properties files

4.1 Control parameters

4.2 Configuration description parameters

5 Operational Validity

6 The Metric

7 Results Reports

7.1 Raw file

7.2 HTML Result Pages

7.3 ASCII report file

7.4 Screen Output

Test verification and summary of benchmark settings

Results from each point

Overall SPECjbb2000 result

Configuration Information

8 Troubleshooting

9 Performance Tuning

JVM Software

CLASSPATH

Memory

Threads

JVM Locking

Network

Disk I/O

10 Submitting results




1 Introduction

This document is a practical guide for setting up and running a SPEC Java Business Benchmark (SPECjbb2000) test. To submit SPECjbb2000 results the benchmarker must adhere to the rules contained in the "Run and Reporting Rules" contained in the kit. For an overview of the benchmark architecture, see the SPECjbb2000 whitepaper.

This document is targetted at people trying to run the SPECjbb2000 benchmark in order to accurately measure their Java system, comprised of a JVM and an underlying operating system and hardware.




1.1 Background

SPECjbb2000 is a Java program emulating a 3-tier system with emphasis on the middle tier. Random input selection represents the first (user) tier. SPECjbb2000 fully implements the middle tier business logic. The third tier is represented by binary trees rather than a separate database.

The motivation behind SPECjbb2000 is that it is, and will continue to be, common to use Java as middleware between a database and customers. SPECjbb2000 is representative of a middle tier system, with simplifications to isolate it for benchmarking. This strategy saves the benchmarker the expense of having to invest in a fast database system in order to measure various JVM systems. The implication is that combining a JVM which proves to be fast on SPECjbb2000, with a database system which is proven to be fast on TPC-C, will provide a business with a fast and robust overall multi-tier environment. The decomposition into a separate middleware test makes testing accessible to more people.

SPECjbb2000 is inspired by the TPC-C benchmark and loosely follows the TPC-C specification for its schema, input generation, and transaction profile. SPECjbb2000 replaces database tables with Java classes and replaces data records with Java objects. SPECjbb2000 does no disk IO.

SPECjbb2000 runs in a single JVM in which threads represent terminals in SPECjbb2000, where each thread independently generates random input before calling transaction specific logic. There is no network IO in SPECjbb2000.

1.2 General Concepts

A warehouse is a unit of stored data. It contains roughly 25MB of data stored in many objects in many Btrees. A thread represents a terminal user within a warehouse. There is a one-to-one mapping between warehouses and threads, plus a few threads for SPECjbb2000 main and various JVM functions. As the number of warehouses increases during the full benchmark run, so does the number of threads.

A "point" represents a two-minute measurement at a given number of warehouses. A full benchmark run consists of a sequence of measurement points with an increasing number of warehouses (and thus an increasing number of threads).




2 Installation and Setup of SPECjbb2000

2.1 Installation of SPECjbb2000

2.1.1 Installing the benchmark

This section describes the steps necessary to set up SPECjbb2000. The setup instructions for most platforms are very similar to these generic setup instructions.

  1. Make sure Java is correctly installed on the test machine.
  2. Put the CD in the CDROM drive.
  3. Mount it (if necessary) and enter the top-level cdrom directory.
  4. Run InstallShield:
    java setup
    or double click on setup.exe
  5. Follow the instructions from there.

Alternately, to run without the GUI, use the following command:

java setup -o <installation directory>

There should now be several jar files (jbb.jar, jbb_no_precompile.jar, check.jar, and reporter.jar), documentation in doc, and source and class files in src/spec/jbb and src/spec/reporter.

Do NOT recompile (javac).

You are expected to use the bytecodes provided. Recompiling the benchmark will cause validation errors.

2.1.2 Trial run of SPECjbb2000

Try running the benchmark using either

      
run.sh

or

run.bat

as appropriate to your operating system. These are provided as examples, and may require minor modifications for your particular environment. Go to the directory containing the benchmark.
Alternately, set

CLASSPATH=./jbb.jar:./jbb_no_precompile.jar:./check.jar:.\reporter.jar:$CLASSPATH

for Unix or

CLASSPATH=.\jbb.jar;.\jbb_no_precompile.jar;.\check.jar;.\reporter.jar;%CLASSPATH%

for Windows.
To run the benchmark up to 8 points type:

    
java -ms256m -mx256m spec.jbb.JBBmain -propfile SPECjbb.props

The benchmarker will probably not want to keep these numbers, since the heap is fairly small and the properties files ( SPECjbb.props and SPECjbb_config.props) don't yet reflect the system under test.

2.2 Setup

Having done a trial run the benchmark, the benchmarker should now learn what the changeable parameters are, and where to find and change them in the properties files. Also, the documentation (and publishability) of the runs will be improved by editing the descriptive property file described below.

2.2.1 Properties File Setup

SPECjbb2000 takes two properties files as input: a control properties file and a descriptive properties file. The control properties file is used to modify the operation of the benchmark, for example altering the length of the measurement interval. The descriptive properties file is used to document the system under test; this documentation is required for publishable results, and is reflected in the output files. The values of the descriptive properties do not affect the workload.

The default name for the control properties file is SPECjbb.props, but may be overridden with a different name by using the -propfile command line option (see section 3 for an example). The name for the descriptive properties file is specified in the control properties file, using the input.include_file property. The default name, as distributed in the sample control properties file included with the kit, is SPECjbb_config.props. See below for a brief description of how to modify properties in these files.

A sample control properties file and a sample descriptive properties file are distributed with the SPECjbb2000 kit, using the default names. Before modifying these files, first make a copy of the originals to enable easy recovery of the default benchmark configuration. Also, if running on several platforms, the benchmarker will probably want to take advantage of the naming features described in the previous paragraph (e.g., SPECjbb_config.ALPHA_400.props, SPECjbb_config.NT_500.props).

2.2.1.1 Properties Format

Each line of a properties file is either blank, a comment, or a property assignment. Comments begin with the # character. Each property assignment is of the form name=value. "name" is the property identifier; "name" and "property" are often used synonymously. Property names are specific to the benchmark and must not be changed. See below for a discussion of the control properties that the benchmarker is likely to want to change and for a list of control properties that must not be changed in order for the SPECjbb2000 result to be publishable. See section 4 for examples of the specification of property values.

2.2.1.2 Control Properties

The control properties file allows modification of three distinct benchmark behaviors: length of run, warehouse sequence, and garbage collection behavior. The benchmarker may experiment with any of these behaviors, but for publishable results, there are restrictions on the modifications. See the following paragraphs for these restrictions. The control properties file also contains a property specifying the benchmark name, but this should not be changed.

Length of run is controlled by two properties: input.ramp_up_seconds and input.measurement seconds. input.ramp_up_seconds specifies, in seconds, the length of the warmup period that will precede each measured interval. input.measurement specifies, in seconds, the length of the measured interval used to produce a point (throughput value at a particular number of warehouses). For a result to be publishable input.ramp_up_seconds must be 30 and input.measurement_seconds must be 120.

Warehouse sequence may be controlled in either of two ways. The usual method for specifying warehouse sequence is the set of three properties, input.starting_number_warehouses, input.increment_number_warehouses, and input.ending_number_warehouses , which causes the sequence of warehouses to progress from input.starting_number_warehouses to input.ending_number_warehouses, incrementing by input.increment_number_warehouses. The alternative method of specifying warehouse sequence is input.sequence_of_number_of_warehouses, which allows specification of an arbitrary list of positive integers in increasing order. For a publishable result the warehouse sequence must begin at 1 and increment by 1. See Section 4.1 for a discussion of requirements on the total number of warehouses that must be run.

There is limited control over garbage collection behavior. Specifically, the benchmarker may choose to force a garbage collection between measurement intervals. This is controlled by the Boolean property input.forcegc, where the value "true" means that there will be a forced GC between measurement intervals and "false" means that no GC will be forced. Note that Boolean values must be lower case. The choice of value for this property has no effect on publishability of the result.

3 Running SPECjbb2000

After completing setup as described in the previous section, the benchmark is ready to run.

3.2 Running the benchmark

Try running the benchmark using either

run.sh

or

run.bat

as appropriate to your operating system. These are provided as examples, and may require minor modifications for your particular environment.
Alternately, set CLASSPATH:


    
CLASSPATH=./jbb.jar:./jbb_no_precompile.jar:./check.jar:./reporter.jar:$CLASSPATH or CLASSPATH=.\jbb.jar:.\jbb_no_precompile.jar:.\check.jar:.\reporter.jar:%CLASSPATH%

then run the following line:


    
java -ms<min> -mx<max> spec.jbb.JBBmain -propfile SPECjbb.props

Most operating systems should be able to use a similar command line. Specifying more heap is allowed, and will probably help to get higher scores. Some Java 2 JVMs use -Xms/-Xmx instead of -ms/-mx to specify heap size.

The benchmark output appears in the results directory by default. The output types are raw, results, html, and ascii. The files are tagged with a sequential number, as

respectively. The jpeg also produces SPECjbb.<num>.jpg, which SPECjbb.<num>.html refers to.

3.3 Running the Reporter

Usually one doesn't need to run the Reporter manually, as the benchmark automatically creates all the file formats. However, if needed, a raw file can be processed with the Reporter tool to create: html with an html graph, html with a jpg graph, or nicely-formatted text. The html with a jpg graph requires Java 2, and (under unix) DISPLAY to be set to a working X display. (This may require setting xhost + on the display.) The html with an html graph is provided for those without Java 2, or without a display device. When the benchmark calls the Reporter, it will default to that which is available in the environment.

Additionally, the Reporter can be used to compare two results.

The most common way of running the Reporter is


    
java spec.reporter.Reporter -e -r results/SPECjbb.<num>.raw -o results/SPECjbb.<num>.html

There are a number of other options:

Usage: java spec.reporter.Reporter [options] Options are: -a Plain ASCII text output default: generate HTML output with JPG graph -e Do NOT echo raw results properties in HTML output default: raw results inserted as HTML comments -h Create graph in HTML rather than JPG default: use JPG if have Java 2 and a DISPLAY -l Label Label to infix into the JPG name: GraphImage.label.jpg default: a random number -o Output Output file for generated HTML default: written to System.out -r Raw A SPEC raw file, generated by a benchmark run. May be in a mail message with mail headers. default: read from System.in -c Second raw file, to compare default: none -v Verbose. List extra config.testx.* properties default: extra properties are not reported

So, comparing two results is done as follows:

    
java spec.reporter.Reporter -e -r results/SPECjbb.<num>.raw -c results/SPECjbb.<other-num>.raw -o results/compare.html

Results submitted to SPEC will appear on the SPEC website in the asc and html(-jpg) formats. The reporter output has to be redirected or specified with -o filename. The Reporter will use only the last value when the same point ( number of warehouses ) is repeated multiple times


4 Customizing the properties files

Section 2 introduced the properties files. These can be modified to control operation of the benchmark. There are two properties files: SPECjbb.props and SPECjbb_config.props. Their relationship is described in more detail in Section 2. Section 2 also describes the general format of the properties lines, and how to change them.

------------------------------SPECjbb.props--------------------------------

################################################################################
#                                                                              #
#     Control parameters for SPECjbb2000 benchmark                             #
#                                                                              #
################################################################################


#
#  This file has 2 sections; changable parameters and fixed parameters.  The
#  fixed parameters exist so that you may run tests any way you want, however
#  in order to have a valid, reportable run of SPECjbb2000, you must reset
#  them to their original values. 
#
#


################################################################################
#                                                                              #
#     Changable input parameters                                               #
#                                                                              #
################################################################################


# Warehouse sequence may be controlled in either of two ways.  The more
# usual method for specifying warehouse sequence is the triple
# input.starting_number_warehouses, input.increment_number_warehouses,
# and input.ending_number_warehouses, which causes the sequence of
# warehouses to progress from input.starting_number_warehouses to
# input.ending_number_warehouses, incrementing by
# input.increment_number_warehouses.
# The alternative method of specifying warehouse sequence is
# input.sequence_of_number_of_warehouses, which allows specification of
# an arbitrary list of positive integers in increasing order.

# For a publishable result the warehouse sequence must begin at 1, increment by
# 1 and go to at least warehouses

input.starting_number_warehouses=1
input.increment_number_warehouses=1
input.ending_number_warehouses=8

#input.sequence_of_number_of_warehouses=1 2 3 4 5 6 7 8


#
# 'forcegc' controls whether to garbage collect between each number of
# warehouses.
#

input.forcegc=true

#
# 'include_file' is the name for the descriptive properties file.
# On systems where the file separator is \, use \\ as the file separator here
# 
# Examples:
#        input.include_file=SPECjbb_config.props
#        input.include_file=/path/to/SPECjbb_config.props
#        input.include_file=c:\\path\\to\\SPECjbb_config.props
#

input.include_file=config.props

#
# directory to store output files
# On systems where the file separator is \, use \\ as the file separator here
# 
# Examples:
#        input.include_file=results
#        input.include_file=/path/to/results
#        input.include_file=c:\\path\\to\\results
#
input.output_directory=results


################################################################################
#                                                                              #
#     Fixed input parameters                                                   #
#                                                                              #
#     YOUR RESULTS WILL BE INVALID IF YOU CHANGE THESE PARAMETERS              #
#                                                                              #
################################################################################

# DON'T CHANGE THIS PARAMETER, OR ELSE !!!!
input.suite=SPECjbb

#
# If you need to collect stats or profiles, it may be useful to increase
# the 'measurement_seconds'.  This will, however, invalidate your results
#

# Amount of time to run each point prior to the measurement window

input.ramp_up_seconds=30

# Time of measurement window

input.measurement_seconds=120

------------------------------end of SPECjbb.props--------------------------------
------------------------------SPECjbb_config.props--------------------------------

#
# SPECjbb2000 properties file
# This is a SAMPLE file which you can use to specify characteristics of
# a particular system under test, and to control benchmark
# operation. You can reuse this file repeatedly, and have a version for
# each system setup you use. You should edit the reporting fields appropriately.
# All of this can still be edited in the output properties file after
# you run the test, but putting the values in here can save you some
# typing for attributes which do not change from test to test.
#

################################################################################
#
#System Under Test hardware
#
################################################################################


# Company which sells the hardware
config.hw.vendor=Neptune Ocean King Systems

# Home page for company which sells the hardware
config.hw.vendor.url=http://www.neptune.com

# What type of system was used
config.hw.model=TurboBlaster 2

# What type of processor(s) the system had
config.hw.processor=ARM

# MegaHertz rating of the chip. Usually an integer
config.hw.MHz=300

# Number of CPUs in the system,
config.hw.ncpu=1

# Amount of physical memory in the system, in Megabytes.  DO NOT USE MB or
# GB, IT WILL CONFUSE THE REPORTER
config.hw.memory=4096

# Amount of level 1 cache for instruction and data on each CPU
config.hw.primaryCache=4KBI+4KBD

# Amount of level 2 cache, for instruction and data on each CPU
config.hw.secondaryCache=64KB(I+D) off chip

# Amount of level 3 cache (or above)
config.hw.otherCache=

# The file system the class files reside on
config.hw.fileSystem=UFS

# Size and type of disk on which the benchmark and OS reside on
config.hw.disk=1 x 4GB SCSI (classes) 1 x 12GB SCSI (OS)


# Any other hardware you think is performance-relative.  That is, you would
# need this to reproduce the test
config.hw.other=AT&T Rotary Telephone
config.hw.available=Jan-1997

################################################################################
#
# System Under Test software
#
################################################################################

# The company that makes the JVM software
config.sw.vendor=Phobos Ltd

# Home page for the company that makes the JVM software
config.sw.vendor.url=http://www.phobos.uk.co

# Name of the JVM software product (including version)
config.sw.JVM=Phobic Java 1.2.2

# Date when the JVM software product is shipping and generally available
# to the public
config.sw.JVMavailable=Jan-1997

# How many megabytes used by the JVM heap.  "Unlimited" or "dynamic" are 
# allowable values for JVMs that adjust automatically
config.sw.JVMheapInitial=1024
config.sw.JVMheapMax=1024

# Command line to invoke the benchmark
# On systems where the file separator is \, use \\ as the file separator here 
config.sw.command_line=java -ms256m -mx1024m -spec.jbb.JBBmain -propfile Test1

# Name of precompiler used
config.sw.precompiler=Phobic Java Compiler

# Command line to invoke the precompiler
# On systems where the file separator is \, use \\ as the file separator here 
config.sw.precompiler_command_line=phobic-jc spec/jbb/Jbbmain.java -exclude class.list

# Method or command used to exclude the methods not allowed to be optimized
# or precompiled (see Run Rules section 2.1.1)
config.sw.precompiler_class_excluder_method=11 classes listed in file class.list


# Operating system (including version)
config.sw.OS=Phobos DOS V33.333 patch-level 78

# Date when the OS version is shipping and generally available to the public
config.sw.OSavailable=May-2000

# State of the system, such as "single-user mode", or "minimal boot"
config.sw.systemState=normal

# Free text description of what sort of tuning one has to do to either 
# the OS or the JVM to get these results.  This is where kernel tunables
# belong.  Use HTML list tags, if you want a list on the report page

config.sw.tuning=Operating system tunings<UL><LI>bufcache=1024</LI> <LI>maxthreads_per_user=65536</LI> </UL>


# Any additional software that you think is need to reproduce the performance
# measured on this test
config.sw.other=Neptune JIT Accelerator 2.3b6

# Date when the other software is shipping and generally available to the public
config.sw.otherAvailable=Feb-98

################################################################################
#
# Tester information
#
################################################################################

# The company that ran and submitted the result
config.test.testedBy=Neptune Corp.

#The person who ran and submitted this result (name does not go on public pages
config.testx.testedByName=Willie the Mailboy

# A web page where people within the aforementioned company might get more
# information
# On systems where the file separator is \, use \\ as the file separator here 
config.test.internalReference=http://pluto.eng/specpubs/mar97/

# The company's SPEC license number
config.test.specLicense=50

# Physically, where the results were gathered
config.test.location=Santa Monica, CA

------------------------------end of SPECjbb_config.props--------------------------------

These parameters can be categorized as:

4.1 Control parameters

These are the parameters which specify the workload.

starting_number_warehouses,increment_number_warehouses,ending_number_warehouses
Parameters to specify a series of numbers of warehouses to run at once. For example, with the settings start=1, increment=1, and end=10 respectively, the benchmark will run first 1 warehouse, then 2 concurrent warehouses, then 3, and so on up to 10. Since the metric averages points from the peak to twice as many warehouses, if the curve peaks beyond 5 warehouses, the benchmark must be run beyond 10. Roughly, the peak number of warehouses is often near the number of cpu's.

Note: note that publication requires all the points from 1 to 2*n warehouses, where n is number of warehouses at the peak throughput, and that the metric is computed from the points n to 2*n. In some cases, where the system under test is unable to successfully run all points up to 2*N, the runs may still be valid and publishable. See section 2.3 of the run and reporting rules.

input.sequence_of_number_of_warehouses=7 10 12
An alternative to the above. If using this, comment out one of starting_number_warehouses, increment_number_warehouses, or ending_number_warehouses. This allows skipping numbers of warehouses in a non-periodic fashion, or repeating a number of warehouses more than once. The list is assumed to be increasing; if it is not, the results may not appear as intended.
input.forcegc=true
Whether to garbage collect between each number of warehouses. Either way is legal for publication; JVMs differ on whether this feature helps their scores. Note: booleans must be specified in lowercase.
input.include_file=SPECjbb_config.props
The name of a file which contains other input parameters. The intended use is to allow segregation of "config" parameters from "input" parameters, easing changing one set without the other. This way, one can have several system configuration files for different systems, and simply change which one to include for a given run. Similarly, one system can easily have several sets of input parameters all referencing the same hardware/software descriptions. In fact, the parameters may be divided between this file and the specified propfile some other way if you want. Be careful not to lose any parameters. Duplicated parameters will take on the last value seen, with the include file following the propfile.

The next two are "constants". Normally, you will not change these. They are provided for information only. Any changes to the benchmark constants will invalidate the run. SPEC does not endorse such changes, and obtained with modified benchmark constants are not publishable.

The examples shown are the default and also the required values for valid runs.

input.ramp_up_seconds=30
How long the worker threads run before the measurement begins. This avoids boundary conditions. It may get records into memory, but is probably not as influential as ramp-up time on an actual database benchmark.
input.measurement_seconds=120
How long to measure each number of warehouses for.

4.2 Configuration description parameters

The Configuration description section should contain a full description of the testbed. It should have enough information to repeat the test results, including all necessary hardware, software and tuning parameters. All parameters with non-default values must be reported in the Notes section of the description.

The configuration description has the following categories.

Each category contains variables for describing it. For example, Hardware contains variables for CPUs, caches, controllers, etc. If a variable doesn't apply, leave it blank. If no variable exists for a part you need to describe, add some text to the notes section. The notes sections can contain multiple lines.

The properties file included in the kit contains examples for filling out these fields.

Hardware:

config.hw.vendor=SAMPLE vendor
This is the company which sells the hardware.
config.hw.vendor.url=http://www.neptune.com
This is web page for the company which sells the hardware.
config.hw.model=TurboBlaster 2
What type of system was used.
config.hw.processor=ARM
What type of processor the system had.
config.hw.MHz=300
MegaHertz rating of the chip. Usually an integer, except for Intel.
config.hw.ncpu=1
The number of CPUs in the system.
config.hw.memory=4096
The amount of physical memory in the system under test, in megabytes. That's important to the reporter; saying "4G" or "2Gb" will confuse it, and your memory will be reported incorrectly.
config.hw.primaryCache=4KBI+4KBD
The amount of level 1 cache, for instruction and data, on each CPU.
config.hw.secondaryCache=64KB(I+D)
The amount of level 2 cache, for instruction and data, on each CPU. This example shows a combined cache.
config.hw.otherCache=none
Level 3 cache or above.
config.hw.fileSystem=UFS
The file system the classes reside on.
config.hw.disk=2 x 4GB SCSI
Size and type of disk on which the benchmark and the OS reside on. This is to help with reproduction of results.
config.hw.other=none
Anything you think is performance-relevant hardware-wise that someone would need to be told about in order to reproduce the result.
config.hw.available=Jan-2000
The date when the hardware is shipping and generally available to the public.

Software:

config.sw.vendor=Phobos Ltd
This is the company which sells the JVM software.
config.sw.vendor.url=http://www.phobos.uk.co
This is the web page for the company which sells the JVM software.
config.sw.JVM=Phobic Java
This is the name of the JVM software product.
config.sw.JVMavailable=Jan-97
The date when the product is shipping and generally available to the public.
config.sw.JVMheapInitial=1024
How many megabytes of memory were used for the initial heap (-ms). "Unlimited" or "dynamic" are also allowed for JVMs which adjust automatically.
config.sw.JVMheapMax=1024
How many megabytes of memory were used for the maximum heap (-mx). "Unlimited" or "dynamic" are also allowed for JVMs which adjust automatically.
config.sw.OS=Phobos
The operating system on the system under test.
config.sw.OSavailable=Jan-97
The date when the operating system is shipping and generally available to the public.
config.sw.tuning=none
Free text description of what sort of tuning one has to do to either the OS or the JVM to get these results. This is where kernel tunables belong.
config.sw.command_line="java -ms256m -mx1024m com.ibm.sf.bob.JBBmain"
The line used to invoke the benchmark, to help reproduce scores.
config.sw.precompiler="Phobic Java Compiler"
The tool used to precompiler the benchmark, if any.
config.sw.precompiler_command_line="phobic-jc spec/jbb/Jbbmain.java -exclude class.list"
The line used to precompiler the benchmark, if any.
config.sw.precompiler_class_excluder_method=11 classes listed in file class.list
Method or command used to exclude the methods not allowed to be optimized or precompiled (see Run Rules section 2.2.1)
config.sw.other=Neptune JIT Accelerator 2.3b6
Any additional software that you think is performance-relevant that someone would need to be told about in order to reproduce.
config.sw.otherAvailable=Feb-98
When it's shipping and generally available.

And, the test information:

config.test.testedBy=Neptune Corp.
The company that ran and submitted this result.
config.testx.testedByName=Willie the Mailboy
The person who ran and submitted this result.
config.test.internalReference=http://pluto.eng/specpubs/mar97/
A web page where people within the aforementioned company might get more information.
config.test.specLicense=50
The company's SPEC licence.
config.test.location=Santa Monica, CA
Physically, where the results were gathered.

5 Operational Validity

In order to be a publishable result, or directly comparable to existing published results, a run must pass several runtime validity checks:


6 The Metric

Assuming a run is valid (or invalid in a way in which the metric is still meaningful, although not publishable), the metric is the numerical representation of the performance of the system.

The SPECjbb2000 metric is calculated as follows:

The reporting tool contained within SPECjbb2000 produces a graph of the throughput at all the measured points with warehouses on the horizontal axis and throughputs on the vertical axis. All points from 1 to the minimum of 8 or 2*N are required to be run and reported. Missing points in the range N+1 to 2*N will be reported to have a throughput of 0 ops/second. The points being averaged for the metric will be marked on the report.


7 Results Reports

Benchmark results are available in several forms:

All of these are just different ways of presenting the same basic information. All include the overall score, scores at individual numbers of warehouses, validation or error messages, information about the configuration, information about the input parameters, and details about each point.

For this reason, these are described in detail only once, in the Html Result Pages section. The descriptions of the other formats will refer back to classifications of information described in the Html section. Sample output pages are included with the kit ( ASCII, HTML-jpeg, HTML-only, raw, results. ) Errors in the creation of any format (other than raw) do not prevent publication.

How to create the other formats from the raw file is described in Section 3.3 .

7.1 Raw file

The SPECjbb.<num>.raw file contains all the inputs from the properties files and results from the test. The reporter tool uses this file to generate all the other file formats. The raw file is submitted to SPEC.

If you intend to postprocess the results, this is the best file to start from. All information is stored in field=value pairs. It can be read in to a Java program using the Properties class, or handled by Perl, awk, or shell using pattern match or grep.

7.2 HTML Result Pages

The HTML result pages contain the following elements.

SPECjbb2000 Metric

See Section 6 for to see how the metric is calculated.

Performance for each point in the benchmark.

Performance for each point, in the form of a chart and graph. (ASCII and the screen output do not include a graph.) The dashed line (in the jpg graph) is at the level of the overall metric, stretching across the points which were averaged together to get the metric.

Hardware and Software information

The hardware vendor and model name, the OS vendor and name/version, and the JVM software vendor and software name/version. Enough information to reproduce the environment.

Availability and Configuration information

All the other information from the Configuration description entries in the descriptive properties file.
See The Run and Reporting section on Availability for information on how to determine if results on your system meet the availability criteria for publication.

Notes and Tuning Information

The notes and tuning entries from the descriptive properties file.

Operational Validity / Errors

Any errors encountered in the test inputs or results. To be valid, the test must have no errors reported in this section. Any errors will cause the word 'Invalid' to appear next to the SPECjbb2000 result number (ASCII and HTML formats). See Section 5 for details on validity checks.

If a thread ran out of memory, it will be reported at the point in the output where the condition occurred.

Details of Individual Points

For each number of warehouses, the counts of each type of transaction, along with their total and maximum response times, the percentage size of the range of transactions done by different threads, and amount of heap used, is presented. The average is not given, because it tends to be very small. You can compute it from the total and the count of transactions.

7.3 ASCII report file

This is automatically generated by the benchmark run. You can also run

java spec.reporter.Reporter -a -e -r results/SPECjbb.<num>.raw

to get the ASCII report format. This is one of the formats available on the SPECjbb2000 result pages website. It is very similar to the html, except that it is lacking the chart. It is primarily for viewing/printing on a system without a browser.

7.4 Screen Output

The benchmark outputs data to the screen as it runs. This output also appears in the results/SPECjbb.<num>.results file. It provides the same information as the HTML file, but in the order in which the benchmark has information available. It is therefore somewhat more verbose. The following sections appear on the screen.

Test verification and summary of benchmark settings

See Section 5 for a description of the runtime validity checks. Some of these cannot be checked until the end of the run. Such checks are reported at the end of the .results file.

The conformance check and its results comes out on the screen, but does not go into the .results file. Next, the parameters scroll down the screen.

Results from each point

The results from each point in the benchmark print out the following:

Calculating results

Minimum transactions by a thread = 213695
Maximum transactions by a thread = 214847

Minimum transactions by a warehouse = 213695
Maximum transactions by a warehouse = 214847
Difference = 1152 (0.5390861%)

===============================================================================
TOTALS FOR: COMPANY with 2 warehouses and 1 terminals each
................... SPECjbb2000 1.0 Results (time in seconds) ...................
                   Count     Total    Min     Max     Avg            Heap Space
    New Order:    186319    140.30   0.000   0.200   0.001         total 778.6MB
      Payment:    186326     59.38   0.000   0.180   0.000          used 108.5MB
  OrderStatus:     18632      6.52   0.000   0.020   0.000
     Delivery:     18632      9.60   0.000   0.020   0.001
  Stock Level:     18633     16.04   0.000   0.180   0.001

           SPECjbb2000 result =    3570.59
===============================================================================

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  

Overall SPECjbb2000 result

The equivalent of the ascii report is printed to the screen and .results file at the end of the run, summarizing it.

Configuration Information

All the descriptive properties are echoed to the screen and results file. Also, system and JVM properties acquired by System.getProperties() are echoed.


8 Troubleshooting

Error messages are explained in greater detail below, listed by key words in the message.

Messages from the benchmark:

Messages in the reports:

Still have a problem that makes no sense? Contact support@spec.org .


9 Performance Tuning

To tune the benchmark, analyze the workload and look for possible bottlenecks in the configuration. There are a number of factors or bottlenecks that could affect the performance of the benchmark on the system.

The following tuning tips are for configuring the system to generate the best possible performance numbers for SPECjbb2000. Please note that these should not necessarily be used to configure and size real world systems.

JVM Software
This is the critical component in determining the performance of the system for this workload. Use JVM profiling (java -prof or java -Xprof) to identify API routines most heavily called. Other tools may be available on your system.
CLASSPATH
Having extra stuff in CLASSPATH can degrade performance on some JVMs.
Memory
SPECjbb2000 uses at least a heap size of 198m - 300m and is known to benefit from additional memory. Heap size is set via the -ms/-mx (or -Xms/-Xmx) options to java in many JVMs.
Threads
The number of threads is approximately equal to the number of warehouses. For very large numbers of warehouses, you may need to increase operating system limits on threads.
JVM Locking
At a larger number of warehouses (and hence threads), the synchronization of application methods, or the JVM's internal use of locking, may prevent the JVM from using all available CPU cycles. If there is a bottleneck without consuming 100% of CPU, lock profiling with JVM or operating system tools may be helpful.
Network
SPECjbb2000 does not run over the network.
Disk I/O
SPECjbb2000 does not write to disk as part of the measured workload. Classes are read from disk, of course, but that should be a negligible part of the workload.

10 Submitting results

Upon a successful run, the results may be submitted to the SPEC Java sub-committee for review by mailing the SPECjbb.<num>.raw file to subjbb2000 @ spec.org. When mailing the output properties file, include it in the body of the mail message, don't send it as an attachment, and mail only one result per email message.

Note: The SPECjbb.<num>.raw file uses the configuration and parameter information in the properties file. Please edit the properties files with the correct information prior to running the benchmark for submission.

Every submission goes through a two-week review process. During the review, members of the sub-committee may ask for further information/clarifications on the submission. Once the result has been reviewed and approved by the sub-committee, it is displayed on the SPEC web site at www.spec.org .