#!/bin/bash # # Kieker benchmark script # # Usage: benchmark.sh # configure base dir BASE_DIR=$(cd "$(dirname "$0")"; pwd) MAIN_DIR="${BASE_DIR}/../.." # Hotfix for ASPECTJ # https://stackoverflow.com/questions/70411097/instrument-java-17-with-aspectj JAVA_VERSION=$(java -version 2>&1 | grep -o 'version "[0-9]*' | sed 's/.*"\([0-9]*\)/\1/g') echo $JAVA_VERSION if [ "${JAVA_VERSION}" != "8" ] ; then export JAVA_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED" echo "Setting \$JAVA_OPTS, since Java version is bigger than 8" fi # # source functionality # if [ ! -d "${BASE_DIR}" ] ; then echo "Base directory ${BASE_DIR} does not exist." exit 1 fi if [ -f "${MAIN_DIR}/common-functions.sh" ] ; then source "${MAIN_DIR}/common-functions.sh" else echo "Missing library: ${MAIN_DIR}/common-functions.sh" exit 1 fi # load configuration and common functions if [ -f "${BASE_DIR}/config.rc" ] ; then source "${BASE_DIR}/config.rc" else echo "Missing configuration: ${BASE_DIR}/config.rc" exit 1 fi if [ -f "${BASE_DIR}/functions.sh" ] ; then source "${BASE_DIR}/functions.sh" else echo "Missing: ${BASE_DIR}/functions.sh" exit 1 fi if [ -f "${BASE_DIR}/labels.sh" ] ; then source "${BASE_DIR}/labels.sh" else echo "Missing file: ${BASE_DIR}/labels.sh" exit 1 fi # # Setup # info "----------------------------------" info "Setup..." info "----------------------------------" cd "${BASE_DIR}" # load agent getAgent checkDirectory data-dir "${DATA_DIR}" create checkFile log "${DATA_DIR}/kieker.log" clean cleanupResults mkdir -p $RESULTS_DIR PARENT=`dirname "${RESULTS_DIR}"` checkDirectory result-base "${PARENT}" # Find receiver and extract it checkFile receiver "${RECEIVER_ARCHIVE}" tar -xpf "${RECEIVER_ARCHIVE}" RECEIVER_BIN="${BASE_DIR}/receiver/bin/receiver" checkExecutable receiver "${RECEIVER_BIN}" checkFile ApsectJ-Agent "${AGENT}" checkFile aop-file "${AOP}" checkExecutable java "${JAVA_BIN}" checkExecutable moobench "${MOOBENCH_BIN}" checkFile R-script "${RSCRIPT_PATH}" showParameter TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS} \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} ` info "Experiment will take circa ${TIME} seconds." # general server arguments JAVA_ARGS="-Xms1G -Xmx2G" LTW_ARGS="-javaagent:${AGENT} -Dorg.aspectj.weaver.showWeaveInfo=true -Daj.weaving.verbose=true -Dkieker.monitoring.skipDefaultAOPConfiguration=true -Dorg.aspectj.weaver.loadtime.configuration=file://${AOP}" KIEKER_ARGS="-Dlog4j.configuration=log4j.cfg -Dkieker.monitoring.name=KIEKER-BENCHMARK -Dkieker.monitoring.adaptiveMonitoring.enabled=false -Dkieker.monitoring.periodicSensorsExecutorPoolSize=0" # JAVA_ARGS used to configure and setup a specific writer declare -a WRITER_CONFIG # Receiver setup if necessary declare -a RECEIVER # Title declare -a TITLE # # Different writer setups # WRITER_CONFIG[0]="" WRITER_CONFIG[1]="-Dkieker.monitoring.enabled=false -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter" WRITER_CONFIG[2]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter" WRITER_CONFIG[3]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.TextLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/" WRITER_CONFIG[4]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.BinaryLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.bufferSize=8192 -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/" WRITER_CONFIG[5]="-Dkieker.monitoring.writer=kieker.monitoring.writer.tcp.SingleSocketTcpWriter -Dkieker.monitoring.writer.tcp.SingleSocketTcpWriter.port=2345" RECEIVER[5]="${RECEIVER_BIN} 2345" writeConfiguration # # Run benchmark # info "----------------------------------" info "Running benchmark..." info "----------------------------------" for ((i=1;i<="${NUM_OF_LOOPS}";i+=1)); do info "## Starting iteration ${i}/${NUM_OF_LOOPS}" echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >> "${DATA_DIR}/kieker.log" executeBenchmark printIntermediaryResults "${i}" done # Create R labels LABELS=$(createRLabels) runStatistics cleanupResults mv "${DATA_DIR}/kieker.log" "${RESULTS_DIR}/kieker.log" [ -f "${RESULTS_DIR}/hotspot-1-${RECURSION_DEPTH}-1.log" ] && grep "<task " "${RESULTS_DIR}/"hotspot-*.log > "${RESULTS_DIR}/java.log" [ -f "${DATA_DIR}/errorlog.txt" ] && mv "${DATA_DIR}/errorlog.txt" "${RESULTS_DIR}" checkFile results.yaml "${RESULTS_DIR}/results.yaml" checkFile results.yaml "${RESULTS_DIR}/results.zip" info "Done." exit 0 # end