mirror of https://github.com/grpc/grpc-go.git
				
				
				
			
		
			
				
	
	
		
			189 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			4.0 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
 |