Skip to content
Snippets Groups Projects
Commit 52c06296 authored by Reiner Jung's avatar Reiner Jung
Browse files

Updated python benchmark

parent 32f97c64
No related branches found
No related tags found
No related merge requests found
......@@ -55,7 +55,7 @@ if instrumentation_on:
sys.meta_path.insert(0, PostImportFinder(pattern_object, exclude_modules, empty = inactive))
else:
print('Instrumentation is off')
import moo
import monitored_application
......@@ -65,7 +65,7 @@ stop_ns = 0
timings = []
for i in range(total_calls):
start_ns = time.time_ns()
moo.monitored_method(method_time, recursion_depth)
monitored_application.monitored_method(method_time, recursion_depth)
stop_ns = time.time_ns()
timings.append(stop_ns-start_ns)
if i%100000 ==0:
......
#!/bin/bash
#
# Kieker benchmark script
#
# Usage: benchmark.sh [execute|test]
# configure base dir
BASE_DIR=$(cd "$(dirname "$0")"; pwd)
#
# source functionality
#
if [ ! -d "${BASE_DIR}" ] ; then
echo "Base directory ${BASE_DIR} does not exist."
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 "${MAIN_DIR}/frameworks/common-functions.sh" ] ; then
source "${MAIN_DIR}/frameworks/common-functions.sh"
else
echo "Missing library: ${MAIN_DIR}/frameworks/common-functions.sh"
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
#
# check command line parameters
#
if [ "$1" == "" ] ; then
MODE="execute"
else
if [ "$1" == "execute" ] ; then
MODE="execute"
else
mode="test"
fi
OPTION="$2"
fi
#
# Setup
#
info "----------------------------------"
info "Setup..."
info "----------------------------------"
cd "${BASE_DIR}"
# load agent
getAgent
# Find receiver and extract it
checkFile receiver "${RECEIVER_ARCHIVE}"
tar -xpf "${RECEIVER_ARCHIVE}"
RECEIVER_BIN="${BASE_DIR}/receiver/bin/receiver"
PARENT=`dirname "${RESULTS_DIR}"`
checkDirectory DATA_DIR "${DATA_DIR}" create
checkDirectory result-base "${PARENT}"
checkFile ApsectJ-Agent "${AGENT}"
checkExecutable Receiver "${RECEIVER_BIN}"
checkFile Labels "${BASE_DIR}/labels.sh"
checkFile R-script "${RSCRIPT_PATH}"
checkDirectory results-directory "${RESULTS_DIR}" recreate
checkFile log "${DATA_DIR}/kieker.log" clean
checkExecutable java "${JAVA_BIN}"
checkExecutable moobench "${MOOBENCH_BIN}"
checkExecutable receiver "${RECEIVER_BIN}"
checkFile aop-file "${AOP}"
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} --illegal-access=permit -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"
#
# Write configuration
#
uname -a > "${RESULTS_DIR}/configuration.txt"
"${JAVA_BIN}" "${JAVA_ARGS}" -version 2>> "${RESULTS_DIR}/configuration.txt"
cat << EOF >> "${RESULTS_DIR}/configuration.txt"
JAVA_ARGS: ${JAVA_ARGS}
Runtime: circa ${TIME} seconds
SLEEP_TIME=${SLEEP_TIME}
NUM_OF_LOOPS=${NUM_OF_LOOPS}
TOTAL_NUM_OF_CALLS=${TOTAL_NUM_OF_CALLS}
METHOD_TIME=${METHOD_TIME}
RECURSION_DEPTH=${RECURSION_DEPTH}
EOF
info "Ok"
sync
#
# Run benchmark
#
info "----------------------------------"
info "Running benchmark..."
info "----------------------------------"
if [ "$MODE" == "execute" ] ; then
if [ "$OPTION" == "" ] ; then
executeBenchmark
else
executeBenchmarkBody $OPTION 1 1
fi
# Create R labels
LABELS=$(createRLabels)
runStatistics
cleanupResults
else
executeBenchmarkBody $OPTION 1 1
fi
info "Done."
# end
# Kieker specific functions
# ensure the script is sourced
if [ "${BASH_SOURCE[0]}" -ef "$0" ]
then
echo "Hey, you should source this script, not execute it!"
exit 1
fi
function getAgent() {
info "Checking whether Kieker is present in ${AGENT}"
if [ ! -f "${AGENT}" ] ; then
# get agent
export VERSION_PATH=`curl "https://oss.sonatype.org/service/local/repositories/snapshots/content/net/kieker-monitoring/kieker/" | grep '<resourceURI>' | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | grep '/$' | grep -v ".xml" | head -n 1`
export AGENT_PATH=`curl "${VERSION_PATH}" | grep 'aspectj.jar</resourceURI' | sort | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | tail -1`
curl "${AGENT_PATH}" > "${AGENT}"
if [ ! -f "${AGENT}" ] || [ -s "${AGENT}" ] ; then
error "Kieker download from $AGENT_PATH failed; please asure that a correct Kieker AspectJ file is present!"
fi
fi
}
# experiment setups
#################################
# function: execute an experiment
#
# $1 = i iterator
# $2 = j iterator
# $3 = k iterator
# $4 = title
# $5 = writer parameters
function executeExperiment() {
loop="$1"
recursion="$2"
index="$3"
title="$4"
kieker_parameters="$5"
info " # ${loop}.${recursion}.${index} ${title}"
echo " # ${loop}.${recursion}.${index} ${title}" >> "${DATA_DIR}/kieker.log"
if [ "${kieker_parameters}" == "" ] ; then
export BENCHMARK_OPTS="${JAVA_ARGS}"
else
export BENCHMARK_OPTS="${JAVA_ARGS} ${LTW_ARGS} ${KIEKER_ARGS} ${kieker_parameters}"
fi
debug "Run options: ${BENCHMARK_OPTS}"
"${MOOBENCH_BIN}" \
--application moobench.application.MonitoredClassSimple \
--output-filename "${RAWFN}-${loop}-${recursion}-${index}.csv" \
--total-calls "${TOTAL_NUM_OF_CALLS}" \
--method-time "${METHOD_TIME}" \
--total-threads 1 \
--recursion-depth "${recursion}" &> "${RESULTS_DIR}/output_${loop}_${RECURSION_DEPTH}_${index}.txt"
rm -rf "${DATA_DIR}"/kieker-*
[ -f "${DATA_DIR}/hotspot.log" ] && mv "${DATA_DIR}/hotspot.log" "${RESULTS_DIR}/hotspot-${loop}-${recursion}-${index}.log"
echo >> "${DATA_DIR}/kieker.log"
echo >> "${DATA_DIR}/kieker.log"
sync
sleep "${SLEEP_TIME}"
}
function executeBenchmarkBody() {
index="$1"
loop="$2"
recursion="$3"
if [[ "${RECEIVER[$index]}" ]] ; then
debug "receiver ${RECEIVER[$index]}"
${RECEIVER[$index]} >> "${DATA_DIR}/kieker.receiver-${loop}-${index}.log" &
RECEIVER_PID=$!
debug "PID ${RECEIVER_PID}"
fi
executeExperiment "$loop" "$recursion" "$index" "${TITLE[$index]}" "${WRITER_CONFIG[$index]}"
if [[ "${RECEIVER_PID}" ]] ; then
kill -TERM "${RECEIVER_PID}"
unset RECEIVER_PID
fi
}
## Execute Benchmark
function executeBenchmark() {
for ((loop=1;loop<="${NUM_OF_LOOPS}";loop+=1)); do
recursion="${RECURSION_DEPTH}"
info "## Starting iteration ${loop}/${NUM_OF_LOOPS}"
echo "## Starting iteration ${loop}/${NUM_OF_LOOPS}" >> "${DATA_DIR}/kieker.log"
for ((index=0;index<${#WRITER_CONFIG[@]};index+=1)); do
executeBenchmarkBody $index $loop $recursion
done
printIntermediaryResults
done
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}/log.log"
[ -f "${DATA_DIR}/errorlog.txt" ] && mv "${DATA_DIR}/errorlog.txt" "${RESULTS_DIR}"
}
# end
TITLE[0]="No instrumentation"
TITLE[1]="Deactivated probe"
TITLE[2]="No logging (null writer)"
TITLE[3]="Logging (Generic Text)"
TITLE[4]="Logging (TCP)"
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment