diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 3f0b2f58..3a4198cc 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -7,6 +7,7 @@ option(BUILD_COMPUTE_HOPS "Build the compute hops tool?" OFF) option(BUILD_DUMP_HOPS "Build the hops dump tool?" OFF) option(BUILD_FAULTSPACEPLOT "Build the faultspace plotting tool?" OFF) +option(BUILD_DATA_AGGREGATOR "Build the data aggregation tools?" OFF) ### Setup search paths for headers ## include_directories(${CMAKE_CURRENT_BINARY_DIR}/../src/core) @@ -39,3 +40,7 @@ endif(BUILD_DUMP_HOPS) if(BUILD_FAULTSPACEPLOT) add_subdirectory(analysis/faultspaceplot) endif(BUILD_FAULTSPACEPLOT) + +if(BUILD_DATA_AGGREGATOR) + add_subdirectory(analysis/data-aggregator) +endif(BUILD_DATA_AGGREGATOR) diff --git a/tools/analysis/data-aggregator/CMakeLists.txt b/tools/analysis/data-aggregator/CMakeLists.txt new file mode 100644 index 00000000..607196dc --- /dev/null +++ b/tools/analysis/data-aggregator/CMakeLists.txt @@ -0,0 +1 @@ +install(PROGRAMS resulttype-occurrences_coverage.sh resulttype-occurrences.sh symbol-occurrences_coverage.sh symbol-occurrences.sh DESTINATION bin) diff --git a/tools/analysis/data-aggregator/resulttype-occurrences.sh b/tools/analysis/data-aggregator/resulttype-occurrences.sh new file mode 100755 index 00000000..45f7f48b --- /dev/null +++ b/tools/analysis/data-aggregator/resulttype-occurrences.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -e + +if [ ! $# -eq 3 ]; then + echo "usage: $0 DATABASE VARIANT BENCHMARK" >&2 + exit 1 +fi + +DATABASE=$1 +VARIANT=$2 +BENCHMARK=$3 +# add "-t" for more readable output +MYSQL="mysql -B --quick $DATABASE" + +$MYSQL << EOT + SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; + SELECT r.resulttype, SUM((t.time2-t.time1+1) * t.width) AS occurrences + FROM result_GenericExperimentMessage r + INNER JOIN fspgroup g ON g.pilot_id=r.pilot_id + INNER JOIN trace t ON g.instr2=t.instr2 + AND g.data_address=t.data_address + AND g.variant_id=t.variant_id + INNER JOIN variant v ON t.variant_id=v.id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + GROUP BY r.resulttype + ORDER BY r.resulttype ASC; +EOT diff --git a/tools/analysis/data-aggregator/resulttype-occurrences_coverage.sh b/tools/analysis/data-aggregator/resulttype-occurrences_coverage.sh new file mode 100755 index 00000000..d173957b --- /dev/null +++ b/tools/analysis/data-aggregator/resulttype-occurrences_coverage.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +if [ ! $# -eq 3 ]; then + echo "usage: $0 DATABASE VARIANT BENCHMARK" >&2 + exit 1 +fi + +DATABASE=$1 +VARIANT=$2 +BENCHMARK=$3 +# add "-t" for more readable output +MYSQL="mysql -B --quick $DATABASE" + +$MYSQL << EOT + SET sql_mode = 'NO_UNSIGNED_SUBTRACTION'; + SELECT r.resulttype, + SUM((t.time2-t.time1+1) * t.width) + / + (SELECT SUM(t.time2-t.time1+1)*t.width + FROM result_GenericExperimentMessage r + INNER JOIN fspgroup g ON g.pilot_id=r.pilot_id + INNER JOIN trace t ON g.instr2=t.instr2 + AND g.data_address=t.data_address + AND g.variant_id=t.variant_id + INNER JOIN variant v ON t.variant_id=v.id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + ) AS coverage + FROM result_GenericExperimentMessage r + INNER JOIN fspgroup g ON g.pilot_id=r.pilot_id + INNER JOIN trace t ON g.instr2=t.instr2 + AND g.data_address=t.data_address + AND g.variant_id=t.variant_id + INNER JOIN variant v ON t.variant_id=v.id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + GROUP BY r.resulttype + ORDER BY r.resulttype ASC; +EOT diff --git a/tools/analysis/data-aggregator/symbol-occurrences.sh b/tools/analysis/data-aggregator/symbol-occurrences.sh new file mode 100755 index 00000000..c6e9a277 --- /dev/null +++ b/tools/analysis/data-aggregator/symbol-occurrences.sh @@ -0,0 +1,26 @@ +#!/bin/bash +set -e + +if [ ! $# -eq 3 ]; then + echo "usage: $0 DATABASE VARIANT BENCHMARK" >&2 + exit 1 +fi + +DATABASE=$1 +VARIANT=$2 +BENCHMARK=$3 +# add "-t" for more readable output +MYSQL="mysql -B --quick $DATABASE" + +$MYSQL << EOT + SELECT v.benchmark, v.variant, s.name, s.size, r.resulttype, SUM(t.time2-t.time1+1) AS occurrences + FROM variant v + INNER JOIN symbol s ON v.id = s.variant_id + INNER JOIN trace t ON t.variant_id = v.id AND t.data_address BETWEEN s.address AND s.address + s.size - 1 + INNER JOIN fspgroup g ON t.variant_id = g.variant_id AND t.data_address = g.data_address AND t.instr2 = g.instr2 + INNER JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + GROUP BY v.benchmark, v.variant, s.name, r.resulttype + ORDER BY v.benchmark, v.variant, s.name, r.resulttype; +EOT diff --git a/tools/analysis/data-aggregator/symbol-occurrences_coverage.sh b/tools/analysis/data-aggregator/symbol-occurrences_coverage.sh new file mode 100755 index 00000000..45a70de9 --- /dev/null +++ b/tools/analysis/data-aggregator/symbol-occurrences_coverage.sh @@ -0,0 +1,37 @@ +#!/bin/bash +set -e + +if [ ! $# -eq 3 ]; then + echo "usage: $0 DATABASE VARIANT BENCHMARK" >&2 + exit 1 +fi + +DATABASE=$1 +VARIANT=$2 +BENCHMARK=$3 +# add "-t" for more readable output +MYSQL="mysql -B --quick $DATABASE" + +$MYSQL << EOT + SELECT v.benchmark, v.variant, s.name, s.size, r.resulttype, + SUM(t.time2-t.time1+1) + / + (SELECT SUM(t.time2-t.time1+1) + FROM variant v + INNER JOIN symbol s ON v.id = s.variant_id + INNER JOIN trace t ON t.variant_id = v.id AND t.data_address BETWEEN s.address AND s.address + s.size - 1 + INNER JOIN fspgroup g ON t.variant_id = g.variant_id AND t.data_address = g.data_address AND t.instr2 = g.instr2 + INNER JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + ) AS coverage + FROM variant v + INNER JOIN symbol s ON v.id = s.variant_id + INNER JOIN trace t ON t.variant_id = v.id AND t.data_address BETWEEN s.address AND s.address + s.size - 1 + INNER JOIN fspgroup g ON t.variant_id = g.variant_id AND t.data_address = g.data_address AND t.instr2 = g.instr2 + INNER JOIN result_GenericExperimentMessage r ON r.pilot_id = g.pilot_id + WHERE v.variant="$VARIANT" + AND v.benchmark="$BENCHMARK" + GROUP BY v.benchmark, v.variant, s.name, r.resulttype + ORDER BY v.benchmark, v.variant, s.name, r.resulttype; +EOT