Benchmark Suite
BinaryBenchmarkSuite
(preview ⚠️)
A BinaryBenchmarkSuite
is a suite of programs which can be used to run binary
benchmarks such as for C/C++ benchmarking.
Keys
programs
: A yaml list of benchmarks in the format:
programs:
<BM_NAME_1>:
path: /full/path/to/benchmark/binary_1
args: "Any arguments to binary_1"
<BM_NAME_2>:
path: /full/path/to/benchmark/binary_2
args: "Any arguments to binary_2"
[...]
A possible use-case could use wrapper shell scripts around the benchmark to output timing and other information in a tab-separated table.
DaCapo
Keys
release
: one of the possible values ["2006", "9.12", "evaluation"]
.
The value is required.
path
: path to the DaCapo jar
.
The value is required.
Environment variables will be expanded.
minheap
: a string that selects one of the minheap_values
sets to use.
minheap_values
: a dictionary containing multiple named sets of minimal heap sizes that is enough for a benchmark from the suite to run without triggering OutOfMemoryError
.
Each size is measured in MiB.
The default value is an empty dictionary.
The minheap values are used only when running runbms
with a valid N
value.
If the minheap value for a benchmark is not specified, a default of 4096
is used.
An example looks like this.
minheap_values:
adoptopenjdk-15-G1:
avrora: 7
batik: 253
temurin-17-G1:
avrora: 7
batik: 189
timing_iteration
: specifying the timing iteration.
It can either be a number, which is passed to DaCapo as -n
, or a string converge
.
The default value is 3.
callback
: the class (possibly within some packages) for the DaCapo callback. The value is passed to DaCapo as -c
.
The default value is null
.
timeout
: timeout for one invocation of a benchmark in seconds.
The default value is null
.
wrapper
(preview ⚠️): specifying a wrapper (i.e., extra stuff on the command line before java
) when running benchmarks.
The default value is null
, a no-op.
There are two possible ways to specify wrapper
.
First, a single string with shell-like syntax.
Multiple arguments are space separated.
This wrapper is used for all benchmarks in the benchmark suite.
Second, a dictionary of strings with shell-like syntax to specify possibly different wrappers for different benchmarks.
If a benchmark doesn't have a wrapper in the dictionary, it is treated as null
.
companion
(preview ⚠️): the syntax is similar to wrapper
.
The companion program will start before the main program.
The main program will start two seconds after the companion program to make sure the companion is fully initialized.
Once the main program finishes, we will wait for the companion program to finish.
Therefore, companion programs should have appropriate timeouts or detect when main program finishes.
Here is an example of using companion
to launch bpftrace
in the background to count the system calls.
includes:
- "$RUNNING_NG_PACKAGE_DATA/base/runbms.yml"
overrides:
"suites.dacapo2006.timing_iteration": 1
"suites.dacapo2006.companion": "sudo bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @syscall[args->id] = count(); @process[comm] = count();} interval:s:10 { printf(\"Goodbye world!\\n\"); exit(); }'"
"invocations": 1
benchmarks:
dacapo2006:
- fop
configs:
- "temurin-17"
In the log file, the output from the main program and the output from the companion program is separated by *****
.
size
: specifying the size of input data.
Note that the names of the sizes are subject to change depending on the DaCapo releases.
The default value is null
, which means DaCapo will use the default size unless you override that for individual benchmarks.
Benchmark Specification
Some of the suite-wide keys can be overridden in a per-benchmark-basis.
The keys currently supported are timing_iteration
, size
, and timeout
.
Note that, within a suite, your choice of name
should uniquely identify a particular way of running a benchmark of name bm_name
.
The name
is used to get the minheap value, etc., which can depend of the size of input data and/or the timing iteration.
Therefore, it is highly recommended that you give a name
different from the bm_name
.
Note that, you might need to adjust various other values, including but not limit to the minheap value dictionary and the modifier exclusion dictionary.
The following is an example.
benchmarks:
dacapo2006:
- {name: eclipse_large, bm_name: eclipse, size: large}
SPECjbb2015
(preview ⚠️)
Keys
release
: one of the possible values ["1.03"]
.
The value is required.
path
: path to the jar
.
The value is required.
Note that the property file should reside in path/../config/specjbb2015.props
per the standard folder structure of the ISO image provided by SPEC.
Environment variables will be expanded.
Benchmark Specification
Only strings are allowed, which should correspond to the the mode of the SPECjbb2015 controller.
Right now, only "composite"
is supported.
SPECjvm98
(preview ⚠️)
Note that you will need to prepend probes to the classpaths, so that the modified SpecApplication
can be used.
Here is an example configuration file.
includes:
- "/home/zixianc/running-ng/src/running/config/base/runbms.yml"
modifiers:
probes_cp:
type: JVMClasspathPrepend
val: "/home/zixianc/MMTk-Dev/evaluation/probes /home/zixianc/MMTk-Dev/evaluation/probes/probes.jar"
benchmarks:
specjvm98:
- _213_javac
configs:
- "adoptopenjdk-8|probes_cp"
Keys
release
: one of the possible values ["1.03_05"]
.
The value is required.
path
: path to the SPECjvm98 folder, where you can find SpecApplication.class
.
The value is required.
Environment variables will be expanded.
timing_iteration
: specifying the timing iteration.
It can only be a number, which is passed to SpecApplication as -i
.
The value is required.
Benchmark Specification
Only strings are allowed, which should correspond to benchmark program of SPECjvm98. The following are the benchmarks:
- _200_check
- _201_compress
- _202_jess
- _209_db
- _213_javac
- _222_mpegaudio
- _227_mtrt
- _228_jack
Octane
(preview ⚠️)
Keys
path
: path to the Octane benchmark folder.
The value is required.
Environment variables will be expanded.
wrapper
: path to the Octane wrapper written by Wenyu Zhao.
The value is required.
timing_iteration
: specifying the timing iteration using an integer.
The value is required.
minheap
: a string that selects one of the minheap_values
sets to use.
minheap_values
: a dictionary containing multiple named sets of minimal heap sizes that is enough for a benchmark from the suite to run without triggering Fatal javascript OOM in ...
.
Each size is measured in MiB.
The default value is an empty dictionary.
The minheap values are used only when running runbms
with a valid N
value.
If the minheap value for a benchmark is not specified, a default of 4096
is used.
An example looks like this.
minheap_values:
d8:
octane:
box2d: 5
codeload: 159
crypto: 3
JuliaGCBenchmarks
(preview ⚠️)
GC benchmarks for Julia: https://github.com/JuliaCI/GCBenchmarks
Keys
path
: path to the GCBenchmarks folder.
The value is required.
Environment variables will be expanded.
minheap
: a string that selects one of the minheap_values
sets to use.
minheap_values
: a dictionary containing multiple named sets of minimal heap sizes that is enough for a benchmark from the suite to run without triggering Out of Memory!
.
An example looks like this:
minheap_values:
julia-mmtk-immix:
multithreaded/binary_tree/tree_immutable: 225
multithreaded/binary_tree/tree_mutable: 384
multithreaded/bigarrays/objarray: 9225
serial/TimeZones: 5960
serial/append: 1563
serial/bigint/pollard: 198
serial/linked/list: 4325
serial/linked/tree: 216
serial/strings/strings: 2510
slow/bigint/pidigits: 198
slow/rb_tree/rb_tree: 8640