diff --git a/perf/README.md b/perf/README.md index 524f717545..dcc3ebd75d 100644 --- a/perf/README.md +++ b/perf/README.md @@ -49,4 +49,7 @@ Liberty benchmarks from https://github.com/OpenLiberty - including liberty-dt7-s #### renaissance Renaissance benchmarks from https://github.com/renaissance-benchmarks/renaissance - including renaissance-akka-uct, renaissance-als, renaissance-chi-square, renaissance-db-shootout, renaissance-dec-tree, renaissance-finagle-chirper, renaissance-finagle-http, renaissance-fj-kmeans, renaissance-future-genetic, renaissance-gauss-mix, renaissance-log-regression, renaissance-mnemonics, renaissance-movie-lens, renaissance-naive-bayes, renaissance-par-mnemonics, renaissance-philosophers and renaissance-scala-kmeans +#### specjbb [licence required] +SPECjbb 2015 benchmark from https://www.spec.org/jbb2015/ + Additional benchmarks are being reviewed for addition and if you wish to include more, please comment in the open performance benchmarks [issue 1112](https://github.com/adoptium/aqa-tests/issues/1112). diff --git a/perf/specjbb/README.md b/perf/specjbb/README.md new file mode 100644 index 0000000000..4667d0735e --- /dev/null +++ b/perf/specjbb/README.md @@ -0,0 +1,34 @@ + + + +## SPECjbb 2015 + +SPECjbb is a Java Client/Server performance testing benchmark. +Please visit its product page for more information, including a user guide: https://www.spec.org/jbb2015/ + +## Prerequisites +Since SPECjbb requires a license to run, this aqa-test config requires that a licensed copy of the benchmark already exists on the machine that you are running on. + +## Setup + +Set the `SPECJBB_SRC` environment variable to the absolute path of your SPECjbb benchmark directory + +```sh +export SPECJBB_SRC=/Users/aqa-tester/SPECjbb2015-1.03 +``` + +## Run + +This test target is part of the `dev` level, and the test target name is, `SPECjbb2015-multijvm-simple`. You can use the following commands to run it: +``` +make _SPECjbb2015-multijvm-simple +``` \ No newline at end of file diff --git a/perf/specjbb/build.xml b/perf/specjbb/build.xml new file mode 100644 index 0000000000..cde6290d9b --- /dev/null +++ b/perf/specjbb/build.xml @@ -0,0 +1,112 @@ + + + + + + + Specjbb suite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/perf/specjbb/playlist.xml b/perf/specjbb/playlist.xml new file mode 100644 index 0000000000..1629feec65 --- /dev/null +++ b/perf/specjbb/playlist.xml @@ -0,0 +1,33 @@ + + + + run/testenv.mk + + + + + SPECjbb2015-multijvm-simple + . $(RUN_OPTIONS)/specjbb-multijvm-simple.sh; bash $(RUN_SCRIPTS)/run_multi.sh; $(TEST_STATUS) + + dev + + + perf + + + microsoft + + + diff --git a/perf/specjbb/run/options/specjbb-multijvm-simple.sh b/perf/specjbb/run/options/specjbb-multijvm-simple.sh new file mode 100644 index 0000000000..5f0743f1f0 --- /dev/null +++ b/perf/specjbb/run/options/specjbb-multijvm-simple.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +# This will configure a basic run of SPECjbb in multi-jvm mode +# Therefore, the topography of the run includes 1 group consisting of +# 1 TransactionInjector and 1 Backend + +export GROUP_COUNT=1 +export TI_JVM_COUNT=1 +export NUM_OF_RUNS=1 + +export SPECJBB_OPTS_C="-Dspecjbb.group.count=$GROUP_COUNT -Dspecjbb.txi.pergroup.count=$TI_JVM_COUNT" +export SPECJBB_OPTS_TI="" +export SPECJBB_OPTS_BE="" + +# The Controller, TransactionInjector, and Backend (aka System Under Test; SUT) are configured to meet the minimum +# hardware requirements suggested by SPECjbb +# (see the SPECjbb 2015 user guide, section 2.3 'Minimum hardware requirements', for more details) +# +# This implies that a machine should have atleast 8GB of memory and 8 CPU cores to run this test +export JAVA_OPTS_C="-Xms2g -Xmx2g -Xmn1536m -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:CICompilerCount=4" +export JAVA_OPTS_TI="${JAVA_OPTS_C}" +export JAVA_OPTS_BE="-Xms4g -Xmx4g -Xmn3g -XX:+UseParallelGC -XX:ParallelGCThreads=4 -XX:-UseAdaptiveSizePolicy" + +export MODE_ARGS_C="" +export MODE_ARGS_TI="" +export MODE_ARGS_BE="" + diff --git a/perf/specjbb/run/run_multi.sh b/perf/specjbb/run/run_multi.sh new file mode 100755 index 0000000000..c89c34f222 --- /dev/null +++ b/perf/specjbb/run/run_multi.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + + +echo "Backend opts: $JAVA_OPTS_BE" +echo "Number of runs: ${NUM_OF_RUNS}" +echo "Results dir: ${RESULTS_DIR}" + +for ((n=1; $n<=$NUM_OF_RUNS; n=$n+1)); do + + # Create result directory + temp="${RESULTS_DIR%\"}" + temp="${temp#\"}" + timestamp=$(date '+%y-%m-%d_%H%M%S') + result="${temp}/${timestamp}" + mkdir -pv $result + + # Copy current config to the result directory + cp -r $SPECJBB_CONFIG $result + + cd $result + + echo "Run $n: $timestamp" + echo "Launching SPECjbb2015 in MultiJVM mode..." + echo + + JAVA="${JAVA%\"}" + JAVA="${JAVA#\"}" + echo "Start Controller JVM" + $JAVA $JAVA_OPTS_C $SPECJBB_OPTS_C -jar $SPECJBB_JAR -m MULTICONTROLLER $MODE_ARGS_C 2>controller.log 2>&1 | tee controller.out & + + CTRL_PID=$! + echo "Controller PID = $CTRL_PID" + + sleep 3 + + for ((gnum=1; $gnum<$GROUP_COUNT+1; gnum=$gnum+1)); do + + GROUPID=Group$gnum + echo -e "\nStarting JVMs from $GROUPID:" + + for ((jnum=1; $jnum<$TI_JVM_COUNT+1; jnum=$jnum+1)); do + + JVMID=txiJVM$jnum + TI_NAME=$GROUPID.TxInjector.$JVMID + + echo " Start $TI_NAME" + $JAVA $JAVA_OPTS_TI $SPECJBB_OPTS_TI -jar $SPECJBB_JAR -m TXINJECTOR -G=$GROUPID -J=$JVMID $MODE_ARGS_TI > $TI_NAME.log 2>&1 & + echo -e "\t$TI_NAME PID = $!" + sleep 1 + done + + JVMID=beJVM + BE_NAME=$GROUPID.Backend.$JVMID + + # Add GC logging to the backend's JVM options + JAVA_OPTS_BE_WITH_GC_LOG="$JAVA_OPTS_BE -Xlog:gc*:file=${BE_NAME}_gc.log" + echo " Start $BE_NAME" + $JAVA $JAVA_OPTS_BE_WITH_GC_LOG $SPECJBB_OPTS_BE -jar $SPECJBB_JAR -m BACKEND -G=$GROUPID -J=$JVMID $MODE_ARGS_BE > $BE_NAME.log 2>&1 & + echo -e "\t$BE_NAME PID = $!" + sleep 1 + + done + + echo + echo "SPECjbb2015 is running..." + echo "Please monitor $result/controller.out for progress" + + wait $CTRL_PID + echo + echo "Controller has stopped" + + echo "SPECjbb2015 has finished" + echo + + cd $WORKING_DIR + +done + +exit 0 diff --git a/perf/specjbb/run/testenv.mk b/perf/specjbb/run/testenv.mk new file mode 100644 index 0000000000..b6d290d763 --- /dev/null +++ b/perf/specjbb/run/testenv.mk @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +SPECJBB_BUILD=$(JVM_TEST_ROOT)/perf/specjbb + +export JAVA=$(JAVA_COMMAND) +export SPECJBB_JAR=$(SPECJBB_BUILD)/suite/specjbb2015.jar +export SPECJBB_CONFIG=$(SPECJBB_BUILD)/suite/config +export RUN_SCRIPTS=$(SPECJBB_BUILD)/run +export RUN_OPTIONS=$(SPECJBB_BUILD)/run/options +export RESULTS_DIR=$(REPORTDIR)