From 4aac09756608c49dc7b8efd383c1a428d32f99fd Mon Sep 17 00:00:00 2001 From: Sean McBride Date: Tue, 16 Mar 2021 16:07:06 -0400 Subject: [PATCH] test: Add by word experiment --- .../applications/by_word/.gitignore | 5 ++ .../applications/by_word/README.md | 7 +++ .../experiments/applications/by_word/debug.sh | 19 +++++++ .../applications/by_word/install.sh | 4 ++ .../experiments/applications/by_word/run.sh | 53 +++++++++++++++++++ .../applications/by_word/spec.json | 42 +++++++++++++++ 6 files changed, 130 insertions(+) create mode 100644 runtime/experiments/applications/by_word/.gitignore create mode 100644 runtime/experiments/applications/by_word/README.md create mode 100755 runtime/experiments/applications/by_word/debug.sh create mode 100755 runtime/experiments/applications/by_word/install.sh create mode 100755 runtime/experiments/applications/by_word/run.sh create mode 100644 runtime/experiments/applications/by_word/spec.json diff --git a/runtime/experiments/applications/by_word/.gitignore b/runtime/experiments/applications/by_word/.gitignore new file mode 100644 index 0000000..be33735 --- /dev/null +++ b/runtime/experiments/applications/by_word/.gitignore @@ -0,0 +1,5 @@ +*.pnm +*.png +*.csv +*.txt +*.log diff --git a/runtime/experiments/applications/by_word/README.md b/runtime/experiments/applications/by_word/README.md new file mode 100644 index 0000000..29a1406 --- /dev/null +++ b/runtime/experiments/applications/by_word/README.md @@ -0,0 +1,7 @@ +# OCR varied by word + +Generates pnm image files containing random words from the wamerican dictionary. + +The number of words are varied between 1, 10, 100 in order to assess how the size of text OCRed affects the execution profile of the sandbox serving the request. + +Run `install.sh` to install required tools and `run.sh` to run the tests. diff --git a/runtime/experiments/applications/by_word/debug.sh b/runtime/experiments/applications/by_word/debug.sh new file mode 100755 index 0000000..a561392 --- /dev/null +++ b/runtime/experiments/applications/by_word/debug.sh @@ -0,0 +1,19 @@ +#!/bin/bash +# Executes the runtime in GDB +# Substitutes the absolute path from the container with a path relatively derived from the location of this script +# This allows debugging outside of the Docker container +# Also disables pagination and stopping on SIGUSR1 + +experiment_directory=$(pwd) +project_directory=$(cd ../../.. && pwd) +binary_directory=$(cd "$project_directory"/bin && pwd) + +export LD_LIBRARY_PATH="$binary_directory:$LD_LIBRARY_PATH" +export PATH="$binary_directory:$PATH" + +gdb --eval-command="handle SIGUSR1 nostop" \ + --eval-command="handle SIGPIPE nostop" \ + --eval-command="set pagination off" \ + --eval-command="set substitute-path /sledge/runtime $project_directory" \ + --eval-command="run $experiment_directory/spec.json" \ + sledgert diff --git a/runtime/experiments/applications/by_word/install.sh b/runtime/experiments/applications/by_word/install.sh new file mode 100755 index 0000000..5186d30 --- /dev/null +++ b/runtime/experiments/applications/by_word/install.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Installs the deps needed for run.sh +sudo apt-get install netpbm pango1.0-tools wamerican diff --git a/runtime/experiments/applications/by_word/run.sh b/runtime/experiments/applications/by_word/run.sh new file mode 100755 index 0000000..e4a4354 --- /dev/null +++ b/runtime/experiments/applications/by_word/run.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Executes the runtime in GDB +# Substitutes the absolute path from the container with a path relatively derived from the location of this script +# This allows debugging outside of the Docker container +# Also disables pagination and stopping on SIGUSR1 + +experiment_directory=$(pwd) +project_directory=$(cd ../../.. && pwd) +binary_directory=$(cd "$project_directory"/bin && pwd) +log="$experiment_directory/log.csv" + +if [ "$1" != "-d" ]; then + SLEDGE_SANDBOX_PERF_LOG=$log PATH="$binary_directory:$PATH" LD_LIBRARY_PATH="$binary_directory:$LD_LIBRARY_PATH" sledgert "$experiment_directory/spec.json" >rt.log 2>&1 & + sleep 2 +else + echo "Running under gdb" +fi + +word_counts=(1 10 100) + +declare -A word_count_to_port +word_count_to_port["1_words.pnm"]=10000 +word_count_to_port["10_words.pnm"]=10001 +word_count_to_port["100_words.pnm"]=10002 + +total_count=100 + +for ((i = 0; i < total_count; i++)); do + echo "$i" + + for word_count in "${word_counts[@]}"; do + echo "${word_count}"_words.pnm + words="$(shuf -n"$word_count" /usr/share/dict/american-english)" + pango-view --font=mono -qo "$word_count"_words.png -t "$words" + pngtopnm "$word_count"_words.png >"$word_count"_words.pnm + + result=$(curl -H 'Expect:' -H "Content-Type: text/plain" --data-binary @"${word_count}"_words.pnm localhost:${word_count_to_port["$word_count"_words.pnm]} 2>/dev/null) + + diff -ywBZE --suppress-common-lines <(echo "$words") <(echo "$result") + echo "===============================================" + done + +done + +if [ "$1" != "-d" ]; then + sleep 2 + echo -n "Running Cleanup: " + rm ./*.png ./*.pnm + pkill --signal sigterm sledgert >/dev/null 2>/dev/null + sleep 2 + pkill sledgert -9 >/dev/null 2>/dev/null + echo "[DONE]" +fi diff --git a/runtime/experiments/applications/by_word/spec.json b/runtime/experiments/applications/by_word/spec.json new file mode 100644 index 0000000..f820aaf --- /dev/null +++ b/runtime/experiments/applications/by_word/spec.json @@ -0,0 +1,42 @@ +{ + "active": "yes", + "name": "gocr_1_word", + "path": "gocr_wasm.so", + "port": 10000, + "relative-deadline-us": 50000000000, + "argsize": 1, + "http-req-headers": [], + "http-req-content-type": "text/plain", + "http-req-size": 5335057, + "http-resp-headers": [], + "http-resp-size": 5335057, + "http-resp-content-type": "text/plain" +}, +{ + "active": "yes", + "name": "gocr_10_words", + "path": "gocr_wasm.so", + "port": 10001, + "relative-deadline-us": 50000000000, + "argsize": 1, + "http-req-headers": [], + "http-req-content-type": "text/plain", + "http-req-size": 5335057, + "http-resp-headers": [], + "http-resp-size": 5335057, + "http-resp-content-type": "text/plain" +}, +{ + "active": "yes", + "name": "gocr_100_words", + "path": "gocr_wasm.so", + "port": 10002, + "relative-deadline-us": 50000000000, + "argsize": 1, + "http-req-headers": [], + "http-req-content-type": "text/plain", + "http-req-size": 5335057, + "http-resp-headers": [], + "http-resp-size": 5335057, + "http-resp-content-type": "text/plain" +}