mirror of
https://github.com/Luzifer/nginx-sso.git
synced 2024-12-30 01:31:18 +00:00
188 lines
4 KiB
Bash
Executable file
188 lines
4 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
rpcs=(1)
|
|
conns=(1)
|
|
warmup=10
|
|
dur=10
|
|
reqs=(1)
|
|
resps=(1)
|
|
rpc_types=(unary)
|
|
|
|
# idx[0] = idx value for rpcs
|
|
# idx[1] = idx value for conns
|
|
# idx[2] = idx value for reqs
|
|
# idx[3] = idx value for resps
|
|
# idx[4] = idx value for rpc_types
|
|
idx=(0 0 0 0 0)
|
|
idx_max=(1 1 1 1 1)
|
|
|
|
inc()
|
|
{
|
|
for i in $(seq $((${#idx[@]}-1)) -1 0); do
|
|
idx[${i}]=$((${idx[${i}]}+1))
|
|
if [ ${idx[${i}]} == ${idx_max[${i}]} ]; then
|
|
idx[${i}]=0
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
local fin
|
|
fin=1
|
|
# Check to see if we have looped back to the beginning.
|
|
for v in ${idx[@]}; do
|
|
if [ ${v} != 0 ]; then
|
|
fin=0
|
|
break
|
|
fi
|
|
done
|
|
if [ ${fin} == 1 ]; then
|
|
rm -Rf ${out_dir}
|
|
clean_and_die 0
|
|
fi
|
|
}
|
|
|
|
clean_and_die() {
|
|
rm -Rf ${out_dir}
|
|
exit $1
|
|
}
|
|
|
|
run(){
|
|
local nr
|
|
nr=${rpcs[${idx[0]}]}
|
|
local nc
|
|
nc=${conns[${idx[1]}]}
|
|
req_sz=${reqs[${idx[2]}]}
|
|
resp_sz=${resps[${idx[3]}]}
|
|
r_type=${rpc_types[${idx[4]}]}
|
|
# Following runs one benchmark
|
|
base_port=50051
|
|
delta=0
|
|
test_name="r_"${nr}"_c_"${nc}"_req_"${req_sz}"_resp_"${resp_sz}"_"${r_type}"_"$(date +%s)
|
|
echo "================================================================================"
|
|
echo ${test_name}
|
|
while :
|
|
do
|
|
port=$((${base_port}+${delta}))
|
|
|
|
# Launch the server in background
|
|
${out_dir}/server --port=${port} --test_name="Server_"${test_name}&
|
|
server_pid=$(echo $!)
|
|
|
|
# Launch the client
|
|
${out_dir}/client --port=${port} --d=${dur} --w=${warmup} --r=${nr} --c=${nc} --req=${req_sz} --resp=${resp_sz} --rpc_type=${r_type} --test_name="client_"${test_name}
|
|
client_status=$(echo $?)
|
|
|
|
kill -INT ${server_pid}
|
|
wait ${server_pid}
|
|
|
|
if [ ${client_status} == 0 ]; then
|
|
break
|
|
fi
|
|
|
|
delta=$((${delta}+1))
|
|
if [ ${delta} == 10 ]; then
|
|
echo "Continuous 10 failed runs. Exiting now."
|
|
rm -Rf ${out_dir}
|
|
clean_and_die 1
|
|
fi
|
|
done
|
|
|
|
}
|
|
|
|
set_param(){
|
|
local argname=$1
|
|
shift
|
|
local idx=$1
|
|
shift
|
|
if [ $# -eq 0 ]; then
|
|
echo "${argname} not specified"
|
|
exit 1
|
|
fi
|
|
PARAM=($(echo $1 | sed 's/,/ /g'))
|
|
if [ ${idx} -lt 0 ]; then
|
|
return
|
|
fi
|
|
idx_max[${idx}]=${#PARAM[@]}
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
-r)
|
|
shift
|
|
set_param "number of rpcs" 0 $1
|
|
rpcs=(${PARAM[@]})
|
|
shift
|
|
;;
|
|
-c)
|
|
shift
|
|
set_param "number of connections" 1 $1
|
|
conns=(${PARAM[@]})
|
|
shift
|
|
;;
|
|
-w)
|
|
shift
|
|
set_param "warm-up period" -1 $1
|
|
warmup=${PARAM}
|
|
shift
|
|
;;
|
|
-d)
|
|
shift
|
|
set_param "duration" -1 $1
|
|
dur=${PARAM}
|
|
shift
|
|
;;
|
|
-req)
|
|
shift
|
|
set_param "request size" 2 $1
|
|
reqs=(${PARAM[@]})
|
|
shift
|
|
;;
|
|
-resp)
|
|
shift
|
|
set_param "response size" 3 $1
|
|
resps=(${PARAM[@]})
|
|
shift
|
|
;;
|
|
-rpc_type)
|
|
shift
|
|
set_param "rpc type" 4 $1
|
|
rpc_types=(${PARAM[@]})
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
echo "Following are valid options:"
|
|
echo
|
|
echo "-h, --help show brief help"
|
|
echo "-w warm-up duration in seconds, default value is 10"
|
|
echo "-d benchmark duration in seconds, default value is 60"
|
|
echo ""
|
|
echo "Each of the following can have multiple comma separated values."
|
|
echo ""
|
|
echo "-r number of RPCs, default value is 1"
|
|
echo "-c number of Connections, default value is 1"
|
|
echo "-req req size in bytes, default value is 1"
|
|
echo "-resp resp size in bytes, default value is 1"
|
|
echo "-rpc_type valid values are unary|streaming, default is unary"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Incorrect option $1"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Build server and client
|
|
out_dir=$(mktemp -d oss_benchXXX)
|
|
|
|
go build -o ${out_dir}/server $GOPATH/src/google.golang.org/grpc/benchmark/server/main.go && go build -o ${out_dir}/client $GOPATH/src/google.golang.org/grpc/benchmark/client/main.go
|
|
if [ $? != 0 ]; then
|
|
clean_and_die 1
|
|
fi
|
|
|
|
|
|
while :
|
|
do
|
|
run
|
|
inc
|
|
done
|