diff --git a/runtime/experiments/applications/licenseplate/.gitignore b/runtime/experiments/applications/licenseplate/.gitignore new file mode 100644 index 0000000..34cb46d --- /dev/null +++ b/runtime/experiments/applications/licenseplate/.gitignore @@ -0,0 +1 @@ +flower.jpg diff --git a/runtime/experiments/applications/licenseplate/README.md b/runtime/experiments/applications/licenseplate/README.md new file mode 100644 index 0000000..0d65cc6 --- /dev/null +++ b/runtime/experiments/applications/licenseplate/README.md @@ -0,0 +1,17 @@ +# License Plate Detection + +Draws a magenta bounding box around license plates located in an image. + +The first request seems to succeed, but subsequent requests crash out due to a socket error. + +``` +write: Bad file descriptor +C: 05, T: 0x7f3412232700, F: current_sandbox_main> + Unable to build and send client response + +C: 05, T: 0x7f3412232700, F: client_socket_send> + Error sending to client: Bad file descriptor +C: 05, T: 0x7f3412232700, F: sandbox_close_http> PANIC! + Bad file descriptor +find: ‘result_23619.jpg’: No such file or directory +``` diff --git a/runtime/experiments/applications/licenseplate/debug.sh b/runtime/experiments/applications/licenseplate/debug.sh new file mode 100755 index 0000000..a561392 --- /dev/null +++ b/runtime/experiments/applications/licenseplate/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/licenseplate/expected_result.jpg b/runtime/experiments/applications/licenseplate/expected_result.jpg new file mode 100644 index 0000000..bec5209 Binary files /dev/null and b/runtime/experiments/applications/licenseplate/expected_result.jpg differ diff --git a/runtime/experiments/applications/licenseplate/plate.jpg b/runtime/experiments/applications/licenseplate/plate.jpg new file mode 100644 index 0000000..5600926 Binary files /dev/null and b/runtime/experiments/applications/licenseplate/plate.jpg differ diff --git a/runtime/experiments/applications/licenseplate/run.sh b/runtime/experiments/applications/licenseplate/run.sh new file mode 100755 index 0000000..a4185ae --- /dev/null +++ b/runtime/experiments/applications/licenseplate/run.sh @@ -0,0 +1,54 @@ +#!/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) + +# Copy License Plate Image if not here +if [[ ! -f "./plate.jpg" ]]; then + cp ../../../tests/sod/bin/plate.jpg ./plate.jpg +fi + +if [ "$1" != "-d" ]; then + PATH="$binary_directory:$PATH" LD_LIBRARY_PATH="$binary_directory:$LD_LIBRARY_PATH" sledgert "$experiment_directory/spec.json" & + sleep 1 +else + echo "Running under gdb" +fi + +expected_size="$(find expected_result.jpg -printf "%s")" +success_count=0 +total_count=50 + +for ((i = 0; i < total_count; i++)); do + echo "$i" + ext="$RANDOM" + curl -H 'Expect:' -H "Content-Type: image/jpg" --data-binary "@plate.jpg" --output "result_$ext.jpg" localhost:10000 2>/dev/null + actual_size="$(find result_"$ext".jpg -printf "%s")" + + # echo "$result" + if [[ "$expected_size" == "$actual_size" ]]; then + echo "SUCCESS $success_count" + else + echo "FAIL" + echo "Expected Size:" + echo "$expected_size" + echo "===============================================" + echo "Actual Size:" + echo "$actual_size" + fi +done + +echo "$success_count / $total_count" + +if [ "$1" != "-d" ]; then + sleep 5 + echo -n "Running Cleanup: " + rm result_*.jpg + pkill sledgert >/dev/null 2>/dev/null + echo "[DONE]" +fi diff --git a/runtime/experiments/applications/licenseplate/spec.json b/runtime/experiments/applications/licenseplate/spec.json new file mode 100644 index 0000000..d24ab1a --- /dev/null +++ b/runtime/experiments/applications/licenseplate/spec.json @@ -0,0 +1,14 @@ +{ + "active": "yes", + "name": "lpd", + "path": "lpd_wasm.so", + "port": 10000, + "relative-deadline-us": 50000, + "argsize": 1, + "http-req-headers": [], + "http-req-content-type": "image/jpeg", + "http-req-size": 102400, + "http-resp-headers": [], + "http-resp-size": 1048576, + "http-resp-content-type": "image/jpeg" +}