123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- #!/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
|