From 2041c7531c223193caa462121939016177032113 Mon Sep 17 00:00:00 2001 From: "Zheng, Qi" Date: Mon, 12 Jun 2023 10:42:58 +0800 Subject: [PATCH] [demos] Update iperf3/sysbench for benchmarks --- demos/benchmarks/iperf3/iperf3.sh | 47 +++++++++++++++++++ demos/benchmarks/iperf3/result_template.json | 14 ++++++ .../benchmarks/sysbench/result_template.json | 26 ++++++++++ demos/benchmarks/sysbench/sysbench.sh | 44 +++++++++++++++++ 4 files changed, 131 insertions(+) create mode 100755 demos/benchmarks/iperf3/iperf3.sh create mode 100644 demos/benchmarks/iperf3/result_template.json create mode 100644 demos/benchmarks/sysbench/result_template.json create mode 100755 demos/benchmarks/sysbench/sysbench.sh diff --git a/demos/benchmarks/iperf3/iperf3.sh b/demos/benchmarks/iperf3/iperf3.sh new file mode 100755 index 00000000..a759d19a --- /dev/null +++ b/demos/benchmarks/iperf3/iperf3.sh @@ -0,0 +1,47 @@ +#! /bin/bash +set -e + +CUR_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +TEST_TIME=${1:-60} +BUF_LEN=${2:-128K} +STREMS=${3:-8} + + +function iperf3_prepare() +{ + ./build.sh +} + +function iperf3_run() +{ + echo "" + echo "*** Doing iperf3 with ${STREMS} client streams in parallel ***" + echo "*** with read/write buffer length ${BUF_LEN} for ${TEST_TIME} seconds. ***" + + pushd occlum_server + occlum run /bin/iperf3 -s -p 6777 -1 1>/dev/null & + popd + + sleep 3 + + pushd occlum_client + occlum run /bin/iperf3 -c 127.0.0.1 -p 6777 -f Mbits \ + -P ${STREMS} -t ${TEST_TIME} -l ${BUF_LEN} | tee output.txt + popd +} + +function iperf3_result() +{ + output="occlum_client/output.txt" + SENDER_RES=$(grep "SUM" ${output} | grep "sender" | awk '{print $6}') + RECV_RES=$(grep "SUM" ${output} | grep "receiver" | awk '{print $6}') + + jq --argjson sender $SENDER_RES --argjson recv $RECV_RES \ + '(.[] | select(.extra == "sender") | .value) |= $sender | + (.[] | select(.extra == "receiver") | .value) |= $recv' \ + result_template.json > result.json +} + +iperf3_prepare +iperf3_run +iperf3_result diff --git a/demos/benchmarks/iperf3/result_template.json b/demos/benchmarks/iperf3/result_template.json new file mode 100644 index 00000000..f39fa005 --- /dev/null +++ b/demos/benchmarks/iperf3/result_template.json @@ -0,0 +1,14 @@ +[ + { + "name": "Sender Average Rate", + "unit": "Mbits/sec", + "value": 0, + "extra": "sender" + }, + { + "name": "Receiver Average Rate", + "unit": "Mbits/sec", + "value": 0, + "extra": "receiver" + } +] \ No newline at end of file diff --git a/demos/benchmarks/sysbench/result_template.json b/demos/benchmarks/sysbench/result_template.json new file mode 100644 index 00000000..9e2c8590 --- /dev/null +++ b/demos/benchmarks/sysbench/result_template.json @@ -0,0 +1,26 @@ +[ + { + "name": "Threads Minimum latency", + "unit": "ms", + "value": 0, + "extra": "min" + }, + { + "name": "Threads Average Latency", + "unit": "ms", + "value": 0, + "extra": "avg" + }, + { + "name": "Threads Maximum Latency", + "unit": "ms", + "value": 0, + "extra": "max" + }, + { + "name": "Thread 95th Percentile Latency", + "unit": "ms", + "value": 0, + "extra": "per95" + } +] \ No newline at end of file diff --git a/demos/benchmarks/sysbench/sysbench.sh b/demos/benchmarks/sysbench/sysbench.sh new file mode 100755 index 00000000..b88b7ad2 --- /dev/null +++ b/demos/benchmarks/sysbench/sysbench.sh @@ -0,0 +1,44 @@ +#! /bin/bash +set -e + +CUR_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +TEST_TIME=${1:-60} +TEST_THREADS=${2:-200} + +function sysbench_prepare() +{ + ./dl_and_build.sh + ./prepare_sysbench.sh +} + +function sysbench_run() +{ + echo "" + echo "*** Doing sysbench with ${TEST_THREADS} threads for ${TEST_TIME} seconds ***" + + pushd occlum_instance + occlum run /bin/sysbench threads \ + --threads=${TEST_THREADS} --thread-yields=100 \ + --thread-locks=4 --time=${TEST_TIME} run | tee output.txt + popd +} + +function sysbench_result() +{ + output="occlum_instance/output.txt" + MIN=$(grep "min:" ${output} | awk '{print $NF}') + AVG=$(grep "avg:" ${output} | awk '{print $NF}') + MAX=$(grep "max:" ${output} | awk '{print $NF}') + PER95=$(grep "95th" ${output} | awk '{print $NF}') + + jq --argjson min $MIN --argjson avg $AVG --argjson max $MAX --argjson per95 $PER95 \ + '(.[] | select(.extra == "min") | .value) |= $min | + (.[] | select(.extra == "avg") | .value) |= $avg | + (.[] | select(.extra == "max") | .value) |= $max | + (.[] | select(.extra == "per95") | .value) |= $per95' \ + result_template.json > result.json +} + +sysbench_prepare +sysbench_run +sysbench_result