...

Text file src/google.golang.org/grpc/benchmark/run_bench.sh

Documentation: google.golang.org/grpc/benchmark

     1#!/bin/bash
     2
     3rpcs=(1)
     4conns=(1)
     5warmup=10
     6dur=10
     7reqs=(1)
     8resps=(1)
     9rpc_types=(unary)
    10
    11# idx[0] = idx value for rpcs
    12# idx[1] = idx value for conns
    13# idx[2] = idx value for reqs
    14# idx[3] = idx value for resps
    15# idx[4] = idx value for rpc_types
    16idx=(0 0 0 0 0)
    17idx_max=(1 1 1 1 1)
    18
    19inc()
    20{
    21  for i in $(seq $((${#idx[@]}-1)) -1 0); do
    22    idx[${i}]=$((${idx[${i}]}+1))
    23    if [ ${idx[${i}]} == ${idx_max[${i}]} ]; then
    24      idx[${i}]=0
    25    else
    26      break
    27    fi
    28  done
    29  local fin
    30  fin=1
    31  # Check to see if we have looped back to the beginning.
    32  for v in ${idx[@]}; do
    33    if [ ${v} != 0 ]; then
    34      fin=0
    35      break
    36    fi
    37  done
    38  if [ ${fin} == 1 ]; then
    39    rm -Rf ${out_dir}
    40    clean_and_die 0
    41  fi
    42}
    43
    44clean_and_die() {
    45  rm -Rf ${out_dir}
    46  exit $1
    47}
    48
    49run(){
    50  local nr
    51  nr=${rpcs[${idx[0]}]}
    52  local nc
    53  nc=${conns[${idx[1]}]}
    54  req_sz=${reqs[${idx[2]}]}
    55  resp_sz=${resps[${idx[3]}]}
    56  r_type=${rpc_types[${idx[4]}]}
    57  # Following runs one benchmark
    58  base_port=50051
    59  delta=0
    60  test_name="r_"${nr}"_c_"${nc}"_req_"${req_sz}"_resp_"${resp_sz}"_"${r_type}"_"$(date +%s)
    61  echo "================================================================================"
    62  echo ${test_name}
    63  while :
    64  do
    65    port=$((${base_port}+${delta}))
    66
    67    # Launch the server in background
    68    ${out_dir}/server --port=${port} --test_name="Server_"${test_name}&
    69    server_pid=$(echo $!)
    70
    71    # Launch the client
    72    ${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}
    73    client_status=$(echo $?)
    74
    75    kill -INT ${server_pid}
    76    wait ${server_pid}
    77
    78    if [ ${client_status} == 0 ]; then
    79      break
    80    fi
    81
    82    delta=$((${delta}+1))
    83    if [ ${delta} == 10 ]; then
    84      echo "Continuous 10 failed runs. Exiting now."
    85      rm -Rf ${out_dir}
    86      clean_and_die 1
    87    fi
    88  done
    89
    90}
    91
    92set_param(){
    93  local argname=$1
    94  shift
    95  local idx=$1
    96  shift
    97  if [ $# -eq 0 ]; then
    98    echo "${argname} not specified"
    99    exit 1
   100  fi
   101  PARAM=($(echo $1 | sed 's/,/ /g'))
   102  if [ ${idx} -lt 0 ]; then
   103    return
   104  fi
   105  idx_max[${idx}]=${#PARAM[@]}
   106}
   107
   108while [ $# -gt 0 ]; do
   109  case "$1" in
   110    -r)
   111      shift
   112      set_param "number of rpcs" 0 $1
   113      rpcs=(${PARAM[@]})
   114      shift
   115      ;;
   116    -c)
   117      shift
   118      set_param "number of connections" 1 $1
   119      conns=(${PARAM[@]})
   120      shift
   121      ;;
   122    -w)
   123      shift
   124      set_param "warm-up period" -1 $1
   125      warmup=${PARAM}
   126      shift
   127      ;;
   128    -d)
   129      shift
   130      set_param "duration" -1 $1
   131      dur=${PARAM}
   132      shift
   133      ;;
   134    -req)
   135      shift
   136      set_param "request size" 2 $1
   137      reqs=(${PARAM[@]})
   138      shift
   139      ;;
   140    -resp)
   141      shift
   142      set_param "response size" 3 $1
   143      resps=(${PARAM[@]})
   144      shift
   145      ;;
   146    -rpc_type)
   147      shift
   148      set_param "rpc type" 4 $1
   149      rpc_types=(${PARAM[@]})
   150      shift
   151      ;;
   152    -h|--help)
   153      echo "Following are valid options:"
   154      echo
   155      echo "-h, --help        show brief help"
   156      echo "-w                warm-up duration in seconds, default value is 10"
   157      echo "-d                benchmark duration in seconds, default value is 60"
   158      echo ""
   159      echo "Each of the following can have multiple comma separated values."
   160      echo ""
   161      echo "-r                number of RPCs, default value is 1"
   162      echo "-c                number of Connections, default value is 1"
   163      echo "-req              req size in bytes, default value is 1"
   164      echo "-resp             resp size in bytes, default value is 1"
   165      echo "-rpc_type         valid values are unary|streaming, default is unary"
   166      exit 0
   167      ;;
   168    *)
   169      echo "Incorrect option $1"
   170      exit 1
   171      ;;
   172  esac
   173done
   174
   175# Build server and client
   176out_dir=$(mktemp -d oss_benchXXX)
   177
   178go 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
   179if [ $? != 0 ]; then
   180  clean_and_die 1
   181fi
   182
   183
   184while :
   185do
   186  run
   187  inc
   188done

View as plain text