You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.0 KiB
187 lines
4.0 KiB
#!/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" |
|
;; |
|
*) |
|
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
|
|
|