From ae9f53c58142de0fc23420b6b6a12b5957315263 Mon Sep 17 00:00:00 2001
From: David Georg Reichelt <davidgeorg_reichelt@dagere.de>
Date: Wed, 14 Jul 2021 17:57:06 +0200
Subject: [PATCH] Initial version of opentelemetry benchmarking

---
 .gitignore                            |   2 +
 benchmark/build.gradle                |   5 ++
 frameworks/opentelemetry/benchmark.sh | 118 ++++++++++++++++++++++++++
 3 files changed, 125 insertions(+)
 create mode 100755 frameworks/opentelemetry/benchmark.sh

diff --git a/.gitignore b/.gitignore
index 1d6b43c..1588a01 100644
--- a/.gitignore
+++ b/.gitignore
@@ -19,6 +19,8 @@ frameworks/SPASSmeter/tmp/
 frameworks/SPASSmeter/MooBench.jar
 frameworks/inspectIT/inspectit.log
 frameworks/inspectIT/MooBench.jar
+frameworks/opentelemetry/opentelemetry.log
+frameworks/opentelemetry/tmp/
 
 frameworks/Kieker/scripts/kieker-1.15-SNAPSHOT.jar
 frameworks/Kieker/scripts/compile-results/
diff --git a/benchmark/build.gradle b/benchmark/build.gradle
index d98d96f..39314f8 100644
--- a/benchmark/build.gradle
+++ b/benchmark/build.gradle
@@ -28,4 +28,9 @@ task copyJarToBin(type:Copy,dependsOn:[jar]) {
      into "../frameworks/SPASSmeter/"
      rename('benchmark.jar', 'MooBench.jar')
     }
+    copy {
+     from jar
+     into "../frameworks/opentelemetry/"
+     rename('benchmark.jar', 'MooBench.jar')
+    }
 }
\ No newline at end of file
diff --git a/frameworks/opentelemetry/benchmark.sh b/frameworks/opentelemetry/benchmark.sh
new file mode 100755
index 0000000..a5fb718
--- /dev/null
+++ b/frameworks/opentelemetry/benchmark.sh
@@ -0,0 +1,118 @@
+#!/bin/bash
+# This file is configured for linux instead of solaris!!!
+
+JAVABIN=""
+
+RSCRIPTDIR=r/
+BASEDIR=./
+RESULTSDIR="${BASEDIR}tmp/results-opentelemetry/"
+
+SLEEPTIME=30           ## 30
+NUM_LOOPS=10           ## 10
+THREADS=1              ## 1
+RECURSIONDEPTH=10      ## 10
+TOTALCALLS=2000000     ## 2000000
+METHODTIME=0      ## 500000
+
+#MOREPARAMS="--quickstart"
+MOREPARAMS="--application moobench.application.MonitoredClassSimple ${MOREPARAMS}"
+
+TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS}  \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} `
+echo "Experiment will take circa ${TIME} seconds."
+
+echo "Removing and recreating '$RESULTSDIR'"
+(rm -rf ${RESULTSDIR}) && mkdir -p ${RESULTSDIR}
+#mkdir ${RESULTSDIR}stat/
+
+# Clear opentelemetry.log and initialize logging
+rm -f ${BASEDIR}opentelemetry.log
+touch ${BASEDIR}opentelemetry.log
+
+RAWFN="${RESULTSDIR}raw"
+
+JAVAARGS="-server"
+JAVAARGS="${JAVAARGS} "
+JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G"
+JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation"
+#JAVAARGS="${JAVAARGS} -XX:+PrintInlining"
+#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation"
+#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE"
+JAR="-jar MooBench.jar"
+
+JAVAARGS_NOINSTR="${JAVAARGS}"
+JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}lib/opentelemetry-javaagent-all.jar"
+JAVAARGS_LTW_ASM="${JAVAARGS_LTW} -Dspass-meter.iFactory=de.uni_hildesheim.sse.monitoring.runtime.instrumentation.asmTree.Factory"
+
+
+## Write configuration
+uname -a >${RESULTSDIR}configuration.txt
+${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt
+echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt
+echo "" >>${RESULTSDIR}configuration.txt
+echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt
+echo "" >>${RESULTSDIR}configuration.txt
+echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt
+echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt
+echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt
+echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt
+echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt
+echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt
+sync
+
+## Execute Benchmark
+for ((i=1;i<=${NUM_LOOPS};i+=1)); do
+    j=${RECURSIONDEPTH}
+    k=0
+    echo "## Starting iteration ${i}/${NUM_LOOPS}"
+    echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}opentelemetry.log
+
+    # No instrumentation
+    k=`expr ${k} + 1`
+    echo " # ${i}.${j}.${k} No instrumentation"
+    echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}opentelemetry.log
+    #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
+    ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \
+        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
+        --total-calls ${TOTALCALLS} \
+        --method-time ${METHODTIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${j} \
+        ${MOREPARAMS}
+    #kill %sar
+    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
+    echo >>${BASEDIR}opentelemetry.log
+    echo >>${BASEDIR}opentelemetry.log
+    sync
+    sleep ${SLEEPTIME}
+
+    # OpenTelemetry Instrumentation
+    k=`expr ${k} + 1`
+    echo " # ${i}.${j}.${k} OpenTelemetry Instrumentation"
+    echo " # ${i}.${j}.${k} OpenTelemetry Instrumentation" >>${BASEDIR}opentelemetry.log
+    #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 &
+    ${JAVABIN}java ${JAVAARGS_LTW} ${JAR} \
+        --output-filename ${RAWFN}-${i}-${j}-${k}.csv \
+        --total-calls ${TOTALCALLS} \
+        --method-time ${METHODTIME} \
+        --total-threads ${THREADS} \
+        --recursion-depth ${j} \
+        ${MOREPARAMS}
+    #kill %sar
+    [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log
+    echo >>${BASEDIR}opentelemetry.log
+    echo >>${BASEDIR}opentelemetry.log
+    sync
+    sleep ${SLEEPTIME}
+
+done
+#zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat
+#rm -rf ${RESULTSDIR}stat/
+mv ${BASEDIR}opentelemetry.log ${RESULTSDIR}opentelemetry.log
+[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log
+[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR}
+
+## Clean up raw results
+#gzip -qr ${RESULTSDIR}results.zip ${RAWFN}*
+#rm -f ${RAWFN}*
+[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR}
+[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out
-- 
GitLab