gitee.com/ks-custle/core-gm@v0.0.0-20230922171213-b83bdd97b62c/grpc/benchmark/run_bench.sh (about)

     1  #!/bin/bash
     2  
     3  rpcs=(1)
     4  conns=(1)
     5  warmup=10
     6  dur=10
     7  reqs=(1)
     8  resps=(1)
     9  rpc_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
    16  idx=(0 0 0 0 0)
    17  idx_max=(1 1 1 1 1)
    18  
    19  inc()
    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  
    44  clean_and_die() {
    45    rm -Rf ${out_dir}
    46    exit $1
    47  }
    48  
    49  run(){
    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  
    92  set_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  
   108  while [ $# -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
   173  done
   174  
   175  # Build server and client
   176  out_dir=$(mktemp -d oss_benchXXX)
   177  
   178  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
   179  if [ $? != 0 ]; then
   180    clean_and_die 1
   181  fi
   182  
   183  
   184  while :
   185  do
   186    run
   187    inc
   188  done